/* Minification failed. Returning unminified contents.
(2609,61-62): run-time error JS1195: Expected expression: >
(2610,37-38): run-time error JS1014: Invalid character: `
(2610,38-39): run-time error JS1014: Invalid character: #
(2610,40-41): run-time error JS1193: Expected ',' or ')': {
(2610,52-53): run-time error JS1014: Invalid character: `
(2610,53-54): run-time error JS1195: Expected expression: )
(2622,13-14): run-time error JS1002: Syntax error: }
(2628,32-33): run-time error JS1195: Expected expression: >
(2645,9-10): run-time error JS1002: Syntax error: }
(2648,29-30): run-time error JS1004: Expected ';': {
(2690,5-6): run-time error JS1002: Syntax error: }
(2692,46-47): run-time error JS1004: Expected ';': {
(2727,53-54): run-time error JS1100: Expected ',': =
(2728,21-22): run-time error JS1195: Expected expression: )
(2728,24-25): run-time error JS1195: Expected expression: >
(2755,10-11): run-time error JS1195: Expected expression: ,
(3031,54-55): run-time error JS1100: Expected ',': =
(6229,34-35): run-time error JS1014: Invalid character: `
(6229,35-36): run-time error JS1195: Expected expression: <
(6229,116-117): run-time error JS1195: Expected expression: <
(6229,265-266): run-time error JS1197: Too many errors. The file might not be a JavaScript file: >
(6224,9-48): run-time error JS1301: End of file encountered before function is properly closed: function displayFileName(target, files)
(6229,267-268): run-time error JS1004: Expected ';': {
(6229,283-284): run-time error JS1195: Expected expression: <
(6229,284-285): run-time error JS1197: Too many errors. The file might not be a JavaScript file: /
(4889,5-20): run-time error JS1301: End of file encountered before function is properly closed: function init()
(6229,292-293): run-time error JS1014: Invalid character: `
(6229,293-294): run-time error JS1195: Expected expression: )
(6229,294-295): run-time error JS1197: Too many errors. The file might not be a JavaScript file: ;
(2689,9-20): run-time error JS1018: 'return' statement outside of function: return true
(2680,13-25): run-time error JS1018: 'return' statement outside of function: return false
(2674,21-33): run-time error JS1018: 'return' statement outside of function: return false
(2643,17-29): run-time error JS1018: 'return' statement outside of function: return false
(2616,21-33): run-time error JS1018: 'return' statement outside of function: return false
(2620,21-32): run-time error JS1018: 'return' statement outside of function: return true
 */
/*!
** Unobtrusive Ajax support library for jQuery
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
(function(n){function i(n,t){for(var i=window,r=(n||"").split(".");i&&r.length;)i=i[r.shift()];return typeof i=="function"?i:(t.push(n),Function.constructor.apply(null,t))}function u(n){return n==="GET"||n==="POST"}function o(n,t){u(t)||n.setRequestHeader("X-HTTP-Method-Override",t)}function s(t,i,r){var u;r.indexOf("application/x-javascript")===-1&&(u=(t.getAttribute("data-ajax-mode")||"").toUpperCase(),n(t.getAttribute("data-ajax-update")).each(function(t,r){var f;switch(u){case"BEFORE":f=r.firstChild;n("<div />").html(i).contents().each(function(){r.insertBefore(this,f)});break;case"AFTER":n("<div />").html(i).contents().each(function(){r.appendChild(this)});break;case"REPLACE-WITH":n(r).replaceWith(i);break;default:n(r).html(i)}}))}function f(t,r){var e,h,f,c;(e=t.getAttribute("data-ajax-confirm"),!e||window.confirm(e))&&(h=n(t.getAttribute("data-ajax-loading")),c=parseInt(t.getAttribute("data-ajax-loading-duration"),10)||0,n.extend(r,{type:t.getAttribute("data-ajax-method")||undefined,url:t.getAttribute("data-ajax-url")||undefined,cache:!!t.getAttribute("data-ajax-cache"),beforeSend:function(n){var r;return o(n,f),r=i(t.getAttribute("data-ajax-begin"),["xhr"]).apply(t,arguments),r!==!1&&h.show(c),r},complete:function(){h.hide(c);i(t.getAttribute("data-ajax-complete"),["xhr","status"]).apply(t,arguments)},success:function(n,r,u){s(t,n,u.getResponseHeader("Content-Type")||"text/html");i(t.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(t,arguments)},error:function(){i(t.getAttribute("data-ajax-failure"),["xhr","status","error"]).apply(t,arguments)}}),r.data.push({name:"X-Requested-With",value:"XMLHttpRequest"}),f=r.type.toUpperCase(),u(f)||(r.type="POST",r.data.push({name:"X-HTTP-Method-Override",value:f})),n.ajax(r))}function h(t){var i=n(t).data(e);return!i||!i.validate||i.validate()}var t="unobtrusiveAjaxClick",r="unobtrusiveAjaxClickTarget",e="unobtrusiveValidation";n(document).on("click","a[data-ajax=true]",function(n){n.preventDefault();f(this,{url:this.href,type:"GET",data:[]})});n(document).on("click","form[data-ajax=true] input[type=image]",function(i){var r=i.target.name,u=n(i.target),f=n(u.parents("form")[0]),e=u.offset();f.data(t,[{name:r+".x",value:Math.round(i.pageX-e.left)},{name:r+".y",value:Math.round(i.pageY-e.top)}]);setTimeout(function(){f.removeData(t)},0)});n(document).on("click","form[data-ajax=true] :submit",function(i){var f=i.currentTarget.name,e=n(i.target),u=n(e.parents("form")[0]);u.data(t,f?[{name:f,value:i.currentTarget.value}]:[]);u.data(r,e);setTimeout(function(){u.removeData(t);u.removeData(r)},0)});n(document).on("submit","form[data-ajax=true]",function(i){var e=n(this).data(t)||[],u=n(this).data(r),o=u&&u.hasClass("cancel");(i.preventDefault(),o||h(this))&&f(this,{url:this.action,type:this.method||"GET",data:e.concat(n(this).serializeArray())})})})(jQuery);
//# sourceMappingURL=jquery.unobtrusive-ajax.min.js.map;
/*!
 * jQuery Validation Plugin v1.13.0
 *
 * http://jqueryvalidation.org/
 *
 * Copyright (c) 2014 Jörn Zaefferer
 * Released under the MIT license
 */
(function(n){typeof define=="function"&&define.amd?define(["jquery"],n):n(jQuery)})(function(n){n.extend(n.fn,{validate:function(t){if(!this.length){t&&t.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.");return}var i=n.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new n.validator(t,this[0]),n.data(this[0],"validator",i),i.settings.onsubmit&&(this.validateDelegate(":submit","click",function(t){i.settings.submitHandler&&(i.submitButton=t.target);n(t.target).hasClass("cancel")&&(i.cancelSubmit=!0);n(t.target).attr("formnovalidate")!==undefined&&(i.cancelSubmit=!0)}),this.submit(function(t){function r(){var r;return i.settings.submitHandler?(i.submitButton&&(r=n("<input type='hidden'/>").attr("name",i.submitButton.name).val(n(i.submitButton).val()).appendTo(i.currentForm)),i.settings.submitHandler.call(i,i.currentForm,t),i.submitButton&&r.remove(),!1):!0}return(i.settings.debug&&t.preventDefault(),i.cancelSubmit)?(i.cancelSubmit=!1,r()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):r():(i.focusInvalid(),!1)})),i)},valid:function(){var t,i;return n(this[0]).is("form")?t=this.validate().form():(t=!0,i=n(this[0].form).validate(),this.each(function(){t=i.element(this)&&t})),t},removeAttrs:function(t){var i={},r=this;return n.each(t.split(/\s/),function(n,t){i[t]=r.attr(t);r.removeAttr(t)}),i},rules:function(t,i){var r=this[0],e,s,f,u,o,h;if(t){e=n.data(r.form,"validator").settings;s=e.rules;f=n.validator.staticRules(r);switch(t){case"add":n.extend(f,n.validator.normalizeRule(i));delete f.messages;s[r.name]=f;i.messages&&(e.messages[r.name]=n.extend(e.messages[r.name],i.messages));break;case"remove":return i?(h={},n.each(i.split(/\s/),function(t,i){h[i]=f[i];delete f[i];i==="required"&&n(r).removeAttr("aria-required")}),h):(delete s[r.name],f)}}return u=n.validator.normalizeRules(n.extend({},n.validator.classRules(r),n.validator.attributeRules(r),n.validator.dataRules(r),n.validator.staticRules(r)),r),u.required&&(o=u.required,delete u.required,u=n.extend({required:o},u),n(r).attr("aria-required","true")),u.remote&&(o=u.remote,delete u.remote,u=n.extend(u,{remote:o})),u}});n.extend(n.expr[":"],{blank:function(t){return!n.trim(""+n(t).val())},filled:function(t){return!!n.trim(""+n(t).val())},unchecked:function(t){return!n(t).prop("checked")}});n.validator=function(t,i){this.settings=n.extend(!0,{},n.validator.defaults,t);this.currentForm=i;this.init()};n.validator.format=function(t,i){return arguments.length===1?function(){var i=n.makeArray(arguments);return i.unshift(t),n.validator.format.apply(this,i)}:(arguments.length>2&&i.constructor!==Array&&(i=n.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),n.each(i,function(n,i){t=t.replace(new RegExp("\\{"+n+"\\}","g"),function(){return i})}),t)};n.extend(n.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:n([]),errorLabelContainer:n([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(n){this.lastActive=n;this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,n,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(n)))},onfocusout:function(n){!this.checkable(n)&&(n.name in this.submitted||!this.optional(n))&&this.element(n)},onkeyup:function(n,t){(t.which!==9||this.elementValue(n)!=="")&&(n.name in this.submitted||n===this.lastElement)&&this.element(n)},onclick:function(n){n.name in this.submitted?this.element(n):n.parentNode.name in this.submitted&&this.element(n.parentNode)},highlight:function(t,i,r){t.type==="radio"?this.findByName(t.name).addClass(i).removeClass(r):n(t).addClass(i).removeClass(r)},unhighlight:function(t,i,r){t.type==="radio"?this.findByName(t.name).removeClass(i).addClass(r):n(t).removeClass(i).addClass(r)}},setDefaults:function(t){n.extend(n.validator.defaults,t)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:n.validator.format("Please enter no more than {0} characters."),minlength:n.validator.format("Please enter at least {0} characters."),rangelength:n.validator.format("Please enter a value between {0} and {1} characters long."),range:n.validator.format("Please enter a value between {0} and {1}."),max:n.validator.format("Please enter a value less than or equal to {0}."),min:n.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function i(t){var r=n.data(this[0].form,"validator"),u="on"+t.type.replace(/^validate/,""),i=r.settings;i[u]&&!this.is(i.ignore)&&i[u].call(r,this[0],t)}this.labelContainer=n(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||n(this.currentForm);this.containers=n(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var r=this.groups={},t;n.each(this.settings.groups,function(t,i){typeof i=="string"&&(i=i.split(/\s/));n.each(i,function(n,i){r[i]=t})});t=this.settings.rules;n.each(t,function(i,r){t[i]=n.validator.normalizeRule(r)});n(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']","focusin focusout keyup",i).validateDelegate("select, option, [type='radio'], [type='checkbox']","click",i);this.settings.invalidHandler&&n(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);n(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),n.extend(this.submitted,this.errorMap),this.invalid=n.extend({},this.errorMap),this.valid()||n(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var n=0,t=this.currentElements=this.elements();t[n];n++)this.check(t[n]);return this.valid()},element:function(t){var u=this.clean(t),i=this.validationTargetFor(u),r=!0;return this.lastElement=i,i===undefined?delete this.invalid[u.name]:(this.prepareElement(i),this.currentElements=n(i),r=this.check(i)!==!1,r?delete this.invalid[i.name]:this.invalid[i.name]=!0),n(t).attr("aria-invalid",!r),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),r},showErrors:function(t){if(t){n.extend(this.errorMap,t);this.errorList=[];for(var i in t)this.errorList.push({message:t[i],element:this.findByName(i)[0]});this.successList=n.grep(this.successList,function(n){return!(n.name in t)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){n.fn.resetForm&&n(this.currentForm).resetForm();this.submitted={};this.lastElement=null;this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass).removeData("previousValue").removeAttr("aria-invalid")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(n){var t=0;for(var i in n)t++;return t},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(n){n.not(this.containers).text("");this.addWrapper(n).hide()},valid:function(){return this.size()===0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{n(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(t){}},findLastActive:function(){var t=this.lastActive;return t&&n.grep(this.errorList,function(n){return n.element.name===t.name}).length===1&&t},elements:function(){var t=this,i={};return n(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return(!this.name&&t.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in i||!t.objectLength(n(this).rules()))?!1:(i[this.name]=!0,!0)})},clean:function(t){return n(t)[0]},errors:function(){var t=this.settings.errorClass.split(" ").join(".");return n(this.settings.errorElement+"."+t,this.errorContext)},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=n([]);this.toHide=n([]);this.currentElements=n([])},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers)},prepareElement:function(n){this.reset();this.toHide=this.errorsFor(n)},elementValue:function(t){var i,u=n(t),r=t.type;return r==="radio"||r==="checkbox"?n("input[name='"+t.name+"']:checked").val():r==="number"&&typeof t.validity!="undefined"?t.validity.badInput?!1:u.val():(i=u.val(),typeof i=="string")?i.replace(/\r/g,""):i},check:function(t){t=this.validationTargetFor(this.clean(t));var i=n(t).rules(),s=n.map(i,function(n,t){return t}).length,e=!1,h=this.elementValue(t),r,u,f;for(u in i){f={method:u,parameters:i[u]};try{if(r=n.validator.methods[u].call(this,h,t,f.parameters),r==="dependency-mismatch"&&s===1){e=!0;continue}if(e=!1,r==="pending"){this.toHide=this.toHide.not(this.errorsFor(t));return}if(!r)return this.formatAndAdd(t,f),!1}catch(o){this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+t.id+", check the '"+f.method+"' method.",o);throw o;}}if(!e)return this.objectLength(i)&&this.successList.push(t),!0},customDataMessage:function(t,i){return n(t).data("msg"+i.charAt(0).toUpperCase()+i.substring(1).toLowerCase())||n(t).data("msg")},customMessage:function(n,t){var i=this.settings.messages[n];return i&&(i.constructor===String?i:i[t])},findDefined:function(){for(var n=0;n<arguments.length;n++)if(arguments[n]!==undefined)return arguments[n];return undefined},defaultMessage:function(t,i){return this.findDefined(this.customMessage(t.name,i),this.customDataMessage(t,i),!this.settings.ignoreTitle&&t.title||undefined,n.validator.messages[i],"<strong>Warning: No message defined for "+t.name+"<\/strong>")},formatAndAdd:function(t,i){var r=this.defaultMessage(t,i.method),u=/\$?\{(\d+)\}/g;typeof r=="function"?r=r.call(this,i.parameters,t):u.test(r)&&(r=n.validator.format(r.replace(u,"{$1}"),i.parameters));this.errorList.push({message:r,element:t,method:i.method});this.errorMap[t.name]=r;this.submitted[t.name]=r},addWrapper:function(n){return this.settings.wrapper&&(n=n.add(n.parent(this.settings.wrapper))),n},defaultShowErrors:function(){for(var i,t,n=0;this.errorList[n];n++)t=this.errorList[n],this.settings.highlight&&this.settings.highlight.call(this,t.element,this.settings.errorClass,this.settings.validClass),this.showLabel(t.element,t.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(n=0;this.successList[n];n++)this.showLabel(this.successList[n]);if(this.settings.unhighlight)for(n=0,i=this.validElements();i[n];n++)this.settings.unhighlight.call(this,i[n],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return n(this.errorList).map(function(){return this.element})},showLabel:function(t,i){var u,o,e,r=this.errorsFor(t),s=this.idOrName(t),f=n(t).attr("aria-describedby");r.length?(r.removeClass(this.settings.validClass).addClass(this.settings.errorClass),r.html(i)):(r=n("<"+this.settings.errorElement+">").attr("id",s+"-error").addClass(this.settings.errorClass).html(i||""),u=r,this.settings.wrapper&&(u=r.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(u):this.settings.errorPlacement?this.settings.errorPlacement(u,n(t)):u.insertAfter(t),r.is("label")?r.attr("for",s):r.parents("label[for='"+s+"']").length===0&&(e=r.attr("id"),f?f.match(new RegExp("\\b"+e+"\\b"))||(f+=" "+e):f=e,n(t).attr("aria-describedby",f),o=this.groups[t.name],o&&n.each(this.groups,function(t,i){i===o&&n("[name='"+t+"']",this.currentForm).attr("aria-describedby",r.attr("id"))})));!i&&this.settings.success&&(r.text(""),typeof this.settings.success=="string"?r.addClass(this.settings.success):this.settings.success(r,t));this.toShow=this.toShow.add(r)},errorsFor:function(t){var r=this.idOrName(t),u=n(t).attr("aria-describedby"),i="label[for='"+r+"'], label[for='"+r+"'] *";return u&&(i=i+", #"+u.replace(/\s+/g,", #")),this.errors().filter(i)},idOrName:function(n){return this.groups[n.name]||(this.checkable(n)?n.name:n.id||n.name)},validationTargetFor:function(n){return this.checkable(n)&&(n=this.findByName(n.name).not(this.settings.ignore)[0]),n},checkable:function(n){return/radio|checkbox/i.test(n.type)},findByName:function(t){return n(this.currentForm).find("[name='"+t+"']")},getLength:function(t,i){switch(i.nodeName.toLowerCase()){case"select":return n("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return t.length},depend:function(n,t){return this.dependTypes[typeof n]?this.dependTypes[typeof n](n,t):!0},dependTypes:{boolean:function(n){return n},string:function(t,i){return!!n(t,i.form).length},"function":function(n,t){return n(t)}},optional:function(t){var i=this.elementValue(t);return!n.validator.methods.required.call(this,i,t)&&"dependency-mismatch"},startRequest:function(n){this.pending[n.name]||(this.pendingRequest++,this.pending[n.name]=!0)},stopRequest:function(t,i){this.pendingRequest--;this.pendingRequest<0&&(this.pendingRequest=0);delete this.pending[t.name];i&&this.pendingRequest===0&&this.formSubmitted&&this.form()?(n(this.currentForm).submit(),this.formSubmitted=!1):!i&&this.pendingRequest===0&&this.formSubmitted&&(n(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(t){return n.data(t,"previousValue")||n.data(t,"previousValue",{old:null,valid:!0,message:this.defaultMessage(t,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(t,i){t.constructor===String?this.classRuleSettings[t]=i:n.extend(this.classRuleSettings,t)},classRules:function(t){var i={},r=n(t).attr("class");return r&&n.each(r.split(" "),function(){this in n.validator.classRuleSettings&&n.extend(i,n.validator.classRuleSettings[this])}),i},attributeRules:function(t){var u={},e=n(t),f=t.getAttribute("type"),r,i;for(r in n.validator.methods)r==="required"?(i=t.getAttribute(r),i===""&&(i=!0),i=!!i):i=e.attr(r),/min|max/.test(r)&&(f===null||/number|range|text/.test(f))&&(i=Number(i)),i||i===0?u[r]=i:f===r&&f!=="range"&&(u[r]=!0);return u.maxlength&&/-1|2147483647|524288/.test(u.maxlength)&&delete u.maxlength,u},dataRules:function(t){var i,r,u={},f=n(t);for(i in n.validator.methods)r=f.data("rule"+i.charAt(0).toUpperCase()+i.substring(1).toLowerCase()),r!==undefined&&(u[i]=r);return u},staticRules:function(t){var i={},r=n.data(t.form,"validator");return r.settings.rules&&(i=n.validator.normalizeRule(r.settings.rules[t.name])||{}),i},normalizeRules:function(t,i){return n.each(t,function(r,u){if(u===!1){delete t[r];return}if(u.param||u.depends){var f=!0;switch(typeof u.depends){case"string":f=!!n(u.depends,i.form).length;break;case"function":f=u.depends.call(i,i)}f?t[r]=u.param!==undefined?u.param:!0:delete t[r]}}),n.each(t,function(r,u){t[r]=n.isFunction(u)?u(i):u}),n.each(["minlength","maxlength"],function(){t[this]&&(t[this]=Number(t[this]))}),n.each(["rangelength","range"],function(){var i;t[this]&&(n.isArray(t[this])?t[this]=[Number(t[this][0]),Number(t[this][1])]:typeof t[this]=="string"&&(i=t[this].replace(/[\[\]]/g,"").split(/[\s,]+/),t[this]=[Number(i[0]),Number(i[1])]))}),n.validator.autoCreateRanges&&(t.min&&t.max&&(t.range=[t.min,t.max],delete t.min,delete t.max),t.minlength&&t.maxlength&&(t.rangelength=[t.minlength,t.maxlength],delete t.minlength,delete t.maxlength)),t},normalizeRule:function(t){if(typeof t=="string"){var i={};n.each(t.split(/\s/),function(){i[this]=!0});t=i}return t},addMethod:function(t,i,r){n.validator.methods[t]=i;n.validator.messages[t]=r!==undefined?r:n.validator.messages[t];i.length<3&&n.validator.addClassRules(t,n.validator.normalizeRule(t))},methods:{required:function(t,i,r){if(!this.depend(r,i))return"dependency-mismatch";if(i.nodeName.toLowerCase()==="select"){var u=n(i).val();return u&&u.length>0}return this.checkable(i)?this.getLength(t,i)>0:n.trim(t).length>0},email:function(n,t){return this.optional(t)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(n)},url:function(n,t){return this.optional(t)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(n)},date:function(n,t){return this.optional(t)||!/Invalid|NaN/.test(new Date(n).toString())},dateISO:function(n,t){return this.optional(t)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(n)},number:function(n,t){return this.optional(t)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(n)},digits:function(n,t){return this.optional(t)||/^\d+$/.test(n)},creditcard:function(n,t){if(this.optional(t))return"dependency-mismatch";if(/[^0-9 \-]+/.test(n))return!1;var f=0,i=0,u=!1,r,e;if(n=n.replace(/\D/g,""),n.length<13||n.length>19)return!1;for(r=n.length-1;r>=0;r--)e=n.charAt(r),i=parseInt(e,10),u&&(i*=2)>9&&(i-=9),f+=i,u=!u;return f%10==0},minlength:function(t,i,r){var u=n.isArray(t)?t.length:this.getLength(n.trim(t),i);return this.optional(i)||u>=r},maxlength:function(t,i,r){var u=n.isArray(t)?t.length:this.getLength(n.trim(t),i);return this.optional(i)||u<=r},rangelength:function(t,i,r){var u=n.isArray(t)?t.length:this.getLength(n.trim(t),i);return this.optional(i)||u>=r[0]&&u<=r[1]},min:function(n,t,i){return this.optional(t)||n>=i},max:function(n,t,i){return this.optional(t)||n<=i},range:function(n,t,i){return this.optional(t)||n>=i[0]&&n<=i[1]},equalTo:function(t,i,r){var u=n(r);return this.settings.onfocusout&&u.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){n(i).valid()}),t===u.val()},remote:function(t,i,r){if(this.optional(i))return"dependency-mismatch";var f=this.previousValue(i),u,e;return(this.settings.messages[i.name]||(this.settings.messages[i.name]={}),f.originalMessage=this.settings.messages[i.name].remote,this.settings.messages[i.name].remote=f.message,r=typeof r=="string"&&{url:r}||r,f.old===t)?f.valid:(f.old=t,u=this,this.startRequest(i),e={},e[i.name]=t,n.ajax(n.extend(!0,{url:r,mode:"abort",port:"validate"+i.name,dataType:"json",data:e,context:u.currentForm,success:function(r){var o=r===!0||r==="true",s,e,h;u.settings.messages[i.name].remote=f.originalMessage;o?(h=u.formSubmitted,u.prepareElement(i),u.formSubmitted=h,u.successList.push(i),delete u.invalid[i.name],u.showErrors()):(s={},e=r||u.defaultMessage(i,"remote"),s[i.name]=f.message=n.isFunction(e)?e(t):e,u.invalid[i.name]=!0,u.showErrors(s));f.valid=o;u.stopRequest(i,o)}},r)),"pending")}}});n.format=function(){throw"$.format has been deprecated. Please use $.validator.format instead.";};var t={},i;n.ajaxPrefilter?n.ajaxPrefilter(function(n,i,r){var u=n.port;n.mode==="abort"&&(t[u]&&t[u].abort(),t[u]=r)}):(i=n.ajax,n.ajax=function(r){var f=("mode"in r?r:n.ajaxSettings).mode,u=("port"in r?r:n.ajaxSettings).port;return f==="abort"?(t[u]&&t[u].abort(),t[u]=i.apply(this,arguments),t[u]):i.apply(this,arguments)});n.extend(n.fn,{validateDelegate:function(t,i,r){return this.bind(i,function(i){var u=n(i.target);if(u.is(t))return r.apply(u,arguments)})}})});
//# sourceMappingURL=jquery.validate.min.js.map;
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
(function(n){function i(n,t,i){n.rules[t]=i;n.message&&(n.messages[t]=n.message)}function h(n){return n.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function f(n){return n.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function e(n){return n.substr(0,n.lastIndexOf(".")+1)}function o(n,t){return n.indexOf("*.")===0&&(n=n.replace("*.",t)),n}function c(t,i){var r=n(this).find("[data-valmsg-for='"+f(i[0].name)+"']"),u=r.attr("data-valmsg-replace"),e=u?n.parseJSON(u)!==!1:null;r.removeClass("field-validation-valid").addClass("field-validation-error");t.data("unobtrusiveContainer",r);e?(r.empty(),t.removeClass("input-validation-error").appendTo(r)):t.hide()}function l(t,i){var u=n(this).find("[data-valmsg-summary=true]"),r=u.find("ul");r&&r.length&&i.errorList.length&&(r.empty(),u.addClass("validation-summary-errors").removeClass("validation-summary-valid"),n.each(i.errorList,function(){n("<li />").html(this.message).appendTo(r)}));n(this).animate({scrollTop:n(this).offset().top+"px"},"fast")}function a(t){var i=t.data("unobtrusiveContainer"),r=i.attr("data-valmsg-replace"),u=r?n.parseJSON(r):null;i&&(i.addClass("field-validation-valid").removeClass("field-validation-error"),t.removeData("unobtrusiveContainer"),u&&i.empty())}function v(){var t=n(this);t.data("validator").resetForm();t.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors");t.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}function s(t){var i=n(t),f=i.data(u),s=n.proxy(v,t),e=r.unobtrusive.options||{},o=function(i,r){var u=e[i];u&&n.isFunction(u)&&u.apply(t,r)};return f||(f={options:{errorClass:e.errorClass||"input-validation-error",errorElement:e.errorElement||"span",errorPlacement:function(){c.apply(t,arguments);o("errorPlacement",arguments)},invalidHandler:function(){l.apply(t,arguments);o("invalidHandler",arguments)},messages:{},rules:{},success:function(){a.apply(t,arguments);o("success",arguments)}},attachValidation:function(){i.off("reset."+u,s).on("reset."+u,s).validate(this.options)},validate:function(){return i.validate(),i.valid()}},i.data(u,f)),f}var r=n.validator,t,u="unobtrusiveValidation";r.unobtrusive={adapters:[],parseElement:function(t,i){var u=n(t),f=u.parents("form")[0],r,e,o;f&&(r=s(f),r.options.rules[t.name]=e={},r.options.messages[t.name]=o={},n.each(this.adapters,function(){var i="data-val-"+this.name,r=u.attr(i),s={};r!==undefined&&(i+="-",n.each(this.params,function(){s[this]=u.attr(i+this)}),this.adapt({element:t,form:f,message:r,params:s,rules:e,messages:o}))}),n.extend(e,{__dummy__:!0}),i||r.attachValidation())},parse:function(t){var i=n(t),u=i.parents().addBack().filter("form").add(i.find("form")).has("[data-val=true]");i.find("[data-val=true]").each(function(){r.unobtrusive.parseElement(this,!0)});u.each(function(){var n=s(this);n&&n.attachValidation()})}};t=r.unobtrusive.adapters;t.add=function(n,t,i){return i||(i=t,t=[]),this.push({name:n,params:t,adapt:i}),this};t.addBool=function(n,t){return this.add(n,function(r){i(r,t||n,!0)})};t.addMinMax=function(n,t,r,u,f,e){return this.add(n,[f||"min",e||"max"],function(n){var f=n.params.min,e=n.params.max;f&&e?i(n,u,[f,e]):f?i(n,t,f):e&&i(n,r,e)})};t.addSingleVal=function(n,t,r){return this.add(n,[t||"val"],function(u){i(u,r||n,u.params[t])})};r.addMethod("__dummy__",function(){return!0});r.addMethod("regex",function(n,t,i){var r;return this.optional(t)?!0:(r=new RegExp(i).exec(n),r&&r.index===0&&r[0].length===n.length)});r.addMethod("nonalphamin",function(n,t,i){var r;return i&&(r=n.match(/\W/g),r=r&&r.length>=i),r});r.methods.extension?(t.addSingleVal("accept","mimtype"),t.addSingleVal("extension","extension")):t.addSingleVal("extension","extension","accept");t.addSingleVal("regex","pattern");t.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");t.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range");t.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength");t.add("equalto",["other"],function(t){var r=e(t.element.name),u=t.params.other,s=o(u,r),h=n(t.form).find(":input").filter("[name='"+f(s)+"']")[0];i(t,"equalTo",h)});t.add("required",function(n){(n.element.tagName.toUpperCase()!=="INPUT"||n.element.type.toUpperCase()!=="CHECKBOX")&&i(n,"required",!0)});t.add("remote",["url","type","additionalfields"],function(t){var r={url:t.params.url,type:t.params.type||"GET",data:{}},u=e(t.element.name);n.each(h(t.params.additionalfields||t.element.name),function(i,e){var s=o(e,u);r.data[s]=function(){return n(t.form).find(":input").filter("[name='"+f(s)+"']").val()}});i(t,"remote",r)});t.add("password",["min","nonalphamin","regex"],function(n){n.params.min&&i(n,"minlength",n.params.min);n.params.nonalphamin&&i(n,"nonalphamin",n.params.nonalphamin);n.params.regex&&i(n,"regex",n.params.regex)});n(function(){r.unobtrusive.parse(document)})})(jQuery);
//# sourceMappingURL=jquery.validate.unobtrusive.min.js.map;
/*!
 * Knockout JavaScript library v3.5.1
 * (c) The Knockout.js team - http://knockoutjs.com/
 * License: MIT (http://www.opensource.org/licenses/mit-license.php)
 */

(function() {(function(n){var A=this||(0,eval)("this"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||"undefined"===typeof jQuery||(v=jQuery);(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(A.ko={})})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d);
d=a.a.setTimeout(b,c)}}function Z(a,c){c&&"change"!==c?"beforeChange"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a="undefined"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.L=function(a,c,d){a[c]=d};a.version="3.5.1";a.b("version",
a.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1};a.a=function(){function b(a,b){for(var c in a)f.call(a,c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)f.call(b,c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var l=b[c].match(q)||[];a.a.D(d.match(q),function(b){a.a.Na(l,b,e)});b[c]=l.join(" ")}var f=Object.prototype.hasOwnProperty,g={__proto__:[]}instanceof Array,h="function"===typeof Symbol,m={},k={};m[R&&/Firefox\/2/i.test(R.userAgent)?
"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];m.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(m,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)k[b[c]]=a});var l={propertychange:!0},p=w&&function(){for(var a=3,b=w.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:n}(),q=/\S+/g,t;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],
D:function(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c,a[d],d,a)},A:"function"==typeof Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Lb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return a[d];return n},Pa:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},wc:function(b){var c=[];b&&a.a.D(b,function(b){0>a.a.A(c,b)&&c.push(b)});return c},Mb:function(a,
b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)d.push(b.call(c,a[e],e));return d},jb:function(a,b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)b.call(c,a[e],e)&&d.push(a[e]);return d},Nb:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},Na:function(b,c,d){var e=a.a.A(a.a.bc(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]=
b.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement("div"),d=0,e=b.length;d<e;d++)c.appendChild(a.oa(b[d]));return c},Ca:function(b,c){for(var d=0,e=b.length,l=[];d<e;d++){var k=b[d].cloneNode(!0);l.push(c?a.oa(k):k)}return l},va:function(b,c){a.a.Tb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},Xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],
l=e.parentNode,k=0,f=c.length;k<f;k++)l.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ua:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Zc:function(a,b){7>p?a.setAttribute("selected",b):a.selected=b},Db:function(a){return null===a||a===n?"":a.trim?
a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&&
a.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f="on"+c;b.attachEvent(f,
k);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else t||(t="function"==typeof v(b).on?"on":"bind"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===a.a.R(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if("function"==typeof w.createEvent)if("function"==
typeof b.dispatchEvent)d=w.createEvent(k[c]||"HTMLEvents"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&("object"===typeof b.classList?
(l=b.classList[d?"add":"remove"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d="";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'"]/g,function(a){return"&#"+a.charCodeAt(0)+";"});a.mergeAttributes(w.createElement("<input name='"+
c+"'/>"),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Da:function(a){return h?Symbol(a):a},Zd:6===p,$d:7===p,W:p,Lc:function(b,c){for(var d=a.a.la(b.getElementsByTagName("input")).concat(a.a.la(b.getElementsByTagName("textarea"))),
e="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},l=[],k=d.length-1;0<=k;k--)e(d[k])&&l.push(d[k]);return l},Nd:function(b){return"string"==typeof b&&(b=a.a.Db(b))?H&&H.parse?H.parse(b):(new Function("return "+b))():null},hc:function(b,c,d){if(!H||!H.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
return H.stringify(a.a.f(b),c,d)},Od:function(c,d,e){e=e||{};var l=e.params||{},k=e.includeFields||this.Jc,f=c;if("object"==typeof c&&"form"===a.a.R(c))for(var f=c.action,h=k.length-1;0<=h;h--)for(var g=a.a.Lc(c,k[h]),m=g.length-1;0<=m;m--)l[g[m].name]=g[m].value;d=a.a.f(d);var p=w.createElement("form");p.style.display="none";p.action=f;p.method="post";for(var q in d)c=w.createElement("input"),c.type="hidden",c.name=q,c.value=a.a.hc(a.a.f(d[q])),p.appendChild(c);b(l,function(a,b){var c=w.createElement("input");
c.type="hidden";c.name=a;c.value=b;p.appendChild(c)});w.body.appendChild(p);e.submitter?e.submitter(p):p.submit();setTimeout(function(){p.parentNode.removeChild(p)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.D);a.b("utils.arrayFirst",a.a.Lb);a.b("utils.arrayFilter",a.a.jb);a.b("utils.arrayGetDistinctValues",a.a.wc);a.b("utils.arrayIndexOf",a.a.A);a.b("utils.arrayMap",a.a.Mb);a.b("utils.arrayPushAll",a.a.Nb);a.b("utils.arrayRemoveItem",a.a.Pa);a.b("utils.cloneNodes",a.a.Ca);a.b("utils.createSymbolOrString",
a.a.Da);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",a.a.Jc);a.b("utils.getFormFields",a.a.Lc);a.b("utils.objectMap",a.a.Ga);a.b("utils.peekObservable",a.a.bc);a.b("utils.postJson",a.a.Od);a.b("utils.parseJson",a.a.Nd);a.b("utils.registerEventHandler",a.a.B);a.b("utils.stringifyJson",a.a.hc);a.b("utils.range",a.a.Pd);a.b("utils.toggleDomNodeCssClass",a.a.Eb);a.b("utils.triggerEvent",a.a.Fb);a.b("utils.unwrapObservable",a.a.f);a.b("utils.objectForEach",a.a.P);a.b("utils.addOrRemoveItem",
a.a.Na);a.b("utils.setTextContent",a.a.Bb);a.b("unwrap",a.a.f);Function.prototype.bind||(Function.prototype.bind=function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){var b=0,c="__ko__"+(new Date).getTime(),d={},e,f;a.a.W?(e=function(a,e){var f=a[c];if(!f||"null"===f||!d[f]){if(!e)return n;f=a[c]="ko"+b++;d[f]=
{}}return d[f]},f=function(a){var b=a[c];return b?(delete d[b],a[c]=null,!0):!1}):(e=function(a,b){var d=a[c];!d&&b&&(d=a[c]={});return d},f=function(a){return a[c]?(delete a[c],!0):!1});return{get:function(a,b){var c=e(a,!1);return c&&c[b]},set:function(a,b,c){(a=e(a,c!==n))&&(a[b]=c)},Ub:function(a,b,c){a=e(a,!0);return a[b]||(a[b]=c)},clear:f,Z:function(){return b++ +c}}};a.b("utils.domData",a.a.g);a.b("utils.domData.clear",a.a.g.clear);a.a.K=new function(){function b(b,c){var d=a.a.g.get(b,e);
d===n&&c&&(d=[],a.a.g.set(b,e,d));return d}function c(c){var e=b(c,!1);if(e)for(var e=e.slice(0),k=0;k<e.length;k++)e[k](c);a.a.g.clear(c);a.a.K.cleanExternalData(c);g[c.nodeType]&&d(c.childNodes,!0)}function d(b,d){for(var e=[],l,f=0;f<b.length;f++)if(!d||8===b[f].nodeType)if(c(e[e.length]=l=b[f]),b[f]!==l)for(;f--&&-1==a.a.A(e,b[f]););}var e=a.a.g.Z(),f={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{za:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},yb:function(c,
d){var f=b(c,!1);f&&(a.a.Pa(f,d),0==f.length&&a.a.g.set(c,e,n))},oa:function(b){a.u.G(function(){f[b.nodeType]&&(c(b),g[b.nodeType]&&d(b.getElementsByTagName("*")))});return b},removeNode:function(b){a.oa(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&"function"==typeof v.cleanData&&v.cleanData([a])}}};a.oa=a.a.K.oa;a.removeNode=a.a.K.removeNode;a.b("cleanNode",a.oa);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.K);a.b("utils.domNodeDisposal.addDisposeCallback",
a.a.K.za);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.K.yb);(function(){var b=[0,"",""],c=[1,"<table>","</table>"],d=[3,"<table><tbody><tr>","</tr></tbody></table>"],e=[1,"<select multiple='multiple'>","</select>"],f={thead:c,tbody:c,tfoot:c,tr:[2,"<table><tbody>","</tbody></table>"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode;
l.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement("div"),t;t=(p=p.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&f[p[1]]||b;p=t[0];t="ignored<div>"+t[1]+c+t[2]+"</div>";"function"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b,
c);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b("utils.parseHtmlFragment",a.a.ua);a.b("utils.setHtml",a.a.fc);a.aa=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.aa.Uc(c.nodeValue);null!=f&&e.push({ud:c,Kd:f})}else if(1==c.nodeType)for(var f=0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],
e)}var c={};return{Xb:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},bd:function(a,b){var f=c[a];if(f===n)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),!0}finally{delete c[a]}},cd:function(c,e){var f=
[];b(c,f);for(var g=0,h=f.length;g<h;g++){var m=f[g].ud,k=[m];e&&a.a.Nb(k,e);a.aa.bd(f[g].Kd,k);m.nodeValue="";m.parentNode&&m.parentNode.removeChild(m)}},Uc:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.aa);a.b("memoization.memoize",a.aa.Xb);a.b("memoization.unmemoize",a.aa.bd);a.b("memoization.parseMemoText",a.aa.Uc);a.b("memoization.unmemoizeDomNodeAndDescendants",a.aa.cd);a.na=function(){function b(){if(f)for(var b=f,c=0,d;h<f;)if(d=e[h++]){if(h>b){if(5E3<=
++c){h=f;a.a.Gc(Error("'Too much recursion' after processing "+c+" task groups."));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):d=w&&"onreadystatechange"in w.createElement("script")?function(a){var b=w.createElement("script");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b);
b=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-h;h=f=e.length=0;return a},Sd:b}}();a.b("tasks",a.na);a.b("tasks.schedule",a.na.zb);a.b("tasks.runEarly",a.na.Sd);a.Ta={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.$({read:b,write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},
c)}})},rateLimit:function(a,c){var d,e,f;"number"==typeof c?d=c:(d=c.timeout,e=c.method);a.Hb=!1;f="function"==typeof e?e:"notifyWhenChangesStop"==e?Y:X;a.ub(function(a){return f(a,d,c)})},deferred:function(b,c){if(!0!==c)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.Hb||(b.Hb=!0,b.ub(function(c){var e,f=!1;return function(){if(!f){a.na.cancel(e);e=a.na.zb(c);try{f=!0,b.notifySubscribers(n,"dirty")}finally{f=
!1}}}}))},notify:function(a,c){a.equalityComparer="always"==c?null:K}};var W={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.Ta);a.ic=function(b,c,d){this.da=b;this.lc=c;this.mc=d;this.Ib=!1;this.fb=this.Jb=null;a.L(this,"dispose",this.s);a.L(this,"disposeWhenNodeIsRemoved",this.l)};a.ic.prototype.s=function(){this.Ib||(this.fb&&a.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)};a.ic.prototype.l=function(b){this.Jb=b;a.a.K.za(b,this.fb=this.s.bind(this))};
a.T=function(){a.a.Ab(this,D);D.qb(this)};var D={qb:function(a){a.U={change:[]};a.sc=1},subscribe:function(b,c,d){var e=this;d=d||"change";var f=new a.ic(e,c?b.bind(c):b,function(){a.a.Pa(e.U[d],f);e.hb&&e.hb(d)});e.Qa&&e.Qa(d);e.U[d]||(e.U[d]=[]);e.U[d].push(f);return f},notifySubscribers:function(b,c){c=c||"change";"change"===c&&this.Gb();if(this.Wa(c)){var d="change"===c&&this.ed||this.U[c].slice(0);try{a.u.xc();for(var e=0,f;f=d[e];++e)f.Ib||f.lc(b)}finally{a.u.end()}}},ob:function(){return this.sc},
Dd:function(a){return this.ob()!==a},Gb:function(){++this.sc},ub:function(b){var c=this,d=a.O(c),e,f,g,h,m;c.gb||(c.gb=c.notifySubscribers,c.notifySubscribers=Z);var k=b(function(){c.Ja=!1;d&&h===c&&(h=c.nc?c.nc():c());var a=f||m&&c.sb(g,h);m=f=e=!1;a&&c.gb(g=h)});c.qc=function(a,b){b&&c.Ja||(m=!b);c.ed=c.U.change.slice(0);c.Ja=e=!0;h=a;k()};c.pc=function(a){e||(g=a,c.gb(a,"beforeChange"))};c.rc=function(){m=!0};c.gd=function(){c.sb(g,c.v(!0))&&(f=!0)}},Wa:function(a){return this.U[a]&&this.U[a].length},
Bd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var c=0;a.a.P(this.U,function(a,b){"dirty"!==a&&(c+=b.length)});return c},sb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},toString:function(){return"[object Object]"},extend:function(b){var c=this;b&&a.a.P(b,function(b,e){var f=a.Ta[b];"function"==typeof f&&(c=f(c,e)||c)});return c}};a.L(D,"init",D.qb);a.L(D,"subscribe",D.subscribe);a.L(D,"extend",D.extend);a.L(D,"getSubscriptionsCount",D.Bd);a.a.Ba&&a.a.setPrototypeOf(D,
Function.prototype);a.T.fn=D;a.Qc=function(a){return null!=a&&"function"==typeof a.subscribe&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.T);a.b("isSubscribable",a.Qc);a.S=a.u=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{xc:b,end:c,cc:function(b){if(e){if(!a.Qc(b))throw Error("Only subscribable things can act as dependencies");e.od.call(e.pd,b,b.fd||(b.fd=++f))}},G:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},qa:function(){if(e)return e.o.qa()},
Va:function(){if(e)return e.o.Va()},Ya:function(){if(e)return e.Ya},o:function(){if(e)return e.o}}}();a.b("computedContext",a.S);a.b("computedContext.getDependenciesCount",a.S.qa);a.b("computedContext.getDependencies",a.S.Va);a.b("computedContext.isInitial",a.S.Ya);a.b("computedContext.registerDependency",a.S.cc);a.b("ignoreDependencies",a.Yd=a.u.G);var I=a.a.Da("_latestValue");a.ta=function(b){function c(){if(0<arguments.length)return c.sb(c[I],arguments[0])&&(c.ya(),c[I]=arguments[0],c.xa()),this;
a.u.cc(c);return c[I]}c[I]=b;a.a.Ba||a.a.extend(c,a.T.fn);a.T.fn.qb(c);a.a.Ab(c,F);a.options.deferUpdates&&a.Ta.deferred(c,!0);return c};var F={equalityComparer:K,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],"spectate");this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],"beforeChange")}};a.a.Ba&&a.a.setPrototypeOf(F,a.T.fn);var G=a.ta.Ma="__ko_proto__";F[G]=a.ta;a.O=function(b){if((b="function"==typeof b&&b[G])&&b!==F[G]&&b!==a.o.fn[G])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");
return!!b};a.Za=function(b){return"function"==typeof b&&(b[G]===F[G]||b[G]===a.o.fn[G]&&b.Nc)};a.b("observable",a.ta);a.b("isObservable",a.O);a.b("isWriteableObservable",a.Za);a.b("isWritableObservable",a.Za);a.b("observable.fn",F);a.L(F,"peek",F.v);a.L(F,"valueHasMutated",F.xa);a.L(F,"valueWillMutate",F.ya);a.Ha=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.ta(b);a.a.Ab(b,
a.Ha.fn);return b.extend({trackArrayChanges:!0})};a.Ha.fn={remove:function(b){for(var c=this.v(),d=[],e="function"!=typeof b||a.O(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];if(e(g)){0===d.length&&this.ya();if(c[f]!==g)throw Error("Array modified during remove; cannot remove item");d.push(g);c.splice(f,1);f--}}d.length&&this.xa();return d},removeAll:function(b){if(b===n){var c=this.v(),d=c.slice(0);this.ya();c.splice(0,c.length);this.xa();return d}return b?this.remove(function(c){return 0<=
a.a.A(b,c)}):[]},destroy:function(b){var c=this.v(),d="function"!=typeof b||a.O(b)?function(a){return a===b}:b;this.ya();for(var e=c.length-1;0<=e;e--){var f=c[e];d(f)&&(f._destroy=!0)}this.xa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ya(),this.v()[d]=c,this.xa())},sorted:function(a){var c=this().slice(0);
return a?c.sort(a):c.sort()},reversed:function(){return this().slice(0).reverse()}};a.a.Ba&&a.a.setPrototypeOf(a.Ha.fn,a.ta.fn);a.a.D("pop push reverse shift sort splice unshift".split(" "),function(b){a.Ha.fn[b]=function(){var a=this.v();this.ya();this.zc(a,b,arguments);var d=a[b].apply(a,arguments);this.xa();return d===a?this:d}});a.a.D(["slice"],function(b){a.Ha.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.Pc=function(b){return a.O(b)&&"function"==typeof b.remove&&"function"==
typeof b.push};a.b("observableArray",a.Ha);a.b("isObservableArray",a.Pc);a.Ta.trackArrayChanges=function(b,c){function d(){function c(){if(m){var d=[].concat(b.v()||[]),e;if(b.Wa("arrayChange")){if(!f||1<m)f=a.a.Pb(k,d,b.Ob);e=f}k=d;f=null;m=0;e&&e.length&&b.notifySubscribers(e,"arrayChange")}}e?c():(e=!0,h=b.subscribe(function(){++m},null,"spectate"),k=[].concat(b.v()||[]),f=null,g=b.subscribe(c))}b.Ob={};c&&"object"==typeof c&&a.a.extend(b.Ob,c);b.Ob.sparse=!0;if(!b.zc){var e=!1,f=null,g,h,m=0,
k,l=b.Qa,p=b.hb;b.Qa=function(a){l&&l.call(b,a);"arrayChange"===a&&d()};b.hb=function(a){p&&p.call(b,a);"arrayChange"!==a||b.Wa("arrayChange")||(g&&g.s(),h&&h.s(),h=g=null,e=!1,k=n)};b.zc=function(b,c,d){function l(a,b,c){return k[k.length]={status:a,value:b,index:c}}if(e&&!m){var k=[],p=b.length,g=d.length,h=0;switch(c){case "push":h=p;case "unshift":for(c=0;c<g;c++)l("added",d[c],h+c);break;case "pop":h=p-1;case "shift":p&&l("deleted",b[h],h);break;case "splice":c=Math.min(Math.max(0,0>d[0]?p+d[0]:
d[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;c<h;++c,++n)c<p&&L.push(l("deleted",b[c],c)),c<g&&U.push(l("added",d[n],c));a.a.Kc(L,U);break;default:return}f=k}}}};var r=a.a.Da("_state");a.o=a.$=function(b,c,d){function e(){if(0<arguments.length){if("function"===typeof f)f.apply(g.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}g.ra||
a.u.cc(e);(g.ka||g.J&&e.Xa())&&e.ha();return g.X}"object"===typeof b?d=b:(d=d||{},b&&(d.read=b));if("function"!=typeof d.read)throw Error("Pass a function that returns the value of the ko.computed");var f=d.write,g={X:n,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:d.read,nb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Sa:d.disposeWhen||d.Sa,Rb:null,I:{},V:0,Ic:null};e[r]=g;e.Nc="function"===typeof f;a.a.Ba||a.a.extend(e,a.T.fn);a.T.fn.qb(e);a.a.Ab(e,C);d.pure?(g.wb=!0,g.J=!0,a.a.extend(e,da)):
d.deferEvaluation&&a.a.extend(e,ea);a.options.deferUpdates&&a.Ta.deferred(e,!0);g.l&&(g.jc=!0,g.l.nodeType||(g.l=null));g.J||d.deferEvaluation||e.ha();g.l&&e.ja()&&a.a.K.za(g.l,g.Rb=function(){e.s()});return e};var C={equalityComparer:K,qa:function(){return this[r].V},Va:function(){var b=[];a.a.P(this[r].I,function(a,d){b[d.Ka]=d.da});return b},Vb:function(b){if(!this[r].V)return!1;var c=this.Va();return-1!==a.a.A(c,b)?!0:!!a.a.Lb(c,function(a){return a.Vb&&a.Vb(b)})},uc:function(a,c,d){if(this[r].wb&&
c===this)throw Error("A 'pure' computed must not be called recursively");this[r].I[a]=d;d.Ka=this[r].V++;d.La=c.ob()},Xa:function(){var a,c,d=this[r].I;for(a in d)if(Object.prototype.hasOwnProperty.call(d,a)&&(c=d[a],this.Ia&&c.da.Ja||c.da.Dd(c.La)))return!0},Jd:function(){this.Ia&&!this[r].rb&&this.Ia(!1)},ja:function(){var a=this[r];return a.ka||0<a.V},Rd:function(){this.Ja?this[r].ka&&(this[r].sa=!0):this.Hc()},$c:function(a){if(a.Hb){var c=a.subscribe(this.Jd,this,"dirty"),d=a.subscribe(this.Rd,
this);return{da:a,s:function(){c.s();d.s()}}}return a.subscribe(this.Hc,this)},Hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[r].Ic),this[r].Ic=a.a.setTimeout(function(){b.ha(!0)},c)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var c=this[r],d=c.Sa,e=!1;if(!c.rb&&!c.ra){if(c.l&&!a.a.Sb(c.l)||d&&d()){if(!c.jc){this.s();return}}else c.jc=!1;c.rb=!0;try{e=this.zd(b)}finally{c.rb=!1}return e}},zd:function(b){var c=this[r],d=!1,e=c.wb?n:!c.V,d={qd:this,mb:c.I,Qb:c.V};a.u.xc({pd:d,
od:ba,o:this,Ya:e});c.I={};c.V=0;var f=this.yd(c,d);c.V?d=this.sb(c.X,f):(this.s(),d=!0);d&&(c.J?this.Gb():this.notifySubscribers(c.X,"beforeChange"),c.X=f,this.notifySubscribers(c.X,"spectate"),!c.J&&b&&this.notifySubscribers(c.X),this.rc&&this.rc());e&&this.notifySubscribers(c.X,"awake");return d},yd:function(b,c){try{var d=b.Wc;return b.nb?d.call(b.nb):d()}finally{a.u.end(),c.Qb&&!b.J&&a.a.P(c.mb,aa),b.sa=b.ka=!1}},v:function(a){var c=this[r];(c.ka&&(a||!c.V)||c.J&&this.Xa())&&this.ha();return c.X},
ub:function(b){a.T.fn.ub.call(this,b);this.nc=function(){this[r].J||(this[r].sa?this.ha():this[r].ka=!1);return this[r].X};this.Ia=function(a){this.pc(this[r].X);this[r].ka=!0;a&&(this[r].sa=!0);this.qc(this,!a)}},s:function(){var b=this[r];!b.J&&b.I&&a.a.P(b.I,function(a,b){b.s&&b.s()});b.l&&b.Rb&&a.a.K.yb(b.l,b.Rb);b.I=n;b.V=0;b.ra=!0;b.sa=!1;b.ka=!1;b.J=!1;b.l=n;b.Sa=n;b.Wc=n;this.Nc||(b.nb=n)}},da={Qa:function(b){var c=this,d=c[r];if(!d.ra&&d.J&&"change"==b){d.J=!1;if(d.sa||c.Xa())d.I=null,d.V=
0,c.ha()&&c.Gb();else{var e=[];a.a.P(d.I,function(a,b){e[b.Ka]=a});a.a.D(e,function(a,b){var e=d.I[a],m=c.$c(e.da);m.Ka=b;m.La=e.La;d.I[a]=m});c.Xa()&&c.ha()&&c.Gb()}d.ra||c.notifySubscribers(d.X,"awake")}},hb:function(b){var c=this[r];c.ra||"change"!=b||this.Wa("change")||(a.a.P(c.I,function(a,b){b.s&&(c.I[a]={da:b.da,Ka:b.Ka,La:b.La},b.s())}),c.J=!0,this.notifySubscribers(n,"asleep"))},ob:function(){var b=this[r];b.J&&(b.sa||this.Xa())&&this.ha();return a.T.fn.ob.call(this)}},ea={Qa:function(a){"change"!=
a&&"beforeChange"!=a||this.v()}};a.a.Ba&&a.a.setPrototypeOf(C,a.T.fn);var N=a.ta.Ma;C[N]=a.o;a.Oc=function(a){return"function"==typeof a&&a[N]===C[N]};a.Fd=function(b){return a.Oc(b)&&b[r]&&b[r].wb};a.b("computed",a.o);a.b("dependentObservable",a.o);a.b("isComputed",a.Oc);a.b("isPureComputed",a.Fd);a.b("computed.fn",C);a.L(C,"peek",C.v);a.L(C,"dispose",C.s);a.L(C,"isActive",C.ja);a.L(C,"getDependenciesCount",C.qa);a.L(C,"getDependencies",C.Va);a.xb=function(b,c){if("function"===typeof b)return a.o(b,
c,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.o(b,c)};a.b("pureComputed",a.xb);(function(){function b(a,f,g){g=g||new d;a=f(a);if("object"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":h[c]=d;break;case "object":case "undefined":var l=g.get(d);h[c]=l!==
n?l:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.ad=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.O(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,
b);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b("toJS",a.ad);a.b("toJSON",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:"always"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return"function"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b("when",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?
a.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case "option":"string"===typeof c?(a.a.g.set(b,a.c.options.$b,n),"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===
typeof c?c:"");break;case "select":if(""===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.w.M(b.options[f]),h==c||""===h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e,6===a.a.W&&a.a.setTimeout(function(){b.selectedIndex=e},0);break;default:if(null===c||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.w);a.b("selectExtensions.readValue",a.w.M);a.b("selectExtensions.writeValue",a.w.cb);a.m=function(){function b(b){b=a.a.Db(b);123===b.charCodeAt(0)&&(b=b.slice(1,
-1));b+="\n,";var c=[],d=b.match(e),p,q=[],h=0;if(1<d.length){for(var x=0,B;B=d[x];++x){var u=B.charCodeAt(0);if(44===u){if(0>=h){c.push(p&&q.length?{key:p,value:q.join("")}:{unknown:p||q.join("")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1<B.length&&(47===B.charCodeAt(1)||42===B.charCodeAt(1)))continue;else 47===u&&x&&1<B.length?(u=d[x-1].match(f))&&!g[u[0]]&&(b=b.substr(b.indexOf(B)+1),d=b.match(e),x=-1,B="/"):40===u||123===u||91===u?++h:
41===u||125===u||93===u?--h:p||q.length||34!==u&&39!==u||(B=B.slice(1,-1));q.push(B)}if(0<h)throw Error("Unbalanced parentheses, braces, or brackets");}return c}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,g={"in":1,"return":1,"typeof":1},
h={};return{Ra:[],wa:h,ac:b,vb:function(e,f){function l(b,e){var f;if(!x){var k=a.getBindingHandler(b);if(k&&k.preprocess&&!(e=k.preprocess(e,b,l)))return;if(k=h[b])f=e,0<=a.a.A(c,f)?f=!1:(k=f.match(d),f=null===k?!1:k[1]?"Object("+k[1]+")"+k[2]:f),k=f;k&&q.push("'"+("string"==typeof h[b]?h[b]:b)+"':function(_z){"+f+"=_z}")}g&&(e="function(){return "+e+" }");p.push("'"+b+"':"+e)}f=f||{};var p=[],q=[],g=f.valueAccessors,x=f.bindingParams,B="string"===typeof e?b(e):e;a.a.D(B,function(a){l(a.key||a.unknown,
a.value)});q.length&&l("_ko_property_writers","{"+q.join(",")+" }");return p.join(",")},Id:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},eb:function(b,c,d,e,f){if(b&&a.O(b))!a.Za(b)||f&&b.v()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.m);a.b("expressionRewriting.bindingRewriteValidators",a.m.Ra);a.b("expressionRewriting.parseObjectLiteral",a.m.ac);a.b("expressionRewriting.preProcessBindings",a.m.vb);a.b("expressionRewriting._twoWayBindings",
a.m.wa);a.b("jsonExpressionRewriting",a.m);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.m.vb);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(d,e){for(var f=d,h=1,g=[];f=f.nextSibling;){if(c(f)&&(a.a.g.set(f,k,!0),h--,0===h))return g;g.push(f);b(f)&&h++}if(!e)throw Error("Cannot find closing comment tag to match: "+d.nodeValue);return null}function e(a,b){var c=d(a,b);return c?
0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=w&&"\x3c!--test--\x3e"===w.createComment("test").text,g=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,m={ul:!0,ol:!0},k="__ko_matchedEndComment__";a.h={ea:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ea:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Tb(c)},va:function(c,d){if(b(c)){a.h.Ea(c);for(var e=
c.nextSibling,f=0,k=d.length;f<k;f++)e.parentNode.insertBefore(d[f],e)}else a.a.va(c,d)},Vc:function(a,c){var d;b(a)?(d=a.nextSibling,a=a.parentNode):d=a.firstChild;d?c!==d&&a.insertBefore(c,d):a.appendChild(c)},Wb:function(c,d,e){e?(e=e.nextSibling,b(c)&&(c=c.parentNode),e?d!==e&&c.insertBefore(d,e):c.appendChild(d)):a.h.Vc(c,d)},firstChild:function(a){if(b(a))return!a.nextSibling||c(a.nextSibling)?null:a.nextSibling;if(a.firstChild&&c(a.firstChild))throw Error("Found invalid end comment, as the first child of "+
a);return a.firstChild},nextSibling:function(d){b(d)&&(d=e(d));if(d.nextSibling&&c(d.nextSibling)){var f=d.nextSibling;if(c(f)&&!a.a.g.get(f,k))throw Error("Found end comment without a matching opening comment, as child of "+d);return null}return d.nextSibling},Cd:b,Vd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},Sc:function(d){if(m[a.a.R(d)]){var f=d.firstChild;if(f){do if(1===f.nodeType){var k;k=f.firstChild;var h=null;if(k){do if(h)h.push(k);else if(b(k)){var g=e(k,!0);g?k=
g:h=[k]}else c(k)&&(h=[k]);while(k=k.nextSibling)}if(k=h)for(h=f.nextSibling,g=0;g<k.length;g++)h?d.insertBefore(k[g],h):d.appendChild(k[g])}while(f=f.nextSibling)}}}}})();a.b("virtualElements",a.h);a.b("virtualElements.allowedBindings",a.h.ea);a.b("virtualElements.emptyNode",a.h.Ea);a.b("virtualElements.insertAfter",a.h.Wb);a.b("virtualElements.prepend",a.h.Vc);a.b("virtualElements.setDomNodeChildren",a.h.va);(function(){a.ga=function(){this.nd={}};a.a.extend(a.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=
b.getAttribute("data-bind")||a.j.getComponentNameForNode(b);case 8:return a.h.Cd(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.j.tc(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.j.tc(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.h.Vd(b);default:return null}},
parseBindingsString:function(b,c,d,e){try{var f=this.nd,g=b+(e&&e.valueAccessors||""),h;if(!(h=f[g])){var m,k="with($context){with($data||{}){return{"+a.m.vb(b,e)+"}}}";m=new Function("$context","$element",k);h=f[g]=m}return h(c,d)}catch(l){throw l.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+l.message,l;}}});a.ga.instance=new a.ga})();a.b("bindingProvider",a.ga);(function(){function b(b){var c=(b=a.a.g.get(b,z))&&b.N;c&&(b.N=null,c.Tc())}function c(c,d,e){this.node=c;this.yc=
d;this.kb=[];this.H=!1;d.N||a.a.K.za(c,b);e&&e.N&&(e.N.kb.push(c),this.Kb=e)}function d(a){return function(){return a}}function e(a){return a()}function f(b){return a.a.Ga(a.u.G(b),function(a,c){return function(){return b()[c]}})}function g(b,c,e){return"function"===typeof b?f(b.bind(null,c,e)):a.a.Ga(b,d)}function h(a,b){return f(this.getBindings.bind(this,a,b))}function m(b,c){var d=a.h.firstChild(c);if(d){var e,f=a.ga.instance,l=f.preprocessNode;if(l){for(;e=d;)d=a.h.nextSibling(e),l.call(f,e);
d=a.h.firstChild(c)}for(;e=d;)d=a.h.nextSibling(e),k(b,e)}a.i.ma(c,a.i.H)}function k(b,c){var d=b,e=1===c.nodeType;e&&a.h.Sc(c);if(e||a.ga.instance.nodeHasBindings(c))d=p(c,null,b).bindingContextForDescendants;d&&!u[a.a.R(c)]&&m(d,c)}function l(b){var c=[],d={},e=[];a.a.P(b,function ca(f){if(!d[f]){var k=a.getBindingHandler(f);k&&(k.after&&(e.push(f),a.a.D(k.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+e.join(", "));
ca(c)}}),e.length--),c.push({key:f,Mc:k}));d[f]=!0}});return c}function p(b,c,d){var f=a.a.g.Ub(b,z,{}),k=f.hd;if(!c){if(k)throw Error("You cannot apply bindings multiple times to the same element.");f.hd=!0}k||(f.context=d);f.Zb||(f.Zb={});var g;if(c&&"function"!==typeof c)g=c;else{var p=a.ga.instance,q=p.getBindingAccessors||h,m=a.$(function(){if(g=c?c(d,b):q.call(p,b,d)){if(d[t])d[t]();if(d[B])d[B]()}return g},null,{l:b});g&&m.ja()||(m=null)}var x=d,u;if(g){var J=function(){return a.a.Ga(m?m():
g,e)},r=m?function(a){return function(){return e(m()[a])}}:function(a){return g[a]};J.get=function(a){return g[a]&&e(r(a))};J.has=function(a){return a in g};a.i.H in g&&a.i.subscribe(b,a.i.H,function(){var c=(0,g[a.i.H])();if(c){var d=a.h.childNodes(b);d.length&&c(d,a.Ec(d[0]))}});a.i.pa in g&&(x=a.i.Cb(b,d),a.i.subscribe(b,a.i.pa,function(){var c=(0,g[a.i.pa])();c&&a.h.firstChild(b)&&c(b)}));f=l(g);a.a.D(f,function(c){var d=c.Mc.init,e=c.Mc.update,f=c.key;if(8===b.nodeType&&!a.h.ea[f])throw Error("The binding '"+
f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.u.G(function(){var a=d(b,r(f),J,x.$data,x);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error("Multiple bindings ("+u+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=f}}),"function"==typeof e&&a.$(function(){e(b,r(f),J,x.$data,x)},null,{l:b})}catch(k){throw k.message='Unable to process binding "'+f+": "+g[f]+'"\nMessage: '+k.message,
k;}})}f=u===n;return{shouldBindDescendants:f,bindingContextForDescendants:f&&x}}function q(b,c){return b&&b instanceof a.fa?b:new a.fa(b,n,n,c)}var t=a.a.Da("_subscribable"),x=a.a.Da("_ancestorBindingInfo"),B=a.a.Da("_dataDependency");a.c={};var u={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.c[b]};var J={};a.fa=function(b,c,d,e,f){function k(){var b=p?h():h,f=a.a.f(b);c?(a.a.extend(l,c),x in c&&(l[x]=c[x])):(l.$parents=[],l.$root=f,l.ko=a);l[t]=q;g?f=l.$data:(l.$rawData=
b,l.$data=f);d&&(l[d]=f);e&&e(l,c,f);if(c&&c[t]&&!a.S.o().Vb(c[t]))c[t]();m&&(l[B]=m);return l.$data}var l=this,g=b===J,h=g?n:b,p="function"==typeof h&&!a.O(h),q,m=f&&f.dataDependency;f&&f.exportDependencies?k():(q=a.xb(k),q.v(),q.ja()?q.equalityComparer=null:l[t]=n)};a.fa.prototype.createChildContext=function(b,c,d,e){!e&&c&&"object"==typeof c&&(e=c,c=e.as,d=e.extend);if(c&&e&&e.noChildContext){var f="function"==typeof b&&!a.O(b);return new a.fa(J,this,null,function(a){d&&d(a);a[c]=f?b():b},e)}return new a.fa(b,
this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)},e)};a.fa.prototype.extend=function(b,c){return new a.fa(J,this,null,function(c){a.a.extend(c,"function"==typeof b?b(c):b)},c)};var z=a.a.g.Z();c.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};c.prototype.sd=function(b){a.a.Pa(this.kb,b);!this.kb.length&&this.H&&this.Cc()};c.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=
null,a.a.K.yb(this.node,b),a.i.ma(this.node,a.i.pa),this.Tc())};a.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(b,c,d,e,f){var k=a.a.g.Ub(b,z,{});k.Fa||(k.Fa=new a.T);f&&f.notifyImmediately&&k.Zb[c]&&a.u.G(d,e,[b]);return k.Fa.subscribe(d,e,c)},ma:function(b,c){var d=a.a.g.get(b,z);if(d&&(d.Zb[c]=!0,d.Fa&&d.Fa.notifySubscribers(b,c),c==a.i.H))if(d.N)d.N.Cc();else if(d.N===n&&d.Fa&&d.Fa.Wa(a.i.pa))throw Error("descendantsComplete event not supported for bindings on this node");
},Cb:function(b,d){var e=a.a.g.Ub(b,z,{});e.N||(e.N=new c(b,e,d[x]));return d[x]==e?d:d.extend(function(a){a[x]=e})}};a.Td=function(b){return(b=a.a.g.get(b,z))&&b.context};a.ib=function(b,c,d){1===b.nodeType&&a.h.Sc(b);return p(b,c,q(d))};a.ld=function(b,c,d){d=q(d);return a.ib(b,g(c,d,b),d)};a.Oa=function(a,b){1!==b.nodeType&&8!==b.nodeType||m(q(a),b)};a.vc=function(a,b,c){!v&&A.jQuery&&(v=A.jQuery);if(2>arguments.length){if(b=w.body,!b)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");
}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b("bindingHandlers",a.c);a.b("bindingEvent",a.i);a.b("bindingEvent.subscribe",a.i.subscribe);a.b("bindingEvent.startPossiblyAsyncContentBinding",a.i.Cb);a.b("applyBindings",a.vc);a.b("applyBindingsToDescendants",a.Oa);
a.b("applyBindingAccessorsToNode",a.ib);a.b("applyBindingsToNode",a.ld);a.b("contextFor",a.Dc);a.b("dataFor",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a,
c)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}):
a.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b("components",a.j);a.b("components.get",a.j.get);a.b("components.clearCachedDefinition",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc("loadTemplate",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc("loadViewModel",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)});
else if("function"===typeof b[m])d(b[m]);else if("instance"in b){var e=b.instance;d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.R(b)){case "script":return a.a.ua(b.text);case "textarea":return a.a.ua(b.value);case "template":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?
T||A.require?(T||A.require)([b.require],function(a){a&&"object"===typeof a&&a.Xd&&a["default"]&&(a=a["default"]);c(a)}):a("Uses require, but no AMD loader is present"):c(b)}function g(a){return function(b){throw Error("Component '"+a+"': "+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.j.tb(b))throw Error("Component "+b+" is already registered");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b];
a.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if("string"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var h=w.getElementById(c);h?f(d(h)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+
c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m="createViewModel";a.b("components.register",a.j.register);a.b("components.isRegistered",a.j.tb);a.b("components.unregister",a.j.unregister);a.b("components.defaultLoader",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f,
function(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,"$raw")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');
var m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a,
b,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;"function"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;"string"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error("No component name specified");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error("Unknown component '"+h+"'");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t});
d=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={"class":"className","for":"htmlFor"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(":"),g="lookupNamespaceURI"in b&&0<g&&b.lookupNamespaceURI(c.substr(0,g)),h=!1===d||null===
d||d===n;h?g?b.removeAttributeNS(g,c):b.removeAttribute(c):d=d.toString();8>=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));"name"===c&&a.a.Yc(b,h?"":d)})}};(function(){a.c.checked={after:["value","attr"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k,
d,"checked",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has("checkedValue"))return a.a.f(d.get("checkedValue"));if(q)return d.has("value")?a.a.f(d.get("value")):b.value}),h="checkbox"==b.type,m="radio"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,"click",e);a.o(f,null,{l:b});
k=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c["class"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&"object"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c["class"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.c.disable=
{update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){"string"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c);
if(!d||"number"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach=
!0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,"focus",f);a.a.B(b,"focusin",f);a.a.B(b,"blur",g);a.a.B(b,"focusout",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===
d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?"focusin":"focusout"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus="hasfocus";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get("as");var u=h.get("noChildContext");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t=
"render"==h.get("completeOn"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext("function"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b("if");b("ifnot",!1,!0);b("with",!0)})();a.c.let={init:function(b,
c,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if("select"!==a.a.R(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.jb(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function g(c,d){if(x&&l)a.i.ma(b,a.i.H);else if(t.length){var e=
0<=a.a.A(t,a.w.M(d[0]));a.a.Zc(d[0],e);x&&!e&&a.u.G(a.a.Fb,null,[b,"change"])}}var h=b.multiple,m=0!=b.length&&h?b.scrollTop:null,k=a.a.f(c()),l=d.get("valueAllowUnset")&&d.has("value"),p=d.get("optionsIncludeDestroyed");c={};var q,t=[];l||(h?t=a.a.Mb(e(),a.w.M):0<=b.selectedIndex&&t.push(a.w.M(b.options[b.selectedIndex])));k&&("undefined"==typeof k.length&&(k=[k]),q=a.a.jb(k,function(b){return p||b===n||null===b||!a.a.f(b._destroy)}),d.has("optionsCaption")&&(k=a.a.f(d.get("optionsCaption")),null!==
k&&k!==n&&q.unshift(Q)));var x=!1;c.beforeRemove=function(a){b.removeChild(a)};k=g;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(k=function(b,c){g(0,c);a.u.G(d.get("optionsAfterRender"),null,[c[0],b!==Q?b:n])});a.a.ec(b,q,function(c,e,g){g.length&&(t=!l&&g[0].selected?[a.w.M(g[0])]:[],x=!0);e=b.ownerDocument.createElement("option");c===Q?(a.a.Bb(e,d.get("optionsCaption")),a.w.cb(e,n)):(g=f(c,d.get("optionsValue"),c),a.w.cb(e,a.a.f(g)),c=f(c,d.get("optionsText"),g),
a.a.Bb(e,c));return[e]},c,k);if(!l){var B;h?B=t.length&&e().length<t.length:B=t.length&&0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex])!==t[0]:t.length||0<=b.selectedIndex;B&&a.u.G(a.a.Fb,null,[b,"change"])}(l||a.S.Ya())&&a.i.ma(b,a.i.H);a.a.wd(b);m&&20<Math.abs(m-b.scrollTop)&&(b.scrollTop=m)}};a.c.options.$b=a.a.g.Z();a.c.selectedOptions={init:function(b,c,d){function e(){var e=c(),f=[];a.a.D(b.getElementsByTagName("option"),function(b){b.selected&&f.push(a.w.M(b))});a.m.eb(e,d,"selectedOptions",
f)}function f(){var d=a.a.f(c()),e=b.scrollTop;d&&"number"==typeof d.length&&a.a.D(b.getElementsByTagName("option"),function(b){var c=0<=a.a.A(d,a.w.M(b));b.selected!=c&&a.a.Zc(b,c)});b.scrollTop=e}if("select"!=a.a.R(b))throw Error("selectedOptions binding applies only to SELECT elements");var g;a.i.subscribe(b,a.i.H,function(){g?e():(a.a.B(b,"change",e),g=a.o(f,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}};a.m.wa.selectedOptions=!0;a.c.style={update:function(b,c){var d=a.a.f(c()||
{});a.a.P(d,function(c,d){d=a.a.f(d);if(null===d||d===n||!1===d)d="";if(v)v(b).css(c,d);else if(/^--/.test(c))b.style.setProperty(c,d);else{c=c.replace(/-(\w)/g,function(a,b){return b.toUpperCase()});var g=b.style[c];b.style[c]=d;d===g||b.style[c]!=g||isNaN(d)||(b.style[c]=d+"px")}})}};a.c.submit={init:function(b,c,d,e,f){if("function"!=typeof c())throw Error("The value for a submit binding must be a function");a.a.B(b,"submit",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?
a.preventDefault():a.returnValue=!1)}})}};a.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Bb(b,c())}};a.h.ea.text=!0;(function(){if(A&&A.navigator){var b=function(a){if(a)return parseFloat(a[1])},c=A.navigator.userAgent,d,e,f,g,h;(d=A.opera&&A.opera.version&&parseInt(A.opera.version()))||(h=b(c.match(/Edge\/([^ ]+)$/)))||b(c.match(/Chrome\/([^ ]+)/))||(e=b(c.match(/Version\/([^ ]+) Safari/)))||(f=b(c.match(/Firefox\/([^ ]+)/)))||(g=a.a.W||b(c.match(/MSIE ([^ ]+)/)))||
(g=b(c.match(/rv:([^ )]+)/)))}if(8<=g&&10>g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,"selectionchange",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d="";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z,
4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,"textInput",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l("keypress",z);11>g&&l("propertychange",function(a){y||"value"!==a.propertyName||A(a)});8==g&&(l("keyup",z),l("keydown",z));p&&(p(b,A),l("dragend",r));(!g||9<=g)&&l("input",A);5>e&&"textarea"===a.a.R(b)?(l("keydown",r),l("paste",r),l("cut",r)):11>d?l("keydown",r):4>f?(l("DOMAutoComplete",z),l("dragdrop",z),l("drop",z)):h&&"number"===b.type&&l("keydown",r);l("change",
z);l("blur",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c("textInput",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has("as")&&(g={as:d.get("as"),noChildContext:d.get("noChildContext")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f="input"==
e;if(!f||"checkbox"!=b.type&&"radio"!=b.type){var g=[],h=d.get("valueUpdate"),m=!1,k=null;h&&("string"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,"change"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,"value",f)};!a.a.W||!f||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.A(g,"propertychange")||(a.a.B(b,"propertychange",function(){m=!0}),a.a.B(b,"focus",function(){m=!1}),a.a.B(b,"blur",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,"after")&&
(d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&"file"==b.type?function(){var d=a.a.f(c());null===d||d===n||""===d?b.value="":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)"select"===e?(g=d.get("valueAllowUnset"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if("select"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get("valueAllowUnset")?p():l():(a.a.B(b,"change",l),q=a.o(p,null,{l:b}))},
null,{notifyImmediately:!0})}else a.a.B(b,"change",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})("click");
a.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.ca.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error("Unknown template type: "+b);};a.ca.prototype.renderTemplate=
function(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data("isRewritten")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k<b.length;k++){var l=b[k].key;if(Object.prototype.hasOwnProperty.call(m,
l)){var p=m[l];if("function"===typeof p){if(l=p(b[k].value))throw Error(l);}else if(!p)throw Error("This template engine does not support the '"+l+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.m.vb(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,
d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b("__tr_ambtns",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c=
a.a.R(b);this.ab="script"===c?1:"textarea"===c?2:"template"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.F[b];var c=arguments[0];"innerHTML"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+"_";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F;
if(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text("");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F,
c,{bb:arguments[0]})};a.b("templateSources",a.C);a.b("templateSources.domElement",a.C.F);a.b("templateSources.anonymousTemplate",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):
(c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,m){m=m||{};var n=(b&&d(b)||f||{}).ownerDocument,B=m.templateEngine||g;a.kc.xd(f,B,n);f=B.renderTemplate(f,h,m,n);if("number"!=typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");n=!1;switch(e){case "replaceChildren":a.h.va(b,
f);n=!0;break;case "replaceNode":a.a.Xc(b,f);n=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}n&&(c(f,h),m.afterRender&&a.u.G(m.afterRender,null,[f,h[m.as||"$data"]]),"replaceChildren"==e&&a.i.ma(b,a.i.H));return f}function f(b,c,d){return a.O(b)?b():"function"===typeof b?b(c,d):b}var g;a.gc=function(b){if(b!=n&&!(b instanceof a.ca))throw Error("templateEngine must inherit from ko.templateEngine");g=b};a.dc=function(b,c,h,m,t){h=h||{};if((h.templateEngine||g)==
n)throw Error("Set a template engine before calling renderTemplate");t=t||"replaceChildren";if(m){var x=d(m);return a.$(function(){var g=c&&c instanceof a.fa?c:new a.fa(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(m,t,n,g,h);"replaceNode"==t&&(m=g,x=d(m))},null,{Sa:function(){return!x||!a.a.Sb(x)},l:x&&"replaceNode"==t?x.parentNode:x})}return a.aa.Xb(function(d){a.dc(b,c,h,d,"replaceNode")})};a.Qd=function(b,d,g,h,m){function x(b,c){a.u.G(a.a.ec,null,[h,b,u,g,r,c]);a.i.ma(h,a.i.H)}
function r(a,b){c(b,v);g.afterRender&&g.afterRender(b,a);v=null}function u(a,c){v=m.createChildContext(a,{as:z,noChildContext:g.noChildContext,extend:function(a){a.$index=c;z&&(a[z+"Index"]=c)}});var d=f(b,a,v);return e(h,"ignoreTargetNode",d,v,g)}var v,z=g.as,w=!1===g.includeDestroyed||a.options.foreachHidesDestroyed&&!g.includeDestroyed;if(w||g.beforeRemove||!a.Pc(d))return a.$(function(){var b=a.a.f(d)||[];"undefined"==typeof b.length&&(b=[b]);w&&(b=a.a.jb(b,function(b){return b===n||null===b||
!a.a.f(b._destroy)}));x(b)},null,{l:h});x(d.v());var A=d.subscribe(function(a){x(d(),a)},null,"arrayChange");A.l(h);return A};var h=a.a.g.Z(),m=a.a.g.Z();a.c.template={init:function(b,c){var d=a.a.f(c());if("string"==typeof d||"name"in d)a.h.Ea(b);else if("nodes"in d){d=d.nodes||[];if(a.O(d))throw Error('The "nodes" option must be a plain, non-observable array.');var e=d[0]&&d[0].parentNode;e&&a.a.g.get(e,m)||(e=a.a.Yb(d),a.a.g.set(e,m,!0));(new a.C.ia(b)).nodes(e)}else if(d=a.h.childNodes(b),0<d.length)e=
a.a.Yb(d),(new a.C.ia(b)).nodes(e);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.f(g);d=!0;e=null;"string"==typeof c?c={}:(g="name"in c?c.name:b,"if"in c&&(d=a.a.f(c["if"])),d&&"ifnot"in c&&(d=!a.a.f(c.ifnot)),d&&!g&&(d=!1));"foreach"in c?e=a.Qd(g,d&&c.foreach||[],c,b,f):d?(d=f,"data"in c&&(d=f.createChildContext(c.data,{as:c.as,noChildContext:c.noChildContext,exportDependencies:!0})),
e=a.dc(g,d,c,b)):a.h.Ea(b);f=e;(c=a.a.g.get(b,h))&&"function"==typeof c.s&&c.s();a.a.g.set(b,h,!f||f.ja&&!f.ja()?n:f)}};a.m.Ra.template=function(b){b=a.m.ac(b);return 1==b.length&&b[0].unknown||a.m.Id(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.h.ea.template=!0})();a.b("setTemplateEngine",a.gc);a.b("renderTemplate",a.dc);a.a.Kc=function(a,c,d){if(a.length&&c.length){var e,f,g,h,m;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;m=c[g];++g)if(h.value===
m.value){h.moved=m.index;m.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.Pb=function(){function b(b,d,e,f,g){var h=Math.min,m=Math.max,k=[],l,p=b.length,q,n=d.length,r=n-p||1,v=p+n+1,u,w,z;for(l=0;l<=p;l++)for(w=u,k.push(u=[]),z=h(n,l+r),q=m(0,l-1);q<=z;q++)u[q]=q?l?b[l-1]===d[q-1]?w[q-1]:h(w[q]||v,u[q-1]||v)+1:q+1:l+1;h=[];m=[];r=[];l=p;for(q=n;l||q;)n=k[l][q]-1,q&&n===k[l][q-1]?m.push(h[h.length]={status:e,value:d[--q],index:q}):l&&n===k[l-1][q]?r.push(h[h.length]={status:f,value:b[--l],index:l}):
(--q,--l,g.sparse||h.push({status:"retained",value:d[q]}));a.a.Kc(r,m,!g.dontLimitMoves&&10*p);return h.reverse()}return function(a,d,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,"added","deleted",e):b(d,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.Pb);(function(){function b(b,c,d,h,m){var k=[],l=a.$(function(){var l=c(d,m,a.a.Ua(k,b))||[];0<k.length&&(a.a.Xc(k,l),h&&a.u.G(h,null,[d,l,m]));k.length=0;a.a.Nb(k,l)},null,{l:b,Sa:function(){return!a.a.kd(k)}});
return{Y:k,$:l.ja()?l:n}}var c=a.a.g.Z(),d=a.a.g.Z();a.a.ec=function(e,f,g,h,m,k){function l(b){y={Aa:b,pb:a.ta(w++)};v.push(y);r||F.push(y)}function p(b){y=t[b];w!==y.pb.v()&&D.push(y);y.pb(w++);a.a.Ua(y.Y,e);v.push(y)}function q(b,c){if(b)for(var d=0,e=c.length;d<e;d++)a.a.D(c[d].Y,function(a){b(a,d,c[d].Aa)})}f=f||[];"undefined"==typeof f.length&&(f=[f]);h=h||{};var t=a.a.g.get(e,c),r=!t,v=[],u=0,w=0,z=[],A=[],C=[],D=[],F=[],y,I=0;if(r)a.a.D(f,l);else{if(!k||t&&t._countWaitingForRemove){var E=
a.a.Mb(t,function(a){return a.Aa});k=a.a.Pb(E,f,{dontLimitMoves:h.dontLimitMoves,sparse:!0})}for(var E=0,G,H,K;G=k[E];E++)switch(H=G.moved,K=G.index,G.status){case "deleted":for(;u<K;)p(u++);H===n&&(y=t[u],y.$&&(y.$.s(),y.$=n),a.a.Ua(y.Y,e).length&&(h.beforeRemove&&(v.push(y),I++,y.Aa===d?y=null:C.push(y)),y&&z.push.apply(z,y.Y)));u++;break;case "added":for(;w<K;)p(u++);H!==n?(A.push(v.length),p(H)):l(G.value)}for(;w<f.length;)p(u++);v._countWaitingForRemove=I}a.a.g.set(e,c,v);q(h.beforeMove,D);a.a.D(z,
h.beforeRemove?a.oa:a.removeNode);var M,O,P;try{P=e.ownerDocument.activeElement}catch(N){}if(A.length)for(;(E=A.shift())!=n;){y=v[E];for(M=n;E;)if((O=v[--E].Y)&&O.length){M=O[O.length-1];break}for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M)}for(E=0;y=v[E];E++){y.Y||a.a.extend(y,b(e,g,y.Aa,m,y.pb));for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M);!y.Ed&&m&&(m(y.Aa,y.Y,y.pb),y.Ed=!0,M=y.Y[y.Y.length-1])}P&&e.ownerDocument.activeElement!=P&&P.focus();q(h.beforeRemove,C);for(E=0;E<C.length;++E)C[E].Aa=d;q(h.afterMove,D);
q(h.afterAdd,F)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.ec);a.ba=function(){this.allowTemplateRewriting=!1};a.ba.prototype=new a.ca;a.ba.prototype.constructor=a.ba;a.ba.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b("nativeTemplateEngine",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();
this.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=v.template(null,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement("div"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+
a+" })()) }}"};this.addTemplate=function(a,b){w.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(v.tmpl.tag.ko_code={open:"__.push($1 || '');"},v.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.$a.prototype=new a.ca;a.$a.prototype.constructor=a.$a;var b=new a.$a;0<b.Hd&&a.gc(b);a.b("jqueryTmplTemplateEngine",a.$a)})()})})();})();
/// Knockout Mapping plugin v2.4.1
/// (c) 2013 Steven Sanderson, Roy Jacobs - http://knockoutjs.com/
/// License: MIT (http://www.opensource.org/licenses/mit-license.php)
(function (e) { "function" === typeof require && "object" === typeof exports && "object" === typeof module ? e(require("knockout"), exports) : "function" === typeof define && define.amd ? define(["knockout", "exports"], e) : e(ko, ko.mapping = {}) })(function (e, f) {
    function y(b, c) {
        var a, d; for (d in c) if (c.hasOwnProperty(d) && c[d]) if (a = f.getType(b[d]), d && b[d] && "array" !== a && "string" !== a) y(b[d], c[d]); else if ("array" === f.getType(b[d]) && "array" === f.getType(c[d])) {
            a = b; for (var e = d, l = b[d], n = c[d], t = {}, g = l.length - 1; 0 <= g; --g) t[l[g]] = l[g]; for (g =
            n.length - 1; 0 <= g; --g) t[n[g]] = n[g]; l = []; n = void 0; for (n in t) l.push(t[n]); a[e] = l
        } else b[d] = c[d]
    } function E(b, c) { var a = {}; y(a, b); y(a, c); return a } function z(b, c) {
        for (var a = E({}, b), e = L.length - 1; 0 <= e; e--) { var f = L[e]; a[f] && (a[""] instanceof Object || (a[""] = {}), a[""][f] = a[f], delete a[f]) } c && (a.ignore = h(c.ignore, a.ignore), a.include = h(c.include, a.include), a.copy = h(c.copy, a.copy), a.observe = h(c.observe, a.observe)); a.ignore = h(a.ignore, j.ignore); a.include = h(a.include, j.include); a.copy = h(a.copy, j.copy); a.observe = h(a.observe,
        j.observe); a.mappedProperties = a.mappedProperties || {}; a.copiedProperties = a.copiedProperties || {}; return a
    } function h(b, c) { "array" !== f.getType(b) && (b = "undefined" === f.getType(b) ? [] : [b]); "array" !== f.getType(c) && (c = "undefined" === f.getType(c) ? [] : [c]); return e.utils.arrayGetDistinctValues(b.concat(c)) } function F(b, c, a, d, k, l, n) {
        var t = "array" === f.getType(e.utils.unwrapObservable(c)); l = l || ""; if (f.isMapped(b)) { var g = e.utils.unwrapObservable(b)[p]; a = E(g, a) } var j = n || k, h = function () {
            return a[d] && a[d].create instanceof
            Function
        }, x = function (b) {
            var f = G, g = e.dependentObservable; e.dependentObservable = function (a, b, c) { c = c || {}; a && "object" == typeof a && (c = a); var d = c.deferEvaluation, M = !1; c.deferEvaluation = !0; a = new H(a, b, c); if (!d) { var g = a, d = e.dependentObservable; e.dependentObservable = H; a = e.isWriteableObservable(g); e.dependentObservable = d; d = H({ read: function () { M || (e.utils.arrayRemoveItem(f, g), M = !0); return g.apply(g, arguments) }, write: a && function (a) { return g(a) }, deferEvaluation: !0 }); d.__DO = g; a = d; f.push(a) } return a }; e.dependentObservable.fn =
            H.fn; e.computed = e.dependentObservable; b = e.utils.unwrapObservable(k) instanceof Array ? a[d].create({ data: b || c, parent: j, skip: N }) : a[d].create({ data: b || c, parent: j }); e.dependentObservable = g; e.computed = e.dependentObservable; return b
        }, u = function () { return a[d] && a[d].update instanceof Function }, v = function (b, f) { var g = { data: f || c, parent: j, target: e.utils.unwrapObservable(b) }; e.isWriteableObservable(b) && (g.observable = b); return a[d].update(g) }; if (n = I.get(c)) return n; d = d || ""; if (t) {
            var t = [], s = !1, m = function (a) { return a };
            a[d] && a[d].key && (m = a[d].key, s = !0); e.isObservable(b) || (b = e.observableArray([]), b.mappedRemove = function (a) { var c = "function" == typeof a ? a : function (b) { return b === m(a) }; return b.remove(function (a) { return c(m(a)) }) }, b.mappedRemoveAll = function (a) { var c = C(a, m); return b.remove(function (a) { return -1 != e.utils.arrayIndexOf(c, m(a)) }) }, b.mappedDestroy = function (a) { var c = "function" == typeof a ? a : function (b) { return b === m(a) }; return b.destroy(function (a) { return c(m(a)) }) }, b.mappedDestroyAll = function (a) {
                var c = C(a, m); return b.destroy(function (a) {
                    return -1 !=
                    e.utils.arrayIndexOf(c, m(a))
                })
            }, b.mappedIndexOf = function (a) { var c = C(b(), m); a = m(a); return e.utils.arrayIndexOf(c, a) }, b.mappedGet = function (a) { return b()[b.mappedIndexOf(a)] }, b.mappedCreate = function (a) { if (-1 !== b.mappedIndexOf(a)) throw Error("There already is an object with the key that you specified."); var c = h() ? x(a) : a; u() && (a = v(c, a), e.isWriteableObservable(c) ? c(a) : c = a); b.push(c); return c }); n = C(e.utils.unwrapObservable(b), m).sort(); g = C(c, m); s && g.sort(); s = e.utils.compareArrays(n, g); n = {}; var J, A = e.utils.unwrapObservable(c),
            y = {}, z = !0, g = 0; for (J = A.length; g < J; g++) { var r = m(A[g]); if (void 0 === r || r instanceof Object) { z = !1; break } y[r] = A[g] } var A = [], B = 0, g = 0; for (J = s.length; g < J; g++) {
                var r = s[g], q, w = l + "[" + g + "]"; switch (r.status) {
                    case "added": var D = z ? y[r.value] : K(e.utils.unwrapObservable(c), r.value, m); q = F(void 0, D, a, d, b, w, k); h() || (q = e.utils.unwrapObservable(q)); w = O(e.utils.unwrapObservable(c), D, n); q === N ? B++ : A[w - B] = q; n[w] = !0; break; case "retained": D = z ? y[r.value] : K(e.utils.unwrapObservable(c), r.value, m); q = K(b, r.value, m); F(q, D, a, d, b, w,
                    k); w = O(e.utils.unwrapObservable(c), D, n); A[w] = q; n[w] = !0; break; case "deleted": q = K(b, r.value, m)
                } t.push({ event: r.status, item: q })
            } b(A); a[d] && a[d].arrayChanged && e.utils.arrayForEach(t, function (b) { a[d].arrayChanged(b.event, b.item) })
        } else if (P(c)) {
            b = e.utils.unwrapObservable(b); if (!b) { if (h()) return s = x(), u() && (s = v(s)), s; if (u()) return v(s); b = {} } u() && (b = v(b)); I.save(c, b); if (u()) return b; Q(c, function (d) {
                var f = l.length ? l + "." + d : d; if (-1 == e.utils.arrayIndexOf(a.ignore, f)) if (-1 != e.utils.arrayIndexOf(a.copy, f)) b[d] =
                c[d]; else if ("object" != typeof c[d] && "array" != typeof c[d] && 0 < a.observe.length && -1 == e.utils.arrayIndexOf(a.observe, f)) b[d] = c[d], a.copiedProperties[f] = !0; else { var g = I.get(c[d]), k = F(b[d], c[d], a, d, b, f, b), g = g || k; if (0 < a.observe.length && -1 == e.utils.arrayIndexOf(a.observe, f)) b[d] = g(), a.copiedProperties[f] = !0; else { if (e.isWriteableObservable(b[d])) { if (g = e.utils.unwrapObservable(g), b[d]() !== g) b[d](g) } else g = void 0 === b[d] ? g : e.utils.unwrapObservable(g), b[d] = g; a.mappedProperties[f] = !0 } }
            })
        } else switch (f.getType(c)) {
            case "function": u() ?
            e.isWriteableObservable(c) ? (c(v(c)), b = c) : b = v(c) : b = c; break; default: if (e.isWriteableObservable(b)) return q = u() ? v(b) : e.utils.unwrapObservable(c), b(q), q; h() || u(); b = h() ? x() : e.observable(e.utils.unwrapObservable(c)); u() && b(v(b))
        } return b
    } function O(b, c, a) { for (var d = 0, e = b.length; d < e; d++) if (!0 !== a[d] && b[d] === c) return d; return null } function R(b, c) { var a; c && (a = c(b)); "undefined" === f.getType(a) && (a = b); return e.utils.unwrapObservable(a) } function K(b, c, a) {
        b = e.utils.unwrapObservable(b); for (var d = 0, f = b.length; d <
        f; d++) { var l = b[d]; if (R(l, a) === c) return l } throw Error("When calling ko.update*, the key '" + c + "' was not found!");
    } function C(b, c) { return e.utils.arrayMap(e.utils.unwrapObservable(b), function (a) { return c ? R(a, c) : a }) } function Q(b, c) { if ("array" === f.getType(b)) for (var a = 0; a < b.length; a++) c(a); else for (a in b) c(a) } function P(b) { var c = f.getType(b); return ("object" === c || "array" === c) && null !== b } function T() {
        var b = [], c = []; this.save = function (a, d) { var f = e.utils.arrayIndexOf(b, a); 0 <= f ? c[f] = d : (b.push(a), c.push(d)) };
        this.get = function (a) { a = e.utils.arrayIndexOf(b, a); return 0 <= a ? c[a] : void 0 }
    } function S() { var b = {}, c = function (a) { var c; try { c = a } catch (e) { c = "$$$" } a = b[c]; void 0 === a && (a = new T, b[c] = a); return a }; this.save = function (a, b) { c(a).save(a, b) }; this.get = function (a) { return c(a).get(a) } } var p = "__ko_mapping__", H = e.dependentObservable, B = 0, G, I, L = ["create", "update", "key", "arrayChanged"], N = {}, x = { include: ["_destroy"], ignore: [], copy: [], observe: [] }, j = x; f.isMapped = function (b) { return (b = e.utils.unwrapObservable(b)) && b[p] }; f.fromJS =
    function (b) { if (0 == arguments.length) throw Error("When calling ko.fromJS, pass the object you want to convert."); try { B++ || (G = [], I = new S); var c, a; 2 == arguments.length && (arguments[1][p] ? a = arguments[1] : c = arguments[1]); 3 == arguments.length && (c = arguments[1], a = arguments[2]); a && (c = E(c, a[p])); c = z(c); var d = F(a, b, c); a && (d = a); if (!--B) for (; G.length;) { var e = G.pop(); e && (e(), e.__DO.throttleEvaluation = e.throttleEvaluation) } d[p] = E(d[p], c); return d } catch (f) { throw B = 0, f; } }; f.fromJSON = function (b) {
        var c = e.utils.parseJson(b);
        arguments[0] = c; return f.fromJS.apply(this, arguments)
    }; f.updateFromJS = function () { throw Error("ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!"); }; f.updateFromJSON = function () { throw Error("ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!"); }; f.toJS = function (b, c) {
        j || f.resetDefaultOptions(); if (0 == arguments.length) throw Error("When calling ko.mapping.toJS, pass the object you want to convert.");
        if ("array" !== f.getType(j.ignore)) throw Error("ko.mapping.defaultOptions().ignore should be an array."); if ("array" !== f.getType(j.include)) throw Error("ko.mapping.defaultOptions().include should be an array."); if ("array" !== f.getType(j.copy)) throw Error("ko.mapping.defaultOptions().copy should be an array."); c = z(c, b[p]); return f.visitModel(b, function (a) { return e.utils.unwrapObservable(a) }, c)
    }; f.toJSON = function (b, c) { var a = f.toJS(b, c); return e.utils.stringifyJson(a) }; f.defaultOptions = function () {
        if (0 < arguments.length) j =
        arguments[0]; else return j
    }; f.resetDefaultOptions = function () { j = { include: x.include.slice(0), ignore: x.ignore.slice(0), copy: x.copy.slice(0) } }; f.getType = function (b) { if (b && "object" === typeof b) { if (b.constructor === Date) return "date"; if (b.constructor === Array) return "array" } return typeof b }; f.visitModel = function (b, c, a) {
        a = a || {}; a.visitedObjects = a.visitedObjects || new S; var d, k = e.utils.unwrapObservable(b); if (P(k)) a = z(a, k[p]), c(b, a.parentName), d = "array" === f.getType(k) ? [] : {}; else return c(b, a.parentName); a.visitedObjects.save(b,
        d); var l = a.parentName; Q(k, function (b) {
            if (!(a.ignore && -1 != e.utils.arrayIndexOf(a.ignore, b))) {
                var j = k[b], g = a, h = l || ""; "array" === f.getType(k) ? l && (h += "[" + b + "]") : (l && (h += "."), h += b); g.parentName = h; if (!(-1 === e.utils.arrayIndexOf(a.copy, b) && -1 === e.utils.arrayIndexOf(a.include, b) && k[p] && k[p].mappedProperties && !k[p].mappedProperties[b] && k[p].copiedProperties && !k[p].copiedProperties[b] && "array" !== f.getType(k))) switch (f.getType(e.utils.unwrapObservable(j))) {
                    case "object": case "array": case "undefined": g = a.visitedObjects.get(j);
                        d[b] = "undefined" !== f.getType(g) ? g : f.visitModel(j, c, a); break; default: d[b] = c(j, a.parentName)
                }
            }
        }); return d
    }
});
/**
 * Copyright (c) 2011-2014 Felix Gnass
 * Licensed under the MIT license
 */
(function(root, factory) {

  /* CommonJS */
  if (typeof exports == 'object')  module.exports = factory()

  /* AMD module */
  else if (typeof define == 'function' && define.amd) define(factory)

  /* Browser global */
  else root.Spinner = factory()
}
(this, function() {
  "use strict";

  var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */
    , animations = {} /* Animation rules keyed by their name */
    , useCssAnimations /* Whether to use CSS animations or setTimeout */

  /**
   * Utility function to create elements. If no tag name is given,
   * a DIV is created. Optionally properties can be passed.
   */
  function createEl(tag, prop) {
    var el = document.createElement(tag || 'div')
      , n

    for(n in prop) el[n] = prop[n]
    return el
  }

  /**
   * Appends children and returns the parent.
   */
  function ins(parent /* child1, child2, ...*/) {
    for (var i=1, n=arguments.length; i<n; i++)
      parent.appendChild(arguments[i])

    return parent
  }

  /**
   * Insert a new stylesheet to hold the @keyframe or VML rules.
   */
  var sheet = (function() {
    var el = createEl('style', {type : 'text/css'})
    ins(document.getElementsByTagName('head')[0], el)
    return el.sheet || el.styleSheet
  }())

  /**
   * Creates an opacity keyframe animation rule and returns its name.
   * Since most mobile Webkits have timing issues with animation-delay,
   * we create separate rules for each line/segment.
   */
  function addAnimation(alpha, trail, i, lines) {
    var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-')
      , start = 0.01 + i/lines * 100
      , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha)
      , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase()
      , pre = prefix && '-' + prefix + '-' || ''

    if (!animations[name]) {
      sheet.insertRule(
        '@' + pre + 'keyframes ' + name + '{' +
        '0%{opacity:' + z + '}' +
        start + '%{opacity:' + alpha + '}' +
        (start+0.01) + '%{opacity:1}' +
        (start+trail) % 100 + '%{opacity:' + alpha + '}' +
        '100%{opacity:' + z + '}' +
        '}', sheet.cssRules.length)

      animations[name] = 1
    }

    return name
  }

  /**
   * Tries various vendor prefixes and returns the first supported property.
   */
  function vendor(el, prop) {
    var s = el.style
      , pp
      , i

    prop = prop.charAt(0).toUpperCase() + prop.slice(1)
    for(i=0; i<prefixes.length; i++) {
      pp = prefixes[i]+prop
      if(s[pp] !== undefined) return pp
    }
    if(s[prop] !== undefined) return prop
  }

  /**
   * Sets multiple style properties at once.
   */
  function css(el, prop) {
    for (var n in prop)
      el.style[vendor(el, n)||n] = prop[n]

    return el
  }

  /**
   * Fills in default values.
   */
  function merge(obj) {
    for (var i=1; i < arguments.length; i++) {
      var def = arguments[i]
      for (var n in def)
        if (obj[n] === undefined) obj[n] = def[n]
    }
    return obj
  }

  /**
   * Returns the absolute page-offset of the given element.
   */
  function pos(el) {
    var o = { x:el.offsetLeft, y:el.offsetTop }
    while((el = el.offsetParent))
      o.x+=el.offsetLeft, o.y+=el.offsetTop

    return o
  }

  /**
   * Returns the line color from the given string or array.
   */
  function getColor(color, idx) {
    return typeof color == 'string' ? color : color[idx % color.length]
  }

  // Built-in defaults

  var defaults = {
    lines: 12,            // The number of lines to draw
    length: 7,            // The length of each line
    width: 5,             // The line thickness
    radius: 10,           // The radius of the inner circle
    rotate: 0,            // Rotation offset
    corners: 1,           // Roundness (0..1)
    color: '#000',        // #rgb or #rrggbb
    direction: 1,         // 1: clockwise, -1: counterclockwise
    speed: 1,             // Rounds per second
    trail: 100,           // Afterglow percentage
    opacity: 1/4,         // Opacity of the lines
    fps: 20,              // Frames per second when using setTimeout()
    zIndex: 2e9,          // Use a high z-index by default
    className: 'spinner', // CSS class to assign to the element
    top: '50%',           // center vertically
    left: '50%',          // center horizontally
    position: 'absolute'  // element position
  }

  /** The constructor */
  function Spinner(o) {
    this.opts = merge(o || {}, Spinner.defaults, defaults)
  }

  // Global defaults that override the built-ins:
  Spinner.defaults = {}

  merge(Spinner.prototype, {

    /**
     * Adds the spinner to the given target element. If this instance is already
     * spinning, it is automatically removed from its previous target b calling
     * stop() internally.
     */
    spin: function(target) {
      this.stop()

      var self = this
        , o = self.opts
        , el = self.el = css(createEl(0, {className: o.className}), {position: o.position, width: 0, zIndex: o.zIndex})
        , mid = o.radius+o.length+o.width

      css(el, {
        left: o.left,
        top: o.top
      })
        
      if (target) {
        target.insertBefore(el, target.firstChild||null)
      }

      el.setAttribute('role', 'progressbar')
      self.lines(el, self.opts)

      if (!useCssAnimations) {
        // No CSS animation support, use setTimeout() instead
        var i = 0
          , start = (o.lines - 1) * (1 - o.direction) / 2
          , alpha
          , fps = o.fps
          , f = fps/o.speed
          , ostep = (1-o.opacity) / (f*o.trail / 100)
          , astep = f/o.lines

        ;(function anim() {
          i++;
          for (var j = 0; j < o.lines; j++) {
            alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity)

            self.opacity(el, j * o.direction + start, alpha, o)
          }
          self.timeout = self.el && setTimeout(anim, ~~(1000/fps))
        })()
      }
      return self
    },

    /**
     * Stops and removes the Spinner.
     */
    stop: function() {
      var el = this.el
      if (el) {
        clearTimeout(this.timeout)
        if (el.parentNode) el.parentNode.removeChild(el)
        this.el = undefined
      }
      return this
    },

    /**
     * Internal method that draws the individual lines. Will be overwritten
     * in VML fallback mode below.
     */
    lines: function(el, o) {
      var i = 0
        , start = (o.lines - 1) * (1 - o.direction) / 2
        , seg

      function fill(color, shadow) {
        return css(createEl(), {
          position: 'absolute',
          width: (o.length+o.width) + 'px',
          height: o.width + 'px',
          background: color,
          boxShadow: shadow,
          transformOrigin: 'left',
          transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)',
          borderRadius: (o.corners * o.width>>1) + 'px'
        })
      }

      for (; i < o.lines; i++) {
        seg = css(createEl(), {
          position: 'absolute',
          top: 1+~(o.width/2) + 'px',
          transform: o.hwaccel ? 'translate3d(0,0,0)' : '',
          opacity: o.opacity,
          animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1/o.speed + 's linear infinite'
        })

        if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'}))
        ins(el, ins(seg, fill(getColor(o.color, i), '0 0 1px rgba(0,0,0,.1)')))
      }
      return el
    },

    /**
     * Internal method that adjusts the opacity of a single line.
     * Will be overwritten in VML fallback mode below.
     */
    opacity: function(el, i, val) {
      if (i < el.childNodes.length) el.childNodes[i].style.opacity = val
    }

  })


  function initVML() {

    /* Utility function to create a VML tag */
    function vml(tag, attr) {
      return createEl('<' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', attr)
    }

    // No CSS transforms but VML support, add a CSS rule for VML elements:
    sheet.addRule('.spin-vml', 'behavior:url(#default#VML)')

    Spinner.prototype.lines = function(el, o) {
      var r = o.length+o.width
        , s = 2*r

      function grp() {
        return css(
          vml('group', {
            coordsize: s + ' ' + s,
            coordorigin: -r + ' ' + -r
          }),
          { width: s, height: s }
        )
      }

      var margin = -(o.width+o.length)*2 + 'px'
        , g = css(grp(), {position: 'absolute', top: margin, left: margin})
        , i

      function seg(i, dx, filter) {
        ins(g,
          ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}),
            ins(css(vml('roundrect', {arcsize: o.corners}), {
                width: r,
                height: o.width,
                left: o.radius,
                top: -o.width>>1,
                filter: filter
              }),
              vml('fill', {color: getColor(o.color, i), opacity: o.opacity}),
              vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change
            )
          )
        )
      }

      if (o.shadow)
        for (i = 1; i <= o.lines; i++)
          seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)')

      for (i = 1; i <= o.lines; i++) seg(i)
      return ins(el, g)
    }

    Spinner.prototype.opacity = function(el, i, val, o) {
      var c = el.firstChild
      o = o.shadow && o.lines || 0
      if (c && i+o < c.childNodes.length) {
        c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild
        if (c) c.opacity = val
      }
    }
  }

  var probe = css(createEl('group'), {behavior: 'url(#default#VML)'})

  if (!vendor(probe, 'transform') && probe.adj) initVML()
  else useCssAnimations = vendor(probe, 'animation')

  return Spinner

}));
/*!
 * Ladda
 * http://lab.hakim.se/ladda
 * MIT licensed
 *
 * Copyright (C) 2014 Hakim El Hattab, http://hakim.se
 */
/* jshint node:true, browser:true */
(function( root, factory ) {

	// CommonJS
	if( typeof exports === 'object' )  {
		module.exports = factory(require('spin.js'));
	}
	// AMD module
	else if( typeof define === 'function' && define.amd ) {
		define( [ 'spin' ], factory );
	}
	// Browser global
	else {
		root.Ladda = factory( root.Spinner );
	}

}
(this, function( Spinner ) {
	'use strict';

	// All currently instantiated instances of Ladda
	var ALL_INSTANCES = [];

	/**
	 * Creates a new instance of Ladda which wraps the
	 * target button element.
	 *
	 * @return An API object that can be used to control
	 * the loading animation state.
	 */
	function create( button ) {

		if( typeof button === 'undefined' ) {
			console.warn( "Ladda button target must be defined." );
			return;
		}

		// The text contents must be wrapped in a ladda-label
		// element, create one if it doesn't already exist
		if( !button.querySelector( '.ladda-label' ) ) {
			button.innerHTML = '<span class="ladda-label">'+ button.innerHTML +'</span>';
		}

		// The spinner component
		var spinner;

		// Wrapper element for the spinner
		var spinnerWrapper = document.createElement( 'span' );
		spinnerWrapper.className = 'ladda-spinner';
		button.appendChild( spinnerWrapper );

		// Timer used to delay starting/stopping
		var timer;

		var instance = {

			/**
			 * Enter the loading state.
			 */
			start: function() {

				// Create the spinner if it doesn't already exist
				if( !spinner ) spinner = createSpinner( button );

				button.setAttribute( 'disabled', '' );
				button.setAttribute( 'data-loading', '' );

				clearTimeout( timer );
				spinner.spin( spinnerWrapper );

				this.setProgress( 0 );

				return this; // chain

			},

			/**
			 * Enter the loading state, after a delay.
			 */
			startAfter: function( delay ) {

				clearTimeout( timer );
				timer = setTimeout( function() { instance.start(); }, delay );

				return this; // chain

			},

			/**
			 * Exit the loading state.
			 */
			stop: function() {

				button.removeAttribute( 'disabled' );
				button.removeAttribute( 'data-loading' );

				// Kill the animation after a delay to make sure it
				// runs for the duration of the button transition
				clearTimeout( timer );

				if( spinner ) {
					timer = setTimeout( function() { spinner.stop(); }, 1000 );
				}

				return this; // chain

			},

			/**
			 * Toggle the loading state on/off.
			 */
			toggle: function() {

				if( this.isLoading() ) {
					this.stop();
				}
				else {
					this.start();
				}

				return this; // chain

			},

			/**
			 * Sets the width of the visual progress bar inside of
			 * this Ladda button
			 *
			 * @param {Number} progress in the range of 0-1
			 */
			setProgress: function( progress ) {

				// Cap it
				progress = Math.max( Math.min( progress, 1 ), 0 );

				var progressElement = button.querySelector( '.ladda-progress' );

				// Remove the progress bar if we're at 0 progress
				if( progress === 0 && progressElement && progressElement.parentNode ) {
					progressElement.parentNode.removeChild( progressElement );
				}
				else {
					if( !progressElement ) {
						progressElement = document.createElement( 'div' );
						progressElement.className = 'ladda-progress';
						button.appendChild( progressElement );
					}

					progressElement.style.width = ( ( progress || 0 ) * button.offsetWidth ) + 'px';
				}

			},

			enable: function() {

				this.stop();

				return this; // chain

			},

			disable: function () {

				this.stop();
				button.setAttribute( 'disabled', '' );

				return this; // chain

			},

			isLoading: function() {

				return button.hasAttribute( 'data-loading' );

			},

			remove: function() {

				clearTimeout( timer );

				button.removeAttribute( 'disabled', '' );
				button.removeAttribute( 'data-loading', '' );

				if( spinner ) {
					spinner.stop();
					spinner = null;
				}

				for( var i = 0, len = ALL_INSTANCES.length; i < len; i++ ) {
					if( instance === ALL_INSTANCES[i] ) {
						ALL_INSTANCES.splice( i, 1 );
						break;
					}
				}

			}

		};

		ALL_INSTANCES.push( instance );

		return instance;

	}

	/**
	* Get the first ancestor node from an element, having a
	* certain type.
	*
	* @param elem An HTML element
	* @param type an HTML tag type (uppercased)
	*
	* @return An HTML element
	*/
	function getAncestorOfTagType( elem, type ) {

		while ( elem.parentNode && elem.tagName !== type ) {
			elem = elem.parentNode;
		}

		return ( type === elem.tagName ) ? elem : undefined;

	}

	/**
	 * Returns a list of all inputs in the given form that
	 * have their `required` attribute set.
	 *
	 * @param form The from HTML element to look in
	 *
	 * @return A list of elements
	 */
	function getRequiredFields( form ) {

		var requirables = [ 'input', 'textarea' ];
		var inputs = [];

		for( var i = 0; i < requirables.length; i++ ) {
			var candidates = form.getElementsByTagName( requirables[i] );
			for( var j = 0; j < candidates.length; j++ ) {
				if ( candidates[j].hasAttribute( 'required' ) ) {
					inputs.push( candidates[j] );
				}
			}
		}

		return inputs;

	}


	/**
	 * Binds the target buttons to automatically enter the
	 * loading state when clicked.
	 *
	 * @param target Either an HTML element or a CSS selector.
	 * @param options
	 *          - timeout Number of milliseconds to wait before
	 *            automatically cancelling the animation.
	 */
	function bind( target, options ) {

		options = options || {};

		var targets = [];

		if( typeof target === 'string' ) {
			targets = toArray( document.querySelectorAll( target ) );
		}
		else if( typeof target === 'object' && typeof target.nodeName === 'string' ) {
			targets = [ target ];
		}

		for( var i = 0, len = targets.length; i < len; i++ ) {

			(function() {
				var element = targets[i];

				// Make sure we're working with a DOM element
				if( typeof element.addEventListener === 'function' ) {
					var instance = create( element );
					var timeout = -1;

					element.addEventListener( 'click', function( event ) {

						// If the button belongs to a form, make sure all the
						// fields in that form are filled out
						var valid = true;
						var form = getAncestorOfTagType( element, 'FORM' );

						if (typeof form !== 'undefined') {
							var requireds = getRequiredFields( form );
							for( var i = 0; i < requireds.length; i++ ) {
								// Alternatively to this trim() check,
								// we could have use .checkValidity() or .validity.valid
								if( requireds[i].value.replace( /^\s+|\s+$/g, '' ) === '' ) {
									valid = false;
								}
							}
						}

						if( valid ) {
							// This is asynchronous to avoid an issue where setting
							// the disabled attribute on the button prevents forms
							// from submitting
							instance.startAfter( 1 );

							// Set a loading timeout if one is specified
							if( typeof options.timeout === 'number' ) {
								clearTimeout( timeout );
								timeout = setTimeout( instance.stop, options.timeout );
							}

							// Invoke callbacks
							if( typeof options.callback === 'function' ) {
								options.callback.apply( null, [ instance ] );
							}
						}

					}, false );
				}
			})();

		}

	}

	/**
	 * Stops ALL current loading animations.
	 */
	function stopAll() {

		for( var i = 0, len = ALL_INSTANCES.length; i < len; i++ ) {
			ALL_INSTANCES[i].stop();
		}

	}

	function createSpinner( button ) {

		var height = button.offsetHeight,
			spinnerColor;

		if( height === 0 ) {
			// We may have an element that is not visible so
			// we attempt to get the height in a different way
			height = parseFloat( window.getComputedStyle( button ).height );
		}

		// If the button is tall we can afford some padding
		if( height > 32 ) {
			height *= 0.8;
		}

		// Prefer an explicit height if one is defined
		if( button.hasAttribute( 'data-spinner-size' ) ) {
			height = parseInt( button.getAttribute( 'data-spinner-size' ), 10 );
		}

		// Allow buttons to specify the color of the spinner element
		if( button.hasAttribute( 'data-spinner-color' ) ) {
			spinnerColor = button.getAttribute( 'data-spinner-color' );
		}

		var lines = 12,
			radius = height * 0.2,
			length = radius * 0.6,
			width = radius < 7 ? 2 : 3;

		return new Spinner( {
			color: spinnerColor || '#fff',
			lines: lines,
			radius: radius,
			length: length,
			width: width,
			zIndex: 'auto',
			top: 'auto',
			left: 'auto',
			className: ''
		} );

	}

	function toArray( nodes ) {

		var a = [];

		for ( var i = 0; i < nodes.length; i++ ) {
			a.push( nodes[ i ] );
		}

		return a;

	}

	// Public API
	return {

		bind: bind,
		create: create,
		stopAll: stopAll

	};

}));
/** Notify.js - v0.3.1 - 2014/06/29
 * http://notifyjs.com/
 * Copyright (c) 2014 Jaime Pillora - MIT
 */
(function(window,document,$,undefined) {
'use strict';

var Notification, addStyle, blankFieldName, coreStyle, createElem, defaults, encode, find, findFields, getAnchorElement, getStyle, globalAnchors, hAligns, incr, inherit, insertCSS, mainPositions, opposites, parsePosition, pluginClassName, pluginName, pluginOptions, positions, realign, stylePrefixes, styles, vAligns,
  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

pluginName = 'notify';

pluginClassName = pluginName + 'js';

blankFieldName = pluginName + "!blank";

positions = {
  t: 'top',
  m: 'middle',
  b: 'bottom',
  l: 'left',
  c: 'center',
  r: 'right'
};

hAligns = ['l', 'c', 'r'];

vAligns = ['t', 'm', 'b'];

mainPositions = ['t', 'b', 'l', 'r'];

opposites = {
  t: 'b',
  m: null,
  b: 't',
  l: 'r',
  c: null,
  r: 'l'
};

parsePosition = function(str) {
  var pos;
  pos = [];
  $.each(str.split(/\W+/), function(i, word) {
    var w;
    w = word.toLowerCase().charAt(0);
    if (positions[w]) {
      return pos.push(w);
    }
  });
  return pos;
};

styles = {};

coreStyle = {
  name: 'core',
  html: "<div class=\"" + pluginClassName + "-wrapper\">\n  <div class=\"" + pluginClassName + "-arrow\"></div>\n  <div class=\"" + pluginClassName + "-container\"></div>\n</div>",
  css: "." + pluginClassName + "-corner {\n  position: fixed;\n  margin: 5px;\n  z-index: 1050;\n}\n\n." + pluginClassName + "-corner ." + pluginClassName + "-wrapper,\n." + pluginClassName + "-corner ." + pluginClassName + "-container {\n  position: relative;\n  display: block;\n  height: inherit;\n  width: inherit;\n  margin: 3px;\n}\n\n." + pluginClassName + "-wrapper {\n  z-index: 1;\n  position: absolute;\n  display: inline-block;\n  height: 0;\n  width: 0;\n}\n\n." + pluginClassName + "-container {\n  display: none;\n  z-index: 1;\n  position: absolute;\n}\n\n." + pluginClassName + "-hidable {\n  cursor: pointer;\n}\n\n[data-notify-text],[data-notify-html] {\n  position: relative;\n}\n\n." + pluginClassName + "-arrow {\n  position: absolute;\n  z-index: 2;\n  width: 0;\n  height: 0;\n}"
};

stylePrefixes = {
  "border-radius": ["-webkit-", "-moz-"]
};

getStyle = function(name) {
  return styles[name];
};

addStyle = function(name, def) {
  var cssText, elem, fields, _ref;
  if (!name) {
    throw "Missing Style name";
  }
  if (!def) {
    throw "Missing Style definition";
  }
  if (!def.html) {
    throw "Missing Style HTML";
  }
  if ((_ref = styles[name]) != null ? _ref.cssElem : void 0) {
    if (window.console) {
      console.warn("" + pluginName + ": overwriting style '" + name + "'");
    }
    styles[name].cssElem.remove();
  }
  def.name = name;
  styles[name] = def;
  cssText = "";
  if (def.classes) {
    $.each(def.classes, function(className, props) {
      cssText += "." + pluginClassName + "-" + def.name + "-" + className + " {\n";
      $.each(props, function(name, val) {
        if (stylePrefixes[name]) {
          $.each(stylePrefixes[name], function(i, prefix) {
            return cssText += "  " + prefix + name + ": " + val + ";\n";
          });
        }
        return cssText += "  " + name + ": " + val + ";\n";
      });
      return cssText += "}\n";
    });
  }
  if (def.css) {
    cssText += "/* styles for " + def.name + " */\n" + def.css;
  }
  if (cssText) {
    def.cssElem = insertCSS(cssText);
    def.cssElem.attr('id', "notify-" + def.name);
  }
  fields = {};
  elem = $(def.html);
  findFields('html', elem, fields);
  findFields('text', elem, fields);
  return def.fields = fields;
};

insertCSS = function(cssText) {
  var elem;
  elem = createElem("style");
  elem.attr('type', 'text/css');
  $("head").append(elem);
  try {
    elem.html(cssText);
  } catch (e) {
    elem[0].styleSheet.cssText = cssText;
  }
  return elem;
};

findFields = function(type, elem, fields) {
  var attr;
  if (type !== 'html') {
    type = 'text';
  }
  attr = "data-notify-" + type;
  return find(elem, "[" + attr + "]").each(function() {
    var name;
    name = $(this).attr(attr);
    if (!name) {
      name = blankFieldName;
    }
    return fields[name] = type;
  });
};

find = function(elem, selector) {
  if (elem.is(selector)) {
    return elem;
  } else {
    return elem.find(selector);
  }
};

pluginOptions = {
  clickToHide: true,
  autoHide: true,
  autoHideDelay: 5000,
  arrowShow: true,
  arrowSize: 5,
  breakNewLines: true,
  elementPosition: 'bottom',
  globalPosition: 'top right',
  style: 'bootstrap',
  className: 'error',
  showAnimation: 'slideDown',
  showDuration: 400,
  hideAnimation: 'slideUp',
  hideDuration: 200,
  gap: 5
};

inherit = function(a, b) {
  var F;
  F = function() {};
  F.prototype = a;
  return $.extend(true, new F(), b);
};

defaults = function(opts) {
  return $.extend(pluginOptions, opts);
};

createElem = function(tag) {
  return $("<" + tag + "></" + tag + ">");
};

globalAnchors = {};

getAnchorElement = function(element) {
  var radios;
  if (element.is('[type=radio]')) {
    radios = element.parents('form:first').find('[type=radio]').filter(function(i, e) {
      return $(e).attr('name') === element.attr('name');
    });
    element = radios.first();
  }
  return element;
};

incr = function(obj, pos, val) {
  var opp, temp;
  if (typeof val === 'string') {
    val = parseInt(val, 10);
  } else if (typeof val !== 'number') {
    return;
  }
  if (isNaN(val)) {
    return;
  }
  opp = positions[opposites[pos.charAt(0)]];
  temp = pos;
  if (obj[opp] !== undefined) {
    pos = positions[opp.charAt(0)];
    val = -val;
  }
  if (obj[pos] === undefined) {
    obj[pos] = val;
  } else {
    obj[pos] += val;
  }
  return null;
};

realign = function(alignment, inner, outer) {
  if (alignment === 'l' || alignment === 't') {
    return 0;
  } else if (alignment === 'c' || alignment === 'm') {
    return outer / 2 - inner / 2;
  } else if (alignment === 'r' || alignment === 'b') {
    return outer - inner;
  }
  throw "Invalid alignment";
};

encode = function(text) {
  encode.e = encode.e || createElem("div");
  return encode.e.text(text).html();
};

Notification = (function() {

  function Notification(elem, data, options) {
    if (typeof options === 'string') {
      options = {
        className: options
      };
    }
    this.options = inherit(pluginOptions, $.isPlainObject(options) ? options : {});
    this.loadHTML();
    this.wrapper = $(coreStyle.html);
    if (this.options.clickToHide) {
      this.wrapper.addClass("" + pluginClassName + "-hidable");
    }
    this.wrapper.data(pluginClassName, this);
    this.arrow = this.wrapper.find("." + pluginClassName + "-arrow");
    this.container = this.wrapper.find("." + pluginClassName + "-container");
    this.container.append(this.userContainer);
    if (elem && elem.length) {
      this.elementType = elem.attr('type');
      this.originalElement = elem;
      this.elem = getAnchorElement(elem);
      this.elem.data(pluginClassName, this);
      this.elem.before(this.wrapper);
    }
    this.container.hide();
    this.run(data);
  }

  Notification.prototype.loadHTML = function() {
    var style;
    style = this.getStyle();
    this.userContainer = $(style.html);
    return this.userFields = style.fields;
  };

  Notification.prototype.show = function(show, userCallback) {
    var args, callback, elems, fn, hidden,
      _this = this;
    callback = function() {
      if (!show && !_this.elem) {
        _this.destroy();
      }
      if (userCallback) {
        return userCallback();
      }
    };
    hidden = this.container.parent().parents(':hidden').length > 0;
    elems = this.container.add(this.arrow);
    args = [];
    if (hidden && show) {
      fn = 'show';
    } else if (hidden && !show) {
      fn = 'hide';
    } else if (!hidden && show) {
      fn = this.options.showAnimation;
      args.push(this.options.showDuration);
    } else if (!hidden && !show) {
      fn = this.options.hideAnimation;
      args.push(this.options.hideDuration);
    } else {
      return callback();
    }
    args.push(callback);
    return elems[fn].apply(elems, args);
  };

  Notification.prototype.setGlobalPosition = function() {
    var align, anchor, css, key, main, pAlign, pMain, _ref;
    _ref = this.getPosition(), pMain = _ref[0], pAlign = _ref[1];
    main = positions[pMain];
    align = positions[pAlign];
    key = pMain + "|" + pAlign;
    anchor = globalAnchors[key];
    if (!anchor) {
      anchor = globalAnchors[key] = createElem("div");
      css = {};
      css[main] = 0;
      if (align === 'middle') {
        css.top = '45%';
      } else if (align === 'center') {
        css.left = '45%';
      } else {
        css[align] = 0;
      }
      anchor.css(css).addClass("" + pluginClassName + "-corner");
      $("body").append(anchor);
    }
    return anchor.prepend(this.wrapper);
  };

  Notification.prototype.setElementPosition = function() {
    var arrowColor, arrowCss, arrowSize, color, contH, contW, css, elemH, elemIH, elemIW, elemPos, elemW, gap, mainFull, margin, opp, oppFull, pAlign, pArrow, pMain, pos, posFull, position, wrapPos, _i, _j, _len, _len1, _ref;
    position = this.getPosition();
    pMain = position[0], pAlign = position[1], pArrow = position[2];
    elemPos = this.elem.position();
    elemH = this.elem.outerHeight();
    elemW = this.elem.outerWidth();
    elemIH = this.elem.innerHeight();
    elemIW = this.elem.innerWidth();
    wrapPos = this.wrapper.position();
    contH = this.container.height();
    contW = this.container.width();
    mainFull = positions[pMain];
    opp = opposites[pMain];
    oppFull = positions[opp];
    css = {};
    css[oppFull] = pMain === 'b' ? elemH : pMain === 'r' ? elemW : 0;
    incr(css, 'top', elemPos.top - wrapPos.top);
    incr(css, 'left', elemPos.left - wrapPos.left);
    _ref = ['top', 'left'];
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      pos = _ref[_i];
      margin = parseInt(this.elem.css("margin-" + pos), 10);
      if (margin) {
        incr(css, pos, margin);
      }
    }
    gap = Math.max(0, this.options.gap - (this.options.arrowShow ? arrowSize : 0));
    incr(css, oppFull, gap);
    if (!this.options.arrowShow) {
      this.arrow.hide();
    } else {
      arrowSize = this.options.arrowSize;
      arrowCss = $.extend({}, css);
      arrowColor = this.userContainer.css("border-color") || this.userContainer.css("background-color") || 'white';
      for (_j = 0, _len1 = mainPositions.length; _j < _len1; _j++) {
        pos = mainPositions[_j];
        posFull = positions[pos];
        if (pos === opp) {
          continue;
        }
        color = posFull === mainFull ? arrowColor : 'transparent';
        arrowCss["border-" + posFull] = "" + arrowSize + "px solid " + color;
      }
      incr(css, positions[opp], arrowSize);
      if (__indexOf.call(mainPositions, pAlign) >= 0) {
        incr(arrowCss, positions[pAlign], arrowSize * 2);
      }
    }
    if (__indexOf.call(vAligns, pMain) >= 0) {
      incr(css, 'left', realign(pAlign, contW, elemW));
      if (arrowCss) {
        incr(arrowCss, 'left', realign(pAlign, arrowSize, elemIW));
      }
    } else if (__indexOf.call(hAligns, pMain) >= 0) {
      incr(css, 'top', realign(pAlign, contH, elemH));
      if (arrowCss) {
        incr(arrowCss, 'top', realign(pAlign, arrowSize, elemIH));
      }
    }
    if (this.container.is(":visible")) {
      css.display = 'block';
    }
    this.container.removeAttr('style').css(css);
    if (arrowCss) {
      return this.arrow.removeAttr('style').css(arrowCss);
    }
  };

  Notification.prototype.getPosition = function() {
    var pos, text, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
    text = this.options.position || (this.elem ? this.options.elementPosition : this.options.globalPosition);
    pos = parsePosition(text);
    if (pos.length === 0) {
      pos[0] = 'b';
    }
    if (_ref = pos[0], __indexOf.call(mainPositions, _ref) < 0) {
      throw "Must be one of [" + mainPositions + "]";
    }
    if (pos.length === 1 || ((_ref1 = pos[0], __indexOf.call(vAligns, _ref1) >= 0) && (_ref2 = pos[1], __indexOf.call(hAligns, _ref2) < 0)) || ((_ref3 = pos[0], __indexOf.call(hAligns, _ref3) >= 0) && (_ref4 = pos[1], __indexOf.call(vAligns, _ref4) < 0))) {
      pos[1] = (_ref5 = pos[0], __indexOf.call(hAligns, _ref5) >= 0) ? 'm' : 'l';
    }
    if (pos.length === 2) {
      pos[2] = pos[1];
    }
    return pos;
  };

  Notification.prototype.getStyle = function(name) {
    var style;
    if (!name) {
      name = this.options.style;
    }
    if (!name) {
      name = 'default';
    }
    style = styles[name];
    if (!style) {
      throw "Missing style: " + name;
    }
    return style;
  };

  Notification.prototype.updateClasses = function() {
    var classes, style;
    classes = ['base'];
    if ($.isArray(this.options.className)) {
      classes = classes.concat(this.options.className);
    } else if (this.options.className) {
      classes.push(this.options.className);
    }
    style = this.getStyle();
    classes = $.map(classes, function(n) {
      return "" + pluginClassName + "-" + style.name + "-" + n;
    }).join(' ');
    return this.userContainer.attr('class', classes);
  };

  Notification.prototype.run = function(data, options) {
    var d, datas, name, type, value,
      _this = this;
    if ($.isPlainObject(options)) {
      $.extend(this.options, options);
    } else if ($.type(options) === 'string') {
      this.options.className = options;
    }
    if (this.container && !data) {
      this.show(false);
      return;
    } else if (!this.container && !data) {
      return;
    }
    datas = {};
    if ($.isPlainObject(data)) {
      datas = data;
    } else {
      datas[blankFieldName] = data;
    }
    for (name in datas) {
      d = datas[name];
      type = this.userFields[name];
      if (!type) {
        continue;
      }
      if (type === 'text') {
        d = encode(d);
        if (this.options.breakNewLines) {
          d = d.replace(/\n/g, '<br/>');
        }
      }
      value = name === blankFieldName ? '' : '=' + name;
      find(this.userContainer, "[data-notify-" + type + value + "]").html(d);
    }
    this.updateClasses();
    if (this.elem) {
      this.setElementPosition();
    } else {
      this.setGlobalPosition();
    }
    this.show(true);
    if (this.options.autoHide) {
      clearTimeout(this.autohideTimer);
      return this.autohideTimer = setTimeout(function() {
        return _this.show(false);
      }, this.options.autoHideDelay);
    }
  };

  Notification.prototype.destroy = function() {
    return this.wrapper.remove();
  };

  return Notification;

})();

$[pluginName] = function(elem, data, options) {
  if ((elem && elem.nodeName) || elem.jquery) {
    $(elem)[pluginName](data, options);
  } else {
    options = data;
    data = elem;
    new Notification(null, data, options);
  }
  return elem;
};

$.fn[pluginName] = function(data, options) {
  $(this).each(function() {
    var inst;
    inst = getAnchorElement($(this)).data(pluginClassName);
    if (inst) {
      return inst.run(data, options);
    } else {
      return new Notification($(this), data, options);
    }
  });
  return this;
};

$.extend($[pluginName], {
  defaults: defaults,
  addStyle: addStyle,
  pluginOptions: pluginOptions,
  getStyle: getStyle,
  insertCSS: insertCSS
});

$(function() {
  insertCSS(coreStyle.css).attr('id', 'core-notify');
  $(document).on('click', "." + pluginClassName + "-hidable", function(e) {
    return $(this).trigger('notify-hide');
  });
  return $(document).on('notify-hide', "." + pluginClassName + "-wrapper", function(e) {
    var _ref;
    return (_ref = $(this).data(pluginClassName)) != null ? _ref.show(false) : void 0;
  });
});

}(window,document,jQuery));

$.notify.addStyle("bootstrap", {
  html: "<div>\n<span data-notify-text></span>\n</div>",
  classes: {
    base: {
      "font-weight": "bold",
      "padding": "8px 15px 8px 14px",
      "text-shadow": "0 1px 0 rgba(255, 255, 255, 0.5)",
      "background-color": "#fcf8e3",
      "border": "1px solid #fbeed5",
      "border-radius": "4px",
      "white-space": "nowrap",
      "padding-left": "25px",
      "background-repeat": "no-repeat",
      "background-position": "3px 7px"
    },
    error: {
      "color": "#B94A48",
      "background-color": "#F2DEDE",
      "border-color": "#EED3D7",
      "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)"
    },
    success: {
      "color": "#468847",
      "background-color": "#DFF0D8",
      "border-color": "#D6E9C6",
      "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)"
    },
    info: {
      "color": "#3A87AD",
      "background-color": "#D9EDF7",
      "border-color": "#BCE8F1",
      "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYFAhkSsdes/QAAA8dJREFUOMvVlGtMW2UYx//POaWHXg6lLaW0ypAtw1UCgbniNOLcVOLmAjHZolOYlxmTGXVZdAnRfXQm+7SoU4mXaOaiZsEpC9FkiQs6Z6bdCnNYruM6KNBw6YWewzl9z+sHImEWv+vz7XmT95f/+3/+7wP814v+efDOV3/SoX3lHAA+6ODeUFfMfjOWMADgdk+eEKz0pF7aQdMAcOKLLjrcVMVX3xdWN29/GhYP7SvnP0cWfS8caSkfHZsPE9Fgnt02JNutQ0QYHB2dDz9/pKX8QjjuO9xUxd/66HdxTeCHZ3rojQObGQBcuNjfplkD3b19Y/6MrimSaKgSMmpGU5WevmE/swa6Oy73tQHA0Rdr2Mmv/6A1n9w9suQ7097Z9lM4FlTgTDrzZTu4StXVfpiI48rVcUDM5cmEksrFnHxfpTtU/3BFQzCQF/2bYVoNbH7zmItbSoMj40JSzmMyX5qDvriA7QdrIIpA+3cdsMpu0nXI8cV0MtKXCPZev+gCEM1S2NHPvWfP/hL+7FSr3+0p5RBEyhEN5JCKYr8XnASMT0xBNyzQGQeI8fjsGD39RMPk7se2bd5ZtTyoFYXftF6y37gx7NeUtJJOTFlAHDZLDuILU3j3+H5oOrD3yWbIztugaAzgnBKJuBLpGfQrS8wO4FZgV+c1IxaLgWVU0tMLEETCos4xMzEIv9cJXQcyagIwigDGwJgOAtHAwAhisQUjy0ORGERiELgG4iakkzo4MYAxcM5hAMi1WWG1yYCJIcMUaBkVRLdGeSU2995TLWzcUAzONJ7J6FBVBYIggMzmFbvdBV44Corg8vjhzC+EJEl8U1kJtgYrhCzgc/vvTwXKSib1paRFVRVORDAJAsw5FuTaJEhWM2SHB3mOAlhkNxwuLzeJsGwqWzf5TFNdKgtY5qHp6ZFf67Y/sAVadCaVY5YACDDb3Oi4NIjLnWMw2QthCBIsVhsUTU9tvXsjeq9+X1d75/KEs4LNOfcdf/+HthMnvwxOD0wmHaXr7ZItn2wuH2SnBzbZAbPJwpPx+VQuzcm7dgRCB57a1uBzUDRL4bfnI0RE0eaXd9W89mpjqHZnUI5Hh2l2dkZZUhOqpi2qSmpOmZ64Tuu9qlz/SEXo6MEHa3wOip46F1n7633eekV8ds8Wxjn37Wl63VVa+ej5oeEZ/82ZBETJjpJ1Rbij2D3Z/1trXUvLsblCK0XfOx0SX2kMsn9dX+d+7Kf6h8o4AIykuffjT8L20LU+w4AZd5VvEPY+XpWqLV327HR7DzXuDnD8r+ovkBehJ8i+y8YAAAAASUVORK5CYII=)"
    },
    warn: {
      "color": "#C09853",
      "background-color": "#FCF8E3",
      "border-color": "#FBEED5",
      "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABJlBMVEXr6eb/2oD/wi7/xjr/0mP/ykf/tQD/vBj/3o7/uQ//vyL/twebhgD/4pzX1K3z8e349vK6tHCilCWbiQymn0jGworr6dXQza3HxcKkn1vWvV/5uRfk4dXZ1bD18+/52YebiAmyr5S9mhCzrWq5t6ufjRH54aLs0oS+qD751XqPhAybhwXsujG3sm+Zk0PTwG6Shg+PhhObhwOPgQL4zV2nlyrf27uLfgCPhRHu7OmLgAafkyiWkD3l49ibiAfTs0C+lgCniwD4sgDJxqOilzDWowWFfAH08uebig6qpFHBvH/aw26FfQTQzsvy8OyEfz20r3jAvaKbhgG9q0nc2LbZxXanoUu/u5WSggCtp1anpJKdmFz/zlX/1nGJiYmuq5Dx7+sAAADoPUZSAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfdBgUBGhh4aah5AAAAlklEQVQY02NgoBIIE8EUcwn1FkIXM1Tj5dDUQhPU502Mi7XXQxGz5uVIjGOJUUUW81HnYEyMi2HVcUOICQZzMMYmxrEyMylJwgUt5BljWRLjmJm4pI1hYp5SQLGYxDgmLnZOVxuooClIDKgXKMbN5ggV1ACLJcaBxNgcoiGCBiZwdWxOETBDrTyEFey0jYJ4eHjMGWgEAIpRFRCUt08qAAAAAElFTkSuQmCC)"
    }
  }
});
/*
* jQuery plugin base
* Handles settings and reuseability
*
* Copyright (c) 2014, Sven-Erik Jonsson
*/

(function ($) {

    if (!$.fn.base) $.fn.base = {};

    $.fn.base.PluginBase = function (pluginName, element, defaults, options) {
        this._name = pluginName;
        this.element = element;
        this.$element = $(element);

        this.configure(defaults, options);
        this.init();
    }

    $.fn.base.PluginBase.prototype = {
        init: function () {

        },
        configure: function (defaults, options) {
            var attributes = {};
            var camelCase = /([a-z])([A-Z]{1,})/g;

            //var prefix = 'data-' + this._name.replace(camelCase, '$1-$2') + '-';

            var prefix = 'data-';

            for (var attribute in defaults) {
                var attributeName = attribute.replace(camelCase, '$1-$2');
                attributeName = attributeName.toLowerCase();

                var attributeValue = this.$element.attr(prefix + attributeName);
                
                if (attributeValue != null)
                {
                    if (attributeValue.indexOf("{") == 0)
                        attributes[attribute] = JSON.parse(attributeValue);
                    else
                        attributes[attribute] = attributeValue;
                }
                    
            }

            this.settings = $.extend({}, defaults, options, attributes);
        },
        applyPlugin: function (element, subclass, options) {
            element.each(function () {
                if (!$.data(this, "plugin-" + this._name)) {
                    $.data(this, "plugin-" + this._name, new subclass(this, options));
                }
            });

            return this;
        }
    };

})(jQuery);
/**
* easyModal.js v1.3.1
* A minimal jQuery modal that works with your CSS.
* Author: Flavius Matis - http://flaviusmatis.github.com/
* URL: https://github.com/flaviusmatis/easyModal.js
*/

/*jslint browser: true*/
/*global jQuery*/

(function ($) {
    "use strict";
    var methods = {
        init: function (options) {

            var defaults = {
                top: 'auto',
                autoOpen: false,
                overlayOpacity: 0.5,
                overlayColor: '#000',
                overlayClose: true,
                overlayParent: 'body',
                closeOnEscape: true,
                closeButtonClass: '.close',
                transitionIn: '',
                transitionOut: '',
                onOpen: false,
                onClose: false,
                zIndex: function () {
                    return (function (value) {
                        return value === -Infinity ? 0 : value + 1;
                    }(Math.max.apply(Math, $.makeArray($('*').map(function () {
                        return $(this).css('z-index');
                    }).filter(function () {
                        return $.isNumeric(this);
                    }).map(function () {
                        return parseInt(this, 10);
                    })))));
                },
                updateZIndexOnOpen: true
            };

            options = $.extend(defaults, options);

            return this.each(function () {

                var o = options,
                    $overlay = $('<div class="lean-overlay"></div>'),
                    $modal = $(this);

                $overlay.css({
                    'display': 'none',
                    'position': 'fixed',
                    // When updateZIndexOnOpen is set to true, we avoid computing the z-index on initialization,
                    // because the value would be replaced when opening the modal.
                    'z-index': (o.updateZIndexOnOpen ? 0 : o.zIndex()),
                    'top': 0,
                    'left': 0,
                    'height': '100%',
                    'width': '100%',
                    'background': o.overlayColor,
                    'opacity': o.overlayOpacity,
                    'overflow': 'auto'
                }).appendTo(o.overlayParent);

                $modal.css({
                    'display': 'none',
                    'position' : 'fixed',
                    // When updateZIndexOnOpen is set to true, we avoid computing the z-index on initialization,
                    // because the value would be replaced when opening the modal.
                    'z-index': (o.updateZIndexOnOpen ? 0 : o.zIndex() + 1),
                    'left' : 50 + '%',
                    'top' : parseInt(o.top, 10) > -1 ? o.top + 'px' : 50 + '%'
                });

                $modal.bind('openModal', function () {
                    var overlayZ = o.updateZIndexOnOpen ? o.zIndex() : parseInt($overlay.css('z-index'), 10),
                        modalZ = overlayZ + 1;

                    if(o.transitionIn !== '' && o.transitionOut !== ''){
                        $modal.removeClass(o.transitionOut).addClass(o.transitionIn);
                    }
                    $modal.css({
                        'display' : 'block',
                        'margin-left' : -($modal.outerWidth() / 2) + 'px',
                        'margin-top' : (parseInt(o.top, 10) > -1 ? 0 : -($modal.outerHeight() / 2)) + 'px',
                        'z-index': modalZ
                    });

                    $overlay.css({ 'z-index': overlayZ, 'display': 'none' });

                    if (o.onOpen && typeof o.onOpen === 'function') {
                        // onOpen callback receives as argument the modal window
                        o.onOpen($modal[0]);
                    }
                });

                $modal.bind('closeModal', function () {
                    if(o.transitionIn !== '' && o.transitionOut !== ''){
                        $modal.removeClass(o.transitionIn).addClass(o.transitionOut);
                        $modal.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
                            $modal.css('display', 'none');
                            $overlay.css('display', 'none');
                        });
                    }
                    else {
                        $modal.css('display', 'none');
                        $overlay.css('display', 'none');
                    }
                    if (o.onClose && typeof o.onClose === 'function') {
                        // onClose callback receives as argument the modal window
                        o.onClose($modal[0]);
                    }
                });

                // Close on overlay click
                $overlay.click(function () {
                    if (o.overlayClose) {
                        $modal.trigger('closeModal');
                    }
                });

                $(document).keydown(function (e) {
                    // ESCAPE key pressed
                    if (o.closeOnEscape && e.keyCode === 27) {
                        $modal.trigger('closeModal');
                    }
                });

                // Close when button pressed
                $modal.on('click', o.closeButtonClass, function (e) {
                    $modal.trigger('closeModal');
                    e.preventDefault();
                });

                // Automatically open modal if option set
                if (o.autoOpen) {
                    $modal.trigger('openModal');
                }

            });

        }
    };

    $.fn.easyModal = function (method) {

        // Method calling logic
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }

        if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }

        $.error('Method ' + method + ' does not exist on jQuery.easyModal');

    };

}(jQuery));
/*!
 * Ladda for jQuery
 * http://lab.hakim.se/ladda
 * MIT licensed
 *
 * Copyright (C) 2014 Hakim El Hattab, http://hakim.se
 */

(function( Ladda, $ ) {
	if ($ === undefined)
		return console.error( 'jQuery required for Ladda.jQuery' );

	var arr = [];

	$ = $.extend( $, {
		ladda: function( arg ) {
			if( arg === 'stopAll' )
				Ladda.stopAll();
		}
	});

	$.fn = $.extend( $.fn, {
		ladda: function( arg ) {
			var args = arr.slice.call( arguments, 1 );

			if( arg === 'bind' ) {
				args.unshift( $( this ).selector );
				Ladda.bind.apply( Ladda, args );
			}
			else {
				$( this ).each( function() {
					var $this = $( this ), ladda;

					if( arg === undefined )
						$this.data( 'ladda', Ladda.create( this ) );
					else {
						ladda = $this.data( 'ladda' );
						ladda[arg].apply( ladda, args );
					}
				});
			}

			return this;
		}
	});	
}( this.Ladda, this.jQuery ));
/*!
* jquery.inputmask.bundle
* http://github.com/RobinHerbots/jquery.inputmask
* Copyright (c) 2010 - 2015 Robin Herbots
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
* Version: 3.1.61
*/
!function(a){function b(a){var b=document.createElement("input"),c="on"+a,d=c in b;return d||(b.setAttribute(c,"return;"),d="function"==typeof b[c]),b=null,d}function c(a){var b="text"==a||"tel"==a;if(!b){var c=document.createElement("input");c.setAttribute("type",a),b="text"===c.type,c=null}return b}function d(b,c,e){var f=e.aliases[b];return f?(f.alias&&d(f.alias,void 0,e),a.extend(!0,e,f),a.extend(!0,e,c),!0):!1}function e(b){function c(c){function d(a,b,c,d){this.matches=[],this.isGroup=a||!1,this.isOptional=b||!1,this.isQuantifier=c||!1,this.isAlternator=d||!1,this.quantifier={min:1,max:1}}function e(c,d,e){var f=b.definitions[d],g=0==c.matches.length;if(e=void 0!=e?e:c.matches.length,f&&!m){f.placeholder=a.isFunction(f.placeholder)?f.placeholder.call(this,b):f.placeholder;for(var h=f.prevalidator,i=h?h.length:0,j=1;j<f.cardinality;j++){var k=i>=j?h[j-1]:[],l=k.validator,n=k.cardinality;c.matches.splice(e++,0,{fn:l?"string"==typeof l?new RegExp(l):new function(){this.test=l}:new RegExp("."),cardinality:n?n:1,optionality:c.isOptional,newBlockMarker:g,casing:f.casing,def:f.definitionSymbol||d,placeholder:f.placeholder,mask:d})}c.matches.splice(e++,0,{fn:f.validator?"string"==typeof f.validator?new RegExp(f.validator):new function(){this.test=f.validator}:new RegExp("."),cardinality:f.cardinality,optionality:c.isOptional,newBlockMarker:g,casing:f.casing,def:f.definitionSymbol||d,placeholder:f.placeholder,mask:d})}else c.matches.splice(e++,0,{fn:null,cardinality:0,optionality:c.isOptional,newBlockMarker:g,casing:null,def:d,placeholder:void 0,mask:d}),m=!1}for(var f,g,h,i,j,k,l=/(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g,m=!1,n=new d,o=[],p=[];f=l.exec(c);)switch(g=f[0],g.charAt(0)){case b.optionalmarker.end:case b.groupmarker.end:if(h=o.pop(),o.length>0){if(i=o[o.length-1],i.matches.push(h),i.isAlternator){j=o.pop();for(var q=0;q<j.matches.length;q++)j.matches[q].isGroup=!1;o.length>0?(i=o[o.length-1],i.matches.push(j)):n.matches.push(j)}}else n.matches.push(h);break;case b.optionalmarker.start:o.push(new d(!1,!0));break;case b.groupmarker.start:o.push(new d(!0));break;case b.quantifiermarker.start:var r=new d(!1,!1,!0);g=g.replace(/[{}]/g,"");var s=g.split(","),t=isNaN(s[0])?s[0]:parseInt(s[0]),u=1==s.length?t:isNaN(s[1])?s[1]:parseInt(s[1]);if(("*"==u||"+"==u)&&(t="*"==u?0:1),r.quantifier={min:t,max:u},o.length>0){var v=o[o.length-1].matches;if(f=v.pop(),!f.isGroup){var w=new d(!0);w.matches.push(f),f=w}v.push(f),v.push(r)}else{if(f=n.matches.pop(),!f.isGroup){var w=new d(!0);w.matches.push(f),f=w}n.matches.push(f),n.matches.push(r)}break;case b.escapeChar:m=!0;break;case b.alternatormarker:o.length>0?(i=o[o.length-1],k=i.matches.pop()):k=n.matches.pop(),k.isAlternator?o.push(k):(j=new d(!1,!1,!1,!0),j.matches.push(k),o.push(j));break;default:if(o.length>0){if(i=o[o.length-1],i.matches.length>0&&(k=i.matches[i.matches.length-1],k.isGroup&&(k.isGroup=!1,e(k,b.groupmarker.start,0),e(k,b.groupmarker.end))),e(i,g),i.isAlternator){j=o.pop();for(var q=0;q<j.matches.length;q++)j.matches[q].isGroup=!1;o.length>0?(i=o[o.length-1],i.matches.push(j)):n.matches.push(j)}}else n.matches.length>0&&(k=n.matches[n.matches.length-1],k.isGroup&&(k.isGroup=!1,e(k,b.groupmarker.start,0),e(k,b.groupmarker.end))),e(n,g)}return n.matches.length>0&&(k=n.matches[n.matches.length-1],k.isGroup&&(k.isGroup=!1,e(k,b.groupmarker.start,0),e(k,b.groupmarker.end)),p.push(n)),p}function d(d,e){if(void 0==d||""==d)return void 0;if(1==d.length&&0==b.greedy&&0!=b.repeat&&(b.placeholder=""),b.repeat>0||"*"==b.repeat||"+"==b.repeat){var f="*"==b.repeat?0:"+"==b.repeat?1:b.repeat;d=b.groupmarker.start+d+b.groupmarker.end+b.quantifiermarker.start+f+","+b.repeat+b.quantifiermarker.end}return void 0==a.inputmask.masksCache[d]&&(a.inputmask.masksCache[d]={mask:d,maskToken:c(d),validPositions:{},_buffer:void 0,buffer:void 0,tests:{},metadata:e}),a.extend(!0,{},a.inputmask.masksCache[d])}function e(a){if(a=a.toString(),b.numericInput){a=a.split("").reverse();for(var c=0;c<a.length;c++)a[c]==b.optionalmarker.start?a[c]=b.optionalmarker.end:a[c]==b.optionalmarker.end?a[c]=b.optionalmarker.start:a[c]==b.groupmarker.start?a[c]=b.groupmarker.end:a[c]==b.groupmarker.end&&(a[c]=b.groupmarker.start);a=a.join("")}return a}var f=void 0;if(a.isFunction(b.mask)&&(b.mask=b.mask.call(this,b)),a.isArray(b.mask)){if(b.mask.length>1){b.keepStatic=void 0==b.keepStatic?!0:b.keepStatic;var g="(";return a.each(b.mask,function(b,c){g.length>1&&(g+=")|("),g+=e(void 0==c.mask||a.isFunction(c.mask)?c:c.mask)}),g+=")",d(g,b.mask)}b.mask=b.mask.pop()}return b.mask&&(f=void 0==b.mask.mask||a.isFunction(b.mask.mask)?d(e(b.mask),b.mask):d(e(b.mask.mask),b.mask)),f}function f(d,e,f){function g(a,b,c){b=b||0;var d,e,f,g=[],h=0;do{if(a===!0&&k().validPositions[h]){var i=k().validPositions[h];e=i.match,d=i.locator.slice(),g.push(c===!0?i.input:F(h,e))}else f=p(h,d,h-1),e=f.match,d=f.locator.slice(),g.push(F(h,e));h++}while((void 0==cb||cb>h-1)&&null!=e.fn||null==e.fn&&""!=e.def||b>=h);return g.pop(),g}function k(){return e}function l(a){var b=k();b.buffer=void 0,b.tests={},a!==!0&&(b._buffer=void 0,b.validPositions={},b.p=0)}function m(a){var b=k(),c=-1,d=b.validPositions;void 0==a&&(a=-1);var e=c,f=c;for(var g in d){var h=parseInt(g);(-1==a||null!=d[h].match.fn)&&(a>=h&&(e=h),h>=a&&(f=h))}return c=-1!=e&&a-e>1||a>f?e:f}function n(b,c,d){if(f.insertMode&&void 0!=k().validPositions[b]&&void 0==d){var e,g=a.extend(!0,{},k().validPositions),h=m();for(e=b;h>=e;e++)delete k().validPositions[e];k().validPositions[b]=c;var i,j=!0;for(e=b;h>=e;e++){var l=g[e];if(void 0!=l){var n=k().validPositions;i=!f.keepStatic&&n[e]&&(void 0!=n[e+1]&&s(e+1,n[e].locator.slice(),e).length>1||void 0!=n[e].alternation)?e+1:B(e),j=r(i,l.match.def)?j&&y(i,l.input,!0,!0)!==!1:null==l.match.fn}if(!j)break}if(!j)return k().validPositions=a.extend(!0,{},g),!1}else k().validPositions[b]=c;return!0}function o(a,b,c,d){var e,g=a;k().p=a,void 0!=k().validPositions[a]&&k().validPositions[a].input==f.radixPoint&&(b++,g++);for(e=g;b>e;e++)void 0!=k().validPositions[e]&&(c===!0||0!=f.canClearPosition(k(),e,m(),d,f))&&delete k().validPositions[e];for(l(!0),e=g+1;e<=m();){for(;void 0!=k().validPositions[g];)g++;var h=k().validPositions[g];g>e&&(e=g+1);var i=k().validPositions[e];void 0!=i&&void 0==h?(r(g,i.match.def)&&y(g,i.input,!0)!==!1&&(delete k().validPositions[e],e++),g++):e++}var j=m();j>=a&&void 0!=k().validPositions[j]&&k().validPositions[j].input==f.radixPoint&&delete k().validPositions[j],l(!0)}function p(a,b,c){for(var d,e=s(a,b,c),g=m(),h=k().validPositions[g]||s(0)[0],i=void 0!=h.alternation?h.locator[h.alternation].split(","):[],j=0;j<e.length&&(d=e[j],!(d.match&&(f.greedy&&d.match.optionalQuantifier!==!0||(d.match.optionality===!1||d.match.newBlockMarker===!1)&&d.match.optionalQuantifier!==!0)&&(void 0==h.alternation||void 0!=d.locator[h.alternation]&&x(d.locator[h.alternation].toString().split(","),i))));j++);return d}function q(a){return k().validPositions[a]?k().validPositions[a].match:s(a)[0].match}function r(a,b){for(var c=!1,d=s(a),e=0;e<d.length;e++)if(d[e].match&&d[e].match.def==b){c=!0;break}return c}function s(b,c,d){function e(c,d,f,h){function l(f,h,n){if(g>1e4)return alert("jquery.inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+k().mask),!0;if(g==b&&void 0==f.matches)return i.push({match:f,locator:h.reverse()}),!0;if(void 0!=f.matches){if(f.isGroup&&n!==!0){if(f=l(c.matches[m+1],h))return!0}else if(f.isOptional){var o=f;if(f=e(f,d,h,n)){var p=i[i.length-1].match,q=0==a.inArray(p,o.matches);q&&(j=!0),g=b}}else if(f.isAlternator){var r,s=f,t=[],u=i.slice(),v=h.length,w=d.length>0?d.shift():-1;if(-1==w||"string"==typeof w){var x,y=g,z=d.slice();"string"==typeof w&&(x=w.split(","));for(var A=0;A<s.matches.length;A++){i=[],f=l(s.matches[A],[A].concat(h),n)||f,r=i.slice(),g=y,i=[];for(var B=0;B<z.length;B++)d[B]=z[B];for(var C=0;C<r.length;C++)for(var D=r[C],E=0;E<t.length;E++){var F=t[E];if(D.match.mask==F.match.mask&&("string"!=typeof w||-1!=a.inArray(D.locator[v].toString(),x))){r.splice(C,1),F.locator[v]=F.locator[v]+","+D.locator[v],F.alternation=v;break}}t=t.concat(r)}"string"==typeof w&&(t=a.map(t,function(b,c){if(isFinite(c)){var d,e=b.locator[v].toString().split(",");b.locator[v]=void 0,b.alternation=void 0;for(var f=0;f<e.length;f++)d=-1!=a.inArray(e[f],x),d&&(void 0!=b.locator[v]?(b.locator[v]+=",",b.alternation=v,b.locator[v]+=e[f]):b.locator[v]=parseInt(e[f]));if(void 0!=b.locator[v])return b}})),i=u.concat(t),j=!0}else f=l(s.matches[w],[w].concat(h),n);if(f)return!0}else if(f.isQuantifier&&n!==!0)for(var G=f,H=d.length>0&&n!==!0?d.shift():0;H<(isNaN(G.quantifier.max)?H+1:G.quantifier.max)&&b>=g;H++){var I=c.matches[a.inArray(G,c.matches)-1];if(f=l(I,[H].concat(h),!0)){var p=i[i.length-1].match;p.optionalQuantifier=H>G.quantifier.min-1;var q=0==a.inArray(p,I.matches);if(q){if(H>G.quantifier.min-1){j=!0,g=b;break}return!0}return!0}}else if(f=e(f,d,h,n))return!0}else g++}for(var m=d.length>0?d.shift():0;m<c.matches.length;m++)if(c.matches[m].isQuantifier!==!0){var n=l(c.matches[m],[m].concat(f),h);if(n&&g==b)return n;if(g>b)break}}var f=k().maskToken,g=c?d:0,h=c||[0],i=[],j=!1;if(void 0==c){for(var l,m=b-1;void 0==(l=k().validPositions[m])&&m>-1;)m--;if(void 0!=l&&m>-1)g=m,h=l.locator.slice();else{for(m=b-1;void 0==(l=k().tests[m])&&m>-1;)m--;void 0!=l&&m>-1&&(g=m,h=l[0].locator.slice())}}for(var n=h.shift();n<f.length;n++){var o=e(f[n],h,[n]);if(o&&g==b||g>b)break}return(0==i.length||j)&&i.push({match:{fn:null,cardinality:0,optionality:!0,casing:null,def:""},locator:[]}),k().tests[b]=a.extend(!0,[],i),k().tests[b]}function t(){return void 0==k()._buffer&&(k()._buffer=g(!1,1)),k()._buffer}function u(){return void 0==k().buffer&&(k().buffer=g(!0,m(),!0)),k().buffer}function v(a,b,c){if(c=c||u().slice(),a===!0)l(),a=0,b=c.length;else for(var d=a;b>d;d++)delete k().validPositions[d],delete k().tests[d];for(var d=a;b>d;d++)c[d]!=f.skipOptionalPartCharacter&&y(d,c[d],!0,!0)}function w(a,b){switch(b.casing){case"upper":a=a.toUpperCase();break;case"lower":a=a.toLowerCase()}return a}function x(b,c){for(var d=f.greedy?c:c.slice(0,1),e=!1,g=0;g<b.length;g++)if(-1!=a.inArray(b[g],d)){e=!0;break}return e}function y(b,c,d,e){function g(b,c,d,e){var g=!1;return a.each(s(b),function(h,i){for(var j=i.match,p=c?1:0,q="",r=(u(),j.cardinality);r>p;r--)q+=D(b-(r-1));if(c&&(q+=c),g=null!=j.fn?j.fn.test(q,k(),b,d,f):c!=j.def&&c!=f.skipOptionalPartCharacter||""==j.def?!1:{c:j.def,pos:b},g!==!1){var s=void 0!=g.c?g.c:c;s=s==f.skipOptionalPartCharacter&&null===j.fn?j.def:s;var t=b;if(void 0!=g.remove&&o(g.remove,g.remove+1,!0),g.refreshFromBuffer){var x=g.refreshFromBuffer;if(d=!0,v(x===!0?x:x.start,x.end),void 0==g.pos&&void 0==g.c)return g.pos=m(),!1;if(t=void 0!=g.pos?g.pos:b,t!=b)return g=a.extend(g,y(t,s,!0)),!1}else if(g!==!0&&void 0!=g.pos&&g.pos!=b&&(t=g.pos,v(b,t),t!=b))return g=a.extend(g,y(t,s,!0)),!1;return 1!=g&&void 0==g.pos&&void 0==g.c?!1:(h>0&&l(!0),n(t,a.extend({},i,{input:w(s,j)}),e)||(g=!1),!1)}}),g}function h(b,c,d,e){var g,h,i=a.extend(!0,{},k().validPositions);for(g=m();g>=0;g--)if(k().validPositions[g]&&void 0!=k().validPositions[g].alternation){h=k().validPositions[g].alternation;break}if(void 0!=h)for(var j in k().validPositions)if(parseInt(j)>parseInt(g)&&void 0===k().validPositions[j].alternation){for(var n=k().validPositions[j],o=n.locator[h],p=k().validPositions[g].locator[h].split(","),q=0;q<p.length;q++)if(o<p[q]){for(var r,s,t=j-1;t>=0;t--)if(r=k().validPositions[t],void 0!=r){s=r.locator[h],r.locator[h]=p[q];break}if(o!=r.locator[h]){for(var v=u().slice(),w=j;w<m()+1;w++)delete k().validPositions[w],delete k().tests[w];l(!0),f.keepStatic=!f.keepStatic;for(var w=j;w<v.length;w++)v[w]!=f.skipOptionalPartCharacter&&y(m()+1,v[w],!1,!0);r.locator[h]=s;var x=y(b,c,d,e);if(f.keepStatic=!f.keepStatic,x)return x;l(),k().validPositions=a.extend(!0,{},i)}}break}return!1}function i(b,c){for(var d=k().validPositions[c],e=d.locator,f=e.length,g=b;c>g;g++)if(!z(g)){var h=s(g),i=h[0],j=-1;a.each(h,function(a,b){for(var c=0;f>c;c++)b.locator[c]&&x(b.locator[c].toString().split(","),e[c].toString().split(","))&&c>j&&(j=c,i=b)}),n(g,a.extend({},i,{input:i.match.def}),!0)}}d=d===!0;for(var j=u(),p=b-1;p>-1&&!k().validPositions[p];p--);for(p++;b>p;p++)void 0==k().validPositions[p]&&((!z(p)||j[p]!=F(p))&&s(p).length>1||j[p]==f.radixPoint||"0"==j[p]&&a.inArray(f.radixPoint,j)<p)&&g(p,j[p],!0);var q=b,r=!1,t=a.extend(!0,{},k().validPositions);if(q<A()&&(r=g(q,c,d,e),!d&&r===!1)){var C=k().validPositions[q];if(!C||null!=C.match.fn||C.match.def!=c&&c!=f.skipOptionalPartCharacter){if((f.insertMode||void 0==k().validPositions[B(q)])&&!z(q))for(var E=q+1,G=B(q);G>=E;E++)if(r=g(E,c,d,e),r!==!1){i(q,E),q=E;break}}else r={caret:B(q)}}if(r===!1&&f.keepStatic&&N(j)&&(r=h(b,c,d,e)),r===!0&&(r={pos:q}),a.isFunction(f.postValidation)&&0!=r&&!d){l(!0);var H=f.postValidation(u(),f);if(!H)return l(!0),k().validPositions=a.extend(!0,{},t),!1}return r}function z(a){var b=q(a);return null!=b.fn?b.fn:!1}function A(){var a;cb=bb.prop("maxLength"),-1==cb&&(cb=void 0);var b,c=m(),d=k().validPositions[c],e=void 0!=d?d.locator.slice():void 0;for(b=c+1;void 0==d||null!=d.match.fn||null==d.match.fn&&""!=d.match.def;b++)d=p(b,e,b-1),e=d.locator.slice();return a=b,void 0==cb||cb>a?a:cb}function B(a){var b=A();if(a>=b)return b;for(var c=a;++c<b&&!z(c)&&(f.nojumps!==!0||f.nojumpsThreshold>c););return c}function C(a){var b=a;if(0>=b)return 0;for(;--b>0&&!z(b););return b}function D(a){return void 0==k().validPositions[a]?F(a):k().validPositions[a].input}function E(b,c,d,e,g){if(e&&a.isFunction(f.onBeforeWrite)){var h=f.onBeforeWrite.call(b,e,c,d,f);if(h){if(h.refreshFromBuffer){var i=h.refreshFromBuffer;v(i===!0?i:i.start,i.end,h.buffer),l(!0),c=u()}d=h.caret||d}}b._valueSet(c.join("")),void 0!=d&&K(b,d),g===!0&&(fb=!0,a(b).trigger("input"))}function F(a,b){return b=b||q(a),void 0!=b.placeholder?b.placeholder:null==b.fn?b.def:f.placeholder.charAt(a%f.placeholder.length)}function G(b,c,d,e){function f(){var a=!1,b=t().slice(i,B(i)).join("").indexOf(h);if(-1!=b&&!z(i)){a=!0;for(var c=t().slice(i,i+b),d=0;d<c.length;d++)if(" "!=c[d]){a=!1;break}}return a}var g=void 0!=e?e.slice():b._valueGet().split(""),h="",i=0;l(),k().p=B(-1),c&&b._valueSet("");var j=t().slice(0,B(-1)).join(""),n=g.join("").match(new RegExp(H(j),"g"));n&&n.length>0&&(g.splice(0,n.length*j.length),i=B(i)),a.each(g,function(c,e){var g=a.Event("keypress");g.which=e.charCodeAt(0),h+=e;var j=m(),l=k().validPositions[j],n=p(j+1,l?l.locator.slice():void 0,j);if(!f()||d){var o=d?c:null==n.match.fn&&n.match.optionality&&j+1<k().p?j+1:k().p;T.call(b,g,!0,!1,d,o),i=o+1,h=""}else T.call(b,g,!0,!1,!0,j+1)}),c&&E(b,u(),a(b).is(":focus")?B(m(0)):void 0,a.Event("checkval"))}function H(b){return a.inputmask.escapeRegex.call(this,b)}function I(b){if(b.data("_inputmask")&&!b.hasClass("hasDatepicker")){var c=[],d=k().validPositions;for(var e in d)d[e].match&&null!=d[e].match.fn&&c.push(d[e].input);var g=(db?c.reverse():c).join(""),h=(db?u().slice().reverse():u()).join("");return a.isFunction(f.onUnMask)&&(g=f.onUnMask.call(b,h,g,f)||g),g}return b[0]._valueGet()}function J(a){if(db&&"number"==typeof a&&(!f.greedy||""!=f.placeholder)){var b=u().length;a=b-a}return a}function K(b,c,d){var e,g=b.jquery&&b.length>0?b[0]:b;if("number"!=typeof c)return g.setSelectionRange?(c=g.selectionStart,d=g.selectionEnd):document.selection&&document.selection.createRange&&(e=document.selection.createRange(),c=0-e.duplicate().moveStart("character",-1e5),d=c+e.text.length),{begin:J(c),end:J(d)};if(c=J(c),d=J(d),d="number"==typeof d?d:c,a(g).is(":visible")){var h=a(g).css("font-size").replace("px","")*d;g.scrollLeft=h>g.scrollWidth?h:0,0==f.insertMode&&c==d&&d++,g.setSelectionRange?(g.selectionStart=c,g.selectionEnd=d):g.createTextRange&&(e=g.createTextRange(),e.collapse(!0),e.moveEnd("character",d),e.moveStart("character",c),e.select())}}function L(b){var c,d,e=u(),f=e.length,g=m(),h={},i=k().validPositions[g],j=void 0!=i?i.locator.slice():void 0;for(c=g+1;c<e.length;c++)d=p(c,j,c-1),j=d.locator.slice(),h[c]=a.extend(!0,{},d);var l=i&&void 0!=i.alternation?i.locator[i.alternation].split(","):[];for(c=f-1;c>g&&(d=h[c].match,(d.optionality||d.optionalQuantifier||i&&void 0!=i.alternation&&void 0!=h[c].locator[i.alternation]&&-1!=a.inArray(h[c].locator[i.alternation].toString(),l))&&e[c]==F(c,d));c--)f--;return b?{l:f,def:h[f]?h[f].match:void 0}:f}function M(a){for(var b=L(),c=a.length-1;c>b&&!z(c);c--);a.splice(b,c+1-b)}function N(b){if(a.isFunction(f.isComplete))return f.isComplete.call(bb,b,f);if("*"==f.repeat)return void 0;{var c=!1,d=L(!0),e=C(d.l);m()}if(void 0==d.def||d.def.newBlockMarker||d.def.optionalQuantifier){c=!0;for(var g=0;e>=g;g++){var h=z(g),i=q(g);if(h&&void 0==k().validPositions[g]&&i.optionality!==!0&&i.optionalQuantifier!==!0||!h&&b[g]!=F(g)){c=!1;break}}}return c}function O(a,b){return db?a-b>1||a-b==1&&f.insertMode:b-a>1||b-a==1&&f.insertMode}function P(b){var c=a._data(b).events;a.each(c,function(b,c){a.each(c,function(a,b){if("inputmask"==b.namespace&&"setvalue"!=b.type){var c=b.handler;b.handler=function(a){if(!this.disabled&&(!this.readOnly||"keydown"==a.type&&a.ctrlKey&&67==a.keyCode)){switch(a.type){case"input":if(fb===!0)return fb=!1,a.preventDefault();break;case"keydown":eb=!1;break;case"keypress":if(eb===!0)return a.preventDefault();eb=!0;break;case"compositionstart":break;case"compositionupdate":fb=!0;break;case"compositionend":}return c.apply(this,arguments)}a.preventDefault()}}})})}function Q(b){function c(b){if(void 0==a.valHooks[b]||1!=a.valHooks[b].inputmaskpatch){var c=a.valHooks[b]&&a.valHooks[b].get?a.valHooks[b].get:function(a){return a.value},d=a.valHooks[b]&&a.valHooks[b].set?a.valHooks[b].set:function(a,b){return a.value=b,a};a.valHooks[b]={get:function(b){var d=a(b);if(d.data("_inputmask")){if(d.data("_inputmask").opts.autoUnmask)return d.inputmask("unmaskedvalue");var e=c(b),f=d.data("_inputmask"),g=f.maskset,h=g._buffer;return h=h?h.join(""):"",e!=h?e:""}return c(b)},set:function(b,c){var e,f=a(b),g=f.data("_inputmask");return g?(e=d(b,a.isFunction(g.opts.onBeforeMask)?g.opts.onBeforeMask.call(mb,c,g.opts)||c:c),f.triggerHandler("setvalue.inputmask")):e=d(b,c),e},inputmaskpatch:!0}}}function d(){var b=a(this),c=a(this).data("_inputmask");return c?c.opts.autoUnmask?b.inputmask("unmaskedvalue"):h.call(this)!=t().join("")?h.call(this):"":h.call(this)}function e(b){var c=a(this).data("_inputmask");c?(i.call(this,a.isFunction(c.opts.onBeforeMask)?c.opts.onBeforeMask.call(mb,b,c.opts)||b:b),a(this).triggerHandler("setvalue.inputmask")):i.call(this,b)}function g(b){a(b).bind("mouseenter.inputmask",function(){var b=a(this),c=this,d=c._valueGet();""!=d&&d!=u().join("")&&(this._valueSet(a.isFunction(f.onBeforeMask)?f.onBeforeMask.call(mb,d,f)||d:d),b.triggerHandler("setvalue.inputmask"))});//!! the bound handlers are executed in the order they where bound
var c=a._data(b).events,d=c.mouseover;if(d){for(var e=d[d.length-1],g=d.length-1;g>0;g--)d[g]=d[g-1];d[0]=e}}var h,i;if(!b._valueGet){if(Object.getOwnPropertyDescriptor){Object.getOwnPropertyDescriptor(b,"value")}document.__lookupGetter__&&b.__lookupGetter__("value")?(h=b.__lookupGetter__("value"),i=b.__lookupSetter__("value"),b.__defineGetter__("value",d),b.__defineSetter__("value",e)):(h=function(){return b.value},i=function(a){b.value=a},c(b.type),g(b)),b._valueGet=function(a){return db&&a!==!0?h.call(this).split("").reverse().join(""):h.call(this)},b._valueSet=function(a){i.call(this,db?a.split("").reverse().join(""):a)}}}function R(b,c,d,e){function g(){if(f.keepStatic){l(!0);var c,d=[];for(c=m();c>=0;c--)if(k().validPositions[c]){if(void 0!=k().validPositions[c].alternation)break;d.push(k().validPositions[c].input),delete k().validPositions[c]}if(c>0)for(;d.length>0;){k().p=B(m());var e=a.Event("keypress");e.which=d.pop().charCodeAt(0),T.call(b,e,!0,!1,!1,k().p)}}}if((f.numericInput||db)&&(c==a.inputmask.keyCode.BACKSPACE?c=a.inputmask.keyCode.DELETE:c==a.inputmask.keyCode.DELETE&&(c=a.inputmask.keyCode.BACKSPACE),db)){var h=d.end;d.end=d.begin,d.begin=h}if(c==a.inputmask.keyCode.BACKSPACE&&(d.end-d.begin<1||0==f.insertMode)?d.begin=C(d.begin):c==a.inputmask.keyCode.DELETE&&d.begin==d.end&&(d.end=z(d.end)?d.end+1:B(d.end)+1),o(d.begin,d.end,!1,e),e!==!0){g();var i=m(d.begin);i<d.begin?(-1==i&&l(),k().p=B(i)):k().p=d.begin}}function S(c){var d=this,e=a(d),g=c.keyCode,i=K(d);g==a.inputmask.keyCode.BACKSPACE||g==a.inputmask.keyCode.DELETE||h&&127==g||c.ctrlKey&&88==g&&!b("cut")?(c.preventDefault(),88==g&&($=u().join("")),R(d,g,i),E(d,u(),k().p,c,$!=u().join("")),d._valueGet()==t().join("")?e.trigger("cleared"):N(u())===!0&&e.trigger("complete"),f.showTooltip&&e.prop("title",k().mask)):g==a.inputmask.keyCode.END||g==a.inputmask.keyCode.PAGE_DOWN?setTimeout(function(){var a=B(m());f.insertMode||a!=A()||c.shiftKey||a--,K(d,c.shiftKey?i.begin:a,a)},0):g==a.inputmask.keyCode.HOME&&!c.shiftKey||g==a.inputmask.keyCode.PAGE_UP?K(d,0,c.shiftKey?i.begin:0):(f.undoOnEscape&&g==a.inputmask.keyCode.ESCAPE||90==g&&c.ctrlKey)&&c.altKey!==!0?(G(d,!0,!1,$.split("")),e.click()):g!=a.inputmask.keyCode.INSERT||c.shiftKey||c.ctrlKey?0!=f.insertMode||c.shiftKey||(g==a.inputmask.keyCode.RIGHT?setTimeout(function(){var a=K(d);K(d,a.begin)},0):g==a.inputmask.keyCode.LEFT&&setTimeout(function(){var a=K(d);K(d,db?a.begin+1:a.begin-1)},0)):(f.insertMode=!f.insertMode,K(d,f.insertMode||i.begin!=A()?i.begin:i.begin-1)),f.onKeyDown.call(this,c,u(),K(d).begin,f),gb=-1!=a.inArray(g,f.ignorables)}function T(b,c,d,e,g){var h=this,i=a(h),j=b.which||b.charCode||b.keyCode;if(!(c===!0||b.ctrlKey&&b.altKey)&&(b.ctrlKey||b.metaKey||gb))return!0;if(j){46==j&&0==b.shiftKey&&","==f.radixPoint&&(j=44);var m,o=c?{begin:g,end:g}:K(h),p=String.fromCharCode(j),q=O(o.begin,o.end);q&&(k().undoPositions=a.extend(!0,{},k().validPositions),R(h,a.inputmask.keyCode.DELETE,o,!0),o.begin=k().p,f.insertMode||(f.insertMode=!f.insertMode,n(o.begin,e),f.insertMode=!f.insertMode),q=!f.multi),k().writeOutBuffer=!0;var r=db&&!q?o.end:o.begin,t=y(r,p,e);if(t!==!1){if(t!==!0&&(r=void 0!=t.pos?t.pos:r,p=void 0!=t.c?t.c:p),l(!0),void 0!=t.caret)m=t.caret;else{var w=k().validPositions;m=!f.keepStatic&&(void 0!=w[r+1]&&s(r+1,w[r].locator.slice(),r).length>1||void 0!=w[r].alternation)?r+1:B(r)}k().p=m}if(d!==!1){var x=this;if(setTimeout(function(){f.onKeyValidation.call(x,t,f)},0),k().writeOutBuffer&&t!==!1){var z=u();E(h,z,c?void 0:f.numericInput?C(m):m,b,c!==!0),c!==!0&&setTimeout(function(){N(z)===!0&&i.trigger("complete")},0)}else q&&(k().buffer=void 0,k().validPositions=k().undoPositions)}else q&&(k().buffer=void 0,k().validPositions=k().undoPositions);if(f.showTooltip&&i.prop("title",k().mask),c&&a.isFunction(f.onBeforeWrite)){var A=f.onBeforeWrite.call(this,b,u(),m,f);if(A&&A.refreshFromBuffer){var D=A.refreshFromBuffer;v(D===!0?D:D.start,D.end,A.buffer),l(!0),A.caret&&(k().p=A.caret)}}b.preventDefault()}}function U(b){var c=this,d=a(c),e=c._valueGet(!0),g=K(c);if("propertychange"==b.type&&c._valueGet().length<=A())return!0;if("paste"==b.type){var h=e.substr(0,g.begin),i=e.substr(g.end,e.length);h==t().slice(0,g.begin).join("")&&(h=""),i==t().slice(g.end).join("")&&(i=""),window.clipboardData&&window.clipboardData.getData?e=h+window.clipboardData.getData("Text")+i:b.originalEvent&&b.originalEvent.clipboardData&&b.originalEvent.clipboardData.getData&&(e=h+b.originalEvent.clipboardData.getData("text/plain")+i)}var j=e;if(a.isFunction(f.onBeforePaste)){if(j=f.onBeforePaste.call(c,e,f),j===!1)return b.preventDefault(),!1;j||(j=e)}return G(c,!0,!1,db?j.split("").reverse():j.split("")),d.click(),N(u())===!0&&d.trigger("complete"),!1}function V(b){var c=this;G(c,!0,!1),N(u())===!0&&a(c).trigger("complete"),b.preventDefault()}function W(a){var b=this;$=u().join(""),(""==ab||0!=a.originalEvent.data.indexOf(ab))&&(_=K(b))}function X(b){var c=this,d=_||K(c);0==b.originalEvent.data.indexOf(ab)&&(l(),d={begin:0,end:0});var e=b.originalEvent.data;K(c,d.begin,d.end);for(var g=0;g<e.length;g++){var h=a.Event("keypress");h.which=e.charCodeAt(g),eb=!1,gb=!1,T.call(c,h)}setTimeout(function(){var a=k().p;E(c,u(),f.numericInput?C(a):a)},0),ab=b.originalEvent.data}function Y(){}function Z(b){if(bb=a(b),bb.is(":input")&&c(bb.attr("type"))){if(bb.data("_inputmask",{maskset:e,opts:f,isRTL:!1}),f.showTooltip&&bb.prop("title",k().mask),("rtl"==b.dir||f.rightAlign)&&bb.css("text-align","right"),"rtl"==b.dir||f.numericInput){b.dir="ltr",bb.removeAttr("dir");var d=bb.data("_inputmask");d.isRTL=!0,bb.data("_inputmask",d),db=!0}bb.unbind(".inputmask"),bb.closest("form").bind("submit",function(){$!=u().join("")&&bb.change(),bb[0]._valueGet&&bb[0]._valueGet()==t().join("")&&bb[0]._valueSet(""),f.removeMaskOnSubmit&&bb.inputmask("remove")}).bind("reset",function(){setTimeout(function(){bb.triggerHandler("setvalue.inputmask")},0)}),bb.bind("mouseenter.inputmask",function(){var b=a(this),c=this;!b.is(":focus")&&f.showMaskOnHover&&c._valueGet()!=u().join("")&&E(c,u())}).bind("blur.inputmask",function(b){var c=a(this),d=this;if(c.data("_inputmask")){var e=d._valueGet(),g=u().slice();hb=!0,$!=g.join("")&&setTimeout(function(){c.change(),$=g.join("")},0),""!=e&&(f.clearMaskOnLostFocus&&(e==t().join("")?g=[]:M(g)),N(g)===!1&&(c.trigger("incomplete"),f.clearIncomplete&&(l(),g=f.clearMaskOnLostFocus?[]:t().slice())),E(d,g,void 0,b))}}).bind("focus.inputmask",function(){var b=(a(this),this),c=b._valueGet();f.showMaskOnFocus&&(!f.showMaskOnHover||f.showMaskOnHover&&""==c)&&b._valueGet()!=u().join("")&&E(b,u(),B(m())),$=u().join("")}).bind("mouseleave.inputmask",function(){var b=a(this),c=this;if(f.clearMaskOnLostFocus){var d=u().slice(),e=c._valueGet();b.is(":focus")||e==b.attr("placeholder")||""==e||(e==t().join("")?d=[]:M(d),E(c,d))}}).bind("click.inputmask",function(){var b=a(this),c=this;if(b.is(":focus")){var d=K(c);if(d.begin==d.end)if(f.radixFocus&&""!=f.radixPoint&&-1!=a.inArray(f.radixPoint,u())&&(hb||u().join("")==t().join("")))K(c,a.inArray(f.radixPoint,u())),hb=!1;else{var e=db?J(d.begin):d.begin,g=B(m(e));g>e?K(c,z(e)?e:B(e)):K(c,g)}}}).bind("dblclick.inputmask",function(){var a=this;setTimeout(function(){K(a,0,B(m()))},0)}).bind(j+".inputmask dragdrop.inputmask drop.inputmask",U).bind("setvalue.inputmask",function(){var a=this;G(a,!0,!1),$=u().join(""),(f.clearMaskOnLostFocus||f.clearIncomplete)&&a._valueGet()==t().join("")&&a._valueSet("")}).bind("cut.inputmask",function(b){fb=!0;var c=this,d=a(c),e=K(c);R(c,a.inputmask.keyCode.DELETE,e),E(c,u(),k().p,b,$!=u().join("")),c._valueGet()==t().join("")&&d.trigger("cleared"),f.showTooltip&&d.prop("title",k().mask)}).bind("complete.inputmask",f.oncomplete).bind("incomplete.inputmask",f.onincomplete).bind("cleared.inputmask",f.oncleared),bb.bind("keydown.inputmask",S).bind("keypress.inputmask",T),i||bb.bind("compositionstart.inputmask",W).bind("compositionupdate.inputmask",X).bind("compositionend.inputmask",Y),"paste"===j&&bb.bind("input.inputmask",V),Q(b);var g=a.isFunction(f.onBeforeMask)?f.onBeforeMask.call(b,b._valueGet(),f)||b._valueGet():b._valueGet();G(b,!0,!1,g.split(""));var h=u().slice();$=h.join("");var n;try{n=document.activeElement}catch(o){}N(h)===!1&&f.clearIncomplete&&l(),f.clearMaskOnLostFocus&&(h.join("")==t().join("")?h=[]:M(h)),E(b,h),n===b&&K(b,B(m())),P(b)}}var $,_,ab,bb,cb,db=!1,eb=!1,fb=!1,gb=!1,hb=!0;if(void 0!=d)switch(d.action){case"isComplete":return bb=a(d.el),e=bb.data("_inputmask").maskset,f=bb.data("_inputmask").opts,N(d.buffer);case"unmaskedvalue":return bb=d.$input,e=bb.data("_inputmask").maskset,f=bb.data("_inputmask").opts,db=d.$input.data("_inputmask").isRTL,I(d.$input);case"mask":$=u().join(""),Z(d.el);break;case"format":bb=a({}),bb.data("_inputmask",{maskset:e,opts:f,isRTL:f.numericInput}),f.numericInput&&(db=!0);var ib=(a.isFunction(f.onBeforeMask)?f.onBeforeMask.call(bb,d.value,f)||d.value:d.value).split("");return G(bb,!1,!1,db?ib.reverse():ib),a.isFunction(f.onBeforeWrite)&&f.onBeforeWrite.call(this,void 0,u(),0,f),d.metadata?{value:db?u().slice().reverse().join(""):u().join(""),metadata:bb.inputmask("getmetadata")}:db?u().slice().reverse().join(""):u().join("");case"isValid":bb=a({}),bb.data("_inputmask",{maskset:e,opts:f,isRTL:f.numericInput}),f.numericInput&&(db=!0);var ib=d.value.split("");G(bb,!1,!0,db?ib.reverse():ib);for(var jb=u(),kb=L(),lb=jb.length-1;lb>kb&&!z(lb);lb--);return jb.splice(kb,lb+1-kb),N(jb)&&d.value==jb.join("");case"getemptymask":return bb=a(d.el),e=bb.data("_inputmask").maskset,f=bb.data("_inputmask").opts,t();case"remove":var mb=d.el;bb=a(mb),e=bb.data("_inputmask").maskset,f=bb.data("_inputmask").opts,mb._valueSet(I(bb)),bb.unbind(".inputmask"),bb.removeData("_inputmask");var nb;Object.getOwnPropertyDescriptor&&(nb=Object.getOwnPropertyDescriptor(mb,"value")),nb&&nb.get?mb._valueGet&&Object.defineProperty(mb,"value",{get:mb._valueGet,set:mb._valueSet}):document.__lookupGetter__&&mb.__lookupGetter__("value")&&mb._valueGet&&(mb.__defineGetter__("value",mb._valueGet),mb.__defineSetter__("value",mb._valueSet));try{delete mb._valueGet,delete mb._valueSet}catch(ob){mb._valueGet=void 0,mb._valueSet=void 0}break;case"getmetadata":if(bb=a(d.el),e=bb.data("_inputmask").maskset,f=bb.data("_inputmask").opts,a.isArray(e.metadata)){for(var pb,qb=m(),rb=qb;rb>=0;rb--)if(k().validPositions[rb]&&void 0!=k().validPositions[rb].alternation){pb=k().validPositions[rb].alternation;break}return void 0!=pb?e.metadata[k().validPositions[qb].locator[pb]]:e.metadata[0]}return e.metadata}}if(void 0===a.fn.inputmask){var g=navigator.userAgent,h=null!==g.match(new RegExp("iphone","i")),i=(null!==g.match(new RegExp("android.*safari.*","i")),null!==g.match(new RegExp("android.*chrome.*","i")),null!==g.match(new RegExp("android.*firefox.*","i"))),j=(/Kindle/i.test(g)||/Silk/i.test(g)||/KFTT/i.test(g)||/KFOT/i.test(g)||/KFJWA/i.test(g)||/KFJWI/i.test(g)||/KFSOWI/i.test(g)||/KFTHWA/i.test(g)||/KFTHWI/i.test(g)||/KFAPWA/i.test(g)||/KFAPWI/i.test(g),b("paste")?"paste":b("input")?"input":"propertychange");a.inputmask={defaults:{placeholder:"_",optionalmarker:{start:"[",end:"]"},quantifiermarker:{start:"{",end:"}"},groupmarker:{start:"(",end:")"},alternatormarker:"|",escapeChar:"\\",mask:null,oncomplete:a.noop,onincomplete:a.noop,oncleared:a.noop,repeat:0,greedy:!0,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,clearIncomplete:!1,aliases:{},alias:null,onKeyDown:a.noop,onBeforeMask:void 0,onBeforePaste:void 0,onBeforeWrite:void 0,onUnMask:void 0,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:a.noop,skipOptionalPartCharacter:" ",showTooltip:!1,numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",radixFocus:!1,nojumps:!1,nojumpsThreshold:0,keepStatic:void 0,definitions:{9:{validator:"[0-9]",cardinality:1,definitionSymbol:"*"},a:{validator:"[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",cardinality:1,definitionSymbol:"*"},"*":{validator:"[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",cardinality:1}},ignorables:[8,9,13,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123],isComplete:void 0,canClearPosition:a.noop,postValidation:void 0},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91},masksCache:{},escapeRegex:function(a){var b=["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"];return a.replace(new RegExp("(\\"+b.join("|\\")+")","gim"),"\\$1")},format:function(b,c,g){var h=a.extend(!0,{},a.inputmask.defaults,c);return d(h.alias,c,h),f({action:"format",value:b,metadata:g},e(h),h)},isValid:function(b,c){var g=a.extend(!0,{},a.inputmask.defaults,c);return d(g.alias,c,g),f({action:"isValid",value:b},e(g),g)}},a.fn.inputmask=function(b,c){function g(b,c,e){var f=a(b);f.data("inputmask-alias")&&d(f.data("inputmask-alias"),{},c);for(var g in c){var h=f.data("inputmask-"+g.toLowerCase());void 0!=h&&("mask"==g&&0==h.indexOf("[")?(c[g]=h.replace(/[\s[\]]/g,"").split("','"),c[g][0]=c[g][0].replace("'",""),c[g][c[g].length-1]=c[g][c[g].length-1].replace("'","")):c[g]="boolean"==typeof h?h:h.toString(),e&&(e[g]=c[g]))}return c}var h,i=a.extend(!0,{},a.inputmask.defaults,c);if("string"==typeof b)switch(b){case"mask":return d(i.alias,c,i),h=e(i),void 0==h?this:this.each(function(){f({action:"mask",el:this},a.extend(!0,{},h),g(this,i))});case"unmaskedvalue":var j=a(this);return j.data("_inputmask")?f({action:"unmaskedvalue",$input:j}):j.val();case"remove":return this.each(function(){var b=a(this);b.data("_inputmask")&&f({action:"remove",el:this})});case"getemptymask":return this.data("_inputmask")?f({action:"getemptymask",el:this}):"";case"hasMaskedValue":return this.data("_inputmask")?!this.data("_inputmask").opts.autoUnmask:!1;case"isComplete":return this.data("_inputmask")?f({action:"isComplete",buffer:this[0]._valueGet().split(""),el:this}):!0;case"getmetadata":return this.data("_inputmask")?f({action:"getmetadata",el:this}):void 0;default:return d(i.alias,c,i),d(b,c,i)||(i.mask=b),h=e(i),void 0==h?this:this.each(function(){f({action:"mask",el:this},a.extend(!0,{},h),g(this,i))})}else{if("object"==typeof b)return i=a.extend(!0,{},a.inputmask.defaults,b),d(i.alias,b,i),h=e(i),void 0==h?this:this.each(function(){f({action:"mask",el:this},a.extend(!0,{},h),g(this,i))});if(void 0==b)return this.each(function(){var b=a(this).attr("data-inputmask");if(b&&""!=b)try{b=b.replace(new RegExp("'","g"),'"');var e=a.parseJSON("{"+b+"}");a.extend(!0,e,c),i=a.extend(!0,{},a.inputmask.defaults,e),i=g(this,i),d(i.alias,e,i),i.alias=void 0,a(this).inputmask("mask",i)}catch(f){}if(a(this).attr("data-inputmask-mask")||a(this).attr("data-inputmask-alias")){i=a.extend(!0,{},a.inputmask.defaults,{});var h={};i=g(this,i,h),d(i.alias,h,i),i.alias=void 0,a(this).inputmask("mask",i)}})}}}return a.fn.inputmask}(jQuery),function(a){return a.extend(a.inputmask.defaults.definitions,{h:{validator:"[01][0-9]|2[0-3]",cardinality:2,prevalidator:[{validator:"[0-2]",cardinality:1}]},s:{validator:"[0-5][0-9]",cardinality:2,prevalidator:[{validator:"[0-5]",cardinality:1}]},d:{validator:"0[1-9]|[12][0-9]|3[01]",cardinality:2,prevalidator:[{validator:"[0-3]",cardinality:1}]},m:{validator:"0[1-9]|1[012]",cardinality:2,prevalidator:[{validator:"[01]",cardinality:1}]},y:{validator:"(19|20)\\d{2}",cardinality:4,prevalidator:[{validator:"[12]",cardinality:1},{validator:"(19|20)",cardinality:2},{validator:"(19|20)\\d",cardinality:3}]}}),a.extend(a.inputmask.defaults.aliases,{"dd/mm/yyyy":{mask:"1/2/y",placeholder:"dd/mm/yyyy",regex:{val1pre:new RegExp("[0-3]"),val1:new RegExp("0[1-9]|[12][0-9]|3[01]"),val2pre:function(b){var c=a.inputmask.escapeRegex.call(this,b);return new RegExp("((0[1-9]|[12][0-9]|3[01])"+c+"[01])")},val2:function(b){var c=a.inputmask.escapeRegex.call(this,b);return new RegExp("((0[1-9]|[12][0-9])"+c+"(0[1-9]|1[012]))|(30"+c+"(0[13-9]|1[012]))|(31"+c+"(0[13578]|1[02]))")}},leapday:"29/02/",separator:"/",yearrange:{minyear:1900,maxyear:2099},isInYearRange:function(a,b,c){if(isNaN(a))return!1;var d=parseInt(a.concat(b.toString().slice(a.length))),e=parseInt(a.concat(c.toString().slice(a.length)));return(isNaN(d)?!1:d>=b&&c>=d)||(isNaN(e)?!1:e>=b&&c>=e)},determinebaseyear:function(a,b,c){var d=(new Date).getFullYear();if(a>d)return a;if(d>b){for(var e=b.toString().slice(0,2),f=b.toString().slice(2,4);e+c>b;)e--;var g=e+f;return a>g?a:g}return d},onKeyDown:function(b){var c=a(this);if(b.ctrlKey&&b.keyCode==a.inputmask.keyCode.RIGHT){var d=new Date;c.val(d.getDate().toString()+(d.getMonth()+1).toString()+d.getFullYear().toString()),c.triggerHandler("setvalue.inputmask")}},getFrontValue:function(a,b,c){for(var d=0,e=0,f=0;f<a.length&&"2"!=a.charAt(f);f++){var g=c.definitions[a.charAt(f)];g?(d+=e,e=g.cardinality):e++}return b.join("").substr(d,e)},definitions:{1:{validator:function(a,b,c,d,e){var f=e.regex.val1.test(a);return d||f||a.charAt(1)!=e.separator&&-1=="-./".indexOf(a.charAt(1))||!(f=e.regex.val1.test("0"+a.charAt(0)))?f:(b.buffer[c-1]="0",{refreshFromBuffer:{start:c-1,end:c},pos:c,c:a.charAt(0)})},cardinality:2,prevalidator:[{validator:function(a,b,c,d,e){var f=a;isNaN(b.buffer[c+1])||(f+=b.buffer[c+1]);var g=1==f.length?e.regex.val1pre.test(f):e.regex.val1.test(f);if(!d&&!g){if(g=e.regex.val1.test(a+"0"))return b.buffer[c]=a,b.buffer[++c]="0",{pos:c,c:"0"};if(g=e.regex.val1.test("0"+a))return b.buffer[c]="0",c++,{pos:c}}return g},cardinality:1}]},2:{validator:function(a,b,c,d,e){var f=e.getFrontValue(b.mask,b.buffer,e);-1!=f.indexOf(e.placeholder[0])&&(f="01"+e.separator);var g=e.regex.val2(e.separator).test(f+a);if(!d&&!g&&(a.charAt(1)==e.separator||-1!="-./".indexOf(a.charAt(1)))&&(g=e.regex.val2(e.separator).test(f+"0"+a.charAt(0))))return b.buffer[c-1]="0",{refreshFromBuffer:{start:c-1,end:c},pos:c,c:a.charAt(0)};if(e.mask.indexOf("2")==e.mask.length-1&&g){var h=b.buffer.join("").substr(4,4)+a;if(h!=e.leapday)return!0;var i=parseInt(b.buffer.join("").substr(0,4),10);return i%4===0?i%100===0?i%400===0?!0:!1:!0:!1}return g},cardinality:2,prevalidator:[{validator:function(a,b,c,d,e){isNaN(b.buffer[c+1])||(a+=b.buffer[c+1]);var f=e.getFrontValue(b.mask,b.buffer,e);-1!=f.indexOf(e.placeholder[0])&&(f="01"+e.separator);var g=1==a.length?e.regex.val2pre(e.separator).test(f+a):e.regex.val2(e.separator).test(f+a);return d||g||!(g=e.regex.val2(e.separator).test(f+"0"+a))?g:(b.buffer[c]="0",c++,{pos:c})},cardinality:1}]},y:{validator:function(a,b,c,d,e){if(e.isInYearRange(a,e.yearrange.minyear,e.yearrange.maxyear)){var f=b.buffer.join("").substr(0,6);if(f!=e.leapday)return!0;var g=parseInt(a,10);return g%4===0?g%100===0?g%400===0?!0:!1:!0:!1}return!1},cardinality:4,prevalidator:[{validator:function(a,b,c,d,e){var f=e.isInYearRange(a,e.yearrange.minyear,e.yearrange.maxyear);if(!d&&!f){var g=e.determinebaseyear(e.yearrange.minyear,e.yearrange.maxyear,a+"0").toString().slice(0,1);if(f=e.isInYearRange(g+a,e.yearrange.minyear,e.yearrange.maxyear))return b.buffer[c++]=g.charAt(0),{pos:c};if(g=e.determinebaseyear(e.yearrange.minyear,e.yearrange.maxyear,a+"0").toString().slice(0,2),f=e.isInYearRange(g+a,e.yearrange.minyear,e.yearrange.maxyear))return b.buffer[c++]=g.charAt(0),b.buffer[c++]=g.charAt(1),{pos:c}}return f},cardinality:1},{validator:function(a,b,c,d,e){var f=e.isInYearRange(a,e.yearrange.minyear,e.yearrange.maxyear);if(!d&&!f){var g=e.determinebaseyear(e.yearrange.minyear,e.yearrange.maxyear,a).toString().slice(0,2);if(f=e.isInYearRange(a[0]+g[1]+a[1],e.yearrange.minyear,e.yearrange.maxyear))return b.buffer[c++]=g.charAt(1),{pos:c};if(g=e.determinebaseyear(e.yearrange.minyear,e.yearrange.maxyear,a).toString().slice(0,2),e.isInYearRange(g+a,e.yearrange.minyear,e.yearrange.maxyear)){var h=b.buffer.join("").substr(0,6);if(h!=e.leapday)f=!0;else{var i=parseInt(a,10);f=i%4===0?i%100===0?i%400===0?!0:!1:!0:!1}}else f=!1;if(f)return b.buffer[c-1]=g.charAt(0),b.buffer[c++]=g.charAt(1),b.buffer[c++]=a.charAt(0),{refreshFromBuffer:{start:c-3,end:c},pos:c}}return f},cardinality:2},{validator:function(a,b,c,d,e){return e.isInYearRange(a,e.yearrange.minyear,e.yearrange.maxyear)},cardinality:3}]}},insertMode:!1,autoUnmask:!1},"mm/dd/yyyy":{placeholder:"mm/dd/yyyy",alias:"dd/mm/yyyy",regex:{val2pre:function(b){var c=a.inputmask.escapeRegex.call(this,b);return new RegExp("((0[13-9]|1[012])"+c+"[0-3])|(02"+c+"[0-2])")},val2:function(b){var c=a.inputmask.escapeRegex.call(this,b);return new RegExp("((0[1-9]|1[012])"+c+"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])"+c+"30)|((0[13578]|1[02])"+c+"31)")},val1pre:new RegExp("[01]"),val1:new RegExp("0[1-9]|1[012]")},leapday:"02/29/",onKeyDown:function(b){var c=a(this);if(b.ctrlKey&&b.keyCode==a.inputmask.keyCode.RIGHT){var d=new Date;c.val((d.getMonth()+1).toString()+d.getDate().toString()+d.getFullYear().toString()),c.triggerHandler("setvalue.inputmask")}}},"yyyy/mm/dd":{mask:"y/1/2",placeholder:"yyyy/mm/dd",alias:"mm/dd/yyyy",leapday:"/02/29",onKeyDown:function(b){var c=a(this);if(b.ctrlKey&&b.keyCode==a.inputmask.keyCode.RIGHT){var d=new Date;c.val(d.getFullYear().toString()+(d.getMonth()+1).toString()+d.getDate().toString()),c.triggerHandler("setvalue.inputmask")}}},"dd.mm.yyyy":{mask:"1.2.y",placeholder:"dd.mm.yyyy",leapday:"29.02.",separator:".",alias:"dd/mm/yyyy"},"dd-mm-yyyy":{mask:"1-2-y",placeholder:"dd-mm-yyyy",leapday:"29-02-",separator:"-",alias:"dd/mm/yyyy"},"mm.dd.yyyy":{mask:"1.2.y",placeholder:"mm.dd.yyyy",leapday:"02.29.",separator:".",alias:"mm/dd/yyyy"},"mm-dd-yyyy":{mask:"1-2-y",placeholder:"mm-dd-yyyy",leapday:"02-29-",separator:"-",alias:"mm/dd/yyyy"},"yyyy.mm.dd":{mask:"y.1.2",placeholder:"yyyy.mm.dd",leapday:".02.29",separator:".",alias:"yyyy/mm/dd"},"yyyy-mm-dd":{mask:"y-1-2",placeholder:"yyyy-mm-dd",leapday:"-02-29",separator:"-",alias:"yyyy/mm/dd"},datetime:{mask:"1/2/y h:s",placeholder:"dd/mm/yyyy hh:mm",alias:"dd/mm/yyyy",regex:{hrspre:new RegExp("[012]"),hrs24:new RegExp("2[0-4]|1[3-9]"),hrs:new RegExp("[01][0-9]|2[0-4]"),ampm:new RegExp("^[a|p|A|P][m|M]"),mspre:new RegExp("[0-5]"),ms:new RegExp("[0-5][0-9]")},timeseparator:":",hourFormat:"24",definitions:{h:{validator:function(a,b,c,d,e){if("24"==e.hourFormat&&24==parseInt(a,10))return b.buffer[c-1]="0",b.buffer[c]="0",{refreshFromBuffer:{start:c-1,end:c},c:"0"};var f=e.regex.hrs.test(a);if(!d&&!f&&(a.charAt(1)==e.timeseparator||-1!="-.:".indexOf(a.charAt(1)))&&(f=e.regex.hrs.test("0"+a.charAt(0))))return b.buffer[c-1]="0",b.buffer[c]=a.charAt(0),c++,{refreshFromBuffer:{start:c-2,end:c},pos:c,c:e.timeseparator};if(f&&"24"!==e.hourFormat&&e.regex.hrs24.test(a)){var g=parseInt(a,10);return 24==g?(b.buffer[c+5]="a",b.buffer[c+6]="m"):(b.buffer[c+5]="p",b.buffer[c+6]="m"),g-=12,10>g?(b.buffer[c]=g.toString(),b.buffer[c-1]="0"):(b.buffer[c]=g.toString().charAt(1),b.buffer[c-1]=g.toString().charAt(0)),{refreshFromBuffer:{start:c-1,end:c+6},c:b.buffer[c]}}return f},cardinality:2,prevalidator:[{validator:function(a,b,c,d,e){var f=e.regex.hrspre.test(a);return d||f||!(f=e.regex.hrs.test("0"+a))?f:(b.buffer[c]="0",c++,{pos:c})},cardinality:1}]},s:{validator:"[0-5][0-9]",cardinality:2,prevalidator:[{validator:function(a,b,c,d,e){var f=e.regex.mspre.test(a);return d||f||!(f=e.regex.ms.test("0"+a))?f:(b.buffer[c]="0",c++,{pos:c})},cardinality:1}]},t:{validator:function(a,b,c,d,e){return e.regex.ampm.test(a+"m")},casing:"lower",cardinality:1}},insertMode:!1,autoUnmask:!1},datetime12:{mask:"1/2/y h:s t\\m",placeholder:"dd/mm/yyyy hh:mm xm",alias:"datetime",hourFormat:"12"},"hh:mm t":{mask:"h:s t\\m",placeholder:"hh:mm xm",alias:"datetime",hourFormat:"12"},"h:s t":{mask:"h:s t\\m",placeholder:"hh:mm xm",alias:"datetime",hourFormat:"12"},"hh:mm:ss":{mask:"h:s:s",placeholder:"hh:mm:ss",alias:"datetime",autoUnmask:!1},"hh:mm":{mask:"h:s",placeholder:"hh:mm",alias:"datetime",autoUnmask:!1},date:{alias:"dd/mm/yyyy"},"mm/yyyy":{mask:"1/y",placeholder:"mm/yyyy",leapday:"donotuse",separator:"/",alias:"mm/dd/yyyy"}}),a.fn.inputmask}(jQuery),function(a){return a.extend(a.inputmask.defaults.definitions,{A:{validator:"[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",cardinality:1,casing:"upper"},"#":{validator:"[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",cardinality:1,casing:"upper"}}),a.extend(a.inputmask.defaults.aliases,{url:{mask:"ir",placeholder:"",separator:"",defaultPrefix:"http://",regex:{urlpre1:new RegExp("[fh]"),urlpre2:new RegExp("(ft|ht)"),urlpre3:new RegExp("(ftp|htt)"),urlpre4:new RegExp("(ftp:|http|ftps)"),urlpre5:new RegExp("(ftp:/|ftps:|http:|https)"),urlpre6:new RegExp("(ftp://|ftps:/|http:/|https:)"),urlpre7:new RegExp("(ftp://|ftps://|http://|https:/)"),urlpre8:new RegExp("(ftp://|ftps://|http://|https://)")},definitions:{i:{validator:function(){return!0},cardinality:8,prevalidator:function(){for(var a=[],b=8,c=0;b>c;c++)a[c]=function(){var a=c;return{validator:function(b,c,d,e,f){if(f.regex["urlpre"+(a+1)]){var g,h=b;a+1-b.length>0&&(h=c.buffer.join("").substring(0,a+1-b.length)+""+h);var i=f.regex["urlpre"+(a+1)].test(h);if(!e&&!i){for(d-=a,g=0;g<f.defaultPrefix.length;g++)c.buffer[d]=f.defaultPrefix[g],d++;for(g=0;g<h.length-1;g++)c.buffer[d]=h[g],d++;return{pos:d}}return i}return!1},cardinality:a}}();return a}()},r:{validator:".",cardinality:50}},insertMode:!1,autoUnmask:!1},ip:{mask:"i[i[i]].i[i[i]].i[i[i]].i[i[i]]",definitions:{i:{validator:function(a,b,c){return c-1>-1&&"."!=b.buffer[c-1]?(a=b.buffer[c-1]+a,a=c-2>-1&&"."!=b.buffer[c-2]?b.buffer[c-2]+a:"0"+a):a="00"+a,new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(a)},cardinality:1}}},email:{mask:"*{1,64}[.*{1,64}][.*{1,64}][.*{1,64}]@*{1,64}[.*{2,64}][.*{2,6}][.*{1,2}]",greedy:!1,onBeforePaste:function(a){return a=a.toLowerCase(),a.replace("mailto:","")},definitions:{"*":{validator:"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",cardinality:1,casing:"lower"}}}}),a.fn.inputmask}(jQuery),function(a){return a.extend(a.inputmask.defaults.aliases,{numeric:{mask:function(a){function b(b){for(var c="",d=0;d<b.length;d++)c+=a.definitions[b[d]]?"\\"+b[d]:b[d];return c}if(0!==a.repeat&&isNaN(a.integerDigits)&&(a.integerDigits=a.repeat),a.repeat=0,a.groupSeparator==a.radixPoint&&(a.groupSeparator="."==a.radixPoint?",":","==a.radixPoint?".":"")," "===a.groupSeparator&&(a.skipOptionalPartCharacter=void 0),a.autoGroup=a.autoGroup&&""!=a.groupSeparator,a.autoGroup&&("string"==typeof a.groupSize&&isFinite(a.groupSize)&&(a.groupSize=parseInt(a.groupSize)),isFinite(a.integerDigits))){var c=Math.floor(a.integerDigits/a.groupSize),d=a.integerDigits%a.groupSize;a.integerDigits=parseInt(a.integerDigits)+(0==d?c-1:c)}a.radixFocus=a.radixFocus&&"0"==a.placeholder,a.definitions[";"]=a.definitions["~"];var e=b(a.prefix);return e+="[+]",e+="~{1,"+a.integerDigits+"}",void 0!=a.digits&&(isNaN(a.digits)||parseInt(a.digits)>0)&&(e+=a.digitsOptional?"["+(a.decimalProtect?":":a.radixPoint)+";{"+a.digits+"}]":(a.decimalProtect?":":a.radixPoint)+";{"+a.digits+"}"),e+=b(a.suffix),e+="[-]",a.greedy=!1,e},placeholder:"",greedy:!1,digits:"*",digitsOptional:!0,groupSeparator:"",radixPoint:".",radixFocus:!0,groupSize:3,autoGroup:!1,allowPlus:!0,allowMinus:!0,negationSymbol:{front:"-",back:""},integerDigits:"+",prefix:"",suffix:"",rightAlign:!0,decimalProtect:!0,min:void 0,max:void 0,postFormat:function(b,c,d,e){var f=!1;b.length>=e.suffix.length&&b.join("").indexOf(e.suffix)==b.length-e.suffix.length&&(b.length=b.length-e.suffix.length,f=!0),c=c>=b.length?b.length-1:c<e.prefix.length?e.prefix.length:c;var g=!1,h=b[c];if(""==e.groupSeparator||-1!=a.inArray(e.radixPoint,b)&&c>=a.inArray(e.radixPoint,b)||new RegExp("[-+]").test(h)){if(f)for(var i=0,j=e.suffix.length;j>i;i++)b.push(e.suffix.charAt(i));return{pos:c}}var k=b.slice();h==e.groupSeparator&&(k.splice(c--,1),h=k[c]),d?k[c]="?":k.splice(c,0,"?");var l=k.join(""),m=l;if(l.length>0&&e.autoGroup||d&&-1!=l.indexOf(e.groupSeparator)){var n=a.inputmask.escapeRegex.call(this,e.groupSeparator);g=0==l.indexOf(e.groupSeparator),l=l.replace(new RegExp(n,"g"),"");var o=l.split(e.radixPoint);if(l=""==e.radixPoint?l:o[0],l!=e.prefix+"?0"&&l.length>=e.groupSize+e.prefix.length)for(var p=new RegExp("([-+]?[\\d?]+)([\\d?]{"+e.groupSize+"})");p.test(l);)l=l.replace(p,"$1"+e.groupSeparator+"$2"),l=l.replace(e.groupSeparator+e.groupSeparator,e.groupSeparator);""!=e.radixPoint&&o.length>1&&(l+=e.radixPoint+o[1])}g=m!=l,b.length=l.length;for(var i=0,j=l.length;j>i;i++)b[i]=l.charAt(i);var q=a.inArray("?",b);if(d?b[q]=h:b.splice(q,1),!g&&f)for(var i=0,j=e.suffix.length;j>i;i++)b.push(e.suffix.charAt(i));return{pos:q,refreshFromBuffer:g,buffer:b}},onBeforeWrite:function(b,c,d,e){if(b&&"blur"==b.type){var f=c.join(""),g=f.replace(e.prefix,"");if(g=g.replace(e.suffix,""),g=g.replace(new RegExp(a.inputmask.escapeRegex.call(this,e.groupSeparator),"g"),""),g=g.replace(a.inputmask.escapeRegex.call(this,e.radixPoint),"."),isFinite(g)&&isFinite(e.min)&&parseFloat(g)<parseFloat(e.min))return e.postFormat((e.prefix+e.min).split(""),0,!0,e);var h=""!=e.radixPoint?c.join("").split(e.radixPoint):[c.join("")],i=h[0].match(e.regex.integerPart(e)),j=2==h.length?h[1].match(e.regex.integerNPart(e)):void 0;!i||i[0]!=e.negationSymbol.front+"0"&&i[0]!=e.negationSymbol.front&&"+"!=i[0]||void 0!=j&&!j[0].match(/^0+$/)||c.splice(i.index,1);var k=a.inArray(e.radixPoint,c);if(-1!=k&&isFinite(e.digits)&&!e.digitsOptional){for(var l=1;l<=e.digits;l++)(void 0==c[k+l]||c[k+l]==e.placeholder.charAt(0))&&(c[k+l]="0");return{refreshFromBuffer:!0,buffer:c}}}if(e.autoGroup){var m=e.postFormat(c,d-1,!0,e);return m.caret=d<=e.prefix.length?m.pos:m.pos+1,m}},regex:{integerPart:function(b){return new RegExp("["+a.inputmask.escapeRegex.call(this,b.negationSymbol.front)+"+]?\\d*")},integerNPart:function(b){return new RegExp("[\\d"+a.inputmask.escapeRegex.call(this,b.groupSeparator)+"]+")}},signHandler:function(a,b,c,d,e){if(!d&&e.allowMinus&&"-"===a||e.allowPlus&&"+"===a){var f=b.buffer.join("").match(e.regex.integerPart(e));if(f&&f[0].length>0)return b.buffer[f.index]==("-"===a?"+":e.negationSymbol.front)?{pos:f.index,c:"-"===a?e.negationSymbol.front:"+",remove:f.index,caret:c}:b.buffer[f.index]==("-"===a?e.negationSymbol.front:"+")?{remove:f.index,caret:c-1}:{pos:f.index,c:"-"===a?e.negationSymbol.front:"+",caret:c+1}}return!1},radixHandler:function(b,c,d,e,f){if(!e&&b===f.radixPoint&&f.digits>0){var g=a.inArray(f.radixPoint,c.buffer),h=c.buffer.join("").match(f.regex.integerPart(f));if(-1!=g&&c.validPositions[g])return c.validPositions[g-1]?{caret:g+1}:{pos:h.index,c:h[0],caret:g+1};if(!h||"0"==h[0]&&h.index+1!=d)return c.buffer[h?h.index:d]="0",{pos:(h?h.index:d)+1}}return!1},leadingZeroHandler:function(b,c,d,e,f){var g=c.buffer.join("").match(f.regex.integerNPart(f)),h=a.inArray(f.radixPoint,c.buffer);if(g&&!e&&(-1==h||h>=d))if(0==g[0].indexOf("0")){d<f.prefix.length&&(d=g.index);var i=a.inArray(f.radixPoint,c._buffer),j=c._buffer&&c.buffer.slice(h).join("")==c._buffer.slice(i).join("")||0==parseInt(c.buffer.slice(h+1).join("")),k=c._buffer&&c.buffer.slice(g.index,h).join("")==c._buffer.slice(f.prefix.length,i).join("")||"0"==c.buffer.slice(g.index,h).join("");if(-1==h||j&&k)return c.buffer.splice(g.index,1),d=d>g.index?d-1:g.index,{pos:d,remove:g.index};if(g.index+1==d||"0"==b)return c.buffer.splice(g.index,1),d=g.index,{pos:d,remove:g.index}}else if("0"===b&&d<=g.index&&g[0]!=f.groupSeparator)return!1;return!0},postValidation:function(b,c){var d=!0,e=b.join(""),f=e.replace(c.prefix,"");return f=f.replace(c.suffix,""),f=f.replace(new RegExp(a.inputmask.escapeRegex.call(this,c.groupSeparator),"g"),""),f=f.replace(a.inputmask.escapeRegex.call(this,c.radixPoint),"."),isFinite(f)&&isFinite(c.max)&&(d=parseFloat(f)<=parseFloat(c.max)),d},definitions:{"~":{validator:function(b,c,d,e,f){var g=f.signHandler(b,c,d,e,f);if(!g&&(g=f.radixHandler(b,c,d,e,f),!g&&(g=e?new RegExp("[0-9"+a.inputmask.escapeRegex.call(this,f.groupSeparator)+"]").test(b):new RegExp("[0-9]").test(b),g===!0&&(g=f.leadingZeroHandler(b,c,d,e,f),g===!0)))){var h=a.inArray(f.radixPoint,c.buffer);
g=f.digitsOptional===!1&&d>h&&!e?{pos:d,remove:d}:{pos:d}}return g},cardinality:1,prevalidator:null},"+":{validator:function(a,b,c,d,e){var f=e.signHandler(a,b,c,d,e);return!f&&(d&&e.allowMinus&&a===e.negationSymbol.front||e.allowMinus&&"-"==a||e.allowPlus&&"+"==a)&&(f=!0),f},cardinality:1,prevalidator:null,placeholder:""},"-":{validator:function(a,b,c,d,e){var f=e.signHandler(a,b,c,d,e);return!f&&d&&e.allowMinus&&a===e.negationSymbol.back&&(f=!0),f},cardinality:1,prevalidator:null,placeholder:""},":":{validator:function(b,c,d,e,f){var g=f.signHandler(b,c,d,e,f);if(!g){var h="["+a.inputmask.escapeRegex.call(this,f.radixPoint)+"]";g=new RegExp(h).test(b),g&&c.validPositions[d]&&c.validPositions[d].match.placeholder==f.radixPoint&&(g={caret:d+1})}return g},cardinality:1,prevalidator:null,placeholder:function(a){return a.radixPoint}}},insertMode:!0,autoUnmask:!1,onUnMask:function(b,c,d){var e=b.replace(d.prefix,"");return e=e.replace(d.suffix,""),e=e.replace(new RegExp(a.inputmask.escapeRegex.call(this,d.groupSeparator),"g"),"")},isComplete:function(b,c){var d=b.join(""),e=b.slice();if(c.postFormat(e,0,!0,c),e.join("")!=d)return!1;var f=d.replace(c.prefix,"");return f=f.replace(c.suffix,""),f=f.replace(new RegExp(a.inputmask.escapeRegex.call(this,c.groupSeparator),"g"),""),","===c.radixPoint&&(f=f.replace(a.inputmask.escapeRegex.call(this,c.radixPoint),".")),isFinite(f)},onBeforeMask:function(b,c){if(""!=c.radixPoint&&isFinite(b))b=b.toString().replace(".",c.radixPoint);else{var d=b.match(/,/g),e=b.match(/\./g);e&&d?e.length>d.length?(b=b.replace(/\./g,""),b=b.replace(",",c.radixPoint)):d.length>e.length?(b=b.replace(/,/g,""),b=b.replace(".",c.radixPoint)):b=b.indexOf(".")<b.indexOf(",")?b.replace(/\./g,""):b=b.replace(/,/g,""):b=b.replace(new RegExp(a.inputmask.escapeRegex.call(this,c.groupSeparator),"g"),"")}return 0==c.digits&&(-1!=b.indexOf(".")?b=b.substring(0,b.indexOf(".")):-1!=b.indexOf(",")&&(b=b.substring(0,b.indexOf(",")))),b},canClearPosition:function(b,c,d,e,f){var g=b.validPositions[c].input,h=g!=f.radixPoint&&isFinite(g)||c==d||g==f.groupSeparator||g==f.negationSymbol.front||g==f.negationSymbol.back;if(h&&isFinite(g)){var i=b.buffer.join("").substr(0,c).match(f.regex.integerNPart(f));if(!e){var j=c+1,k=null==i||0==parseInt(i[0].replace(new RegExp(a.inputmask.escapeRegex.call(this,f.groupSeparator),"g"),""));if(k)for(;b.validPositions[j]&&(b.validPositions[j].input==f.groupSeparator||"0"==b.validPositions[j].input);)delete b.validPositions[j],j++}var l=[];for(var m in b.validPositions)l.push(b.validPositions[m].input);i=l.join("").match(f.regex.integerNPart(f));var n=a.inArray(f.radixPoint,b.buffer);if(i&&(-1==n||n>=c))if(0==i[0].indexOf("0"))h=i.index!=c||-1==n;else{var o=parseInt(i[0].replace(new RegExp(a.inputmask.escapeRegex.call(this,f.groupSeparator),"g"),""));-1!=n&&10>o&&"0"==f.placeholder.charAt(0)&&(b.validPositions[c].input="0",b.p=f.prefix.length+1,h=!1)}}return h}},currency:{prefix:"$ ",groupSeparator:",",alias:"numeric",placeholder:"0",autoGroup:!0,digits:2,digitsOptional:!1,clearMaskOnLostFocus:!1},decimal:{alias:"numeric"},integer:{alias:"numeric",digits:"0",radixPoint:""}}),a.fn.inputmask}(jQuery),function(a){return a.extend(a.inputmask.defaults.aliases,{phone:{url:"phone-codes/phone-codes.js",maskInit:"+pp(pp)pppppppp",countrycode:"",mask:function(b){b.definitions={p:{validator:function(){return!1},cardinality:1},"#":{validator:"[0-9]",cardinality:1}};var c=[];return a.ajax({url:b.url,async:!1,dataType:"json",success:function(a){c=a},error:function(a,c,d){alert(d+" - "+b.url)}}),c=c.sort(function(a,b){return(a.mask||a)<(b.mask||b)?-1:1}),""!=b.countrycode&&(b.maskInit="+"+b.countrycode+b.maskInit.substring(3)),c.splice(0,0,b.maskInit),c},nojumps:!0,nojumpsThreshold:1,onBeforeMask:function(a,b){var c=a.replace(/^0/g,"");return(c.indexOf(b.countrycode)>1||-1==c.indexOf(b.countrycode))&&(c="+"+b.countrycode+c),c}},phonebe:{alias:"phone",url:"phone-codes/phone-be.js",countrycode:"32",nojumpsThreshold:4}}),a.fn.inputmask}(jQuery),function(a){return a.extend(a.inputmask.defaults.aliases,{Regex:{mask:"r",greedy:!1,repeat:"*",regex:null,regexTokens:null,tokenizer:/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,quantifierFilter:/[0-9]+[^,]/,isComplete:function(a,b){return new RegExp(b.regex).test(a.join(""))},definitions:{r:{validator:function(b,c,d,e,f){function g(a,b){this.matches=[],this.isGroup=a||!1,this.isQuantifier=b||!1,this.quantifier={min:1,max:1},this.repeaterPart=void 0}function h(){var a,b,c=new g,d=[];for(f.regexTokens=[];a=f.tokenizer.exec(f.regex);)switch(b=a[0],b.charAt(0)){case"(":d.push(new g(!0));break;case")":var e=d.pop();d.length>0?d[d.length-1].matches.push(e):c.matches.push(e);break;case"{":case"+":case"*":var h=new g(!1,!0);b=b.replace(/[{}]/g,"");var i=b.split(","),j=isNaN(i[0])?i[0]:parseInt(i[0]),k=1==i.length?j:isNaN(i[1])?i[1]:parseInt(i[1]);if(h.quantifier={min:j,max:k},d.length>0){var l=d[d.length-1].matches;if(a=l.pop(),!a.isGroup){var e=new g(!0);e.matches.push(a),a=e}l.push(a),l.push(h)}else{if(a=c.matches.pop(),!a.isGroup){var e=new g(!0);e.matches.push(a),a=e}c.matches.push(a),c.matches.push(h)}break;default:d.length>0?d[d.length-1].matches.push(b):c.matches.push(b)}c.matches.length>0&&f.regexTokens.push(c)}function i(b,c){var d=!1;c&&(k+="(",m++);for(var e=0;e<b.matches.length;e++){var f=b.matches[e];if(1==f.isGroup)d=i(f,!0);else if(1==f.isQuantifier){var g=a.inArray(f,b.matches),h=b.matches[g-1],j=k;if(isNaN(f.quantifier.max)){for(;f.repeaterPart&&f.repeaterPart!=k&&f.repeaterPart.length>k.length&&!(d=i(h,!0)););d=d||i(h,!0),d&&(f.repeaterPart=k),k=j+f.quantifier.max}else{for(var l=0,o=f.quantifier.max-1;o>l&&!(d=i(h,!0));l++);k=j+"{"+f.quantifier.min+","+f.quantifier.max+"}"}}else if(void 0!=f.matches)for(var p=0;p<f.length&&!(d=i(f[p],c));p++);else{var q;if("["==f.charAt(0)){q=k,q+=f;for(var r=0;m>r;r++)q+=")";var s=new RegExp("^("+q+")$");d=s.test(n)}else for(var t=0,u=f.length;u>t;t++)if("\\"!=f.charAt(t)){q=k,q+=f.substr(0,t+1),q=q.replace(/\|$/,"");for(var r=0;m>r;r++)q+=")";var s=new RegExp("^("+q+")$");if(d=s.test(n))break}k+=f}if(d)break}return c&&(k+=")",m--),d}null==f.regexTokens&&h();var j=c.buffer.slice(),k="",l=!1,m=0;j.splice(d,0,b);for(var n=j.join(""),o=0;o<f.regexTokens.length;o++){var g=f.regexTokens[o];if(l=i(g,g.isGroup))break}return l},cardinality:1}}}}),a.fn.inputmask}(jQuery);
String.prototype.format = function () {
	var args = arguments;
	return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
		if (m == "{{") { return "{"; }
		if (m == "}}") { return "}"; }
		return args[n];
	});
};

Number.prototype.pad = function (n) {
	var result = this.toString();

	for (var i = result.length; i < n; i++) {
		result = "0" + result;
	}

	return result;
};
var noOfItemsToFetchSearchDepartures = 10;
var fetchExtended = 15;
var Skanetr = { IS_DEBUG: false };
Skanetr.logg = Skanetr.IS_DEBUG === true ? (function () { window.console.log.apply(window.console, arguments) }) : (function () { return; });
Skanetr.currentPageType = '';//'InformationPage' //var skanetrCurrentPage

Skanetr.ConsentStuff = {
    Ids: {
        hfConsentId: "hiddenConsentAccepted"
        , chkConsentId: "chkConsentAccepted"
        //, hfWhenLoggedInId: "hiddenWhenLoggedIn"
    },
    Funcs: {
        TransferConsentToHidden: function (checkbox, hiddenId) {
            crmFromSubmitButton
            var checkVal = "false";
            if ($(checkbox).is(":checked")) {
                checkVal = "true";
            }
            $("#" + hiddenId).val(checkVal);
            return checkVal;
        }

        , ValidateConsent: function ValidateConsent(obj) {

            if (!obj) {
                obj = Skanetr.ConsentStuff.Ids;
            }
            var checkConsent = $("#" + obj.chkConsentId);
            if (checkConsent && checkConsent.length > 0) {
                var checkVal = "false";
                if ($(checkConsent).is(":checked")) {
                    checkVal = "true";
                }
                $("#" + obj.hfConsentId).val(checkVal);
            }
            else {

                $("#" + obj.hfConsentId).val("true"); //user is logged in or consent left empty by WebEditor               

            }

            return $("#" + obj.hfConsentId).val();
        }

    } //end of funcs
}//end Skanetr.ConstentStuff

/* Search menu module */
var SearchMenu = function () {
    var buttonMobile = $(".search-btn"),
        buttonDesktop = $(".search-desktop-btn"),
        menu = $(".search-nav"),
        searchShortcuts = $(".search-shortcuts ul"),
        searchShortcutsArrow = $(".search-shortcuts .white-arrow-small"),
        searchArea = $(".search-shortcuts button.heading"),
        cssClass = {
            expand: "expand",
            arrowDown: "down",
            arrowUp: "up"
        },
        visible = false,


        show = function () {
            buttonMobile.addClass(cssClass.expand);
            buttonDesktop.addClass(cssClass.expand);
            menu.addClass(cssClass.expand);
            searchShortcuts.addClass(cssClass.expand);
            searchShortcutsArrow.removeClass(cssClass.arrowDown).addClass(cssClass.arrowUp);
            searchArea.focus();
            visible = true;
            $("#searchQueryQuick").focus();
        };

    return {
        toggle: function () {
            visible ? this.hide() : show();
        },

        hide: function () {
            buttonMobile.removeClass(cssClass.expand);
            buttonDesktop.removeClass(cssClass.expand);
            menu.removeClass(cssClass.expand);
            searchShortcuts.removeClass(cssClass.expand);
            searchShortcutsArrow.removeClass(cssClass.arrowUp).addClass(cssClass.arrowDown);
            visible = false;
        }
    }
}

var Form = function () {
    var form = {
        init: init
    };
    return form;
    function init() {
        $('.Form__MainBody button[type="submit"]').click(function (event) {
            // Prevent the form from submitting if the checkbox is not checked
            var checkbox = $('.Form__MainBody input[type="checkbox"]');
            if (checkbox.is(':checked')) {

                // Get the value of the aria-describedby attribute from the checkbox
                var describedBy = checkbox.attr('aria-describedby');
                // Use the describedBy value to find the corresponding span and clear its text
                $('span[id="' + describedBy + '"]').text('');
            }
        });

        // Options for the observer (which mutations to observe)
        var config = { attributes: true, attributeOldValue: true, attributeFilter: ['class', 'aria-invalid'] };

        // Callback function to execute when mutations are observed
        var callback = function (mutationsList, observer) {
            for (var mutation of mutationsList) {
                if (mutation.type === 'attributes' && (mutation.attributeName === 'class' || mutation.attributeName === 'aria-invalid')) {

                    if (mutation.attributeName === 'class') {
                        var target = mutation.target;
                        var oldClassState = mutation.oldValue;
                        var currentClassState = target.className;
                        let validationFailClass = 'ValidationFail';
                        // Check if the ValidationFail class was removed
                        if (!currentClassState.includes(validationFailClass) && oldClassState.includes(validationFailClass)) {
                            $(target).find('.Form__Element__ValidationError').empty();
                        }

                    }
                    else if (mutation.attributeName === 'aria-invalid' && target) {
                        let input = target.querySelector('input[type="checkbox"]')
                        let newValue = target.getAttribute('aria-invalid');
                        if (input) {
                            if (newValue !== null) {
                                input.setAttribute('aria-invalid', newValue);
                            }
                            else {
                                input.removeAttribute('aria-invalid');
                            }
                        }
                    }

                }
            }
        };

        // Start observing each .FormTextBox within Form__MainBody for configured mutations
        let elements = document.querySelectorAll('.Form__MainBody .FormTextbox');
        elements.forEach(function (element) {
            var observer = new MutationObserver(callback);
            observer.observe(element, config);
        });


        // Start observing each .choice within Form__MainBody for configured mutations
        let choices = document.querySelectorAll('.Form__MainBody [data-f-type="choice"]');
        choices.forEach(function (element) {
            var observer = new MutationObserver(callback);
            observer.observe(element, config);
        });
    }
}

var CrmForm = function () {
    var crm = {
        init: init
    };
    return crm;
    function init() {

        var ConsentIds = Skanetr.ConsentStuff.Ids;
        var transferConsentValueToHidden = Skanetr.ConsentStuff.Funcs.TransferConsentToHidden;//function
        var validateConsentCRMForm = Skanetr.ConsentStuff.Funcs.ValidateConsent;//function

        var submitButtons = $("#submit-button-crmform").find("input");

        $("#ActionDate").inputmask("yyyy-mm-dd", { "placeholder": "yyyy-mm-dd" });
        $("#ActionTime").inputmask("hh:mm", { "placeholder": "hh:mm" });

        if ($("#crmForm input[type='radio']:checked").length > 0) {
            var contactCustomer = $("#crmForm input[type='radio']:checked").val();

            if (contactCustomer === "False") {
                $(".contact-me-element").addClass("st-hidden");
            }
        }

        $('body').on('keydown', '#Description', function (e) {
            if (e.keyCode == 226) {
                return false;
            }
        });

        $("#Description").on('paste', function () {
            var element = this;
            setTimeout(function () {
                var test = $(element).val().replace("<", " ").replace(">", " ");
                $(element).val(test);
            }, 100);
        });

        $('body').on('keydown', '#ActionDate', function (e) {
            $('#ActionDateError').hide();
            $('#ActionDateError').removeClass('field-validation-error');
            $('#ActionDate').removeClass('field-validation-error');
        });

        $('body').on('keydown', '#ActionTime', function (e) {
            $('#ActionTimeError').hide();
            $('#ActionTimeError').removeClass('field-validation-error');
            $('#ActionTime').removeClass('field-validation-error');
        });


        $("#crmFromSubmitButton").on("click", function (e) {
            $(submitButtons).prop('disabled', true);
            var $form = $("#crmForm");
            let key = $("#SiteKeyHidden").val()

            grecaptcha.ready(function () {
                grecaptcha.execute(key, { action: 'AuthenticateToken' }).then(function (token) {
                    $("#RecaptchaToken").val(token);
                    $form.submit();
                });
            });
        });

        $("#crmForm").on("change", "input:radio", function () {

            let checkValue = $("#crmForm input[type='radio']:checked").val();
            let legendText = checkValue == "False" ? $("#legendContactInfoYesText").val() : $("#legendContactInfoNoText").val(); 
            let legendId = "legendContactInfo";
            let legendClass = "visually-hidden";

            $("#legendContactInfo").replaceWith("<legend id='" + legendId + "' class='" + legendClass + "'>" + legendText + "</legend>");

            $(".contact-me-element").toggleClass("st-hidden");

            //Bug ST-291
            var isFieldsEditable = $("#Form_FirstName").is(':disabled') == false; //stickprov. current state is they are readonly when logged in
            console.log(isFieldsEditable)
            if ($("#crmForm input[type='radio']:checked").val() == "False" && isFieldsEditable) {
                $("#Form_FirstName").val("");
                $("#Form_LastName").val("");
                $("#Form_EmailAddress").val("");
                $("#Form_VerifiedEmailAddress").val("");
                $("#PhoneNumber").val("");

                var lst1 = $(".contact-me-element").find(".field-validation-error");
                var lst2 = $(".contact-me-element").find(".input-validation-error");
                $(lst1).each(function (index) {
                    $(this).removeClass('field-validation-error');
                    $(this).addClass('field-validation-valid');
                });

                $(lst2).each(function (index) {
                    $(this).removeClass("input-validation-error");
                });

            } //if do NOT contact Me && isFieldsEditable        
        });

        var handleValidationMsgForConsent = function handleValidationMsgForConsent(isValidConsent) {

            var selector = "span[data-valmsg-for='Form.ConsentAcceptedHidden']";
            if (isValidConsent) {
                $(selector).removeClass('field-validation-error');
                $(selector).addClass('field-validation-valid');
                $(selector).attr("id", "");
            }
            else {
                $(selector).removeClass('field-validation-valid');
                $(selector).addClass('field-validation-error');
                $(selector).attr("id", "Form_Consent-error");
            }
        }


        var disableEnableSubmit = function () {
            if (validateConsentCRMForm() == "false") {
                //$(submitButtons).prop("disabled", true);
            }
        };
        disableEnableSubmit();//execute now!

        $("#fileCrmUplod").on("change", function (e) {
            var maxFileSize = $("#maxFileSize").val();
            var allowedFileTypes = $("#allowedFileTypes").val().split(",");
            var message = [];

            var files = e.originalEvent.target.files;

            for (var i = 0, len = files.length; i < len; i++) {
                if (!fileIsAllowed(files[i], allowedFileTypes, maxFileSize)) {
                    message.push("Filen: " + files[i].name + " är större än tillåten storlek eller ej tillåten filtyp, den kommer inte att bifogas, storlek ca: " + byteToMb(files[i].size) + ".");
                }
            }

            if (message.length > 0) {

                message.push("Tillåtna filtyper är: " + allowedFileTypes);
                message.push("Största tillåtna storlek är: " + byteToMb(maxFileSize));
                message.push("Alla tidigare valda filer kommer att tas bort ifrån formuläret.");
                alert(message.join('\r\n'));
                $(this).after($(this).clone(true)).remove();
            }
        });

        $('#FormError').bind("DOMSubtreeModified", function () {
            $("#FormError").find("li:contains('Please enter a valid date')").eq(0).remove();
        });



        $("#crmForm").submit(function (e) {
            var returnValue = true;
            if ($('#ActionDate').is(":visible")) {

                $('#ActionTimeError').hide();
                $('#ActionDateError').hide();
                $('#ActionDateError').removeClass('field-validation-error');
                $('#ActionTimeError').removeClass('field-validation-error');

                if (Date.parse($('#ActionDate').val())) {
                    $('#ActionDate').removeClass('field-validation-error');
                    if (Date.parse($('#ActionDate').val() + 'T' + $('#ActionTime').val())) {
                        $('#ActionTime').removeClass('field-validation-error');
                        $('#ActionTimeError').hide();
                    }
                    else {
                        $('#ActionTime').addClass('field-validation-error');
                        $('#ActionTimeError').addClass('field-validation-error');
                        $('#ActionTimeError').removeClass('field-validation-valid');
                        $('#ActionTimeError').show();
                        $("#FormError").find('h3').css("display", "inherit");
                        returnValue = false;
                    }
                }
                else {
                    if (Date.parse('2001-01-01T' + $('#ActionTime').val())) {
                        $('#ActionDate').addClass('field-validation-error');
                        $('#ActionDateError').addClass('field-validation-error');
                        $('#ActionDateError').removeClass('field-validation-valid');
                        $('#ActionDateError').show();
                        $('#ActionTime').removeClass('field-validation-error');
                        $('#ActionTimeError').hide();
                        $("#FormError").find('h3').css("display", "inherit");
                        $("#FormError").find('h3').css("display", "inherit");

                        returnValue = false;
                    }
                    else {
                        $('#ActionTime').addClass('field-validation-error');
                        $('#ActionDate').addClass('field-validation-error');
                        $('#ActionTimeError').addClass('field-validation-error');
                        $('#ActionTimeError').removeClass('field-validation-valid');
                        $('#ActionTimeError').show();
                        $('#ActionDateError').addClass('field-validation-error');
                        $('#ActionDateError').removeClass('field-validation-valid');
                        $('#ActionDateError').show();
                        $("#FormError").find('h3').css("display", "inherit");
                        $("#FormError").find('.single-error-text').css("display", "inherit");
                        returnValue = false;
                    }
                }
            }
            handleValidationMsgForConsent(validateConsentCRMForm() == "true");

            var fieldErros = $(".field-validation-error");
            if (fieldErros.length == 0) {
                e.preventDefault();

                if (navigator.userAgent.match(/msie/i) || navigator.userAgent.match(/trident/i)) {
                    var opts = {
                        lines: 13, // The number of lines to draw
                        length: 4, // The length of each line
                        width: 2, // The line thickness
                        radius: 6, // The radius of the inner circle
                        corners: 1, // Corner roundness (0..1)
                        rotate: 0, // The rotation offset
                        direction: 1, // 1: clockwise, -1: counterclockwise
                        color: '#FFF', // #rgb or #rrggbb or array of colors
                        speed: 1, // Rounds per second
                        trail: 60, // Afterglow percentage
                        shadow: false, // Whether to render a shadow
                        hwaccel: false, // Whether to use hardware acceleration
                        className: 'spinner', // The CSS class to assign to the spinner
                        zIndex: 2e9, // The z-index (defaults to 2000000000)
                        top: '50%', // Top position relative to parent
                        left: '80%' // Left position relative to parent
                    };
                    var target = document.getElementById('foo');
                    var spinner = new Spinner(opts).spin(target);
                    $("#foo").removeClass("st-hidden").prop('disabled', true);
                    $(submitButtons).hide();
                }
                else {
                    $('#crmForm input[type="button"]').addClass("loading-animation");
                }

                this.submit();


            } else {
                $('#crmForm input[type="button"]').prop('disabled', false);
                $('#FormError').show();
                returnValue = false;
            }
            return returnValue;
        });

        $("#WayOfTravel").change(function () {
            jsMeansOfTransportationChange(this);
        });

        // Options for the observer (which mutations to observe)
        var config = { attributes: true, attributeOldValue: true, attributeFilter: ['class'] };
        var configConsent = { attributes: true, attributeOldValue: true, attributeFilter: ['aria-checked'] };

        // Callback function to execute when mutations are observed
        // Hack to make things work
        var callback = function (mutationsList, observer) {
            for (var mutation of mutationsList) {
                if (mutation.type === 'attributes' && mutation.attributeName === 'aria-checked') {
                    let target = mutation.target;
                    let oldState = mutation.oldValue;
                    let currentState = $(target).attr("aria-checked");
                    let validationFail = 'false';
                    let span = $(target).prev("span");
                    if (!currentState.includes(validationFail) && oldState.includes(validationFail)) {
                        $(span).attr("id", "");
                        $(span).removeClass('field-validation-error');
                        $(span).addClass('field-validation-valid');

                    } else {
                        $(span).attr("id", "Form_Consent-error");
                        $(span).addClass('field-validation-error');
                        $(span).removeClass('field-validation-valid');
                    }
                }
                if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
                    let target = mutation.target;
                    let oldClassState = mutation.oldValue;
                    let currentClassState = target.className;
                    let validationFailClass = 'field-validation-error';
                    // Check if the field-validation-error class was removed
                    if (!currentClassState.includes(validationFailClass) && oldClassState.includes(validationFailClass)) {
                        let elementId = $(target).attr("id");
                        if (elementId == "ActionDateError") {
                            $(target).next().find("input[id='ActionDate']").attr("aria-describedby", "");
                        } else if (elementId == "ActionTimeError") {
                            $(target).next().find("input[id='ActionTime']").attr("aria-describedby", "");
                        } else {
                            $(target).attr("id", "");
                        }

                    } else {
                        let elementMsgFor = $(target).attr("data-valmsg-for");
                        if (elementMsgFor == "Form.FirstName") {
                            $(target).attr("id", "Form_FirstName-error");
                        }
                        if (elementMsgFor == "Form.LastName") {
                            $(target).attr("id", "Form_LastName-error");
                        }
                        if (elementMsgFor == "Form.VerifiedEmailAddress") {
                            $(target).attr("id", "Form_VerifiedEmailAddress-error");
                        }
                        if (elementMsgFor == "Form.EmailAddress") {
                            if ($(target).parent('label').attr('for') == "Form_VerifiedEmailAddress") {
                                $(target).attr("id", "Form_EmailAddress-error2");
                            } else {
                                $(target).attr("id", "Form_EmailAddress-error");
                            }
                        }
                        if (elementMsgFor == "PhoneNumber") {
                            $(target).attr("id", "Form_PhoneNumber-error");
                        }
                        if (elementMsgFor == "Form.Description") {
                            $(target).attr("id", "Form_Description-error");
                        }
                        if (elementMsgFor == "InvoiceNo") {
                            $(target).attr("id", "InvoiceNo-error");
                        }
                        if (elementMsgFor == "ControlFeeNumber") {
                            $(target).attr("id", "ControlFeeNumber-error");
                        }
                        let elementId = $(target).attr("id");
                        if (elementId == "ActionDateError") {
                            $(target).next().find("input[id='ActionDate']").attr("aria-describedby", "ActionDateError");
                        }
                        if (elementId == "ActionTimeError") {
                            $(target).next().find("input[id='ActionTime']").attr("aria-describedby", "ActionTimeError");
                        }
                    }
                }
            }
        };

        let mutationElements = document.querySelectorAll('.basic-form .mutation .field-validation-valid');
        mutationElements.forEach(function (element) {
            let observer = new MutationObserver(callback);
            observer.observe(element, config);
        });

        //Start observing each .field-validation-valid within basic-form within contact-me-element for configured mutations //this is a hack to make aria-describedby work correct in the old crm forms
        let contactMeElements = document.querySelectorAll('.basic-form .contact-me-element .field-validation-valid');
        contactMeElements.forEach(function (element) {
            let observer = new MutationObserver(callback);
            observer.observe(element, config);
        });

        let consentElements = document.querySelectorAll('.basic-form .consent-mutation .st-checkbox');
        consentElements.forEach(function (element) {
            let observer = new MutationObserver(callback);
            observer.observe(element, configConsent);
        });

        //let elementsContainerGroup = document.querySelectorAll('.basic-form input-container .field-validation-valid');
        //elementsContainerGroup.forEach(function (element) {
        //    var observer = new MutationObserver(callback);
        //    observer.observe(element, config);
        //});
    } //end CRMForm

    function byteToMb(size) {
        if (isNaN(size)) {
            return "?";

        }
        var value = ((size / 1024) / 1024) * 10;
        return (Math.floor(value) / 10) + " MB";
    }
    function fileIsAllowed(file, allowedTypes, maxSize) {

        var sFileExtension = file.name.split('.')[file.name.split('.').length - 1].toLowerCase();
        for (var i = 0; i < allowedTypes.length; i++) {
            if (sFileExtension == allowedTypes[i].toLowerCase() && file.size <= maxSize) {
                return true;
            }
        }
        return false;
    }
    function jsMeansOfTransportationChange(domElemenet) {

        $("#standard-form-myJourney").hide();

        $("#CityContainer").hide();
        $("#TrainContainer").hide();
        $("#LineNoContainer").hide();
        $("#MunicipalitContainer").hide();

        var crmFormSelectedMeansOfTransportation = domElemenet.value;

        switch (crmFormSelectedMeansOfTransportation) {
            case "stadsbuss":
                $("#CityContainer").show();
                $("#LineNoContainer").show();

                break;

            case "regionbuss":
                $("#LineNoContainer").show();

                break;

            case "train":
                $("#TrainContainer").show();

                break;
            case "narTrafic":
                $("#MunicipalitContainer").show();

                break;
            case "mobilityService":
                $("#MunicipalitContainer").show();

                break;

            default:

                return;

        }

        $("#standard-form-myJourney").show();
        $("#submit-button-crmform").show();

        if (crmFormSelectedMeansOfTransportation == null) {
            $("#standard-form-myJourney").hide();
            $("#MeansOfTransportation option:selected").removeAttr("selected");
        } else {
            $("#standard-form-myJourney").show();
            $("#MeansOfTransportation").val(domElemenet.value);
        }
    }

}
var TravelWarrentyForm = function () {
    var warrentyService = {
        nextButtonClick: nextButtonClick,
        prevoiusButtonClick: prevoiusButtonClick,
        cancelButtonClick: cancelButtonClick,
        init: init
    };

    var IsAppTicketValidated = false;
    let IsNyaSkanekortetValidated = false;
    let IsNyaSkanekortetValidatedNumber = "";

    return warrentyService;


    function CheckTicket1To3IsChecked() {
        return ($("#CheckTicket1").is(':checked') || $("#CheckTicket2").is(':checked') || $("#CheckTicket3").is(':checked'))
    }

    function DisableIsOtherTicket() {
        if ($("#IsOtherTicket").is(':checked')) {
            $("#IsOtherTicket").prop('checked', false);
            ClearOtherTicketFields();
            $("#divOtherTicket").toggle();
        }
        $("#divOtherTicketCheckBox").hide();
    }

    function getRecaptchaToken(form) {
        let key = $("#SiteKeyHidden").val()
        grecaptcha.ready(function () {
            grecaptcha.execute(key, { action: 'AuthenticateToken' }).then(function (token) {
                $("#StepSixModel_RecaptchaToken").val(token);
                form.submit();
            });
        });
    }
    function cancelButtonClick(e) {
        var url = window.location.pathname;
        $.post(url + "ClearSession?clearBlob=True");
        window.location.href = $("#cancelRedirectTo").val();
    }

    function nextButtonClick(e) {
        //debugger;
        var currentStep = parseInt($("#currentStep").val());
        var $form = $("#TravleWarrentyFrom");
        var rgolContinueButton = $(".travel-warranty .continue");
        var hasError = false;

        $(rgolContinueButton).addClass("loading-animation");
        $(rgolContinueButton).prop("disabled", true);

        function stopClearAndSetRetval(theEvent, doDisable) {
            $(".travel-warranty .continue").removeClass("loading-animation");
            theEvent.stopImmediatePropagation();
            if (doDisable === true) {
                $(rgolContinueButton).prop("disabled", true);
            }
            else {
                $(rgolContinueButton).prop("disabled", false);
            }

            hasError = true;
        }



        if (currentStep == 1 && $("#PaperTicketNotFound").is(':visible')) {
            stopClearAndSetRetval(e);
            scrollAndFocusOnError($("#PaperTicketNotFound").attr("id"));
        }
        if (currentStep == 1 && $("#BlippaNotFound").is(':visible')) {

            stopClearAndSetRetval(e);
            scrollAndFocusOnError($("#BlippaNotFound").attr("id"));
        }

        if (currentStep == 2) {
            $("#SearchError").hide();
        }


        if (!hasError && currentStep == 2 && $("#divManualSearch").is(':visible') && $(".changemanualjourneysummary").length == 0) {
            $("#SearchManualError").show();
            addAriaDescribedByToInputAndShowError("ManualSearchSave", "ManualSearchSave-error");
            from = $("#FromManualSearch").val();
            to = $("#ToManualSearch").val();

            hasErrors = checkManualSearchSaveForErrors(from, to);
            stopClearAndSetRetval(e);
        }

        if (!hasError && currentStep == 2 && $("#divManualSearch").is(':visible') && $("#ManualSearchComment").val().length < 15) {
            $("#SearchManualCommentError").show();
            $('#ManualSearchComment').focus();
            addAriaDescribedByToInputAndShowError("ManualSearchComment", "SearchManualComment-error");
            toogleValidationOnManualErrors("ManualSearchComment", true);
            stopClearAndSetRetval(e);
        }

        if (!hasError && currentStep == 2 && $("#divStandardSearch").is(':visible') && $("#JourneyKey").val().length == 0) {
            $("#SearchError").show();

            stopClearAndSetRetval(e);
        }


        if (!hasError && currentStep == 2 && $("#divMultiSearch").is(':visible') && $(".multietisjourneysummary").length == 0 && $(".changemanualjourneysummary").length == 0) {
            $("#SearchEtisMultiError").show();

            stopClearAndSetRetval(e);
        }

        if (!hasError && currentStep == 2 && $("#divLocalService").is(':visible') && !LocalServiceIsValid()) {
            stopClearAndSetRetval(e);

        }


        if (hasError) {
            return false;
        }

        $(".step").show();
        if (currentStep == 6) {
            $('#formError .validation-summary-errors ul').empty();
            $('#FormError').hide();
            $(".step").hide();

            const validateCheckbox = (checkboxId, errorId) => {
                const isChecked = $(`#${checkboxId}`).is(":checked");

                if (!isChecked) {
                    addAriaDescribedByToInputAndShowError(checkboxId, $(errorId).attr("id"));
                    toogleValidationOnManualErrors(checkboxId, true);
                    toogleValidationClassOnInputOnManualErrors(checkboxId, false);
                    return false; // Indicate that consent is not accepted
                } else {
                    $(errorId).hide();
                    toogleValidationOnManualErrors(checkboxId, false);
                    return true; // Indicate that consent is accepted
                }
            };

            const countAccepted = [
                validateCheckbox("StepSixModel_ConsentAccepted", "#StepSixModel_ConsentAccepted-error"),
                validateCheckbox("StepSixModel_AcceptPolicy", "#StepSixModel_AcceptPolicy-error"),
                validateCheckbox("StepSixModel_ApprovePersonalInfo", "#StepSixModel_ApprovePersonalInfo-error")
            ].filter(accepted => accepted).length;

            if (countAccepted !== 3) {
                scrollAndFocusOnError();
                stopClearAndSetRetval(e);

                $('span.single-error-text:visible').each(function () {
                    var errorMessage = $(this).text().trim();
                    if (errorMessage) {
                        $('#formError .validation-summary-errors ul').append($('<li>').text(errorMessage));
                    }
                });

                // Show the FormError div
                $('#FormError').show();
                return false;
            }
        }

        // TODO: rmv  && currentStep != 2
        if (!$form.valid()) {

            $("#formError").show();
            $("#FormError").show();


            if (currentStep === 3 || currentStep === 5) {
                updateAccessibilityAttributes();
            }

            scrollAndFocusOnError();
            stopClearAndSetRetval(e);


        }

        if (currentStep == 1 && $("#IsNyaSkanekortet").is(':checked')) {
            if (!IsNyaSkanekortetValidated) {

                if (!$("#NyaSkanekortetNr-error").is(":visible")) {
                    addAriaDescribedByToInputAndShowError("NyaSkanekortetNr", "NyaSkanekortetNotValidated");
                    $("#NyaSkanekortetNotValidated").html("Hämta kortuppgifter och välj en biljett på kortet innan du går vidare till nästa steg");
                    $(document).find(".validation-summary-errors ul").empty();
                    $('.validation-container h3').hide();
                    stopClearAndSetRetval(e);
                    $("#NyaSkanekortetNr").focus();
                    return false;
                }
            }
        }

        if (hasError) {
            return false;
        }

        if (currentStep != 6) {
            $form.submit();
        }
        else {
            getRecaptchaToken($form);
        }
        return true;
    }

    function updateAccessibilityAttributes() {
        var errorContainers = $(".field-validation-error");
        errorContainers.each(function () {
            let spanId = $(this).find("span").attr("id");
            let inputId = spanId.replace("-error", "");
            let inputElement = $("#" + inputId);

            inputElement.attr({
                "aria-describedby": spanId,
                "aria-invalid": "true"
            });

        });
    }


    function wrapValidationErrorsWithInnerSpan() {
        $('span.field-validation-error').each(function () {
            var errorMessage = $(this).text();
            var valMsgFor = $(this).data('valmsg-for');

            var id = valMsgFor.replace(/\./g, '_') + '-error';

            var innerSpan = $('<span>', {
                id: id,
                'class': ''
            });

            innerSpan.text(errorMessage);

            $(this).html(innerSpan);
        });
    }


    function scrollAndFocusOnError(spanErrorElement = '') {
        setTimeout(() => {
            const errors = $('.field-validation-error:visible');
        if (errors.length > 0) {
            let firstError = errors.first();
            $('html,body').animate({ scrollTop: firstError.offset().top - 215 }, 'slow');

            if (spanErrorElement === '') {
                if (currentStep == 1 && $('#PaymentMethodValid.input-validation-error:hidden').length > 0)
                    $('.paymentType').first().focus();
                else if (currentStep == 3 && $('#CostSelectionValid.input-validation-error:hidden').length > 0)
                    $('#costSelection').first().focus();
                else if (currentStep == 5 && $('#CompensationSelectionValid.input-validation-error:hidden').length > 0)
                    $('#compensationSelection').first().focus();
                else
                    $('.input-validation-error:visible').first().focus();
            }

            else {
                var inputElement = $('input[aria-describedby*="' + spanErrorElement + '"]');
                inputElement.focus();
            }

        }
        $(".paymentType").change(function () {
            $(document).find(".validation-summary-errors ul").empty();
            $('.validation-container h3').hide();
        });
        }, "0");


    }

    function prevoiusButtonClick() {
        $("#direction").val("prevStep");
        $("#direction").closest("form").validate().settings.ignore = "*";

        $("#TravleWarrentyFrom").submit();
    }

    function setJourneyValues(id) {

        var source = $("#jsonResultFindTrip").data();
        $.each(source, function (idx, item) {
            if (item.Id === id) {
                copyItemToFields(item);
            }
        });
    }

    function setJourneyValuesStandardSearch(id) {
        var source = $("#jsonResultFindTrip").data();

        $.each(source, function (idx, item) {
            if (item.Id === id) {
                copyItemToFieldsStandardSearch(item);
            }
        });
    }

    function copyItemToFields(item) {
        $("#LineName").val(item.LineName);
        $("#LineNo").val(item.LineNo);
        $("#LineRunNo").val(item.LineRunNo);
        $("#LineTypeId").val(item.LineTypeId);
        $("#LineTypeName").val(item.LineTypeName);
        $("#LineTrainNo").val(item.LineTrainNo);
        $("#LineTowards").val(item.LineTowards);
        $("#LineOperatorId").val(item.LineOperatorId);
        $("#LineOperatorname").val(item.LineOperatorName);
        $("#JourneyPriceAdult").val(item.JourneyPriceAdult);
        $("#JourneyPriceChild").val(item.JourneyPriceChild);
        $("#TravelWith").val(item.TravelWith);

        $("#ArrivalDateTime").val(item.ArrivalDateTime);
        $("#DepartDateTime").val(item.DepartureDateTime);
    }

    function copyItemToFieldsStandardSearch(item) {
        $("#JourneyPriceAdult").val(item.JourneyPriceAdult);
        $("#JourneyPriceChild").val(item.JourneyPriceChild);
        $("#JourneyPriceFamily").val(item.JourneyPriceFamily);
        $("#JourneyJojoAdult").val(item.JourneyJojoAdult);
        $("#JourneyJojoChild").val(item.JourneyJojoChild);
        $("#JourneyJojoFamily").val(item.JourneyJojoFamily);
        $("#JourneySMSAdult").val(item.JourneySMSAdult);
        $("#JourneySMSChild").val(item.JourneySMSChild);
        $("#JourneySMSFamily").val(item.JourneySMSFamily);
        $("#TravelWith").val(item.TravelWith);
        $("#Guaranteed").val(item.Guaranteed);
        $("#Changes").val(item.Changes);
        $("#RouteLinks").val(JSON.stringify(item.RouteLinks));
        $("#RouteLinks").data(item.RouteLinks);
        $("#RouteLinksStr").data(item.RouteLinksStr);
        $("#ArrivalDateTime").val(item.ArrivalDateTime);
        $("#DepartDateTime").val(item.DepartureDateTime.replace(",", ""));
        $("#JourneyKey").val(item.Id);
        $("#PriceZoneList").val(item.PriceZoneList);
        $("#PriceZoneNamesList").val(item.PriceZoneNamesList);
    }

    function dateFromISO8601(isoDateString) {
        var parts = isoDateString.match(/\d+/g);
        //var isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3] - 2, parts[4], parts[5]);
        var isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]);
        var isoDate = new Date(isoTime);
        return isoDate;
    }

    function searchJourneysStandardSearch(params) {

        var baseUrl = "/handlers/LocationSearch.ashx";
        var searchDate = new Date(params.searchTime.substring(0, 10).replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        var minDate = new Date(params.minDate.substring(0, 10).replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        var maxDate = new Date(params.maxDate.substring(0, 10).replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        $.ajax({
            url: baseUrl,
            cache: false,
            data: params,
            type: "POST",
            success: function (resultData) {

                if (resultData.length < 1) {
                    if (searchDate <= minDate || searchDate >= maxDate) {
                        $("#no-result-panel-range").removeClass("st-hidden").addClass("st-visible");
                    }
                    else {
                        $("#no-result-panel").removeClass("st-hidden").addClass("st-visible");
                    }

                    $("#warrenty-search-result-wrapper").removeClass("st-visible").addClass("st-hidden");
                }
                else if (resultData.length == 1 && resultData[0].Id == "-1") {

                    $("#no-result-panel").removeClass("st-hidden").addClass("st-visible");
                    $("#warrenty-search-result-wrapper").removeClass("st-visible").addClass("st-hidden");
                }
                else {
                    $("#warrenty-search-result").loadTemplate($("#displayJourneys"), resultData);
                    $("#warrenty-search-result-wrapper").show();
                    $("#warrenty-search-result-wrapper").removeClass("st-hidden");
                    $("#no-result-panel").removeClass("st-visible").addClass("st-hidden");
                    $("#jsonResultFindTrip").data(resultData);
                    $("html, body").animate({ scrollTop: $("#warrenty-search-result-wrapper").offset().top - 30 }, 1000);

                    var options = $(".travel-warranty input[name='routeKeyStandard']");
                    if (options.length > 0 && params.scrollType == "") {
                        var pos = Math.floor(options.length / 2);
                        options.eq(pos).attr("checked", "checked");
                        setJourneyValuesStandardSearch(options.eq(pos).val());
                    }
                    else {
                        options.each(function (index) {
                            if (options.eq(index).val() == $("#JourneyKey").val()) {
                                options.eq(index).attr("checked", "checked");
                                setJourneyValuesStandardSearch(options.eq(index).val());
                            }
                        });

                    }

                    $(".scroll-search-result.up").show();
                    $(".scroll-search-result.down").show();
                    if ($(".departuredatetime").length < 3) {
                        if (params.scrollType == "before") {
                            $(".scroll-search-result.up").hide();
                        }
                        else if (params.scrollType == "after") {
                            $(".scroll-search-result.down").hide();
                        }
                        else {
                            if (searchDate <= minDate) {
                                $(".scroll-search-result.up").hide();
                            }
                            else if (searchDate >= maxDate) {
                                $(".scroll-search-result.down").hide();
                            }
                        }

                    }
                }

                $(".spinner").remove();
                $("#searchTravelWarrenty").removeClass("loading-animation");
                $("#searchTravelWarrenty").removeAttr("style");
            },
            error: function (response, status, error) {
                console.log(response);
                console.log(status);
                console.log(error);

                $(".spinner").remove();
                $("#searchTravelWarrenty").removeClass("loading-animation");
                $("#searchTravelWarrenty").removeAttr("style");
            }
        });


    };


    function searchJourneysMultiSearch(params) {

        var baseUrl = "/handlers/LocationSearch.ashx";
        var searchDate = new Date(params.searchTime.substring(0, 10).replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        var minDate = new Date(params.minDate.substring(0, 10).replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        var maxDate = new Date(params.maxDate.substring(0, 10).replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        $.ajax({
            url: baseUrl,
            cache: false,
            data: params,
            type: "POST",
            success: function (resultData) {
                if (resultData.length < 1) {
                    $("#no-result-panel-multi").removeClass("st-hidden").addClass("st-visible");

                    $("#warrenty-search-result-wrapper-multi").removeClass("st-visible").addClass("st-hidden");
                }
                else if (resultData.length == 1 && resultData[0].Id == "-1") {

                    $("#no-result-panel-multi").removeClass("st-hidden").addClass("st-visible");
                    $("#warrenty-search-result-wrapper-multi").removeClass("st-visible").addClass("st-hidden");
                }
                else {
                    $("#warrenty-search-result-multi").loadTemplate($("#displayJourneysMulti"), resultData);
                    $("#warrenty-search-result-multi").removeClass("st-hidden");
                    $("#warrenty-search-result-wrapper-multi").show();
                    $("#warrenty-search-result-wrapper-multi").removeClass("st-hidden");
                    $("#no-result-panel-multi").removeClass("st-visible").addClass("st-hidden");
                    $("#jsonResultFindTrip").data(resultData);
                    $("html, body").animate({ scrollTop: $("#warrenty-search-result-wrapper-multi").offset().top - 30 }, 1000);

                    var options = $("#warrenty-search-result-multi input[name='routeKeyMulti']");
                    if (options.length > 0 && params.scrollType == "") {
                        var pos = Math.floor(options.length / 2);
                        options.eq(pos).attr("checked", "checked");
                        setJourneyValuesStandardSearch(options.eq(pos).val());
                    }
                    else {
                        options.each(function (index) {
                            if (options.eq(index).val() == $("#JourneyKey").val()) {
                                options.eq(index).attr("checked", "checked");
                                setJourneyValuesStandardSearch(options.eq(index).val());
                            }
                        });

                    }

                    $(".scroll-search-result.up").show();
                    $(".scroll-search-result.down").show();
                    if ($(".departuredatetime").length < 3) {
                        if (params.scrollType == "before") {
                            $(".scroll-search-result.up").hide();
                        }
                        else if (params.scrollType == "after") {
                            $(".scroll-search-result.down").hide();
                        }
                        else {
                            if (searchDate <= minDate) {
                                $(".scroll-search-result.up").hide();
                            }
                            else if (searchDate >= maxDate) {
                                $(".scroll-search-result.down").hide();
                            }
                        }

                    }
                }

                $(".spinner").remove();
                $("#searchTravelWarrenty").removeClass("loading-animation");
                $("#searchTravelWarrenty").removeAttr("style");
            },
            error: function (response, status, error) {
                console.log(response);
                console.log(status);
                console.log(error);

                $(".spinner").remove();
                $("#searchTravelWarrenty").removeClass("loading-animation");
                $("#searchTravelWarrenty").removeAttr("style");
            }
        });


    };
    function parseTime(time) {
        var newTime = time.split(':');
        hours = newTime[0];
        minutes = newTime[1];
        ++minutes;
        if (minutes == 60) {
            minutes = 0;
            ++hours;
            if (hours == 24) {
                hours = 0;
            }
        }
        if (hours.toString().length < 2) hours = "0" + hours;
        if (minutes.toString().length < 2) minutes = "0" + minutes;

        return newTime
    }

    function SetManualJourneyNextTime(time, realTime = '00:00') {
        var realTime = parseTime(realTime);
        var newTime = parseTime(time);

        $("#DepTimeOriginal").val(newTime[0] + ':' + newTime[1]);
        $("#DepTimeReal").val(realTime[0] + ':' + realTime[1]);
        $("#ArrTimeOriginal").val(newTime[0] + ':' + newTime[1] + 1);
        $("#ArrTimeReal").val(realTime[0] + ':' + realTime[1] + 1);

    }



    function SaveTravelWarrantyManualJourney(e) {

        if ($("#FromManualSearch").val().length == 0 || $("#ToManualSearch").val().length == 0) {
            $("#ManualSearchSave").find(".spinner").remove();
            e.stopImmediatePropagation();
            return false;
        }


        $.ajax({
            url: window.location.pathname + "/CreateManualJourney",
            type: 'GET',
            data: { MeanOfTransport: $("#MeansOfTransportManualSearch option:selected").val(), FromPointName: $("#FromManualSearch").val(), ToPointName: $("#ToManualSearch").val(), OriginalDepTime: $('#DepTimeOriginal').val(), RealDepTime: $('#DepTimeReal').val(), OriginalArrTime: $('#ArrTimeOriginal').val(), RealArrTime: $('#ArrTimeReal').val(), JourneyDateStart: $('#TravelDateStep2Start').val(), JourneyDateEnd: $('#TravelDateStep2End').val(), NoShowCheckBox: $('#NoShowCheckBox').is(":checked") },
            success: function (data) {

                $("#ManualSearchSave").find(".spinner").remove();

                $('<div/>', { id: data.Id }).loadTemplate($("#displayManualJourneys"), {
                    Index: data.Index,
                    ManualJourneyId: data.Id,
                    MeanOfTransport: $("#MeansOfTransportManualSearch option:selected").val(),
                    FromPointName: $("#FromManualSearch").val(),
                    ToPointName: $("#ToManualSearch").val(),
                    OriginalDepTime: $('#DepTimeOriginal').val(),
                    RealDepTime: $('#DepTimeReal').val(),
                    OriginalArrTime: $('#ArrTimeOriginal').val(),
                    RealArrTime: $('#ArrTimeReal').val(),
                    JourneyDateStart: $('#TravelDateStep2Start').val(),
                    JourneyDateEnd: $('#TravelDateStep2End').val(),
                    NoShowCheckBoxValue: ($('#NoShowCheckBox').is(":checked")) ? "Ja" : "Nej",
                    NoShowCheckBoxHiddenValue: ($('#NoShowCheckBox').is(":checked")) ? true : false,
                }).appendTo("#ChangeManualJourneySummary");

                var realtimeSection = $('#' + data.Id).find('#realTimeSummarSection');

                if ($('#NoShowCheckBox').is(":checked")) {
                    realtimeSection.hide();
                    $('#NoShowCheckBox').prop('checked', false);
                }
                else
                    realtimeSection.show();


                var option = '';
                for (var i = 0; i < data.NextDatesValues.length; i++) {
                    option += '<option value="' + data.NextDatesValues[i] + '">' + data.NextDatesText[i] + '</option>';
                }
                $("#TravelDateStep2Start").empty();
                $("#TravelDateStep2End").empty();
                $('#TravelDateStep2Start').append(option);
                $('#TravelDateStep2End').append(option);

                var index = $("#" + data.Id).find(".index").text();
                var changemanualHeader = $("#" + data.Id).find(".changemanualheader");
                var journeyTitle = $("#" + data.Id).find(".changemanualjourneytitel");
                changemanualHeader.text($("#hfChoosenManualJourneyTitleStr").val() + " " + index);
                journeyTitle.html($("#hfChangeManualJourneyTitleStr").val() + " " + index + " " + "<span class='red-arrow down'></span>");

                $("#MeansOfTransportManualSearch").prop('selectedIndex', 0)

                $("#ToManualSearch").val("");
                $("#FromManualSearch").val("");


                $("body").find(".editManualJourney").parent().remove();
                $("body").find(".changemanualjourneytitel").each(function (index) {
                    $(this).html($("#hfChangeManualJourneyTitleStr").val() + " " + (index + 1) + " " + "<span class='red-arrow down'></span>");
                });

                SetManualJourneyNextTime($('#ArrTimeOriginal').val(), $('#ArrTimeReal').val());
                removeAriaDescribedBy('ManualSearchSave');

                $("#MeansOfTransportManualSearch").focus();
                $("#LocalNoShowFalse").prop("checked", true);
                $('#selectRealTime').show();

            },
            error: function (data, status, error) {

                $("#ManualSearchSave").find(".spinner").remove();
            }
        });



    }

    function searchJourneys(params) {

        var baseUrl = "/handlers/LocationSearch.ashx";
        var baseUrl = "/handlers/LocationSearch.ashx";

        $.ajax({
            url: baseUrl,
            cache: false,
            data: params,
            type: "POST",
            success: function (resultData) {

                if (resultData.length < 1) {
                    $("#no-result-panel").removeClass("st-hidden").addClass("st-visible");
                    $("#warrenty-search-result-wrapper").removeClass("st-visible").addClass("st-hidden");
                }
                else {
                    $("#warrenty-search-result").loadTemplate($("#displayJourneys"), resultData);
                    $("#warrenty-search-result-wrapper").removeClass("st-hidden");
                    $("#no-result-panel").removeClass("st-visible").addClass("st-hidden");
                    $("#jsonResultFindTrip").data(resultData);

                    $("html, body").animate({ scrollTop: $("#warrenty-search-result-wrapper").offset().top - 30 }, 1000);

                    var options = $(".travel-warranty input[name='routeKey']");
                    if (options.length > 0) {

                        var pos = Math.floor(options.length / 2);
                        options.eq(pos).attr("checked", "checked");
                        setJourneyValues(options.eq(pos).val());
                    }
                }

                $(".spinner").remove();
                $("#searchTravelWarrenty").removeClass("loading-animation");
                $("#searchTravelWarrenty").removeAttr("style");
            },
            error: function (response, status, error) {
                console.log(response);
                console.log(status);
                console.log(error);

                $(".spinner").remove();
                $("#searchTravelWarrenty").removeClass("loading-animation");
                $("#searchTravelWarrenty").removeAttr("style");
            }
        });

    };

    function SetFieldsMaxLength() {
        $("#JourneyRegNr").attr('maxlength', '9');
        $("#TaxiJourneyCost").attr('maxlength', '4');
        $("#JourneyLength").attr('maxlength', '3');
        $("#ExtraCostValue1").attr('maxlength', '4');
        $("#ExtraCostValue2").attr('maxlength', '4');
        $("#ExtraCostValue3").attr('maxlength', '4');
        $("#AppTicketNr2").attr('maxlength', '10');

        $("#JOJOCrdNr").attr('maxlength', '10');
        $("#JOJOControlValCode").attr('maxlength', '4');
        $("#JOJOCrdNr2").attr('maxlength', '10');
        $("#JOJOControlValCode2").attr('maxlength', '4');
        $("#LocalServiceText").attr('maxlength', '2000');
        $("#ManualSearchComment").attr('maxlength', '2000');
        $("#OtherTicketText").attr('maxlength', '2000');
        $("#SocialSecurityNumber").attr('maxlength', '13');
        $("#ZipCode").attr('maxlength', '9');

    }

    function CheckJojoButton1() {
        HideError(true);
        $("#JojoDuplicateCard").hide();
        $("#JojoDuplicateCard2").hide();
        $("#JojoCrdNotFound").hide();
        if ($("#JOJOCrdNr").val().length == 10 && $("#JOJOControlValCode").val().length == 4) {
            if (($("#JOJOCrdNr2").val() == $("#JOJOCrdNr").val()) && ($("#JOJOControlValCode2").val() == $("#JOJOControlValCode").val())) {
                $("#btnjojocard1").prop('disabled', true);
                $("#JojoDuplicateCard").show();
            } else {
                if ($("#JOJOCrdNrDD2").val() == $("#JOJOCrdNr").val()) {
                    $("#btnjojocard1").prop('disabled', true);
                    $("#JojoDuplicateCard").show();
                }
                else {
                    $("#btnjojocard1").prop('disabled', false);
                }
            }
        }
        else {
            $("#btnjojocard1").prop('disabled', true);
            if ($("#JOJOCrdNrDD").is(":visible")) {
                if ($("#JOJOCrdNrDD option:selected").val().length > 0) {
                    $("#btnjojocard1").prop('disabled', false);
                }

                if ($("#JOJOCrdNrDD2 option:selected").val().length > 0 && ($("#JOJOCrdNrDD2").val() == $("#JOJOCrdNr").val() || $("#JOJOCrdNrDD2").val() == $("#JOJOCrdNrDD").val())) {
                    $("#btnjojocard1").prop('disabled', true);
                    $("#JojoDuplicateCard").show();
                }
            }
        }
    }

    function CheckNewSkaneCardButton() {
        HideError(true);

        if ($("#NyaSkanekortetNr").val().length == 12) {
            $("#btnnewskacard").prop('disabled', false);
        }
        else {
            if ($("#NyaSkanekortetNr").val().length === 0 && !IsAppTicketValidated) {
                DisableIsOtherTicket();
            }
            else {
                $("#btnnewskacard").prop('disabled', true);
            }
        }

    }

    function LocalServiceIsValid() {
        //HideError(true);

        //if ($("#localTripNoShowFalse").is(':checked') &&
        //    $("#LocalDepTimeOriginal").val() !== ""
        //    && $("#LocalDepTimeReal").val() !== "" &&
        //    $("#LocalDepTimeOriginal").val() >= $("#LocalDepTimeReal").val()
        //    && $("#TravelDateLocalServiceStep2Original").val() >= $("#TravelDateLocalServiceStep2Real").val()
        //    ) {
        //    addAriaDescribedByToInputAndShowError("LocalDepTimeReal", "LocalRealBeforeOriginalTimeError");
        //    addAriaDescribedByToInputAndShowError("LocalDepTimeOriginal", "LocalRealBeforeOriginalTimeError");
        //    $("#LocalDepTimeReal").focus();
        //    return false
        //}


        return true

    }

    function CheckJojoButton2() {
        HideError(true);
        $("#JojoDuplicateCard").hide();
        $("#JojoDuplicateCard2").hide();
        $("#JojoCrdNotFound2").hide();
        if ($("#JOJOCrdNr2").val().length == 10 && $("#JOJOControlValCode2").val().length == 4) {
            if (($("#JOJOCrdNr2").val() == $("#JOJOCrdNr").val()) && ($("#JOJOControlValCode2").val() == $("#JOJOControlValCode").val())) {
                $("#btnjojocard2").prop('disabled', true);
                $("#JojoDuplicateCard2").show();

            }
            else {
                if ($("#JOJOCrdNrDD").val() == $("#JOJOCrdNr2").val()) {
                    $("#btnjojocard2").prop('disabled', true);
                    $("#JojoDuplicateCard2").show();
                }
                else {
                    $("#btnjojocard2").prop('disabled', false);
                }

            }
        }
        else {
            $("#btnjojocard2").prop('disabled', true);
            if ($("#JOJOCrdNrDD2").is(":visible")) {
                if ($("#JOJOCrdNrDD2 option:selected").val().length > 0) {
                    $("#btnjojocard2").prop('disabled', false);
                }

                if ($("#JOJOCrdNrDD option:selected").val().length > 0 && ($("#JOJOCrdNrDD").val() == $("#JOJOCrdNr2").val() || $("#JOJOCrdNrDD2").val() == $("#JOJOCrdNrDD").val())) {
                    $("#btnjojocard2").prop('disabled', true);
                    $("#JojoDuplicateCard2").show();
                }
            }
        }
    }


    function SetTwoAppPayment() {
        $("#TwoAppPayment").prop('disabled', false);
        $("#TwoAppPayment").parent().removeClass("disabled");
        $("#TwoAppPayment").parent().next().removeClass("disabled");
        if ($("form .paymentType:checked").length == 2) {
            if (!$('#TwoAppPayment').is(':checked')) {
                $("#TwoAppPayment").prop("disabled", true);
                $("#TwoAppPayment").parent().addClass("disabled");
                $("#TwoAppPayment").parent().next().addClass("disabled");
            }
            else {
                $("#divApp2").show();
            }
        }
    }

    function SetTwoCardPayment() {
        $("#TwoCardPayment").prop('disabled', false);
        $("#TwoCardPayment").parent().removeClass("disabled");
        $("#TwoCardPayment").parent().next().removeClass("disabled");
        if ($("form .paymentType:checked").length == 2) {
            $("#TwoCardPayment").prop("disabled", true);
            $("#TwoCardPayment").parent().addClass("disabled");
            $("#TwoCardPayment").parent().next().addClass("disabled");
        }
    }

    function SearchNewSkaneCard() {
        $("#newcardticket1").hide();
        $("#newcardticket2").hide();
        $("#newcardticket3").hide();
        $("#btnnewskacard").find(".spinner").remove();
        $(document).find(".validation-summary-errors ul").empty();
        $('.validation-container h3').hide();
        $("#NyaSkanekortetTicket1").val("");
        $("#NyaSkanekortetTicket2").val("");
        $("#NyaSkanekortetTicket3").val("");
        $("#CheckTicket1").prop('checked', false);
        $("#CheckTicket2").prop('checked', false);
        $("#CheckTicket3").prop('checked', false);
        $("#btnnewskacard").addClass("loading-animation");
        HideError(true)

        $("#NewCardChooseCard").hide();
        $("#hfNyaSkanekortetTicketId1HF").val("");
        $("#hfNyaSkanekortetTicketId2HF").val("");
        $("#hfNyaSkanekortetTicketId3HF").val("");
        $("#ticketType1").val("");
        $("#ticketType2").val("");
        $("#ticketType3").val("");

        $.ajax({
            contentType: "application/json",
            url: "/handlers/RGOLUtility.ashx",
            data: {
                action: "GetNewSkaneCard",
                NewSkaneCard: $("#NyaSkanekortetNr").val(),
                NewSkaneCardDate: $("#TravelDateStep1").val()
            },
            success: function (resultData) {
                if (resultData.EvaluationStatus == 1) {
                    var obj = resultData.Tickets;
                    var count = 0;

                    IsNyaSkanekortetValidated = true;
                    IsNyaSkanekortetValidatedNumber = $("#NyaSkanekortetNr").val();

                    if (jQuery.isEmptyObject(obj)) {
                        $("#NyaSkanekortetNoTicketsFound").html("Inga biljetter hittade på angivet datum");
                        addAriaDescribedByToInputAndShowError("NyaSkanekortetNr", "NyaSkanekortetNoTicketsFound");
                        IsNyaSkanekortetValidated = false;
                        $("#NyaSkanekortetNr").focus();
                    }

                    $.each(obj, function (key, value) {
                        count++;
                        if (count === 1) {
                            $("#ticketType1").text(value.TicketType);
                            $("#hfNyaSkanekortetTicketId1HF").val(value.TicketId);
                            $("#newcardticket1").show();
                            $('#hiddenInputticketType1').val(value.TicketType);
                        }
                        else if (count === 2) {
                            $("#ticketType2").text(value.TicketType);
                            $("#hfNyaSkanekortetTicketId2HF").val(value.TicketId);
                            $("#newcardticket2").show();
                            $('#hiddenInputticketType2').val(value.TicketType);
                        }
                        else if (count === 3) {
                            $("#ticketType3").text(value.TicketType);
                            $("#hfNyaSkanekortetTicketId3HF").val(value.TicketId);
                            $("#newcardticket3").show();
                            $('#hiddenInputticketType3').val(value.TicketType);
                        }
                    }

                    );

                    if (count === 1) {
                        //Activate ticket if only one on card
                        $('#CheckTicket1').prop('checked', true);
                    }

                }
                else {
                    $("#NyaSkanekortetNotFound").html("Kortnumret kunde inte hittas. Var god försök igen");
                    addAriaDescribedByToInputAndShowError("NyaSkanekortetNr", "NyaSkanekortetNotFound");
                    IsNyaSkanekortetValidated = false;
                    $("#NyaSkanekortetNr").focus();
                }
                $("#btnnewskacard").removeClass("loading-animation");
                $("#btnnewskacard").find(".spinner").remove();
            },
            error: function (data, status, error, resultData) {
                $("#btnnewskacard").find(".spinner").remove();
                $("#btnnewskacard").removeClass("loading-animation");
            }
        });



    }

    function ValidateBlippaTicket() {
        let ticketId = $("#BlippaTicketNr").val()

        $.ajax({
            url: "ValidateSingaporeTicket",
            dataType: "json",
            type: "POST",
            data: { 'ticketId': ticketId, 'travelDateStep1': $("#TravelDateStep1").val() },
            success: function (data) {
                if (data.isValid) {
                    $("#BlippaNotFound").hide();
                    IsAppTicketValidated = true;
                }
                else {

                    $("#BlippaNotFound").show();
                    $("#BlippaNotFound").html("Ingen giltig biljett funnen");



                    IsAppTicketValidated = false;
                };

            },
            error: function (xhr) {
                $(".error-list").empty();
                $("<h3>Ett fel inträffade</h3><p>Kontakta kundtjänst för mer information.</p>").appendTo(".error-list");
                IsAppTicketValidated = false;
            }
        });
    }

    function ValidatePaperTicket() {
        let ticketId = $("#PaperTicketNr").val()

        $.ajax({
            url: "ValidateSingaporeTicket",
            dataType: "json",
            type: "POST",
            data: { 'ticketId': ticketId, 'travelDateStep1': $("#TravelDateStep1").val() },
            success: function (data) {
                if (data.isValid) {
                    $("#PaperTicketNotFound").hide();
                    IsAppTicketValidated = true;
                }
                else {

                    $("#PaperTicketNotFound").show();
                    $("#PaperTicketNotFound").html("Ingen giltig biljett funnen");



                    IsAppTicketValidated = false;
                };

            },
            error: function (xhr) {
                $(".error-list").empty();
                $("<h3>Ett fel inträffade</h3><p>Kontakta kundtjänst för mer information.</p>").appendTo(".error-list");
                IsAppTicketValidated = false;
            }
        });
    }

    function SearchJOJO1() {
        $("#btnjojocard1").find(".spinner").remove();
        HideError(true);
        $("#divJojoCardType1").hide();
        $("#hfJojoValueCardTypeName").val("");
        $("#hfJojoValueCardTypeId").val("");
        $("#hfJojoPeriodCardTypeName").val("");
        $("#hfJojoPeriodCardTypeId").val("");
        $("#JojoCrdNotFound").hide();
        $("#hfJOJOCrdNr").val("");
        $("#btnjojocard1").addClass("loading-animation");

        if ($("#divTwoCardPayment").is(":visible")) {

            if (!$("#TwoCardPayment").is(":checked")) {
                $("#divTwoCardPayment").hide();
            }

        }

        $.ajax({
            contentType: "application/json",
            url: "/handlers/RGOLUtility.ashx",
            data: {
                action: "GetJojoCard1",
                JojoCard: $("#JOJOCrdNr").val(),
                JojoCvc: $("#JOJOControlValCode").val(),
                JojoCardDD: $("#JOJOCrdNrDD").val()
            },
            success: function (resultData) {
                $("#JojoCrdNotFound").hide();
                $("#chkJojoValueCard").prop('checked', false);
                $("#chkJojoPeriodCard").prop('checked', false);
                $("#divJojoCardType1").hide();
                if (resultData.CardName.length > 0) {
                    $("#lblCardName").text(resultData.CardName);
                }
                else {
                    $("#lblCardName").text(resultData.CardNumber);
                }
                $("#lblCardNumber").text(resultData.CardNumber);
                $("#hfJOJOCrdNr").val(resultData.CardNumber);
                $("#hfJojoValueCardTypeName").val(resultData.ValueCardTypeName);
                $("#hfJojoValueCardTypeId").val(resultData.ValueCardType);
                $("#hfJojoPeriodCardTypeName").val(resultData.PeriodCardTypeName);
                $("#hfJojoPeriodCardTypeId").val(resultData.PeriodCardType);
                if (resultData.ValueCardTypeName.length > 0) {
                    $("#divJojoCardType1").show();
                    $("#divJojoValueCard").show();
                    if (resultData.PeriodCardTypeName.length == 0) {
                        $("#chkJojoValueCard").prop('checked', true);
                        $("#divJojoPeriodCard").hide();
                        $("#divTwoCardPayment").show();
                        SetTwoCardPayment();
                    }
                    $("#lblJojoValueCard").text(resultData.ValueCardTypeName);
                }
                if (resultData.PeriodCardTypeName.length > 0) {

                    $("#divJojoCardType1").show();
                    $("#divJojoPeriodCard").show();
                    $("#divJojoValueCard").show();
                    if (resultData.ValueCardTypeName.length == 0) {
                        $("#chkJojoPeriodCard").prop('checked', true);
                        $("#divJojoValueCard").hide();
                        $("#divTwoCardPayment").show();
                        SetTwoCardPayment();

                    }
                    $("#lblJojoPeriodCard").text(resultData.PeriodCardTypeName);

                }
                $("#btnjojocard1").find(".spinner").remove();
                $("#btnjojocard1").removeClass("loading-animation");
                if (resultData.SuccessCardInfo == false) {
                    $("#divJojoCardType1").hide();
                    $("#JojoCrdNotFound").html(resultData.ErrMessage);
                    $("#JojoCrdNotFound").show();
                    $('html,body').animate({ scrollTop: $("#card1").offset().top }, 1000);
                }
                else {
                    $('html,body').animate({ scrollTop: $("#btnjojocard1").offset().top }, 1000);
                    $("#divJojoCardType1").show();
                }


            },
            error: function (data, status, error) {
                $("#btnjojocard1").find(".spinner").remove();
                $("#btnjojocard1").removeClass("loading-animation");
            }
        });
    }

    function SearchJOJO2() {
        $("#btnjojocard2").find(".spinner").remove();

        $("#divJojoCardType2").hide();
        $("#hfJojoValueCardTypeName2").val("");
        $("#hfJojoValueCardTypeId2").val("");
        $("#hfJojoPeriodCardTypeName2").val("");
        $("#hfJojoPeriodCardTypeId2").val("");
        $("#hfJOJOCrdNr2").val("");
        $("#JojoCrdNotFound2").hide();

        HideError(true);

        if ($("#divJojoCardType2").is(":hidden")) {
            $("#btnjojocard2").addClass("loading-animation");
        }

        $.ajax({
            contentType: "application/json",
            url: "/handlers/RGOLUtility.ashx",
            data: {
                action: "GetJojoCard2",
                JojoCard: $("#JOJOCrdNr2").val(),
                JojoCvc: $("#JOJOControlValCode2").val(),
                JojoCardDD: $("#JOJOCrdNrDD2").val()
            },
            success: function (resultData) {
                $("#JojoCrdNotFound2").hide();
                $("#chkJojoValueCard2").prop('checked', false);
                $("#chkJojoPeriodCard2").prop('checked', false);

                $("#divJojoCardType2").hide();
                if (resultData.CardName.length > 0) {
                    $("#lblCardName2").text(resultData.CardName);
                }
                else {
                    $("#lblCardName2").text(resultData.CardNumber);
                }

                $("#lblCardNumber2").text(resultData.CardNumber);
                $("#hfJOJOCrdNr2").val(resultData.CardNumber);

                $("#hfJojoValueCardTypeName2").val(resultData.ValueCardTypeName);
                $("#hfJojoValueCardTypeId2").val(resultData.ValueCardType);
                $("#hfJojoPeriodCardTypeName2").val(resultData.PeriodCardTypeName);
                $("#hfJojoPeriodCardTypeId2").val(resultData.PeriodCardType);
                if (resultData.ValueCardTypeName.length > 0) {
                    $("#divJojoCardType2").show();
                    $("#divJojoValueCard2").show();
                    if (resultData.PeriodCardTypeName.length == 0) {
                        $("#chkJojoValueCard2").prop('checked', true);
                        $("#divJojoPeriodCard2").hide();
                        $("#divTwoCardPayment").show();
                    }
                    $("#lblJojoValueCard2").text(resultData.ValueCardTypeName);
                }
                if (resultData.PeriodCardTypeName.length > 0) {

                    $("#divJojoCardType2").show();
                    $("#divJojoPeriodCard2").show();
                    $("#divJojoValueCard2").show();

                    if (resultData.ValueCardTypeName.length == 0) {
                        $("#chkJojoPeriodCard2").prop('checked', true);
                        $("#divJojoValueCard2").hide();
                        $("#divTwoCardPayment").show();
                    }
                    $("#lblJojoPeriodCard2").text(resultData.PeriodCardTypeName);
                }
                $('html,body').animate({ scrollTop: $("#divJojoCardType2").offset().top }, 1000);
                $("#btnjojocard2").find(".spinner").remove();
                $("#btnjojocard2").removeClass("loading-animation");
                if (resultData.SuccessCardInfo == false) {
                    $("#divJojoCardType2").hide();
                    $("#JojoCrdNotFound2").html(resultData.ErrMessage);
                    $("#JojoCrdNotFound2").show();
                    $('html,body').animate({ scrollTop: $("#card2").offset().top }, 1000);
                }
                else {
                    $('html,body').animate({ scrollTop: $("#divJojoCardType2").offset().top }, 1000);
                    $("#divJojoCardType2").show();
                }
            },
            error: function (data, status, error) {
                $("#btnjojocard2").find(".spinner").remove();
                $("#btnjojocard2").removeClass("loading-animation");
            }
        });
        $("#btnjojocard2").show();
    }

    function CheckPaymentType() {
        //$(".travel-warranty .continue").prop("disabled", false);

        //if ($("form .paymentType:checked").length == 0) {
        //    $(".travel-warranty .continue").prop("disabled", true);
        //}

        //if ($("form .paymentType:checked").length == 1 && $("#IsResPlusTicket").is(':checked')) {
        //    $(".travel-warranty .continue").prop("disabled", true);
        //}

        if ($("form .paymentType:checked").length == 2) {
            $("form .paymentType:unchecked").prop("disabled", true);
            $("form .paymentType:unchecked").parent().addClass("disabled");
            $("form .paymentType:unchecked").parent().next().addClass("disabled");
            if (!$('#TwoAppPayment').is(':checked')) {
                $("#TwoAppPayment").prop("disabled", true);
                $("#TwoAppPayment").parent().addClass("disabled");
                $("#TwoAppPayment").parent().next().addClass("disabled");
            }
            $("#TwoCardPayment").prop("disabled", true);
            $("#TwoCardPayment").parent().addClass("disabled");
            $("#TwoCardPayment").parent().next().addClass("disabled");

            //$("#IsOther").prop("disabled", true);
            //$("#IsOther").parent().addClass("disabled");
            //$("#IsOther").parent().next().addClass("disabled");

        }
        else {
            $("form .paymentType:unchecked").prop("disabled", false);
            $("form .paymentType:unchecked").parent().removeClass("disabled");
            $("form .paymentType:unchecked").parent().next().removeClass("disabled");
            $("#TwoAppPayment").prop("disabled", false);
            $("#TwoAppPayment").parent().removeClass("disabled");
            $("#TwoAppPayment").parent().next().removeClass("disabled");
            $("#TwoCardPayment").prop("disabled", false);
            $("#TwoCardPayment").parent().removeClass("disabled");
            $("#TwoCardPayment").parent().next().removeClass("disabled");

            $("#IsOther").prop("disabled", false);
            $("#IsOther").parent().removeClass("disabled");
            $("#IsOther").parent().next().removeClass("disabled");
        }

    }

    function CheckNewCardTicket() {
        $(".travel-warranty .continue").prop("disabled", false);

        if ($("form .newcardTicket:checked").length == 0) {
            $(".travel-warranty .continue").prop("disabled", true);
        }

        if ($("form .newcardTicket:checked").length == 1) {
            $(".travel-warranty .continue").prop("disabled", false);
        }

        if ($("form .newcardTicket:checked:checked").length == 2) {
            $("form .newcardTicket:unchecked").prop("disabled", true);
            $("form .newcardTicket:unchecked").parent().addClass("disabled");
            $("form .newcardTicket:unchecked").parent().next().addClass("disabled");

        }
        else {
            $("form .newcardTicket:unchecked").prop("disabled", false);
            $("form .newcardTicket:unchecked").parent().removeClass("disabled");
            $("form .newcardTicket:unchecked").parent().next().removeClass("disabled");

        }

    }

    function DisableUncheckedOptionsStep1(disable) {
        if (disable) {
            $("form .paymentType:unchecked").prop("disabled", true);
            $("form .paymentType:unchecked").parent().addClass("disabled");
            $("form .paymentType:unchecked").parent().next().addClass("disabled");
        }
        else {
            $("form .paymentType:unchecked").prop("disabled", false);
            $("form .paymentType:unchecked").parent().removeClass("disabled");
            $("form .paymentType:unchecked").parent().next().removeClass("disabled");
        }
    }

    function CheckJojo2() {

        if ($("#TwoCardPayment").is(":checked")) {
            return;
        }

        if ($("#chkJojoValueCard").is(":checked") || $("#chkJojoPeriodCard").is(":checked")) {
            if ($("#hfJOJOCrdNr2").val() == "") {
                $("#TwoCardPayment").prop('checked', false);
                $("#divTwoCardPayment").show();

            }
        }
        else {
            if ($("#hfJOJOCrdNr2").val() == "") {
                $("#divTwoCardPayment").hide();
                $("#card2").hide();
                $("#card1Search").show();
            }
        }
    }

    function InitJourneyManualTime() {

        $("#FromManualSearch").on('keyup blur change', function () {
            $("#ManualSearchSaveFromToErr").hide();
            $("#ManualSearchSaveFromToRegExErr").hide();
            toogleValidationOnManualErrors("FromManualSearch", false);
        });

        $("#ToManualSearch").on('keyup blur change', function (e) {
            $("#ManualSearchSaveToErr").hide();
            $("#ManualSearchSaveToRegExErr").hide();
            toogleValidationOnManualErrors("ToManualSearch", false);
        });

        $("#DepTimeOriginal").on('keyup blur change', function () {
            $("#ManualDepTimeOriginalErr").hide();
            toogleValidationOnManualErrors("DepTimeOriginal", false);
        });

        $("#ArrTimeOriginal").on('keyup blur change', function () {
            $("#ManualArrTimeOriginalErr").hide();
            $("#ManualSearchSaveOrgTimeErr").hide();
            toogleValidationOnManualErrors("ArrTimeOriginal", false);
        });

        $("#DepTimeReal").on('keyup blur change', function () {
            $("#ManualDepTimeRealErr").hide();
            toogleValidationOnManualErrors("DepTimeReal", false);

        });

        $("#ArrTimeReal").on('keyup blur change', function () {
            $("#ManualArrTimeRealErr").hide();
            $("#ManualSearchSaveTimeErr").hide();
            toogleValidationOnManualErrors("ArrTimeReal", false);
        });

        $("#NoShowCheckBox").change(function () {

            if ($(this).is(":checked")) {
                $("#ManualSearchSaveTimeErr").hide();
                $("#ManualDepTimeRealErr").hide();
                $("#ManualArrTimeRealErr").hide();
            }
        });

        $('#ChangeManualJourneySummary').on('change', '#NoShowCheckBoxEdit', function (e) {
            toogleValidationOnManualErrors("frompointnameedit", false);
        });


        $('#ChangeManualJourneySummary').on('keyup blur change', '.frompointnameedit', function (e) {
            $("body").find(".manualsearchsavefromtoerr").hide();
            $("body").find(".manualsearchsavefromtoregexerr").hide();
            toogleValidationOnManualErrors("frompointnameedit", false);
        });


        $('#ChangeManualJourneySummary').on('keyup blur change', '.frompointnameedit', function (e) {
            $("body").find(".manualsearchsavefromtoerr").hide();
            $("body").find(".manualsearchsavefromtoregexerr").hide();
            toogleValidationOnManualErrors("frompointnameedit", false);
        });

        $('#ChangeManualJourneySummary').on('keyup blur change', '.topointnameedit', function (e) {
            $("body").find(".manualsearchsavetoerr").hide();
            $("body").find(".manualsearchsavetoregexerr").hide();
            toogleValidationOnManualErrors("topointnameedit", false);
        });

        $('#ChangeManualJourneySummary').on('keyup blur change', '.originalarrtimeedit', function (e) {
            $("body").find(".manualarrtimeoriginalerr").hide();
            $("body").find(".manualsearchsaveorgtimeerr").hide();
            toogleValidationOnManualErrors("originalarrtimeedit", false);
        });

        $("body").on('keyup blur change', '.originaldeptimeedit', function (e) {
            $("body").find(".manualdeptimeoriginalerr").hide();
            toogleValidationOnManualErrors("originaldeptimeedit", false);
        });

        $('#ChangeManualJourneySummary').on('keyup blur change', '.realdeptimeedit', function (e) {
            $("body").find(".manualdeptimerealerr").hide();
            toogleValidationOnManualErrors("realdeptimeedit", false);
        });

        $('#ChangeManualJourneySummary').on('keyup blur change', '.realarrtimeedit', function (e) {
            $("body").find(".manualarrtimerealerr").hide();
            $("body").find(".manualsearchsavetimeerr").hide();
            toogleValidationOnManualErrors("realarrtimeedit", false);
        });

    }
    function HideError(HideFormError) {
        if ($("#currentStep").val() == 3) return;
        $("#JojoChooseCard").hide();
        $("#JojoChooseCard2").hide();
        $("#JojoChooseCardType").hide();
        $("#JojoChooseCardType2").hide();
        $("#MultiSearchSaveTimeErr").hide();
        $("#NyaSkanekortetNotFound").hide();
        $("#NyaSkanekortetNoTicketsFound").hide();
        $("#NyaSkanekortetNotValidated").hide();
        if (HideFormError) {
            $("#FormError").hide();
        }
        else {
            $("#FormError").show();

        }
        $("#ManualSearchSaveAmountErr").hide();
        $("#SearchError").hide();
        $("#SearchManualError").hide();
        $("#SearchManualCommentError").hide();
        $("#MunicipalitySelectionError").hide()
        $("#LocalDepTimeError").hide();
        $("#LocalDepRealTimeError").hide();
        $("#LocalRealBeforeOriginalTimeError").hide()
        $("#SearchEtisMultiError").hide();
        $("#SocialSecurityNumberError").hide();
        $("#CompensationTypeError").hide();
        $("#EmailError").hide();
        $("#CellError").hide();
        $("#Step4ValidatorMain").hide();
        $("#AppError").hide();
        $("#NewCardChooseCard").hide();

        $("#no-result-panel").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-range").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-same").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-multi").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-range-multi").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-same-multi").removeClass("st-visible").addClass("st-hidden");

    }

    function ScrollToFormError() {
        $("html, body").animate({ scrollTop: $("#FormError").offset().top - 250 }, 1000);
    }

    function InitCheckStep1() {

        var curStep = parseInt($("#currentStep").val());

        if (curStep == 1) {
            CheckPaymentType();
            if ($("#FormError").find("li").is(":visible")) {
                HideError(false);
                ScrollToFormError();
            }
            else {
                HideError(true);
            }

            if ($("#JOJOCrdNrDD option").length == 1) {
                $("#divJOJOCrdNrDD1").hide();
            }


            if ($("#JOJOCrdNrDD2 option").length == 1) {
                $("#divJOJOCrdNrDD2").hide();
            }
        }

        if ($("#IsAppTicket").is(':checked')) {
            var value = $("#AppType").val();
            if (value != "") {
                $("input[name=chooseappradio][value=" + value + "]").prop('checked', true);


            }
            else {
                $("#AppSingaporeTicketNr").val("");

            }
            InitAppTicketNumber(value, "");

            // Max two tickets allowed

            if (($("#AppTicketNr2").val() != "" && $("#AppPhoneNr2").val() != "") || ($("#AppPhoneNr2").val() != "" && $("#AppSingaporeTicketNr2").val() != "")) {
                $("#divTwoAppPayment").show();

                $("#TwoAppPayment").prop('checked', true);
                $("#divApp2").show();
                var value2 = $("#AppType2").val();
                if (value2 != "") {
                    $("input[name=chooseappradio2][value=" + value2 + "]").prop('checked', true);


                }
                else {
                    $("#AppSingaporeTicketNr2").val("");
                }
                InitAppTicketNumber(value2, "2");
                $(".appticketnr2").show();
                $("#AppTicketNr2").show();
            }
            else {
                $("#divTwoAppPayment").show();
                $("#TwoAppPayment").prop('checked', false);
            }

            SetTwoAppPayment();

        }

        InitNyaSkaneKortet();

        function CheckTwoAppPayment() {
            if (($("#AppTicketNr").val() != "" && $("#AppPhoneNr").val() != "") || ($("#AppPhoneNr").val() != "" && $("#AppSingaporeTicketNr").val() != "")) {
                if (!$("#divTwoAppPayment").is(":visible")) {
                    $("#divTwoAppPayment").show();
                    SetTwoAppPayment();
                }
            }
            else {
                if (!$("#TwoAppPayment").is(":checked")) {
                    $("#divTwoAppPayment").hide();
                }
            }
        }

        function ValidateSingapooreTicket() {
            let ticketId = $("#AppTicketNr").val()

            $.ajax({
                url: "ValidateSingaporeTicket",
                dataType: "json",
                type: "POST",
                data: { 'ticketId': ticketId, 'travelDateStep1': $("#TravelDateStep1").val() },
                success: function (data) {
                    if (data.isValid) {
                        $("#divOtherTicketCheckBox").show();
                        $("#SingaporeTicketError").hide();
                        IsAppTicketValidated = true;
                    }
                    else {
                        if ($('#FormError .validation-container h3').is(":hidden")) {
                            $("#SingaporeTicketError").show();
                            $("#SingaporeTicketErrorMessage").text(data.errorMessage);
                        }
                        DisableIsOtherTicket();
                        IsAppTicketValidated = false;
                    };

                },
                error: function (xhr) {
                    $(".error-list").empty();
                    $("<h3>Ett fel inträffade</h3><p>Kontakta kundtjänst för mer information.</p>").appendTo(".error-list");
                    IsAppTicketValidated = false;
                }
            });
        }

        function InitNyaSkaneKortet() {

            //WHen coming back from "Tillbaka" we don't to force user to validate again. 
            var inputValue = $("#NyaSkanekortetNr").val();

            if (typeof inputValue !== 'undefined') {

                if (inputValue !== "" && inputValue.length === 12) {
                    IsNyaSkanekortetValidatedNumber = $("#NyaSkanekortetNr").val();
                    IsNyaSkanekortetValidated = true;
                }
            }
        }


        $('body').on('keydown', '#AppTicketNr', function (e) {
            CheckTwoAppPayment();
        });

        $("#AppTicketNr").on('change', function () {
            CheckTwoAppPayment();
        });

        $("#TravelDateStep1").on('change', function () {
            if ($("#AppTicketNr").val().length > 6) {
                ValidateSingapooreTicket();
            }
        });

        $("#AppTicketNr").on('keyup mouseup', function () {
            if ($("#AppTicketNr").val().length === 0 && !CheckTicket1To3IsChecked) {
                DisableIsOtherTicket();
            }
            CheckTwoAppPayment();
        });

        $("#AppTicketNr").on('focusout', function () {
            if ($("#AppTicketNr").val().length > 6) {
                ValidateSingapooreTicket();
            }
        });

        $('body').on('keydown', '#AppPhoneNr', function (e) {
            CheckTwoAppPayment();
        });

        $("#AppPhoneNr").on('change', function () {
            CheckTwoAppPayment();
        });

        $("#AppPhoneNr").on('keyup mouseup', function () {
            CheckTwoAppPayment();
        });

        $('body').on('keydown', '#AppSingaporeTicketNr', function (e) {
            CheckTwoAppPayment();
        });

        $("#AppSingaporeTicketNr").on('change', function () {
            CheckTwoAppPayment();
        });

        $("#AppSingaporeTicketNr").on('keyup mouseup', function () {
            CheckTwoAppPayment();
        });



        $("#TwoAppPayment").on("change", function () {
            $("#divApp2").toggle();
            if ($("#TwoAppPayment").is(":checked")) {
                DisableUncheckedOptionsStep1(true); // Max 2 tickets
            }
            else {
                DisableUncheckedOptionsStep1(false);
            }
            if (!$("#divApp2").is(":visible")) {
                $("#AppPhoneNr2").val("");
                $("#AppTicketNr2").val("");
                $("#AppSingaporeTicketNr2").val("");
                //$("#AppTicketNr2").hide();
                $("#AppType2").val("");

            }

        });

        if (curStep == 1) {
            if ($('input[type=radio][name=chooseappradio2]:checked').length == 0) {
                $("#AppSingaporeTicketNr2").val("");
                $(".appsingaporeticketnr2").hide();
                //$("#AppTicketNr2").val("");
            }
        }

        if (curStep == 1 && $("form .paymentType:checked").length == 0 && $("#IsResPlusTicket").is(':checked')) {
            $(".travel-warranty .continue").prop("disabled", true);
        }

        if (curStep == 1 && $("#hfJOJOCrdNr").val() != "") {

            if ($("#JOJOCrdNrDD option:contains(" + $("#hfJOJOCrdNr").val() + ")").length > 0) {
                $("#JOJOCrdNrDD option:contains(" + $("#hfJOJOCrdNr").val() + ")").attr('selected', 'selected');
                $("#JOJOCrdNrDD").val($("#hfJOJOCrdNr").val());
            }
            else {
                $("select#JOJOCrdNrDD").prop('selectedIndex', 0);
            }
            $("#lblCardNumber").text($("#hfJOJOCrdNr").val());
            $("#divJojoCardType1").show();
            $("#chkJojoValueCard").hide();
            $("#chkJojoPeriodCard").hide();
            $("#divTwoCardPayment").show();
            $("#divJojoValueCard").hide();
            $("#divJojoPeriodCard").hide();
            $("#divJojoValueCard2").hide();
            $("#divJojoPeriodCard2").hide();

            if ($("#hfJojoPeriodCardTypeName").val() != "") {
                $("#lblJojoPeriodCard").text($("#hfJojoPeriodCardTypeName").val());
                $("#chkJojoPeriodCard").show();
                $("#divJojoPeriodCard").show();
            }

            if ($("#hfJojoValueCardTypeName").val() != "") {
                $("#lblJojoValueCard").text($("#hfJojoValueCardTypeName").val());
                $("#chkJojoValueCard").show();
                $("#divJojoValueCard").show();
            }

            if ($("#hfJOJOCrdNr2").val() != "") {
                if ($("#JOJOCrdNrDD2 option:contains(" + $("#hfJOJOCrdNr2").val() + ")").length > 0) {
                    $("#JOJOCrdNrDD2 option:contains(" + $("#hfJOJOCrdNr2").val() + ")").attr('selected', 'selected');
                    $("#JOJOCrdNrDD2").val($("#hfJOJOCrdNr2").val());
                }
                else {
                    $("select#JOJOCrdNrDD2").prop('selectedIndex', 0);
                }

                $("#lblCardNumber2").text($("#hfJOJOCrdNr2").val());
                $("#TwoCardPayment").prop('checked', true);
                $("#card2").show();
                $("#divJojoCardType2").show();

                if ($("#hfJojoPeriodCardTypeName2").val() != "") {
                    $("#lblJojoPeriodCard2").text($("#hfJojoPeriodCardTypeName2").val());
                    $("#chkJojoPeriodCard2").show();
                    $("#divJojoPeriodCard2").show();
                }

                if ($("#hfJojoValueCardTypeName2").val() != "") {
                    $("#lblJojoValueCard2").text($("#hfJojoValueCardTypeName2").val());
                    $("#chkJojoValueCard2").show();
                    $("#divJojoValueCard2").show();
                }



            }
        }

        DisableUncheckedOptionsStep1(false);

        if (curStep == 1 && $("form .paymentType:checked").length == 1 && ($("#TwoAppPayment").is(':checked') || $("#TwoCardPayment").is(':checked'))) {
            DisableUncheckedOptionsStep1(true);
        }

        if (curStep == 1 && $("form .paymentType:checked").length == 2) {
            DisableUncheckedOptionsStep1(true);
        }

    }

    function InitCheckStep6() {

        function handleConsentCheckboxChange(checkboxId, errorId) {
            $("#" + checkboxId).on("change", function () {
                if ($(this).is(":checked")) {
                    toogleValidationOnManualErrors(checkboxId, false);
                    removeAriaDescribedBy(checkboxId);
                    toogleValidationClassOnInputOnManualErrors(checkboxId, true)
                    $("#" + errorId).hide();
                }
            });
        }

        handleConsentCheckboxChange("StepSixModel_ConsentAccepted", "StepSixModel_ConsentAccepted-error");
        handleConsentCheckboxChange("StepSixModel_AcceptPolicy", "StepSixModel_AcceptPolicy-error");
        handleConsentCheckboxChange("StepSixModel_ApprovePersonalInfo", "StepSixModel_ApprovePersonalInfo-error");
    }

    function InitCheckStep2() {



        if (parseInt($("#currentStep").val()) == 2) {

            if ($("#IsMultiSearch").val() == "true") {
                var url = window.location.pathname;
                $.ajax({
                    url: url + "GetMultiJourney",
                    type: 'POST',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data.Result == "Empty") {
                            // No Data to show. 
                            $("#MultiSearchAddItem").detach().appendTo($("#MultiSearchNewItem"));
                            $("#MultiSearchAddItem").removeClass("st-hidden");
                            $("#MultiSearchNewItem").removeClass("st-hidden");
                            InitMultiSearchJourneyFields();
                        }
                        else {
                            var obj = data.Result;
                            var count = 0;
                            $.each(obj, function (key, value) {
                                count = count + 1;

                                $('<div/>', { id: value.Id }).loadTemplate($("#displayMultiJourneysSummary"), {
                                    multiIndex: value.Index,
                                    From: value.From,
                                    To: value.To,
                                    DepDate: value.DepDate,
                                    DepDateTime: value.DepDateTime,
                                    ArrDateTime: value.ArrDateTime
                                }).appendTo("#warrenty-search-result-multi-summary");
                            });

                            if (count < $("#hfMaxAmountEtisMulti").val()) {
                                $("#addMultiJourney").removeClass("st-hidden");
                                $("#MultiNewSearch").removeClass("st-hidden");
                            }
                            else {
                                $("#addMultiJourney").addClass("st-hidden");
                                $("#MultiNewSearch").addClass("st-hidden");
                            }
                        }
                    },
                    error: function (err) {

                    }
                });

                $("#divStandardSearch").hide();
                $("#divManualSearch").hide();
                $("#divMultiSearch").show();
                $("#divMultiSearch").show();
                $("#divLocalService").hide();


            }
            else {
                //debugger;
                SetManualJournetEndDate();
                if ($("#hfDeleyed").val().length > 0) {
                    $("#Deleyed option:contains(" + $("#hfDeleyed").val().replace(",", "") + ")").attr('selected', true);
                }
                $("#warrenty-search-result-wrapper").removeClass("st-visible").addClass("st-hidden");

                if ($("#JourneyKey").val().length > 0) {
                    SearchWarrantyStandard("", $("#DepartDateTime").val().replace(",", ""));
                    $("#no-result-panel").removeClass("st-visible").addClass("st-hidden");
                    $('#find-trip-form-warrenty-panel #searchTravelWarrenty').prop("disabled", false);
                }
                else if ($(".changemanualjourneysummary").length > 0) {
                    SetManualJourneyNextTime($(".originalarrTime").last().text());
                }
                else {
                    $("#TravelFromStandard").val("");
                    $("#TravelToStandard").val("");
                }
                CheckAmountManualSearch(10);
            }

        }

    }

    function InitCheckStep4() {

        if (parseInt($("#currentStep").val()) == 4 && $("#FormError").find("li").is(":visible")) {
            $("html, body").animate({ scrollTop: $("#LackSSN").offset().top }, 1000);
        }

    }

    function InitCheckStep3() {

        if (parseInt($("#currentStep").val()) == 3 && $("#FormError").find("li").is(":visible")) {
            if ($($("#FormError").find("li")[0]).text() == 0) {
                $(document).find(".validation-summary-errors ul").empty();
                $('.validation-container h3').hide();
            }

        }

    }

    function InitCheckStep5() {
        if (parseInt($("#currentStep").val()) == 5) {
            wrapValidationErrorsWithInnerSpan();
            updateAccessibilityAttributes();
        }
    }

    function SetManualJournetEndDate(SelectFrom) {
        $("#TravelDateStep2End").empty();
        $('#TravelDateStep2End').append($("<option></option>").attr("value", $("#TravelDateStep2Start option:selected").val()).text($("#TravelDateStep2Start option:selected").text()));
        if (!$("#TravelDateStep2Start option:selected").is(':last-child')) {
            $('#TravelDateStep2End').append($("<option></option>").attr("value", $("#TravelDateStep2Start option:selected").next().val()).text($("#TravelDateStep2Start option:selected").next().text()));
        }
    }

    function InitMultiSearchJourneyFields() {

        $(".frompointid").val("");
        $(".topointid").val("");
        $(".topointtype").val("");
        $(".frompointtype").val("");
        $(".frompointname").val("");
        $(".topointname").val("");
        $(".travelToMulti").val("");
        $(".travelFromMulti").val("");
        $("#warrenty-search-result-multi").addClass("st-hidden");
        $("#warrenty-search-result-wrapper-multi").addClass("st-hidden");
        $("#TravelFromMulti").val("");
        $("#TravelFromIdMulti").val("");
        $("#TravelToMulti").val("");
        $("#TravelToIdMulti").val("");
        $("#TravelFromPointType").val("");
        $("#TravelToPointType").val("");
        $("#ArrivalDateTime").val("");
        $("#DepartDateTime").val("");
        $("#Changes").val("");
        $("#JourneyTime").val("");
        $("#JourneyKey").val("");
        $("#DepartureDate").val("");
    }

    function SearchWarrantyStandard(scrollType, departTime) {

        var fromPointId = jQuery.trim($(".frompointid").val());
        var toPointId = jQuery.trim($(".topointid").val());
        var toPointType = jQuery.trim($(".topointtype").val());
        var fromPointType = jQuery.trim($(".frompointtype").val());
        var searchDate = jQuery.trim($("#TravelDateStep2").val().substring(0, 10));
        var hourParam = "";
        var minParam = "";


        var iosTime = jQuery("#Time");

        if ($("#IsMultiSearch").val() == "true") {
            iosTime = jQuery(".multitime:visible");
            $("#TravelFromPointTypeMulti").val(fromPointType);
            $("#TravelToPointTypeMulti").val(toPointType);

        }
        else {
            $("#TravelFromPointType").val(fromPointType);
            $("#TravelToPointType").val(toPointType);
        }

        if (iosTime.length) {
            /*On a IOS device, then date, hour and min needs to be read from the "time element instead. */
            var val = $('#Time').val();
            var timeArr = val.split(':');
            if (timeArr.length == 2) {
                hourParam = timeArr[0];
                minParam = timeArr[1];
            }
        } else {


            if ($("#IsMultiSearch").val() == "true") {
                hourParam = $(".multihour:visible option:selected").val();
                minParam = $(".multimin:visible option:selected").val();
                searchDate = jQuery.trim($(".travelDateStep2multi:visible").val().substring(0, 10));
            }
            else {
                hourParam = $("#Hour option:selected").val();
                minParam = $("#Min option:selected").val();
            }

        }

        var searchTime = jQuery.trim(hourParam) + ":" + jQuery.trim(minParam);

        $("#no-result-panel").removeClass("st-visible").addClass("st-hidden").html();

        if (fromPointId == "" || toPointId == "", searchDate == "", searchTime == "") {
            return false;
        }

        if ($("#IsMultiSearch").val() == "true") {
            $("#TravelFromMulti").val(jQuery.trim($(".frompointname").val()))
            $("#TravelToMulti").val(jQuery.trim($(".topointname").val()))
        }
        else {
            $("#TravelFromStandard").val(jQuery.trim($(".frompointname").val()))
            $("#TravelToStandard").val(jQuery.trim($(".topointname").val()))

        }

        var timestamp = new Date().getTime() - (30 * 24 * 60 * 60 * 1000);
        var timeNow = new Date().getTime();
        var parts = (searchDate + " " + searchTime + ":00").match(/\d+/g);
        var enteredDateTime = new Date(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]);
        //var enteredDateTime = Date.parse(dateFromISO8601(searchDate + " " + searchTime + ":00"));

        // Bugg 2320
        $("#warrenty-search-result-wrapper").removeClass("st-hidden");
        $("#no-result-panel-old").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-range").removeClass("st-visible").addClass("st-hidden");
        $("#no-result-panel-same").removeClass("st-visible").addClass("st-hidden");

        if (fromPointId == toPointId) {
            if ($("#IsMultiSearch").val() == "true") {
                $("#no-result-panel-same-multi").removeClass("st-hidden").addClass("st-visible");
            }
            else {
                $("#no-result-panel-same").removeClass("st-hidden").addClass("st-visible");
            }

            $("#warrenty-search-result-wrapper").removeClass("st-visible").addClass("st-hidden");
            $(".spinner").remove();
            $("#searchTravelWarrenty").removeClass("loading-animation");
            $("#searchTravelWarrenty").removeAttr("style");
            return false;
        }

        if (enteredDateTime > timeNow) {
            if ($("#IsMultiSearch").val() == "true") {
                $("#no-result-panel-range-multi").removeClass("st-hidden").addClass("st-visible");
            }
            else {
                $("#no-result-panel-range").removeClass("st-hidden").addClass("st-visible");
            }
            $("#warrenty-search-result-wrapper").removeClass("st-visible").addClass("st-hidden");
            $(".spinner").remove();
            $("#searchTravelWarrenty").removeClass("loading-animation");
            $("#searchTravelWarrenty").removeAttr("style");
            return false;
        }

        var dateRange = $('#TravelDateStep2 option');
        var minDate = dateRange.eq(0).val();
        var maxDate = dateRange.eq(dateRange.length - 1).val();

        var searchDateTime;

        if (departTime != "") {
            searchDateTime = departTime
        }
        else {
            if (scrollType == "after") {
                searchDateTime = $(".departuredatetime").last().text();
            }
            else if (scrollType == "before") {
                searchDateTime = $(".departuredatetime").first().text();
            }
            else {
                searchDateTime = searchDate + " " + searchTime;
            }
        }


        var action = "searchwarrentyjourneysstandardsearch";

        if ($("#IsMultiSearch").val() == "true") {
            action = "searchwarrentyjourneysstandardsearchmulti"
        }

        var params = {
            "action": action,
            "fromPointId": fromPointId,
            "toPointId": toPointId,
            "fromPointType": fromPointType,
            "toPointType": toPointType,
            "scrollType": scrollType,
            "searchTime": searchDateTime,
            "minDate": minDate,
            "maxDate": maxDate
        };

        if ($("#IsStandardSearch").val() == "true") {
            searchJourneysStandardSearch(params);
        }
        else {
            searchJourneysMultiSearch(params);
        }


        // GA::Event::ResegarantiOnline-->Steg2-->Sök Resa

        return true;


    }

    function CheckAmountManualSearch(MaxAmount) {
        if ($("body").find('.changemanualjourneytitel').length == MaxAmount) {
            $("#NewManualJourneyPartial").fadeOut(500);
        }

    }

    function CheckManualFromIsValid(To, IsEditPanel) {
        let isValid = true;
        const regexPattern = /^[^_\|\½\§\!\""\@\#\£\¤\$\%\/\{\(\[\)\]\=\}\+\?\\\*\;\<\>]+$/;
        const isRegexInvalid = !jQuery.trim(To).match(regexPattern);
        const isLengthInvalid = jQuery.trim(To).replace(/\d+/g, "").length < 2;

        let InputId = IsEditPanel ? "frompointnameedit" : "FromManualSearch";


        if (isLengthInvalid) {
            const errorElement = IsEditPanel ? ".manualsearchsavefromtoerr" : "#ManualSearchSaveFromToErr";
            addAriaDescribedByToInputAndShowError(InputId, $(errorElement).attr("id"));
            toogleValidationOnManualErrors(InputId, true)
            isValid = false;
        }

        else {
            if (isRegexInvalid) {
                const errorElement = IsEditPanel ? ".manualsearchsavefromtoregexerr" : "#ManualSearchSaveFromToRegExErr";
                addAriaDescribedByToInputAndShowError(InputId, $(errorElement).attr("id"));
                toogleValidationOnManualErrors(InputId, true)
                isValid = false;
            }
        }

        return isValid;
    }

    function CheckManualToIsValid(To, IsEditPanel) {
        let isValid = true;
        const regexPattern = /^[^_\|\½\§\!\""\@\#\£\¤\$\%\/\{\(\[\)\]\=\}\+\?\\\*\;\<\>]+$/;
        const isRegexInvalid = !jQuery.trim(To).match(regexPattern);
        const isLengthInvalid = jQuery.trim(To).replace(/\d+/g, "").length < 2;

        let InputId = IsEditPanel ? "topointnameedit" : "ToManualSearch";

        if (isLengthInvalid) {
            const errorElement = IsEditPanel ? ".manualsearchsavetoerr" : "#ManualSearchSaveToErr";
            addAriaDescribedByToInputAndShowError(InputId, $(errorElement).attr("id"));
            toogleValidationOnManualErrors(InputId, true)
            isValid = false;
        }
        else {
            if (isRegexInvalid) {
                const errorElement = IsEditPanel ? ".manualsearchsavetoregexerr" : "#ManualSearchSaveToRegExErr";
                addAriaDescribedByToInputAndShowError(InputId, $(errorElement).attr("id"));
                toogleValidationOnManualErrors(InputId, true)
                isValid = false;
            }
        }

        return isValid;
    }

    function ClearOtherTicketFields() {
        $("#OtherTicketCrdNr").val("");
        $("#OtherTicketSupplier").prop('selectedIndex', 0);
    }


    function InvalidateIsNyaSkanekortet() {
        IsNyaSkanekortetValidated = false;
        $("#newcardticket1").hide();
        $("#newcardticket2").hide();
        $("#newcardticket3").hide();
        $('#CheckTicket1').prop('checked', false);
        $('#CheckTicket2').prop('checked', false);
        $('#CheckTicket3').prop('checked', false);
    }

    function addAriaDescribedByToInputAndShowError(inputId, errorMessageId) {
        var $input = $("#" + inputId);
        var $errorMessage = $("#" + errorMessageId);

        $input.attr("aria-describedby", function (i, existingValue) {
            var describedByArray = (existingValue || "").split(/\s+/);

            if (describedByArray.indexOf(errorMessageId) === -1) {
                return (existingValue ? existingValue + " " : "") + errorMessageId;
            } else {
                return existingValue; // Return existingValue unchanged
            }
        });

        $errorMessage.show();
    }



    function removeAriaDescribedBy(buttonId) {
        $('#' + buttonId).removeAttr('aria-describedby');
    }

    function setAriaInvalid(inputId, value) {
        var $input = $("#" + inputId);
        var currentAriaInvalid = $input.attr("aria-invalid");

        if (value === true || value === false) {
            $input.attr("aria-invalid", value.toString());
        } else {
            $input.attr("aria-invalid", currentAriaInvalid === "true" ? "false" : "true");
        }
    }

    function setValidationClass(dataValMsgForValue, isInvalid) {
        var $spanElement = $('span[data-valmsg-for="' + dataValMsgForValue + '"]');
        var $inputElement = $('#' + dataValMsgForValue);
        if (!isInvalid) {
            $spanElement.removeClass("field-validation-error").addClass("field-validation-valid");
            $inputElement.removeClass("input-validation-error");
        } else {
            $spanElement.removeClass("field-validation-valid").addClass("field-validation-error");
            $inputElement.addClass("input-validation-error");
        }
    }

    function toogleValidationOnManualErrors(inputId, isInvalid) {
        setAriaInvalid(inputId, isInvalid);
        setValidationClass(inputId, isInvalid);
    }

    function wrapAndMoveErrorTextToContainer(isEdit) {
        var containerSelector = isEdit ? '#editManualJourney' : '#NewManualJourney';
        var showContainerSelector = isEdit ? '#validationContainerEdit' : '#validationContainerAdd';

        $(containerSelector + ' span.single-error-text:visible').each(function () {
            var errorMessage = $(this).text().trim();

            if (errorMessage) {
                $(containerSelector + ' .validation-summary-errors-manual ul').append($('<li>').text(errorMessage));
            }
        });

        $(showContainerSelector).show();
    }



    function removeAriaDescribedByValue(inputId, valueToRemove) {
        var inputElement = $("#" + inputId);
        var existingAriaDescribedBy = inputElement.attr("aria-describedby");

        if (existingAriaDescribedBy) {
            var describedByValues = existingAriaDescribedBy.split(" ");
            var updatedDescribedBy = describedByValues.filter(function (value) {
                return value !== valueToRemove;
            });

            if (updatedDescribedBy.length === 0) {
                inputElement.removeAttr("aria-describedby");
            } else {
                inputElement.attr("aria-describedby", updatedDescribedBy.join(" "));
            }
        }
    }


    function toogleValidationClassOnInputOnManualErrors(inputId, removeClass) {
        var input = $("#" + inputId);

        if (removeClass === true) {
            input.removeClass("input-validation-error");
        } else {
            input.addClass("input-validation-error");
        }
    }


    function checkManualSearchSaveForErrors(from, to) {

        let hasErrors = false;

        if (!CheckManualFromIsValid(from, false)) {
            hasErrors = true;
        }

        if (!CheckManualToIsValid(to, false)) {
            hasErrors = true;
        }

        if ($("#DepTimeOriginal").val() == "") {
            addAriaDescribedByToInputAndShowError("DepTimeOriginal", "ManualDepTimeOriginalErr")
            toogleValidationOnManualErrors("DepTimeOriginal", true);
            hasErrors = true;
        }

        if ($("#ArrTimeOriginal").val() == "") {
            addAriaDescribedByToInputAndShowError("ArrTimeOriginal", "ManualArrTimeOriginalErr")
            toogleValidationOnManualErrors("ArrTimeOriginal", true);
            hasErrors = true;
        }

        if ($('#LocalNoShowFalse').is(':checked')) {
            if ($("#DepTimeReal").val() == "") {
                addAriaDescribedByToInputAndShowError("DepTimeReal", "ManualDepTimeRealErr")
                toogleValidationOnManualErrors("DepTimeReal", true);
                hasErrors = true;
            }

            if ($("#ArrTimeReal").val() == "") {
                addAriaDescribedByToInputAndShowError("ArrTimeReal", "ManualArrTimeRealErr")
                toogleValidationOnManualErrors("ArrTimeReal", true);
                hasErrors = true;
            }
        }

        if (parseInt($("#DepTimeReal").val().substr(0, 2)) > parseInt($("#ArrTimeReal").val().substr(0, 2)) && !$('#NoShowCheckBox').is(":checked")) {
            addAriaDescribedByToInputAndShowError("ArrTimeReal", "ManualSearchSaveTimeErr");
            toogleValidationOnManualErrors("ArrTimeReal", true);
            hasErrors = true;
        }

        else if (parseInt($("#DepTimeReal").val().substr(0, 2)) == parseInt($("#ArrTimeReal").val().substr(0, 2)) && !$('#NoShowCheckBox').is(":checked")) {
            if (parseInt($("#DepTimeReal").val().substr(3, 5)) >= parseInt($("#ArrTimeReal").val().substr(3, 5))) {
                addAriaDescribedByToInputAndShowError("ArrTimeReal", "ManualSearchSaveTimeErr");
                toogleValidationOnManualErrors("ArrTimeReal", true);
                hasErrors = true;
            }
        }

        if (parseInt($("#DepTimeOriginal").val().substr(0, 2)) > parseInt($("#ArrTimeOriginal").val().substr(0, 2))) {
            addAriaDescribedByToInputAndShowError("ArrTimeOriginal", "ManualSearchSaveOrgTimeErr");
            toogleValidationOnManualErrors("ArrTimeOriginal", true)
            hasErrors = true;
        }

        else if (parseInt($("#DepTimeOriginal").val().substr(0, 2)) == parseInt($("#ArrTimeOriginal").val().substr(0, 2))) {
            if (parseInt($("#DepTimeOriginal").val().substr(3, 5)) >= parseInt($("#ArrTimeOriginal").val().substr(3, 5))) {
                addAriaDescribedByToInputAndShowError("ArrTimeOriginal", "ManualSearchSaveOrgTimeErr");
                toogleValidationOnManualErrors("ArrTimeOriginal", true)
                hasErrors = true;
            }
        }

        if (hasErrors) {
            wrapAndMoveErrorTextToContainer(false)
        }
        scrollAndFocusOnError();
        return hasErrors;
    }

    function checkManualSearchSaveEditForErrors(from, to, originaldeptimeedit, realdeptimeedit,
        originalarrtimeedit, realarrtimeedit, noshowcheckbox) {

        var originaldeptimeeditId = originaldeptimeedit.attr("id");
        var realdeptimeeditId = realdeptimeedit.attr("id");
        var originalarrtimeeditId = originalarrtimeedit.attr("id");
        var realarrtimeeditId = realarrtimeedit.attr("id");

        let hasErrors = false;

        if (!CheckManualFromIsValid(from, true)) {
            hasErrors = true;
        }

        if (!CheckManualToIsValid(to, true)) {
            hasErrors = true;
        }

        if (originaldeptimeedit.val() == "") {
            addAriaDescribedByToInputAndShowError(originaldeptimeeditId, "manualdeptimeoriginalerr")
            toogleValidationOnManualErrors(originaldeptimeeditId, true)
            hasErrors = true;
        }

        if (originalarrtimeedit.val() == "") {
            addAriaDescribedByToInputAndShowError(originalarrtimeeditId, "manualarrtimeoriginalerr")
            toogleValidationOnManualErrors(originalarrtimeeditId, true)
            hasErrors = true;
        }

        if ($('#LocalNoShowEditFalse').is(':checked')) {
            if (realdeptimeedit.val() == "") {
                addAriaDescribedByToInputAndShowError(realdeptimeeditId, "manualdeptimerealerr")
                toogleValidationOnManualErrors(realdeptimeeditId, true)
                hasErrors = true;
            }

            if (realdeptimeedit.val() == "") {
                addAriaDescribedByToInputAndShowError(realarrtimeeditId, "manualarrtimerealerr")
                toogleValidationOnManualErrors(realarrtimeeditId, true)
                hasErrors = true;
            }
        }


        if (parseInt(originaldeptimeedit.val().substr(0, 2)) > parseInt(originalarrtimeedit.val().substr(0, 2))) {
            addAriaDescribedByToInputAndShowError(originalarrtimeeditId, "manualsearchsaveorgtimeerr");
            toogleValidationOnManualErrors(originalarrtimeeditId, true);
            hasErrors = true;
        }
        else if (parseInt(originaldeptimeedit.val().substr(0, 2)) == parseInt(originalarrtimeedit.val().substr(0, 2))) {
            if (parseInt(originaldeptimeedit.val().substr(3, 5)) >= parseInt(originalarrtimeedit.val().substr(3, 5))) {
                addAriaDescribedByToInputAndShowError(originalarrtimeeditId, "manualsearchsaveorgtimeerr");
                toogleValidationOnManualErrors(originalarrtimeeditId, true);
                hasErrors = true;
            }
        }

        if (parseInt(realdeptimeedit.val().substr(0, 2)) > parseInt(realarrtimeedit.val().substr(0, 2)) && !noshowcheckbox) {
            addAriaDescribedByToInputAndShowError(realarrtimeeditId, "manualsearchsavetimeerr");
            toogleValidationOnManualErrors(realarrtimeeditId, true);
            hasErrors = true;

        }
        else if (parseInt(realdeptimeedit.val().substr(0, 2)) == parseInt(realarrtimeedit.val().substr(0, 2)) && !noshowcheckbox) {
            if (parseInt(realdeptimeedit.val().substr(3, 5)) >= parseInt(realarrtimeedit.val().substr(3, 5))) {
                addAriaDescribedByToInputAndShowError(realarrtimeeditId, "manualsearchsavetimeerr");
                toogleValidationOnManualErrors(realarrtimeeditId, true);
                hasErrors = true;
            }
        }

        if (hasErrors) {
            wrapAndMoveErrorTextToContainer(true)
        }

        return hasErrors;
    }

    function InitAppTicketNumber(value, ticketsubfix) {
        var n = $('input[name*="chooseappradio"]').length;
        if (n == 2) {
            value = "Singapore";
            $("#AppType").val("Singapore");
            $("#AppType2").val("Singapore");
        }

        $(".appticketnr" + ticketsubfix).show();
        $("#AppTicketNr" + ticketsubfix).show();
        $(".appsingaporeticketnr" + ticketsubfix).hide();
        $("#AppSingaporeTicketNr" + ticketsubfix).hide();
        //$("#AppSingaporeTicketNr" + ticketsubfix).val("");



    }

    function init() {
        SetFieldsMaxLength();
        $("#btnjojocard1").prop('disabled', true);
        $("#btnjojocard2").prop('disabled', true);
        $("#divExtraCostContainer2").hide();
        $("#divExtraCostContainer3").hide();
        $("#SearchError").hide();
        $("#SearchManualError").hide();
        $("#SearchEtisMultiError").hide();
        $("#SocialSecurityNumberError").hide();
        $("#Step4ValidatorMain").hide();
        $("#EmailError").hide();
        $("#CellError").hide();
        $("#AppError").hide();
        $("#NewCardChooseCard").hide();
        $("#DepTimeOriginal").inputmask("hh:mm", { "placeholder": "hh:mm" });
        $("#ArrTimeOriginal").inputmask("hh:mm", { "placeholder": "hh:mm" });
        $("#DepTimeReal").inputmask("hh:mm", { "placeholder": "hh:mm" });
        $("#ArrTimeReal").inputmask("hh:mm", { "placeholder": "hh:mm" });
        $("#JojoDuplicateCard").hide();
        $("#JojoDuplicateCard2").hide();
        if (!$('#hiddenInputticketType1').val() || !$('#NyaSkanekortetNr').val())
            $("#newcardticket1").hide();
        if (!$('#hiddenInputticketType2').val() || !$('#NyaSkanekortetNr').val())
            $("#newcardticket2").hide();
        if (!$('#hiddenInputticketType3').val() || !$('#NyaSkanekortetNr').val())
            $("#newcardticket3").hide();


        InitCheckStep1();
        InitCheckStep3();
        InitCheckStep4();
        InitCheckStep5();
        InitCheckStep6();


        jQuery('.numbersOnly').keyup(function () {
            this.value = this.value.replace(/[^0-9\.]/g, '');
        });

        jQuery('.singaporeTicketNumber').keyup(function () {
            this.value = this.value.replace(/[^a-zA-Z0-9]/g, '');
        });



        $("#travel-warrenty-form textarea").each(function (index) {
            var maxlength = $(this).attr('maxlength');
            var val = $(this).val();
            $(this).next(".wordscount").text("Du har " + (maxlength - val.length) + " tecken kvar av " + maxlength);

        });

        $("#travel-warrenty-form input").on('keyup blur', function () {
            HideError(true);
        });


        $('input[type=radio][name=rbgCostType]').on('change', function () {
            clearErrors('TravleWarrentyFrom');
            switch ($(this).val()) {
                case 'ISSTJourney':
                    $("#hfCostType").val("ISSTJourney");
                    $("#divTaxiJourney").hide();
                    $("#divCarJourney").hide();
                    break;
                case 'ISTaxiJourney':
                    $("#hfCostType").val("ISTaxiJourney");
                    $("#JourneyFromTaxi").val("");
                    $("#JourneyToTaxi").val("");
                    $("#JourneyCost").val("");
                    $("#divTaxiJourney").show();
                    $("#divCarJourney").hide();
                    break;
                case 'ISCarJourney':
                    $("#hfCostType").val("ISCarJourney");
                    $("#JourneyFromCar").val("");
                    $("#JourneyToCar").val("");
                    $("#JourneyLength").val("");
                    $("#JourneyRegNr").val("");
                    $("#divTaxiJourney").hide();
                    $("#divCarJourney").show();
                    break;
            }

        });

        $("input[name='chooseappradio']").change(function () {
            var value = $('input[name=chooseappradio]:checked').val();
            $("#AppType").val(value);
            InitAppTicketNumber(value, "");

        });


        $("input[name='chooseappradio2']").change(function () {
            var value = $('input[name=chooseappradio2]:checked').val();
            $("#AppType2").val(value);
            InitAppTicketNumber(value, "2");

        });



        switch ($("#PaymentType").val()) {
            case "SelectCoupon":
                $("#divVoucher1").show();
                $("#IsVoucher1").prop("checked", true);
                break;
            case "SelectDiscountCode":
                $("#divDiscount").show();
                $("#IsDiscount").prop("checked", true);
                break;
            case "SelectValueVoucher":
                $("#divVoucher2").show();
                $("#IsVoucher2").prop("checked", true);
                break;
            case "SelectNationalBank":
                $("#divBank").show();
                $("#IsBank").prop("checked", true);
                break;
            case "SelectInternationalOrCompanyBank":
                $("#divCompany").show();
                $("#IsCompany").prop("checked", true);
                break;
            default:

        }

        switch ($("#CouponType").val()) {
            case "SelectedCoupon.Email":
                $(".SelectedCoupon-Email").show();
                $("#Voucher1SelectEmail").prop("checked", true);
                break;
            case "SelectedCoupon.SMS":
                $(".SelectedCoupon-SMS").show();
                $("#Voucher1SelectSMS").prop("checked", true);
                break;

            default:
                $(".SelectedCoupon-SMS").show();
                $("#Voucher1SelectSMS").prop("checked", true);
                break;
        }
        //Normal Step3:
        if (parseInt($("#currentStep").val()) == 3 && $("#step3THM").length < 1) {

            if ($("#hfCostType").val().indexOf("ISSTJourney") >= 0) {
                $("#ISSTJourney").prop("checked", true);
            }

            if ($("#hfCostType").val().indexOf("ISCarJourney") >= 0) {
                $("#divCarJourney").show();
                $("#ISCarJourney").prop("checked", true);
            }
            if ($("#hfCostType").val().indexOf("ISTaxiJourney") >= 0) {
                $("#divTaxiJourney").show();
                $("#ISTaxiJourney").prop("checked", true);
            }
            //} //move this curlyBracket ST-52

            if ($("#HasExtraCost1").is(":checked")) {
                $("#divExtraCost1").show();
                $("#divExtraCostContainer2").show();
            }

            if ($("#HasExtraCost2").is(":checked")) {
                $("#divExtraCost2").show();
                $("#divExtraCostContainer3").show();
            }

            if ($("#HasExtraCost3").is(":checked")) {
                $("#divExtraCost3").show();
            }


            $("#HasExtraCost1").change(function () {
                if ($(this).is(":checked")) {
                    $("#ExtraCostType1").val("");
                    $("#ExtraCostValue1").val("");
                    $("#divExtraCost1").show();
                    $("#divExtraCostContainer2").show();
                }
                else {
                    $("#divExtraCost1").hide();
                    $("#divExtraCostContainer2").hide();
                    $("#divExtraCost2").hide();
                    $("#divExtraCostContainer3").hide();
                    $("#divExtraCost3").hide();
                    $("#HasExtraCost2").attr("checked", false);
                    $("#HasExtraCost3").attr("checked", false);

                }
            });

            $("#HasExtraCost2").change(function () {
                if ($(this).is(":checked")) {
                    $("#ExtraCostType2").val("");
                    $("#ExtraCostValue2").val("");
                    $("#divExtraCost2").show();
                    $("#divExtraCostContainer3").show();
                }
                else {
                    $("#divExtraCost2").hide();
                    $("#divExtraCostContainer3").hide();
                    $("#divExtraCost3").hide();
                    $("#HasExtraCost3").attr("checked", false);
                }
            });

            $("#HasExtraCost3").change(function () {
                if ($(this).is(":checked")) {
                    $("#ExtraCostType3").val("");
                    $("#ExtraCostValue3").val("");
                    $("#divExtraCost3").show();
                }
                else {
                    $("#divExtraCost3").hide();
                }
            });
        } //curly bracket moved to here ST-52

        InitJourneyManualTime();


        function ClearMultiJourney() {
            $("#MultiSearchAddItem").addClass("st-hidden");
            $(".multietisjourneysummary").addClass("st-hidden");
            $("#addMultiJourney").addClass("st-hidden");
            $(".multietisjourneysummary").remove();
            var url = window.location.pathname;

            $.ajax({
                url: url + "ClearMultiJourney",
                type: 'POST',
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    if (data.Result == "Success") {

                        $("#MultiSearchAddItem").detach().appendTo($("#MultiSearchNewItem"));
                        //$("#MultiSearchAddItem").detach().fadeIn("slow").appendTo($("#MultiSearchNewItem")).fadeIn("100");
                        $("#MultiSearchAddItem").removeClass("st-hidden");
                        $("#MultiSearchAddItem").closest(".multietisjourneydetailschange").removeClass("st-hidden");
                        $("#MultiSearchNewItem").removeClass("st-hidden");
                        InitMultiSearchJourneyFields();
                    }
                    else {

                    }
                },
                error: function (err) {

                }
            });

        }






        $('#ChangeManualJourneySummary').on('change', '.originaljourneydateedit', function (e) {
            var realDate = $('.realjourneydateedit');
            realDate.empty();
            realDate.append($("<option></option>").attr("value", $('.originaljourneydateedit option:selected').val()).text($('.originaljourneydateedit  option:selected').text()));
            if (!$('.originaljourneydateedit option:selected').is(':last-child')) {
                realDate.append($("<option></option>").attr("value", $('.originaljourneydateedit  option:selected').next().val()).text($('.originaljourneydateedit  option:selected').next().text()));
            }

        });


        $('#warrenty-search-result-multi-summary').on('click', '.multietisjourneytitel', function (e) {

            var multiIndex = 0;

            var parent = $(this).closest("div.multietisjourneysummary");
            $(".multietisjourneytitel").each(function (index) {
                if ($(this).closest("div.multietisjourneysummary").find(".multiIndex").text() != parent.find(".multiIndex").text()) {
                    $(this).html($("#hfChoosenMultiJourneyTitleStr").val() + " " + (index + 1) + " " + "<span class='red-arrow down'></span>");
                    $(this).parent().find(".multietisjourneydetails").show();
                }
                else {
                    multiIndex = index + 1;
                }
            });

            $("#hfCurrentMultiJourney").val(multiIndex);

            if (parent.find(".multietisjourneydetails").is(":visible")) {
                $(this).html($("#hfChangeMultiJourneyTitleStr").val() + " " + (multiIndex) + " " + "<span class='red-arrow up'></span>");
                parent.find(".multietisjourneydetails").hide();
                InitMultiSearchJourneyFields();
                $("#MultiSearchAddItem").detach().appendTo(parent.find(".multietisjourneydetailschange"));
                $("#MultiSearchAddItem").removeClass("st-hidden");

                var day = $(this).parent().find(".multijourneydepdate").text();
                var time = $(this).parent().find(".multijourneydeptime").text().substring(0, 2);
                var timeMinutes = $(this).parent().find(".multijourneydeptime").text().substring(3, 4);
                if (time.substring(0, 1) == "0") {
                    time.replace("0", "");
                }

                $('#searchTravelWarrentyMulti').prop("disabled", true);
                $(".travelDateStep2multi > [value=" + day + "]").attr("selected", "true");
                $(".multihour").prop('selectedIndex', time);
                $(".multimin").prop('selectedIndex', parseInt(timeMinutes) * 2);
                +
                    parent.find(".multietisjourneydetailschange").removeClass("st-hidden");
                $("#addMultiJourney").addClass("st-hidden");
                $("#MultiNewSearch").find(".spinner").remove();
                if ($(".multietisjourneysummary").length < $("#hfMaxAmountEtisMulti").val()) {
                    $("#MultiNewSearch").removeClass("st-hidden");
                }
                else {
                    $("#MultiNewSearch").addClass("st-hidden");
                }
            }
            else {
                $(this).html($("#hfChoosenMultiJourneyTitleStr").val() + " " + (multiIndex) + " " + "<span class='red-arrow down'></span>");
                parent.find(".multietisjourneydetails").show()
                parent.find(".multietisjourneydetailschange").addClass("st-hidden");
                if ($(".multietisjourneytitel").length < $("#hfMaxAmountEtisMulti").val()) {
                    $("#addMultiJourney").removeClass("st-hidden");
                }
            }

        })


        $('#ChangeManualJourneySummary').on('click keypress', '.changemanualjourneytitel', function (e) {
            var code = e.charCode || e.keyCode;
            if ((e.type !== 'click') && (code !== 32) && (code !== 13)) {
                return;
            }

            var value = ($(this).attr("aria-expanded") == "false") ? "true" : "false";
            $(this).attr("aria-expanded", value);


            $(".editManualJourney").parent().remove();
            var editPanel = $(this).parent().find(".changemanualjourneyedit");
            editPanel.toggle();

            var journeyId = $(this).parent().find(".idmanual").text();

            $(".changemanualjourneytitel").each(function (index) {
                $(this).html($("#hfChangeManualJourneyTitleStr").val() + " " + (index + 1) + " " + "<span class='red-arrow down'></span>");
            });

            $(".changemanualheader").each(function (index) {
                $(this).text($("#hfChoosenManualJourneyTitleStr").val() + " " + (index + 1));
            });

            if (editPanel.is(":visible")) {
                $(this).html($("#hfHideStr").val() + " " + "<span class='red-arrow up'></span>");
                $('<div/>', { id: '_' + journeyId }).loadTemplate($("#editManualJourney")).appendTo(editPanel);

                var from = $(this).parent().find(".frompointname").text();
                var to = $(this).parent().find(".topointname").text();
                var originalDepTime = $(this).parent().find(".originaldepTime").text();
                var originalArrTime = $(this).parent().find(".originalarrTime").text();
                var realDepTime = $(this).parent().find(".realdeptime").text();
                var realArrTime = $(this).parent().find(".realarrtime").text();
                var meanOfTransport = $(this).parent().find(".meanoftransport").text();
                var dateStart = $(this).parent().find(".originaljourneydate").text();
                var dateEnd = $(this).parent().find(".realjourneydate").text();


                var editJourney = editPanel.find(".editManualJourney");
                editPanel.find(".idjourneyedit").val(journeyId);
                editJourney.find(".idmanualedit").val(journeyId);
                editJourney.find(".frompointnameedit").val(from);
                editJourney.find(".topointnameedit").val(to);
                $('input[type=radio][name=LocalEditNoShow]').on('change', function () {
                    let checked = $("#NoShowCheckBoxEdit");
                    if (checked[0].checked) {
                        $('#LocalEditNoShowTrueTime').hide();
                    }
                    else {
                        $('#LocalEditNoShowTrueTime').show();
                    }
                })

                if ($(this).parent().find(".checkboxNoshowValue").text().toLowerCase() === 'true') {
                    editJourney.find("#LocalNoShowEditFalse").prop('checked', false);
                    editJourney.find("#NoShowCheckBoxEdit").prop('checked', true);
                }
                else {
                    $('#LocalEditNoShowTrueTime').show();
                    editJourney.find("#NoShowCheckBoxEdit").prop('checked', false);
                    editJourney.find("#LocalNoShowEditFalse").prop('checked', true);
                }

                if (editJourney.find(".realdeptimeedit").is(":visible")) {
                    $(".realdeptimeedit").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editJourney.find(".realdeptimeedit").val(realDepTime);
                }

                if (editJourney.find(".originaldeptimeedit").is(":visible")) {
                    $(".originaldeptimeedit").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editJourney.find(".originaldeptimeedit").val(originalDepTime);
                }

                if (editJourney.find(".realarrtimeedit").is(":visible")) {
                    $(".realarrtimeedit").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editJourney.find(".realarrtimeedit").val(realArrTime);
                }

                if (editJourney.find(".originalarrtimeedit").is(":visible")) {
                    $(".originalarrtimeedit").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editJourney.find(".originalarrtimeedit").val(originalArrTime);
                }


                editJourney.find(".meanoftransportedit option:contains(" + meanOfTransport + ")").attr('selected', true);

                editJourney.find('.originaljourneydateedit option[value="' + dateStart + '"]').attr('selected', true);
                editJourney.find('.realjourneydateedit option[value="' + dateEnd + '"]').attr('selected', true);


                editJourney.find('.realjourneydateedit').empty();
                editJourney.find('.realjourneydateedit').append($("<option></option>").attr("value", editJourney.find('.originaljourneydateedit option:selected').val()).text(editJourney.find('.originaljourneydateedit  option:selected').text()));
                if (!editJourney.find('.originaljourneydateedit option:selected').is(':last-child')) {
                    editJourney.find('.realjourneydateedit').append($("<option></option>").attr("value", editJourney.find('.originaljourneydateedit  option:selected').next().val()).text(editJourney.find('.originaljourneydateedit  option:selected').next().text()));
                }
            }
            else {
                var index = $(this).parent().find(".index").text();
                var changemanualheader = $(this).parent().find(".changemanualheader");
                changemanualheader.text($("#hfChoosenManualJourneyTitleStr").val() + " " + index);
                $(this).html($("#hfChangeManualJourneyTitleStr").val() + " " + index + " " + "<span class='red-arrow down'></span>");
                $(this).parent().find(".editManualJourney").remove();
            }

            updateAriaCheckedOnCheckbox();
        });


        $('#LackSSN').change(function () {
            $('.field-validation-error[data-valmsg-for="SocialSecurityNumber"]').removeClass('field-validation-error').addClass('field-validation-valid').html('');
        });

        $('#get-personal-information').on('click', function (e) {

            HideError(true);
            var socialSecurityNumber = $("#SocialSecurityNumber").val();

            if ($.trim(socialSecurityNumber).length < 12) {
                $('#get-personal-information').find(".spinner").remove();
                e.stopImmediatePropagation();
                return false;
            }

            var url = window.location.pathname;

            $.ajax({
                url: url + "GetAdressFromSocialSecurityNumber",
                type: 'GET',
                data: { SocialSecurityNumber: socialSecurityNumber },
                success: function (data) {
                    $('#get-personal-information').find(".spinner").remove();
                    if (data.AddressFoundFromCivilRegistry == false) {
                        $("#NoPersInfoFoundErr").show();
                        $("#FirstName").val("");
                        $("#FamilyName").val("");
                        if (jQuery.trim($("#MobilePhoneNumber").val()).length == 0) {
                            $("#MobilePhoneNumber").val("");
                        }
                        $("#StreetAddress").val("");
                        $("#ZipCode").val("");
                        $("#City").val("");
                    }
                    else {
                        $("#FirstName").val(data.FirstName);
                        $("#FamilyName").val(data.FamilyName);
                        if (jQuery.trim($("#MobilePhoneNumber").val()).length == 0) {
                            $("#MobilePhoneNumber").val(data.MobilePhoneNumber);
                        }
                        $("#StreetAddress").val(data.StreetAddress);
                        $("#ZipCode").val(data.ZipCode);
                        $("#City").val(data.City);
                    }
                },
                error: function (data, status, error) {

                    $('#get-personal-information').find(".spinner").remove();
                }
            });

        });


        $('#ChangeManualJourneySummary').on('click', '.editmanualjourney-btn', function (e) {

            var id = $(this).next().val()
            var editpanel = $("#" + id);

            var from = editpanel.find(".frompointnameedit").val();
            var to = editpanel.find(".topointnameedit").val();
            var journeyId = editpanel.find(".idmanualedit").val();

            var originaldeptimeedit = editpanel.find(".originaldeptimeedit");
            var realdeptimeedit = editpanel.find(".realdeptimeedit");
            var originalarrtimeedit = editpanel.find(".originalarrtimeedit");
            var realarrtimeedit = editpanel.find(".realarrtimeedit");

            var meanOfTransport = editpanel.find(".meanoftransportedit option:selected").val()
            let checked = $("#NoShowCheckBoxEdit");
            var noshowcheckbox = checked[0].checked;



            var originalJourneyDate = editpanel.find(".originaljourneydateedit option:selected").val();
            var realJourneyDate = editpanel.find(".realjourneydateedit option:selected").val();


            if ((journeyId.length == 0)) {

                $(this).find(".spinner").remove();
                e.stopImmediatePropagation();
                return false;
            }
            let hasErrors = checkManualSearchSaveEditForErrors(from, to, originaldeptimeedit, realdeptimeedit,
                originalarrtimeedit, realarrtimeedit, noshowcheckbox);

            if (hasErrors) {
                $(this).find(".spinner").remove();
                return false;
            }

            var url = window.location.pathname;

            $.ajax({
                url: url + "UpdateManualJourney",
                type: 'GET',
                data: { Id: journeyId, MeanOfTransport: meanOfTransport, FromPointName: from, ToPointName: to, OriginalDepTime: originaldeptimeedit.val(), RealDepTime: realdeptimeedit.val(), OriginalArrTime: originalarrtimeedit.val(), RealArrTime: realarrtimeedit.val(), JourneyDateStart: originalJourneyDate, JourneyDateEnd: realJourneyDate, NoShow: noshowcheckbox },
                success: function (data) {
                    let checked = $("#noshowcheckboxedit");
                    $(this).find(".spinner").remove();
                    editpanel.find(".editManualJourney").toggle();
                    editpanel.find(".frompointname").text(from);
                    editpanel.find(".topointname").text(to);
                    editpanel.find(".originaldepTime").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editpanel.find(".originalarrTime").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editpanel.find(".realdeptime").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editpanel.find(".realarrtime").inputmask("hh:mm", { "placeholder": "hh:mm" });
                    editpanel.find(".originaldepTime").text(originaldeptimeedit.val());
                    editpanel.find(".originalarrTime").text(originalarrtimeedit.val());
                    editpanel.find(".realdeptime").text(realdeptimeedit.val());
                    editpanel.find(".realarrtime").text(realarrtimeedit.val());
                    editpanel.find(".meanoftransport").text(meanOfTransport);
                    editpanel.find(".originaljourneydate").text(originalJourneyDate);
                    editpanel.find(".realjourneydate").text(realJourneyDate);

                    editpanel.find(".checkboxNoshow").text(noshowcheckbox ? "Ja" : "Nej");
                    editpanel.find(".checkboxNoshowValue").text(noshowcheckbox ? true : false);

                    if (noshowcheckbox)
                        editpanel.find('#realTimeSummarSection').hide()
                    else
                        editpanel.find('#realTimeSummarSection').show();

                    var index = editpanel.find(".index").text();
                    var changemanualHeader = editpanel.find(".changemanualheader");
                    var journeyTitle = editpanel.find(".changemanualjourneytitel");
                    changemanualHeader.text($("#hfChoosenManualJourneyTitleStr").val() + " " + index);
                    $("body").find(".changemanualjourneytitel").each(function (index) {
                        $(this).html($("#hfChangeManualJourneyTitleStr").val() + " " + (index + 1) + " " + "<span class='red-arrow down'></span>");
                    });
                },
                error: function (data, status, error) {

                    $(this).find(".spinner").remove();
                }
            });

        });

        $("#TravelDateStep2Start").on("change", function () {
            SetManualJournetEndDate();
        });



        $(".multiSearchSave").on('click', function (e) {

            HideError(true);
            var index = 1;

            if ($(".multietisjourneysummary").length > 0) {
                index = $("#hfCurrentMultiJourney").val();
            }

            var source = $("#jsonResultFindTrip").data();
            var id = $(".travel-warranty input[name='routeKeyMulti']:checked").index();

            var posIndex = 0;
            $(".travel-warranty input[name='routeKeyMulti']").each(function (index) {
                if ($(this).is(":checked")) {
                    posIndex = index;
                }

            });

            var item = $("#jsonResultFindTrip").data()[posIndex];
            copyItemToFieldsStandardSearch(item);

            var url = window.location.pathname;

            $.ajax({
                url: url + "CreateMultiJourney",
                type: 'POST',
                data: JSON.stringify({ Journey: item, MultiTravelIndex: index }),
                contentType: "application/json; charset=utf-8",
                success: function (data) {

                    if (data.Result == "dateerror") {
                        $("#MultiSearchSaveTimeErr").show();
                    }
                    else {
                        if (data.Index > $(".multietisjourneysummary").length) {
                            $('<div/>', { id: data.Id }).loadTemplate($("#displayMultiJourneysSummary"), {
                                multiIndex: data.Index,
                                From: data.From,
                                To: data.To,
                                DepDate: data.DepDate,
                                DepDateTime: data.DepDateTime,
                                ArrDateTime: data.ArrDateTime
                            }).appendTo("#warrenty-search-result-multi-summary");
                        }
                        else {
                            var container = $(".multietisjourneysummary:eq(" + (parseInt(data.Index, 10) - 1) + ")");
                            container.find(".multijourneydepdate").text(data.DepDate);
                            container.find(".multijourneydeptime").text(data.DepDateTime);
                            container.find(".multijourneyarrtime").text(data.ArrDateTime);
                            container.find(".frompointname").text(data.From);
                            container.find(".topointname").text(data.To);
                            $(".multietisjourneytitel").each(function (index) {
                                $(this).html($("#hfChoosenMultiJourneyTitleStr").val() + " " + (index + 1) + " " + "<span class='red-arrow down'></span>");
                                $(this).next(".multietisjourneydetails").removeClass("st-hidden");
                            });
                            container.find(".multietisjourneydetails").show();
                            $(".multietisjourneydetailschange").each(function (index) {
                                $(this).addClass("st-hidden");
                            });
                        }

                        $("html, body").animate({ scrollTop: $(".multietisjourneysummary").last().offset().top - 30 }, 1000);

                        $("#MultiSearchAddItem").addClass("st-hidden");
                        $("#addMultiJourney").removeClass("st-hidden");
                        $("#MultiNewSearch").removeClass("st-hidden");


                        if ($(".multietisjourneytitel").length < $("#hfMaxAmountEtisMulti").val()) {
                            $("#addMultiJourney").removeClass("st-hidden");
                        }
                        else {
                            $("#MultiNewSearch").addClass("st-hidden");
                        }

                        InitMultiSearchJourneyFields();

                    }


                }
            });

            $(this).find(".spinner").remove();


        });

        $("#MultiNewSearch").on("click", function () {

            if ($(".multietisjourneysummary").length > 0) {
                $("#hfCurrentMultiJourney").val($(".multietisjourneysummary").length + 1);
            }

            $('.searchTravelWarrentyMulti').prop("disabled", true);

            $("#warrenty-search-result-wrapper-multi").hide();
            $("#MultiSearchAddItem").detach().appendTo($("#MultiSearchNewItem"));
            $("#MultiSearchAddItem").removeClass("st-hidden");
            $("#MultiSearchNewItem").removeClass("st-hidden");
            $("#MultiSearchAddItem").closest(".multietisjourneydetailschange").removeClass("st-hidden");
            InitMultiSearchJourneyFields();

            var url = window.location.pathname;

            $.ajax({
                url: url + "GetMultiJourneyLastDate",
                type: 'POST',
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    $(".travelDateStep2multi > [value=" + data.Day + "]").attr("selected", "true");
                    $(".multihour").prop('selectedIndex', data.Hour);
                    $(".multimin").prop('selectedIndex', 0);
                },
                error: function (err) {

                }
            });


            $(this).addClass("st-hidden");

        });

        $("#ManualSearchSave").on('click', function (e) {
            HideError(true);

            $('#validationContainerAdd').hide();
            $(".validation-summary-errors-manual ul").empty();

            from = $("#FromManualSearch").val();
            to = $("#ToManualSearch").val();
            let hasErrors = false;

            hasErrors = checkManualSearchSaveForErrors(from, to);

            if (hasErrors) {
                $("#ManualSearchSave").find(".spinner").remove();
                return false;
            }

            $.ajax({
                url: window.location.pathname + '/CountManualJourneys',
                type: 'GET',
                success: function (data) {
                    SaveTravelWarrantyManualJourney(e, $("#ManualSearchComment").val());

                }
            });

            CheckAmountManualSearch(9);


        });


        $("#btnnewskacard").on("click", function () {

            var inputValue = $("#NyaSkanekortetNr").val().length;

            if (inputValue >= 0 && inputValue <= 11) {

                if (!$("#NyaSkanekortetNr-error").is(":visible")) {
                    addAriaDescribedByToInputAndShowError("NyaSkanekortetNr", "NyaSkanekortetNotFound");
                    $("#NyaSkanekortetNotFound").html("Hämtning misslyckades. Kortnumret måste vara 12 siffror");
                }

                $("#NyaSkanekortetNr").focus();
                $("#btnnewskacard").find(".spinner").remove();
                $("#newcardticket1").hide();
                $("#newcardticket2").hide();
                $("#newcardticket3").hide();
                return;

            }

            SearchNewSkaneCard();

        });

        $("#BlippaTicketNr").on("keyup", function () {
            if ($("#BlippaTicketNr").val().length <= 6) {
                $("#BlippaNotFound").hide();
                return;
            }
            ValidateBlippaTicket();
        });

        $("#PaperTicketNr").on("keyup", function () {
            if ($("#PaperTicketNr").val().length <= 6) {
                $("#PaperTicketNotFound").hide();
                return;
            }
            ValidatePaperTicket();
        });

        $("#btnjojocard1").on("click", function () {
            if (($("#JOJOCrdNr").val().length == 0 || $("#JOJOControlValCode").val().length == 0) && ($("#JOJOCrdNrDD option:selected").text().length == 0 && $("#JOJOCrdNrDD").val().length == 0)) {
                $("#btnjojocard1").prop('disabled', true);
                return;
            }
            SearchJOJO1();
        });

        $("#btnjojocard2").on("click", function () {
            if (($("#JOJOCrdNr2").val().length == 0 || $("#JOJOControlValCode2").val().length == 0) && ($("#JOJOCrdNrDD2 option:selected").text().length == 0 && $("#JOJOCrdNrDD2").val().length == 0)) {
                $("#btnjojocard2").prop('disabled', true);
                return;
            }
            SearchJOJO2();
        });


        $("#JOJOCrdNrDD").on("change", function () {
            $("#JOJOCrdNr").val("");
            $("#JOJOControlValCode").val("");
            $("#JojoCrdNotFound").hide();
            $("#btnjojocard1").prop('disabled', true);
            if ($("#JOJOCrdNrDD option:selected").text().length > 0 || $("#JOJOCrdNrDD").val().length > 0) {
                $("#btnjojocard1").prop('disabled', false);
            }
            else {
                if ($("#JOJOCrdNr").val().length == 10 && $("#JOJOControlValCode").val().length == 4) {
                    $("#btnjojocard1").prop('disabled', false);
                }
                else {
                    $("#btnjojocard1").prop('disabled', true);
                }
            }
            CheckJojoButton1();

        });


        $("#JOJOCrdNr").on("change", function () {
            if ($("#JOJOControlValCode").val().length > 0 || $("#JOJOCrdNr").val().length > 0) {
                $("#JOJOCrdNrDD").prop('selectedIndex', 0);
            }
            CheckJojoButton1();
        });

        $("#JOJOCrdNr").on('keyup blur', function () {
            if ($("#JOJOControlValCode").val().length > 0 || $("#JOJOCrdNr").val().length > 0) {
                $("#JOJOCrdNrDD").prop('selectedIndex', 0);
            }
            CheckJojoButton1();
        });

        $("#JOJOControlValCode").on("change", function () {
            if ($("#JOJOControlValCode").val().length > 0 || $("#JOJOCrdNr").val().length > 0) {
                $("#JOJOCrdNrDD").prop('selectedIndex', 0);
            }
            CheckJojoButton1();
        });

        $("#JOJOControlValCode").on('keyup blur', function () {
            if ($("#JOJOControlValCode").val().length > 0 || $("#JOJOCrdNr").val().length > 0) {
                $("#JOJOCrdNrDD").prop('selectedIndex', 0);
            }
            CheckJojoButton1();
        });

        $("#NyaSkanekortetNr").on('keyup blur', function () {
            HideError(true);
            removeAriaDescribedByValue("NyaSkanekortetNr", "NyaSkanekortetNotFound")

            if (IsNyaSkanekortetValidatedNumber != IsNyaSkanekortetValidatedNumber != $("#NyaSkanekortetNr").val()) {
                InvalidateIsNyaSkanekortet()
            }

        });

        $("#JOJOCrdNrDD2").on("change", function () {
            $("#JOJOCrdNr2").val("");
            $("#JOJOControlValCode2").val("");
            $("#JojoCrdNotFound2").hide();
            $("#btnjojocard2").prop('disabled', true);
            if ($("#JOJOCrdNrDD2 option:selected").text().length > 0 || $("#JOJOCrdNrDD2").val().length > 0) {
                $("#btnjojocard2").prop('disabled', false);
            }
            else {
                if ($("#JOJOCrdNr2").val().length == 10 && $("#JOJOControlValCode2").val().length == 4) {
                    $("#btnjojocard2").prop('disabled', false);
                }
                else {
                    $("#btnjojocard2").prop('disabled', true);
                }
            }
            CheckJojoButton2()
        });


        $("#JOJOCrdNr2").on("change", function () {
            if ($("#JOJOControlValCode2").val().length > 0 || $("#JOJOCrdNr2").val().length > 0) {
                $("#JOJOCrdNrDD2").prop('selectedIndex', 0);
            }
            CheckJojoButton2();
        });

        $("#JOJOCrdNr2").on('keyup blur', function () {
            if ($("#JOJOControlValCode2").val().length > 0 || $("#JOJOCrdNr2").val().length > 0) {
                $("#JOJOCrdNrDD2").prop('selectedIndex', 0);
            }
            CheckJojoButton2();
        });

        $("#JOJOControlValCode2").on("change", function () {
            if ($("#JOJOControlValCode2").val().length > 0 || $("#JOJOCrdNr2").val().length > 0) {
                $("#JOJOCrdNrDD2").prop('selectedIndex', 0);
            }
            CheckJojoButton2();
        });

        $("#JOJOControlValCode2").on("keyup blur", function () {
            if ($("#JOJOControlValCode2").val().length > 0 || $("#JOJOCrdNr2").val().length > 0) {
                $("#JOJOCrdNrDD2").prop('selectedIndex', 0);
            }
            CheckJojoButton2();
        });

        $("#chkJojoValueCard").on("change", function () {
            CheckJojo2();
        });


        $("#chkJojoPeriodCard").on("change", function () {
            CheckJojo2();
        });

        $("#TwoCardPayment").on("change", function () {
            $("#JojoDuplicateCard").hide();
            $("#JojoDuplicateCard2").hide();
            $("#card2").toggle();
            if ($("#TwoCardPayment").is(":checked")) {
                DisableUncheckedOptionsStep1(true); // Max 2 tickets
            }
            else {
                DisableUncheckedOptionsStep1(false);
            }
            if ($("#card2").is(":visible")) {
                if ($("#JOJOCrdNrDD option").length != $("#JOJOCrdNrDD2 option").length) {
                    $("#JOJOCrdNrDD2").empty();
                    $('#JOJOCrdNrDD option').clone().appendTo('#JOJOCrdNrDD2');
                }


                if ($("#JOJOCrdNrDD").val() != "") {
                    $("#JOJOCrdNrDD2 option[value='" + $("#JOJOCrdNrDD").val() + "']").remove();
                }
                $("#JOJOCrdNrDD2").attr('selectedIndex', 0);
            }
            else {
                $("#hfJOJOCrdNr2").val("");
                $("#JOJOCrdNr2").val("");
                $("#JOJOControlValCode2").val("");
                $("#btnjojocard2").prop("disabled", true);
                $("#divJojoCardType2").hide();
                $("#divTwoCardPayment").hide();
                if (($("#chkJojoValueCard").is(":checked")) || ($("#chkJojoPeriodCard").is(":checked"))) {
                    $("#divTwoCardPayment").show();
                    SetCardAppPayment();

                }
            }

        });

        if ($("#IsOtherTicket").is(':checked')) {
            $("#divOtherTicket").show();
        }

        if ($("#IsJOJO").is(':checked')) {
            $("#divJOJO").show();
        }

        if ($("#IsNyaSkanekortet").is(':checked')) {
            $("#divNyaSkanekortet").show();
        }



        if ($("#IsAppTicket").is(':checked')) {
            $("#divAppTicket").show();
        }

        if ($("#IsBlippaTicket").is(':checked')) {
            $("#divBlippaTicket").show();
        }

        if ($("#IsPaperTicket").is(':checked')) {
            $("#divPaperTicket").show();
        }

        if ($("#IsPrePaidTicket").is(':checked')) {
            $("#divPrePaidTicket").show();
        }

        if ($("#IsResPlusTicket").is(':checked')) {
            $("#divResPlusTicket").show();
        }
        if ($("#IsOresundRuntTicket").is(':checked')) {
            $("#divResOresundRunt").show();
        }
        if ($("#IsDenmarkDomesticTicket").is(':checked')) {
            $("#divDenmarkDomesticTicket").show();
        }

        if ($("#JOJOCrdNrDD").is(":visible")) {
            if ($("#JOJOCrdNrDD").val().length > 0) {
                $("#btnjojocard1").prop('disabled', false);
            }
        }

        $("#TravelDateString").inputmask("yyyy-mm-dd", { "placeholder": "yyyy-mm-dd" });
        $("#TravelTime").inputmask("hh:mm", { "placeholder": "hh:mm" });


        $(".travel-warranty .stopprocess").on("click", function (e) {
            travelWarrentyFom.cancelButtonClick(e);
        });

        $(".travel-warranty .continue").on("click", function (e) {
            travelWarrentyFom.nextButtonClick(e);

        });

        $(".travel-warranty .previous").on("click", function () {
            travelWarrentyFom.prevoiusButtonClick();
        });

        $(".travel-warranty .question-button").on("click", function () {
            var value = ($(this).attr("aria-expanded") == "false") ? "true" : "false";
            $(this).attr("aria-expanded", value);
        });

        $(".travel-warranty input").on("change", function () {
            $("#DepartDateTime ").val("");
            $("#warrenty-search-result").html("");
            $("#warrenty-search-result-wrapper").addClass("st-hidden").removeClass("st-visible");
            HideError(true);
        });

        $("#travel-warrenty-form input").on("change", function () {
            HideError(true);
        });

        $("#travel-warrenty-form input").on('keyup blur', function () {
            HideError(true);
        });


        $('textarea[maxlength]').on('keyup blur', function () {
            HideError(false);
            var maxlength = $(this).attr('maxlength');
            $(this).removeAttr('data-val-length-max');
            var val = $(this).val();
            if (val.length > maxlength) {
                $(this).val(val.slice(0, maxlength));
            }
            $(this).next(".wordscount").text("Du har " + (maxlength - val.length) + " tecken kvar av " + maxlength);

        });

        $(':input[type="number"]').on('keyup blur', function () {
            HideError(true);
            var maxlength = $(this).attr('maxlength');
            $(this).removeAttr('data-val-length-max');
            var val = $(this).val();
            if (val.length > maxlength) {
                $(this).val(val.slice(0, maxlength));
            }
        });

        $("form .newcardTicket").on("change", function () {
            CheckNewCardTicket();

            if (CheckTicket1To3IsChecked()) {
                $("#divOtherTicketCheckBox").show();
            }
            else {
                if (!IsAppTicketValidated) {
                    DisableIsOtherTicket()
                }
            }

        });

        $("form .paymentType").on("change", function () {
            CheckPaymentType();

            $(document).find(".field-validation-error").empty();
            $('#formError').attr('tabindex', '-1');
            $(document).find("#FormError .validation-container .validation-summary-errors ul").empty();
            switch ($(this).attr('id')) {
                case "IsJOJO":
                    if ($("#divJOJO").is(":visible")) {
                        $("#TwoCardPayment").prop('checked', false);
                        $("#divTwoCardPayment").hide();
                        $("#JOJOCrdNrDD2").val("");
                        $("#JOJOCrdNr2").val("");
                        $("#JOJOControlValCode2").val("");
                        $("#divJojoCardType2").hide();
                        $("#divJojoCardType1").hide();
                        $("#JOJOCrdNrDD").val("");
                        $("#JOJOCrdNr").val("");
                        $("#JOJOControlValCode").val("");
                        $("#btnjojocard1").prop('disabled', true);
                        $("#btnjojocard2").prop('disabled', true);
                        $("#card2").hide();
                        $("#card1Search").show();
                        HideError(true);
                    }
                    $("#divJOJO").toggle();

                    break;
                case "IsNyaSkanekortet":
                    if ($("#divNyaSkanekortet").is(":visible")) {
                        $("#NyaSkanekortetNr").val("");
                        $("#cardSkaneSearch").show();
                        HideError(true);

                        if (!$("#IsNyaSkanekortet").is(':checked')) {
                            $("#newcardticket1").hide();
                            $("#CheckTicket1").prop("checked", false);
                            $("#IsOtherTicket").prop("checked", false);

                            if (!IsAppTicketValidated) {
                                DisableIsOtherTicket();
                            }
                        }
                    }
                    $("#divNyaSkanekortet").toggle();

                    break;
                case "IsBlippaTicket":
                    if ($("#divBlippaTicket").is(":visible")) {
                        $("#BlippaTicketNr").val("");
                        $("#BlippaTicketNr").prev().removeClass("field-validation-error");
                        $("#BlippaTicketNr").prev().addClass("field-validation-valid");
                    }
                    $("#divBlippaTicket").toggle();
                    break;
                case "IsAppTicket":
                    if ($("#divAppTicket").is(":visible")) {
                        $('input[name="chooseappradio"]').prop('checked', false);
                        $("#AppTicketNr").val("");
                        $("#AppSingaporeTicketNr").val("");
                        $("#AppPhoneNr").val("");
                        $("#AppTicketNr").prev().removeClass("field-validation-error");
                        $("#AppTicketNr").prev().addClass("field-validation-valid");
                        $("#AppSingaporeTicketNr").prev().removeClass("field-validation-error");
                        $("#AppSingaporeTicketNr").prev().addClass("field-validation-valid");
                        $("#AppPhoneNr").prev().removeClass("field-validation-error");
                        $("#AppPhoneNr").prev().addClass("field-validation-valid");
                        $('input[name="chooseappradio"]').prop('checked', false);
                        $("#AppTicketNr2").val("");
                        $("#AppSingaporeTicketNr2").val("");
                        $("#AppPhoneNr2").val("");
                        $("#AppTicketNr2").prev().removeClass("field-validation-error");
                        $("#AppTicketNr2").prev().addClass("field-validation-valid");
                        $("#AppSingaporeTicketNr2").prev().removeClass("field-validation-error");
                        $("#AppSingaporeTicketNr2").prev().addClass("field-validation-valid");
                        $("#AppPhoneNr2").prev().removeClass("field-validation-error");
                        $("#AppPhoneNr2").prev().addClass("field-validation-valid");
                        $("#divTwoAppPayment").hide();
                        $("#divApp2").hide();

                        if (!$("#IsAppTicket").is(':checked')) {
                            IsAppTicketValidated = false;
                            $('#TwoAppPayment').prop('checked', false);

                            if (!CheckTicket1To3IsChecked())
                                DisableIsOtherTicket();
                        }

                    }
                    else {
                        var value = $("#AppType").val();
                        if (value != "") {
                            $("input[name=chooseappradio][value=" + value + "]").prop('checked', true);


                        }
                        InitAppTicketNumber(value, "");

                        var value = $("#AppType2").val();
                        if (value != "") {
                            $("input[name=chooseappradio2][value=" + value + "]").prop('checked', true);


                        }
                        InitAppTicketNumber(value, "2");
                    }
                    $("#divAppTicket").toggle();
                    break;
                case "IsPaperTicket":
                    if ($("#divPaperTicket").is(":visible")) {
                        $("#PaperTicketNr").val("");
                        $("#PaperTicketNr").prev().removeClass("field-validation-error");
                        $("#PaperTicketNr").prev().addClass("field-validation-valid");
                    }
                    $("#divPaperTicket").toggle();
                    break;
                case "IsPrePaidTicket":
                    if ($("#divPrePaidTicket").is(":visible")) {
                        $("#PrePaidOneWayTicketBookingNr").val("");
                    }
                    $("#divPrePaidTicket").toggle();
                    break;
                case "IsResPlusTicket":
                    $("#divResPlusTicket").toggle();
                    break;
                case "IsOresundRuntTicket":
                    $("#OresundRuntDescription").val("");
                    $("#divResOresundRunt").toggle();
                    break;
                case "IsDenmarkDomesticTicket":
                    $("#divDenmarkDomesticTicket").toggle();
                    break;
                case "IsNoTicket":
                    $("#divNoTicket").toggle();
                    break;
                case "IsOtherTicket":
                    if ($("#divOtherTicket").is(":visible")) {
                        ClearOtherTicketFields();
                    }
                    $("#divOtherTicket").toggle();

                    break;
                default:
                    break;
            }
        });

        $("form .otherType").on("change", function () {
            $("#divOtherAlternatives").toggle();
            $("#IsNoTicket").prop("checked", false);
            $("#NoTicketDescription").val("");
            $("#divNoTicket").hide();
        });

        $("#warrenty-search-result").on("click", ".bigradio", function () {
            setJourneyValuesStandardSearch($(this).find(".routeKeyStandard").val());
        });

        $(".travel-warranty").on("click", "input[name='routeKey']", function () {
            setJourneyValues($(this).val());
        });

        $(".travel-warranty").on("click", "input[name='routeKeyMulti']", function () {
            setJourneyValues($(this).val());
            setJourneyValuesStandardSearch($(this).val());
        });

        $('.travel-warranty button').on('click', function () {
            var href = $(this).data('href');

            if (href != null)
                window.location = href;

            return false;
        });

        $("#find-trip-form-warrenty-panel").on("change", ".js-from-requierd", function () {
            /* Hantera Sök resa knappen om den skall vara aktiv eller inte */
            var enableButton = true;
            $("#divStandardSearch .js-from-requierd").each(function () {
                if ($(this).val() == "") {
                    /* Hoppa ut ur loop om något fält saknar värde. */
                    enableButton = false;
                    return false;
                }

                return true;
            });
            if (!enableButton) {
                $('#find-trip-form-warrenty-panel #searchTravelWarrenty').prop("disabled", true);
            } else {
                $('#find-trip-form-warrenty-panel #searchTravelWarrenty').prop("disabled", false);
            }
        });

        $(".multiSearchItem").on("change", ".js-from-requierd", function () {


            var parent = $(this).closest("div.multiSearchItem");
            /* Hantera Sök resa knappen om den skall vara aktiv eller inte */
            if (parent.is(":visible")) {
                var enableButton = true;


                if (parent.find(".travelFromMulti").val() == "" || parent.find(".frompointid").val() == "" || parent.find(".travelToMulti").val() == "" || parent.find(".topointid").val() == "") {
                    enableButton = false;
                }
                if (!enableButton) {
                    parent.find('.searchTravelWarrentyMulti').prop("disabled", true);
                } else {
                    parent.find('.searchTravelWarrentyMulti').prop("disabled", false);
                }
            }
        });
        $(".scroll-search-result").on("click", function () {
            $(this).addClass('loading-animation');
            var scrollType = $(this).attr("data-scroll");
            SearchWarrantyStandard(scrollType, "");
            $(this).removeClass('loading-animation');
        });
        /* Hitta resa på TravelWarranty */
        $("#searchTravelWarrenty").on("click", function () {
            HideError(true);
            SearchWarrantyStandard("", "");
            //ga('send', 'event', 'ResegarantiOnline', 'Steg2: Reseuppgifter');
        });
        /* Hitta resa på TravelWarranty */
        $(".searchTravelWarrentyMulti").on("click", function () {
            HideError(true);
            SearchWarrantyStandard("", "");
            $("#warrenty-search-result-wrapper-multi").show();
            //ga('send', 'event', 'ResegarantiOnline', 'Steg2: Reseuppgifter');
        });

        // Event listener for input change
        $(".st-radio-button__input").change(function () {
            updateAriaCheckedOnRadio();
            updateRadiosIfDisabled()
        });

        $(".st-checkbox__input").change(function () {
            updateAriaCheckedOnCheckbox();
            updateCheckboxesIfDisabled()
        });

        /* Travel warranty file uplaod */
        $(".travel-warranty-file-upload__input").on("change", function (e) {
            var parentDiv = $(this).closest('.input-group');
            var fileValue = parentDiv.find('.travel-warranty-file-upload__file-value:first');
            var noFileSelectedText = parentDiv.find('[name=no-file-selected]').val();
            var files = e.target.files;
            fileValue.text('');

            if (files.length > 0) {
                displayFileName(this, files)
            } else {
                fileValue.text(noFileSelectedText);
            }
        })

        function displayFileName(target, files) {
            var parentDiv = $(target).closest('.input-group');
            var fileValue = parentDiv.find('.travel-warranty-file-upload__file-value:first');
            var removeFileText = $("#removeFile").val();
            for (var i = 0; i < files.length; i++) {
                fileValue.append(`<span class="reciept_filenams" data-filename="${files[i].name}">${files[i].name} </span><button type="button" aria-label="${removeFileText}: ${files[i].name}" class="travel-warranty-file-upload__remove-file standard-btn secondary">${removeFileText}</button>`);
            }
            $(window).trigger('st.file-added');
        }

        $('.travel-warranty-file-upload__remove-file').on('click', function () {
            event.preventDefault();
            var parentDiv = $(this).closest('.input-group');
            var uploadButton = parentDiv.find('.travel-warranty-file-upload__input:first');


            var errormsg = parentDiv.find('.field-validation-error');

            errormsg.empty();
            errormsg.removeClass('field-validation-error').addClass('field-validation-valid');

            var data = {
                FileName: $.trim($(this).closest('.input-group').find('.travel-warranty-file-upload__file-name').data('filename'))
            }

            var url = window.location.pathname
            $.ajax({
                type: "DELETE",
                url: url + "/DeleteReceipt",
                data: data,
            })

            uploadButton.val('');
            uploadButton.trigger('change');
        })

        $('.travel-warranty-file-upload__input').change(function () {
            $(this).valid()
        })

        $(document).on('click', '.travel-warranty-file-upload__remove-file', function () {
            event.preventDefault();
            var parentDiv = $(this).closest('.input-group');

            var errormsg = parentDiv.find('.field-validation-error');

            errormsg.empty();
            errormsg.removeClass('field-validation-error').addClass('field-validation-valid');


            var uploadButton = parentDiv.find('.travel-warranty-file-upload__input:first');
            uploadButton.val('');
            uploadButton.trigger('change');
        });
    }
};

var TicketGuide = function () {
    var baseUrl = $("#ticketGuideServiceUrl").val(),
        path = [],
        sendRequest = function (direction) {
            var lastGuid = path.length > 0 ? path[path.length - 1] : $("#guideStartGuid").val();

            var params = { "pageToDisplayGuidString": lastGuid, "direction": direction };
            $.ajax({
                url: baseUrl,
                cache: false,
                data: params,
                type: "POST",
                success: function (resultData) {

                    $(".ticket-guide .introduction").hide();
                    $(".ticket-guide .question").show();

                    $(".guide-sections").html(resultData.html);
                    $("#previousStepInTicketGuide").val(resultData.previus);

                    if ($("#previousStepInTicketGuide").val() == $("#guideStartGuid").val() || resultData.forcehidepreviousbutton) {
                        hideButton(".ticket-guide .back");
                    } else {
                        showButton(".ticket-guide .back");
                    }


                    if (resultData.direction == "prev") {
                        var guidToSelect = path.pop();
                        $(".guide-sections .options li").each(function () {
                            var itemGuid = $(this).attr("data-selected-guid");
                            if (guidToSelect == itemGuid) {
                                $(this).addClass("check");
                                $("#selectedStepInTicketGuide").val(guidToSelect);
                            }
                        });
                    }



                },
                error: function (response, status, error) {
                    console.log(response);
                    console.log(status);
                    console.log(error);
                }
            });
        },

        nextStep = function () {
            var selectedGuid = $("#selectedStepInTicketGuide").val();


            if (selectedGuid != "" || path.length == 0) {
                var guideStartGuid = $("#guideStartGuid").val();
                var guidToFetch = selectedGuid != "" ? selectedGuid : guideStartGuid;

                path.push(guidToFetch);


                $("#selectedStepInTicketGuide").val("");

                $(".ticket - guide.next").prop("disabled", true);



                sendRequest("next");
            }
        },
        previousStep = function () {
            sendRequest("prev");
        },
        calculateTickets = function (numAdults, numChildren) {
            var duoTic = 0;
            var adultTic = 0;
            var childTic = 0;
            var calulationMesage = "";

            while (numAdults >= 2 && numChildren >= 3) {
                numAdults = numAdults - 2;
                numChildren = numChildren - 3;
                calulationMesage = calulationMesage + "2 vuxna + 3 barn<br>";
                duoTic++;
            }
            //2	1 vuxen + 4 barn
            while (numAdults >= 1 && numChildren >= 4) {
                numAdults = numAdults - 1;
                numChildren = numChildren - 4;
                calulationMesage = calulationMesage + "1 vuxen + 4 barn<br>";
                duoTic++;
            }
            //3	2 vuxna + 2 barn
            while (numAdults >= 2 && numChildren >= 2) {
                numAdults = numAdults - 2;
                numChildren = numChildren - 2;
                calulationMesage = calulationMesage + "2 vuxna + 2 barn<br>";
                duoTic++;
            }
            //4	5 barn
            while (numChildren >= 5) {
                numChildren = numChildren - 5;
                calulationMesage = calulationMesage + "5 barn<br>";
                duoTic++;
            }
            //5	1 vuxen + 3 barn
            while (numAdults >= 1 && numChildren >= 3) {
                numAdults = numAdults - 1;
                numChildren = numChildren - 3;
                calulationMesage = calulationMesage + "1 vuxen + 3 barn<br>";
                duoTic++;
            }
            //6	2 vuxna + 1 barn
            while (numAdults >= 2 && numChildren >= 1) {
                numAdults = numAdults - 2;
                numChildren = numChildren - 1;
                calulationMesage = calulationMesage + "2 vuxna + 1 barn<br>";
                duoTic++;
            }
            //7	4 barn
            while (numChildren >= 4) {
                numChildren = numChildren - 4;
                calulationMesage = calulationMesage + "4 barn<br>";
                duoTic++;
            }
            //8	1 vuxen + 2 barn
            while (numAdults >= 1 && numChildren >= 2) {
                numAdults = numAdults - 1;
                numChildren = numChildren - 2;
                calulationMesage = calulationMesage + "1 vuxen + 2 barn<br>";
                duoTic++;
            }
            //9	2 vuxna
            while (numAdults >= 2) {
                numAdults = numAdults - 2;
                calulationMesage = calulationMesage + "2 vuxna<br>";
                duoTic++;
            }
            //Enkel vuxen
            while (numAdults >= 1) {
                numAdults = numAdults - 1;
                calulationMesage = calulationMesage + "Enkel vuxen<br>";
                adultTic++;
            }
            //Enkel Barn
            while (numChildren >= 1) {
                numChildren = numChildren - 1;
                calulationMesage = calulationMesage + "Enkel Barn<br>";
                childTic++;
            }
            // GA::Event::Biljettguide-->billigaste biljetten
            //ga('send', 'event', 'BiljettGuide', 'Billigaste biljetten');
            return { "duoTic": duoTic, "adultTic": adultTic, "childTic": childTic };
        },
        hideButton = function (elementId) {
            $(elementId).removeClass("st-visible").addClass("st-hidden");
        },
        showButton = function (elementId) {
            $(elementId).removeClass("st-hidden").addClass("st-visible");
        },

        resetGuide = function () {
            $(".guide-sections").empty();
            $(".ticket-guide .introduction").show();
            $("#selectedStepInTicketGuide").val("");
            path = [];
        },
        init = function () {
            initButtons();
        },
        hideCalculationResult = function () {
            $("#duoTicketElement").hide();
            $("#adultTicketElement").hide();
            $("#childTicketElement").hide();
        },
        initButtons = function () {

            // Ticket guide - Previous step
            $(".ticket-guide").on("click", ".back", function () {
                ticketGuide.previousStep();

            });

            // Ticket guide - Duo calculator Next step, this has to be executed before the regular .next click event.
            $(".ticket-guide").on("click", ".next-step-duo-button", function () {
                $("#selectedStepInTicketGuide").val($(this).attr("data-selected-guid"));
            });

            // Ticket guide - Next step
            $(".ticket-guide").on("click", ".next", function () {

                ticketGuide.nextStep();
            });


            // Ticket guide - Start over
            $(".ticket-guide").on("click", ".start-over", function () {
                // GA::Event::TicketGuide-->Biljettguiden.close
                //ga('send', 'event', 'BiljettGuide', 'BiljettGuide Omstart');
                ticketGuide.resetGuide();
            });


            // Ticket guide - Start over
            $(".ticket-guide").on("click", ".close", function () {
                // GA::Event::BiljettGuide-->stäng
                //ga('send', 'event', 'BiljettGuide', 'BiljettGuide Stängd');
                ticketGuide.resetGuide();

            });

            // Ticket guide - select option
            $(".ticket-guide").on("click", " .question .options li", function () {
                $(this).siblings().removeClass("check");
                $(this).addClass("check");
                $("#selectedStepInTicketGuide").val($(this).attr("data-selected-guid"));

            });

            $(".ticket-guide").on("click", "#calculateDuoTickets", function () {
                hideCalculationResult();

                var numAdults = $("#txtAdults").val();
                var numChildren = $("#txtChildren").val();

                var result = calculateTickets(numAdults, numChildren);

                $("#duoTicketValue").html(result.duoTic);
                $("#adultTicketValue").html(result.adultTic);
                $("#childTicketValue").html(result.childTic);
                if (result.duoTic > 0) {
                    $("#duoTicketElement").show();
                }
                if (result.adultTic > 0) {
                    $("#adultTicketElement").show();
                }
                if (result.childTic > 0) {
                    $("#childTicketElement").show();
                }

            });
        }
    return {
        nextStep: nextStep,
        previousStep: previousStep,
        resetGuide: resetGuide,
        init: init,
        hideCalculationResult: hideCalculationResult
    };
}

/* Burger menu module */
var BurgerMenu = function () {
    var button = $(".burger-btn"),
        menu = $(".burger-nav"),
        cssClass = {
            expand: "expand"
        },
        visible = false,

        show = function () {
            button.addClass(cssClass.expand);
            menu.addClass(cssClass.expand);
            visible = true;
        };

    return {
        toggle: function () {
            visible ? this.hide() : show();
        },

        hide: function () {
            button.removeClass(cssClass.expand);
            menu.removeClass(cssClass.expand);
            visible = false;
        }
    }
}

/* Desktop translate module */
var TranslateMenu = function () {
    var button = $(".translate-desktop-btn"),
        menu = $(".translate-desktop"),
        cssClass = {
            expand: "expand"
        },
        visible = false,

        show = function () {
            button.addClass(cssClass.expand);
            menu.addClass(cssClass.expand);
            visible = true;
        };

    return {
        toggle: function () {
            visible ? this.hide() : show();
        },

        hide: function () {
            button.removeClass(cssClass.expand);
            menu.removeClass(cssClass.expand);
            visible = false;
        }
    }
}

/* Search form module */
var SearchForm = function () {
    var cssClass = {
        travelSearch: ".travel-search",
        searchForm: ".search-form",
        searchResult: ".search-result",
        searchDivider: ".search-divider",
        newSearchBar: ".new-search-bar",
        newSearchBarText: ".new-search-bar p",
        newSearchBarArrow: ".new-search-bar .red-arrow",
        visible: "st-visible",
        hidden: "st-hidden",
        down: "down",
        up: "up"
    },

        show = function (element) {
            element.removeClass(cssClass.hidden).addClass(cssClass.visible);
        },

        hide = function (element) {
            element.removeClass(cssClass.visible).addClass(cssClass.hidden);
        },

        expandNewSearchBar = function (container) {
            var newSearchBarText = container.find(cssClass.newSearchBarText),
                newSearchBarArrow = container.find(cssClass.newSearchBarArrow);

            newSearchBarText.eq(1).removeClass(cssClass.hidden).addClass(cssClass.visible);
            newSearchBarText.eq(0).removeClass(cssClass.visible).addClass(cssClass.hidden);
            newSearchBarArrow.removeClass(cssClass.down).addClass(cssClass.up);

            if ($(".travel-search .travel-search-trip").hasClass("hidden")) {
                $(".travel-search .travel-search-trip").removeClass("hidden");
            }
            if ($(".travel-search .time-mode").hasClass("hidden")) {
                $(".travel-search .time-mode").removeClass("hidden");
            }

        },

        collapseNewSearchBar = function (container) {
            var newSearchBarText = container.find(cssClass.newSearchBarText),
                newSearchBarArrow = container.find(cssClass.newSearchBarArrow);

            newSearchBarText.eq(1).removeClass(cssClass.visible).addClass(cssClass.hidden);
            newSearchBarText.eq(0).removeClass(cssClass.hidden).addClass(cssClass.visible);
            newSearchBarArrow.removeClass(cssClass.up).addClass(cssClass.down);
        },

        isVisible = function (element) {
            return element.is(":visible");
        };

    return {
        showSearchedState: function (container, subContainer) {
            hide(container.find(cssClass.searchForm));
            show(container.find(cssClass.newSearchBar));
            hide(container.find(cssClass.searchDivider));
            show(container.find(cssClass.searchResult));
            collapseNewSearchBar(container);

            if (subContainer != null) {
                hide($(subContainer).siblings());
                show($(subContainer));
            }
        },

        showSearchForm: function (container) {
            show(container.find(cssClass.searchForm));
            show(container.find(cssClass.searchDivider));
            expandNewSearchBar(container);
        },

        hideSearchForm: function (container) {
            hide(container.find(cssClass.searchForm));
            hide(container.find(cssClass.searchDivider));
            collapseNewSearchBar(container);
        },

        toggleSearchForm: function (searchBar) {
            var container = searchBar.closest(cssClass.travelSearch);
            isVisible(container.find(cssClass.searchForm)) ? this.hideSearchForm(container) : this.showSearchForm(container);
        },

        switchTab: function (element) {

            var container = $('#' + element);
            hide(container.siblings(cssClass.travelSearch));
            show(container);
            switch (element) {
                case "from-stop-container":
                    $("#fromStop").focus();

                    break;
                case "traffic-info-container":
                    $("#cityId").focus();
                    break;
                case "find-trip-container":
                    //$("#from").focus();

                    break;
                default:
                    //$("#from").focus();
                    break;
            }
        },
        init: function () {

            if ($('.urgent-traffic-info').is(":visible")) {
                $('.urgent-traffic-info').focus();
            }
        }
    }
}

var TravelPrice = function () {
    var travelPrice = {
        init: init
    };
    return travelPrice;



    function init() {
        //alert("travelPrice init");
        var groupMaxAmountTraveller = parseInt($("#groupMaxAmountTraveller").val());
        $(".route-prices-button").prop('disabled', true);
        $(".adultAmount").val(0);
        $(".adultAmount").placeholder = "[0-" + groupMaxAmountTraveller + "]";
        $(".childrenAmount").val(0);
        $(".childrenAmount").placeholder = "[0-" + groupMaxAmountTraveller + "]";
        $(".studentAmount").val(0);
        $(".studentAmount").placeholder = "[0-" + groupMaxAmountTraveller + "]";
        $("#results-group").addClass("st-hidden");

        $(".adultAmount").on('keyup mouseup', function () {
            if ($(this).val().indexOf("-") >= 0) {
                var newVal = $(this).val().replace("-", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf("+") >= 0) {
                var newVal = $(this).val().replace("+", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf(".") >= 0) {
                var newVal = $(this).val().replace(".", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf(",") >= 0) {
                var newVal = $(this).val().replace(",", "");
                $(this).val(newVal)
            }

            var sequenceNo = $(this).attr('data-sequensNo');
            EnableCalculateGroupPriceButton(sequenceNo);
        })

        $(".childrenAmount").on('keyup mouseup', function () {
            if ($(this).val().indexOf("-") >= 0) {
                var newVal = $(this).val().replace("-", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf("+") >= 0) {
                var newVal = $(this).val().replace("+", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf(".") >= 0) {
                var newVal = $(this).val().replace(".", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf(",") >= 0) {
                var newVal = $(this).val().replace(",", "");
                $(this).val(newVal)
            }

            var sequenceNo = $(this).attr('data-sequensNo');
            EnableCalculateGroupPriceButton(sequenceNo);
        });

        $(".studentAmount").on('keyup mouseup', function () {
            if ($(this).val().indexOf("-") >= 0) {
                var newVal = $(this).val().replace("-", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf("+") >= 0) {
                var newVal = $(this).val().replace("+", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf(".") >= 0) {
                var newVal = $(this).val().replace(".", "");
                $(this).val(newVal)
            }

            if ($(this).val().indexOf(",") >= 0) {
                var newVal = $(this).val().replace(",", "");
                $(this).val(newVal)
            }

            var sequenceNo = $(this).attr('data-sequensNo');
            EnableCalculateGroupPriceButton(sequenceNo);
        });

        function HideTravelPriceError(sequenceNo) {
            $(".groupMaxAmountTravellerError").eq(sequenceNo).addClass('st-hidden').removeClass("st-visible");
            $(".groupMinAmountTravellerError").eq(sequenceNo).addClass('st-hidden').removeClass("st-visible");
            $(".groupError").eq(sequenceNo).addClass('st-hidden').removeClass("st-visible");
            $(".groupConstactCustomerServiceMsg").eq(sequenceNo).addClass('st-hidden').removeClass("st-visible");
            $(".singaporeError").eq(sequenceNo).addClass('st-hidden').removeClass('st-visible');
        }

        function EnableCalculateGroupPriceButton(sequenceNo) {

            $(".results-group").eq(sequenceNo).removeClass('st-visible').addClass("st-hidden");

            var adult = isNumeric($(".adultAmount").eq(sequenceNo).val()) ? parseInt($(".adultAmount").eq(sequenceNo).val()) : 0;
            var children = isNumeric($(".childrenAmount").eq(sequenceNo).val()) ? parseInt($(".childrenAmount").eq(sequenceNo).val()) : 0;
            var student = isNumeric($(".studentAmount").eq(sequenceNo).val()) ? parseInt($(".studentAmount").eq(sequenceNo).val()) : 0;
            var groupMaxAmountTraveller = parseInt($("#groupMaxAmountTraveller").val());
            var groupMinAmountTraveller = parseInt($("#groupMinAmountTraveller").val());

            HideTravelPriceError(sequenceNo);

            if ((adult + children + student) >= groupMinAmountTraveller) {

                if ((adult + children + student) <= groupMaxAmountTraveller) {
                    $(".route-prices-button").eq(sequenceNo).prop('disabled', false);
                }
                else {

                    //ga('send', 'event', 'SökResa', 'Se Resans Pris. Stor tillsammansresa');
                    $(".route-prices-button").eq(sequenceNo).prop('disabled', true);

                    if (parseInt($("#groupDaysConstactCustomerService").val()) > 0) {
                        var find = '-';
                        var re = new RegExp(find, 'g');

                        var tmpDate = new Date();

                        var dd = tmpDate.getDate();
                        var mm = tmpDate.getMonth() + 1; //January is 0!
                        var yyyy = tmpDate.getFullYear();

                        if (dd < 10) { dd = '0' + dd }

                        if (mm < 10) { mm = '0' + mm }

                        var today = parseDate(mm + '/' + dd + '/' + yyyy);;

                        var journeyTmpDate = $('.trip').eq(sequenceNo).attr('data-travel-date').replace(re, "/");
                        var journeyDate = parseDate(journeyTmpDate.substr(5, 2) + '/' + journeyTmpDate.substr(8, 2) + '/' + journeyTmpDate.substr(0, 4));;

                        if ((daydiff(today, journeyDate)) >= parseInt($("#groupDaysConstactCustomerService").val())) {
                            $(".groupConstactCustomerServiceMsg").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");

                        }
                        else {
                            $(".groupMaxAmountTravellerError").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");
                        }
                    }
                    else {
                        $(".groupMaxAmountTravellerError").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");
                    }

                }
            }
            else {
                $(".route-prices-button").eq(sequenceNo).prop('disabled', true);
            }
        }

        function parseDate(str) {
            var mdy = str.split('/');
            return new Date(mdy[2], mdy[0] - 1, mdy[1]);
        }

        function daydiff(first, second) {
            return Math.round((second - first) / (1000 * 60 * 60 * 24));
        }

        $(".route-prices-button").click("click", function () {
            //alert(".route-prices-button click");
            //ga('send', 'event', 'SökResa', 'Se Resans Pris. Se tillsammanspris');
            sequenceNo = $(this).attr("data-sequensno");
            isOresundJourney = $(this).attr("data-oresund");
            HideTravelPriceError(sequenceNo);
            var url = $(".travelpageurl").val();
            var adults = $(".adultAmount").eq(sequenceNo).val();
            var childrens = $(".childrenAmount").eq(sequenceNo).val();
            var students = $(".studentAmount").eq(sequenceNo).val();

            if ($.trim(adults) == "") {
                adults = 0;
                $(".adultAmount").eq(sequenceNo).val(0);
            }

            if ($.trim(childrens) == "") {
                childrens = 0;
                $(".childrenAmount").eq(sequenceNo).val(0);
            }

            if ($.trim(students) == "") {
                students = 0;
                $(".studentAmount").eq(sequenceNo).val(0);
            }

            oldPrices = routeGroupOldPrice(parseInt(adults) + parseInt(students), parseInt(childrens));

            var adultsOldTickets = oldPrices.adultTic;
            var childrensOldTickets = oldPrices.childTic;
            var duoOldTickets = oldPrices.duoTic;

            var normalPriceAdult = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].NormalPriceAdult;
            var normalPriceChild = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].NormalPriceChild;
            var normalPriceStudent = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].NormalPriceStudent;
            var normalPriceGroupDiscount = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].NormalPriceGroupDiscount;

            var dayPriceAdult = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].DayPriceAdult;
            var dayPriceChild = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].DayPriceChild;
            var dayPriceStudent = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].DayPriceStudent;
            var dayPriceGroupDiscount = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].DayPriceGroupDiscount;

            var periodPriceAdult = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].PeriodPriceAdult;
            var periodPriceChild = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].PeriodPriceChild;
            var periodPriceStudent = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].PeriodPriceStudent;
            var periodPriceGroupDiscount = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].PeriodPriceGroupDiscount;
            var currency = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].Currency;

            var sevenDaysPriceAdult = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].SevenDaysPriceAdult;
            var sevenDaysPriceChild = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].SevenDaysPriceChild;
            var sevenDaysPriceStudent = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].SevenDaysPriceStudent;
            var sevenDaysPriceGroupDiscount = $.parseJSON($("#JourneySingaporePricesJson").val())[sequenceNo].SevenDaysPriceGroupDiscount;


            var fullPriceChild = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].FullPriceChild;
            var fullPriceAdult = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].FullPriceAdult;
            var fullPriceDuo = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].FullPriceDuo;
            var reskassaPriceAdult = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].ReskassaPriceAdult;
            var reskassaPriceChild = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].ReskassaPriceChild;
            var reskassaPriceDuo = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].ReskassaPriceDuo;
            var onboardPriceAdult = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].OnboardPriceAdult;
            var onboardPriceChild = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].OnboardPriceChild;
            var onboardPriceDuo = $.parseJSON($("#JourneyPricesJson").val())[sequenceNo].OnboardPriceDuo;
            $.ajax({
                url: url + "GetGroupPrices",
                cache: false,
                type: 'GET',
                data: {
                    JourneyKey: sequenceNo, Adults: adults, Childrens: childrens, Students: students, DuoOldTickets: duoOldTickets, AdultsOldTickets: adultsOldTickets, ChildrensOldTickets: childrensOldTickets,
                    NormalPriceAdult: normalPriceAdult, NormalPriceChild: normalPriceChild, NormalPriceStudent: normalPriceStudent, NormalPriceGroupDiscount: normalPriceGroupDiscount,
                    DayPriceAdult: dayPriceAdult, DayPriceChild: dayPriceChild, DayPriceStudent: dayPriceStudent, DayPriceGroupDiscount: dayPriceGroupDiscount, PeriodPriceAdult: periodPriceAdult, PeriodPriceChild: periodPriceChild,
                    PeriodPriceStudent: periodPriceStudent, PeriodPriceGroupDiscount: periodPriceGroupDiscount, Currency: currency,
                    FullPriceChild: fullPriceChild, FullPriceAdult: fullPriceAdult, FullPriceDuo: fullPriceDuo, ReskassaPriceAdult: reskassaPriceAdult,
                    ReskassaPriceChild: reskassaPriceChild, ReskassaPriceDuo: reskassaPriceDuo,
                    OnboardPriceAdult: onboardPriceAdult, OnboardPriceChild: onboardPriceChild, OnboardPriceDuo: onboardPriceDuo, IsOresundJourney: isOresundJourney,
                    OnboardPriceAdult: onboardPriceAdult, OnboardPriceChild: onboardPriceChild, OnboardPriceDuo: onboardPriceDuo, IsOresundJourney: isOresundJourney,
                    SevenDaysPriceAdult: sevenDaysPriceAdult, SevenDaysPriceChild: sevenDaysPriceChild,
                    SevenDaysPriceStudent: sevenDaysPriceStudent, SevenDaysPriceGroupDiscount: sevenDaysPriceGroupDiscount
                },

                success: function (data) {

                    if (data.IsError == false) {
                        // Set data 

                        $("#results-group .row.singleJourney .new").eq(sequenceNo).find("p").html(((data.NormalPriceGroup > 0) ? (data.NormalPriceGroup.toFixed(2) + " " + data.Currency) : "-"));
                        $("#results-group .row.travelPassHoursJourney .new").eq(sequenceNo).find("p").html(((data.DayPriceGroup > 0) ? (data.DayPriceGroup.toFixed(2) + " " + data.Currency) : "-"));
                        $("#results-group .row.travelPassDaysJourney .new").eq(sequenceNo).find("p").html(((data.PeriodPriceGroup > 0) ? (data.PeriodPriceGroup.toFixed(2) + " " + data.Currency) : "-"));
                        $("#results-group .row.travelSevenDaysJourney .new").eq(sequenceNo).find("p").html(((data.SevenDaysPriceGroup > 0) ? (data.SevenDaysPriceGroup.toFixed(2) + " " + data.Currency) : "-"));

                        $("#results-group .row.singleJourney .old").eq(sequenceNo).find("p").html(((data.NormalPriceGroupOld > 0) ? (data.NormalPriceGroupOld.toFixed(2) + " " + data.Currency) : "-"));
                        $("#results-group .row.singleJourney .oldnormal").eq(sequenceNo).find("p").html(((data.NormalPriceGroupOldNormal > 0) ? (data.NormalPriceGroupOldNormal.toFixed(2) + " " + data.Currency) : "-"));


                        if (data.NormalPriceGroupOldOnboard > 0) {
                            var path = $("#ordinaryPriceGrouptravelURL").val();
                            if (!path) {
                                $("#results-group .prices-remark-row1").eq(sequenceNo).html($("#onboardPrice").val() + " " + data.NormalPriceGroupOldOnboard.toFixed(2) + " " + data.Currency);
                            }
                            else {
                                var newPath = path.toString().slice(0, -1);
                                $("#results-group .prices-remark-row1").eq(sequenceNo).html("<a href=" + newPath + ">" + $("#onboardPrice").val() + '</a>' + " " + data.NormalPriceGroupOldOnboard.toFixed(2) + " " + data.Currency);
                            }
                        }
                        else {
                            $("#results-group .prices-remark-row1").eq(sequenceNo).removeClass("st-visible").addClass("st-hidden");
                            $("#results-group .row.singleJourney .old").eq(sequenceNo).find("p").removeClass("prices-star");
                        }

                        var priceMsg = $("#groupPriceMsg").val();
                        var duoMsg = $("#groupPriceDuoMsg").val();
                        var adultMsg = $("#groupPriceAdultMsg").val();
                        var childMsg = $("#groupPriceChildMsg").val();


                        if (adultsOldTickets > 0 && childrensOldTickets == 0 && duoOldTickets == 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + adultsOldTickets + " " + adultMsg);
                        }

                        if (adultsOldTickets > 0 && childrensOldTickets > 0 && duoOldTickets == 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + adultsOldTickets + " " + adultMsg + " och " + childrensOldTickets + " " + childMsg);
                        }

                        if (adultsOldTickets > 0 && childrensOldTickets == 0 && duoOldTickets > 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + duoOldTickets + " " + duoMsg + " och " + adultsOldTickets + " " + adultMsg);
                        }

                        if (adultsOldTickets > 0 && childrensOldTickets > 0 && duoOldTickets > 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + duoOldTickets + " " + duoMsg + " , " + adultsOldTickets + " " + adultMsg + " och " + childrensOldTickets + " " + childMsg);
                        }

                        if (adultsOldTickets == 0 && childrensOldTickets > 0 && duoOldTickets == 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + childrensOldTickets + " " + childMsg);
                        }

                        if (adultsOldTickets == 0 && childrensOldTickets > 0 && duoOldTickets > 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + duoOldTickets + " " + duoMsg + " och " + childrensOldTickets + " " + childMsg);
                        }

                        if (adultsOldTickets == 0 && childrensOldTickets == 0 && duoOldTickets > 0) {
                            $("#results-group .prices-remark-row2").eq(sequenceNo).html(priceMsg + " " + duoOldTickets + " " + duoMsg);
                        }

                        $(".results-group").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");

                        if (!$("#results-group .prices-remark-row1").eq(sequenceNo).is(":visible")) {
                            $("#results-group .prices-remark-row1").eq(sequenceNo).html($("#results-group .prices-remark-row2").eq(sequenceNo).html());
                            $("#results-group .prices-remark-row1").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");
                            $("#results-group .prices-remark-row2").eq(sequenceNo).removeClass('st-visible').addClass("st-hidden");
                            $("#results-group .row.singleJourney .old").eq(sequenceNo).find("p").addClass("prices-star");
                        }

                    }
                    else {
                        // Show error
                        $(".groupError").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");
                        $(".results-group").eq(sequenceNo).removeClass('st-visible').addClass("st-hidden");
                    }
                },
                error: function (data, status, error) {
                    // Show error
                    $(".groupError").eq(sequenceNo).removeClass('st-hidden').addClass("st-visible");
                    $(".results-group").eq(sequenceNo).removeClass('st-visible').addClass("st-hidden");
                }
            });
            $(this).css("padding", "");
        });




        function routeGroupOldPrice(numAdults, numChildren) {
            var duoTic = 0;
            var adultTic = 0;
            var childTic = 0;
            var calulationMesage = "";

            while (numAdults >= 2 && numChildren >= 3) {
                numAdults = numAdults - 2;
                numChildren = numChildren - 3;
                duoTic++;
            }
            //2	1 vuxen + 4 barn
            while (numAdults >= 1 && numChildren >= 4) {
                numAdults = numAdults - 1;
                numChildren = numChildren - 4;
                duoTic++;
            }
            //3	2 vuxna + 2 barn
            while (numAdults >= 2 && numChildren >= 2) {
                numAdults = numAdults - 2;
                numChildren = numChildren - 2;
                duoTic++;
            }
            //4	5 barn
            while (numChildren >= 5) {
                numChildren = numChildren - 5;
                duoTic++;
            }
            //5	1 vuxen + 3 barn
            while (numAdults >= 1 && numChildren >= 3) {
                numAdults = numAdults - 1;
                numChildren = numChildren - 3;
                duoTic++;
            }
            //6	2 vuxna + 1 barn
            while (numAdults >= 2 && numChildren >= 1) {
                numAdults = numAdults - 2;
                numChildren = numChildren - 1;
                duoTic++;
            }
            //7	4 barn
            while (numChildren >= 4) {
                numChildren = numChildren - 4;
                duoTic++;
            }
            //8	1 vuxen + 2 barn
            while (numAdults >= 1 && numChildren >= 2) {
                numAdults = numAdults - 1;
                numChildren = numChildren - 2;
                duoTic++;
            }
            //9	2 vuxna
            while (numAdults >= 2) {
                numAdults = numAdults - 2;
                duoTic++;
            }
            //Enkel vuxen
            while (numAdults >= 1) {
                numAdults = numAdults - 1;
                adultTic++;
            }
            //Enkel Barn
            while (numChildren >= 1) {
                numChildren = numChildren - 1;
                childTic++;
            }
            // GA::Event::Biljettguide-->billigaste biljetten
            return { "duoTic": duoTic, "adultTic": adultTic, "childTic": childTic };
        }

        function isNumeric(n) {
            return !isNaN(parseFloat(n)) && isFinite(n);
        }
    }

};

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

/* Initialize modules */
var searchForm = new SearchForm();
var searchMenu = new SearchMenu();
var burgerMenu = new BurgerMenu();
var translateMenu = new TranslateMenu();
var ticketGuide = new TicketGuide();
var travelWarrentyFom = new TravelWarrentyForm();
var crmFrom = new CrmForm();
var form = new Form();
var travelPrice = new TravelPrice();

$(document).ready(function () {
    $(document).on("click", ".openchat", function () {
        if (CallGuideChatClient && CallGuideChatClient.api)
            return CallGuideChatClient.api.showChatForm();
    });

    $(document).on("click", ".openchatServiceresor", function () {
        //var width = window.innerWidth * 0.40;
        // define the height in
        //var height = (width * window.innerHeight / window.innerWidth) * 1.5;
        // Ratio the hight to the width as the user screen ratio
        //window.open("https://wds.ace.teliacompany.com/wds/instances/JlLKjqJt18/serviceresor.html","Servicechatt", 'width=' + width + ', height=' + height + ', top=' + ((window.innerHeight - height) / 2) + ', left=' + ((window.innerWidth - width) / 2));

        window.open("https://wds.ace.teliacompany.com/wds/instances/JlLKjqJt18/serviceresor.html", "Servicechatt", 'width=300,height=380,resizable=yes , scrollbars=yes,top=100,left=350');
    });

    //Autocomplete search
    $(".find-autocomplete").jQueryUiAutocomplete({
        source: function (request, response) {
            $.ajax({
                url: '/webapi/search/autocomplete',
                dataType: 'json',
                contentType: 'application/json',
                data: request,
                type: 'Get',
                success: function (data) {
                    response(data);
                },
                error: function (xmlHttpRequest, textStatus, errorThrown) {
                    console.log(textStatus);
                    response([]);
                }
            });
        }
    });

    //TravelWarranty Step 4 Email validation error fix
    $(document).on("keyup blur", "#Email", function () {
        if ($(this).hasClass('input-validation-error')) {
            $('.field-validation-error[data-valmsg-for="Email"]').html($('#invalidEmailMessage').val())
        }
    });

    //SearchTimetablesPage
    $(document).on("click", "#timetable-increase", function () {
        var $qty = $(this).closest('.quantity-selecter').find('.timetablequantity');
        var currentVal = parseInt($qty.text());
        if (!isNaN(currentVal)) {
            $qty.text(currentVal + 1);

            var link = $qty.parent().siblings(".linkDiv").children(".hitlink").attr('href')
            var text = $qty.parent().siblings(".linkDiv").children(".hitlink").text();
            var quantity = (currentVal + 1);
            var format = '<li value=' + link + '><span quantity>' + quantity.toString() + '</span>' + " st " + text + '</li>'

            if (currentVal < 1) {
                $("#selectedTimeTables").append(format);
            }
            else {
                $('#selectedTimeTables li:contains(' + text + ')').replaceWith(format);
            }

            showTimetableForm();
            MaxCheckboxes();
        }
    });

    $(document).on("click", "#timetable-decrease", function () {
        var $qty = $(this).closest('.quantity-selecter').find('.timetablequantity');
        var currentVal = parseInt($qty.text());
        if (!isNaN(currentVal) && currentVal > 0) {
            $qty.text(currentVal - 1);

            var link = $qty.parent().siblings(".linkDiv").children(".hitlink").attr('href')
            var text = $qty.parent().siblings(".linkDiv").children(".hitlink").text();
            var quantity = (currentVal - 1);
            var format = '<li value=' + link + '>' + quantity.toString() + " st " + text + '</li>'

            if (currentVal > 1) {
                $('#selectedTimeTables li:contains(' + text + ')').replaceWith(format);
            }
            else {
                $('#selectedTimeTables li:contains(' + text + ')').remove();
            }

            showTimetableForm();
            MaxCheckboxes();
        }
    });

    $(document).on("click", ".trip", function () {
        var routeinfo = $(this).find(".route-details .deviations").html();
        var footnotetext = $(this).find(".route-details .footnotes").html();
        if (routeinfo != null || footnotetext != null) {
            if (routeinfo.length > 3 || footnotetext.length > 3) {
                $(this).find(".route-details").toggle();
            }
        }

        //console.log(footnotetext.length);

    });

    function showTimetableForm() {
        if ($('#selectedTimeTables li').length > 0) {
            $("#SendTimetables").prop('disabled', false);
        }
        else {
            $("#SendTimetables").prop('disabled', true);
            $(".SendTimetables").hide();
        }
    }


    $('.SendTimetablesForm input').on('blur keyup', function () {
        enableSendButton();
    });


    $('.SendTimetablesForm').on('change', "#" + Skanetr.ConsentStuff.Ids.chkConsentId, function () {
        var checkbox = $(this);
        var isChecked = "true" === Skanetr.ConsentStuff.Funcs.TransferConsentToHidden(checkbox, Skanetr.ConsentStuff.Ids.hfConsentId);
        enableSendButton();
    });

    validationRules();

    function enableSendButton() {
        if ($(".SendTimetablesForm").valid()) {
            $('#SendButton').prop('disabled', false);
        } else {
            $('#SendButton').prop('disabled', true);
        }
    }


    function CheckTimeTablesError(element) {
        var keepVisible = false;
        if (element.prev(".field-validation-error").is(":visible")) {
            keepVisible = true;
        }
        CheckAllFieldsTimeTables();
        if (keepVisible) {
            element.prev(".field-validation-error").show()
        }

    }



    function CheckTimeTablesErrorOnFocus(element) {
        var keepVisible = false;
        if (element.prev(".field-validation-error").is(":visible")) {
            keepVisible = true;
        }

        CheckAllFieldsTimeTables();


        if (keepVisible && $.trim($(element).val()).length > 0) {
            element.prev(".field-validation-error").show()
        }


    }

    $(".mintwo").focus(function () {
        CheckTimeTablesErrorOnFocus($(this));
    });

    $(".minthree").focus(function () {
        CheckTimeTablesErrorOnFocus($(this));
    });

    function CheckAllFieldsTimeTables() {
        $(".mintwo").each(function (index) {
            if ($.trim($(this).val()).length == 0) {
                if ($(this).prev(".field-validation-error").is(":visible")) {
                    $(this).prev(".field-validation-error").hide();
                }
            }
        });

        $(".minthree").each(function (index) {
            if ($.trim($(this).val()).length == 0) {
                if ($(this).prev(".field-validation-error").is(":visible")) {
                    $(this).prev(".field-validation-error").hide();
                }
            }
        });

    }


    $(".mintwo").blur(function () {
        CheckAllFieldsTimeTables();
    });

    $(".minthree").blur(function () {
        CheckAllFieldsTimeTables();
    });



    $('body').on('keydown', '.SendTimetablesForm .minthree', function (e) {
        CheckTimeTablesError($(this));
    });

    $('body').on('keyup', '.SendTimetablesForm .minthree', function (e) {
        CheckTimeTablesError($(this));
    });

    $('body').on('keydown', '.SendTimetablesForm .mintwo', function (e) {
        CheckTimeTablesError($(this));
    });

    $('body').on('keyup', '.SendTimetablesForm .mintwo', function (e) {
        CheckTimeTablesError($(this));
    });

    $('body').on('keydown', '.SendTimetablesForm #postalcode', function (e) {
        $('.ajax-error').hide();
    });
    //rules for the form
    function validationRules() {

        var NotNumbersNotAllowedChars = new RegExp(/^[^_\|\½\§\!\""\@\#\£\¤\$\%\/\{\(\[\)\]\=\}\+\?\\\*\;\<\>\d]+$/);
        var NotAllowedChars = new RegExp(/^[^_\|\½\§\!\""\@\#\£\¤\$\%\/\{\(\[\)\]\=\}\+\?\\\*\;\<\>]+$/);

        var name_invalid = function (value) {
            return NotNumbersNotAllowedChars.test(value);
        }

        var adress_invalid = function (value) {
            return NotAllowedChars.test(value);
        }

        $.validator.addMethod("regexNumbersNotAllowed", function (value, element) {
            return name_invalid(value);
        }, $('#NotNumbersNotAllowedCharsError').val());

        $.validator.addMethod("NotAllowedChars", function (value, element) {
            return adress_invalid(value);
        }, $('#NotAllowedCharsError').val());

        $.validator.addMethod("consentMustBeChecked", function (value, element) {
            var isChecked = Skanetr.ConsentStuff.Funcs.ValidateConsent() === "true";
            return isChecked;
        }, $('#consentMustBeTrueError').val());

        $(".SendTimetablesForm").validate({
            errorPlacement: function (error, element) {
                error.insertBefore(element);
            },
            errorClass: "field-validation-error",
            rules: {
                firstname: {
                    regexNumbersNotAllowed: true,
                    required: true,
                    minlength: 2
                },
                lastname: {
                    regexNumbersNotAllowed: true,
                    required: true,
                    minlength: 2
                },
                careof: {
                    minlength: 2
                },
                streetadress: {
                    NotAllowedChars: true,
                    required: true,
                    minlength: 3
                },
                postalcode: {
                    required: true,
                },
                city: {
                    required: true,
                    minlength: 2
                },
                country: {
                    //required: true,
                    //minlength: 2
                },
                ConsentAccepted: {
                    consentMustBeChecked: true
                }
            },
            messages: {
                firstname: {
                    required: $('#firstNameValidation').val(),
                    minlength: "Fyll i minst två bokstäver"
                },
                lastname: {
                    required: $('#lastNameValidation').val(),
                    minlength: "Fyll i minst två bokstäver"
                },
                careof: {
                    minlength: "Fyll i minst två bokstäver"
                },
                streetadress: {
                    required: $('#streetAdressValidation').val(),
                    minlength: "Fyll i minst tre bokstäver"
                },
                postalcode: {
                    required: $('#postalCodeValidation').val(),
                },
                city: {
                    required: $('#cityValidation').val(),
                    minlength: "Fyll i minst två bokstäver"
                },
                country: {
                    required: $('#countryValidation').val(),
                    minlength: "Fyll i minst två bokstäver"
                },
                ConsentAccepted: {
                    consentMustBeChecked: $("#consentMustBeTrueError").val()
                }

            }

        });
    }

    $('#trafic-info-meansoftransport-nav > li').on("click", function (e) {
        $('.HitList').hide();
        $('.SendTimetablesButton').hide();
    });


    //Show div
    $("#SendTimetables").click(function () {

        $(".SendTimetables").show();
        enableSendButton();
        $('html, body').animate({
            scrollTop: $("#TimetablesForm").offset().top
        }, 600);
        $('#SendTimetables').blur();

        $(".mintwo").prev(".field-validation-error").hide();
        $(".minthree").prev(".field-validation-error").hide();

        $("#" + Skanetr.ConsentStuff.Ids.chkConsentId).prev(".field-validation-error").hide();
    });



    //Hide on cancel button click
    $(document).on("click", "#cancelButton", function () {

        $('#cancelButton .spinner').hide();
        $(".SendTimetables").hide();
        $('html, body').animate({
            scrollTop: $("#main").offset().top
        }, 600);
    });

    //ajax request to controller
    $("#SendButton").click(function () {
        var FirstName = $('#firstname').val()
        var LastName = $('#lastname').val()
        var CareOf = $('#careof').val()
        var StreetAdress = $('#streetadress').val()
        var PostalCode = $('#postalcode').val()
        var City = $('#city').val()
        var Country = $('#country').val()
        var timeTables = [];
        //var timeTablesObject = { quantity: "", value: "" }
        //var timeTables = new timeTablesObject();
        var consentAcceptedHidden = Skanetr.ConsentStuff.Funcs.ValidateConsent({ hfConsentId: "hiddenConsentAccepted", chkConsentId: "chkConsentAccepted" }); //, hfWhenLoggedInId: "hiddenWhenLoggedIn" 

        data = {};
        $("#selectedTimeTables li").each(function (index) {
            data = {
                Value: $(this).attr('value'),
                Quantity: $(this).find('span').text()
            };
            timeTables.push(data);
        });

        $.ajax({
            url: "SendTimeTables",
            type: 'POST',
            data: JSON.stringify({ 'consentAcceptedHidden': consentAcceptedHidden, 'firstname': FirstName, 'lastname': LastName, 'careof': CareOf, 'streetadress': StreetAdress, 'postalcode': PostalCode, 'city': City, 'country': Country, 'selectedtimetables': timeTables }),
            dataType: 'json',
            contentType: 'application/json',
            success: function (result) {
                if (result.success) {
                    location.href = result.success
                }
                else {
                    $('.ajax-error').html("<p>" + result.error + "</p>");
                    $('.ajax-error').show();
                    $(".spinner").remove();
                }
            },
            error: function (result) {
                $('.ajax-error').html("<p>" + result.error + "</p>")
                $(".spinner").remove();
            }
        });
    });

    /*/Global values */
    var dataTravelId; /*get/set id of selected item from autoComplete list*/

    if ($(".campaignAreaWrapper").is(":visible")) {
        var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");

        if (msie > 0 || navigator.userAgent.match(/Trident.*rv:11\./)) {
            $(".ticketblock").find('img:first').css('width', '100%');
        }
        $(".campaignArea").show();

    }
    // Notify GA if a ResegarntiOnline issue has been approved or not
    if ($("#divConfirmation").is(":visible")) {
        var approved = $("#serviceResponseRGOLApproved").val();
        var url = window.location.pathname;
        $.post(url + "ClearSession");
        // GA::Event::ResegarantiOnline-->Utfall true/false (status pending = false)
        //ga('send', 'event', 'ResegarantiOnline', 'Utfall: ' + approved);
    }

    var selectedTabFindTrip = getParameterByName('TabFindTrip');
    switch (selectedTabFindTrip) {
        case "0":
            $(".travel-tab").removeClass('active-tab');
            $('ul[role="tablist"]').children().eq(selectedTabFindTrip).addClass('active-tab');
            searchForm.switchTab("find-trip-container");
            break;
        case "1":
            $(".travel-tab").removeClass('active-tab');
            $('ul[role="tablist"]').children().eq(selectedTabFindTrip).addClass('active-tab');
            searchForm.switchTab("from-stop-container");
            break;
        case "2":
            $(".travel-tab").removeClass('active-tab');
            $('ul[role="tablist"]').children().eq(selectedTabFindTrip).addClass('active-tab');
            searchForm.switchTab("traffic-info-container");
            break;
        default:
            break;
    }


    var submitBtn = $('.travel-search .search-form, .search-buttons').find('.standard-btn');
    $(submitBtn).on('click', function () {
        //debugger;
        $(this).addClass('loading-animation');
    });


    $(":not(.my-account) button").click(function (e) {
        if (this.classList.contains("info-box-button") === true || this.classList.contains("st-main-menu__item__login") === true || this.classList.contains("st-header__main__top__action") === true || this.classList.contains("duet-date__day") === true || this.classList.contains("duet-date__toggle") === true || this.classList.contains("duet-date__prev") === true || this.classList.contains("duet-date__next") === true || this.classList.contains("duet-date__close") === true || this.classList.contains("st-button") === true || this.classList.contains("tt-button") === true || this.classList.contains("FormSubmitButton") === true)
            return;

        if (this.classList !== "swap-btn" || this.classList !== "st-button") {
            var currentStep = parseInt($("#currentStep").val());
            if ($("#IsNyaSkanekortet").is(':checked') && currentStep == 1) {
                $('#newcardtickets').children('.ticketid').each(function () {
                    if ($("#hfTicketIds").val() == '') {
                        $("#hfTicketIds").val(this.id);
                    }
                    else {
                        $("#hfTicketIds").val($("#hfTicketIds").val() + ';' + this.id);
                    }
                });
            }
            showScriptSpinner(this);
            if (submitBtn == this) {
                $(".spinner").remove();
            }
        }
    });

    $("#find-trip-form-panel").on("change", ".js-from-requierd", function () {
        /* Hantera Sök resa knappen om den skall vara aktiv eller inte */
        var enableButton = true;
        $("#find-trip-form-panel .js-from-requierd").each(function () {
            if ($(this).val() == "") {
                /* Hoppa ut ur loop om något fält saknar värde. */
                enableButton = false;
                return false;
            }
            return true;
        });
        if (!enableButton) {
            $('#find-trip-form-panel input[type="submit"]').prop("disabled", true);
        } else {
            $('#find-trip-form-panel input[type="submit"]').prop("disabled", false);
        }
    });

    /* Undvik översättning av ETIS relaterad information */

    $(".q-autocomplete").addClass("skiptranslate");

    $(".trip").addClass("skiptranslate");
    $("#result-place-holder-stadsbuss .trip").addClass("skiptranslate");
    $("div.row-adult").addClass("skiptranslate");
    $("div.row-child").addClass("skiptranslate");
    $("div.row-duo").addClass("skiptranslate");
    $("#cityId").addClass("skiptranslate");

    //$("div.input-wrapper.select").addClass("skiptranslate");

    $("#municipalitieId").addClass("skiptranslate");
    $("#trainLineNo").addClass("skiptranslate");

    /* Q1401647 ta bort 2 följande linjer när "dölja laddningsvalet" hävs*/
    $(".voucher-selection #Voucher6").next().hide();
    $(".voucher-selection #Voucher6").hide();

    $(document).on('click', '.scroll-search-result', function () {
        $(this).find('.black-arrow').addClass('loading-animation');
    });
      
    /* FileUpload DisplayTemplate, visa filnamnen som man valt för att ladda upp. */
    $(".crm-form-page").on("change", "#fileCrmUplod", function () {
        var files = $(this)[0].files;
        var $target = $("#file-value");

        $target.empty();
        if (files.length > 0) {

            for (var i = 0; i < files.length; i++) {
                $target.append("<li>" + files[i].name + "</li>");
            }
        } else {
            $target.append("<li>" + $("#noFileSelectedMessageHolder").val() + "</li>");
        }

    });

    /* AutoComplete för hållpats och adress */
    $("#from").autocomplete(
        {
            containerSelector: "~ .q-autocomplete.from",
            targetPointTypeElementCssClassName: "frompointtype",
            targetPointIdElementCssClassName: "frompointid",
            targetPointNameElementCssClassName: "frompointname",
            usePreviousSearches: true

        });
    $("#to").autocomplete(
        {
            containerSelector: "~ .q-autocomplete.to",
            targetPointTypeElementCssClassName: "topointtype",
            targetPointIdElementCssClassName: "topointid",
            targetPointNameElementCssClassName: "topointname",
            usePreviousSearches: true
        });


    $("#fromStop").autocomplete(
        {
            searchMethod: "searchStops",
            containerSelector: "~ .q-autocomplete.fromStop",
            targetPointTypeElementCssClassName: "frompointtype",
            targetPointIdElementCssClassName: "frompointid",
            targetPointNameElementCssClassName: "frompointname",
            targetPointXPosElementCssClassName: "frompointx",
            targetPointYPosElementCssClassName: "frompointy"

        });
    $("#fromTrafficInfo").autocomplete(
        {
            containerSelector: "~ .q-autocomplete.fromTrafficInfo",
            targetPointTypeElementCssClassName: "frompointtype",
            targetPointIdElementCssClassName: "frompointid",
            targetPointNameElementCssClassName: "frompointname"
        });
    $("#toTrafficInfo").autocomplete(
        {
            containerSelector: "~ .q-autocomplete.toTrafficInfo",
            targetPointTypeElementCssClassName: "topointtype",
            targetPointIdElementCssClassName: "topointid",
            targetPointNameElementCssClassName: "topointname"
        });

    /* AutoComplete ReseGarantiOnline TravelWarrantyOnline*/
    $("#TravelFrom").autocomplete({
        searchMethod: "searchstopsmuncipalityfilter",
        containerSelector: "~ .q-autocomplete.from",
        targetPointIdElementCssClassName: "frompointid",
        targetPointNameElementCssClassName: "frompointname"
    });

    $("#TravelTo").autocomplete({
        searchMethod: "searchstopsmuncipalityfilter",
        containerSelector: "~ .q-autocomplete.to",
        targetPointIdElementCssClassName: "topointid",
        targetPointNameElementCssClassName: "topointname"
    });


    $("#TravelFromMulti").autocomplete({
        searchMethod: "searchstops", //"searchstopsmuncipalityfilter",
        containerSelector: "~ .q-autocomplete.from",
        targetPointTypeElementCssClassName: "frompointtype",
        targetPointIdElementCssClassName: "frompointid",
        targetPointNameElementCssClassName: "frompointname"
    });


    //$(".travelFromMulti").autocomplete({

    $("#TravelToMulti").autocomplete({
        searchMethod: "searchstops", //"searchstopsmuncipalityfilter",
        containerSelector: "~ .q-autocomplete.to",
        targetPointTypeElementCssClassName: "topointtype",
        targetPointIdElementCssClassName: "topointid",
        targetPointNameElementCssClassName: "topointname"
    });

    //$(".travelToMulti").autocomplete({

    $("#TravelFromStandard").autocomplete({

        containerSelector: "~ .q-autocomplete.from",
        targetPointTypeElementCssClassName: "frompointtype",
        targetPointIdElementCssClassName: "frompointid",
        targetPointNameElementCssClassName: "frompointname",
        usePreviousSearches: true
    });

    $("#TravelToStandard").autocomplete(
        {
            containerSelector: "~ .q-autocomplete.to",
            targetPointTypeElementCssClassName: "topointtype",
            targetPointIdElementCssClassName: "topointid",
            targetPointNameElementCssClassName: "topointname",
            usePreviousSearches: true
        });

    $('.flexslider').flexslider({
        animation: "fade",
        slideshow: false
    });



    /* Get values of the selected autocomplete item */
    $(document).on("click", "li[role=presentation]", function () {

        dataTravelId = $(this).attr("data-travel-id");

    });

    /* Search buttons */
    $(".search-btn, .search-desktop-btn").on("click", function () {
        burgerMenu.hide();
        searchMenu.toggle();
        return false;
    });

    /* Mobile burger button */
    $(".burger-btn").on("click", function () {
        searchMenu.hide();
        burgerMenu.toggle();
        return false;
    });

    /* Close search button */
    $(".close-search .content").on("click", function () {
        searchMenu.hide();
        $(".search-btn, .search-desktop-btn").attr("aria-expanded", "false");
    });

    /* Translate button */
    $(".translate-desktop-btn").on("click", function () {
        translateMenu.toggle();
        return false;
    });

    /* Toggle ARIA expanded */
    $("body").on("click", ".aria-expand, button[aria-expanded], a[aria-expanded]", function (event) {

        const closestLink = event.target.closest('a');
        // Exclude click on chat dialog
        if (closestLink && closestLink.classList.contains("humany_direktchatt")) {
            event.stopPropagation();
            return;
        }


        // Exclude click inside Cookiebot dialog
        if ($(event.target).closest("#CybotCookiebotDialog").length !== 0 || $(event.target).closest("#StPageLibrary").length !== 0) {
            event.stopPropagation();
            return;
        }

        var value = ($(this).attr("aria-expanded") == "false") ? "true" : "false";
        $(this).attr("aria-expanded", value);
    });

    function setLinksAriaExpanded(target) {
        let id = target.getAttribute('aria-controls');
        let content = document.getElementById(id);

        let link = content.getElementsByTagName('a');
        [...link].forEach(a => {
            let tabindex = target.getAttribute('aria-expanded') === 'true' ? '0' : '-1';
            a.setAttribute('tabindex', tabindex);
        })
    }

    /* Toggle links tabindex while expanded/closed */
    $(document).ready(function () {
        $(".theme-page-expander .expand-btn").each(function () {
            setLinksAriaExpanded(this)
        });
    });

    function setAriaLabelText(target) {
        let showMoreText = $(target).closest('li').find('#showMoreText').val();
        let showLessText = $(target).closest('li').find('#showLessText').val();

        var activeSpanID = $(target).find('span.active-bar').attr('id');

        if (activeSpanID === 'moreButton') {
            $(target).attr('aria-label', showMoreText);
        } else if (activeSpanID === 'lessButton') {
            $(target).attr('aria-label', showLessText);
        }
    }

    /* Toggle theme expander */
    $("body").on("click", ".theme-page-expander .expand-btn", function () {
        $(this).prev(".block-content").toggleClass("expand");
        $(this).prev(".block-content").attr("aria-hidden", $(this).prev(".block-content").attr("aria-hidden") === "true" ? "false" : "true");
        $(this).prev(".block-content").find("h2").focus();
        $(this).find("span").toggleClass("active-bar");
        $(this).find("span").toggleClass("up").toggleClass("down");
        if (!$(this).prev(".block-content").hasClass("expand")) {
            if ($(window).scrollTop()) {
                $("html, body").animate({ scrollTop: $(this).prev(".block-content").position().top - 30 }, 1000);
            }
        }
        setLinksAriaExpanded(this)
        setAriaLabelText(this);
    });

    /* Toggle urgent traffic info expander */
    $(".urgent-traffic-info .expand-btn").on("click", function () {
        $(this).prev(".content").find(".details").toggleClass("expand");
        if ($(".urgent-traffic-info .expand-btn").attr("aria-expanded") === "false") {
            $(".heading").find("h1").focus();
        }
        $(this).find("span").toggleClass("active-bar");
        $(this).find("span").toggleClass("up").toggleClass("down");
    });

    /* Toggle news archive filter */
    $(".news-archive .expand-btn").on("click", function () {
        $(this).next(".news-filter").toggleClass("expand");
        $(this).next(".news-filter").toggle();
        $(this).find("span").toggleClass("up").toggleClass("down");

        $(this).next(".news-filter").attr('aria-expanded', function (i, attr) {
            return attr == 'true' ? 'false' : 'true'
        });
    });

    /* Toggle customer service navs */
    $(".customer-service .self-service .box > button").on("click", function () {
        $(this).next(".card-services").toggle();
        $(this).find(".arrow-small").toggleClass("up").toggleClass("down");
    });

    /* Toggle answer in q-n-a */
    $(".questions li button").on("click", function () {
        $(this).next(".answer").toggle();
        $(this).find(".question").toggleClass("plus").toggleClass("minus");
    });
    $(".questions .question-button").on("click", function () {
        $(this).next(".answer").toggle();
        $(this).find(".question").toggleClass("plus").toggleClass("minus");
    });

    /* Toggle info in 'Contact us' and SearchTimetablesPage */
    $(".service-expand-btn .title").on("click", function () {
        $(this).next(".info").toggle();
        $(this).toggleClass("down").toggleClass("up");
    });

    /* Hide search results when clicking the X in Chrome */
    $("input[type=search]").on('search', function () {
        if ($(this).val().length == 0) {
            $(this).parent().removeClass("active-q");
            $(this).next().css({ "display": "none" });
        }
    });

    /* Select all text in search inputs upon click */
    $("input[type=search]").on('focus', function () {
        $(this).one('mouseup', function () {
            $(this).select();
            return false;
        })
            .select();
    });

    /* Populate overlay span with selected value */
    $(".input-wrapper.select select").on("change", function () {
        $(this).siblings(".select-value").html($(this).children("option").filter(":selected").text());
    }).change();

    // Populate selected month
    $("#month").siblings(".select-value").html($("#month").children("option").filter(":selected").text());

    /* Tab nav ARIA selected */
    $("a[role=tab]").on('click', function (e) {
        $(this).parents("ul[role=tablist]").find("a[role=tab]").attr("aria-selected", "false");
        $(this).attr("aria-selected", "true");
        $(this).parents("ul[role=tablist]").find('li').removeClass('active-tab');
        $(this).parent().addClass("active-tab");
        e.preventDefault();
    });


    $(".tab-nav .travel-tab").on('click', function (e) {
        // GA::Event::SökResa-->Huvudtab (Sök resa/Från Hållplats/Trafikinfo
        switch (this.attributes['1'].nodeValue) {
            case "traffic-info":
                //ga('send', 'event', 'SökResa', 'Sökalternativ: Trafikinfo');
                break;
            case "from-stop":
                //ga('send', 'event', 'SökResa', 'Sökalternativ: Från Hållplats');
                break;
            case "find-trip":
                //ga('send', 'event', 'SökResa', 'Sökalternativ: Sök Resa');
                break;
        }
        e.preventDefault();
    });


    $(".tab-nav-small a[role=tab]").on('click', function (e) {
        // GA::Event::SökResa-->Sök resa från Hållplats-->Trafikslag
        switch (this.attributes['0'].nodeValue) {
            case "from-stop-tab-regionsbuss":
                //ga('send', 'event', 'SökResa', 'Från Hållplats trafikslag: Regionbuss');
                break;
            case "from-stop-tab-tag":
                //ga('send', 'event', 'SökResa', 'Från Hållplats trafikslag: Tåg');
                break;
            default:
            //ga('send', 'event', 'SökResa', 'Från Hållplats trafikslag: Stadsbuss');
        }
        e.preventDefault();
    });

    $('#search-type-tab-nav a[role=tab]').on('click', function () {
        searchForm.switchTab($(this).attr('aria-controls'));
    });

    /* Tab nav ARIA selected */
    $("#from-stop-form a[role=button]").on('click', function () {
        $(this).parents("ul[role=tablist]").find("a[role=button]").attr("aria-selected", "false");
        $(this).attr("aria-selected", "true");
    });

    /*Tab nav secondary*/
    $("#trafic-info-meansoftransport-nav a[role=tab]").on('click', function () {
        var targetPanel = "#" + $(this).attr("aria-controls");
        var traficInfoTabSelected = $("#search-trafic-info-form a[aria-selected=true]").parent().index();
        $('.route-traffic-info .secondary-panel').removeClass('st-visible').addClass('st-hidden');
        $(targetPanel).removeClass('st-hidden').addClass("st-visible");
        $(this).parent().attr('aria-selected', 'true');
        $('#traficInfoSearchType').val(traficInfoTabSelected);
        // Reset selected trafick info dropdowns.
        // GA::Event::SökResa-->Trafikinformation tab klickad
        //ga('send', 'event', 'SökResa', 'Trafikinformation Tab: ' + this.innerText);
        $(".route-traffic-info .frompointname").val("");
        $(".route-traffic-info select").each(function () {
            if ($(this).children().length > 0) {
                $($(this).children()[0]).attr('selected', 'selected');
                $(this).change();
            }
        });
        switch (traficInfoTabSelected) {
            case 1:
                $("#cityId").focus();
                break;
            case 2:
                $("#municipalitieId").focus();
                break;
            case 0:
                $("#trainLineNo").focus();
                break;

            default:
                $("#trainLineNo").focus();
                break;
        }
    });

    /* Traffic info type of search */
    $(".travel-type").find("button").on('click', function () {
        var searchBy = $(this).data("travel-type");
        var line = $(".route-traffic-info");
        var travel = $(".travel-traffic-info");
        if (searchBy == "line") {
            line.removeClass("st-hidden");
            travel.addClass("st-hidden");
        } else {
            travel.removeClass("st-hidden");
            line.addClass("st-hidden");
        }
    });

    /* Switch button ARIA pressed */
    $(".switch-toggle").find("button").on('click', function () {
        $(this).siblings().attr("aria-pressed", "false");
        $(this).attr("aria-pressed", "true");
    });



    $(".q-autocomplete.fromStop").click(function (e) {
        if ($(window).scrollTop()) {
            $(window).scrollTop($('.travel-search.from-stop').position().top);
        }
    });



    $('body').on('keydown', '.travel-search input#fromStop', function (e) {
        if (e.which == 9) {
            e.preventDefault();
            if ($('.q-autocomplete.fromStop').is(":visible")) {
                $('.q-autocomplete.fromStop').focus();
            }
        }
    });


    $('body').on('keyup', '.travel-search input#fromStop', function (e) {
        if (e.which == 9 || e.which == 13) {
            e.preventDefault();
            if ($(window).scrollTop()) {
                $(window).scrollTop($('.travel-search.from-stop').position().top);
            }
        }
    });

    $(".q-autocomplete.from").click(function (e) {
        $(".travel-search input#to").focus();
    });

    $(".q-autocomplete.to").click(function (e) {
        $(".travel-search .active-opt").focus();
    });

    $('body').on('keydown', '.travel-search input#from', function (e) {
        if (e.which == 9) {
            e.preventDefault();
            if ($('.q-autocomplete.from').is(":visible")) {
                $('.q-autocomplete.from').focus();
            }
        }
    });

    $('body').on('keydown', '.travel-search input#to', function (e) {
        if (e.which == 9) {
            e.preventDefault();
            if ($('.q-autocomplete.to').is(":visible")) {
                $('.q-autocomplete.to').focus();
            }
        }
    });

    var shiftTabClicked = false;

    $('body').on('keyup', '.travel-search input#from', function (e) {
        if (e.which == 9 || e.which == 13) {
            if (!shiftTabClicked) {
                e.preventDefault();
                $(".travel-search input#to").focus();
            }
            shiftTabClicked = false;
        }
    });

    $('body').on('keyup', '.travel-search input#to', function (e) {

        if (e.which === 9 && e.shiftKey) {
            if (!shiftTabClicked) {
                shiftTabClicked = true;
            } else {
                e.preventDefault();
                shiftTabClicked = false;
                $(".travel-search input#from").focus();
            }

        }
        else if (e.which == 9 || e.which == 13) {
            e.preventDefault();
            $(".travel-search .active-opt").focus();
        }
    });

    $('.travel-search input#to').focusin(function () {
        if ($(window).scrollTop()) {
            $(window).scrollTop($('.travel-search').position().top);
        }
        if ($(".travel-search .travel-search-trip").hasClass("hidden")) {
            $(".travel-search .travel-search-trip").removeClass("hidden");
        }
        if ($(".travel-search .time-mode").hasClass("hidden")) {
            $(".travel-search .time-mode").removeClass("hidden");
        }
        // apply only if search has been done from startpage
        var activeTabIndex = $("#search-type-tab-nav a[aria-selected=true]").parent().index();
        if (activeTabIndex == -1) {
            if (!$(".heroimage").hasClass("reduceHeroImageHeight")) {
                $(".heroimage").addClass("reduceHeroImageHeight");
            }
            if (!$(".heroimage + div, #main-content").hasClass("repositionHeroImage")) {
                $(".heroimage + div, #main-content").addClass("repositionHeroImage");
            }
        }

    });
    $('.travel-search input#from').focusin(function () {
        if ($(window).scrollTop()) {
            $(window).scrollTop($('.travel-search').position().top);
        }
        if ($(".travel-search .travel-search-trip").hasClass("hidden")) {
            $(".travel-search .travel-search-trip").removeClass("hidden");
        }
        if ($(".travel-search .time-mode").hasClass("hidden")) {
            $(".travel-search .time-mode").removeClass("hidden");
        }
        // apply only if search has been done from startpage
        var activeTabIndex = $("#search-type-tab-nav a[aria-selected=true]").parent().index();
        if (activeTabIndex == -1) {
            if (!$(".heroimage").hasClass("reduceHeroImageHeight")) {
                $(".heroimage").addClass("reduceHeroImageHeight");
            }
            if (!$(".heroimage + div, #main-content").hasClass("repositionHeroImage")) {
                $(".heroimage + div, #main-content").addClass("repositionHeroImage");
            }
        }

    });

    $('.travel-search .active-opt').focusin(function () {
        if ($(window).scrollTop()) {
            $(window).scrollTop($('.travel-search').position().top);
        }
    });

    /* Swap button for "From/To" in travel search */
    $(".swap-btn").click(function (e) {
        e.preventDefault();
        var from = $(".travel-search input#from").val();
        $(".travel-search input#from").val($(".travel-search input#to").val());
        $(".travel-search input#to").val(from);

        var toPointType = $("#find-trip-form-panel .topointtype").val();
        var toPointId = $("#find-trip-form-panel .topointid").val();
        var toPointName = $("#find-trip-form-panel .topointname").val();
        var fromPointType = $("#find-trip-form-panel .frompointtype").val();
        var fromPointId = $("#find-trip-form-panel .frompointid").val();
        var fromPointName = $("#find-trip-form-panel .frompointname").val();

        $("#find-trip-form-panel .topointtype").val(fromPointType);
        $("#find-trip-form-panel .topointid").val(fromPointId);
        $("#find-trip-form-panel .topointname").val(fromPointName);

        $("#find-trip-form-panel .frompointtype").val(toPointType);
        $("#find-trip-form-panel .frompointid").val(toPointId);
        $("#find-trip-form-panel .frompointname").val(toPointName);

        return false;
    });

    /* Switch button for "Travel earliest/Arrive latest" in travel search */
    $(".switch-toggle.time-mode button").click(function () {
        $(".switch-toggle.time-mode button").removeClass("active-opt");
        $(this).addClass("active-opt").addClass("focus");

        if ($(".traveldatetype").size() > 0) {
            $(".traveldatetype").val($(this).attr("data-travel-type"));
        }
        return false;
    });
    /* Remove focus from switch button on blur */
    $(".switch-toggle.time-mode button").blur(function () {
        $(this).removeClass("focus");
    });

    /* Switch button for "Traffic info" in travel search */
    $(".switch-toggle.travel-type button").click(function () {
        $(".switch-toggle.travel-type button").removeClass("active-opt");
        $(this).addClass("active-opt").addClass("focus");
        return false;
    });

    /* Remove focus from switch button on blur */
    $(".switch-toggle.travel-type button").blur(function () {
        $(this).removeClass("focus");
    });

    $(".travel-warranty button.abort").on('click', function () {
        $("#modal-abort").easyModal({
            top: 100,
            autoOpen: true,
            overlayOpacity: 0.3,
            overlayColor: "#FFF",
            overlayClose: false,
            closeOnEscape: true,
            updateZIndexOnOpen: false
        });
    });

    $("#modal-abort .buttons .close").on('click', function () {
        $("#modal-abort").trigger('closeModal');
    });

    $("div[role=tabpanel]").find("input[type=submit]").click(function (e) {

        /* Prevent submit when selecting value with keyboard in autocomplete. */
        if ($(".travel-search .q-autocomplete").children().length > 0) {
            var containerElement = $(".travel-search");
            removeProcessingAnimation(containerElement);
            return false;
        }

        var post = $(this).attr("data-role-type");

        /* If used in front page a submit should be performed */
        if (post === "post")
            return true;

        var closestContainer = $(this).closest(".travel-search");
        var processing = closestContainer.find(".search-result").attr("data-processing");
        //debugger;
        if (processing == "false") {
            var activeTabIndex = $("#search-type-tab-nav a[aria-selected=true]").parent().index();

            if (activeTabIndex == "1") {
                getDepartures(closestContainer);
            } else {
                var params = getParams(activeTabIndex, "");
                doAjaxSearch(params, closestContainer);
            }
        }
        e.preventDefault();
    });

    /* Toggle news archive filter */
    $(".toggle-filter-btn").on('click', function () {
        $(".news-filter").toggleClass("expanded");
    });

    $(".new-search-bar").on('click', function () {
        searchForm.toggleSearchForm($(this));
    });

    // Hide search form if search has been done from startpage
    var currentSearch = $("section.travel").data("search");
    if (currentSearch != null && currentSearch != "" && currentSearch != undefined) {
        searchForm.switchTab(currentSearch + '-container');
        var emptyResult = $("section.travel").data("empty");
        if (!emptyResult) {
            var container = $(".travel-search." + currentSearch);
            searchForm.showSearchedState(container, null);
        }
    }

    /* Expand trip info */


    $("body").on("click", ".route-info", function (e) {

        if ($(e.target).hasClass('price-info-btn')) {
            e.stopPropagation();
            $(e.target).parent().parent().next().toggle();
            $(".transportation").show();
            $(e.target).parent().parent().find(".expand span").toggleClass("plus").toggleClass("minus");
            $(".stops").hide();
            $(".black-arrow-small.up").toggleClass("up").toggleClass("down");
            $(e.target).parent().parent().next('.route-details').find(".route-prices").removeClass('st-visible').addClass('st-hidden');
            var travelpricebtn = $(e.target).parent().parent().next('.route-details').find(".travel-price");
            var routelistarea = $(e.target).parent().parent().next('.route-details').find(".route-list");
            var routelistheight = routelistarea.height();

            travelpricebtn.click();
            $("html, body").animate({ scrollTop: $(window).scrollTop() + 300 + routelistheight }, 1000);

        }
        else if ($(e.target).hasClass('btn-margin-right')) {
            //do something
        }
        else {
            e.stopPropagation();
            $(this).next().toggle();
            $(".transportation").show();
            $(this).find(".expand span").toggleClass("plus").toggleClass("minus");
            $(".stops").hide();
            $(".black-arrow-small.up").toggleClass("up").toggleClass("down");
            $(this).next('.route-details').find(".route-prices").removeClass('st-visible').addClass('st-hidden');

        }
    });



    /* Expand all trip stations*/
    $("body").on("click", ".trip .intermediate-stops ", function () {
        var el = $(this);

        var key = $(this).attr("data-routelinkkey");
        if (typeof key !== typeof undefined && key !== false) {
            // The following line is not used, should it be removed?
            // var $stops = $("<ul />").attr("class", "stops").appendTo(el);
            $.ajax({
                contentType: "application/json",
                url: "/handlers/TrafficInfo.ashx",
                data: { action: "getlinestops", routelinkkey: key },
                success: function (data) {
                    var resultstops = data.Stops;
                    if (resultstops != null && resultstops.length > 0) {
                        for (var i = 0; i < resultstops.length; i++) {
                            // The following three lines is not used, should they be removed?
                            // var stop = resultstops[i];
                            // var $li = $("<li />").attr("class", "intermediate-stop").appendTo($stops);
                            // var $div = $("<div />").attr("class", "stop").appendTo($li);
                        }
                    }
                    el.removeAttr("data-routelinkkey");
                },
                error: function (data, status, error) {
                    alert(error);
                    alert(status);
                }
            });
        }

        $(this).find(".stops").toggleClass("st-visible");
        $(this).find(".black-arrow-small").toggleClass("up").toggleClass("down");
    });

    // Mobile menu click
    $(".burger-nav ul li").not(".translate").on("click", function () {
        var url = $(this).find("a").attr("href");
        if (url)
            window.location = url;
    });

    /* Google translate from mobile menu */
    $(".burger-nav ul li.translate").on("click", function () {
        $(this).find(".google-translate").toggleClass("expand");
    }).children().click(function (e) {
        e.stopPropagation();
    });

    /* Prevent default for translate icon in mobile menu */
    $(".burger-nav ul li.translate a").on("click", function (e) {
        e.preventDefault();
        $(this).next(".google-translate").toggleClass("expand");
    });

    /* Close button for Google translate */
    $(".translate-desktop .close").on("click", function () {
        translateMenu.hide();
        $(".translate-desktop-btn").attr("aria-expanded", "false");
    });

    /* Search shortcuts */
    $(".search-shortcuts .heading").on("click", function () {
        $(this).parent().find("ul").toggleClass("expand");
        $(this).parent().find(".white-arrow-small").toggleClass("up").toggleClass("down");
    }).click();

    /* Hide search shortcuts when focus is set on search field */
    $(".search-nav input[type=search]").on("focus", function () {
        $(".search-shortcuts ul").removeClass("expand");
        $(".search-shortcuts .white-arrow-small").removeClass("up").removeClass("down").addClass("down");
        $(".search-shortcuts button.heading").attr("aria-expanded", "false");
    });

    /* Site search button */
    $(".search-nav .search-buttons input[type=submit]").click("click", function () {
        var queryWord = $('#searchQuery').val();
        var searchPageUrl = $('#searchPageUrl').val();
        if (typeof queryWord !== 'undefined') {
            window.location = searchPageUrl + '?searchQuery=' + queryWord;
        }
    });

    /* Open ticket guide */
    $("#ticket-guide-btn").click("click", function () {
        window.location = "/biljettguiden";
    });

    $("body").on("click", ".stopToSelect", function () {
        var id = $(this).attr('data-stop-id');
        var name = $(this).attr('data-stop-name');
        $('#fromStop').val(name);
        $("#from-stop-form .frompointid").val(id);
        $('#from-stop-form .frompointname').val(name);
        $("#from-stop-form .frompointtype").val('Hållplats');
    });

    $('.stopToSelect').on('click', function () {
    });

    $("body").on("click", ".scroll-search-result", function () {
        var resultContainer = $(this).closest(".travel-search");
        var processing = resultContainer.find(".search-result").attr("data-processing");
        var scrollType = $(this).attr("data-scroll");
        // GA::Event::SökResa-->Tidigare/senare klickad eller "Fler resor" under "Från Hållplats"
        if (scrollType == undefined || scrollType == null) {
            //ga('send', 'event', 'SökResa', 'Fler resor');
        }
        else {
            //ga('send', 'event', 'SökResa', 'Senare Resor/Tidigare Resor: ' + scrollType);
        }
        //debugger;
        if (processing == "false") {
            var activeTabIndex = $("#search-type-tab-nav a[aria-selected=true]").parent().index();
            if (activeTabIndex == "1") {
                return;
            } else {
                var params = getParams(activeTabIndex, scrollType, true);

                if (typeof params === 'object') {
                    doAjaxSearch(params, resultContainer);
                }
            }
        }
    });

    $('#means-of-transport-tab-nav a[role=tab]').on('click', function () {
        var panelToActivate = $(this).attr('aria-controls');
        $('#mean-of-transport-header').text($(this).text());
        $('#' + panelToActivate).siblings().removeClass('st-visible').addClass('st-hidden');
        $('#' + panelToActivate).removeClass('st-hidden').addClass('st-visible');
        $('#from-stop-result-heading').removeClass('st-hidden').addClass('st-visible');

        //Check if any result has been rendered.
        if ($("#" + panelToActivate + " div:first-child").children().length > 1) {

            // Panel for this means of transport  has result, show it
            $("#from-stop-result-heading").removeClass("st-hidden").addClass("st-visible");
            $("#" + panelToActivate + " .js-footer-place-holder").removeClass("st-hidden").addClass("st-visible");
            $("#" + panelToActivate + " .no-result-panel").removeClass("st-visible").addClass("st-hidden");
            $("#from-stop-updated").removeClass("st-hidden").addClass("st-visible");
            // Show meansOfTransportheader
            $("#mean-of-transport-header").removeClass("st-hidden").addClass("st-visible");

        } else {

            // This means of transport result panle has no result, show panel for no result instead.
            $("#from-stop-result-heading").removeClass("st-visible").addClass("st-hidden");
            $("#" + panelToActivate + " .js-footer-place-holder").removeClass("st-visible").addClass("st-hidden");
            $("#" + panelToActivate + " .no-result-panel").removeClass("st-hidden").addClass("st-visible");

            $("#from-stop-updated").removeClass("st-visible").addClass("st-hidden");
            // Hide meansOfTransportheader
            $("#mean-of-transport-header").removeClass("st-visible").addClass("st-hidden");

        }

    });

    $('#from-stop-trip-results-stadsbuss-panel .scroll-search-result').on('click', function () {
        // Get next Stadsbuss        
        var lastJourneyTime = $('#last-stadsbuss-departure').val();
        var closestContainer = $(this).closest(".travel-search");

        getNextSetOfDeparturesFrom("stadsbuss", "#result-place-holder-stadsbuss", lastJourneyTime, closestContainer);
        $("#result-place-holder-stadsbuss .trip").addClass("skiptranslate");
    });

    $('#from-stop-trip-results-regionsbuss-panel .scroll-search-result').on('click', function () {
        // Get next Regionsbuss        
        var lastJourneyTime = $('#last-regionsbuss-departure').val();

        var closestContainer = $(this).closest(".travel-search");
        getNextSetOfDeparturesFrom("regionbuss", "#result-place-holder-regionsbuss", lastJourneyTime, closestContainer);

    });

    $('#from-stop-trip-results-tag-panel .scroll-search-result').on('click', function () {
        // Get next Stadsbuss        
        var lastJourneyTime = $('#last-tag-departure').val();
        var closestContainer = $(this).closest(".travel-search");
        getNextSetOfDeparturesFrom("tåg", "#result-place-holder-tag", lastJourneyTime, closestContainer);
    });


    if ($('#from-stop-result-panel').length) {
        /* Execute json parsen on client when post is done in search travel from. */
        proccessFromStopPostResult();
    }


    /* $.live Show travel path Search journey. */
    $(document).on('click', '.travel-path', function () {
        var journeyResultKey = $('#journeyResultKey').val();
        var travelMapUrl = $('#travelAreaMapUrl').val();
        var sequenceNo = $(this).attr('data-sequensNo');
        var mapUrl = travelMapUrl + "&id=" + journeyResultKey + "&seq=" + sequenceNo;
        // GA::Event::SökResa-->Resväg på karta klickad
        //ga('send', 'event', 'SökResa', 'Resväg på karta');
        showMapFrame(mapUrl, 'Resväg');
    });






    $(document).on('click', '.route-prices .route-prices-toggleblock', function () {
        $(this).find(".red-arrow").toggleClass("up").toggleClass("down");
        $(this).next("div").toggleClass("open").toggleClass("closed");
        $(this).parent().toggleClass("open").toggleClass("closed");


        if ($(this).next("div").hasClass("open") == true) {
            switch ($(this).next("div").attr('id')) {
                case "content - children":
                    //ga('send', 'event', 'SökResa', 'Se nya barnpriser');
                    break;
                case "content-student":
                    //ga('send', 'event', 'SökResa', 'Se nya studentpriser');
                    break;
                case "content-group":
                    //ga('send', 'event', 'SökResa', 'Se nya gruppresepriser');
                    break;
                case "content-additions":
                    //ga('send', 'event', 'SökResa', 'Se nya tilläggspriser');
                    break;
                default:
                    break;
            }

        }
        else {
            if ($(this).next("div").attr('id') == 'content-group') {
                sequenceNo = $(this).attr("data-sequensno");
                $(".route-prices-button").eq(sequenceNo).prop('disabled', true);
                $(".adultAmount").eq(sequenceNo).val(0);
                $(".childrenAmount").eq(sequenceNo).val(0);
                $(".studentAmount").eq(sequenceNo).val(0);
                $(".results-group").eq(sequensno).removeClass('st-visible').addClass('st-hidden');
            }
        }

    });

    /* $.live Show travel price Search journey. */
    $(document).on('click', '.travel-price', function () {
        // GA::Event::SökResa-->Se resans pris

        isOresundJourney = $(this).attr("data-oresund");
        sequensno = $(this).attr("data-sequensno");

        $(".singaporeError").eq(sequensno).removeClass('st-visible').addClass('st-hidden');

        var pricesContainer = $(this).parent().next(".route-prices");

        if ($("#noPriceFound").eq(sequensno).is(":visible") || $(".route-prices").eq(sequensno).is(":visible")) {
            pricesContainer.removeClass('st-visible').addClass('st-hidden');
            $(this).parent().next("#noPriceFound").removeClass('st-visible').addClass('st-hidden');
            $(".adultAmount").val(0);
            $(".childrenAmount").val(0);
            $(".studentAmount").val(0);
            $(".results-group").eq(sequensno).removeClass('st-visible').addClass('st-hidden');

            return;
        }

        var url = $(".travelpageurl").val();

        var pageShowSingapore = $("#ShowSingaporePricesSearchTravel").val().toLowerCase() == "true" ? true : false;
        var journeyShowSingapore = $(this).val().toLowerCase() == "true" ? true : false;

        //if (!(journeyShowSingapore && pageShowSingapore)) {
        //    showTravelPrice('Resans pris', sequensno);
        //    showTravelPriceOldTemplate(pricesContainer);
        //    if (($(window).height() - 150) < $(".prices-old").eq(sequensno).offset().top - $(window).scrollTop()) {
        //        $("html, body").animate({ scrollTop: $(window).scrollTop() + 300 }, 1000);
        //    }

        //    //ga('send', 'event', 'SökResa', 'Se Resans Pris');
        //}
        //else {
        //    //ga('send', 'event', 'SökResa', 'Se nya priser');
        if (!(journeyShowSingapore && pageShowSingapore)) {
            $(".singaporeError").eq(sequensno).removeClass('st-hidden').addClass('st-visible');
        }
        else if ($.parseJSON($("#JourneySingaporePricesJson").val())[sequensno].PriceSet == false) {
            $(".singaporeError").eq(sequensno).removeClass('st-hidden').addClass('st-visible');
        }
        else {
            $(".singaporeError").eq(sequensno).removeClass('st-visible').addClass('st-hidden');
        }
        showTravelPriceSingapore('Resans pris', sequensno, $("#JourneySingaporePricesJson").val(), isOresundJourney);
        showTravelPriceNewTemplate(pricesContainer)

        if (($(window).height() - 250) < $(".toggleblockadult").eq(sequensno).offset().top - $(window).scrollTop()) {
            $("html, body").animate({ scrollTop: $(window).scrollTop() + 300 }, 1000);
        }


        //}


    });

    function showTravelPriceOldTemplate(priceContainer) {
        priceContainer.find("#prices-old").removeClass('st-hidden').addClass('st-visible');
        priceContainer.find("#prices-adult").removeClass('st-visible').addClass('st-hidden');
        priceContainer.find("#prices-children").removeClass('st-visible').addClass('st-hidden');
        priceContainer.find("#prices-student").removeClass('st-visible').addClass('st-hidden');
        priceContainer.find("#prices-group").removeClass('st-visible').addClass('st-hidden');
        priceContainer.find("#prices-additions").removeClass('st-visible').addClass('st-hidden');
        priceContainer.removeClass('st-hidden').addClass('st-visible');
    }

    function showTravelPriceNewTemplate(priceContainer) {

        priceContainer.find("#prices-old").removeClass('st-visible').addClass('st-hidden');

        priceContainer.find("#prices-adult").removeClass('st-hidden').addClass('st-visible');
        priceContainer.find("#prices-adult").removeClass('closed').addClass('open');
        priceContainer.find("#prices-adult").find("#content-adult").removeClass('closed').addClass('open');
        priceContainer.find("#prices-adult").find(".red-arrow").removeClass('down').addClass('up');

        priceContainer.find("#prices-children").removeClass('st-hidden').addClass('st-visible');
        priceContainer.find("#prices-children").removeClass('open').addClass('closed');
        priceContainer.find("#prices-children").find("#content-children").removeClass('open').addClass('closed');
        priceContainer.find("#prices-children").find(".red-arrow").removeClass('up').addClass('down');

        priceContainer.find("#prices-student").removeClass('st-hidden').addClass('st-visible');
        priceContainer.find("#prices-student").removeClass('open').addClass('closed');
        priceContainer.find("#prices-student").find("#content-student").removeClass('open').addClass('closed');
        priceContainer.find("#prices-student").find(".red-arrow").removeClass('up').addClass('down');

        priceContainer.find("#prices-group").removeClass('st-hidden').addClass('st-visible');
        priceContainer.find("#prices-group").removeClass('open').addClass('closed');
        priceContainer.find("#prices-group").find("#content-group").removeClass('open').addClass('closed');
        priceContainer.find("#prices-group").find(".red-arrow").removeClass('up').addClass('down');

        priceContainer.find("#prices-additions").removeClass('st-hidden').addClass('st-visible');
        priceContainer.find("#prices-additions").removeClass('open').addClass('closed');
        priceContainer.find("#prices-additions").find("#content-additions").removeClass('open').addClass('closed');
        priceContainer.find("#prices-additions").find(".red-arrow").removeClass('up').addClass('down');

        priceContainer.removeClass('st-hidden').addClass('st-visible');
    }

    /* $.live Intermediate stops arrow */
    $(document).on('click', '.intermediate-stops', function () {
        var $arrowEl = $(this).find('p');
        var arrowClass = ($arrowEl.hasClass('red-arrow-up-small')) ? 'red-arrow-down-small' : 'red-arrow-up-small';
        $arrowEl.attr('class', arrowClass);
    });

    /* $.live show position map */
    $(document).on('click', '.position', function () {
        // GA::Event::SökResa-->Läge på karta klickad
        //ga('send', 'event', 'SökResa', 'Lägeskarta');
        var mapUrl = $(this).data('map-url');
        showMapFrame(mapUrl, 'Hållplats');

    });
    /* $.live close position map */
    $(document).on('click', '#close-map', function () {
        $('#map-container').toggleClass('st-hidden').find('iframe').removeClass('animate-load').removeAttr("src");
    });

    $(document).on('click', '#close-price', function () {
        $('#price-container').toggleClass('st-hidden');
    });

    //$(".my-account form input[type=submit]").on('click', function () {
    //	$(this).parents('form').submit();
    //	return false;
    //});


    $(".route-traffic-info select").change(function () {
        $("#search-trafic-info-form .frompointname").val($(this).find("option:selected").text());
    });

    ticketGuide.init();
    travelWarrentyFom.init();
    crmFrom.init();
    form.init();
    searchForm.init();
    travelPrice.init();

    /* Travel warranty - My trip - Select radio button on row click */
    $('#warrenty-search-result').on('click', '.row', function () {
        $(this).find('input:radio').prop("checked", true);
    });

    /* Search shortcuts */
    $(".search-shortcuts > .content > ul > li").on("click", function () {
        window.location.href = $(this).find("a").attr("href");
    });

    // Add loading spinner for travel warranty buttons
    //$(".travel-warranty .standard-btn.continue").on("click", function () {
    //    $(this).addClass("loading-animation");
    //});

    /* Enable placeholders on input fields (IE8 + IE9) */
    $('.ie8 [placeholder]').focus(function () {
        var input = $(this);
        if (input.val() == input.attr('placeholder')) {
            input.val('');
            input.removeClass('placeholder');
        }
    }).blur(function () {
        var input = $(this);
        if (input.val() == '' || input.val() == input.attr('placeholder')) {
            input.addClass('placeholder');
            input.val(input.attr('placeholder'));
        }
    }).blur();

    /* Prevent form submit for sending placeholder content in input fields (IE8 + IE9) */
    $('.ie8 [placeholder]').parents('form').submit(function () {
        $(this).find('[placeholder]').each(function () {
            var input = $(this);
            if (input.val() == input.attr('placeholder')) {
                input.val('');
            }
        });
    });

    /* October-2016 SM17374430 Reponsiveness functionality for iframes and images. */
    Skanetr.checkCurrentPageType();
    Skanetr.logg("dom loaded Skanetr.currentPageType", Skanetr.currentPageType);
    var relevansObj = Skanetr.makeResponiveFunc();
    if (relevansObj && (relevansObj.iFrames.length > 0 || relevansObj.images.length > 0)) {

        $(window).resize(function (evt) {
            Skanetr.makeResponiveFunc(relevansObj);
        });

    }



}); //end of (document).ready

document.addEventListener("triggerBrowseAloud", () => {
    $("#cookie").toggleClass("avoid-browse-aloud");
});


//Checks max allowed checkboxes to check on SearchTimeTablesPage
function MaxCheckboxes() {
    var sum = 0;
    $('.timetablequantity').each(function () {
        sum += parseFloat($(this).text());

        var number = $('#maxNumberOfTimeTables').val();
        var message = $('#maxNumberOfTimeTablesMessage').val();

        if (sum >= number) {
            $('.max-input-error').empty();
            $(".max-input-error").append("<h3>Observera</h3><p>" + message + "</p>");

            $('.timetablecheckBox:checkbox:checked').prop('disabled', false);

            $('.timetablecheckBox:checkbox:not(:checked)').prop('disabled', true);

            $("#SendTimetables").prop('disabled', false);

            if (sum > number) {
                $("#SendTimetables").prop('disabled', true);
                $(".SendTimetables").hide();
            }
        }
        else if (sum == 0) {
            $("#SendTimetables").prop('disabled', true);
            $(".SendTimetables").hide();
        }

        else {
            $('.max-input-error').empty();
            $("#SendTimetables").prop('disabled', false);
        };
    });
}

function getCityBusOperatorData(trafficLineType) {

    var urlAction;

    listItem = $('#cityId option:selected').text();
    urlAction = "GetCityBusOperatorData"
    $.ajax({
        url: urlAction,
        dataType: "json",
        type: "POST",
        data: { 'city': listItem },
        success: function (data) {
            if (data.linkList.length != 0) {
                $('.SearchTimeTableButton .spinner').hide();
                $('#CityBusOperatorData').show();
                $('#CityBusOperatorData').empty();
                $(".error-list").empty();
                $.each(data.linkList, function (i, heading) {
                    $('#CityBusOperatorData').append(heading.Text);
                }

                )
            }
        }
    });
}

function getRegionBusOperatorData(lineNumber) {

    var urlAction;

    listItem = $('#municipalityId option:selected').text();
    listItemId = $('#municipalityId option:selected').val();
    if (lineNumber.length == 0) { lineNumber = $("#regionBusLineNo").val(); }


    if (lineNumber.length != 0) {
        $("#regionBusLineNo").val(lineNumber);
        $.ajax({
            url: "GetRegionBusOperatorData",
            dataType: "json",
            type: "POST",
            data: { 'county': listItem, 'lineNumber': lineNumber },
            success: function (data) {
                if (data.linkList[0].Text.length != 0) {
                    $('.SearchTimeTableButton .spinner').hide();
                    $('#RegionBusOperatorData').show();
                    $('#RegionBusOperatorData').empty();
                    $('#pdf-list-municipality').empty();
                    $(".error-list").empty();
                    $.each(data.linkList, function (i, heading) {
                        $('#RegionBusOperatorData').append(heading.Text);
                    }
                    )

                }
                else {
                    $('.SearchTimeTableButton .spinner').hide();
                    $('#RegionBusOperatorData').empty();
                    $('#pdf-list-municipality').empty();
                    $(".error-list").empty();
                    $("<h3>Det saknas hittegodsinformation om den här linjen</h3>").appendTo(".error-list")
                }
            }
        });
    }
    if (lineNumber.length == 0) {
        $.ajax({
            url: "GetRegionBusLinesData",
            dataType: "json",
            type: "POST",
            data: { 'county': listItemId },
            success: function (data) {
                if (data.linkList.length != 0) {
                    $('.SearchTimeTableButton .spinner').hide();
                    $('#RegionBusOperatorData').show();
                    $('#RegionBusOperatorData').empty();
                    $('#pdf-list-municipality').empty();
                    $(".error-list").empty();
                    $.each(data.linkList, function (i, heading) {
                        //$("<div id='mean-of-transport-header'>" + "Linjer giltiga From " + heading.ValidFrom + " tom " + heading.ValidTo + "</div>").appendTo("#pdf-list-municipality")
                        $.each(heading.Link, function (x, listobject) {

                            $("<div class='searchResult'>" +
                                "<div class='linkDiv'><button class='buslinerow'" + listobject.NavigateUrl + ">" + listobject.Text + "</button></div>"
                                + "</div>").appendTo("#pdf-list-municipality");
                            $('.HitList').show()
                            $('.SendTimetablesButton').show();

                        })
                    })


                }
            }
        });
    }
}




function getTimetables(sendTimetablesActive, tabIndex) {
    $('.SearchTimeTableButton').blur();

    if (tabIndex == -1) {
        tabIndex = 0;
    }
    var listItem;
    var lineNumber;
    var trafficLineType;
    var urlAction;

    if (tabIndex == 0) {
        listItem = $('#cityId option:selected').val();
        lineNumber = $("#cityLineNo").val();
        trafficLineType = "S"
        urlAction = "SearchTables"
        type = "city"
    }
    if (tabIndex == 1) {
        listItem = $('#municipalitieId option:selected').val();
        lineNumber = $("#regionLineNo").val();
        trafficLineType = "R"
        urlAction = "SearchTables"
        type = "municipality"
    }
    if (tabIndex == 2) {
        listItem = $('#trainLineNo option:selected').val();
        lineNumber = null;
        trafficLineType = null;
        urlAction = "SearchTrainTables"
        type = "train"
    }
    if (tabIndex == 3) {
        listItem = $('#neartrafficId option:selected').val();
        lineNumber = null;
        trafficLineType = "L";
        urlAction = "SearchTables"
        type = "neartraffic"
    }
    $.ajax({
        url: urlAction,
        dataType: "json",
        type: "POST",
        data: { 'listItem': listItem, 'LineNumber': lineNumber, 'TrafficLineType': trafficLineType },
        success: function (data) {

            if (data.linkList.length != 0) {
                $('.SearchTimeTableButton .spinner').hide();
                $('#SendTimetables').show();
                $(".error-list").empty();
                $("#pdf-list-" + type).empty();
                $.each(data.linkList, function (i, heading) {

                    $("<div id='mean-of-transport-header' role='alert'>" + "Tidtabeller giltiga From " + heading.ValidFrom + " tom " + heading.ValidTo + "</div>").appendTo("#pdf-list-" + type)
                    $.each(heading.Link, function (x, listobject) {
                        if (sendTimetablesActive == true && !listobject.IsAccessibilityLink) {
                            $("<div class='searchResult'>" +
                                //"<div class='linkDiv'><a target='_blank' class='hitlink' href=" + listobject.NavigateUrl + ">" + listobject.Text + "</a></div>" + "<div class='check bigcheckbox1'><input type='checkbox' class='timetablecheckBox' id='timetablecheck" + " " + heading.ValidFrom + "-" + heading.ValidTo + " " + x + "' value='" + listobject.NavigateUrl + "'><label class='bigcheckLabel' for='timetablecheck" + " " + heading.ValidFrom + "-" + heading.ValidTo + " " + x + "'></label></div>").appendTo("#pdf-list-" + type)
                                "<div class='linkDiv'><a target='_blank' class='hitlink' href=" + listobject.NavigateUrl + ">" + listobject.Text + "</a></div>" +
                                "<div class='quantity-selecter'>"
                                + "<div class='decrease-button-form'>"
                                + "<button type='button' id='timetable-decrease' class='icon-button decrease-button ladda-button' data-style='contract' title='Minska antal'>"
                                + "<span class='icon black-minus'></span>"
                                + "</button>"
                                + "</div>"
                                + "<div class='increase-button-form'>"
                                + "<button type='button' id='timetable-increase' class='icon-button increase-button ladda-button' data-style='contract' title='Öka antal'>"
                                + "<span class='icon black-plus'></span>"
                                + "</button>"
                                + "</div>"
                                + "<span class='quantity timetablequantity' aria-live='polite'>0</span><span class='quantity'>st</span>"
                                + "</div>").appendTo("#pdf-list-" + type)
                            $('.HitList').show()
                            $('.SendTimetablesButton').show();
                        }
                        else {
                            $("<div class='searchResult'>" +
                                "<div class='linkDiv'><a target='_blank' class='hitlink' href=" + listobject.NavigateUrl + ">" + listobject.Text + "</a></div>").appendTo("#pdf-list-" + type)
                            $('.HitList').show()

                        }
                    })
                })
            }
            else {
                $('#SendTimetables').prop('type', 'hidden');
                $("#pdf-list").empty();
                $(".error-list").empty();
                $("<h3>Följande fel inträffade</h3><p>Det gick inte att hitta tidtabellen, var god försök igen.</p>").appendTo(".error-list")
            }

            if ('#selectedTimeTables' != "") {
                $("ul#selectedTimeTables li").each(function (index) {
                    selectedItem = $(this).attr('value')

                    $("#pdf-list .searchResult .check input[type=checkbox]").each(function (index) {
                        if ($(this).attr('value') == selectedItem) {
                            $(this).prop('checked', true)
                        }
                    });
                });
                MaxCheckboxes();
            }
        },
        error: function (xhr) {
            $(".error-list").empty();
            $("<h3>Ett fel inträffade</h3><p>Kontakta kundtjänst för mer information.</p>").appendTo(".error-list")
        }
    }).done(function () {
        // in order to make the spinner stop spinning
        $('.spinner').remove();
    });
};




function showMapFrame(urlToMap, headLine) {
    $("#mapHeadLine").html(headLine);
    $("#map-canvas-iframe").attr("src", urlToMap).attr("onload", "javascript:animateLoad();");
    $("#map-container").removeClass("st-hidden");
}

function clearResultPanels() {
    /* Sök från hållplats paneler*/
    $('#result-place-holder-stadsbuss').html('');
    $('#result-place-holder-regionsbuss').html('');
    $('#result-place-holder-tag').html('');

    $('#from-stop-trip-results-stadsbuss-panel').html('');
    $('#from-stop-trip-results-stadsbuss-panel').html('');
    $('#from-stop-trip-results-tag-panel').html('');

    /* Sök från hållpltas fält */
    $('#from-stop-form .frompointid').val('');
    $('#from-stop-form .frompointname').val('');
    $('#from-stop-form .frompointtype').val('');
    $('#from-stop-form .frompointx').val('');
    $('#from-stop-form .frompointy').val('');
}

function addjQueryTemplateFormatters() {
    /* Template formater for jQuery Template */

    $.addTemplateFormatter({
        GenerateCssForTransportType: function (value, template) {
            return template + ' ' + getCssFriendlyName(value);
        },
        BuildMapUrl: function (value) {
            var baseUrl = $('#mapbaseUrl').val();
            if (baseUrl.length == 0) {
                return "";
            } else {
                {
                    return baseUrl + '?' + value;
                }
            }

        },
        WaitingMinutes: function (value) {


            if (value.indexOf(":") == -1) {
                var tmp = parseInt(value);

                if (tmp <= 0) {
                    return "Nu";
                } else if (tmp > 0 && tmp < 60) {
                    return value + "<br/>min";
                } else {
                    var h = Math.floor(tmp / 60);
                    var m = tmp - (h * 60);
                    return h + 'h<br/>' + m + 'min';
                }
            }
            else
                return value;
        }
    });
}

function getDepartures(container) {
    var processing = $(container).find(".search-result").attr("data-processing");

    if (processing == "false") {
        toggleScrollProcessing(true, $(container));
        addjQueryTemplateFormatters();
        $.ajax({
            contentType: "application/json",
            url: "/handlers/LocationSearch.ashx",
            data: {
                action: "loaddeparturesfromstop",
                fromPointId: $('#from-stop-from-from-point-id').val(),
                fromPointName: $('#from-stop-from-from-point-name').val(),
                noOfRowsToFetch: noOfItemsToFetchSearchDepartures
            },

            success: function (data, textStatus) {
                if (textStatus == "success") {
                    displayFromStopResult(data, $(container));
                }
            },
            error: function (data, status, error) {
                console.log(data);
                console.log(error);
                console.log(status);
                toggleScrollProcessing(false, $(container));
            }
        });
        toggleScrollProcessing(false, $(container));

    }
}

function getNextSetOfDeparturesFrom(meansOfTransport, targetPanel, lastJourneyTime, container) {

    var processing = $(container).find(".search-result").attr("data-processing");

    var dtNow = new Date();
    dtNow.setSeconds(0);

    if (lastJourneyTime < dtNow) {
        lastJourneyTime = dtnow;
    }

    if (processing == "false") {
        addjQueryTemplateFormatters();
        toggleScrollProcessing(true, $(container));

        $.ajax({
            contentType: "application/json",
            url: "/handlers/LocationSearch.ashx",
            data: {
                action: "loadNextDeparturesFromStop",
                fromPointId: $('#from-stop-from-from-point-id').val(),
                fromPointName: $('#from-stop-from-from-point-name').val(),
                meansOfTransport: meansOfTransport,
                searchTime: $('#lastSearchTime').val(),
                lastJourneyShowed: lastJourneyTime,
                noOfRowsToFetch: noOfItemsToFetchSearchDepartures + fetchExtended,
                targetPanel: targetPanel,
            },


            success: function (data, textStatus) {
                if (textStatus == "success") {

                    var toDelete = [];
                    for (i = 0; i < data.ExtendedDepartures.length; i++) {
                        for (x = 0; x < $("#result-place-holder-stadsbuss .LineRunNo").length; x++) {
                            if ($("#result-place-holder-stadsbuss .LineRunNo:eq(" + x + ")").html() == data.ExtendedDepartures[i].LineRunNo) {
                                toDelete.splice(0, 0, i);
                                break;
                            }
                        }
                    }

                    for (i = 0; i < toDelete.length; i++) {
                        data.ExtendedDepartures.splice(toDelete[i], 1);
                    }

                    $(data.TargetPanel).loadTemplate($("#displayLineStopTemplateLoad"), data.ExtendedDepartures.slice(0, noOfItemsToFetchSearchDepartures), { append: true });

                    var placeHolderId = "";

                    switch (meansOfTransport) {
                        case "1":
                        case "stadsbuss":
                            placeHolderId = "stadsbuss";
                            $('#last-stadsbuss-departure').val($("#result-place-holder-stadsbuss .trip .col-departure .DepartureTime").last().text());
                            //setLastJourneyFetched('#last-stadsbuss-departure', data.ExtendedDepartures);
                            break;
                        case "2":
                        case "regionbuss":
                            placeHolderId = "regionsbuss";
                            $('#last-regionsbuss-departure').val($("#result-place-holder-regionsbuss  .trip .col-departure .DepartureTime").last().text());
                            //setLastJourneyFetched('#last-regionsbuss-departure', data.ExtendedDepartures);
                            break;
                        case "4":
                        case "tag":
                            placeHolderId = "tag";
                            $('#last-tag-departure').val($("#result-place-holder-tag .trip .col-departure .DepartureTime").last().text());
                            //setLastJourneyFetched('#last-tag-departure', data.ExtendedDepartures);
                            break;
                        case "tåg":
                            placeHolderId = "tag";
                            $('#last-tag-departure').val($("#result-place-holder-tag .trip .col-departure .DepartureTime").last().text());
                            //setLastJourneyFetched('#last-tag-departure', data.ExtendedDepartures);
                            break;
                        default:
                    }


                    for (x = 0; x < $("#result-place-holder-" + placeHolderId + " .LineRunNo").length; x++) {
                        var dateStr = $("#result-place-holder-" + placeHolderId + " .LineRunNo:eq(" + x + ")").next().html().replace("T", " ");
                        var a = dateStr.split(" ");
                        var d = a[0].split("-");
                        var t = a[1].split(":");
                        var depDate = new Date(d[0], (d[1] - 1), d[2], t[0], t[1]);
                        //var depDate = new Date($("#result-place-holder-" + placeHolderId + " .LineRunNo:eq(" + x + ")").next().html().replace("T", " ")); 
                        var diff = Math.abs(depDate - dtNow);
                        if (depDate >= dtNow) {
                            var minutes = Math.round((diff / 1000) / 60);
                            $("#result-place-holder-" + placeHolderId + " .LineRunNo:eq(" + x + ")").prev().html(setWaitText(minutes))
                        }
                        else {
                            $("#result-place-holder-" + placeHolderId + " .LineRunNo:eq(" + x + ")").prev().html("Nu")

                        }

                    }

                }
            },
            error: function (data, status, error) {
                console.log(data);
                console.log(error);
                console.log(status);
            },
            complete: function () {
                toggleScrollProcessing(false, $(container));
                removeProcessingAnimation($(container));
            }
        });
    }
}

function setWaitText(value) {

    var tmp = parseInt(value);

    if (tmp <= 0) {
        return "Nu";
    } else if (tmp > 0 && tmp < 60) {
        return value + "<br/>min";
    } else {
        var h = Math.floor(tmp / 60);
        var m = tmp - (h * 60);
        if (m > 0)
            return h + 'h<br/>' + m + 'min';
        else
            return h + 'h<br/>';
    }


}

function displayFromStopResult(jsonData, container) {
    addjQueryTemplateFormatters();
    if (typeof container == "undefined") {
        container = $("#from-stop-container");
    }
    $("#lastSearchTime").val(jsonData.LastSearchTime);
    $("#searchcachekey").val(jsonData.CacheKey);

    $("#from-stop-search-time").html(jsonData.LastSearchTime.substr(11, 5));
    $("#from-stop-point-name").html(jsonData.FromPointOfName);
    $("#fromStop").val(jsonData.FromPointOfName);
    $("#from-stop-from-from-point-id").val(jsonData.FromPointId);
    $("#from-stop-from-from-point-name").val(jsonData.FromPointOfName);



    var stadBussDepartures = jsonData.StadBussDepartures;
    var regionsBussDepartures = jsonData.RegionsBussDepartures;
    var trainBussDepartures = jsonData.TrainDepartures;
    var selectedMeansOfTransportTab = "#from-stop-tab-stadsbuss";
    var resultPanelToShow = "#from-stop-trip-results-stadsbuss-panel";
    var meansOfTransportName = "Stadsbuss";
    var displayResultColumnHeading = (stadBussDepartures.length > 0);
    if (stadBussDepartures.length == 0) {
        if (regionsBussDepartures.length > 0) {
            displayResultColumnHeading = true;
            selectedMeansOfTransportTab = "#from-stop-tab-regionsbuss";
            resultPanelToShow = "#from-stop-trip-results-regionsbuss-panel";
            meansOfTransportName = "Regionbuss";
        } else if (trainBussDepartures.length > 0) {
            displayResultColumnHeading = true;
            selectedMeansOfTransportTab = "#from-stop-tab-tag";
            resultPanelToShow = "#from-stop-trip-results-tag-panel";
            meansOfTransportName = "Tåg";
        }
    }

    if (stadBussDepartures.length > 0 || regionsBussDepartures.length > 0 || trainBussDepartures.length > 0) {
        $(resultPanelToShow + " .js-footer-place-holder").removeClass("st-hidden").addClass("st-visible");
        $(resultPanelToShow + " .no-result-panel").removeClass("st-visible").addClass("st-hidden");
    }

    $("#result-place-holder-stadsbuss").loadTemplate($("#displayLineStopTemplateLoad"), stadBussDepartures);
    $("#result-place-holder-regionsbuss").loadTemplate($("#displayLineStopTemplateLoad"), regionsBussDepartures);
    $("#result-place-holder-tag").loadTemplate($("#displayLineStopTemplateLoad"), trainBussDepartures);

    setLastJourneyFetched("#last-stadsbuss-departure", stadBussDepartures);
    setLastJourneyFetched("#last-regionsbuss-departure", regionsBussDepartures);
    setLastJourneyFetched("#last-tag-departure", trainBussDepartures);

    $("#mean-of-transport-header").text(meansOfTransportName);

    $("#means-of-transport-tab-nav a[role=tab]").attr("aria-selected", "false");
    $(selectedMeansOfTransportTab).attr("aria-selected", "true").removeClass("st-hidden").addClass("st-visible");

    searchForm.showSearchedState($(container), resultPanelToShow);
    if (displayResultColumnHeading) {
        $('#from-stop-result-heading').removeClass("st-hidden").addClass("st-visible");
        $("#mean-of-transport-header").removeClass("st-hidden").addClass("st-visible");
    } else {
        $("#mean-of-transport-header").removeClass("st-visible").addClass("st-hidden");
    }
    toggleScrollProcessing(false, $(container));
    removeProcessingAnimation($(container));
    $(".trip").addClass("skiptranslate");
}

function setLastJourneyFetched(targetId, items) {
    var currentLastJourney = "1990-01-01T00:00";

    for (var i = 0; i < items.length; i++) {

        if (currentLastJourney < items[i].DepartureTime) {

            currentLastJourney = items[i].DepartureTime;
        }
    }
    $(targetId).val(currentLastJourney);

}

function displyLeadingZero(value) {
    if (parseInt(value) > 9) {
        return value;
    } else {
        return '0' + value;
    }
}

function getCssFriendlyName(s) {
    if (!getCssFriendlyName.translate_re) getCssFriendlyName.translate_re = /[öåäüÖÄÜ]/g;
    var translate = {
        "å": "a",
        "ä": "a",
        "ö": "o"
    };

    return (s.toLowerCase().replace(getCssFriendlyName.translate_re, function (match) {
        return translate[match];
    }));
}

/* Used in Template for Stop to get date */
function getDate(jsonDate) {
    return "string";
}

function getParams(activeTabIndex, scrollDirections, showMoreClick) {
    //debugger;
    showMoreClick = (typeof showMoreClick === "undefined") ? false : showMoreClick;

    var params = '';
    switch (activeTabIndex) {
        case 0:
            /* Search trip*/
            var hourParam = '';
            var minParam = '';
            if (jQuery("#time").length) {
                /*On a IOS device, then date, hour and min needs to be read from the "time element instead. */
                var val = $('#time').val();
                var timeArr = val.split(':');
                if (timeArr.length == 2) {
                    hourParam = timeArr[0];
                    minParam = timeArr[1];
                    if (minParam.length > 2) {
                        minParam = minParam.substring(0, 2)
                    }
                }
            } else {

                hourParam = $("#hour option:selected").val();
                minParam = $("#min option:selected").val();
            }

            params = {
                searchType: "find-trip",
                ajaxRequest: true,
                noJourneysBefore: 0,
                noJourneysAfter: 3,
                scrollType: scrollDirections,
                topointtype: $("#find-trip-form-panel .topointtype").val(),
                topointid: $("#find-trip-form-panel .topointid").val(),
                frompointtype: $("#find-trip-form-panel .frompointtype").val(),
                frompointid: $("#find-trip-form-panel .frompointid").val(),
                traveldatetype: $("#find-trip-form-panel .traveldatetype").val(),
                date: $("#date").val(),
                hour: hourParam,
                min: minParam,
                topointname: $("#find-trip-form-panel .topointname").val(),
                frompointname: $("#find-trip-form-panel .frompointname").val(),
                firstJourneyTravelDate: $("#find-trip-form-panel .firsttraveldate").val(),
                lastJourneyTravelDate: $("#find-trip-form-panel .lasttraveldate").val()
            };
            // GA::Event::SökResa-->Sökningen gjordes med earliest eller lasttogo
            switch (params.traveldatetype) {
                case "earliesttogo":
                    //ga('send', 'event', 'SökResa', 'Sök Resa gjordes med: Tidigast Åka');
                    break;
                case "lastfront":
                //ga('send', 'event', 'SökResa', 'Sök Resa gjordes med: Senast Framme');
            }
            break;
        case 1:
            /* Search from stop */

            var searchTime;
            var searchDate;
            var meansOfTransport = $(".meansoftransport-tab a[aria-selected='true']").attr('data-tab');

            var stopMaxCount = 5;

            // Check if user clicks show more/later or clicks new search
            var lastSearchTimeForFromStop = showMoreClick == true ? $('#fromStopLastJourneyDisplayed').val() : '';
            if (lastSearchTimeForFromStop != '') {
                searchTime = lastSearchTimeForFromStop;

            } else {
                searchDate = new Date();
                searchTime = searchDate.getFullYear() + "-" + displyLeadingZero(searchDate.getMonth() + 1) + "-" + displyLeadingZero(searchDate.getDate()) + "T" + displyLeadingZero(searchDate.getHours()) + ":" + displyLeadingZero(searchDate.getMinutes()) + ":" + "00";
            }

            params = {
                searchType: "from-stop",
                ajaxRequest: true,
                frompointid: $("#from-stop-form .frompointid").val(),
                frompointname: $("#from-stop-form .frompointname").val(),
                lastJourneyTravelDate: searchTime, timespan: "",
                noJourneysAfter: stopMaxCount,
                meansOfTransport: meansOfTransport,
                frompointtype: $("#from-stop-form .frompointtype").val(),
                frompointx: $("#from-stop-form .frompointx").val(),
                frompointy: $("#from-stop-form .frompointy").val()
            };
            // GA::Event::SökResa-->Från Hållplats
            //ga('send', 'event', 'SökResa', 'Från Hållplats');
            break;
        case 2:
            /* Search traficinfo */
            //var traficInfoTabSelected = $("#search-trafic-info-form a[aria-selected=true]").parent().index();
            var traficInfoTabSelected = $('#traficInfoSearchType').val();

            var frompointname = $('#cityId option:selected').text();

            switch (traficInfoTabSelected) {
                case '1':
                    frompointname = $('#cityId option:selected').text();
                    break;
                case '2':
                    frompointname = $('#municipalitieId option:selected').text();
                    break;
                case '0':
                    frompointname = $('#trainLineNo option:selected').text();
                    break;
            }
            params = {
                searchType: "traffic-info",
                traficInfoSearchType: traficInfoTabSelected,
                ajaxRequest: true,
                cityId: $('#cityId').val(),
                cityLineNo: $('#cityLineNo').val(),
                municipalitieId: $('#municipalitieId').val(),
                regionLineNo: $('#regionLineNo').val(),
                trainLineNo: $('#trainLineNo').val(),
                frompointname: frompointname
            };
            // GA::Event::SökResa-->Trafikinfo
            //ga('send', 'event', 'SökResa', 'Trafikinformation');
            break;

    }

    return params;
}

function GetActionResult() {

}

function doAjaxSearch(params, container) {
    toggleScrollProcessing(true, $(container));

    var url = $(".travelpageurl").val();

    var jqXhr = $.ajax({
        url: url,
        type: "POST",
        cache: false,
        data: params
    });

    var successCallback = displayAjaxResult;
    jqXhr.success(successCallback);
}

function displayAjaxResult(html) {
    var activeTabIndex = $("#search-type-tab-nav a[aria-selected=true]").parent().index();
    var lookupElement = '.search-result';

    switch (activeTabIndex) {
        case 0:
            lookupElement = '#find-trip-result-panel';
            break;
        case 1:
            lookupElement = '#from-stop-result-panel';
            break;
        case 2:
            lookupElement = '#find-trafic-result-panel';
            break;
    }
    var $result = $(lookupElement);
    var container = $result.parent();

    if ($result.length > 0) {
        $result.remove();
    }

    $result = $(html);

    if ($result.size() > 0) {
        $result.appendTo(container);
        searchForm.showSearchedState(container, null);
    }
    if ($(window).scrollTop()) {
        if ($('#find-trip-result-panel').is(":visible")) {
            $(window).scrollTop($('#find-trip-result-panel').offset().top - 30);
        }
    }

    if (activeTabIndex == '0') {
        setTripResultDates(html);
    }
    $("div.trip").addClass("skiptranslate");
    $("div.row-adult").addClass("skiptranslate");
    $("div.row-child").addClass("skiptranslate");
    $("div.row-duo").addClass("skiptranslate");
    toggleScrollProcessing(false, container);
    removeProcessingAnimation(container);
    travelPrice.init();

}

function setTripResultDates(html) {
    var $firstTrip = $(html).find(".trip").first();
    var $lastTrip = $(html).find(".trip").last();

    if ($(".active-opt").attr("data-travel-type") == "earliesttogo") {

        if ($firstTrip.size() > 0) {
            $("#find-trip-form-panel .firsttraveldate").val($firstTrip.attr("data-travel-date"));
        }

        if ($lastTrip.size() > 0) {
            $("#find-trip-form-panel .lasttraveldate").val($lastTrip.attr("data-travel-date"));
        }
    }
    else {
        if ($firstTrip.size() > 0) {
            var firsttime = $firstTrip.find(".route-info").find(".info").find(".col-time").html().substr(7, 5) + ":00";
            $("#find-trip-form-panel .firsttraveldate").val($firstTrip.attr("data-travel-date").substr(0, 11) + firsttime);
        }

        if ($lastTrip.size() > 0) {
            var lasttime = $lastTrip.find(".route-info").find(".info").find(".col-time").html().substr(7, 5) + ":00";
            $("#find-trip-form-panel .lasttraveldate").val($lastTrip.attr("data-travel-date").substr(0, 11) + lasttime);
        }


    }
}

function toggleScrollProcessing(processing, container) {
    $(container).find(".search-result").attr("data-processing", processing);
}

/*Reload Scripts without reloading site */
var indexScript = 0;
function refreshScript(src) {
    var scriptElement = document.createElement('script');
    scriptElement.type = 'text/javascript';
    scriptElement.src = src + '?' + indexScript++;
    document.getElementsByTagName('body')[0].appendChild(scriptElement);
}

function removeProcessingAnimation(container) {
    var submitBtn = $(container).find('.search-form .standard-btn');
    var scrollSearchResultBtn = $(container).find('.scroll-search-result .black-arrow');
    submitBtn.removeClass('loading-animation');
    scrollSearchResultBtn.removeClass('loading-animation');
}

/* Prevent OpenLayers from flickering on load */
function animateLoad() {
    var el = $('#map-container').find('iframe');
    $(el).addClass('animate-load');
}

function showScriptSpinner(e) {

    var currentButton = e;
    var classes = currentButton.classList;
    var numberOfClasses = classes.length;
    var currentId = currentButton.Id;
    var dataStyleAttribute = currentButton.getAttribute("data-style");
    var ariaExpandedAttribute = currentButton.getAttribute("aria-expanded");
    var isNextClass = false;
    var isContinueClass = false;
    var hasFormErrors = false;
    var checkedCheckbox = false;
    var isOptionSteps = false;

    for (i = 0; i <= classes.length; i++) {
        if (classes[i] == "next") {
            isNextClass = true;
            break;
        }
        if (classes[i] == "continue") {
            isContinueClass = true;
            break;
        }
        if ((classes[i] == "start-over") || (classes[i] == "close")) {
            $(".spinner").remove();
        }
    }


    $(".options ul li").each(function () {
        isOptionSteps = true;
        checkedCheckbox = $(this).hasClass("check");
        if (checkedCheckbox == true) {
            return true;
        }


    });

    if ($(".field-validation-error").is(':visible')) {
        hasFormErrors = true;
    }


    var opts = {
        lines: 13,              // The number of lines to draw
        length: 4,              // The length of each line
        width: 2,               // The line thickness
        radius: 6,              // The radius of the inner circle
        corners: 1,             // Corner roundness (0..1)
        rotate: 0,              // The rotation offset
        direction: 1,           // 1: clockwise, -1: counterclockwise
        color: '#FFF',          // #rgb or #rrggbb or array of colors
        speed: 1,               // Rounds per second
        trail: 60,              // Afterglow percentage
        shadow: false,          // Whether to render a shadow
        hwaccel: false,         // Whether to use hardware acceleration
        className: 'spinner',   // The CSS class to assign to the spinner
        zIndex: 2e9,            // The z-index (defaults to 2000000000)
        top: '50%',             // Top position relative to parent
        left: '90%'             // Left position relative to parent
    };

    if ((dataStyleAttribute != "zoom-out") && (ariaExpandedAttribute == NaN || (ariaExpandedAttribute == null)) || (isNextClass == true)) {
        if (($("#main-content").find(".my-account").length == 0) && hasFormErrors == false && (isContinueClass == false) && ((isOptionSteps && checkedCheckbox) || (isOptionSteps == false))) {

            var target = currentButton;
            var spinner = new Spinner(opts).spin(target);
            currentButton.setAttribute("style", "padding:0px 40px;");
        }
    }

}

$('.notifyjs-wrapper').trigger('notify-hide');

$(".back").click(function () {
    alert("back");
});

/* Swipe JS */
//function Swipe(e, t) { "use strict"; function h() { o = s.children; f = o.length; if (o.length < 2) t.continuous = false; if (i.transitions && t.continuous && o.length < 3) { s.appendChild(o[0].cloneNode(true)); s.appendChild(s.children[1].cloneNode(true)); o = s.children } u = new Array(o.length); a = e.getBoundingClientRect().width || e.offsetWidth; s.style.width = o.length * a + "px"; var n = o.length; while (n--) { var r = o[n]; r.style.width = a + "px"; r.setAttribute("data-index", n); if (i.transitions) { r.style.left = n * -a + "px"; g(n, l > n ? -a : l < n ? a : 0, 0) } } if (t.continuous && i.transitions) { g(v(l - 1), -a, 0); g(v(l + 1), a, 0) } if (!i.transitions) s.style.left = l * -a + "px"; e.style.visibility = "visible" } function p() { if (t.continuous) m(l - 1); else if (l) m(l - 1) } function d() { if (t.continuous) m(l + 1); else if (l < o.length - 1) m(l + 1) } function v(e) { return (o.length + e % o.length) % o.length } function m(e, n) { if (l == e) return; if (i.transitions) { var s = Math.abs(l - e) / (l - e); if (t.continuous) { var f = s; s = -u[v(e)] / a; if (s !== f) e = -s * o.length + e } var h = Math.abs(l - e) - 1; while (h--) g(v((e > l ? e : l) - h - 1), a * s, 0); e = v(e); g(l, a * s, n || c); g(e, 0, n || c); if (t.continuous) g(v(e - s), -(a * s), 0) } else { e = v(e); b(l * -a, e * -a, n || c) } l = e; r(t.callback && t.callback(l, o[l])) } function g(e, t, n) { y(e, t, n); u[e] = t } function y(e, t, n) { var r = o[e]; var i = r && r.style; if (!i) return; i.webkitTransitionDuration = i.MozTransitionDuration = i.msTransitionDuration = i.OTransitionDuration = i.transitionDuration = n + "ms"; i.webkitTransform = "translate(" + t + "px,0)" + "translateZ(0)"; i.msTransform = i.MozTransform = i.OTransform = "translateX(" + t + "px)" } function b(e, n, r) { if (!r) { s.style.left = n + "px"; return } var i = +(new Date); var u = setInterval(function () { var a = +(new Date) - i; if (a > r) { s.style.left = n + "px"; if (w) S(); t.transitionEnd && t.transitionEnd.call(event, l, o[l]); clearInterval(u); return } s.style.left = (n - e) * (Math.floor(a / r * 100) / 100) + e + "px" }, 4) } function S() { E = setTimeout(d, w) } function x() { w = 0; clearTimeout(E) } var n = function () { }; var r = function (e) { setTimeout(e || n, 0) }; var i = { addEventListener: !!window.addEventListener, touch: "ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch, transitions: function (e) { var t = ["transitionProperty", "WebkitTransition", "MozTransition", "OTransition", "msTransition"]; for (var n in t) if (e.style[t[n]] !== undefined) return true; return false }(document.createElement("swipe")) }; if (!e) return; var s = e.children[0]; var o, u, a, f; t = t || {}; var l = parseInt(t.startSlide, 10) || 0; var c = t.speed || 300; t.continuous = t.continuous !== undefined ? t.continuous : true; var w = t.auto || 0; var E; var T = {}; var N = {}; var C; var k = { handleEvent: function (e) { switch (e.type) { case "touchstart": this.start(e); break; case "touchmove": this.move(e); break; case "touchend": r(this.end(e)); break; case "webkitTransitionEnd": case "msTransitionEnd": case "oTransitionEnd": case "otransitionend": case "transitionend": r(this.transitionEnd(e)); break; case "resize": r(h); break } if (t.stopPropagation) e.stopPropagation() }, start: function (e) { var t = e.touches[0]; T = { x: t.pageX, y: t.pageY, time: +(new Date) }; C = undefined; N = {}; s.addEventListener("touchmove", this, false); s.addEventListener("touchend", this, false) }, move: function (e) { if (e.touches.length > 1 || e.scale && e.scale !== 1) return; if (t.disableScroll) e.preventDefault(); var n = e.touches[0]; N = { x: n.pageX - T.x, y: n.pageY - T.y }; if (typeof C == "undefined") { C = !!(C || Math.abs(N.x) < Math.abs(N.y)) } if (!C) { e.preventDefault(); x(); if (t.continuous) { y(v(l - 1), N.x + u[v(l - 1)], 0); y(l, N.x + u[l], 0); y(v(l + 1), N.x + u[v(l + 1)], 0) } else { N.x = N.x / (!l && N.x > 0 || l == o.length - 1 && N.x < 0 ? Math.abs(N.x) / a + 1 : 1); y(l - 1, N.x + u[l - 1], 0); y(l, N.x + u[l], 0); y(l + 1, N.x + u[l + 1], 0) } } }, end: function (e) { var n = +(new Date) - T.time; var r = Number(n) < 250 && Math.abs(N.x) > 20 || Math.abs(N.x) > a / 2; var i = !l && N.x > 0 || l == o.length - 1 && N.x < 0; if (t.continuous) i = false; var f = N.x < 0; if (!C) { if (r && !i) { if (f) { if (t.continuous) { g(v(l - 1), -a, 0); g(v(l + 2), a, 0) } else { g(l - 1, -a, 0) } g(l, u[l] - a, c); g(v(l + 1), u[v(l + 1)] - a, c); l = v(l + 1) } else { if (t.continuous) { g(v(l + 1), a, 0); g(v(l - 2), -a, 0) } else { g(l + 1, a, 0) } g(l, u[l] + a, c); g(v(l - 1), u[v(l - 1)] + a, c); l = v(l - 1) } t.callback && t.callback(l, o[l]) } else { if (t.continuous) { g(v(l - 1), -a, c); g(l, 0, c); g(v(l + 1), a, c) } else { g(l - 1, -a, c); g(l, 0, c); g(l + 1, a, c) } } } s.removeEventListener("touchmove", k, false); s.removeEventListener("touchend", k, false) }, transitionEnd: function (e) { if (parseInt(e.target.getAttribute("data-index"), 10) == l) { if (w) S(); t.transitionEnd && t.transitionEnd.call(e, l, o[l]) } } }; h(); if (w) S(); if (i.addEventListener) { if (i.touch) s.addEventListener("touchstart", k, false); if (i.transitions) { s.addEventListener("webkitTransitionEnd", k, false); s.addEventListener("msTransitionEnd", k, false); s.addEventListener("oTransitionEnd", k, false); s.addEventListener("otransitionend", k, false); s.addEventListener("transitionend", k, false) } window.addEventListener("resize", k, false) } else { window.onresize = function () { h() } } return { setup: function () { h() }, slide: function (e, t) { x(); m(e, t) }, prev: function () { x(); p() }, next: function () { x(); d() }, stop: function () { x() }, getPos: function () { return l }, getNumSlides: function () { return f }, kill: function () { x(); s.style.width = ""; s.style.left = ""; var e = o.length; while (e--) { var t = o[e]; t.style.width = ""; t.style.left = ""; if (i.transitions) y(e, 0, 0) } if (i.addEventListener) { s.removeEventListener("touchstart", k, false); s.removeEventListener("webkitTransitionEnd", k, false); s.removeEventListener("msTransitionEnd", k, false); s.removeEventListener("oTransitionEnd", k, false); s.removeEventListener("otransitionend", k, false); s.removeEventListener("transitionend", k, false); window.removeEventListener("resize", k, false) } else { window.onresize = null } } } } if (window.jQuery || window.Zepto) { (function (e) { e.fn.Swipe = function (t) { return this.each(function () { e(this).data("Swipe", new Swipe(e(this)[0], t)) }) } })(window.jQuery || window.Zepto) }

/*
 * jQuery FlexSlider v2.2.2
 * Copyright 2012 WooThemes
 * Contributing Author: Tyler Smith
 */

!function (a) { a.flexslider = function (b, c) { var d = a(b); d.vars = a.extend({}, a.flexslider.defaults, c); var j, e = d.vars.namespace, f = window.navigator && window.navigator.msPointerEnabled && window.MSGesture, g = ("ontouchstart" in window || f || window.DocumentTouch && document instanceof DocumentTouch) && d.vars.touch, h = "click touchend MSPointerUp", i = "", k = "vertical" === d.vars.direction, l = d.vars.reverse, m = d.vars.itemWidth > 0, n = "fade" === d.vars.animation, o = "" !== d.vars.asNavFor, p = {}, q = !0; a.data(b, "flexslider", d), p = { init: function () { d.animating = !1, d.currentSlide = parseInt(d.vars.startAt ? d.vars.startAt : 0, 10), isNaN(d.currentSlide) && (d.currentSlide = 0), d.animatingTo = d.currentSlide, d.atEnd = 0 === d.currentSlide || d.currentSlide === d.last, d.containerSelector = d.vars.selector.substr(0, d.vars.selector.search(" ")), d.slides = a(d.vars.selector, d), d.container = a(d.containerSelector, d), d.count = d.slides.length, d.syncExists = a(d.vars.sync).length > 0, "slide" === d.vars.animation && (d.vars.animation = "swing"), d.prop = k ? "top" : "marginLeft", d.args = {}, d.manualPause = !1, d.stopped = !1, d.started = !1, d.startTimeout = null, d.transitions = !d.vars.video && !n && d.vars.useCSS && function () { var a = document.createElement("div"), b = ["perspectiveProperty", "WebkitPerspective", "MozPerspective", "OPerspective", "msPerspective"]; for (var c in b) if (void 0 !== a.style[b[c]]) return d.pfx = b[c].replace("Perspective", "").toLowerCase(), d.prop = "-" + d.pfx + "-transform", !0; return !1 }(), d.ensureAnimationEnd = "", "" !== d.vars.controlsContainer && (d.controlsContainer = a(d.vars.controlsContainer).length > 0 && a(d.vars.controlsContainer)), "" !== d.vars.manualControls && (d.manualControls = a(d.vars.manualControls).length > 0 && a(d.vars.manualControls)), d.vars.randomize && (d.slides.sort(function () { return Math.round(Math.random()) - .5 }), d.container.empty().append(d.slides)), d.doMath(), d.setup("init"), d.vars.controlNav && p.controlNav.setup(), d.vars.directionNav && p.directionNav.setup(), d.vars.keyboard && (1 === a(d.containerSelector).length || d.vars.multipleKeyboard) && a(document).bind("keyup", function (a) { var b = a.keyCode; if (!d.animating && (39 === b || 37 === b)) { var c = 39 === b ? d.getTarget("next") : 37 === b ? d.getTarget("prev") : !1; d.flexAnimate(c, d.vars.pauseOnAction) } }), d.vars.mousewheel && d.bind("mousewheel", function (a, b) { a.preventDefault(); var f = 0 > b ? d.getTarget("next") : d.getTarget("prev"); d.flexAnimate(f, d.vars.pauseOnAction) }), d.vars.pausePlay && p.pausePlay.setup(), d.vars.slideshow && d.vars.pauseInvisible && p.pauseInvisible.init(), d.vars.slideshow && (d.vars.pauseOnHover && d.hover(function () { d.manualPlay || d.manualPause || d.pause() }, function () { d.manualPause || d.manualPlay || d.stopped || d.play() }), d.vars.pauseInvisible && p.pauseInvisible.isHidden() || (d.vars.initDelay > 0 ? d.startTimeout = setTimeout(d.play, d.vars.initDelay) : d.play())), o && p.asNav.setup(), g && d.vars.touch && p.touch(), (!n || n && d.vars.smoothHeight) && a(window).bind("resize orientationchange focus", p.resize), d.find("img").attr("draggable", "false"), setTimeout(function () { d.vars.start(d) }, 200) }, asNav: { setup: function () { d.asNav = !0, d.animatingTo = Math.floor(d.currentSlide / d.move), d.currentItem = d.currentSlide, d.slides.removeClass(e + "active-slide").eq(d.currentItem).addClass(e + "active-slide"), f ? (b._slider = d, d.slides.each(function () { var b = this; b._gesture = new MSGesture, b._gesture.target = b, b.addEventListener("MSPointerDown", function (a) { a.preventDefault(), a.currentTarget._gesture && a.currentTarget._gesture.addPointer(a.pointerId) }, !1), b.addEventListener("MSGestureTap", function (b) { b.preventDefault(); var c = a(this), e = c.index(); a(d.vars.asNavFor).data("flexslider").animating || c.hasClass("active") || (d.direction = d.currentItem < e ? "next" : "prev", d.flexAnimate(e, d.vars.pauseOnAction, !1, !0, !0)) }) })) : d.slides.on(h, function (b) { b.preventDefault(); var c = a(this), f = c.index(), g = c.offset().left - a(d).scrollLeft(); 0 >= g && c.hasClass(e + "active-slide") ? d.flexAnimate(d.getTarget("prev"), !0) : a(d.vars.asNavFor).data("flexslider").animating || c.hasClass(e + "active-slide") || (d.direction = d.currentItem < f ? "next" : "prev", d.flexAnimate(f, d.vars.pauseOnAction, !1, !0, !0)) }) } }, controlNav: { setup: function () { d.manualControls ? p.controlNav.setupManual() : p.controlNav.setupPaging() }, setupPaging: function () { var f, g, b = "thumbnails" === d.vars.controlNav ? "control-thumbs" : "control-paging", c = 1; if (d.controlNavScaffold = a('<ol class="' + e + "control-nav " + e + b + '"></ol>'), d.pagingCount > 1) for (var j = 0; j < d.pagingCount; j++) { if (g = d.slides.eq(j), f = "thumbnails" === d.vars.controlNav ? '<img src="' + g.attr("data-thumb") + '"/>' : "<a>" + c + "</a>", "thumbnails" === d.vars.controlNav && !0 === d.vars.thumbCaptions) { var k = g.attr("data-thumbcaption"); "" != k && void 0 != k && (f += '<span class="' + e + 'caption">' + k + "</span>") } d.controlNavScaffold.append("<li>" + f + "</li>"), c++ } d.controlsContainer ? a(d.controlsContainer).append(d.controlNavScaffold) : d.append(d.controlNavScaffold), p.controlNav.set(), p.controlNav.active(), d.controlNavScaffold.delegate("a, img", h, function (b) { if (b.preventDefault(), "" === i || i === b.type) { var c = a(this), f = d.controlNav.index(c); c.hasClass(e + "active") || (d.direction = f > d.currentSlide ? "next" : "prev", d.flexAnimate(f, d.vars.pauseOnAction)) } "" === i && (i = b.type), p.setToClearWatchedEvent() }) }, setupManual: function () { d.controlNav = d.manualControls, p.controlNav.active(), d.controlNav.bind(h, function (b) { if (b.preventDefault(), "" === i || i === b.type) { var c = a(this), f = d.controlNav.index(c); c.hasClass(e + "active") || (d.direction = f > d.currentSlide ? "next" : "prev", d.flexAnimate(f, d.vars.pauseOnAction)) } "" === i && (i = b.type), p.setToClearWatchedEvent() }) }, set: function () { var b = "thumbnails" === d.vars.controlNav ? "img" : "a"; d.controlNav = a("." + e + "control-nav li " + b, d.controlsContainer ? d.controlsContainer : d) }, active: function () { d.controlNav.removeClass(e + "active").eq(d.animatingTo).addClass(e + "active") }, update: function (b, c) { d.pagingCount > 1 && "add" === b ? d.controlNavScaffold.append(a("<li><a>" + d.count + "</a></li>")) : 1 === d.pagingCount ? d.controlNavScaffold.find("li").remove() : d.controlNav.eq(c).closest("li").remove(), p.controlNav.set(), d.pagingCount > 1 && d.pagingCount !== d.controlNav.length ? d.update(c, b) : p.controlNav.active() } }, directionNav: { setup: function () { var b = a('<ul class="' + e + 'direction-nav"><li><a class="' + e + 'prev" href="#">' + d.vars.prevText + '</a></li><li><a class="' + e + 'next" href="#">' + d.vars.nextText + "</a></li></ul>"); d.controlsContainer ? (a(d.controlsContainer).append(b), d.directionNav = a("." + e + "direction-nav li a", d.controlsContainer)) : (d.append(b), d.directionNav = a("." + e + "direction-nav li a", d)), p.directionNav.update(), d.directionNav.bind(h, function (b) { b.preventDefault(); var c; ("" === i || i === b.type) && (c = a(this).hasClass(e + "next") ? d.getTarget("next") : d.getTarget("prev"), d.flexAnimate(c, d.vars.pauseOnAction)), "" === i && (i = b.type), p.setToClearWatchedEvent() }) }, update: function () { var a = e + "disabled"; 1 === d.pagingCount ? d.directionNav.addClass(a).attr("tabindex", "-1") : d.vars.animationLoop ? d.directionNav.removeClass(a).removeAttr("tabindex") : 0 === d.animatingTo ? d.directionNav.removeClass(a).filter("." + e + "prev").addClass(a).attr("tabindex", "-1") : d.animatingTo === d.last ? d.directionNav.removeClass(a).filter("." + e + "next").addClass(a).attr("tabindex", "-1") : d.directionNav.removeClass(a).removeAttr("tabindex") } }, pausePlay: { setup: function () { var b = a('<div class="' + e + 'pauseplay"><a></a></div>'); d.controlsContainer ? (d.controlsContainer.append(b), d.pausePlay = a("." + e + "pauseplay a", d.controlsContainer)) : (d.append(b), d.pausePlay = a("." + e + "pauseplay a", d)), p.pausePlay.update(d.vars.slideshow ? e + "pause" : e + "play"), d.pausePlay.bind(h, function (b) { b.preventDefault(), ("" === i || i === b.type) && (a(this).hasClass(e + "pause") ? (d.manualPause = !0, d.manualPlay = !1, d.pause()) : (d.manualPause = !1, d.manualPlay = !0, d.play())), "" === i && (i = b.type), p.setToClearWatchedEvent() }) }, update: function (a) { "play" === a ? d.pausePlay.removeClass(e + "pause").addClass(e + "play").html(d.vars.playText) : d.pausePlay.removeClass(e + "play").addClass(e + "pause").html(d.vars.pauseText) } }, touch: function () { function r(f) { d.animating ? f.preventDefault() : (window.navigator.msPointerEnabled || 1 === f.touches.length) && (d.pause(), g = k ? d.h : d.w, i = Number(new Date), o = f.touches[0].pageX, p = f.touches[0].pageY, e = m && l && d.animatingTo === d.last ? 0 : m && l ? d.limit - (d.itemW + d.vars.itemMargin) * d.move * d.animatingTo : m && d.currentSlide === d.last ? d.limit : m ? (d.itemW + d.vars.itemMargin) * d.move * d.currentSlide : l ? (d.last - d.currentSlide + d.cloneOffset) * g : (d.currentSlide + d.cloneOffset) * g, a = k ? p : o, c = k ? o : p, b.addEventListener("touchmove", s, !1), b.addEventListener("touchend", t, !1)) } function s(b) { o = b.touches[0].pageX, p = b.touches[0].pageY, h = k ? a - p : a - o, j = k ? Math.abs(h) < Math.abs(o - c) : Math.abs(h) < Math.abs(p - c); var f = 500; (!j || Number(new Date) - i > f) && (b.preventDefault(), !n && d.transitions && (d.vars.animationLoop || (h /= 0 === d.currentSlide && 0 > h || d.currentSlide === d.last && h > 0 ? Math.abs(h) / g + 2 : 1), d.setProps(e + h, "setTouch"))) } function t() { if (b.removeEventListener("touchmove", s, !1), d.animatingTo === d.currentSlide && !j && null !== h) { var k = l ? -h : h, m = k > 0 ? d.getTarget("next") : d.getTarget("prev"); d.canAdvance(m) && (Number(new Date) - i < 550 && Math.abs(k) > 50 || Math.abs(k) > g / 2) ? d.flexAnimate(m, d.vars.pauseOnAction) : n || d.flexAnimate(d.currentSlide, d.vars.pauseOnAction, !0) } b.removeEventListener("touchend", t, !1), a = null, c = null, h = null, e = null } function u(a) { a.stopPropagation(), d.animating ? a.preventDefault() : (d.pause(), b._gesture.addPointer(a.pointerId), q = 0, g = k ? d.h : d.w, i = Number(new Date), e = m && l && d.animatingTo === d.last ? 0 : m && l ? d.limit - (d.itemW + d.vars.itemMargin) * d.move * d.animatingTo : m && d.currentSlide === d.last ? d.limit : m ? (d.itemW + d.vars.itemMargin) * d.move * d.currentSlide : l ? (d.last - d.currentSlide + d.cloneOffset) * g : (d.currentSlide + d.cloneOffset) * g) } function v(a) { a.stopPropagation(); var c = a.target._slider; if (c) { var d = -a.translationX, f = -a.translationY; return q += k ? f : d, h = q, j = k ? Math.abs(q) < Math.abs(-d) : Math.abs(q) < Math.abs(-f), a.detail === a.MSGESTURE_FLAG_INERTIA ? (setImmediate(function () { b._gesture.stop() }), void 0) : ((!j || Number(new Date) - i > 500) && (a.preventDefault(), !n && c.transitions && (c.vars.animationLoop || (h = q / (0 === c.currentSlide && 0 > q || c.currentSlide === c.last && q > 0 ? Math.abs(q) / g + 2 : 1)), c.setProps(e + h, "setTouch"))), void 0) } } function w(b) { b.stopPropagation(); var d = b.target._slider; if (d) { if (d.animatingTo === d.currentSlide && !j && null !== h) { var f = l ? -h : h, k = f > 0 ? d.getTarget("next") : d.getTarget("prev"); d.canAdvance(k) && (Number(new Date) - i < 550 && Math.abs(f) > 50 || Math.abs(f) > g / 2) ? d.flexAnimate(k, d.vars.pauseOnAction) : n || d.flexAnimate(d.currentSlide, d.vars.pauseOnAction, !0) } a = null, c = null, h = null, e = null, q = 0 } } var a, c, e, g, h, i, j = !1, o = 0, p = 0, q = 0; f ? (b.style.msTouchAction = "none", b._gesture = new MSGesture, b._gesture.target = b, b.addEventListener("MSPointerDown", u, !1), b._slider = d, b.addEventListener("MSGestureChange", v, !1), b.addEventListener("MSGestureEnd", w, !1)) : b.addEventListener("touchstart", r, !1) }, resize: function () { !d.animating && d.is(":visible") && (m || d.doMath(), n ? p.smoothHeight() : m ? (d.slides.width(d.computedW), d.update(d.pagingCount), d.setProps()) : k ? (d.viewport.height(d.h), d.setProps(d.h, "setTotal")) : (d.vars.smoothHeight && p.smoothHeight(), d.newSlides.width(d.computedW), d.setProps(d.computedW, "setTotal"))) }, smoothHeight: function (a) { if (!k || n) { var b = n ? d : d.viewport; a ? b.animate({ height: d.slides.eq(d.animatingTo).height() }, a) : b.height(d.slides.eq(d.animatingTo).height()) } }, sync: function (b) { var c = a(d.vars.sync).data("flexslider"), e = d.animatingTo; switch (b) { case "animate": c.flexAnimate(e, d.vars.pauseOnAction, !1, !0); break; case "play": c.playing || c.asNav || c.play(); break; case "pause": c.pause() } }, uniqueID: function (b) { return b.find("[id]").each(function () { var b = a(this); b.attr("id", b.attr("id") + "_clone") }), b }, pauseInvisible: { visProp: null, init: function () { var a = ["webkit", "moz", "ms", "o"]; if ("hidden" in document) return "hidden"; for (var b = 0; b < a.length; b++) a[b] + "Hidden" in document && (p.pauseInvisible.visProp = a[b] + "Hidden"); if (p.pauseInvisible.visProp) { var c = p.pauseInvisible.visProp.replace(/[H|h]idden/, "") + "visibilitychange"; document.addEventListener(c, function () { p.pauseInvisible.isHidden() ? d.startTimeout ? clearTimeout(d.startTimeout) : d.pause() : d.started ? d.play() : d.vars.initDelay > 0 ? setTimeout(d.play, d.vars.initDelay) : d.play() }) } }, isHidden: function () { return document[p.pauseInvisible.visProp] || !1 } }, setToClearWatchedEvent: function () { clearTimeout(j), j = setTimeout(function () { i = "" }, 3e3) } }, d.flexAnimate = function (b, c, f, h, i) { if (d.vars.animationLoop || b === d.currentSlide || (d.direction = b > d.currentSlide ? "next" : "prev"), o && 1 === d.pagingCount && (d.direction = d.currentItem < b ? "next" : "prev"), !d.animating && (d.canAdvance(b, i) || f) && d.is(":visible")) { if (o && h) { var j = a(d.vars.asNavFor).data("flexslider"); if (d.atEnd = 0 === b || b === d.count - 1, j.flexAnimate(b, !0, !1, !0, i), d.direction = d.currentItem < b ? "next" : "prev", j.direction = d.direction, Math.ceil((b + 1) / d.visible) - 1 === d.currentSlide || 0 === b) return d.currentItem = b, d.slides.removeClass(e + "active-slide").eq(b).addClass(e + "active-slide"), !1; d.currentItem = b, d.slides.removeClass(e + "active-slide").eq(b).addClass(e + "active-slide"), b = Math.floor(b / d.visible) } if (d.animating = !0, d.animatingTo = b, c && d.pause(), d.vars.before(d), d.syncExists && !i && p.sync("animate"), d.vars.controlNav && p.controlNav.active(), m || d.slides.removeClass(e + "active-slide").eq(b).addClass(e + "active-slide"), d.atEnd = 0 === b || b === d.last, d.vars.directionNav && p.directionNav.update(), b === d.last && (d.vars.end(d), d.vars.animationLoop || d.pause()), n) g ? (d.slides.eq(d.currentSlide).css({ opacity: 0, zIndex: 1 }), d.slides.eq(b).css({ opacity: 1, zIndex: 2 }), d.wrapup(q)) : (d.slides.eq(d.currentSlide).css({ zIndex: 1 }).animate({ opacity: 0 }, d.vars.animationSpeed, d.vars.easing), d.slides.eq(b).css({ zIndex: 2 }).animate({ opacity: 1 }, d.vars.animationSpeed, d.vars.easing, d.wrapup)); else { var r, s, t, q = k ? d.slides.filter(":first").height() : d.computedW; m ? (r = d.vars.itemMargin, t = (d.itemW + r) * d.move * d.animatingTo, s = t > d.limit && 1 !== d.visible ? d.limit : t) : s = 0 === d.currentSlide && b === d.count - 1 && d.vars.animationLoop && "next" !== d.direction ? l ? (d.count + d.cloneOffset) * q : 0 : d.currentSlide === d.last && 0 === b && d.vars.animationLoop && "prev" !== d.direction ? l ? 0 : (d.count + 1) * q : l ? (d.count - 1 - b + d.cloneOffset) * q : (b + d.cloneOffset) * q, d.setProps(s, "", d.vars.animationSpeed), d.transitions ? (d.vars.animationLoop && d.atEnd || (d.animating = !1, d.currentSlide = d.animatingTo), d.container.unbind("webkitTransitionEnd transitionend"), d.container.bind("webkitTransitionEnd transitionend", function () { clearTimeout(d.ensureAnimationEnd), d.wrapup(q) }), clearTimeout(d.ensureAnimationEnd), d.ensureAnimationEnd = setTimeout(function () { d.wrapup(q) }, d.vars.animationSpeed + 100)) : d.container.animate(d.args, d.vars.animationSpeed, d.vars.easing, function () { d.wrapup(q) }) } d.vars.smoothHeight && p.smoothHeight(d.vars.animationSpeed) } }, d.wrapup = function (a) { n || m || (0 === d.currentSlide && d.animatingTo === d.last && d.vars.animationLoop ? d.setProps(a, "jumpEnd") : d.currentSlide === d.last && 0 === d.animatingTo && d.vars.animationLoop && d.setProps(a, "jumpStart")), d.animating = !1, d.currentSlide = d.animatingTo, d.vars.after(d) }, d.animateSlides = function () { !d.animating && q && d.flexAnimate(d.getTarget("next")) }, d.pause = function () { clearInterval(d.animatedSlides), d.animatedSlides = null, d.playing = !1, d.vars.pausePlay && p.pausePlay.update("play"), d.syncExists && p.sync("pause") }, d.play = function () { d.playing && clearInterval(d.animatedSlides), d.animatedSlides = d.animatedSlides || setInterval(d.animateSlides, d.vars.slideshowSpeed), d.started = d.playing = !0, d.vars.pausePlay && p.pausePlay.update("pause"), d.syncExists && p.sync("play") }, d.stop = function () { d.pause(), d.stopped = !0 }, d.canAdvance = function (a, b) { var c = o ? d.pagingCount - 1 : d.last; return b ? !0 : o && d.currentItem === d.count - 1 && 0 === a && "prev" === d.direction ? !0 : o && 0 === d.currentItem && a === d.pagingCount - 1 && "next" !== d.direction ? !1 : a !== d.currentSlide || o ? d.vars.animationLoop ? !0 : d.atEnd && 0 === d.currentSlide && a === c && "next" !== d.direction ? !1 : d.atEnd && d.currentSlide === c && 0 === a && "next" === d.direction ? !1 : !0 : !1 }, d.getTarget = function (a) { return d.direction = a, "next" === a ? d.currentSlide === d.last ? 0 : d.currentSlide + 1 : 0 === d.currentSlide ? d.last : d.currentSlide - 1 }, d.setProps = function (a, b, c) { var e = function () { var c = a ? a : (d.itemW + d.vars.itemMargin) * d.move * d.animatingTo, e = function () { if (m) return "setTouch" === b ? a : l && d.animatingTo === d.last ? 0 : l ? d.limit - (d.itemW + d.vars.itemMargin) * d.move * d.animatingTo : d.animatingTo === d.last ? d.limit : c; switch (b) { case "setTotal": return l ? (d.count - 1 - d.currentSlide + d.cloneOffset) * a : (d.currentSlide + d.cloneOffset) * a; case "setTouch": return l ? a : a; case "jumpEnd": return l ? a : d.count * a; case "jumpStart": return l ? d.count * a : a; default: return a } }(); return -1 * e + "px" }(); d.transitions && (e = k ? "translate3d(0," + e + ",0)" : "translate3d(" + e + ",0,0)", c = void 0 !== c ? c / 1e3 + "s" : "0s", d.container.css("-" + d.pfx + "-transition-duration", c), d.container.css("transition-duration", c)), d.args[d.prop] = e, (d.transitions || void 0 === c) && d.container.css(d.args), d.container.css("transform", e) }, d.setup = function (b) { if (n) d.slides.css({ width: "100%", "float": "left", marginRight: "-100%", position: "relative" }), "init" === b && (g ? d.slides.css({ opacity: 0, display: "block", webkitTransition: "opacity " + d.vars.animationSpeed / 1e3 + "s ease", zIndex: 1 }).eq(d.currentSlide).css({ opacity: 1, zIndex: 2 }) : d.slides.css({ opacity: 0, display: "block", zIndex: 1 }).eq(d.currentSlide).css({ zIndex: 2 }).animate({ opacity: 1 }, d.vars.animationSpeed, d.vars.easing)), d.vars.smoothHeight && p.smoothHeight(); else { var c, f; "init" === b && (d.viewport = a('<div class="' + e + 'viewport"></div>').css({ overflow: "hidden", position: "relative" }).appendTo(d).append(d.container), d.cloneCount = 0, d.cloneOffset = 0, l && (f = a.makeArray(d.slides).reverse(), d.slides = a(f), d.container.empty().append(d.slides))), d.vars.animationLoop && !m && (d.cloneCount = 2, d.cloneOffset = 1, "init" !== b && d.container.find(".clone").remove(), p.uniqueID(d.slides.first().clone().addClass("clone").attr("aria-hidden", "true")).appendTo(d.container), p.uniqueID(d.slides.last().clone().addClass("clone").attr("aria-hidden", "true")).prependTo(d.container)), d.newSlides = a(d.vars.selector, d), c = l ? d.count - 1 - d.currentSlide + d.cloneOffset : d.currentSlide + d.cloneOffset, k && !m ? (d.container.height(200 * (d.count + d.cloneCount) + "%").css("position", "absolute").width("100%"), setTimeout(function () { d.newSlides.css({ display: "block" }), d.doMath(), d.viewport.height(d.h), d.setProps(c * d.h, "init") }, "init" === b ? 100 : 0)) : (d.container.width(200 * (d.count + d.cloneCount) + "%"), d.setProps(c * d.computedW, "init"), setTimeout(function () { d.doMath(), d.newSlides.css({ width: d.computedW, "float": "left", display: "block" }), d.vars.smoothHeight && p.smoothHeight() }, "init" === b ? 100 : 0)) } m || d.slides.removeClass(e + "active-slide").eq(d.currentSlide).addClass(e + "active-slide"), d.vars.init(d) }, d.doMath = function () { var a = d.slides.first(), b = d.vars.itemMargin, c = d.vars.minItems, e = d.vars.maxItems; d.w = void 0 === d.viewport ? d.width() : d.viewport.width(), d.h = a.height(), d.boxPadding = a.outerWidth() - a.width(), m ? (d.itemT = d.vars.itemWidth + b, d.minW = c ? c * d.itemT : d.w, d.maxW = e ? e * d.itemT - b : d.w, d.itemW = d.minW > d.w ? (d.w - b * (c - 1)) / c : d.maxW < d.w ? (d.w - b * (e - 1)) / e : d.vars.itemWidth > d.w ? d.w : d.vars.itemWidth, d.visible = Math.floor(d.w / d.itemW), d.move = d.vars.move > 0 && d.vars.move < d.visible ? d.vars.move : d.visible, d.pagingCount = Math.ceil((d.count - d.visible) / d.move + 1), d.last = d.pagingCount - 1, d.limit = 1 === d.pagingCount ? 0 : d.vars.itemWidth > d.w ? d.itemW * (d.count - 1) + b * (d.count - 1) : (d.itemW + b) * d.count - d.w - b) : (d.itemW = d.w, d.pagingCount = d.count, d.last = d.count - 1), d.computedW = d.itemW - d.boxPadding }, d.update = function (a, b) { d.doMath(), m || (a < d.currentSlide ? d.currentSlide += 1 : a <= d.currentSlide && 0 !== a && (d.currentSlide -= 1), d.animatingTo = d.currentSlide), d.vars.controlNav && !d.manualControls && ("add" === b && !m || d.pagingCount > d.controlNav.length ? p.controlNav.update("add") : ("remove" === b && !m || d.pagingCount < d.controlNav.length) && (m && d.currentSlide > d.last && (d.currentSlide -= 1, d.animatingTo -= 1), p.controlNav.update("remove", d.last))), d.vars.directionNav && p.directionNav.update() }, d.addSlide = function (b, c) { var e = a(b); d.count += 1, d.last = d.count - 1, k && l ? void 0 !== c ? d.slides.eq(d.count - c).after(e) : d.container.prepend(e) : void 0 !== c ? d.slides.eq(c).before(e) : d.container.append(e), d.update(c, "add"), d.slides = a(d.vars.selector + ":not(.clone)", d), d.setup(), d.vars.added(d) }, d.removeSlide = function (b) { var c = isNaN(b) ? d.slides.index(a(b)) : b; d.count -= 1, d.last = d.count - 1, isNaN(b) ? a(b, d.slides).remove() : k && l ? d.slides.eq(d.last).remove() : d.slides.eq(b).remove(), d.doMath(), d.update(c, "remove"), d.slides = a(d.vars.selector + ":not(.clone)", d), d.setup(), d.vars.removed(d) }, p.init() }, a(window).blur(function () { focused = !1 }).focus(function () { focused = !0 }), a.flexslider.defaults = { namespace: "flex-", selector: ".slides > li", animation: "fade", easing: "swing", direction: "horizontal", reverse: !1, animationLoop: !0, smoothHeight: !1, startAt: 0, slideshow: !0, slideshowSpeed: 7e3, animationSpeed: 600, initDelay: 0, randomize: !1, thumbCaptions: !1, pauseOnAction: !0, pauseOnHover: !1, pauseInvisible: !0, useCSS: !0, touch: !0, video: !1, controlNav: !0, directionNav: !0, prevText: "Previous", nextText: "Next", keyboard: !0, multipleKeyboard: !1, mousewheel: !1, pausePlay: !1, pauseText: "Pause", playText: "Play", controlsContainer: "", manualControls: "", sync: "", asNavFor: "", itemWidth: 0, itemMargin: 0, minItems: 1, maxItems: 0, move: 0, allowOneSlide: !0, start: function () { }, before: function () { }, after: function () { }, end: function () { }, added: function () { }, removed: function () { }, init: function () { } }, a.fn.flexslider = function (b) { if (void 0 === b && (b = {}), "object" == typeof b) return this.each(function () { var c = a(this), d = b.selector ? b.selector : ".slides > li", e = c.find(d); 1 === e.length && b.allowOneSlide === !0 || 0 === e.length ? (e.fadeIn(400), b.start && b.start(c)) : void 0 === c.data("flexslider") && new a.flexslider(this, b) }); var c = a(this).data("flexslider"); switch (b) { case "play": c.play(); break; case "pause": c.pause(); break; case "stop": c.stop(); break; case "next": c.flexAnimate(c.getTarget("next"), !0); break; case "prev": case "previous": c.flexAnimate(c.getTarget("prev"), !0); break; default: "number" == typeof b && c.flexAnimate(b, !0) } } }(jQuery);

$('input[type=radio][name=compensationType]').on('change', function () {
    clearErrors('TravleWarrentyFrom');
    $("#divVoucher1").hide();
    $("#divDiscount").hide();
    $("#divVoucher2").hide();
    $("#divBank").hide();
    $("#divCompany").hide();

    switch ($(this).val()) {
        case 'IsVoucher1':
            $("#divVoucher1").show();
            $("#selectedOption").val("SelectCoupon");
            break;
        case 'IsDiscount':
            $("#divDiscount").show();
            $("#selectedOption").val("SelectDiscountCode");
            break;
        case 'IsBank':
            $("#divBank").show();
            $("#selectedOption").val("SelectNationalBank");
            break;
        case 'IsCompany':

            $("#divCompany").show();
            $("#selectedOption").val("SelectInternationalOrCompanyBank");
            break;
    }

});

function clearErrors(formid) {
    $('.validation-summary-errors ul').empty();
    $('#FormError').hide();
    $('#formError').hide();
    $('#' + formid).validate().resetForm();
    $('.field-validation-error').empty();
    $('.field-validation-error').attr("class", "field-validation-valid")
}

$('input[type=radio][name=Voucher1Select]').on('change', function () {
    var value = $(this).val();
    switch ($(this).val()) {
        case 'SelectedCoupon.SMS':
            $(".SelectedCoupon-SMS").show();
            $(".SelectedCoupon-Email").hide();
            break;
        case 'SelectedCoupon.Email':
            $(".SelectedCoupon-Email").show();
            $(".SelectedCoupon-SMS").hide();
            break;
    }
    $("#selectedVoucherSend").val(value);
});

//=========== October-2016 SM17374430 responeive media functionality Nyhets-, Imformations- och Temaundersida ========================================

var youTubeDefaults = {
    dim4by3: { width: 420, height: 315, ratio: 0.75 }
    , dim16by9: { width: 630, height: 354, ratio: 0.5625 }
};

Skanetr.pageTypesForResponsiveMedia = {
    InformationPage: '.page-content'
    , NewsPage: '.page-content'
    , ThemePage: '.page-content'
};

Skanetr.checkCurrentPageType = function () {
    if (typeof skanetrCurrentPage === 'undefined') {
        Skanetr.currentPageType = 'LOREM_IPSUM';
    }
    else {
        Skanetr.currentPageType = skanetrCurrentPage;
    }

}

Skanetr.getMediaAdjustmentInfo = function (obj) {

    if (Skanetr.pageTypesForResponsiveMedia.hasOwnProperty(Skanetr.currentPageType)) {
        Skanetr.logg("$('body').innerWidth() %d", $('body').innerWidth());

        var hardCodedStartSelector = Skanetr.pageTypesForResponsiveMedia[Skanetr.currentPageType]; //selector chosen from existing HTML from the time this function was developed.
        var importantResult = $(hardCodedStartSelector);
        if (importantResult.length < 1) {
            obj.errorAlert = function () {
                alert("Someone created a bug by changing critical html on this page!! Hardcoded jQuerySelector for responsiveness need to return non-empty collection!");
            }
        }
        else {
            obj.iFrames = $(importantResult).find('iframe');
            obj.images = $(importantResult).find('img');
        }
        return obj;

    }
    else return null;
}

Skanetr.makeResponiveFunc = function () {
    Skanetr.logg("makeResponiveFunc");

    var relevansObj = null;
    if (arguments && arguments.length > 0) {
        Skanetr.logg("relevansObj from previous %o", arguments[0]);
        relevansObj = arguments[0];
    }
    else {
        Skanetr.logg("new relevansObj");
        relevansObj = Skanetr.getMediaAdjustmentInfo({ errorAlert: null, iFrames: {}, images: {} });
    }

    Skanetr.logg("$('body').innerWidth() %d", $('body').innerWidth());

    if (relevansObj && $('body').innerWidth() < 1000) {
        if (typeof relevansObj.errorAlert == 'function') {
            relevansObj.errorAlert();
            return null;
        };
        //else:
        Skanetr.logg("Iframes ", relevansObj.iFrames);
        $.each(relevansObj.iFrames, function (idx) {

            Skanetr.logg("Loop Nr: %d", idx);
            var Dims = { origWidth: 0, origHeight: 0, origRatio: 0, newWidth: 0, newHeight: 0 };
            var frame = $(this);
            //var frameBorder = frame.prop("frameborder");
            //var cssBorder = { left: parseFloat(frame.css('border-left-width')), right: parseFloat(frame.css('border-left-width'))};

            var parent = frame.parent();
            var parentStyles = Skanetr.getParentStyles(parent);

            Dims.origWidth = frame.prop("width");
            Dims.origHeight = frame.prop("height");

            /*if(isNaN(Dims.origWidth) || isNaN(Dims.origWidth)){
                Skanetr.logg("Dims origWidthORheight NaN. Trying to get css values");
                Dims.origWidth = parseFloat(frame.css('max-width'));
                Dims.origHeight = parseFloat(frame.css('max-height'));
            }*/

            Dims.origRatio = Dims.origHeight / Dims.origWidth;
            Skanetr.logg("Dims Before %o", Dims);
            if (isNaN(Dims.origRatio)) {
                Skanetr.logg("Dims.origRatio NaN. Setting youTubeDefaults.");
                Dims.origRatio = youTubeDefaults.dim16by9.ratio; //setting a default.			
            }

            Dims.newWidth = Math.round(parentStyles.getAvailableWidth() * 0.999);
            Dims.newHeight = Math.round(Dims.newWidth * Dims.origRatio);

            frame.prop("width", Dims.newWidth);
            frame.prop("height", Dims.newHeight);

            frame.css("max-width", Dims.newWidth + "px");
            frame.css("max-height", Dims.newHeight + "px");

            Skanetr.logg("Dims after %o", Dims);

        }); //end each
        $.each(relevansObj.images, function () {
            var parent = $(this).parent();
            var parentStyles = Skanetr.getParentStyles(parent);

            var imgWidth = Math.round(parentStyles.getAvailableWidth() * 0.999);
            //$(this).attr('width', '99.99%');
            $(this).attr('width', imgWidth + 'px');
            $(this).attr('height', 'auto');
        }); //end each	
    }
    return relevansObj;

}

Skanetr.getParentStyles = function (parent) {

    //parent must be of type jQuery object.
    var parentStyles = {
        paddingRight: parseFloat(parent.css('padding-right'))
        , paddingLeft: parseFloat(parent.css('padding-left'))
        , innerWidth: parent.innerWidth()
        , getAvailableWidth: function () {
            var retVal = (this.innerWidth - this.paddingLeft - this.paddingRight);
            Skanetr.logg("availableWidth about to return: " + retVal);
            return retVal;
        }
    };

    return parentStyles;

}

$(window).bind("pageshow", function () {
    //var form = $('form'); 
    // let the browser natively reset defaults
    //form[0].reset();
    //$("#from").val('');
    //$("#to").val('');

});

// Function to update aria-checked attribute for radio based on checked state
function updateAriaCheckedOnRadio
    () {
    $(".st-radio-button__input").each(function () {
        var isChecked = $(this).prop("checked");
        var label = $(this).closest(".st-radio-button");
        label.attr("aria-checked", isChecked ? "true" : "false");
    });
}

// Function to update aria-checked attribute for checkbox based on checked state
function updateAriaCheckedOnCheckbox
    () {
    $(".st-checkbox__input").each(function () {
        var isChecked = $(this).prop("checked");
        var label = $(this).closest(".st-checkbox");
        label.attr("aria-checked", isChecked ? "true" : "false");
    });
}

// Function to update checkbox with correct class when disabled
function updateCheckboxesIfDisabled() {
    $('input[type="checkbox"].st-checkbox__input').each(function () {
        if ($(this).is(':disabled')) {
            $(this).closest('label').addClass('st-checkbox--is-disabled');
            $(this).attr('tabindex', '-1');
        }
        else {
            $(this).closest('label').removeClass('st-checkbox--is-disabled');
            $(this).attr('tabindex', '0');
        }
    });
}

// Function to update radios with correct class when disabled
function updateRadiosIfDisabled() {
    $('input[type="radio"].st-radio-button__input').each(function () {
        if ($(this).is(':disabled')) {
            $(this).closest('label').addClass('st-radio-button--is-disabled');
            $(this).attr('tabindex', '-1');
        }
    });
}
// Set initial aria-checked and disabled value based on the state
function setInitialRadioState() {
    updateAriaCheckedOnRadio();
    updateRadiosIfDisabled()
}

// Set initial aria-checked and disabled value based on the state
function setInitialCheckBoxState() {
    updateAriaCheckedOnCheckbox();
    updateCheckboxesIfDisabled()
}
setInitialRadioState();
setInitialCheckBoxState();
$(document).ready(function() {
    $(".my-account form input[type=submit]").on('click', function (e) {
        $(this).parents('form').submit();
        return false;
    });

    ko.bindingHandlers.readonly = {
        update: function (element, valueAccessor) {
            if (valueAccessor()) {
                $(element).attr("readonly", "readonly");
                $(element).addClass("disabled");
            } else {
                $(element).removeAttr("readonly");
                $(element).removeClass("disabled");
            }
        }
    };

    $(document).trigger('format-json');
});

$(document).on('format-json', function () {
    $('div.validation-summary-errors ul li').each(function(index) {
        var $li = $(this);
        try {
            var json = JSON.parse($li.text());
            $li.html('<pre style="white-space: pre-wrap">' + JSON.stringify(json, null, 2) + '</pre>');
        }
        catch (e) {}
    });
});

// This is used for devices that do not support ECMAScript 5, e.g. IPhone 3GS
if (typeof Object.create === 'undefined') {
    Object.create = function (o) {
        function F() { }
        F.prototype = o;
        return new F();
    };
}

$(document).on("click", ".js-reload-page-button", function () {
    location.reload(true);
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.accordionsList = function () {
        var pub = {},
            priv = {};

        priv.accordionListSettings = [];
        priv.isIOSDevice = false;

        priv.checkIfIsIOSDevice = function()
        {
            var isIPad = navigator.userAgent.match(/iPad/i) != null;
            var isIPhone = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);

            return isIPad || isIPhone;
        }

        priv.getAccordionListSettings = function(accordionListId) {

            var accordionListSettings = {};
            $.each(priv.accordionListSettings, function (index, settings) {
                if (settings.id == accordionListId) {
                    accordionListSettings = settings;
                    return;
                }
            });

            return accordionListSettings;
        }

        priv.getAccordionSettings = function ($accordionButton) {

            var $accordionContainer = $($accordionButton.data('accordion-container'));
            var clickedButtonsToggleContainerSelector = $accordionButton.data('toggle-container');

            var accordionListSettings = priv.getAccordionListSettings($accordionContainer.attr('id'));

            var accordionSettings = {
                clickedButton: $accordionButton,
                accordionContainer: $accordionContainer,
                accordionButtons: $($accordionContainer.find('[data-toggle=accordion]')),
                classToToggle: $accordionButton.data('toggle-class'),
                clickedButtonsToggleContainerSelector: clickedButtonsToggleContainerSelector,
                clickedButtonsToggleContainer: $(clickedButtonsToggleContainerSelector),
                contentUrl: $accordionButton.data('toggle-container-content-url'),
                accordionListSettings: accordionListSettings
        };

            return accordionSettings;
        }

        priv.updateContainerContentFromUrl = function(accordionSettings) {
            $.get(accordionSettings.contentUrl, function (data) {
                accordionSettings.clickedButtonsToggleContainer.html(data);
                priv.performToggle(accordionSettings);
            });
        }

        priv.toggleIconClass = function($accordionButton, collapsedIconClass, expandedIconClass) {
            var $iconElement = $($accordionButton.find('.icon'));

            if ($iconElement.hasClass(collapsedIconClass)) {
                $iconElement.removeClass(collapsedIconClass);
                $iconElement.addClass(expandedIconClass);
            } else {
                $iconElement.removeClass(expandedIconClass);
                $iconElement.addClass(collapsedIconClass);
            }
        }

        priv.performToggle = function(accordionSettings) {
            $.each(accordionSettings.accordionButtons, function (index, button) {
                var $button = $(button);
                var toggleContainerSelector = $button.data('toggle-container');
                var $toggleContainer = $(toggleContainerSelector);

                if (!$toggleContainer.hasClass(accordionSettings.classToToggle) && accordionSettings.clickedButtonsToggleContainerSelector != toggleContainerSelector) {
                    skanetrafiken.modules.toggle().toggleElement($button, accordionSettings.classToToggle);
                    priv.toggleIconClass($button, accordionSettings.accordionListSettings.collapsedIconClass, accordionSettings.accordionListSettings.expandedIconClass);
                }
            });

            skanetrafiken.modules.toggle().toggleElement(accordionSettings.clickedButton, accordionSettings.classToToggle);
            priv.toggleIconClass(accordionSettings.clickedButton, accordionSettings.accordionListSettings.collapsedIconClass, accordionSettings.accordionListSettings.expandedIconClass);
            return true;
        }

        priv.initAccordionListSettings = function () {
            $.each($('.accordion-list'), function(index, item) {
                var $accordionList = $(item);
                var accordionListSettings = {
                    id: $accordionList.attr('id'),
                    collapsedIconClass: $accordionList.data('collapsed-icon-class'),
                    expandedIconClass: $accordionList.data('expanded-icon-class')
                };

                priv.accordionListSettings.push(accordionListSettings);
            });
        }

        priv.onClickEvent = function ($clickedAccordionButton) {
            var accordionSettings = priv.getAccordionSettings($clickedAccordionButton);

            if (accordionSettings.contentUrl && accordionSettings.contentUrl.length > 0) {
                priv.updateContainerContentFromUrl(accordionSettings);
            } else {
                priv.performToggle(accordionSettings);
            }
        }

        priv.init = function () {

            priv.initAccordionListSettings();
            priv.isIOSDevice = priv.checkIfIsIOSDevice();

            if (priv.isIOSDevice) {
                $(document).off('touchend', '[data-toggle=accordion]').on('touchend', '[data-toggle=accordion]', function () {
                    priv.onClickEvent($(this));
                });
            } else {
                $(document).off('click', '[data-toggle=accordion]').on('click', '[data-toggle=accordion]', function () {
                    priv.onClickEvent($(this));
                });

                $(document).off('keyup', '[data-toggle=accordion]').on('keyup', '[data-toggle=accordion]', function (event) {
                    if (event.which == 13) {
                        priv.onClickEvent($(this));
                    }
                });
            }
        };

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.accordions = function () {
        var pub = {},
            priv = {};

        priv.init = function () {
            $(document).on('click', '.collapsable-button', function () {
                var $collapsable = $(this).parent('.collapsable');
                $collapsable.toggleExpand();
            });

            $(document).ready(function() {
                var collapsables = $('.collapsable.expanded');
                $.each(collapsables, function (i, item) {
                    $(item).removeClass('expanded');
                    $(item).expand();
                });
            });

            $.fn.extend({
                toggleExpand: function () {
                    if (this.hasClass('expanded')) {
                        this.collapse();
                    } else {
                        this.expand();
                    }
                }
            });

            $.fn.extend({
                collapse: function () {
                    var $collapsable = $(this);
                    if (!$collapsable.hasClass('expanded')) return;
                    var $collapsableContent = $collapsable.find('.collapsable-content');
                    var $collapsableButton = $collapsable.find('.collapsable-button');
                    priv.hideContent($collapsable, $collapsableContent, $collapsableButton);
                    $collapsable.removeClass('expanded');
                }
            });

            $.fn.extend({
                expand: function () {
                    var $collapsable = $(this);
                    if ($collapsable.hasClass('expanded')) return;

                    var $expandedCollapsables = $('.collapsable.expanded');
                    var $collapsableContent = $collapsable.find('.collapsable-content');
                    var $collapsableButton = $collapsable.find('.collapsable-button');
                    var redirectUrl = $collapsableButton.data('href');

                    if (redirectUrl && redirectUrl.length > 0) {

                        $.get(redirectUrl, function (partialViewData) {
                            priv.collapseAll($expandedCollapsables);
                            $collapsableContent.html(partialViewData);
                            priv.expandContent($collapsable, $collapsableContent, $collapsableButton);
                        });
                    } else {
                        priv.collapseAll($expandedCollapsables);
                        priv.expandContent($collapsable, $collapsableContent, $collapsableButton);
                    }

                    $collapsable.addClass('expanded');
                }
            });
        };

        priv.expandContent = function ($collapsable, $collapsableContent, $collapsableButton) {
            $collapsableContent.attr('aria-expanded', 'true');
            $collapsableContent.attr('tabindex', '0');
            $collapsableButton.addClass('noRoundedButtomCorners');
            $collapsableButton.find('.toggleable-icon').removeClass('down');
            $collapsableButton.find('.toggleable-icon').addClass('up');
            $collapsableContent.show().focus();

            skanetrafiken.modules.validation().clearValidationErrors();
        }

        priv.hideContent = function ($collapsable, $collapsableContent, $collapsableButton) {
            $collapsableContent.attr('aria-expanded', 'false');
            $collapsableContent.attr('tabindex', '-1');
            $collapsableButton.removeClass('noRoundedButtomCorners');
            $collapsableButton.find('.toggleable-icon').removeClass('up');
            $collapsableButton.find('.toggleable-icon').addClass('down');
            $collapsableContent.hide();
        }

        priv.collapseAll = function ($expandedCollapsables) {
            $.each($expandedCollapsables, function (i, item) {
                $(item).collapse();
            });
        }

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.birthdate = skanetrafiken.models.birthdate || {};

    skanetrafiken.models.birthdate.ViewModel = function (settings) {
        var self = this;

        var pa = JSON.parse(settings);
        self.birthDates = pa['BirthDates'];

        var getDays = function (days) {
            var arr = [];
            for (var i = 1; i <= days; i++) {
                arr.push(i);
            }

            return arr;
        };

        self.birthYears = [];
        self.birthMonths = ko.observableArray();
        self.birthDays = ko.observableArray();
        self.selectedYear = ko.observable();
        self.selectedMonth = ko.observable();
        self.selectedDay = ko.observable();
        self.selectedMonthName = ko.observable("");

        self.selectedYear.subscribe(function (year) {
            self.birthMonths([]);
            if (!year) {
                self.birthDays([]);
                return;
            }

            $.each(self.birthDates.Dates[year], function (key, value) {
                self.birthMonths.push({ month: key, name: self.birthDates.Months[key] });
            });
        });

        self.selectedMonth.subscribe(function (month) {
            if (!month) {
                self.selectedMonthName("");
                self.birthDays([]);
                return;
            }
            var days = self.birthDates.Dates[self.selectedYear()][month];
            self.birthDays(getDays(days));

            var matchingMonths = $.grep(self.birthMonths(), function (item) {
                return item.Month == self.selectedMonth();
            });

            if (matchingMonths.length > 0) {
                self.selectedMonthName(matchingMonths[0].name);
            }
        });

        $.each(self.birthDates.Dates, function (key) {
            self.birthYears.push(key);
        });

        self.birthYears.sort();
        self.birthYears.reverse();

        if (self.birthDates.BirthYear > 0) {
            self.selectedYear(self.birthDates.BirthYear);
            self.selectedMonth(self.birthDates.BirthMonth);
            self.selectedDay(self.birthDates.BirthDay);
        }
    };

    skanetrafiken.modules.birthdate = function () {
        var pub = {},
            priv = {};

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.editmode = function () {
        var pub = {},
            priv = {};

        priv.init = function () {
            $.each($('.edit-mode-container'), function(index, editModeContainer) {

                var $editModeContainer = $(editModeContainer);

                // Edit mode is disabled by default.
                priv.deactivateEditMode($editModeContainer);

                var $editModeActivator = $editModeContainer.find('.activates-edit-mode');
                var $editModeDeactivator = $editModeContainer.find('.deactivates-edit-mode');

                $editModeActivator.on('click', function () {
                    priv.activateEditMode($editModeContainer);
                    return false;
                });

                $editModeDeactivator.on('click', function () {
                    priv.deactivateEditMode($editModeContainer);
                    return false;
                });
            });
        };

        priv.activateEditMode = function ($editModeContainer) {
            $editModeContainer.find('.visible-in-edit-mode').show().attr('aria-hidden', 'false');
            $editModeContainer.find('.hidden-in-edit-mode').hide().attr('aria-hidden', 'true');
        }

        priv.deactivateEditMode = function ($editModeContainer) {
            $editModeContainer.find('.visible-in-edit-mode').hide().attr('aria-hidden', 'true');
            $editModeContainer.find('.hidden-in-edit-mode').show().attr('aria-hidden', 'false');
            $editModeContainer.find('.clear-on-deactivate').val('').text('');
        }

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function() {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.maskedaddress = function() {
        var pub = {};

        pub.get = function(settings, func) {
            var ssn = settings.ssn.replace(/\D/g, '');
            if (ssn.length !== 10 && ssn.length !== 12) {
                return;
            }

            var data = {
                socialSecurityNumber: ssn,
                __RequestVerificationToken: settings.token
            }

            $.post(settings.getAddressUrl, data, function(data) {
                return func(data);
            });
        };

        return pub;
    };
});
$(document).ajaxSend(function (event, jqxhr, settings) {
    $('.ladda-button:enabled').attr('disabled', 'disabled').attr('enable-after-call', '');
});

$(document).ajaxStop(function () {
    $('.ladda-button[enable-after-call]').removeAttr('disabled').removeAttr('enable-after-call');
});

function onGlobalSuccess(event, request, settings, data) {
    $(document).trigger('format-json');
    $(document).trigger("stop-ladda");

    if (!data) {
        return;
    }

    if (data.length <= 0 || !data.indexOf) {
        return;
    }

    if (data.indexOf('<form') > -1) {
        $(document).trigger("load-validation");
    }

    if (data.indexOf('ladda-button') > -1) {
        $(document).trigger("init-ladda");
    }

    setupAjaxButtons();

    // When using a version of IE less than 9 some pollyfills must be loaded
    // each time an ajax request is completed to make sure all pollyfills are
    // applied on the HTML returned by the Ajax request.
    if (data.indexOf('<') > -1 && window.IE7) {
        IE7.CSS.init();
        IE7.HTML.init();
        IE7.HTML.apply();
        IE7.CSS.apply();
        IE7.recalc();
    }
}

var forgotPasswordAjaxRedirect = function forgotPasswordAjaxRedirect(result) {
    if (result.url) {
        window.location.href = result.url;
    } else {
        $('#forgot-password-form').html(result);
    }
}

function onGlobalError(event, jqxhr, settings, thrownError) {
    if (jqxhr.status == 500) {
        $.notify($.notify.defaults.internalServerErrorMessage, "error");
    }

    // When unauthorized and making ajax request to a page that requires an authorized user the
    // partial view will be replaced with a full login page. Thus, we return a 401 status code 
    // from the server to prevent the partial view to be updated and further reload the page
    // to be redirected to the login page.
    if (jqxhr.status == 401) {
        window.location.href = window.location.href;
    }

    $(document).trigger("stop-ladda");
}

// A custom implementation has been made for the Ajax.ActionLink that renders a <button> tag instead of an <a> tag.
// This script is the implementation of that custom implementation.
var setupAjaxButtons = function() {
    $('button.ajax-button').each(function(index, button) {
        var $button = $(button);

        var updateTargetId = $button.data('update-target-id');
        var url = $button.data('url');
        var httpMethod = $button.data('http-method');
        var useScrollForIosDevices = $button.data('use-scroll-for-ios');

        // Make sure that the button only has 1 event attatched.
        $button.off('click');

        $button.on('click', function(event) {
            event.preventDefault();
            
            // Only make an Ajax call when proper parameters are served.
            if (updateTargetId && url && httpMethod == "GET") {
                var $laddaButton = $button.ladda();
                $laddaButton.ladda('start');
                $.get(url, function (data) {
                    var $updateTargetElement = $('#' + updateTargetId);
                    $laddaButton.ladda('stop');
                    $updateTargetElement.html(data);

                    // When the new data is loaded into the DOM the updated element shall be focused
                    // to enable easy keyboard navigation.
                    if (useScrollForIosDevices) {
                        skanetrafiken.modules.updatetarget.setFocusIOS(updateTargetId);
                    } else {
                        skanetrafiken.modules.updatetarget.setFocus(updateTargetId);
                    }
                });
            }
        });
    });
}

$(function() {
    $(document).ajaxError(function(event, jqxhr, settings, thrownError) {
        onGlobalError(event, jqxhr, settings, thrownError);
    });

    $(document).ajaxSuccess(function(event, request, settings, data) {
        onGlobalSuccess(event, request, settings, data);
    });

    setupAjaxButtons();
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.guid = function () {
        var pub = {},
            priv = {};

        priv.s4 = function () {
            return Math.floor((1 + Math.random()) * 0x10000)
              .toString(16)
              .substring(1);
        }

        pub.newGuid = function () {
            return priv.s4() + priv.s4() + '-' + priv.s4() + '-' + priv.s4() + '-' + priv.s4() + '-' + priv.s4() + priv.s4() + priv.s4();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.infoboxes = function () {
        var pub = {},
            priv = {};

        priv.init = function () {
            $(document).on('click', '.info-box-button', function () {
                var $infoBox = $(this).parent();
                var $infoBoxContent = $($infoBox.find('.info-box-content'));
                var $infoBoxIcon = $($(this).find('.toggleable-icon'));

                if ($infoBoxContent.hasClass('hidden')) {
                    $infoBoxContent.removeClass('hidden');
                    $infoBoxContent.attr('aria-expanded', 'true');
                    $infoBoxContent.attr('tabindex', '0');
                    $infoBoxContent.focus();
                }
                else {
                    $infoBoxContent.addClass('hidden');
                    $infoBoxContent.attr('aria-expanded', 'false');
                    $infoBoxContent.attr('tabindex', '-1');
                }

                $infoBoxIcon.toggleClass('down');
                $infoBoxIcon.toggleClass('up');                

            });
        };

        pub.init = function () {
            priv.init();
        };

        return pub;
    };

    skanetrafiken.modules.scrollToCart = function () {
        var scrollToDiv = $('#cart-container');

        if (scrollToDiv.length > 0) {
            $('html,body').animate({
                scrollTop: scrollToDiv.offset().top
            }, 'slow', function () { scrollToDiv.focus(); });
        }
    };
});


//Consent 
$(function () { //$(document).ready
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.consent = function () {
        var pub = {},
            priv = {};
					

        priv.init = function (consentElementIds, selectorBtnToEnableDisable) {
            var Ids;
            var isBtn = (selectorBtnToEnableDisable && $(selectorBtnToEnableDisable).length > 0 )
            if (!consentElementIds) {
                if (typeof (STGlobal) != 'undefined' && typeof (STGlobal.getLog) == 'function') {
                    STGlobal.getLog('consentLog').log("skanetrafiken.modules.consent.init: Parameters missing: consentElementIds");
                }

                return;
            }
            else {
                Ids = consentElementIds; // ConfirmOrder.cshtml
            }
			
            //if no consent exists
            if ($('#' + Ids.chkConsentId).length < 1) {
                if(document.getElementById(Ids.hfConsentId)){
                    $("#" + Ids.hfConsentId).val("true");              
                }		
            }
            //else consent exists:
            else if(isBtn){
                $(selectorBtnToEnableDisable).prop("disabled", true)	
            }
			
            $(document).on('change', '#' + Ids.chkConsentId , function () {
                //TransferConsentToHidden
                if(document.getElementById(Ids.hfConsentId)){
                    $("#" + Ids.hfConsentId).val($(this).is(":checked").toString());									
                }
				
                if(isBtn){
                    $(selectorBtnToEnableDisable).prop("disabled", !$(this).is(":checked"))	
                }
            });
        };

        pub.init = function (consentElementIds, selectorBtnToEnableDisable) {
            priv.init(consentElementIds, selectorBtnToEnableDisable);
        };

        return pub;
    };


});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.inputToggler = function (settings) {
        var pub = {},
            priv = {};
        settings.inputTogglerSettings = [];

        priv.showInput = function ($elementToToggle) {
            $elementToToggle.prop('disabled', false);
            $elementToToggle.find('input').attr('tabindex', 0).prop('disabled', false);
            $elementToToggle.removeClass(settings.classThatHidesTheElement);
            $elementToToggle.attr('aria-expanded', 'true');
        };

        priv.hideInput = function ($elementToToggle) {
            $elementToToggle.prop('disabled', true);
            $elementToToggle.find('input').attr('tabindex', -1).prop('disabled', true);
            $elementToToggle.addClass(settings.classThatHidesTheElement);
            $elementToToggle.attr('aria-expanded', 'false');
        };

        priv.toggleInput = function($elementToToggle) {
            if ($elementToToggle.attr('aria-expanded') === 'true') {
                priv.hideInput($elementToToggle);
            } else {
                priv.showInput($elementToToggle);
            }
        };

        priv.setupRadioInputToggler = function ($inputToggler, $elementToToggle) {
            if ($inputToggler.is(':checked')) {
                priv.showInput($elementToToggle);
            } else {
                priv.hideInput($elementToToggle);
            }
        };

        priv.getElementToToggle = function ($inputToggler) {
            var idForElementToToggle = $inputToggler.attr('aria-controls');
            return $('#' + idForElementToToggle);
        };

        priv.init = function () {

            $.each($('[data-controls-input-togglers]'), function(controllerIndex, inputTogglersController) {
                var $inputTogglersController = $(inputTogglersController);
                var inputTogglerType = $inputTogglersController.data('input-toggler-type');
                var idsToAllInputTogglers = $inputTogglersController.data('controls-input-togglers').split(',');

                if (inputTogglerType === 'Radio') {
                    $.each(idsToAllInputTogglers, function (togglerIndex, inputTogglerId) {
                        var $inputToggler = $('#' + inputTogglerId);
                        var inputTogglerValue = $inputToggler.val();
                        var $elementToToggle = priv.getElementToToggle($inputToggler);
                        settings.inputTogglerSettings.push({ key: inputTogglerValue, elementToToggle: $elementToToggle, type: inputTogglerType, controllerId: $inputTogglersController.attr('id') });
                        priv.setupRadioInputToggler($inputToggler, $elementToToggle);
                    });
                }
            });

            $(document).on('click', '[data-controls-input-togglers] .input-toggler', function () {
                var $inputToggler = $(this);
                var inputTogglerValue = $inputToggler.val();
                var inputTogglersControllerId = $inputToggler.closest('[data-controls-input-togglers]').attr('id');
                $.each(settings.inputTogglerSettings, function(index, inputTogglerSettings) {
                    if (inputTogglerSettings.controllerId === inputTogglersControllerId && inputTogglerSettings.key === inputTogglerValue) {
                        priv.showInput(inputTogglerSettings.elementToToggle);
                    }
                    else if (inputTogglerSettings.controllerId === inputTogglersControllerId) {
                        priv.hideInput(inputTogglerSettings.elementToToggle);
                    }
                });
            });
        };

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.ladda = function () {
        var pub = {},
            priv = {};

        priv.actionLinks = [];

        priv.initEvents = function () {
            $(document).on('init-ladda', function() {
                priv.initLadda();
            });

            $(document).on('stop-ladda', function () {
                $.ladda('stopAll');
            });
        };

        priv.initLadda = function () {
            $('form').submit(function () {
                if ($(this).valid() == false) return;
                var buttons = $('.ladda-button[type=submit]', this);
                $.each(buttons, function(i, element) {
                    $(element).ladda().ladda('start');
                });
            });

            $('a.ladda-button').ladda('bind');
        };

        pub.init = function () {
            priv.initEvents();
            priv.initLadda();
        };

        return pub;
    };

    skanetrafiken.modules.ladda().init();
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.notification = function (settings) {
        var pub = {},
            priv = {};

        priv.init = function () {
            // Note: the internal server error message will always be shown when the notification is visible.
            // We put the message directly in the html property to allow internal server error messages to
            // have html in them.
            $.notify.addStyle("skanetrafiken", {
                html: "<div role='alert'><div class='image'></div>" + settings.internalServerErrorMessage + "</div>"
            });
            $.notify.defaults({
                style: 'skanetrafiken',
                showAnimation: 'fadeIn',
                hideAnimation: 'fadeOut'
            });
            $.notify.defaults.internalServerErrorMessage = settings.internalServerErrorMessage;
        };

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {
	window.skanetrafiken = window.skanetrafiken || {};
	skanetrafiken.modules = skanetrafiken.modules || {};

	skanetrafiken.modules.pagination = function () {
		var pub = {},
            priv = {};

		priv.init = function () {
			$('.st-pagination li').on('click', function () {
				var href = $(this).find('a').attr('href');
				if (href != null)
					window.location = href;
			});
		};

		pub.init = function () {
			priv.init();
		};

		return pub;
	};
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.selectComponent = function () {
        var pub = {},
            priv = {};

        priv.init = function () {
            $(document).on('change', '.select-component select', function () {

                var $selectComponent = $($(this).parents('.select-component'));

                if ($selectComponent.data('post-on-change') == true) {
                    priv.postChangedValue($selectComponent);
                }

                $(this).siblings(".select-value").html($(this).children("option").filter(":selected").text());
            }).change();
        };

        priv.postChangedValue = function($selectComponent) {
            var url = $selectComponent.data('post-url');
            var postData = $selectComponent.data('params');

            var token = $selectComponent.prev('.request-verification-token').find('input').val();

            postData.__RequestVerificationToken = token;

            var paramToUpdate = $selectComponent.data('param-to-update');
            var updateTargetId = $selectComponent.data('update-target-id');
            var selectedValue = $selectComponent.find('select option:selected').val();
            postData[paramToUpdate] = selectedValue;

            $.post(url, postData, function(data) {
                $('#' + updateTargetId).html(data);
            });
        }

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.tabs = function () {
        var pub = {},
            priv = {};

        priv.getActiveTab = function ($tabComponent) {

            var $activeTab;
            $tabComponent.find('[role=tab]').each(function(index, currentTab) {
                var $currentTab = $(currentTab);
                if ($currentTab.attr('aria-selected') == 'true') {
                    $activeTab = $currentTab;
                    return false;
                }

                return true;
            });

            return $activeTab;
        }

        priv.activeTabClass = "active-tab";

        priv.selectPreviousTab = function ($tabComponent, $tabs, $tabWithFocus) {
            var tabWithFocusIndex = $tabs.index($tabWithFocus);

            if (tabWithFocusIndex == 0) {
                priv.selectTab($tabComponent, $($tabs[$tabs.length - 1]));
            } else {
                priv.selectTab($tabComponent, $($tabs[--tabWithFocusIndex]));
            }
        }

        priv.selectNextTab = function ($tabComponent, $tabs, $tabWithFocus) {
            var tabWithFocusIndex = $tabs.index($tabWithFocus);

            if (tabWithFocusIndex == $tabs.length -1) {
                priv.selectTab($tabComponent, $($tabs[0]));
            } else {
                priv.selectTab($tabComponent, $($tabs[++tabWithFocusIndex]));
            }
        }

        priv.makeTabSelection = function ($activeTab, $activeTabContent, $tabToSelect, $tabContent) {
            $activeTab.removeClass(priv.activeTabClass);
            $activeTab.attr('aria-selected', false);
            $activeTab.attr('tabindex', -1);
            $activeTabContent.addClass('hidden');
            $activeTabContent.attr('aria-hidden', true);

            $tabToSelect.removeClass('hover');
            $tabToSelect.addClass(priv.activeTabClass);
            $tabToSelect.attr('aria-selected', true);
            $tabToSelect.attr('tabindex', 0);
            $tabToSelect.focus();
            $tabContent.removeClass('hidden');
            $tabContent.attr('aria-hidden', false);
        }

        priv.selectTab = function($tabComponent, $tabToSelect) {
            var $activeTab = priv.getActiveTab($tabComponent);
            var activeTabContentId = $activeTab.attr("aria-controls");
            var $activeTabContent = $('#' + activeTabContentId);

            var tabUrl = $tabToSelect.data("url");
            var tabContentId = $tabToSelect.attr("aria-controls");
            var $tabContent = $('#' + tabContentId);

            // Don't do anything when the active tab is clicked.
            if (activeTabContentId == tabContentId) {
                return;
            }

            // The hover class will stay until the data from the URL is loaded.
            $tabToSelect.addClass('hover');

            if (tabUrl) {
                $.get(tabUrl, function (partialViewData) {
                    $('.tab-content').empty();
                    priv.makeTabSelection($activeTab, $activeTabContent, $tabToSelect, $tabContent);
                    $tabContent.html(partialViewData);
                });
            } else {
                priv.makeTabSelection($activeTab, $activeTabContent, $tabToSelect, $tabContent);
            }
        }

        priv.isPreviousNavigation = function (keyCode) {
            if (keyCode == 37 || keyCode == 38) {
                return true;
            }

            return false;
        }

        priv.isNextNavigation = function (keyCode) {
            if (keyCode == 39 || keyCode == 40) {
                return true;
            }

            return false;
        }

        priv.isTabNavigationKeyStroke = function(keyCode) {
            return priv.isPreviousNavigation(keyCode) || priv.isNextNavigation(keyCode);
        }

        priv.performKeyboardNavigation = function (event) {
            
            var keyCode = event.which;
            if (priv.isTabNavigationKeyStroke(keyCode)) {
                $('.tab-component').each(function (index, tabComponent) {

                    var $tabComponent = $(tabComponent);
                    var tabWithFocus = $tabComponent.find('[role=tab]:focus');
                    event.preventDefault();

                    if (!tabWithFocus.length > 0) {
                        return true;
                    }

                    var $tabWithFocus = $(tabWithFocus);
                    var $allTabs = $($tabComponent.find('[role=tab]'));

                    if (priv.isPreviousNavigation(keyCode)) {
                        priv.selectPreviousTab($tabComponent, $allTabs, $tabWithFocus);
                    }

                    if (priv.isNextNavigation(keyCode)) {
                        priv.selectNextTab($tabComponent, $allTabs, $tabWithFocus);
                    }

                    return false;
                });
            }
        }

        priv.disableScrollWithKeysWhenTabIsSelected = function() {
            window.addEventListener("keydown", function (e) {
                var isTabFocused = $(':focus').attr('role') == 'tab';

                // space and arrow keys
                if (isTabFocused && [32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
                    e.preventDefault();
                }
            }, false);
        }

        pub.initClickEvents = function() {
            $('.tab-component').each(function (index, tabComponent) {
                var $tabComponent = $(tabComponent);
                $tabComponent.find('[role=tablist] [role=tab]').on('click', function (event) {
                    event.preventDefault();
                    var $tabToSelect = $(this);
                    priv.selectTab($tabComponent, $tabToSelect);
                });
            });
        }

        pub.initKeyEvents = function() {
            $(document).keyup(function (event) {
                priv.performKeyboardNavigation(event);
            });
        }

        pub.init = function () {
            priv.disableScrollWithKeysWhenTabIsSelected();
            pub.initClickEvents();
            pub.initKeyEvents();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.toggle = function () {
        var pub = {},
            priv = {};

        priv.init = function () {
            $(document).on('click', '[data-toggle]', function () {
                var $self = $(this);
                pub.toggleElement($self);
            });
        };

        pub.toggleElement = function($toggleButton, toggleClass) {
            var $container;
            var newtext;
            var existingtext;

            var type = $toggleButton.data('toggle');
            if (type == "visibility") {
                $container = $($toggleButton.data('toggle-container'));
                newtext = $toggleButton.data('toggle-text');
                existingtext = $toggleButton.text();
                $toggleButton.data('toggle-text', existingtext);
                $toggleButton.text(newtext);
                $container.toggle();
            }

            if (type == "accordion") {
                $container = $($toggleButton.data('toggle-container'));
                $container.toggleClass(toggleClass);
                if ($container.attr('aria-expanded') == 'true') {
                    $container.attr('aria-expanded', false);
                } else {
                    $container.attr('aria-expanded', true);
                }
            }
        }

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {

    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.tooltip = function () {
        
        var targets = $('[rel~=tooltip]'),
        target = false,
        tooltip = false,
        title = false;

        targets.bind('mouseenter', function () {

            target = $(this);
            tip = target.attr('title');
            tooltip = $('<div id="tooltip"></div>');

            if (!tip || tip == '')
                return false;

            target.removeAttr('title');
            tooltip.css('opacity', 0)
                   .html(tip)
                   .appendTo('body');

            var init_tooltip = function () {
                if ($(window).width() < tooltip.outerWidth() * 1.5)
                    tooltip.css('max-width', $(window).width() / 2);
                else
                    tooltip.css('max-width', 340);

                var pos_left = target.offset().left + (target.outerWidth() / 2) - (tooltip.outerWidth() / 2),
                    pos_top = target.offset().top - tooltip.outerHeight() - 30;

                if (pos_left < 0) {
                    pos_left = target.offset().left + target.outerWidth() / 2 - 20;
                    tooltip.addClass('left');
                }
                else
                    tooltip.removeClass('left');

                if (pos_left + tooltip.outerWidth() > $(window).width()) {
                    pos_left = target.offset().left - tooltip.outerWidth() + target.outerWidth() / 2 + 20;
                    tooltip.addClass('right');
                }
                else
                    tooltip.removeClass('right');

                if (pos_top < 0) {
                    var pos_top = target.offset().top + target.outerHeight();
                    tooltip.addClass('top');
                }
                else
                    tooltip.removeClass('top');

                tooltip.css({ left: pos_left, top: pos_top })
                       .animate({ top: '+=15', opacity: 1 }, 50);
            };

            init_tooltip();
            $(window).resize(init_tooltip);

            var remove_tooltip = function () {
                tooltip.animate({ top: '-=15', opacity: 0 }, 50, function () {
                    $(this).remove();
                });

                target.attr('title', tip);
            };

            target.bind('mouseleave', remove_tooltip);
            tooltip.bind('click', remove_tooltip);
        });

    }

    skanetrafiken.modules.tooltip();

});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};
    skanetrafiken.modules.updatetarget = skanetrafiken.modules.updatetarget || {};

    skanetrafiken.modules.updatetarget.setFocus = function (targetId) {
        $('#' + targetId).attr('tabindex', '0').focus();
    };

    skanetrafiken.modules.updatetarget.setFocusIOS = function (targetId) {
        if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
            skanetrafiken.modules.updatetarget.scrollTo(targetId, 0);
        } else {
            skanetrafiken.modules.updatetarget.setFocus(targetId);
        }
    };

    skanetrafiken.modules.updatetarget.scrollTo = function (targetId, speed) {
        var target = $('#' + targetId);

        if (target.length > 0) {
            $('html,body').animate({
                scrollTop: target.offset().top
            }, speed, function () { target.focus(); });
        }
    };
});
(function($) {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.validation = function() {
        var pub = {},
            priv = {};

        priv.initEvents = function() {
            $(document).on("load-validation", function () {
                $.validator.unobtrusive.parse(document);
                priv.addMaxlengthAttribute();
            });
        }

        priv.addMaxlengthAttribute = function() {
            $('input[data-val-length-max]').each(function () {
                $(this).attr('maxlength', $(this).attr('data-val-length-max'));
            });
        }

        priv.initCustomValidation = function () {
            $.validator.unobtrusive.adapters.add('checkboxvalidator', ['value'], function (options) {
                options.rules['checkboxvalidator'] = options.params;
                if (options.message != null) {
                    options.messages['checkboxvalidator'] = options.message;
                }
            });

            $.validator.addMethod('checkboxvalidator', function (value, element, params) {
                if ($(element).is(':checkbox')) {
                    if ($(element).is(':checked')) {
                        return params.value.toLowerCase() === 'true';
                    } else {
                        return params.value.toLowerCase() === 'false';
                    }
                }

                if (params.valuetocompare) {
                return params.valuetocompare.toLowerCase() === value.toLowerCase();
                }

                return true;
            });

            $.validator.unobtrusive.adapters.add('namevalidator', function (options) {
                options.rules['namevalidator'] = options.params;
                if (options.message != null) {
                    options.messages['namevalidator'] = options.message;
                }
            });

            $.validator.addMethod('namevalidator', function (value) {
                if (!value) {
                    return true;
                }

                return /^[A-Za-z\u00C0-\u017F\s-\'\.]+$/.test(value);
            });

            $.validator.unobtrusive.adapters.add('alphanumericvalidator', function (options) {
                options.rules['alphanumericvalidator'] = options.params;
                if (options.message != null) {
                    options.messages['alphanumericvalidator'] = options.message;
                }
            });

            $.validator.addMethod('alphanumericvalidator', function (value) {
                if (!value) {
                    return true;
                }

                return /^[A-Za-z0-9\u00C0-\u017F\s-\'\.]+$/.test(value);
            });

            $.validator.unobtrusive.adapters.add('postalcodevalidator', function (options) {
                options.rules['postalcodevalidator'] = options.params;
                if (options.message != null) {
                    options.messages['postalcodevalidator'] = options.message;
                }
            });

            $.validator.addMethod('postalcodevalidator', function (value) {
                if (!value) {
                    return true;
                }

                return /^\d{4,5}$/.test(value);
            });

            $.validator.unobtrusive.adapters.add('simpleemailvalidator', function (options) {
                options.rules['simpleemailvalidator'] = options.params;
                if (options.message != null) {
                    options.messages['simpleemailvalidator'] = options.message;
                }
            });

            $.validator.addMethod('simpleemailvalidator', function (value) {
                if (!value) {
                    return true;
                }

                return /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(value);
            });

            $.validator.unobtrusive.adapters.add('mobilephonenumberlengthvalidator', function (options) {
                options.rules['mobilephonenumberlengthvalidator'] = options.params;
                if (options.message != null) {
                    options.messages['mobilephonenumberlengthvalidator'] = options.message;
                }
            });

            $.validator.addMethod('mobilephonenumberlengthvalidator', function (value) {
                if (!value) {
                    return true;
                }

                var digits = value.replace('+', '00').replace(/\D/g, '');
                return digits.length >= 9 && digits.length <= 16;
            });
        }

        pub.clearValidationErrors = function() {
            $(document).find(".field-validation-error").empty();
            $(document).trigger('reset.unobtrusiveValidation');

            $('.validation-summary-errors').remove();
            $('.validation-container').remove();
        };

        pub.init = function () {
            priv.initEvents();
            priv.addMaxlengthAttribute();
            priv.initCustomValidation();

            // When a validation summary is present it shall get focus when the user
            // attempts to submit the form.
            $.validator.unobtrusive.options = {
                invalidHandler: function (event, validator) {

                    // Container countaining errors (managed by jquery.unobtrusive.ajax).
                    var validationSummaryErrors = $('.validation-summary-errors', this).first();
                    // Container that includes a validation summary header and the validation summary errors. 
                    var validationContainer = validationSummaryErrors.parents('.validation-container');
                    if (validator.numberOfInvalids() > 0) {
                        if (validationSummaryErrors) {

                            // When the validation container exists in the DOM it shall get focus and the
                            // validation summary header shall be shown.
                            //
                            // When no validation container exists the validation summary errors shall be focused.
                            if (validationContainer) {
                                validationContainer.find('h3').show();
                                //validationContainer.attr('tabindex', '0').focus();
                            }
                        }
                    } else {
                        // When there are no errors the validation summary header shall be hidden.
                        validationContainer.find('h3').hide();
                    }
                }
            };
        };

        return pub;
    };

    skanetrafiken.modules.validation().init();
}(jQuery));
$(function() {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.viewpassword = function() {
        var pub = {};

        pub.init = function() {
            $('button.btn-show-password').click(function (e) {
                var $btn = $(this),
                    id = $btn.data('show-for'),
                    $input = $('#' + id),
                    type = $input.attr('type');

                $btn.blur();
                if (type === 'password') {
                    $input.attr('type', 'text');
                } else {
                    $input.attr('type', 'password');
                }
            });
        };

        return pub;
    };
});
$(function() {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.modules = skanetrafiken.modules || {};
    skanetrafiken.modules.countries = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.init = function() {
            $('#country-selected-value').text($(settings.selector).find("option:selected").text());
            $(document).on('change', settings.selector, function () {
                $('#country-selected-value').text($(this).find("option:selected").text());
            });
        }

        pub.init = function() {
            priv.init();
        }

        return pub;
    }
});
(function () {
    const addParentElement = (target, parent) => {
        const parentEl = document.createElement(parent);
        target.parentNode.insertBefore(parentEl, target);
        parentEl.appendChild(target);
    };

    const toggleProviderAccordion = (target) => {
        target.addEventListener("click", function () {
            const currentAriaExpanded = this.getAttribute('aria-expanded') === 'true';
            this.setAttribute('aria-expanded', !currentAriaExpanded);

            const parentDiv = this.closest(
                ".CybotCookiebotDialogDetailBodyContentCookieGroup"
            );
            parentDiv.classList.toggle("open");

            const cookieInfoWrapper = parentDiv.querySelector('.CybotCookiebotDialogDetailBodyContentCookieInfoWrapper');
            cookieInfoWrapper.classList.toggle("CybotCookiebotDialogHide");
        });
    };

    const initCookiebot = () => {
      const collapseButtons = document.getElementsByClassName(
        "CybotCookiebotDialogDetailBodyContentCookieContainerButton"
      );
      for (const collapseButton of collapseButtons) {
        addParentElement(collapseButton, "h2");
      }

      const cookieProviders = document.getElementsByClassName(
        "CybotCookiebotDialogDetailBodyContentCookieProvider"
      );
      for (const cookieProvider of cookieProviders) {
        addParentElement(cookieProvider, "h3");
        toggleProviderAccordion(cookieProvider);
      }

      const cookieInfoTitles = document.getElementsByClassName(
        "CybotCookiebotDialogDetailBodyContentCookieInfoTitle"
      );
      for (const cookieInfoTitle of cookieInfoTitles) {
        addParentElement(cookieInfoTitle, "h4");
      }

      const cookieProviderLinks = document.getElementsByClassName(
        "CybotCookiebotDialogDetailBodyContentCookieLink"
      );
      for (const cookieProviderLink of cookieProviderLinks) {
        cookieProviderLink.removeAttribute("aria-label");
      }

      const externalLinkArrow = document.getElementsByClassName(
        "CybotExternalLinkArrow"
      );
      for (const arrowIcon of externalLinkArrow) {
        arrowIcon.setAttribute("alt", "Öppnas i ny flik");
      }

      // Moves the 'Accept button' to the last position of the wrapping div to fix a bug where keyboard navigation did not allow access to all button options
      const dialogBodyButtonsWrapper = document.getElementById(
        "CybotCookiebotDialogBodyButtonsWrapper"
      );
      const dialogBodyButtonAccept = document.getElementById(
        "CybotCookiebotDialogBodyButtonAccept"
      );
      function moveAcceptButton() {
        if (dialogBodyButtonsWrapper && dialogBodyButtonAccept) {
          const screenWidth = window.innerWidth;
          if (screenWidth < 601 || screenWidth > 1279) {
            dialogBodyButtonsWrapper.appendChild(dialogBodyButtonAccept);
          }
        }
      }
      setTimeout(() => {
        moveAcceptButton();
      }, 99);
      window.addEventListener("resize", moveAcceptButton);
    };

    var cookieRenewLink = document.getElementById("cookiebotRenewLink");
    if (cookieRenewLink) {
        cookieRenewLink.addEventListener("click", function (e) {
            e.preventDefault();
            if (typeof Cookiebot !== "undefined" && typeof Cookiebot.renew === "function") {
                Cookiebot.renew();
            }
        });
    }

    window.addEventListener(
        "CookiebotOnDialogDisplay",
        function () {
            initCookiebot();
            CookieConsentDialog.DOM.focus();

            const cookiebotBodyButtons = document.getElementsByClassName("CybotCookiebotDialogBodyButton");
            if (cookiebotBodyButtons.length > 0) {
                for (const button of cookiebotBodyButtons) {
                    button.addEventListener("click", () => {
                        if (cookieRenewLink) {
                            cookieRenewLink.focus();
                        }
                    });
                }
            }
        },
        false
    );

    initCookiebot();
})();
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.pages.loginPage = function () {
        var pub = {},
            priv = {};

        priv.CompanyFormRegionCode = function () {
            this.input = $("#inputModel_CompanyRegionCode");
            this.dropDown = $("#companyRegionCodeDropDown");
            this.label = $("#companyRegionCodeLabel");
            this.textBox = $("#companyRegionCodeTextBox");
            this.selectedRegionCodeText = $("#selectedRegionCodeText");
        };

        priv.CompanyForm = function () {
            this.form = $("#create-company-account");
            this.regionCodeContainer = $("#region-code-container");
            this.companyNameInput = $("#inputModel_CompanyName");
            this.rsidInput = $("#inputModel_RSID");
            this.address = $("#inputModel_CompanyAddress");
            this.zipCode = $("#inputModel_CompanyZipcode");
            this.city = $("#inputModel_CompanyCity");
            this.addressCode = $("#inputModel_OrganizationAddressCode");
            this.regionCode = new priv.CompanyFormRegionCode();
            this.organizationNumberInput = $("#inputModel_OrganizationNumber");
            this.getOrganizationInformationButton = $("#get-organization-information-button");
            this.isOrganizationFetchedInput = $("#inputModel_OrganizationIsFetched");
            this.mustEnterRsidInput = $("#inputModel_MustEnterRsid");
            this.mustEnterRegionCodeManuallyInput = $("#inputModel_MustEnterRegionCodeManually");
        };

        var selectors = {
            addDeliveryAddressButton: ".add-delivery-address-button",
            deliveryAddressesContainer: ".delivery-addresses-container",
            organizationNumberInput: "#inputModel_OrganizationNumber",
            getOrganizationInformationButton: "#get-organization-information-button",
            regionCode: {
                input: "#inputModel_CompanyRegionCode",
                dropDown: "#companyRegionCodeDropDown",
                label: "#companyRegionCodeLabel",
                textBox: "#companyRegionCodeTextBox"
            }
        }

        var companyForm = new priv.CompanyForm();
        var deliveryAddressInputSelector = selectors.deliveryAddressesContainer + ' input, ' + selectors.deliveryAddressesContainer + ' select';

        priv.tempOrgNumber = '';

        priv.disableForm = function () {
            companyForm.form
                   .find('input, select, button[type=submit]')
                   .not('.do-not-disable-this-when-changing-orgnumber')
                   .attr('disabled', 'disabled');

            companyForm.form.find('.select-component').addClass('disabled');
        }

        priv.setSelectedRegionCode = function(regionCode, regionCodeTitle)
        {
            companyForm.regionCode.input.val(regionCode);
            companyForm.regionCode.selectedRegionCodeText.text(regionCodeTitle);
        }

        priv.setAddressInfoOnCompanyForm = function (addressModel) {
            companyForm.companyNameInput.val(addressModel.CompanyName);
            companyForm.address.val(addressModel.CompanyAddress);
            companyForm.zipCode.val(addressModel.CompanyZipcode);
            companyForm.city.val(addressModel.CompanyCity);
            companyForm.addressCode.val(addressModel.OrganizationAddressCodeType);
        }

        priv.resetRegionCodeElements = function() {
            companyForm.regionCode.input.empty();
            companyForm.regionCode.dropDown.empty();
            companyForm.regionCode.label.empty();
            companyForm.regionCode.textBox.empty();
        }

        priv.applyRsidRule = function(addressModel) {
            if (addressModel.MustEnterRsid) {
                companyForm.rsidInput.parents(".input-block").removeClass("hidden");
                companyForm.rsidInput.empty().removeAttr("disabled").attr("tabindex", "0").show();
            } else {
                companyForm.rsidInput.parents(".input-block").addClass("hidden");
                companyForm.rsidInput.empty().attr("disabled", "disabled").attr("tabindex", "-1").hide();
            }
        }

        priv.applyMustEnterRegionCodeManuallyRule = function(addressModel) {
            if (addressModel.MustEnterRegionCodeManually) {
                companyForm.regionCode.dropDown.parent().addClass("hidden");
                companyForm.regionCode.dropDown.addClass("hidden").attr("disabled", "disabled");
                companyForm.regionCode.label.addClass("hidden").attr("disabled", "disabled");
                companyForm.regionCode.textBox.removeAttr("disabled").removeClass("hidden");
            }
        }

        priv.applyRegionCodeNotSelectableRule = function (addressModel) {
            if (!addressModel.MustEnterRegionCodeManually && addressModel.Regions.length === 1) {
                companyForm.regionCode.dropDown.parent().addClass("hidden");
                companyForm.regionCode.dropDown.addClass("hidden").attr("disabled", "disabled");
                companyForm.regionCode.label.removeAttr("disabled").removeClass("hidden");
                companyForm.regionCode.textBox.addClass("hidden").attr("disabled", "disabled");

                // Only the code shall be visible when it is not selectable. Names are only shown
                // in the drop down.
                companyForm.regionCode.label.text(addressModel.Regions[0].Code);
                priv.setSelectedRegionCode(addressModel.Regions[0].Code, addressModel.Regions[0].Name);
            }
        }

        priv.applyManyRegionCodesSelectableRule = function (addressModel) {
            if (!addressModel.MustEnterRegionCodeManually && addressModel.Regions.length > 1 && !addressModel.CompanyRegionCode) {
                priv.setSelectedRegionCode("-1", "");
                companyForm.regionCode.dropDown.append('<option value="-1" selected>' + $('#region-choose-text').data('text') + '</option>');
                companyForm.regionCode.dropDown.addClass("required").removeAttr("disabled");
                companyForm.regionCode.dropDown.parent().removeClass("hidden");
                companyForm.regionCode.dropDown.removeClass("hidden");

                $.each(addressModel.Regions, function (index, region) {
                    companyForm.regionCode.dropDown.append("<option value='" + region.Code + "'>" + region.Name + "</option>");
                });

                companyForm.regionCode.dropDown.focus();
            }
        }

        priv.updateCompanyForm = function(addressModel) {
            pub.enableCreatCustomerForm();
            priv.setAddressInfoOnCompanyForm(addressModel);
            priv.resetRegionCodeElements();
            priv.applyRsidRule(addressModel);
            priv.applyMustEnterRegionCodeManuallyRule(addressModel);
            priv.applyRegionCodeNotSelectableRule(addressModel);
            priv.applyManyRegionCodesSelectableRule(addressModel);
            
            companyForm.regionCodeContainer.removeClass("hidden");
            companyForm.isOrganizationFetchedInput.val(true);
        };

        priv.getAddressModelFromCompanyForm = function() {

            var regions = [];
            $.each(companyForm.regionCode.dropDown.find("option"), function (index, option) {
                var $option = $(option);
                 regions.push({ Name: $option.text(), Code: $option.val() });
            });

            if (regions.length < 1) {
                regions.push({ Name: companyForm.regionCode.selectedRegionCodeText.text(), Code: companyForm.regionCode.input.val() });
            }

            return {
                CompanyName: companyForm.companyNameInput.val(),
                CompanyAddress: companyForm.address.val(),
                CompanyZipcode: companyForm.zipCode.val(),
                CompanyCity: companyForm.city.val(),
                CompanyRegionCode: companyForm.regionCode.input.val(),
                OrganizationAddressCodeType: companyForm.addressCode.val(),
                Regions: regions,
                RSID: companyForm.rsidInput.val(),
                MustEnterRsid: companyForm.mustEnterRsidInput.val().toLowerCase() === "true",
                MustEnterRegionCodeManually: companyForm.mustEnterRegionCodeManuallyInput.val().toLowerCase() === "true",
                IsOrganizationFetched: companyForm.isOrganizationFetchedInput.val().toLowerCase() === "true"
            };
        }

        priv.setupCreateNewCompanyAccountForm = function () {
            companyForm = new priv.CompanyForm();

            $(document).on('click', selectors.addDeliveryAddressButton, function () {

                if ($(selectors.deliveryAddressesContainer).is(':visible')) {
                    $(deliveryAddressInputSelector).attr('disabled', 'disabled');
                } else {
                    $(deliveryAddressInputSelector).removeAttr('disabled');
                }
            });

            $(document).on('change', selectors.organizationNumberInput, function () {
                if (priv.tempOrgNumber != $(this).val()) {
                    priv.disableForm();
                }
            });

            $(document).on('keydown', selectors.organizationNumberInput, function (event) {
                // Get organization info on enter.
                var enterKeyCode = 13;
                if (event.which == enterKeyCode) {
                    event.preventDefault();
                    companyForm.getOrganizationInformationButton.trigger('click');
                }
            });

            $(document).on('change', selectors.regionCode.dropDown, function () {
                priv.setSelectedRegionCode(this.value, "");
            });

            $(document).on('change', selectors.regionCode.textBox, function () {
                priv.setSelectedRegionCode(companyForm.regionCode.textBox.val(), "");
            });

            $(document).on('click', selectors.getOrganizationInformationButton, function () {
                companyForm = new priv.CompanyForm();
                companyForm.regionCodeContainer.addClass("hidden");
                var orgnumber = companyForm.organizationNumberInput.val();
                priv.tempOrgNumber = orgnumber;

                companyForm.getOrganizationInformationButton.ladda().ladda('start');
                $.get(companyForm.getOrganizationInformationButton.data('url'), {
                    orgnumber: orgnumber
                }).done(function (response) {
                    if (!response.OrganizationFound) {
                        $("#inputModel_OrganizationNumber-error-container").attr('tabindex', '0').show().focus();
                        companyForm.isOrganizationFetchedInput.val(false);
                        return;
                    }

                    $("#inputModel_OrganizationNumber-error-container").attr('tabindex', '-1').hide();
                    priv.updateCompanyForm(response);
                });
            });
        };

        priv.setupForms = function () {
            priv.setupCreateNewCompanyAccountForm();
        };

        pub.init = function () {
            priv.setupForms();
            skanetrafiken.modules.infoboxes().init();
            skanetrafiken.modules.accordions().init();
            skanetrafiken.modules.tabs().init();
        };

        pub.enableCreatCustomerForm = function () {
            companyForm.form.find('input, select, button[type=submit]').not(deliveryAddressInputSelector).removeAttr('disabled');
            companyForm.form.find('.select-component').not(deliveryAddressInputSelector).removeClass('disabled');
        };

        pub.updateCompanyRegionCodeForm = function()
        {
            if (!companyForm.mustEnterRsidInput.val()) {
                return;
            }

            var addressModel = priv.getAddressModelFromCompanyForm();
            if (addressModel.IsOrganizationFetched) {
                
                priv.updateCompanyForm(addressModel);
            }
        }

        return pub;
    };

    skanetrafiken.modules.scrollToSuccessMessage = function () {
        var scrollToDiv = $('.create-account-collapsable');

        if (scrollToDiv.length > 0) {
            scrollToDiv.attr('tabindex', '0').focus();
            $('html,body').animate({
                scrollTop: scrollToDiv.offset().top
            }, 'slow');
        }
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.pages.listMyCardsPage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        pub.renderCardPage = function (view) {

            // The url must be unique to force IE to not cache the request.
            var newGuid = skanetrafiken.modules.guid().newGuid();
            var uniqueCardPageUrl = settings.cardPageUrl + '?preventIEFromCaching=' + newGuid + "&view=" + view;

            $.get(uniqueCardPageUrl).done(function (response) {
                settings.cardContentHolder.empty().append(response);
                
                skanetrafiken.modules.accordionsList().init();
                skanetrafiken.modules.tabs().initClickEvents();
            });
        };


        priv.setupCardView = function () {

            $(document).on('click', '.cancel-unregistration-button, .close-modal-button', function () {
                $("#unregister-warning").trigger('closeModal');
            });

            $(document).on('click', '.unregister-button', function () {
                var cardId = $(this).data('id');
                var compensationClamed = $(this).data('compensationclamed');
                if (compensationClamed == 'True') {
                    $('.compensationClaimed').show();
                    $('.compensationNotClaimed').hide();
                } else {
                    $('.compensationClaimed').hide(compensationClamed);
                    $('.compensationNotClaimed').show();
                }
                $('.unregister-card-id').val(cardId);
                $("#unregister-warning").easyModal({ overlayOpacity: 0.2, updateZIndexOnOpen: false });
                $("#unregister-warning").trigger('openModal');
                $("#unregister-warning").find('button').first().focus();
            });
        };

        priv.setupUnregister = function() {
            $(document).on('submit', '#unregister-warning form', function (e) {
                e.preventDefault();
                var form = $(this);
                var id = $('.unregister-card-id').val();
                $.post(form.attr('action'), form.serialize(), function () {
                    $("#unregister-warning").trigger('closeModal');
                    $('#card-' + id + '-list-view-item-container, #card-' + id + '-container').fadeOut('slow', function () {
                        $(this).remove();

                        if ($('#my-card-container').find('.card-box-container').length == 0) {
                            $('#my-card-list-section').remove();
                        }
                    });
                });
            });
        };

        pub.init = function (view) {
            skanetrafiken.modules.tabs().init();
            pub.renderCardPage(view);
            priv.setupCardView();
            priv.setupUnregister();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.privateinformationpage = skanetrafiken.models.privateinformationpage || {};


    skanetrafiken.models.privateinformationpage.ViewModel = function(settings) {
        var self = this;

        self.token = settings.token;
        self.lackSSN = ko.observable(true);
        self.addressFound = ko.observable(true);
        self.socialSecurityNumber = ko.observable();
        self.firstName = ko.observable();
        self.lastName = ko.observable();
        self.streetAddress = ko.observable();
        self.city = ko.observable();
        self.postalCode = ko.observable();
        self.load = ko.observable(false);

        self.lackSSN.subscribe(function (checked) {
            if (checked === true) {
                self.addressFound(null);
                self.socialSecurityNumber('');
                self.load(false);
            }
        });

        self.socialSecurityNumber.subscribe(function (newValue) {

            var ssn = (newValue || '').replace(/\D/g, '');
            if (self.lackSSN() === true || ssn.length < 10 || $('#inputModel_SocialSecurityNumber').valid() === false) {
                self.addressFound(null);
                self.load(false);
                return;
            }

            self.load(true);

            var ga_settings = {
                getAddressUrl: settings.getAddressUrl,
                token: settings.token,
                ssn: ssn
            };

            skanetrafiken.modules.maskedaddress().get(ga_settings, function (data) {
                if (!data.address || data.address.AddressFound === false) {
                    self.addressFound(false);
                    self.load(false);
                    return;
                }

                self.addressFound(true);
                self.firstName(data.address.FirstName);
                self.lastName(data.address.LastName);
                self.streetAddress(data.address.StreetAddress);
                self.city(data.address.City);
                self.postalCode(data.address.PostalCode);
                self.load(false);
            });
        });

        if (!!settings.socialSecurityNumber) {
            self.socialSecurityNumber(settings.socialSecurityNumber);
        }

        self.lackSSN.valueHasMutated();
    };

    skanetrafiken.pages.privateinformationpage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        pub.init = function () {
            var viewModel = new skanetrafiken.models.privateinformationpage.ViewModel(settings);
            viewModel.birthDateViewModel = new skanetrafiken.models.birthdate.ViewModel(JSON.stringify(settings));
            ko.cleanNode($('#edit-mkl-user-information')[0]);
            ko.applyBindings(viewModel, $('#edit-mkl-user-information')[0]);
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.companyinformationpage = skanetrafiken.models.companyinformationpage || {};

    skanetrafiken.models.companyinformationpage.ViewModel = function (isViewMode, settings) {
        var self = this;
        self.id = ko.observable("00000000000000000000000000000000");
        self.isPrimary = ko.observable(false);
        self.companyName = ko.observable();
        self.address = ko.observable("");
        self.postalCode = ko.observable();
        self.city = ko.observable();
        self.contactPerson = ko.observable();
        self.phoneNumber = ko.observable();
        self.smsNotification = ko.observable();
        self.emailNotification = ko.observable();
        self.isViewMode = ko.observable(isViewMode);
        self.title = ko.computed(function() {
            if (self.isPrimary()) {
                return settings.preselectedText + " " + self.address();
            }

            return self.address();
        });

        self.template = ko.computed(function() {
            return self.isViewMode() == true ? settings.templates.view : settings.templates.edit;
        });

        self.setup = function (item) {
            self.id(item.Id);
            self.isPrimary(item.IsPrimary);
            self.companyName(item.CompanyName);
            self.address(item.Address || "");
            self.postalCode(item.PostalCode);
            self.city(item.City);
            self.contactPerson(item.ContactPerson);
            self.phoneNumber(item.PhoneNumber);
            self.smsNotification(item.SMSNotification);
            self.emailNotification(item.EmailNotification);
        };
    };

    skanetrafiken.models.companyinformationpage.ListViewModel = function (settings) {
        var self = this;
        self.defaultAddress = ko.observable("00000000000000000000000000000000");
        self.addresses = ko.observableArray([]);
        self.validation = ko.observable();

        self.newAddress = function () {
            var item = new skanetrafiken.models.companyinformationpage.ViewModel(false, settings);

            // If this is the first address, set it as primary
            if (!self.addresses().length) {
                item.isPrimary(true);
            }

            self.addresses.push(item);
        };

        self.reset = function (item, event) {
            self.resetPrimary();

            // No need to reset the form if nothing has been changed
            if (item.id() == "00000000000000000000000000000000") {
                self.scrollToShippingAddresses(function() {
                    self.deleteAddress(item);
                });
                return;
            }

            $(event.target).ladda().ladda('start');

            // Reset all potential changes to the form
            var url = settings.urls.get.replace("00000000000000000000000000000000", item.id());
            $.ajax({ url: url, dataType: 'json', cache: false, success: function(data) {
                item.setup(data);
                item.isViewMode(true);
            }});
        };

        self.edit = function (item, event) {
            var button = $(event.target).ladda();
            button.ladda('start');
            item.isViewMode(false);
            $(document).trigger('load-validation');
        };

        self.save = function (item, event) {
            
            var $form = $('#shipping-info-' + item.id() + ' form');

            if ($form.valid() == false) {
                return;
            }

            var formData = $form.serialize();

            $.ajax({
                    url: $form.attr('action'),
                    type: 'POST',
                    data: formData
                })
                .done(function (json) {
                    item.setup(json.data);
                    item.isViewMode(true);

                    // Set default address to newly added primary address
                    if (item.isPrimary() == true) {
                        self.defaultAddress(item.id());
                    }
                })
                .fail(function (xhr) {
                    // Re-init validation and show errors
                    $form.removeData("validator");
                    $form.removeData("unobtrusiveValidation");
                    $.validator.unobtrusive.parse("form");
                    $form.data("validator").showErrors(JSON.parse(xhr.responseJSON));
                }).always(function () {
                    Ladda.stopAll();
                });

            var button = $(event.target).ladda();
            button.ladda('start');
        };

        self.onNew = function (element, item) {

            // When adding a new address, the accordion should automatically be expanded
            var collapsable = $('#shipping-info-' + item.id() + '.collapsable');
            if (item.id() == "00000000000000000000000000000000" || collapsable.hasClass('expanded')) {
                collapsable.removeClass('expanded');
                collapsable.expand();
            }

            $(document).trigger('load-validation');
        };

        self.deleteAddress = function (item, event) {

            if (item.isPrimary() == true) {
                self.defaultAddress("00000000000000000000000000000000");
            }

            if (item.id() == "00000000000000000000000000000000") {
                self.addresses.remove(item);
                return;
            }

            var button = $(event.target).ladda();
            button.ladda('start');

            var url = settings.urls.deleteUrl.replace("00000000000000000000000000000000", item.id());

            $.post(url, {})
                .done(function () {
                    self.scrollToShippingAddresses(function() {
                        self.addresses.remove(item);
                    });
                })
                .fail(function (xhr) {
                    var errors = JSON.parse(xhr.responseJSON);
                    self.validation(errors[""][0]);
                    $('#validation-modal').trigger('openModal');
                }
            );
        };

        self.getDeleteUrl = function (item) {
            return settings.urls.deleteUrl.replace("00000000000000000000000000000000", item.id());
        };
        
        self.changedPrimary = function (item) {
            if (item.isPrimary()) {
                self.setPrimary(item);
            } else {
                self.resetPrimary();

                // Don't let the user deselect the current primary address
                if (item.isPrimary() && item.id() == self.defaultAddress()) {
                    return false;
                }
            }

            return true;
        };

        self.setPrimary = function (primaryAddress) {
            $.each(self.addresses(), function (i, address) {
                if (address.isPrimary() && primaryAddress.id() != address.id()) {
                    address.isPrimary(false);
                }
            });
        };

        self.resetPrimary = function () {
            $.each(self.addresses(), function(i, item) {
                if (item.id() == self.defaultAddress()) {
                    item.isPrimary(true);
                    return;
                }
            });
        };

        self.setAddresses = function(items) {
            $.map(items, function(item) {
                var address = new skanetrafiken.models.companyinformationpage.ViewModel(true, settings);
                address.setup(item);
                self.addresses.push(address);

                // Set default address
                if (address.isPrimary() == true) {
                    self.defaultAddress(address.id());
                }
            });
        };

        self.deleteIfNew = function(item) {
            if (item.id() == "00000000000000000000000000000000") {
                self.deleteAddress(item);
            }
        };

        self.scrollToShippingAddresses = function(onComplete) {
            $('html, body').animate({
                scrollTop: 0
            }, {
                duration: 'slow',
                complete: onComplete
            });
        };

        self.setAddresses(settings.data);
    };

    skanetrafiken.pages.companyinformationpage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.initKnockout = function () {
            var viewModel = new skanetrafiken.models.companyinformationpage.ListViewModel(settings);
            ko.applyBindings(viewModel, $("#shipping-addresses")[0]);
        };

        pub.init = function () {
            skanetrafiken.modules.accordions().init();
            priv.initKnockout();
            $('#validation-modal').easyModal({ overlayOpacity: 0.2, closeButtonClass: '.close-modal-button', updateZIndexOnOpen: false });
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.blockcardspage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.isCardEventsAllowed = true;

        priv.createViewModel = function () {
            var viewModel = {
                cards: ko.observableArray([]),
                blockedCard: ko.observable({}),
                viewSuccessMessage: ko.observable(true),
                blockCardsSubmit: function () {
                    priv.isCardEventsAllowed = false;
                    $('#cards-in-list-container .remove-button').prop('disabled', true);
                    $('.card-box button').prop('disabled', true);
                    $('#cards-in-list-container form').submit();
                }
            };

            viewModel.currentSearchFilter = ko.observable();
            function filterFunction() {
                if (!viewModel.currentSearchFilter()) {
                    return viewModel.cards();
                } else {
                    var filteredItems = ko.utils.arrayFilter(viewModel.cards(), function (card) {

                        var matchesCardNumber = card.CardNumber().toLowerCase().indexOf(viewModel.currentSearchFilter().toLowerCase()) >= 0;
                        var matchesName = card.Name().toLowerCase().search(viewModel.currentSearchFilter().toLowerCase()) >= 0;
                        return matchesCardNumber || matchesName;
                    });
                    return filteredItems;
                }

            };

            viewModel.filterdCards = ko.computed(filterFunction).extend({
                throttle: 300
            });

            viewModel.blockedCardNumber = ko.computed(function () {
                return viewModel.blockedCard().CardNumber;
            });

            viewModel.isACardSelectedToBeBlocked = ko.computed(function () {
                if (viewModel.blockedCard().Name) {
                    return true;
                }
                return false;
            });

            $.each(settings.cards, function (index, value) {
                var card = ko.mapping.fromJS(value);


                card.addToBlockList = function () {
                    if (priv.isCardEventsAllowed) {
                        viewModel.blockedCard(this);
                        viewModel.viewSuccessMessage(false);

                        $('html,body').animate({
                            scrollTop: $("#cards-in-list-container").offset().top
                        }, 'slow', function () {
                            $("#cards-in-list-container").attr('tabindex', 0).focus();
                        });
                    }
                };

                card.removeFromBlockList = function () {
                    if (priv.isCardEventsAllowed) {
                        viewModel.blockedCard({});
                    }
                };

                viewModel.cards.push(card);
            });

            return viewModel;
        };

        priv.initKnockout = function () {
            ko.applyBindings(priv.createViewModel(), settings.blockCardsContainer);
        };

        pub.init = function () {
            priv.initKnockout();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.modules.reloadChargeCards = function() {
        var chargeCardsInCart = $('.chargecards-in-cart').val().split(',');

        $('.charge-button').show();
        $('.charge-button-done').hide();

        $.each(chargeCardsInCart, function (index, cardNumber) {
            $('.charge-button-' + cardNumber).hide();
            $('.charge-button-done-' + cardNumber).show();
        });
    };

    skanetrafiken.pages.viewbalanceandchargecardpage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.setupShowMoreCards = function() {
            $(document).on('click', '.show-more-cards', function (e) {
                var $button = $(this);
                e.preventDefault();
                var amountOfExtraCardsToShow = settings.amountOfExtraCardsToShow;
                var $hiddenCards = $('.card-box-container.hidden');
                var hiddenCardsCount = $hiddenCards.length;

                $.each($hiddenCards, function (index, cardElement) {

                    // Stop iterating when the given amount of cards are shown.
                    if (amountOfExtraCardsToShow == 0) {
                        return false;
                    }

                    $(cardElement).removeClass('hidden');

                    // "Show more cards" button shall be hidden when there is no more cards left to show.
                    if (index == (hiddenCardsCount - 1)) {
                        $button.hide();
                    }

                    amountOfExtraCardsToShow--;
                });
            });
        };

        priv.setupChargeCard = function () {
            skanetrafiken.modules.reloadChargeCards();
            $(document).on('click', '.charge-button', function () {
                var $this = $(this);

                var laddaElement = $this.ladda();

                $this.removeClass('icon');

                laddaElement.ladda('start');

                var cardTargetId = $this.data('cardtargetid');
                var cartTargetId = $this.data('carttargetid');
                var token = $this.prev('.request-verification-token').find('input').val();

                var postData = {
                    cardName: $this.data('cardname'),
                    cardNumber: $this.data('cardnumber'),
                    __RequestVerificationToken: token
                };

                $.post(settings.addChargeToCardUrl, postData).done(function(response) {
                    if (response.success == true) {
                        var $cartTarget = $("#" + cartTargetId);
                        $cartTarget.empty().append(response.html);
                        $cartTarget.find('input:not([type=hidden]), a, button, select').first().focus();

                        laddaElement.ladda('stop');
                        $this.addClass('icon');

                        $('html,body').animate({
                            scrollTop: $("#" + cartTargetId).offset().top
                        }, 'slow', function () {
                            laddaElement.hide();
                            laddaElement.next('.charge-button-done').show();
                        });

                    } else {
                        var $cardTarget = $("#" + cardTargetId);
                        $cardTarget.empty().append(response.html);
                        $cardTarget.find('input:not([type=hidden]), a, button, select').first().focus();
                    }
                });
            });
        };

        priv.init = function () {
            priv.setupShowMoreCards();
            priv.setupChargeCard();
        }

        pub.init = function () {
            skanetrafiken.modules.infoboxes().init();
            skanetrafiken.modules.selectComponent().init();
            priv.init();
        };

        return pub;
    };

});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.companyorderproductspage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        pub.init = function () {
            skanetrafiken.modules.infoboxes().init();
            skanetrafiken.pages.cartpage().init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.privatebuyproductspage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        pub.init = function () {
            skanetrafiken.modules.infoboxes().init();
            skanetrafiken.pages.cartpage().init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.pages.cartpage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.init = function() {

        };

        pub.init = function () {
            skanetrafiken.modules.selectComponent().init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.modules = skanetrafiken.modules || {};
    skanetrafiken.models.manageCardsPage = skanetrafiken.models.manageCardsPage || {};

    //Individual card viewModel
    skanetrafiken.models.manageCardsPage.EditViewModel = function (item) {
        var self = this;
        self.newCardName = ko.observable(item.cardName());
        self.error = ko.observable("");
    };

    skanetrafiken.models.manageCardsPage.ViewModel = function (item, url) {
        var self = this;
        self.blocked = (item.Blocked === true);
        self.isVisible = ko.observable(true);
        self.showEditDetails = ko.observable(false);
        self.cardName = ko.observable(item.Name);
        self.cardNumber = item.CardNumber;
        self.cardDetailId = item.CardNumber;
        self.dataToggleContainerId = "expandable-content-" + item.CardNumber;
        self.cardType = ' ' + item.CardTypeName;
        self.editViewModel = new skanetrafiken.models.manageCardsPage.EditViewModel(self);
        self.toggleShowEditDetails = function () {
            self.showEditDetails(!self.showEditDetails());
        }
        self.submitNameChange = function () {
            
            $.ajax({
                url: url,
                type: 'POST',
                data: { CardNumber: self.cardNumber, NewName: self.editViewModel.newCardName(), '__RequestVerificationToken': $('[name=__RequestVerificationToken]').val() },
                success: function (data) {
                    //after the success call the a get method for updating the certain card or pass the new information back that we want to set.
                    if (data.success) {
                        self.cardName(self.editViewModel.newCardName());
                        self.editViewModel = new skanetrafiken.models.manageCardsPage.EditViewModel(self);
                        self.editViewModel.error("");
                        self.showEditDetails(false);
                    } else {
                        self.editViewModel.error(data.error);
                    }
                },
                error: function () {
                    //any error messages
                }
            });
        }
    };

    //List the cards
    skanetrafiken.models.manageCardsPage.ListViewModel = function (settings) {
        var self = this;
        self.cards = ko.observableArray([]);
        self.currentSearchFilter = ko.observable();

        self.filterFunction = function () {
            ko.utils.arrayFilter(self.cards(), function (card) {
                var matchesCardNumber = card.cardNumber.toLowerCase().indexOf(self.currentSearchFilter().toLowerCase()) >= 0;
                var matchesName = card.cardName().toLowerCase().search(self.currentSearchFilter().toLowerCase()) >= 0;
                card.isVisible(matchesCardNumber || matchesName);
            });
        };

        //Modify to initialize list of Cards
        self.setCards = function (items) {
            console.log(items);
            $.map(items, function (item) {
                var card = new skanetrafiken.models.manageCardsPage.ViewModel(item, settings.editCardName);
                self.cards.push(card);
            });
        };

        self.setCards(JSON.parse(settings.data));
    };

    skanetrafiken.pages.manageCardsPage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.init = function () {
            var viewModel = new skanetrafiken.models.manageCardsPage.ListViewModel(settings);
            ko.applyBindings(viewModel, $("#main")[0]);
            setupAjaxButtons();
        };

        pub.init = function () {
            priv.init();
            skanetrafiken.modules.accordionsList().init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.manageConnectedCardsPage = function (settings) {
        var pub = {},
            priv = {};

        var $endAutochargeModal;
        var $endAutochargeCardIdInput;
        var $addGiftCardModal;
        var $addGiftCardCardIdInput;

        priv.init = function () {
            
            priv.loadDomElements();

            $(document).on('click', settings.endAutoChargeModalTriggerSelector, function () {
                $endAutochargeModal.easyModal({ overlayOpacity: 0.2, updateZIndexOnOpen: false });
                $endAutochargeCardIdInput.val($(this).data('cardnumber'));
                $endAutochargeModal.trigger('openModal');
                $endAutochargeModal.find('button').first().focus();
            });

            $(document).on('click', settings.endAutoCharegeModalCloseSelector, function () {
                $endAutochargeModal.trigger('closeModal');
                priv.refreshAddGiftCardModalContent();
            });

            $(document).on('click', settings.endAutoChargeSubmitSelector, function (event) {
                event.preventDefault();
                $endAutochargeModal.find('button, input[type=submit]').prop("disabled", true);
                $(this).parents('form').submit();
            });

            $(document).on('click', settings.addGiftCardModalTriggerSelector, function () {
                $addGiftCardModal.easyModal({ overlayOpacity: 0.2, updateZIndexOnOpen: false });
                $addGiftCardCardIdInput.val($(this).data('cardnumber'));
                $addGiftCardModal.trigger('openModal');
                $addGiftCardModal.find('button').first().focus();
            });

            $(document).on('click', settings.addGiftCardModalCloseButtonSelector, function () {
                $addGiftCardModal.trigger('closeModal');
                priv.refreshAddGiftCardModalContent();
            });

            $(document).on('click', settings.addGiftCardSubmitSelector, function (event) {
                event.preventDefault();
                $endAutochargeModal.find('button, input[type=submit]').prop("disabled", true);
                $(this).parents('form').submit();
            });

            $(document).on('click', settings.addGiftCardModalOkButtonSelector, function () {
                var cardNumber = $addGiftCardCardIdInput.val();
                $.get(settings.cardViewUrl + '?cardnumber=' + cardNumber, function(data) {
                    var cardViewContainerSelector = settings.cardViewPartialId + cardNumber;
                    var $cardViewContainer = $(cardViewContainerSelector);
                    $cardViewContainer.html(data);
                });
            });
        };

        priv.loadDomElements = function () {
            $endAutochargeModal = $(settings.endAutoChargeModalSelector);
            $endAutochargeCardIdInput = $(settings.endAutoChargeCardIdSelector);
            $addGiftCardModal = $(settings.addGiftCardModalSelector);
            $addGiftCardCardIdInput = $(settings.addGiftCardCardIdSelector);
        }

        priv.refreshAddGiftCardModalContent = function () {
            $.get(settings.addGiftCardModalUrl, function (data) {
                var $cardViewContainer = $(settings.addGiftCardModalContentId);
                $cardViewContainer.html(data);
                priv.loadDomElements();
            });
        }

        pub.init = function() {
            skanetrafiken.modules.accordionsList().init();
            skanetrafiken.modules.infoboxes().init();
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.companyCheckout = function () {
        var pub = {}

        pub.init = function () {
            $(document).on('click', '#cancel-button', function () {
                $("#unregister-warning").easyModal({ overlayOpacity: 0.2, updateZIndexOnOpen: false });
                $("#unregister-warning").trigger('openModal');
                $("#unregister-warning").find('button').first().focus();
            });

            $(document).on('click', '.cancel-button, .close-modal-button', function () {
                $("#unregister-warning").trigger('closeModal');
            });
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.orderAutoloadPage = function (settings) {
        var pub = {},
            priv = {};

        priv.init = function () {
            $(document).on('click', settings.triggerModalButtonSelector, function () {
                var $triggerModalButton = $(this);
                settings.modalOkButton.attr('href', $triggerModalButton.data('href'));
                settings.modal.easyModal({ overlayOpacity: 0.2, updateZIndexOnOpen: false });
                settings.modal.trigger('openModal');
                settings.modal.find('button').first().focus();
            });

            $(document).on('click', settings.closeModalButtonSelector, function () {
                settings.modal.trigger('closeModal');
                settings.modalOkButton.attr('href', '');
            });
        };

        pub.init = function() {
            skanetrafiken.modules.accordionsList().init();
            skanetrafiken.modules.infoboxes().init();
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.autoloadCheckoutSpecifySocialSecurityNumber = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.getAndPopulateSocialSecurityInformation = function () {
            priv.blurSocialSecurityInputElement();
            var socialSecurityNumber = settings.socialSecurityInformationInput.val();

            $(settings.getSocialSecurityInformationButton).ladda().ladda('start');

            if (socialSecurityNumber == '') {
                $(settings.getSocialSecurityInformationButton).ladda('stop');
                return;
            }

            settings.submitButton.attr('disabled', 'disabled');
            settings.socialSecurityInformationWrapper.hide();
            settings.socialSecurityValidationMessage.empty();

            $.post(settings.getSoecialSecurityInformationUrl, {
                socialSecurityNumber: socialSecurityNumber
            }).done(function (response) {
                if (response.FoundUser != true) {
                    settings.socialSecurityValidationMessage.append(response.Message);
                    return;
                }

                settings.socialSecurityInformationWrapper.show();
                settings.firstnameInput.val(response.Firstname);
                settings.lastnameInput.val(response.Lastname);
                settings.adressInput.val(response.Adress);
                settings.adress2Input.val(response.CareOf);
                settings.zipcodeInput.val(response.Zipcode);
                settings.cityInput.val(response.City);
                settings.mobileInput.val(response.MobilePhone);

                settings.firstnameTextBox.val(response.Firstname);
                settings.lastnameTextBox.val(response.Lastname);
                settings.adressTextBox.val(response.Adress);
                settings.adress2TextBox.val(response.CareOf);
                settings.zipcodeTextBox.val(response.Zipcode);
                settings.cityTextBox.val(response.City);

                settings.submitButton.removeAttr('disabled');

                $(settings.getSocialSecurityInformationButtonSelector).ladda('stop');
            });
        };

        priv.blurSocialSecurityInputElement = function () {
            // If the social security input element is not blurred before address information
            // is fetched, a change event will be triggered which will hide the form when the
            // social security input element loses focus later.
            settings.socialSecurityInformationInput.blur();
        };

        priv.hideSocialSecurityInformationIfSocialSecurityNumberIsChanged = function () {
            settings.socialSecurityInformationWrapper.hide();
            settings.submitButton.attr('disabled', 'disabled');
            settings.socialSecurityValidationMessage.empty();
        };

        priv.setupSocialSecurityEvents = function () {
            $(document).on('click', settings.getSocialSecurityInformationButtonSelector, priv.getAndPopulateSocialSecurityInformation);
            $(document).on('change', settings.socialSecurityInformationInputSelector, priv.hideSocialSecurityInformationIfSocialSecurityNumberIsChanged);
            $(document).on('keydown', settings.socialSecurityInformationInputSelector, function (event) {
                var enterKeyCode = 13;
                if (event.which == enterKeyCode) {
                    event.preventDefault();
                    settings.getSocialSecurityInformationButton.trigger('click');
                }
            });
        };

        pub.init = function () {
            priv.setupSocialSecurityEvents();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};

    skanetrafiken.pages.companyCheckoutChooseAdressPage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.setupDropdown = function () {
            $(document).on('change', '#use-delivery-adress-checkbox, #use-billing-adress-checkbox', function () {
                var deliveryAddressContainer = $('#delivery-adresses-container');
                var isDeliveryAddressCheckboxChecked = $('#use-delivery-adress-checkbox').is(':checked');
                deliveryAddressContainer.toggle(isDeliveryAddressCheckboxChecked);
                if (isDeliveryAddressCheckboxChecked) {
                    deliveryAddressContainer.attr('aria-hidden', false);
                } else {
                    deliveryAddressContainer.attr('aria-hidden', true);
                }
            });
        };

        pub.init = function () {
            skanetrafiken.modules.selectComponent().init();
            priv.setupDropdown();
        };

        return pub;
    };
});
$(function () {

    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.additionalInfoPrivateCustomer = skanetrafiken.models.additionalInfoPrivateCustomer || {};
    skanetrafiken.models.additionalInfoPrivateCustomer.ViewModel = function(settings) {
        var self = this;

        self.predefinedAddress = {};
        self.token = settings.token;
        self.lackSSN = ko.observable(settings.lackSSN);
        self.socialSecurityNumber = ko.observable();
        self.addressFound = ko.observable(null);
        self.firstName = ko.observable();
        self.lastName = ko.observable();
        self.streetAddress = ko.observable();
        self.city = ko.observable();
        self.postalCode = ko.observable();
        self.load = ko.observable(false);

        self.lackSSN.subscribe(function (checked) {

            if (checked === true) {
                self.addressFound(null);
                self.socialSecurityNumber('');
                self.load(false);
            }
        });

        self.socialSecurityNumber.subscribe(function (newValue) {

            var ssn = (newValue || '').replace(/\D/g, '');
            if (self.lackSSN() === true || ssn.length < 10 || $('#inputModel_SocialSecurityNumber').valid() === false) {
                self.addressFound(null);
                self.load(false);
                return;
            }

            self.load(true);

            var ga_settings = {
                getAddressUrl: settings.getAddressUrl,
                token: settings.token,
                ssn: ssn
            };

            skanetrafiken.modules.maskedaddress().get(ga_settings, function (data) {
                if (!data.address || data.address.AddressFound === false) {
                    self.addressFound(false);
                    self.load(false);
                    return;
                }

                self.addressFound(true);
                self.firstName(data.address.FirstName);
                self.lastName(data.address.LastName);
                self.streetAddress(data.address.StreetAddress);
                self.city(data.address.City);
                self.postalCode(data.address.PostalCode);
                self.load(false);
            });
        });

        if (!!settings.socialSecurityNumber) {
            self.socialSecurityNumber(settings.socialSecurityNumber);
        }

        self.lackSSN.valueHasMutated();
    };

    skanetrafiken.pages.additionalInfoPrivateCustomer = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.initStepOne = function () {
            var addressViewModel = new skanetrafiken.models.additionalInfoPrivateCustomer.ViewModel(settings);
            ko.cleanNode($('#socialsecuritynumber')[0]);
            ko.applyBindings(addressViewModel, $('#socialsecuritynumber')[0]);
        };

        priv.initStepTwo = function () {
            var birthDateViewModel = new skanetrafiken.models.birthdate.ViewModel(JSON.stringify(settings));
            ko.applyBindings(birthDateViewModel, $('#birthdate')[0]);
        };

        pub.initStepOne = function () {
            priv.initStepOne();
        };

        pub.initStepTwo = function () {
            priv.initStepTwo();
        };

        return pub;
    };
});
$(function() {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.createprivateaccount = skanetrafiken.models.createprivateaccount || {};

    skanetrafiken.models.createprivateaccount.StepOneViewModel = function (settings) {
        var self = this;

        var model = JSON.parse(settings.model);
        self.token = settings.token;
        self.lackSSN = ko.observable(!!model ? model.lackSSN : false);
        self.socialSecurityNumber = ko.observable(!!model ? model.socialSecurityNumber : null);
        self.addressFound = ko.observable(null);
        self.firstName = ko.observable();
        self.lastName = ko.observable();
        self.streetAddress = ko.observable();
        self.city = ko.observable();
        self.postalCode = ko.observable();
        self.load = ko.observable(false);

        self.lackSSN.subscribe(function (checked) {
            if (checked === true) {
                self.addressFound(null);
                self.socialSecurityNumber('');
                self.load(false);
            }
        });

        self.socialSecurityNumber.subscribe(function (newValue) {

            var ssn = (newValue || '').replace(/\D/g, '');
            if (self.lackSSN() === true || ssn.length < 10 || $('#inputModel_SocialSecurityNumber').valid() === false) {
                self.addressFound(null);
                self.load(false);
                return;
            }

            self.load(true);

            var ga_settings = {
                getAddressUrl: settings.getAddressUrl,
                token: settings.token,
                ssn: ssn
            };

            skanetrafiken.modules.maskedaddress().get(ga_settings, function (data) {
                if (!data.address || data.address.AddressFound === false) {
                    self.addressFound(false);
                    self.load(false);
                    return;
                }

                self.addressFound(true);
                self.firstName(data.address.FirstName);
                self.lastName(data.address.LastName);
                self.streetAddress(data.address.StreetAddress);
                self.city(data.address.City);
                self.postalCode(data.address.PostalCode);
                self.load(false);
            });
        });

        self.socialSecurityNumber.valueHasMutated();
    };

    skanetrafiken.pages.createprivateaccount = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.initStepOne = function () {
            var viewModel = new skanetrafiken.models.createprivateaccount.StepOneViewModel(settings);
            ko.cleanNode($('#create-private-account')[0]);
            ko.applyBindings(viewModel, $('#create-private-account')[0]);
        }

        priv.initStepTwo = function () {
            $("#inputModel_BirthDates_BirthYear").focus();
            var birthDateViewModel = new skanetrafiken.models.birthdate.ViewModel(JSON.stringify(settings));
            ko.cleanNode($('#birthdate')[0]);
            ko.applyBindings(birthDateViewModel, $('#birthdate')[0]);

            skanetrafiken.modules.countries({ selector: '#inputModel_Country' }).init();

            $('select').blur(function () {
                $(this).parent('.select-component').removeClass("focus");
            })
                .focus(function () {
                    $(this).parent('.select-component').addClass("focus")
                });
        }

        pub.initStepOne = function () {
            priv.initStepOne();
        };

        pub.initStepTwo = function() {
            priv.initStepTwo();
        };

        return pub;
    };
});
$(function() {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.mklorderhistorypage = skanetrafiken.models.mklorderhistorypage || {};

   

    skanetrafiken.pages.mklorderhistorypage = function (options) {
        var pub = {},
            priv = {},
            settings = options;

        priv.Getmail = function (id) {

            $.get(settings.getmailurl, { id: id }, function (data) {
           
            });
        }

        priv.init = function () {
            $('.GetReciept').on('click', function () {
                var button = $(this);
                var id = $(button).data("recieptid");
                priv.Getmail(id);
                $(button).prop('value', settings.successtext);
                $(button).prop('disabled',true);
            });
        }

        pub.init = function () {
            console.log('url' + settings.getmailurl);
            priv.init();
        }

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.models = skanetrafiken.models || {};
    skanetrafiken.models.unauthorizedcompensation = skanetrafiken.models.createprivateaccount || {};

    skanetrafiken.models.unauthorizedcompensation.ViewModel = function (settings) {
        var self = this;


        var model = JSON.parse(settings.model);
        self.token = settings.token;
        self.lackSSN = ko.observable(!!model ? model.LackSSN : false);
        self.socialSecurityNumber = ko.observable(!!model ? model.SocialSecurityNumber : null);
        self.addressFound = ko.observable(!!model ? model.addressFound : null);
        self.firstName = ko.observable();
        self.lastName = ko.observable();
        self.streetAddress = ko.observable();
        self.city = ko.observable();
        self.postalCode = ko.observable();
        self.load = ko.observable(false);


        self.lackSSN.subscribe(function (checked) {
            if (checked === true) {
                self.addressFound(null);
                self.socialSecurityNumber('');
                self.load(false);
            }
        });


        self.socialSecurityNumber.subscribe(function (newValue) {
            if (!newValue || self.lackSSN() === true) {
                self.addressFound(null);
                return;
            }

            var ssn = newValue.replace(/\D/g, '');
            if (ssn.length !== 12) {
                return;
            }

            var data = {
                socialSecurityNumber: ssn,
                __RequestVerificationToken: settings.token
            }

            self.load(true);
            $.post(settings.getAddressUrl, data, function (data) {
                if (data.AddressFoundFromCivilRegistry === false) {
                    self.addressFound(false);
                    self.load(false);
                    $('#NoPersInfoFoundErr').html('<h3 role="alert">' + $('#SocialSecurityNumberNotFoundError').html() +'</h3>');
                    return;
                }
                $('#NoPersInfoFoundErr').html('');
                self.addressFound(true);
                self.firstName(data.FirstName);
                self.lastName(data.FamilyName);
                self.streetAddress(data.StreetAddress);
                self.city(data.City);
                self.postalCode(data.ZipCode);
                self.load(false);
            });
        });

        self.socialSecurityNumber.valueHasMutated();
        
        
    };

    skanetrafiken.pages.unauthorizedcompensation = function (options) {

        var pub = {},
            priv = {},
            settings = options;


        priv.init = function () {
            var viewModel = new skanetrafiken.models.unauthorizedcompensation.ViewModel(settings);
            viewModel.birthDateViewModel = new skanetrafiken.models.birthdate.ViewModel(settings.model);
            ko.applyBindings(viewModel/*, $('#create-private-account')[0]*/);
        }

        pub.init = function () {
            priv.init();
        };

        return pub;
    };
});
$(function () {
    window.skanetrafiken = window.skanetrafiken || {};
    skanetrafiken.pages = skanetrafiken.pages || {};
    skanetrafiken.modules = skanetrafiken.modules || {};

    skanetrafiken.pages.orderhistorypage = function (options) {
        var pub = {},
            priv = {},
            settings = options;
        
        //Tailor this for Orderhistory Item now?
        priv.init = function () {
 
            $(document).on('click', '.cancel-resendOrderConfirmation-button, .close-modal-button', function () {
                $("#resend-orderconfirmation").trigger('closeModal');
            });

            $(document).on('click', '.resend-orderconfirmation-button', function () {
                $("#modal-form-div").show();
                $("#modal-response-div").hide();
                var orderNumber = $(this).data('id');
                var receiver = $(this).data('receiver');

                $("#modal-response-div").hide();
                $('.resend-orderNumber').val(orderNumber);
                $('#emailOrderConfirmation').val(receiver);
                $("#resend-orderconfirmation").easyModal({ overlayOpacity: 0.2, updateZIndexOnOpen: false });
                $("#resend-orderconfirmation").trigger('openModal');
                $("#resend-orderconfirmation").find('button').first().focus();
            });
        };


        priv.setupResendOrderConfirmation = function () {
            $(document).on('submit', '#resend-orderconfirmation form', function (e) {
                e.preventDefault();
                var form = $(this);
                $.ajax({
                    type: "POST",
                    url: form.attr('action'),
                    data: form.serialize(),
                    dataType: 'json',
                    success: function (data) {
                        $("#responseSpan").text(data.message);
                        $("#modal-form-div").hide();
                        $("#modal-response-div").show();
                        $("#resend-orderconfirmation-button-" + $('.resend-orderNumber').val()).data('receiver', data.receiver);

                    },
                    error: function (data) {
                        $("#responseSpan").text(data.message);
                        $("#modal-form-div").hide();
                        $("#modal-response-div").show();
                    }
                });
            });
        };

        pub.init = function() {
            skanetrafiken.modules.accordionsList().init();
            priv.init();
            priv.setupResendOrderConfirmation();
        }

        return pub;
    };
});
//import { debug } from "console";
var currentStep = parseInt($("#currentStep").val());

$('.TrwLinkSelector').on('click', 'a', function(e){
    e.preventDefault();
    var url = $(this).attr('href');
    window.open(url);
})



// Step1 Logic
$(function () {
    if (currentStep != 1)
        return;

    registerStep1Validation();
    let selectName = '#TravelDateStep1';
    let sessionStorageName = 'st-rgol';

    if (!$('#travel-warrenty-form').length)
        return;

    $(".paymentType").change(function () {
        var ischecked = $(this).is(':checked');
        if (!ischecked)
            $('#formError').hide()


    }); 

    $(selectName).on('change', function (e) {
        let sessionData = JSON.parse(sessionStorage.getItem(sessionStorageName));

        if (sessionData === null) {
            sessionData = {
                selectPartOfJourney: false,
                selectedJourneys: []
            };
            //debugger;
        }

        let today4am = new Date(this.value);
        today4am.setUTCHours(4);

        sessionData.selectedDate = today4am.toISOString()
        sessionData.selectedJourneys = [];
        sessionData.selectPartOfJourney = false;
        sessionStorage.setItem(sessionStorageName, JSON.stringify(sessionData));
        //debugger;
    });

    document.getElementById('TravelDateStep1')?.dispatchEvent(new Event('change'));

}
)

MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

var observer = new MutationObserver(function (mutations, observer) {
    mutations.forEach(x => {

        x.addedNodes.forEach(x => {
            if (x.classList && x.classList.contains('st-selected-rgol-journeys'))
                $('#SearchError').hide();
        })

    })

    // ...
});


function addObserverIfDesiredNodeAvailable() {
    var composeBox = $("#main-content");
    if (!composeBox) {
        //The node we need does not exist yet.
        //Wait 500ms and try again
        window.setTimeout(addObserverIfDesiredNodeAvailable, 500);
        return;
    }
    var config = {
        subtree: true,
        childList: true,
    };
    observer.observe(document.querySelector("#main-content"), config);
}


// Step2 Logic
$(function () {
    var currentStep = parseInt($("#currentStep").val());
    if (currentStep != 2)
        return;

    registerStep2Validation();

    addObserverIfDesiredNodeAvailable();

    //if (currentStep == 2 && $('#divLocalService').is(":visible")) {
    //    updateSummary();
    //}


    let page = $("#find-trip-form-warrenty-panel");
    let noSearch = false;
    if (!page.length)
        return;
    setType();

    let sessionStorageName = 'st-rgol';
    let button = $(".continue");


    $('#RouteLinksStr').val('');

    $('input[type=radio][name=LocalNoShow]').on('change', function () {
        let checked = $("#NoShowCheckBox");
        if (checked[0].checked) {
            $('#selectRealTime').hide();
        }
        else {
            $('#selectRealTime').show();
        }
    })


    $('input[type=radio][name=localTripNoShow]').on('change', function () {
        let checked = $("#localTripNoShowTrue");
        if (checked[0].checked) {
            $('#localTripRealTime').hide();
        }
        else {
            $('#localTripRealTime').show();
        }
    })


    $('#lblLocalServiceSearch').on('click keypress', function (e) {
        const code = e.charCode || e.keyCode;
        if ((e.type !== 'click') && (code !== 32) && (code !== 13)) {
            return;
        }
        resetValidation();
        noSearch = true;
        sessionStorage.setItem('searchType', 'localSearch');
        $('#searchApplication').hide();
        $('#divManualSearch').hide();
        $('#divLocalService').show();
        $('#standardSearchLink').show();
        $('#pStandardSearch').show();
        $('#IsManualSearch').val(false);
        $("#IsLocalServiceSearch").val(true);
        $("#IsStandardSearch").val(false);
        $('#IsMultiSearch').val(false);
        $('#pStandardSearch').show();
        $("#Deleyed").focus();
        $('#lblLocalServiceSearchLink').hide();
    });

    document.addEventListener('click', function (event) {
        event = event || window.event;
        var target = event.target;
        var id = target.id;

        if (id === 'goBackToSelectEntireJourney' || id === 'cantFindJourney') {
            handleManualSearchLink();
        }
    });

    var cantFindJourneyButton = document.getElementById("cantFindJourney");

    if (cantFindJourneyButton) {
        cantFindJourneyButton.addEventListener("click", handleManualSearchLink);
    }

    function handleManualSearchLink() {
        if ($('#cantFindJourney').is(':visible')) {
            $('#lblManualSearchLink').hide(); 
        } else {
            $('#lblManualSearchLink').show();
        }
    }
    

    $("#lblStandardSearch").on('click keypress', function(e)  {
        const code = e.charCode || e.keyCode;
        $('#formError').hide();
        if ((e.type !== 'click') && (code !== 32) && (code !== 13)) {
            return;
        }
        resetValidation();
        noSearch = false;
        sessionStorage.setItem('searchType', 'standardOrMultiSearch');
        $('#divManualSearch').hide();
        $('#divLocalService').hide();
        $('#standardSearchLink').hide();
        $('#searchApplication').show();
        $('#pStandardSearch').hide();

        $('#IsManualSearch').val(false);
        $("#IsLocalServiceSearch").val(false);
        $("#IsStandardSearch").val(true);
        $('#IsMultiSearch').val(false);
        $('#lblLocalServiceSearchLink').show();
    });

    $("#lblManualSearch").on('click keypress', function (e) {
        resetValidation();
        noSearch = true;
        sessionStorage.setItem('searchType', 'manualSearch');
        $('#searchApplication').hide();
        $('#divLocalService').hide();
        $('#divManualSearch').show();
        $('#standardSearchLink').show();
        $('#pStandardSearch').show();

        $("#IsLocalServiceSearch").val(false)
        $('#IsManualSearch').val(true);
        $("#IsStandardSearch").val(false);
        $('#IsMultiSearch').val(false);
        $("#Deleyed").focus();

        $('#lblLocalServiceSearchLink').show();
    });

    $('#TravleWarrentyFrom').submit(e => {
        $('#SearchError').hide();

        if ($('#direction').val() === 'prevStep' || noSearch)
            return;

        let selectedTravelFromSession = JSON.parse(sessionStorage.getItem(sessionStorageName));

        if (selectedTravelFromSession === undefined || selectedTravelFromSession.selectedJourneys === undefined) {
            $('#SearchError').show();
            $(button).removeClass('loading-animation');
            $(button).prop('disabled', false);
            e.preventDefault();
            return false;
        }
        //debugger;

        let selectedSearchTypeAfterSubmit = sessionStorage.getItem('searchType');

        // Standard Search
        if (selectedSearchTypeAfterSubmit === 'standardOrMultiSearch')

            if (!selectedTravelFromSession.selectPartOfJourney) {
                if (selectedTravelFromSession.selectedJourneys.length === 0) {
                    $('#SearchError').show();
                    $(button).removeClass('loading-animation');
                    $(button).prop('disabled', false);
                    e.preventDefault();
                    return false;
                }
                handleStandardSearch(selectedTravelFromSession);
            }
            // MultiSearch
            else if (selectedTravelFromSession.selectPartOfJourney) {
                if (selectedTravelFromSession.selectedJourneys.length === 0) {
                    $('#SearchError').show();
                    $(button).removeClass('loading-animation');
                    $(button).prop('disabled', false);
                    e.preventDefault();
                    return false;
                }
                handleMultiSearch(selectedTravelFromSession);
            }

    })



    let selectedSearchType = sessionStorage.getItem('searchType');
    switch (selectedSearchType) {
        case 'localSearch':
            $("#lblLocalServiceSearch").trigger('click');
            break;
        case 'standardOrMultiSearch':
            $("#lblStandardSearch").trigger('click');
            break;
        case 'manualSearch':
            $("#lblManualSearch").trigger('click');
            break;
        default:
            //debugger;
            break;
    }
});

function handleMultiSearch(selectedTravelFromSession) {
    $('#IsManualSearch').val(false);
    $("#IsStandardSearch").val(false);
    $('#IsMultiSearch').val(true);
    $('#multiSearchResult').val(JSON.stringify(selectedTravelFromSession.selectedJourneys));
    let hiddenInput = $(".searchInput");

    let searchEngine = selectedTravelFromSession.searchEngine;
    hiddenInput.each((i, obj) => {
        switch (obj.name) {
            case 'ArrivalDateTime':
                let routeLinks = selectedTravelFromSession.selectedJourneys[selectedTravelFromSession.selectedJourneys.length - 1].routeLinks;
                $(obj).val(routeLinks[routeLinks.length - 1].to.time);
                break;
            case 'DepartDateTime':
                $(obj).val(selectedTravelFromSession.selectedJourneys[0].routeLinks[0].from.time);
                break;
            case 'SearchEngine':
                $(obj).val(searchEngine);
                break;
        }
    })
}



let setType = function setTypeFunction() {
    if ($('#IsManualSearch').val() == 'true')
        sessionStorage.setItem('searchType', 'manualSearch');
    else if ($("#IsLocalServiceSearch").val() == "true")
        sessionStorage.setItem('searchType', 'localSearch');
    else 
        sessionStorage.setItem('searchType', 'standardOrMultiSearch');
}

function handleStandardSearch(selectedTravelFromSession) {
    let inputClassName = '.searchInput';
    let hiddenInput = $(inputClassName);
    $('#IsManualSearch').val(false);
    $('#IsMultiSearch').val(false);
    $("#IsStandardSearch").val(true);

    let searchEngine = selectedTravelFromSession.searchEngine;
    
    let { routeLinks } = selectedTravelFromSession.selectedJourneys[0];
    hiddenInput.each((i, obj) => {
        switch (obj.name) {
            case 'ArrivalDateTime':
                $(obj).val(routeLinks[routeLinks.length - 1].to.time);
                break;
            case 'DepartDateTime':
                $(obj).val(routeLinks[0].from.time);
                break;
            case 'PriceZoneList':
                $(obj).val(selectedTravelFromSession.selectedJourneys[0].priceZoneList);
                break;
            case 'TravelToId':
                $(obj).val(routeLinks[routeLinks.length - 1].to.id2);
                break;
            case 'TravelToStandard':
                $(obj).val(routeLinks[routeLinks.length - 1].to.name);
                break;
            case 'TravelFromId':
                $(obj).val(routeLinks[0].from.id2);
                break;
            case 'TravelFromStandard':
                $(obj).val(routeLinks[0].from.name);
                break;
            case 'RouteLinksStr':
                $(obj).val(JSON.stringify(routeLinks));
                break;
            case 'SearchEngine':
                $(obj).val(searchEngine);
                break;

        }
    })
}

// Step 3
$(function step3Logic() {
    if (currentStep != 3)
        return;



    $("input")
        .on("focusout", function () {
            var resetValidation = false;
            if ($('#formError li').length > 0) {
                resetValidation = $("#TravleWarrentyFrom").valid()
            }

            if (resetValidation) {
                $('#formError h3').hide();
                $('#formError li').remove();
            }
        })

    window.addEventListener('resize', () => adjustFilename(42));
    window.addEventListener('load', () => adjustFilename(42));
    $(window).on('st.file-added', adjustFilename(42))
})


// step 5
$(function step5Logic() {
    if (currentStep != 5)
        return;
    step5Validation();
})

// step 6
$(function step6Logic() {
    if (currentStep != 6)
        return;
    window.addEventListener('resize', () => adjustFilename(22));
    window.addEventListener('load', () => adjustFilename(22));
})


function adjustFilename(maxcharSizeOfNameInMobile) {
    
    const width = $('.travel-warrenty-form').eq(0).width();
    const fileNameElements = $('.reciept_filenams');
    fileNameElements.each((index, element) => {

        if ($(element).data('filename').length >= maxcharSizeOfNameInMobile) {
            var firstSection = $(element).data('filename').slice(0, maxcharSizeOfNameInMobile / 2 - 2);
            var lastSection = $(element).data('filename').slice(-(maxcharSizeOfNameInMobile / 2 - 2));
            element.textContent = `${firstSection}....${lastSection}`;

        }

    })


}

function resetValidation() {
    $('#SearchManualError').hide()
    $('#SearchError').hide()
    $('.input-validation-error').addClass('input-validation-valid');
    $('.input-validation-error').removeClass('input-validation-error');
    $('.field-validation-error').addClass('field-validation-valid');
    $('.field-validation-error').removeClass('field-validation-error');
    $('.validation-summary-errors').addClass('validation-summary-valid');
    $('.validation-summary-errors').removeClass('validation-summary-errors');
    $('#FormError .validation-container span').hide();

}

const registerStep2Validation = () => {
    $.validator.addMethod(
        'checkdepttimes',
        function (value, element, requiredValue) {
            if ($("#localTripNoShowFalse").is(':checked') &&
                $("#LocalDepTimeOriginal").val() !== ""
                && $("#LocalDepTimeReal").val() !== "" &&
                $("#LocalDepTimeOriginal").val() >= $("#LocalDepTimeReal").val()
                && $("#TravelDateLocalServiceStep2Original").val() >= $("#TravelDateLocalServiceStep2Real").val()
            ) {
                return false;
            }
            else {
                return true;
            }
        },
        $('#LocalRealBeforeOriginalTime-error').html()
    );
}
const registerStep1Validation = () => {
    $("#TravleWarrentyFrom").data("validator").settings.ignore = ":hidden:not(#PaymentMethodValid)";
    $.validator.addMethod(
        'checkpaymentmethod',
        function (value, element, requiredValue) {
            if ($("form .paymentType:checked").length == 0 || $("form .paymentType:checked").length == 1 && $("#IsResPlusTicket").is(':checked'))
                return false;
            else
                return true;
        },
        $('#PaymentMethodValid').attr('data-rule-checkpaymentmethod')
    );
}

// Step3 Logic
$(function () {
    var currentStep = parseInt($("#currentStep").val());
    if (currentStep != 3)
        return;



    step3Validation();
})

// Step4 Logic
$(function () {
    var currentStep = parseInt($("#currentStep").val());
    if (currentStep != 4)
        return;
    $("#SocialSecurityNumber").one("keyup", function () {
        $('#PersInfoFailedErr').hide();
    });

    ValidationStepFour();
})


const ValidationStepFour = () => {
    $.validator.addMethod(
        'ssnreguired',
        function (value, element, requiredValue) {
            if (!$('#LackSSN').checked && $('#SocialSecurityNumber').val().length <= 0) {
                return false;
            }
            return true;
        },
        $('#SocialSecurityNumber').attr('data-rule-ssnreguired')
    );

    $.validator.addMethod(
        'NumbersOnly',
        function (value, element, requiredValue) {
            let isnum = /^\d+$/.test(value);
            return isnum;
        },
        $('#ZipCode').attr('data-rule-NumbersOnly')
    );

    $.validator.addMethod(
        'SEZipCode',
        function (value, element, requiredValue) {
            if ($('#Country').val() == 'SE'&& value.length < 5)
                return false;

            return true;
        },
        $('#ZipCode').attr('data-rule-SEZipCode')
    );

    $.validator.addMethod(
        'OtherCountryZipCode',
        function (value, element, requiredValue) {
            if ($('#Country').val() != 'SE' && (value.length < 2 || value.length > 9))
                return false;

            return true;
        },
        $('#ZipCode').attr('data-rule-OtherCountryZipCode')
    );

    $('#Country').change(() => $('#ZipCode').valid());

}

const step5Validation = () => {
    $("#TravleWarrentyFrom").data("validator").settings.ignore = ":hidden:not(#CompensationSelectionValid)";
    $.validator.addMethod(
        'compensationRequired',
        function (value, element, requiredValue) {
            return $('input[type=radio][name=compensationType]:checked').length > 0;
        },
        $('#CompensationSelectionValid').attr('data-rule-compensationrequired')
    );
}

const step3Validation = () => {
    $("#TravleWarrentyFrom").data("validator").settings.ignore = ":hidden:not(#CostSelectionValid)";
    $.validator.addMethod(
        'CostSelectionValidRequired',
        function (value, element, requiredValue) {
            return $('input[type=radio][name=rbgCostType]:checked').length > 0;
        },
        $('#CostSelectionValid').attr('data-rule-CostSelectionValidRequired')
    );

    var maxFileSize = $("#maxFileSize").val();
    var allowedFileTypes = $("#allowedFileTypes").val();
    var allowedFileTypesList = allowedFileTypes.split(",");
    $.validator.addMethod(
        'FileUpploadType',
        function (value, element, requiredValue) {
            for (var i = 0, len = element.files.length; i < len; i++) {
                if (!isValidFileType(element.files[i], allowedFileTypesList)) return false;
            }
            return true;
        },
        function (params, element) {
            var allowedFileTypesErrorMessage = $("#allowedFileTypesErrorMessage").val();
            let allowedFileTypesString = allowedFileTypes.replace(/,/g, ', ');
            allowedFileTypesErrorMessage = replaceErrorMessageVariables(allowedFileTypesErrorMessage, { 'file': element.files[0].name, 'allowedFileTypes': allowedFileTypesString })

            return allowedFileTypesErrorMessage;
        }
    );

    $.validator.addMethod(
        'FileUpploadSize',
        function (value, element, requiredValue) {

            for (var i = 0, len = element.files.length; i < len; i++) {
                if (!isValidFileSize(element.files[i], maxFileSize)) return false;
            }
            return true;
        },
        function (params, element) {
            var errorMsg = $("#maxFileSizeErrorMessage").val();
            allowedFileTypesErrorMessage = replaceErrorMessageVariables(errorMsg, { 'file': element.files[0].name, 'maxFileSize': byteToMb(maxFileSize) })

            return allowedFileTypesErrorMessage;
        }
    );
}


function replaceErrorMessageVariables(str, values) {
    return str.replace(/{{(.*?)}}/g, (match, p1) => values[p1.trim()] || match);
}

function isValidFileType(file, allowedTypes) {
    var sFileExtension = file.name.split('.')[file.name.split('.').length - 1].toLowerCase();
    for (var i = 0; i < allowedTypes.length; i++) {
        if (sFileExtension == allowedTypes[i].toLowerCase()) {
            return true;
        }
    }
    return false;
}

function isValidFileSize(file, maxSize) {
    return file.size <= maxSize
}

function byteToMb(size) {
    if (isNaN(size)) {
        return "?";

    }
    var value = ((size / 1024) / 1024) * 10;
    return (Math.floor(value) / 10) + " MB";
};



$(function () {
    document.head.appendChild(document.createElement("style")).innerHTML = ".humany-guide-body {animation-duration:.001s;animation-name:scrollToTop}@keyframes scrollToTop{from{opacity:.99}to{opacity:1}}";
    var scrollToTop = function (event) {
        if (event.animationName === "scrollToTop") {
            window.scrollTo({
                top: 0,
                left: 0,
                behavior: 'smooth'
            });
        }
    }
    document.addEventListener("animationstart", scrollToTop, false);
    document.addEventListener("MSAnimationStart", scrollToTop, false);
    document.addEventListener("webkitAnimationStart", scrollToTop, false);
}());