!function(t,e){function i(e,i){var n,s,r,o=e.nodeName.toLowerCase();return"area"===o?(s=(n=e.parentNode).name,!(!e.href||!s||"map"!==n.nodeName.toLowerCase())&&(!!(r=t("img[usemap=#"+s+"]")[0])&&a(r))):(/input|select|textarea|button|object/.test(o)?!e.disabled:"a"===o&&e.href||i)&&a(e)}function a(e){return t.expr.filters.visible(e)&&!t(e).parents().andSelf().filter(function(){return"hidden"===t.css(this,"visibility")}).length}var n=0,s=/^ui-id-\d+$/;t.ui=t.ui||{},t.ui.version||(t.extend(t.ui,{version:"1.9.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,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,SPACE:32,TAB:9,UP:38}}),t.fn.extend({_focus:t.fn.focus,focus:function(e,i){return"number"==typeof e?this.each(function(){var a=this;setTimeout(function(){t(a).focus(),i&&i.call(a)},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;return e=t.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(t.css(this,"position"))&&/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!e.length?t(document):e},zIndex:function(i){if(i!==e)return this.css("zIndex",i);if(this.length)for(var a,n,s=t(this[0]);s.length&&s[0]!==document;){if(("absolute"===(a=s.css("position"))||"relative"===a||"fixed"===a)&&(n=parseInt(s.css("zIndex"),10),!isNaN(n)&&0!==n))return n;s=s.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){s.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,a){return!!t.data(e,a[3])},focusable:function(e){return i(e,!isNaN(t.attr(e,"tabindex")))},tabbable:function(e){var a=t.attr(e,"tabindex"),n=isNaN(a);return(n||a>=0)&&i(e,!n)}}),t(function(){var e=document.body,i=e.appendChild(i=document.createElement("div"));i.offsetHeight,t.extend(i.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),t.support.minHeight=100===i.offsetHeight,t.support.selectstart="onselectstart"in i,e.removeChild(i).style.display="none"}),t("<a>").outerWidth(1).jquery||t.each(["Width","Height"],function(i,a){function n(e,i,a,n){return t.each(s,function(){i-=parseFloat(t.css(e,"padding"+this))||0,a&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),n&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var s="Width"===a?["Left","Right"]:["Top","Bottom"],r=a.toLowerCase(),o={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+a]=function(i){return i===e?o["inner"+a].call(this):this.each(function(){t(this).css(r,n(this,i)+"px")})},t.fn["outer"+a]=function(e,i){return"number"!=typeof e?o["outer"+a].call(this,e):this.each(function(){t(this).css(r,n(this,e,!0,i)+"px")})}}),t("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=function(e){return function(i){return arguments.length?e.call(this,t.camelCase(i)):e.call(this)}}(t.fn.removeData)),function(){var e=/msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase())||[];t.ui.ie=!!e.length,t.ui.ie6=6===parseFloat(e[1],10)}(),t.fn.extend({disableSelection:function(){return this.bind((t.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(t){t.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),t.extend(t.ui,{plugin:{add:function(e,i,a){var n,s=t.ui[e].prototype;for(n in a)s.plugins[n]=s.plugins[n]||[],s.plugins[n].push([i,a[n]])},call:function(t,e,i){var a,n=t.plugins[e];if(n&&t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType)for(a=0;a<n.length;a++)t.options[n[a][0]]&&n[a][1].apply(t.element,i)}},contains:t.contains,hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var a=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[a]>0||(e[a]=1,n=e[a]>0,e[a]=0,n)},isOverAxis:function(t,e,i){return t>e&&t<e+i},isOver:function(e,i,a,n,s,r){return t.ui.isOverAxis(e,a,s)&&t.ui.isOverAxis(i,n,r)}}))}(jQuery),function(t,e){var i=0,a=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,a=0;null!=(i=e[a]);a++)try{t(i).triggerHandler("remove")}catch(t){}n(e)},t.widget=function(e,i,a){var n,s,r,o,d=e.split(".")[0];e=e.split(".")[1],n=d+"-"+e,a||(a=i,i=t.Widget),t.expr[":"][n.toLowerCase()]=function(e){return!!t.data(e,n)},t[d]=t[d]||{},s=t[d][e],r=t[d][e]=function(t,e){if(!this._createWidget)return new r(t,e);arguments.length&&this._createWidget(t,e)},t.extend(r,s,{version:a.version,_proto:t.extend({},a),_childConstructors:[]}),(o=new i).options=t.widget.extend({},o.options),t.each(a,function(e,n){t.isFunction(n)&&(a[e]=function(){var t=function(){return i.prototype[e].apply(this,arguments)},a=function(t){return i.prototype[e].apply(this,t)};return function(){var e,i=this._super,s=this._superApply;return this._super=t,this._superApply=a,e=n.apply(this,arguments),this._super=i,this._superApply=s,e}}())}),r.prototype=t.widget.extend(o,{widgetEventPrefix:s?o.widgetEventPrefix:e},a,{constructor:r,namespace:d,widgetName:e,widgetBaseClass:n,widgetFullName:n}),s?(t.each(s._childConstructors,function(e,i){var a=i.prototype;t.widget(a.namespace+"."+a.widgetName,r,i._proto)}),delete s._childConstructors):i._childConstructors.push(r),t.widget.bridge(e,r)},t.widget.extend=function(i){for(var n,s,r=a.call(arguments,1),o=0,d=r.length;o<d;o++)for(n in r[o])s=r[o][n],r[o].hasOwnProperty(n)&&s!==e&&(t.isPlainObject(s)?i[n]=t.isPlainObject(i[n])?t.widget.extend({},i[n],s):t.widget.extend({},s):i[n]=s);return i},t.widget.bridge=function(i,n){var s=n.prototype.widgetFullName||i;t.fn[i]=function(r){var o="string"==typeof r,d=a.call(arguments,1),l=this;return r=!o&&d.length?t.widget.extend.apply(null,[r].concat(d)):r,o?this.each(function(){var a,n=t.data(this,s);return n?t.isFunction(n[r])&&"_"!==r.charAt(0)?(a=n[r].apply(n,d))!==n&&a!==e?(l=a&&a.jquery?l.pushStack(a.get()):a,!1):void 0:t.error("no such method '"+r+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; attempted to call method '"+r+"'")}):this.each(function(){var e=t.data(this,s);e?e.option(r||{})._init():t.data(this,s,new n(r,this))}),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(e,a){a=t(a||this.defaultElement||this)[0],this.element=t(a),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),a!==this&&(t.data(a,this.widgetName,this),t.data(a,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===a&&this.destroy()}}),this.document=t(a.style?a.ownerDocument:a.document||a),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,a){var n,s,r,o=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(s=o[i]=t.widget.extend({},this.options[i]),r=0;r<n.length-1;r++)s[n[r]]=s[n[r]]||{},s=s[n[r]];if(i=n.pop(),a===e)return s[i]===e?null:s[i];s[i]=a}else{if(a===e)return this.options[i]===e?null:this.options[i];o[i]=a}return this._setOptions(o),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(e,i,a){var n,s=this;"boolean"!=typeof e&&(a=i,i=e,e=!1),a?(i=n=t(i),this.bindings=this.bindings.add(i)):(a=i,i=this.element,n=this.widget()),t.each(a,function(a,r){function o(){if(e||!0!==s.options.disabled&&!t(this).hasClass("ui-state-disabled"))return("string"==typeof r?s[r]:r).apply(s,arguments)}"string"!=typeof r&&(o.guid=r.guid=r.guid||o.guid||t.guid++);var d=a.match(/^(\w+)\s*(.*)$/),l=d[1]+s.eventNamespace,u=d[2];u?n.delegate(u,l,o):i.bind(l,o)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,a){var n,s,r=this.options[e];if(a=a||{},(i=t.Event(i)).type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],s=i.originalEvent)for(n in s)n in i||(i[n]=s[n]);return this.element.trigger(i,a),!(t.isFunction(r)&&!1===r.apply(this.element[0],[i].concat(a))||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(a,n,s){"string"==typeof n&&(n={effect:n});var r,o=n?!0===n||"number"==typeof n?i:n.effect||i:e;"number"==typeof(n=n||{})&&(n={duration:n}),r=!t.isEmptyObject(n),n.complete=s,n.delay&&a.delay(n.delay),r&&t.effects&&(t.effects.effect[o]||!1!==t.uiBackCompat&&t.effects[o])?a[e](n):o!==e&&a[o]?a[o](n.duration,n.easing,s):a.queue(function(i){t(this)[e](),s&&s.call(a[0]),i()})}}),!1!==t.uiBackCompat&&(t.Widget.prototype._getCreateOptions=function(){return t.metadata&&t.metadata.get(this.element[0])[this.widgetName]})}(jQuery),function(t,e){var i=!1;t(document).mouseup(function(t){i=!1}),t.widget("ui.mouse",{version:"1.9.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.bind("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).bind("click."+this.widgetName,function(i){if(!0===t.data(i.target,e.widgetName+".preventClickEvent"))return t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&t(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!i){this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var a=this,n=1===e.which,s=!("string"!=typeof this.options.cancel||!e.target.nodeName)&&t(e.target).closest(this.options.cancel).length;return!(n&&!s&&this._mouseCapture(e))||(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){a.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(e),!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return a._mouseMove(t)},this._mouseUpDelegate=function(t){return a._mouseUp(t)},t(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),i=!0,!0))}},_mouseMove:function(e){return!t.ui.ie||document.documentMode>=9||e.button?this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,e),this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted):this._mouseUp(e)},_mouseUp:function(e){return t(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),!1},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(t){return this.mouseDelayMet},_mouseStart:function(t){},_mouseDrag:function(t){},_mouseStop:function(t){},_mouseCapture:function(t){return!0}})}(jQuery),function(t,e){function i(t,e,i){return[parseInt(t[0],10)*(h.test(t[0])?e/100:1),parseInt(t[1],10)*(h.test(t[1])?i/100:1)]}function a(e,i){return parseInt(t.css(e,i),10)||0}t.ui=t.ui||{};var n,s=Math.max,r=Math.abs,o=Math.round,d=/left|center|right/,l=/top|center|bottom/,u=/[\+\-]\d+%?/,c=/^\w+/,h=/%$/,p=t.fn.position;t.position={scrollbarWidth:function(){if(n!==e)return n;var i,a,s=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),r=s.children()[0];return t("body").append(s),i=r.offsetWidth,s.css("overflow","scroll"),i===(a=r.offsetWidth)&&(a=s[0].clientWidth),s.remove(),n=i-a},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),a=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,s="scroll"===a||"auto"===a&&e.height<e.element[0].scrollHeight;return{width:n?t.position.scrollbarWidth():0,height:s?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),a=t.isWindow(i[0]);return{element:i,isWindow:a,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:a?i.width():i.outerWidth(),height:a?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return p.apply(this,arguments);e=t.extend({},e);var n,h,g,f,m,_=t(e.of),v=t.position.getWithinInfo(e.within),D=t.position.getScrollInfo(v),y=_[0],k=(e.collision||"flip").split(" "),w={};return 9===y.nodeType?(h=_.width(),g=_.height(),f={top:0,left:0}):t.isWindow(y)?(h=_.width(),g=_.height(),f={top:_.scrollTop(),left:_.scrollLeft()}):y.preventDefault?(e.at="left top",h=g=0,f={top:y.pageY,left:y.pageX}):(h=_.outerWidth(),g=_.outerHeight(),f=_.offset()),m=t.extend({},f),t.each(["my","at"],function(){var t,i,a=(e[this]||"").split(" ");1===a.length&&(a=d.test(a[0])?a.concat(["center"]):l.test(a[0])?["center"].concat(a):["center","center"]),a[0]=d.test(a[0])?a[0]:"center",a[1]=l.test(a[1])?a[1]:"center",t=u.exec(a[0]),i=u.exec(a[1]),w[this]=[t?t[0]:0,i?i[0]:0],e[this]=[c.exec(a[0])[0],c.exec(a[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===e.at[0]?m.left+=h:"center"===e.at[0]&&(m.left+=h/2),"bottom"===e.at[1]?m.top+=g:"center"===e.at[1]&&(m.top+=g/2),n=i(w.at,h,g),m.left+=n[0],m.top+=n[1],this.each(function(){var d,l,u=t(this),c=u.outerWidth(),p=u.outerHeight(),y=a(this,"marginLeft"),b=a(this,"marginTop"),M=c+y+a(this,"marginRight")+D.width,$=p+b+a(this,"marginBottom")+D.height,C=t.extend({},m),x=i(w.my,u.outerWidth(),u.outerHeight());"right"===e.my[0]?C.left-=c:"center"===e.my[0]&&(C.left-=c/2),"bottom"===e.my[1]?C.top-=p:"center"===e.my[1]&&(C.top-=p/2),C.left+=x[0],C.top+=x[1],t.support.offsetFractions||(C.left=o(C.left),C.top=o(C.top)),d={marginLeft:y,marginTop:b},t.each(["left","top"],function(i,a){t.ui.position[k[i]]&&t.ui.position[k[i]][a](C,{targetWidth:h,targetHeight:g,elemWidth:c,elemHeight:p,collisionPosition:d,collisionWidth:M,collisionHeight:$,offset:[n[0]+x[0],n[1]+x[1]],my:e.my,at:e.at,within:v,elem:u})}),t.fn.bgiframe&&u.bgiframe(),e.using&&(l=function(t){var i=f.left-C.left,a=i+h-c,n=f.top-C.top,o=n+g-p,d={target:{element:_,left:f.left,top:f.top,width:h,height:g},element:{element:u,left:C.left,top:C.top,width:c,height:p},horizontal:a<0?"left":i>0?"right":"center",vertical:o<0?"top":n>0?"bottom":"middle"};h<c&&r(i+a)<h&&(d.horizontal="center"),g<p&&r(n+o)<g&&(d.vertical="middle"),s(r(i),r(a))>s(r(n),r(o))?d.important="horizontal":d.important="vertical",e.using.call(this,t,d)}),u.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,a=e.within,n=a.isWindow?a.scrollLeft:a.offset.left,r=a.width,o=t.left-e.collisionPosition.marginLeft,d=n-o,l=o+e.collisionWidth-r-n;e.collisionWidth>r?d>0&&l<=0?(i=t.left+d+e.collisionWidth-r-n,t.left+=d-i):t.left=l>0&&d<=0?n:d>l?n+r-e.collisionWidth:n:d>0?t.left+=d:l>0?t.left-=l:t.left=s(t.left-o,t.left)},top:function(t,e){var i,a=e.within,n=a.isWindow?a.scrollTop:a.offset.top,r=e.within.height,o=t.top-e.collisionPosition.marginTop,d=n-o,l=o+e.collisionHeight-r-n;e.collisionHeight>r?d>0&&l<=0?(i=t.top+d+e.collisionHeight-r-n,t.top+=d-i):t.top=l>0&&d<=0?n:d>l?n+r-e.collisionHeight:n:d>0?t.top+=d:l>0?t.top-=l:t.top=s(t.top-o,t.top)}},flip:{left:function(t,e){var i,a,n=e.within,s=n.offset.left+n.scrollLeft,o=n.width,d=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,u=l-d,c=l+e.collisionWidth-o-d,h="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,g=-2*e.offset[0];u<0?((i=t.left+h+p+g+e.collisionWidth-o-s)<0||i<r(u))&&(t.left+=h+p+g):c>0&&((a=t.left-e.collisionPosition.marginLeft+h+p+g-d)>0||r(a)<c)&&(t.left+=h+p+g)},top:function(t,e){var i,a,n=e.within,s=n.offset.top+n.scrollTop,o=n.height,d=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,u=l-d,c=l+e.collisionHeight-o-d,h="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,p="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];u<0?(a=t.top+h+p+g+e.collisionHeight-o-s,t.top+h+p+g>u&&(a<0||a<r(u))&&(t.top+=h+p+g)):c>0&&(i=t.top-e.collisionPosition.marginTop+h+p+g-d,t.top+h+p+g>c&&(i>0||r(i)<c)&&(t.top+=h+p+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,a,n,s,r=document.getElementsByTagName("body")[0],o=document.createElement("div");for(s in e=document.createElement(r?"div":"body"),a={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&t.extend(a,{position:"absolute",left:"-1000px",top:"-1000px"}),a)e.style[s]=a[s];e.appendChild(o),(i=r||document.documentElement).insertBefore(e,i.firstChild),o.style.cssText="position: absolute; left: 10.7432222px;",n=t(o).offset().left,t.support.offsetFractions=n>10&&n<11,e.innerHTML="",i.removeChild(e)}(),!1!==t.uiBackCompat&&function(t){var i=t.fn.position;t.fn.position=function(a){if(!a||!a.offset)return i.call(this,a);var n=a.offset.split(" "),s=a.at.split(" ");return 1===n.length&&(n[1]=n[0]),/^\d/.test(n[0])&&(n[0]="+"+n[0]),/^\d/.test(n[1])&&(n[1]="+"+n[1]),1===s.length&&(/left|center|right/.test(s[0])?s[1]="center":(s[1]=s[0],s[0]="center")),i.call(this,t.extend(a,{at:s[0]+n[0]+" "+s[1]+n[1],offset:e}))}}(jQuery)}(jQuery),function($,undefined){function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function bindHover(t){var e="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(e,"mouseout",function(){$(this).removeClass("ui-state-hover"),-1!=this.className.indexOf("ui-datepicker-prev")&&$(this).removeClass("ui-datepicker-prev-hover"),-1!=this.className.indexOf("ui-datepicker-next")&&$(this).removeClass("ui-datepicker-next-hover")}).delegate(e,"mouseover",function(){$.datepicker._isDisabledDatepicker(instActive.inline?t.parent()[0]:instActive.input[0])||($(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),$(this).addClass("ui-state-hover"),-1!=this.className.indexOf("ui-datepicker-prev")&&$(this).addClass("ui-datepicker-prev-hover"),-1!=this.className.indexOf("ui-datepicker-next")&&$(this).addClass("ui-datepicker-next-hover"))})}function extendRemove(t,e){for(var i in $.extend(t,e),e)null!=e[i]&&e[i]!=undefined||(t[i]=e[i]);return t}$.extend($.ui,{datepicker:{version:"1.9.2"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return extendRemove(this._defaults,t||{}),this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(t){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline="div"==nodeName||"span"==nodeName;target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),"input"==nodeName?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(t,e){return{id:t[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:e,dpDiv:e?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(t,e){var i=$(t);e.append=$([]),e.trigger=$([]),i.hasClass(this.markerClassName)||(this._attachments(i,e),i.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(t,i,a){e.settings[i]=a}).bind("getData.datepicker",function(t,i){return this._get(e,i)}),this._autoSize(e),$.data(t,PROP_NAME,e),e.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,e){var i=this._get(e,"appendText"),a=this._get(e,"isRTL");e.append&&e.append.remove(),i&&(e.append=$('<span class="'+this._appendClass+'">'+i+"</span>"),t[a?"before":"after"](e.append)),t.unbind("focus",this._showDatepicker),e.trigger&&e.trigger.remove();var n=this._get(e,"showOn");if(("focus"==n||"both"==n)&&t.focus(this._showDatepicker),"button"==n||"both"==n){var s=this._get(e,"buttonText"),r=this._get(e,"buttonImage");e.trigger=$(this._get(e,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:r,alt:s,title:s}):$('<button type="button"></button>').addClass(this._triggerClass).html(""==r?s:$("<img/>").attr({src:r,alt:s,title:s}))),t[a?"before":"after"](e.trigger),e.trigger.click(function(){return $.datepicker._datepickerShowing&&$.datepicker._lastInput==t[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=t[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(t[0])):$.datepicker._showDatepicker(t[0]),!1})}},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e=new Date(2009,11,20),i=this._get(t,"dateFormat");if(i.match(/[DM]/)){var a=function(t){for(var e=0,i=0,a=0;a<t.length;a++)t[a].length>e&&(e=t[a].length,i=a);return i};e.setMonth(a(this._get(t,i.match(/MM/)?"monthNames":"monthNamesShort"))),e.setDate(a(this._get(t,i.match(/DD/)?"dayNames":"dayNamesShort"))+20-e.getDay())}t.input.attr("size",this._formatDate(t,e).length)}},_inlineDatepicker:function(t,e){var i=$(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv).bind("setData.datepicker",function(t,i,a){e.settings[i]=a}).bind("getData.datepicker",function(t,i){return this._get(e,i)}),$.data(t,PROP_NAME,e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&&this._disableDatepicker(t),e.dpDiv.css("display","block"))},_dialogDatepicker:function(t,e,i,a,n){var s=this._dialogInst;if(!s){this.uuid+=1;var r="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+r+'" style="position: absolute; top: -100px; width: 0px;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),(s=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},$.data(this._dialogInput[0],PROP_NAME,s)}if(extendRemove(s.settings,a||{}),e=e&&e.constructor==Date?this._formatDate(s,e):e,this._dialogInput.val(e),this._pos=n?n.length?n:[n.pageX,n.pageY]:null,!this._pos){var o=document.documentElement.clientWidth,d=document.documentElement.clientHeight,l=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[o/2-100+l,d/2-150+u]}return this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),s.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,s),this},_destroyDatepicker:function(t){var e=$(t),i=$.data(t,PROP_NAME);if(e.hasClass(this.markerClassName)){var a=t.nodeName.toLowerCase();$.removeData(t,PROP_NAME),"input"==a?(i.append.remove(),i.trigger.remove(),e.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"==a||"span"==a)&&e.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(t){var e=$(t),i=$.data(t,PROP_NAME);if(e.hasClass(this.markerClassName)){var a=t.nodeName.toLowerCase();if("input"==a)t.disabled=!1,i.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if("div"==a||"span"==a){var n=e.children("."+this._inlineClass);n.children().removeClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)}this._disabledInputs=$.map(this._disabledInputs,function(e){return e==t?null:e})}},_disableDatepicker:function(t){var e=$(t),i=$.data(t,PROP_NAME);if(e.hasClass(this.markerClassName)){var a=t.nodeName.toLowerCase();if("input"==a)t.disabled=!0,i.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if("div"==a||"span"==a){var n=e.children("."+this._inlineClass);n.children().addClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)}this._disabledInputs=$.map(this._disabledInputs,function(e){return e==t?null:e}),this._disabledInputs[this._disabledInputs.length]=t}},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]==t)return!0;return!1},_getInst:function(t){try{return $.data(t,PROP_NAME)}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,e,i){var a=this._getInst(t);if(2==arguments.length&&"string"==typeof e)return"defaults"==e?$.extend({},$.datepicker._defaults):a?"all"==e?$.extend({},a.settings):this._get(a,e):null;var n=e||{};if("string"==typeof e&&((n={})[e]=i),a){this._curInst==a&&this._hideDatepicker();var s=this._getDateDatepicker(t,!0),r=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");extendRemove(a.settings,n),null!==r&&n.dateFormat!==undefined&&n.minDate===undefined&&(a.settings.minDate=this._formatDate(a,r)),null!==o&&n.dateFormat!==undefined&&n.maxDate===undefined&&(a.settings.maxDate=this._formatDate(a,o)),this._attachments($(t),a),this._autoSize(a),this._setDate(a,s),this._updateAlternate(a),this._updateDatepicker(a)}},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(t){var e=$.datepicker._getInst(t.target),i=!0,a=e.dpDiv.is(".ui-datepicker-rtl");if(e._keyEvent=!0,$.datepicker._datepickerShowing)switch(t.keyCode){case 9:$.datepicker._hideDatepicker(),i=!1;break;case 13:var n=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",e.dpDiv);n[0]&&$.datepicker._selectDay(t.target,e.selectedMonth,e.selectedYear,n[0]);var s=$.datepicker._get(e,"onSelect");if(s){var r=$.datepicker._formatDate(e);s.apply(e.input?e.input[0]:null,[r,e])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(t.target,t.ctrlKey?-$.datepicker._get(e,"stepBigMonths"):-$.datepicker._get(e,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(t.target,t.ctrlKey?+$.datepicker._get(e,"stepBigMonths"):+$.datepicker._get(e,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&$.datepicker._clearDate(t.target),i=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&$.datepicker._gotoToday(t.target),i=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&$.datepicker._adjustDate(t.target,a?1:-1,"D"),i=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&$.datepicker._adjustDate(t.target,t.ctrlKey?-$.datepicker._get(e,"stepBigMonths"):-$.datepicker._get(e,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&$.datepicker._adjustDate(t.target,-7,"D"),i=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&$.datepicker._adjustDate(t.target,a?-1:1,"D"),i=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&$.datepicker._adjustDate(t.target,t.ctrlKey?+$.datepicker._get(e,"stepBigMonths"):+$.datepicker._get(e,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&$.datepicker._adjustDate(t.target,7,"D"),i=t.ctrlKey||t.metaKey;break;default:i=!1}else 36==t.keyCode&&t.ctrlKey?$.datepicker._showDatepicker(this):i=!1;i&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var e=$.datepicker._getInst(t.target);if($.datepicker._get(e,"constrainInput")){var i=$.datepicker._possibleChars($.datepicker._get(e,"dateFormat")),a=String.fromCharCode(t.charCode==undefined?t.keyCode:t.charCode);return t.ctrlKey||t.metaKey||a<" "||!i||i.indexOf(a)>-1}},_doKeyUp:function(t){var e=$.datepicker._getInst(t.target);if(e.input.val()!=e.lastVal)try{$.datepicker.parseDate($.datepicker._get(e,"dateFormat"),e.input?e.input.val():null,$.datepicker._getFormatConfig(e))&&($.datepicker._setDateFromField(e),$.datepicker._updateAlternate(e),$.datepicker._updateDatepicker(e))}catch(t){$.datepicker.log(t)}return!0},_showDatepicker:function(t){if("input"!=(t=t.target||t).nodeName.toLowerCase()&&(t=$("input",t.parentNode)[0]),!$.datepicker._isDisabledDatepicker(t)&&$.datepicker._lastInput!=t){var e=$.datepicker._getInst(t);$.datepicker._curInst&&$.datepicker._curInst!=e&&($.datepicker._curInst.dpDiv.stop(!0,!0),e&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var i=$.datepicker._get(e,"beforeShow"),a=i?i.apply(t,[t,e]):{};if(!1!==a){extendRemove(e.settings,a),e.lastVal=null,$.datepicker._lastInput=t,$.datepicker._setDateFromField(e),$.datepicker._inDialog&&(t.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(t),$.datepicker._pos[1]+=t.offsetHeight);var n=!1;$(t).parents().each(function(){return!(n|="fixed"==$(this).css("position"))});var s={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};if($.datepicker._pos=null,e.dpDiv.empty(),e.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(e),s=$.datepicker._checkOffset(e,s,n),e.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":n?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"}),!e.inline){var r=$.datepicker._get(e,"showAnim"),o=$.datepicker._get(e,"duration"),d=function(){var t=e.dpDiv.find("iframe.ui-datepicker-cover");if(t.length){var i=$.datepicker._getBorders(e.dpDiv);t.css({left:-i[0],top:-i[1],width:e.dpDiv.outerWidth(),height:e.dpDiv.outerHeight()})}};e.dpDiv.zIndex($(t).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&($.effects.effect[r]||$.effects[r])?e.dpDiv.show(r,$.datepicker._get(e,"showOptions"),o,d):e.dpDiv[r||"show"](r?o:null,d),(!r||!o)&&d(),e.input.is(":visible")&&!e.input.is(":disabled")&&e.input.focus(),$.datepicker._curInst=e}}}},_updateDatepicker:function(t){this.maxRows=4;var e=$.datepicker._getBorders(t.dpDiv);instActive=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i=t.dpDiv.find("iframe.ui-datepicker-cover");!i.length||i.css({left:-e[0],top:-e[1],width:t.dpDiv.outerWidth(),height:t.dpDiv.outerHeight()}),t.dpDiv.find("."+this._dayOverClass+" a").mouseover();var a=this._getNumberOfMonths(t),n=a[1];if(t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",17*n+"em"),t.dpDiv[(1!=a[0]||1!=a[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t==$.datepicker._curInst&&$.datepicker._datepickerShowing&&t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&t.input[0]!=document.activeElement&&t.input.focus(),t.yearshtml){var s=t.yearshtml;setTimeout(function(){s===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),s=t.yearshtml=null},0)}},_getBorders:function(t){var e=function(t){return{thin:1,medium:2,thick:3}[t]||t};return[parseFloat(e(t.css("border-left-width"))),parseFloat(e(t.css("border-top-width")))]},_checkOffset:function(t,e,i){var a=t.dpDiv.outerWidth(),n=t.dpDiv.outerHeight(),s=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,o=document.documentElement.clientWidth+(i?0:$(document).scrollLeft()),d=document.documentElement.clientHeight+(i?0:$(document).scrollTop());return e.left-=this._get(t,"isRTL")?a-s:0,e.left-=i&&e.left==t.input.offset().left?$(document).scrollLeft():0,e.top-=i&&e.top==t.input.offset().top+r?$(document).scrollTop():0,e.left-=Math.min(e.left,e.left+a>o&&o>a?Math.abs(e.left+a-o):0),e.top-=Math.min(e.top,e.top+n>d&&d>n?Math.abs(n+r):0),e},_findPos:function(t){for(var e=this._getInst(t),i=this._get(e,"isRTL");t&&("hidden"==t.type||1!=t.nodeType||$.expr.filters.hidden(t));)t=t[i?"previousSibling":"nextSibling"];var a=$(t).offset();return[a.left,a.top]},_hideDatepicker:function(t){var e=this._curInst;if(e&&(!t||e==$.data(t,PROP_NAME))&&this._datepickerShowing){var i=this._get(e,"showAnim"),a=this._get(e,"duration"),n=function(){$.datepicker._tidyDialog(e)};$.effects&&($.effects.effect[i]||$.effects[i])?e.dpDiv.hide(i,$.datepicker._get(e,"showOptions"),a,n):e.dpDiv["slideDown"==i?"slideUp":"fadeIn"==i?"fadeOut":"hide"](i?a:null,n),i||n(),this._datepickerShowing=!1;var s=this._get(e,"onClose");s&&s.apply(e.input?e.input[0]:null,[e.input?e.input.val():"",e]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if($.datepicker._curInst){var e=$(t.target),i=$.datepicker._getInst(e[0]);(e[0].id!=$.datepicker._mainDivId&&0==e.parents("#"+$.datepicker._mainDivId).length&&!e.hasClass($.datepicker.markerClassName)&&!e.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||e.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=i)&&$.datepicker._hideDatepicker()}},_adjustDate:function(t,e,i){var a=$(t),n=this._getInst(a[0]);this._isDisabledDatepicker(a[0])||(this._adjustInstDate(n,e+("M"==i?this._get(n,"showCurrentAtPos"):0),i),this._updateDatepicker(n))},_gotoToday:function(t){var e=$(t),i=this._getInst(e[0]);if(this._get(i,"gotoCurrent")&&i.currentDay)i.selectedDay=i.currentDay,i.drawMonth=i.selectedMonth=i.currentMonth,i.drawYear=i.selectedYear=i.currentYear;else{var a=new Date;i.selectedDay=a.getDate(),i.drawMonth=i.selectedMonth=a.getMonth(),i.drawYear=i.selectedYear=a.getFullYear()}this._notifyChange(i),this._adjustDate(e)},_selectMonthYear:function(t,e,i){var a=$(t),n=this._getInst(a[0]);n["selected"+("M"==i?"Month":"Year")]=n["draw"+("M"==i?"Month":"Year")]=parseInt(e.options[e.selectedIndex].value,10),this._notifyChange(n),this._adjustDate(a)},_selectDay:function(t,e,i,a){var n=$(t);if(!$(a).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(n[0])){var s=this._getInst(n[0]);s.selectedDay=s.currentDay=$("a",a).html(),s.selectedMonth=s.currentMonth=e,s.selectedYear=s.currentYear=i,this._selectDate(t,this._formatDate(s,s.currentDay,s.currentMonth,s.currentYear))}},_clearDate:function(t){var e=$(t);this._getInst(e[0]);this._selectDate(e,"")},_selectDate:function(t,e){var i=$(t),a=this._getInst(i[0]);e=null!=e?e:this._formatDate(a),a.input&&a.input.val(e),this._updateAlternate(a);var n=this._get(a,"onSelect");n?n.apply(a.input?a.input[0]:null,[e,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var e=this._get(t,"altField");if(e){var i=this._get(t,"altFormat")||this._get(t,"dateFormat"),a=this._getDate(t),n=this.formatDate(i,a,this._getFormatConfig(t));$(e).each(function(){$(this).val(n)})}},noWeekends:function(t){var e=t.getDay();return[e>0&&e<6,""]},iso8601Week:function(t){var e=new Date(t.getTime());e.setDate(e.getDate()+4-(e.getDay()||7));var i=e.getTime();return e.setMonth(0),e.setDate(1),Math.floor(Math.round((i-e)/864e5)/7)+1},parseDate:function(t,e,i){if(null==t||null==e)throw"Invalid arguments";if(""==(e="object"==typeof e?e.toString():e+""))return null;var a=(i?i.shortYearCutoff:null)||this._defaults.shortYearCutoff;a="string"!=typeof a?a:(new Date).getFullYear()%100+parseInt(a,10);for(var n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,s=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,d=-1,l=-1,u=-1,c=-1,h=!1,p=function(e){var i=v+1<t.length&&t.charAt(v+1)==e;return i&&v++,i},g=function(t){var i=p(t),a=new RegExp("^\\d{1,"+("@"==t?14:"!"==t?20:"y"==t&&i?4:"o"==t?3:2)+"}"),n=e.substring(_).match(a);if(!n)throw"Missing number at position "+_;return _+=n[0].length,parseInt(n[0],10)},f=function(t,i,a){var n=$.map(p(t)?a:i,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)}),s=-1;if($.each(n,function(t,i){var a=i[1];if(e.substr(_,a.length).toLowerCase()==a.toLowerCase())return s=i[0],_+=a.length,!1}),-1!=s)return s+1;throw"Unknown name at position "+_},m=function(){if(e.charAt(_)!=t.charAt(v))throw"Unexpected literal at position "+_;_++},_=0,v=0;v<t.length;v++)if(h)"'"!=t.charAt(v)||p("'")?m():h=!1;else switch(t.charAt(v)){case"d":u=g("d");break;case"D":f("D",n,s);break;case"o":c=g("o");break;case"m":l=g("m");break;case"M":l=f("M",r,o);break;case"y":d=g("y");break;case"@":d=(D=new Date(g("@"))).getFullYear(),l=D.getMonth()+1,u=D.getDate();break;case"!":var D;d=(D=new Date((g("!")-this._ticksTo1970)/1e4)).getFullYear(),l=D.getMonth()+1,u=D.getDate();break;case"'":p("'")?m():h=!0;break;default:m()}if(_<e.length){var y=e.substr(_);if(!/^\s+/.test(y))throw"Extra/unparsed characters found in date: "+y}if(-1==d?d=(new Date).getFullYear():d<100&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=a?0:-100)),c>-1)for(l=1,u=c;;){var k=this._getDaysInMonth(d,l-1);if(u<=k)break;l++,u-=k}if((D=this._daylightSavingAdjust(new Date(d,l-1,u))).getFullYear()!=d||D.getMonth()+1!=l||D.getDate()!=u)throw"Invalid date";return D},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";var a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,n=(i?i.dayNames:null)||this._defaults.dayNames,s=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,o=function(e){var i=h+1<t.length&&t.charAt(h+1)==e;return i&&h++,i},d=function(t,e,i){var a=""+e;if(o(t))for(;a.length<i;)a="0"+a;return a},l=function(t,e,i,a){return o(t)?a[e]:i[e]},u="",c=!1;if(e)for(var h=0;h<t.length;h++)if(c)"'"!=t.charAt(h)||o("'")?u+=t.charAt(h):c=!1;else switch(t.charAt(h)){case"d":u+=d("d",e.getDate(),2);break;case"D":u+=l("D",e.getDay(),a,n);break;case"o":u+=d("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=d("m",e.getMonth()+1,2);break;case"M":u+=l("M",e.getMonth(),s,r);break;case"y":u+=o("y")?e.getFullYear():(e.getYear()%100<10?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":o("'")?u+="'":c=!0;break;default:u+=t.charAt(h)}return u},_possibleChars:function(t){for(var e="",i=!1,a=function(e){var i=n+1<t.length&&t.charAt(n+1)==e;return i&&n++,i},n=0;n<t.length;n++)if(i)"'"!=t.charAt(n)||a("'")?e+=t.charAt(n):i=!1;else switch(t.charAt(n)){case"d":case"m":case"y":case"@":e+="0123456789";break;case"D":case"M":return null;case"'":a("'")?e+="'":i=!0;break;default:e+=t.charAt(n)}return e},_get:function(t,e){return t.settings[e]!==undefined?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!=t.lastVal){var i,a,n=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null;i=a=this._getDefaultDate(t);var r=this._getFormatConfig(t);try{i=this.parseDate(n,s,r)||a}catch(t){this.log(t),s=e?"":s}t.selectedDay=i.getDate(),t.drawMonth=t.selectedMonth=i.getMonth(),t.drawYear=t.selectedYear=i.getFullYear(),t.currentDay=s?i.getDate():0,t.currentMonth=s?i.getMonth():0,t.currentYear=s?i.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(t,e,i){var a=null==e||""===e?i:"string"==typeof e?function(e){try{return $.datepicker.parseDate($.datepicker._get(t,"dateFormat"),e,$.datepicker._getFormatConfig(t))}catch(t){}for(var i=(e.toLowerCase().match(/^c/)?$.datepicker._getDate(t):null)||new Date,a=i.getFullYear(),n=i.getMonth(),s=i.getDate(),r=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,o=r.exec(e);o;){switch(o[2]||"d"){case"d":case"D":s+=parseInt(o[1],10);break;case"w":case"W":s+=7*parseInt(o[1],10);break;case"m":case"M":n+=parseInt(o[1],10),s=Math.min(s,$.datepicker._getDaysInMonth(a,n));break;case"y":case"Y":a+=parseInt(o[1],10),s=Math.min(s,$.datepicker._getDaysInMonth(a,n))}o=r.exec(e)}return new Date(a,n,s)}(e):"number"==typeof e?isNaN(e)?i:function(t){var e=new Date;return e.setDate(e.getDate()+t),e}(e):new Date(e.getTime());return(a=a&&"Invalid Date"==a.toString()?i:a)&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var a=!e,n=t.selectedMonth,s=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),(n!=t.selectedMonth||s!=t.selectedYear)&&!i&&this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(a?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""==t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(t){var e=this._get(t,"stepMonths"),i="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(i,-e,"M")},next:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(i,+e,"M")},hide:function(){window["DP_jQuery_"+dpuuid].datepicker._hideDatepicker()},today:function(){window["DP_jQuery_"+dpuuid].datepicker._gotoToday(i)},selectDay:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectDay(i,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(i,this,"M"),!1},selectYear:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(i,this,"Y"),!1}};$(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e=new Date;e=this._daylightSavingAdjust(new Date(e.getFullYear(),e.getMonth(),e.getDate()));var i=this._get(t,"isRTL"),a=this._get(t,"showButtonPanel"),n=this._get(t,"hideIfNoPrevNext"),s=this._get(t,"navigationAsDateFormat"),r=this._getNumberOfMonths(t),o=this._get(t,"showCurrentAtPos"),d=this._get(t,"stepMonths"),l=1!=r[0]||1!=r[1],u=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),c=this._getMinMaxDate(t,"min"),h=this._getMinMaxDate(t,"max"),p=t.drawMonth-o,g=t.drawYear;if(p<0&&(p+=12,g--),h){var f=this._daylightSavingAdjust(new Date(h.getFullYear(),h.getMonth()-r[0]*r[1]+1,h.getDate()));for(f=c&&f<c?c:f;this._daylightSavingAdjust(new Date(g,p,1))>f;)--p<0&&(p=11,g--)}t.drawMonth=p,t.drawYear=g;var m=this._get(t,"prevText");m=s?this.formatDate(m,this._daylightSavingAdjust(new Date(g,p-d,1)),this._getFormatConfig(t)):m;var _=this._canAdjustMonth(t,-1,g,p)?'<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click" title="'+m+'"><span class="ui-icon ui-icon-circle-triangle-'+(i?"e":"w")+'">'+m+"</span></a>":n?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+m+'"><span class="ui-icon ui-icon-circle-triangle-'+(i?"e":"w")+'">'+m+"</span></a>",v=this._get(t,"nextText");v=s?this.formatDate(v,this._daylightSavingAdjust(new Date(g,p+d,1)),this._getFormatConfig(t)):v;var D=this._canAdjustMonth(t,1,g,p)?'<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="'+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(i?"w":"e")+'">'+v+"</span></a>":n?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(i?"w":"e")+'">'+v+"</span></a>",y=this._get(t,"currentText"),k=this._get(t,"gotoCurrent")&&t.currentDay?u:e;y=s?this.formatDate(y,k,this._getFormatConfig(t)):y;var w=t.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">'+this._get(t,"closeText")+"</button>",b=a?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(i?w:"")+(this._isInRange(t,k)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click">'+y+"</button>":"")+(i?"":w)+"</div>":"",M=parseInt(this._get(t,"firstDay"),10);M=isNaN(M)?0:M;for(var C=this._get(t,"showWeek"),x=this._get(t,"dayNames"),N=(this._get(t,"dayNamesShort"),this._get(t,"dayNamesMin")),I=this._get(t,"monthNames"),S=this._get(t,"monthNamesShort"),A=this._get(t,"beforeShowDay"),T=this._get(t,"showOtherMonths"),F=this._get(t,"selectOtherMonths"),Y=(this._get(t,"calculateWeek")||this.iso8601Week,this._getDefaultDate(t)),P="",W=0;W<r[0];W++){var E="";this.maxRows=4;for(var O=0;O<r[1];O++){var j=this._daylightSavingAdjust(new Date(g,p,t.selectedDay)),H=" ui-corner-all",R="";if(l){if(R+='<div class="ui-datepicker-group',r[1]>1)switch(O){case 0:R+=" ui-datepicker-group-first",H=" ui-corner-"+(i?"right":"left");break;case r[1]-1:R+=" ui-datepicker-group-last",H=" ui-corner-"+(i?"left":"right");break;default:R+=" ui-datepicker-group-middle",H=""}R+='">'}R+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+H+'">'+(/all|left/.test(H)&&0==W?i?D:_:"")+(/all|right/.test(H)&&0==W?i?_:D:"")+this._generateMonthYearHeader(t,p,g,c,h,W>0||O>0,I,S)+'</div><table class="ui-datepicker-calendar"><thead><tr>';for(var K=C?'<th class="ui-datepicker-week-col">'+this._get(t,"weekHeader")+"</th>":"",L=0;L<7;L++){var U=(L+M)%7;K+="<th"+((L+M+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[U]+'">'+N[U]+"</span></th>"}R+=K+"</tr></thead><tbody>";var B=this._getDaysInMonth(g,p);g==t.selectedYear&&p==t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,B));var z=(this._getFirstDayOfMonth(g,p)-M+7)%7,Q=Math.ceil((z+B)/7),V=l&&this.maxRows>Q?this.maxRows:Q;this.maxRows=V;for(var q=this._daylightSavingAdjust(new Date(g,p,1-z)),J=0;J<V;J++){R+="<tr>";var X=C?'<td class="ui-datepicker-week-col">'+this._get(t,"calculateWeek")(q)+"</td>":"";for(L=0;L<7;L++){var G=A?A.apply(t.input?t.input[0]:null,[q]):[!0,""],Z=q.getMonth()!=p,tt=Z&&!F||!G[0]||c&&q<c||h&&q>h;X+='<td class="'+((L+M+6)%7>=5?" ui-datepicker-week-end":"")+(Z?" ui-datepicker-other-month":"")+(q.getTime()==j.getTime()&&p==t.selectedMonth&&t._keyEvent||Y.getTime()==q.getTime()&&Y.getTime()==j.getTime()?" "+this._dayOverClass:"")+(tt?" "+this._unselectableClass+" ui-state-disabled":"")+(Z&&!T?"":" "+G[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==e.getTime()?" ui-datepicker-today":""))+'"'+(Z&&!T||!G[2]?"":' title="'+G[2]+'"')+(tt?"":' data-handler="selectDay" data-event="click" data-month="'+q.getMonth()+'" data-year="'+q.getFullYear()+'"')+">"+(Z&&!T?"&#xa0;":tt?'<span class="ui-state-default">'+q.getDate()+"</span>":'<a class="ui-state-default'+(q.getTime()==e.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(Z?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>",q.setDate(q.getDate()+1),q=this._daylightSavingAdjust(q)}R+=X+"</tr>"}++p>11&&(p=0,g++),E+=R+="</tbody></table>"+(l?"</div>"+(r[0]>0&&O==r[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"")}P+=E}return P+=b+($.ui.ie6&&!t.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),t._keyEvent=!1,P},_generateMonthYearHeader:function(t,e,i,a,n,s,r,o){var d=this._get(t,"changeMonth"),l=this._get(t,"changeYear"),u=this._get(t,"showMonthAfterYear"),c='<div class="ui-datepicker-title">',h="";if(s||!d)h+='<span class="ui-datepicker-month">'+r[e]+"</span>";else{var p=a&&a.getFullYear()==i,g=n&&n.getFullYear()==i;h+='<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';for(var f=0;f<12;f++)(!p||f>=a.getMonth())&&(!g||f<=n.getMonth())&&(h+='<option value="'+f+'"'+(f==e?' selected="selected"':"")+">"+o[f]+"</option>");h+="</select>"}if(u||(c+=h+(!s&&d&&l?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",s||!l)c+='<span class="ui-datepicker-year">'+i+"</span>";else{var m=this._get(t,"yearRange").split(":"),_=(new Date).getFullYear(),v=function(t){var e=t.match(/c[+-].*/)?i+parseInt(t.substring(1),10):t.match(/[+-].*/)?_+parseInt(t,10):parseInt(t,10);return isNaN(e)?_:e},D=v(m[0]),y=Math.max(D,v(m[1]||""));for(D=a?Math.max(D,a.getFullYear()):D,y=n?Math.min(y,n.getFullYear()):y,t.yearshtml+='<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';D<=y;D++)t.yearshtml+='<option value="'+D+'"'+(D==i?' selected="selected"':"")+">"+D+"</option>";t.yearshtml+="</select>",c+=t.yearshtml,t.yearshtml=null}return c+=this._get(t,"yearSuffix"),u&&(c+=(!s&&d&&l?"":"&#xa0;")+h),c+="</div>"},_adjustInstDate:function(t,e,i){var a=t.drawYear+("Y"==i?e:0),n=t.drawMonth+("M"==i?e:0),s=Math.min(t.selectedDay,this._getDaysInMonth(a,n))+("D"==i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(a,n,s)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"==i||"Y"==i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),n=i&&e<i?i:e;return n=a&&n>a?a:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,a){var n=this._getNumberOfMonths(t),s=this._daylightSavingAdjust(new Date(i,a+(e<0?e:n[0]*n[1]),1));return e<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(t,s)},_isInRange:function(t,e){var i=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max");return(!i||e.getTime()>=i.getTime())&&(!a||e.getTime()<=a.getTime())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,a){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(a,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),$.fn.datepicker=function(t){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find(document.body).append($.datepicker.dpDiv),$.datepicker.initialized=!0);var e=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!=t&&"getDate"!=t&&"widget"!=t?"option"==t&&2==arguments.length&&"string"==typeof arguments[1]?$.datepicker["_"+t+"Datepicker"].apply($.datepicker,[this[0]].concat(e)):this.each(function(){"string"==typeof t?$.datepicker["_"+t+"Datepicker"].apply($.datepicker,[this].concat(e)):$.datepicker._attachDatepicker(this,t)}):$.datepicker["_"+t+"Datepicker"].apply($.datepicker,[this[0]].concat(e))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.9.2",window["DP_jQuery_"+dpuuid]=$}(jQuery);
/*! jQuery Validation Plugin - v1.15.0 - 2/24/2016
 * http://jqueryvalidation.org/
 * Copyright (c) 2016 Jörn Zaefferer; Licensed MIT */
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){if(this.length){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||-1!==a.inArray(c.keyCode,d)||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},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.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":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'], [contenteditable]",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=h&&g.check(e)))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)a[b]&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0]),d in c||!b.objectLength(a(this).rules())?!1:(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);if("function"==typeof f.normalizer){if(i=f.normalizer.call(b,i),"string"!=typeof i)throw new TypeError("The normalizer should return a string value.");delete f.normalizer}for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=".  Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){var d=this.findDefined(this.customMessage(b.name,c.method),this.customDataMessage(b,c.method),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c.method],"<strong>Warning: No message defined for "+b.name+"</strong>"),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],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 a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},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(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[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(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e=a(c).attr("type"),f="Step attribute on input type "+e+" is not supported.",g=["text","number","range"],h=new RegExp("\\b"+e+"\\b"),i=e&&!h.test(g.join());if(i)throw new Error(f);return this.optional(c)||b%d===0},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)})});
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
!function (a) { function e(a, e, n) { a.rules[e] = n, a.message && (a.messages[e] = a.message) } function n(a) { return a.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g) } function t(a) { return a.replace(/([!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~])/g, "\\$1") } function r(a) { return a.substr(0, a.lastIndexOf(".") + 1) } function i(a, e) { return 0 === a.indexOf("*.") && (a = a.replace("*.", e)), a } function o(e, n) { var r = a(this).find("[data-valmsg-for='" + t(n[0].name) + "']"), i = r.attr("data-valmsg-replace"), o = i ? a.parseJSON(i) !== !1 : null; r.removeClass("field-validation-valid").addClass("field-validation-error"), e.data("unobtrusiveContainer", r), o ? (r.empty(), e.removeClass("input-validation-error").appendTo(r)) : e.hide() } function d(e, n) { var t = a(this).find("[data-valmsg-summary=true]"), r = t.find("ul"); r && r.length && n.errorList.length && (r.empty(), t.addClass("validation-summary-errors").removeClass("validation-summary-valid"), a.each(n.errorList, function () { a("<li />").html(this.message).appendTo(r) })) } function s(e) { var n = e.data("unobtrusiveContainer"); if (n) { var t = n.attr("data-valmsg-replace"), r = t ? a.parseJSON(t) : null; n.addClass("field-validation-valid").removeClass("field-validation-error"), e.removeData("unobtrusiveContainer"), r && n.empty() } } function l(e) { var n = a(this), t = "__jquery_unobtrusive_validation_form_reset"; if (!n.data(t)) { n.data(t, !0); try { n.data("validator").resetForm() } finally { n.removeData(t) } n.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors"), n.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer") } } function m(e) { var n = a(e), t = n.data(v), r = a.proxy(l, e), i = p.unobtrusive.options || {}, m = function (n, t) { var r = i[n]; r && a.isFunction(r) && r.apply(e, t) }; return t || (t = { options: { errorClass: i.errorClass || "input-validation-error", errorElement: i.errorElement || "span", errorPlacement: function () { o.apply(e, arguments), m("errorPlacement", arguments) }, invalidHandler: function () { d.apply(e, arguments), m("invalidHandler", arguments) }, messages: {}, rules: {}, success: function () { s.apply(e, arguments), m("success", arguments) } }, attachValidation: function () { n.off("reset." + v, r).on("reset." + v, r).validate(this.options) }, validate: function () { return n.validate(), n.valid() } }, n.data(v, t)), t } var u, p = a.validator, v = "unobtrusiveValidation"; p.unobtrusive = { adapters: [], parseElement: function (e, n) { var t, r, i, o = a(e), d = o.parents("form")[0]; d && (t = m(d), t.options.rules[e.name] = r = {}, t.options.messages[e.name] = i = {}, a.each(this.adapters, function () { var n = "data-val-" + this.name, t = o.attr(n), s = {}; void 0 !== t && (n += "-", a.each(this.params, function () { s[this] = o.attr(n + this) }), this.adapt({ element: e, form: d, message: t, params: s, rules: r, messages: i })) }), a.extend(r, { __dummy__: !0 }), n || t.attachValidation()) }, parse: function (e) { var n = a(e), t = n.parents().addBack().filter("form").add(n.find("form")).has("[data-val=true]"); n.find("[data-val=true]").each(function () { p.unobtrusive.parseElement(this, !0) }), t.each(function () { var a = m(this); a && a.attachValidation() }) } }, u = p.unobtrusive.adapters, u.add = function (a, e, n) { return n || (n = e, e = []), this.push({ name: a, params: e, adapt: n }), this }, u.addBool = function (a, n) { return this.add(a, function (t) { e(t, n || a, !0) }) }, u.addMinMax = function (a, n, t, r, i, o) { return this.add(a, [i || "min", o || "max"], function (a) { var i = a.params.min, o = a.params.max; i && o ? e(a, r, [i, o]) : i ? e(a, n, i) : o && e(a, t, o) }) }, u.addSingleVal = function (a, n, t) { return this.add(a, [n || "val"], function (r) { e(r, t || a, r.params[n]) }) }, p.addMethod("__dummy__", function (a, e, n) { return !0 }), p.addMethod("regex", function (a, e, n) { var t; return !!this.optional(e) || (t = new RegExp(n).exec(a), t && 0 === t.index && t[0].length === a.length) }), p.addMethod("nonalphamin", function (a, e, n) { var t; return n && (t = a.match(/\W/g), t = t && t.length >= n), t }), p.methods.extension ? (u.addSingleVal("accept", "mimtype"), u.addSingleVal("extension", "extension")) : u.addSingleVal("extension", "extension", "accept"), u.addSingleVal("regex", "pattern"), u.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"), u.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range"), u.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength"), u.add("equalto", ["other"], function (n) { var o = r(n.element.name), d = n.params.other, s = i(d, o), l = a(n.form).find(":input").filter("[name='" + t(s) + "']")[0]; e(n, "equalTo", l) }), u.add("required", function (a) { "INPUT" === a.element.tagName.toUpperCase() && "CHECKBOX" === a.element.type.toUpperCase() || e(a, "required", !0) }), u.add("remote", ["url", "type", "additionalfields"], function (o) { var d = { url: o.params.url, type: o.params.type || "GET", data: {} }, s = r(o.element.name); a.each(n(o.params.additionalfields || o.element.name), function (e, n) { var r = i(n, s); d.data[r] = function () { var e = a(o.form).find(":input").filter("[name='" + t(r) + "']"); return e.is(":checkbox") ? e.filter(":checked").val() || e.filter(":hidden").val() || "" : e.is(":radio") ? e.filter(":checked").val() || "" : e.val() } }), e(o, "remote", d) }), u.add("password", ["min", "nonalphamin", "regex"], function (a) { a.params.min && e(a, "minlength", a.params.min), a.params.nonalphamin && e(a, "nonalphamin", a.params.nonalphamin), a.params.regex && e(a, "regex", a.params.regex) }), a(function () { p.unobtrusive.parse(document) }) }(jQuery);
less = {
    env: "development"// or "production"
    /*, 
    async: false,       // load imports async
    fileAsync: false,   // load imports async when in a page under
    // a file protocol
    poll: 1000,         // when in watch mode, time in ms between polls
    functions: {},      // user functions, keyed by name
    dumpLineNumbers: "comments", // or "mediaQuery" or "all"
    relativeUrls: false,// whether to adjust url's to be relative
    // if false, url's are already relative to the
    // entry less file
    rootpath: ":/a.com/"// a path to add on to the start of every url
    //resource*/
};
//
// LESS - Leaner CSS v1.3.0
// http://lesscss.org
// 
// Copyright (c) 2009-2011, Alexis Sellier
// Licensed under the Apache 2.0 License.
//
(function(a,b){function c(b){return a.less[b.split("/")[1]]}function l(){var a=document.getElementsByTagName("style");for(var b=0;b<a.length;b++)a[b].type.match(j)&&(new d.Parser).parse(a[b].innerHTML||"",function(c,d){var e=d.toCSS(),f=a[b];f.type="text/css",f.styleSheet?f.styleSheet.cssText=e:f.innerHTML=e})}function m(a,b){for(var c=0;c<d.sheets.length;c++)n(d.sheets[c],a,b,d.sheets.length-(c+1))}function n(b,c,e,f){var h=a.location.href.replace(/[#?].*$/,""),i=b.href.replace(/\?.*$/,""),j=g&&g.getItem(i),k=g&&g.getItem(i+":timestamp"),l={css:j,timestamp:k};/^(https?|file):/.test(i)||(i.charAt(0)=="/"?i=a.location.protocol+"//"+a.location.host+i:i=h.slice(0,h.lastIndexOf("/")+1)+i);var m=i.match(/([^\/]+)$/)[1];q(b.href,b.type,function(a,g){if(!e&&l&&g&&(new Date(g)).valueOf()===(new Date(l.timestamp)).valueOf())p(l.css,b),c(null,null,a,b,{local:!0,remaining:f});else try{(new d.Parser({optimization:d.optimization,paths:[i.replace(/[\w\.-]+$/,"")],mime:b.type,filename:m})).parse(a,function(d,e){if(d)return u(d,i);try{c(d,e,a,b,{local:!1,lastModified:g,remaining:f}),s(document.getElementById("less-error-message:"+o(i)))}catch(d){u(d,i)}})}catch(h){u(h,i)}},function(a,b){throw new Error("Couldn't load "+b+" ("+a+")")})}function o(a){return a.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\?.*$/,"").replace(/\.[^\.\/]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function p(a,b,c){var d,e=b.href?b.href.replace(/\?.*$/,""):"",f="less:"+(b.title||o(e));(d=document.getElementById(f))===null&&(d=document.createElement("style"),d.type="text/css",d.media=b.media||"screen",d.id=f,document.getElementsByTagName("head")[0].appendChild(d));if(d.styleSheet)try{d.styleSheet.cssText=a}catch(h){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(a){d.childNodes.length>0?d.firstChild.nodeValue!==a.nodeValue&&d.replaceChild(a,d.firstChild):d.appendChild(a)})(document.createTextNode(a));c&&g&&(t("saving "+e+" to cache."),g.setItem(e,a),g.setItem(e+":timestamp",c))}function q(a,b,c,e){function i(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):typeof d=="function"&&d(b.status,a)}var g=r(),h=f?!1:d.async;typeof g.overrideMimeType=="function"&&g.overrideMimeType("text/css"),g.open("GET",a,h),g.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),g.send(null),f?g.status===0||g.status>=200&&g.status<300?c(g.responseText):e(g.status,a):h?g.onreadystatechange=function(){g.readyState==4&&i(g,c,e)}:i(g,c,e)}function r(){if(a.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){return t("browser doesn't support AJAX."),null}}function s(a){return a&&a.parentNode.removeChild(a)}function t(a){d.env=="development"&&typeof console!="undefined"&&console.log("less: "+a)}function u(a,b){var c="less-error-message:"+o(b),e='<li><label>{line}</label><pre class="{class}">{content}</pre></li>',f=document.createElement("div"),g,h,i=[],j=a.filename||b;f.id=c,f.className="less-error-message",h="<h3>"+(a.message||"There is an error in your .less file")+"</h3>"+'<p>in <a href="'+j+'">'+j+"</a> ";var k=function(a,b,c){a.extract[b]&&i.push(e.replace(/\{line\}/,parseInt(a.line)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};a.stack?h+="<br/>"+a.stack.split("\n").slice(1).join("<br/>"):a.extract&&(k(a,0,""),k(a,1,"line"),k(a,2,""),h+="on line "+a.line+", column "+(a.column+1)+":</p>"+"<ul>"+i.join("")+"</ul>"),f.innerHTML=h,p([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),f.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),d.env=="development"&&(g=setInterval(function(){document.body&&(document.getElementById(c)?document.body.replaceChild(f,document.getElementById(c)):document.body.insertBefore(f,document.body.firstChild),clearInterval(g))},10))}typeof define=="function"&&define.amd&&define("less",[],function(){return d}),Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"||a instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=this.length>>>0;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=this.length>>>0,c=new Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=this.length>>>0,c=0;if(b===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length,c=arguments[1]||0;if(!b)return-1;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!Object.prototype.hasOwnProperty.call(this,c))continue;if(a===this[c])return c}return-1}),Object.keys||(Object.keys=function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var d,e;typeof environment=="object"&&{}.toString.call(environment)==="[object Environment]"?(typeof a=="undefined"?d={}:d=a.less={},e=d.tree={},d.mode="rhino"):typeof a=="undefined"?(d=exports,e=c("./tree"),d.mode="node"):(typeof a.less=="undefined"&&(a.less={}),d=a.less,e=a.less.tree={},d.mode="browser"),d.Parser=function v(a){function q(){h=k[g],i=f,l=f}function r(){k[g]=h,f=i,l=f}function s(){f>l&&(k[g]=k[g].slice(f-l),l=f)}function t(a){var c,d,e,h,i,j,n,o;if(a instanceof Function)return a.call(m.parsers);if(typeof a=="string")c=b.charAt(f)===a?a:null,e=1,s();else{s();if(c=a.exec(k[g]))e=c[0].length;else return null}if(c){o=f+=e,j=f+k[g].length-e;while(f<j){h=b.charCodeAt(f);if(h!==32&&h!==10&&h!==9)break;f++}return k[g]=k[g].slice(e+(f-o)),l=f,k[g].length===0&&g<k.length-1&&g++,typeof c=="string"?c:c.length===1?c[0]:c}}function u(a,c){var d=t(a);if(!d)v(c||(typeof a=="string"?"expected '"+a+"' got '"+b.charAt(f)+"'":"unexpected token"));else return d}function v(a,b){throw{index:f,type:b||"Syntax",message:a}}function w(a){return typeof a=="string"?b.charAt(f)===a:a.test(k[g])?!0:!1}function x(a){return d.mode==="node"?c("path").basename(a):a.match(/[^\/]+$/)[0]}function y(a,c){return a.filename&&c.filename&&a.filename!==c.filename?m.imports.contents[x(a.filename)]:b}function z(a,b){for(var c=a,d=-1;c>=0&&b.charAt(c)!=="\n";c--)d++;return{line:typeof a=="number"?(b.slice(0,a).match(/\n/g)||"").length:null,column:d}}function A(a,b){var c=y(a,b),d=z(a.index,c),e=d.line,f=d.column,g=c.split("\n");this.type=a.type||"Syntax",this.message=a.message,this.filename=a.filename||b.filename,this.index=a.index,this.line=typeof e=="number"?e+1:null,this.callLine=a.call&&z(a.call,c).line+1,this.callExtract=g[z(a.call,c).line],this.stack=a.stack,this.column=f,this.extract=[g[e-1],g[e],g[e+1]]}var b,f,g,h,i,j,k,l,m,n=this,o=function(){},p=this.imports={paths:a&&a.paths||[],queue:[],files:{},contents:{},mime:a&&a.mime,error:null,push:function(b,c){var e=this;this.queue.push(b),d.Parser.importer(b,this.paths,function(a,d,f){e.queue.splice(e.queue.indexOf(b),1),e.files[b]=d,e.contents[b]=f,a&&!e.error&&(e.error=a),c(a,d),e.queue.length===0&&o()},a)}};return this.env=a=a||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null,m={imports:p,parse:function(h,i){var n,p,q,r,s,u,v=[],w,x=null;f=g=l=j=0,b=h.replace(/\r\n/g,"\n"),k=function(c){var d=0,e=/[^"'`\{\}\/\(\)\\]+/g,f=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,g=/"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'|`((?:[^`\\\r\n]|\\.)*)`/g,h=0,i,j=c[0],k;for(var l=0,m,n;l<b.length;l++){e.lastIndex=l,(i=e.exec(b))&&i.index===l&&(l+=i[0].length,j.push(i[0])),m=b.charAt(l),f.lastIndex=g.lastIndex=l,(i=g.exec(b))&&i.index===l&&(l+=i[0].length,j.push(i[0]),m=b.charAt(l)),!k&&m==="/"&&(n=b.charAt(l+1),(n==="/"||n==="*")&&(i=f.exec(b))&&i.index===l&&(l+=i[0].length,j.push(i[0]),m=b.charAt(l)));switch(m){case"{":if(!k){h++,j.push(m);break};case"}":if(!k){h--,j.push(m),c[++d]=j=[];break};case"(":if(!k){k=!0,j.push(m);break};case")":if(k){k=!1,j.push(m);break};default:j.push(m)}}return h>0&&(x=new A({index:l,type:"Parse",message:"missing closing `}`",filename:a.filename},a)),c.map(function(a){return a.join("")})}([[]]);if(x)return i(x);try{n=new e.Ruleset([],t(this.parsers.primary)),n.root=!0}catch(y){return i(new A(y,a))}n.toCSS=function(b){var f,g,h;return function(f,g){var h=[],i;f=f||{},typeof g=="object"&&!Array.isArray(g)&&(g=Object.keys(g).map(function(a){var b=g[a];return b instanceof e.Value||(b instanceof e.Expression||(b=new e.Expression([b])),b=new e.Value([b])),new e.Rule("@"+a,b,!1,0)}),h=[new e.Ruleset(null,g)]);try{var j=b.call(this,{frames:h}).toCSS([],{compress:f.compress||!1})}catch(k){throw new A(k,a)}if(i=m.imports.error)throw i instanceof A?i:new A(i,a);return f.yuicompress&&d.mode==="node"?c("./cssmin").compressor.cssmin(j):f.compress?j.replace(/(\s)+/g,"$1"):j}}(n.eval);if(f<b.length-1){f=j,u=b.split("\n"),s=(b.slice(0,f).match(/\n/g)||"").length+1;for(var z=f,B=-1;z>=0&&b.charAt(z)!=="\n";z--)B++;x={type:"Parse",message:"Syntax Error on line "+s,index:f,filename:a.filename,line:s,column:B,extract:[u[s-2],u[s-1],u[s]]}}this.imports.queue.length>0?o=function(){i(x,n)}:i(x,n)},parsers:{primary:function(){var a,b=[];while((a=t(this.mixin.definition)||t(this.rule)||t(this.ruleset)||t(this.mixin.call)||t(this.comment)||t(this.directive))||t(/^[\s\n]+/))a&&b.push(a);return b},comment:function(){var a;if(b.charAt(f)!=="/")return;if(b.charAt(f+1)==="/")return new e.Comment(t(/^\/\/.*/),!0);if(a=t(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new e.Comment(a)},entities:{quoted:function(){var a,c=f,d;b.charAt(c)==="~"&&(c++,d=!0);if(b.charAt(c)!=='"'&&b.charAt(c)!=="'")return;d&&t("~");if(a=t(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new e.Quoted(a[0],a[1]||a[2],d)},keyword:function(){var a;if(a=t(/^[_A-Za-z-][_A-Za-z0-9-]*/))return e.colors.hasOwnProperty(a)?new e.Color(e.colors[a].slice(1)):new e.Keyword(a)},call:function(){var b,c,d=f;if(!(b=/^([\w-]+|%|progid:[\w\.]+)\(/.exec(k[g])))return;b=b[1].toLowerCase();if(b==="url")return null;f+=b.length;if(b==="alpha")return t(this.alpha);t("("),c=t(this.entities.arguments);if(!t(")"))return;if(b)return new e.Call(b,c,d,a.filename)},arguments:function(){var a=[],b;while(b=t(this.entities.assignment)||t(this.expression)){a.push(b);if(!t(","))break}return a},literal:function(){return t(this.entities.dimension)||t(this.entities.color)||t(this.entities.quoted)},assignment:function(){var a,b;if((a=t(/^\w+(?=\s?=)/i))&&t("=")&&(b=t(this.entity)))return new e.Assignment(a,b)},url:function(){var a;if(b.charAt(f)!=="u"||!t(/^url\(/))return;return a=t(this.entities.quoted)||t(this.entities.variable)||t(this.entities.dataURI)||t(/^[-\w%@$\/.&=:;#+?~]+/)||"",u(")"),new e.URL(a.value||a.data||a instanceof e.Variable?a:new e.Anonymous(a),p.paths)},dataURI:function(){var a;if(t(/^data:/)){a={},a.mime=t(/^[^\/]+\/[^,;)]+/)||"",a.charset=t(/^;\s*charset=[^,;)]+/)||"",a.base64=t(/^;\s*base64/)||"",a.data=t(/^,\s*[^)]+/);if(a.data)return a}},variable:function(){var c,d=f;if(b.charAt(f)==="@"&&(c=t(/^@@?[\w-]+/)))return new e.Variable(c,d,a.filename)},color:function(){var a;if(b.charAt(f)==="#"&&(a=t(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/)))return new e.Color(a[1])},dimension:function(){var a,c=b.charCodeAt(f);if(c>57||c<45||c===47)return;if(a=t(/^(-?\d*\.?\d+)(px|%|em|rem|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/))return new e.Dimension(a[1],a[2])},javascript:function(){var a,c=f,d;b.charAt(c)==="~"&&(c++,d=!0);if(b.charAt(c)!=="`")return;d&&t("~");if(a=t(/^`([^`]*)`/))return new e.JavaScript(a[1],f,d)}},variable:function(){var a;if(b.charAt(f)==="@"&&(a=t(/^(@[\w-]+)\s*:/)))return a[1]},shorthand:function(){var a,b;if(!w(/^[@\w.%-]+\/[@\w.-]+/))return;if((a=t(this.entity))&&t("/")&&(b=t(this.entity)))return new e.Shorthand(a,b)},mixin:{call:function(){var c=[],d,g,h,i=f,j=b.charAt(f),k=!1;if(j!=="."&&j!=="#")return;while(d=t(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/))c.push(new e.Element(g,d,f)),g=t(">");t("(")&&(h=t(this.entities.arguments))&&t(")"),t(this.important)&&(k=!0);if(c.length>0&&(t(";")||w("}")))return new e.mixin.Call(c,h||[],i,a.filename,k)},definition:function(){var a,c=[],d,g,h,i,j,k=!1;if(b.charAt(f)!=="."&&b.charAt(f)!=="#"||w(/^[^{]*(;|})/))return;q();if(d=t(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)){a=d[1];do{if(b.charAt(f)==="."&&t(/^\.{3}/)){k=!0;break}if(!(h=t(this.entities.variable)||t(this.entities.literal)||t(this.entities.keyword)))break;if(h instanceof e.Variable)if(t(":"))i=u(this.expression,"expected expression"),c.push({name:h.name,value:i});else{if(t(/^\.{3}/)){c.push({name:h.name,variadic:!0}),k=!0;break}c.push({name:h.name})}else c.push({value:h})}while(t(","));u(")"),t(/^when/)&&(j=u(this.conditions,"expected condition")),g=t(this.block);if(g)return new e.mixin.Definition(a,c,g,j,k);r()}}},entity:function(){return t(this.entities.literal)||t(this.entities.variable)||t(this.entities.url)||t(this.entities.call)||t(this.entities.keyword)||t(this.entities.javascript)||t(this.comment)},end:function(){return t(";")||w("}")},alpha:function(){var a;if(!t(/^\(opacity=/i))return;if(a=t(/^\d+/)||t(this.entities.variable))return u(")"),new e.Alpha(a)},element:function(){var a,b,c,d;c=t(this.combinator),a=t(/^(?:\d+\.\d+|\d+)%/)||t(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)||t("*")||t(this.attribute)||t(/^\([^)@]+\)/),a||t("(")&&(d=t(this.entities.variable))&&t(")")&&(a=new e.Paren(d));if(a)return new e.Element(c,a,f);if(c.value&&c.value.charAt(0)==="&")return new e.Element(c,null,f)},combinator:function(){var a,c=b.charAt(f);if(c===">"||c==="+"||c==="~"){f++;while(b.charAt(f)===" ")f++;return new e.Combinator(c)}if(c==="&"){a="&",f++,b.charAt(f)===" "&&(a="& ");while(b.charAt(f)===" ")f++;return new e.Combinator(a)}return b.charAt(f-1)===" "?new e.Combinator(" "):new e.Combinator(null)},selector:function(){var a,c,d=[],g,h;if(t("("))return a=t(this.entity),u(")"),new e.Selector([new e.Element("",a,f)]);while(c=t(this.element)){g=b.charAt(f),d.push(c);if(g==="{"||g==="}"||g===";"||g===",")break}if(d.length>0)return new e.Selector(d)},tag:function(){return t(/^[a-zA-Z][a-zA-Z-]*[0-9]?/)||t("*")},attribute:function(){var a="",b,c,d;if(!t("["))return;if(b=t(/^[a-zA-Z-]+/)||t(this.entities.quoted))(d=t(/^[|~*$^]?=/))&&(c=t(this.entities.quoted)||t(/^[\w-]+/))?a=[b,d,c.toCSS?c.toCSS():c].join(""):a=b;if(!t("]"))return;if(a)return"["+a+"]"},block:function(){var a;if(t("{")&&(a=t(this.primary))&&t("}"))return a},ruleset:function(){var b=[],c,d,g;q();while(c=t(this.selector)){b.push(c),t(this.comment);if(!t(","))break;t(this.comment)}if(b.length>0&&(d=t(this.block)))return new e.Ruleset(b,d,a.strictImports);j=f,r()},rule:function(){var a,c,d=b.charAt(f),h,l;q();if(d==="."||d==="#"||d==="&")return;if(a=t(this.variable)||t(this.property)){a.charAt(0)!="@"&&(l=/^([^@+\/'"*`(;{}-]*);/.exec(k[g]))?(f+=l[0].length-1,c=new e.Anonymous(l[1])):a==="font"?c=t(this.font):c=t(this.value),h=t(this.important);if(c&&t(this.end))return new e.Rule(a,c,h,i);j=f,r()}},"import":function(){var a,b,c=f;if(t(/^@import\s+/)&&(a=t(this.entities.quoted)||t(this.entities.url))){b=t(this.mediaFeatures);if(t(";"))return new e.Import(a,p,b,c)}},mediaFeature:function(){var a,b,c=[];do if(a=t(this.entities.keyword))c.push(a);else if(t("(")){b=t(this.property),a=t(this.entity);if(!t(")"))return null;if(b&&a)c.push(new e.Paren(new e.Rule(b,a,null,f,!0)));else if(a)c.push(new e.Paren(a));else return null}while(a);if(c.length>0)return new e.Expression(c)},mediaFeatures:function(){var a,b=[];do if(a=t(this.mediaFeature)){b.push(a);if(!t(","))break}else if(a=t(this.entities.variable)){b.push(a);if(!t(","))break}while(a);return b.length>0?b:null},media:function(){var a,b;if(t(/^@media/)){a=t(this.mediaFeatures);if(b=t(this.block))return new e.Media(b,a)}},directive:function(){var a,c,d,g,h,i;if(b.charAt(f)!=="@")return;if(c=t(this["import"])||t(this.media))return c;if(a=t(/^@page|@keyframes/)||t(/^@(?:-webkit-|-moz-|-o-|-ms-)[a-z0-9-]+/)){g=(t(/^[^{]+/)||"").trim();if(d=t(this.block))return new e.Directive(a+" "+g,d)}else if(a=t(/^@[-a-z]+/))if(a==="@font-face"){if(d=t(this.block))return new e.Directive(a,d)}else if((c=t(this.entity))&&t(";"))return new e.Directive(a,c)},font:function(){var a=[],b=[],c,d,f,g;while(g=t(this.shorthand)||t(this.entity))b.push(g);a.push(new e.Expression(b));if(t(","))while(g=t(this.expression)){a.push(g);if(!t(","))break}return new e.Value(a)},value:function(){var a,b=[],c;while(a=t(this.expression)){b.push(a);if(!t(","))break}if(b.length>0)return new e.Value(b)},important:function(){if(b.charAt(f)==="!")return t(/^! *important/)},sub:function(){var a;if(t("(")&&(a=t(this.expression))&&t(")"))return a},multiplication:function(){var a,b,c,d;if(a=t(this.operand)){while(!w(/^\/\*/)&&(c=t("/")||t("*"))&&(b=t(this.operand)))d=new e.Operation(c,[d||a,b]);return d||a}},addition:function(){var a,c,d,g;if(a=t(this.multiplication)){while((d=t(/^[-+]\s+/)||b.charAt(f-1)!=" "&&(t("+")||t("-")))&&(c=t(this.multiplication)))g=new e.Operation(d,[g||a,c]);return g||a}},conditions:function(){var a,b,c=f,d;if(a=t(this.condition)){while(t(",")&&(b=t(this.condition)))d=new e.Condition("or",d||a,b,c);return d||a}},condition:function(){var a,b,c,d,g=f,h=!1;t(/^not/)&&(h=!0),u("(");if(a=t(this.addition)||t(this.entities.keyword)||t(this.entities.quoted))return(d=t(/^(?:>=|=<|[<=>])/))?(b=t(this.addition)||t(this.entities.keyword)||t(this.entities.quoted))?c=new e.Condition(d,a,b,g,h):v("expected expression"):c=new e.Condition("=",a,new e.Keyword("true"),g,h),u(")"),t(/^and/)?new e.Condition("and",c,t(this.condition)):c},operand:function(){var a,c=b.charAt(f+1);b.charAt(f)==="-"&&(c==="@"||c==="(")&&(a=t("-"));var d=t(this.sub)||t(this.entities.dimension)||t(this.entities.color)||t(this.entities.variable)||t(this.entities.call);return a?new e.Operation("*",[new e.Dimension(-1),d]):d},expression:function(){var a,b,c=[],d;while(a=t(this.addition)||t(this.entity))c.push(a);if(c.length>0)return new e.Expression(c)},property:function(){var a;if(a=t(/^(\*?-?[-a-z_0-9]+)\s*:/))return a[1]}}}};if(d.mode==="browser"||d.mode==="rhino")d.Parser.importer=function(a,b,c,d){!/^([a-z]+:)?\//.test(a)&&b.length>0&&(a=b[0]+a),n({href:a,title:a,type:d.mime},function(e){e&&typeof d.errback=="function"?d.errback.call(null,a,b,c,d):c.apply(null,arguments)},!0)};(function(a){function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}function c(b){if(b instanceof a.Dimension)return parseFloat(b.unit=="%"?b.value/100:b.value);if(typeof b=="number")return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function d(a){return Math.min(1,Math.max(0,a))}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,d,e,f){var g=[b,d,e].map(function(a){return c(a)}),f=c(f);return new a.Color(g,f)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,d,e){function h(a){return a=a<0?a+1:a>1?a-1:a,a*6<1?g+(f-g)*a*6:a*2<1?f:a*3<2?g+(f-g)*(2/3-a)*6:g}a=c(a)%360/360,b=c(b),d=c(d),e=c(e);var f=d<=.5?d*(b+1):d+b-d*b,g=d*2-f;return this.rgba(h(a+1/3)*255,h(a)*255,h(a-1/3)*255,e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(b.toHSL().s*100),"%")},lightness:function(b){return new a.Dimension(Math.round(b.toHSL().l*100),"%")},alpha:function(b){return new a.Dimension(b.toHSL().a)},saturate:function(a,c){var e=a.toHSL();return e.s+=c.value/100,e.s=d(e.s),b(e)},desaturate:function(a,c){var e=a.toHSL();return e.s-=c.value/100,e.s=d(e.s),b(e)},lighten:function(a,c){var e=a.toHSL();return e.l+=c.value/100,e.l=d(e.l),b(e)},darken:function(a,c){var e=a.toHSL();return e.l-=c.value/100,e.l=d(e.l),b(e)},fadein:function(a,c){var e=a.toHSL();return e.a+=c.value/100,e.a=d(e.a),b(e)},fadeout:function(a,c){var e=a.toHSL();return e.a-=c.value/100,e.a=d(e.a),b(e)},fade:function(a,c){var e=a.toHSL();return e.a=c.value/100,e.a=d(e.a),b(e)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;return d.h=e<0?360+e:e,b(d)},mix:function(b,c,d){var e=d.value/100,f=e*2-1,g=b.toHSL().a-c.toHSL().a,h=((f*g==-1?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},e:function(b){return new a.Anonymous(b instanceof a.JavaScript?b.evaluated:b)},escape:function(b){return new a.Anonymous(encodeURI(b.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},"%":function(b){var c=Array.prototype.slice.call(arguments,1),d=b.value;for(var e=0;e<c.length;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});return d=d.replace(/%%/g,"%"),new a.Quoted('"'+d+'"',d)},round:function(a){return this._math("round",a)},ceil:function(a){return this._math("ceil",a)},floor:function(a){return this._math("floor",a)},_math:function(b,d){if(d instanceof a.Dimension)return new a.Dimension(Math[b](c(d)),d.unit);if(typeof d=="number")return Math[b](d);throw{type:"Argument",message:"argument must be a number"}},argb:function(b){return new a.Anonymous(b.toARGB())},percentage:function(b){return new a.Dimension(b.value*100,"%")},color:function(b){if(b instanceof a.Quoted)return new a.Color(b.value.slice(1));throw{type:"Argument",message:"argument must be a string"}},iscolor:function(b){return this._isa(b,a.Color)},isnumber:function(b){return this._isa(b,a.Dimension)},isstring:function(b){return this._isa(b,a.Quoted)},iskeyword:function(b){return this._isa(b,a.Keyword)},isurl:function(b){return this._isa(b,a.URL)},ispixel:function(b){return b instanceof a.Dimension&&b.unit==="px"?a.True:a.False},ispercentage:function(b){return b instanceof a.Dimension&&b.unit==="%"?a.True:a.False},isem:function(b){return b instanceof a.Dimension&&b.unit==="em"?a.True:a.False},_isa:function(b,c){return b instanceof c?a.True:a.False}}})(c("./tree")),function(a){a.colors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}}(c("./tree")),function(a){a.Alpha=function(a){this.value=a},a.Alpha.prototype={toCSS:function(){return"alpha(opacity="+(this.value.toCSS?this.value.toCSS():this.value)+")"},eval:function(a){return this.value.eval&&(this.value=this.value.eval(a)),this}}}(c("../tree")),function(a){a.Anonymous=function(a){this.value=a.value||a},a.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this}}}(c("../tree")),function(a){a.Assignment=function(a,b){this.key=a,this.value=b},a.Assignment.prototype={toCSS:function(){return this.key+"="+(this.value.toCSS?this.value.toCSS():this.value)},eval:function(a){return this.value.eval&&(this.value=this.value.eval(a)),this}}}(c("../tree")),function(a){a.Call=function(a,b,c,d){this.name=a,this.args=b,this.index=c,this.filename=d},a.Call.prototype={eval:function(b){var c=this.args.map(function(a){return a.eval(b)});if(!(this.name in a.functions))return new a.Anonymous(this.name+"("+c.map(function(a){return a.toCSS()}).join(", ")+")");try{return a.functions[this.name].apply(a.functions,c)}catch(d){throw{type:d.type||"Runtime",message:"error evaluating function `"+this.name+"`"+(d.message?": "+d.message:""),index:this.index,filename:this.filename}}},toCSS:function(a){return this.eval(a).toCSS()}}}(c("../tree")),function(a){a.Color=function(a,b){Array.isArray(a)?this.rgb=a:a.length==6?this.rgb=a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):this.rgb=a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha=typeof b=="number"?b:1},a.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?"rgba("+this.rgb.map(function(a){return Math.round(a)}).concat(this.alpha).join(", ")+")":"#"+this.rgb.map(function(a){return a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16),a.length===1?"0"+a:a}).join("")},operate:function(b,c){var d=[];c instanceof a.Color||(c=c.toColor());for(var e=0;e<3;e++)d[e]=a.operate(b,this.rgb[e],c.rgb[e]);return new a.Color(d,this.alpha+c.alpha)},toHSL:function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255,d=this.alpha,e=Math.max(a,b,c),f=Math.min(a,b,c),g,h,i=(e+f)/2,j=e-f;if(e===f)g=h=0;else{h=i>.5?j/(2-e-f):j/(e+f);switch(e){case a:g=(b-c)/j+(b<c?6:0);break;case b:g=(c-a)/j+2;break;case c:g=(a-b)/j+4}g/=6}return{h:g*360,s:h,l:i,a:d}},toARGB:function(){var a=[Math.round(this.alpha*255)].concat(this.rgb);return"#"+a.map(function(a){return a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16),a.length===1?"0"+a:a}).join("")}}}(c("../tree")),function(a){a.Comment=function(a,b){this.value=a,this.silent=!!b},a.Comment.prototype={toCSS:function(a){return a.compress?"":this.value},eval:function(){return this}}}(c("../tree")),function(a){a.Condition=function(a,b,c,d,e){this.op=a.trim(),this.lvalue=b,this.rvalue=c,this.index=d,this.negate=e},a.Condition.prototype.eval=function(a){var b=this.lvalue.eval(a),c=this.rvalue.eval(a),d=this.index,e,e=function(a){switch(a){case"and":return b&&c;case"or":return b||c;default:if(b.compare)e=b.compare(c);else if(c.compare)e=c.compare(b);else throw{type:"Type",message:"Unable to perform comparison",index:d};switch(e){case-1:return a==="<"||a==="=<";case 0:return a==="="||a===">="||a==="=<";case 1:return a===">"||a===">="}}}(this.op);return this.negate?!e:e}}(c("../tree")),function(a){a.Dimension=function(a,b){this.value=parseFloat(a),this.unit=b||null},a.Dimension.prototype={eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},toCSS:function(){var a=this.value+this.unit;return a},operate:function(b,c){return new a.Dimension(a.operate(b,this.value,c.value),this.unit||c.unit)},compare:function(b){return b instanceof a.Dimension?b.value>this.value?-1:b.value<this.value?1:0:-1}}}(c("../tree")),function(a){a.Directive=function(b,c,d){this.name=b,Array.isArray(c)?(this.ruleset=new a.Ruleset([],c),this.ruleset.allowImports=!0):this.value=c},a.Directive.prototype={toCSS:function(a,b){return this.ruleset?(this.ruleset.root=!0,this.name+(b.compress?"{":" {\n  ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n  ")+(b.compress?"}":"\n}\n")):this.name+" "+this.value.toCSS()+";\n"},eval:function(a){return a.frames.unshift(this),this.ruleset=this.ruleset&&this.ruleset.eval(a),a.frames.shift(),this},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(c("../tree")),function(a){a.Element=function(b,c,d){this.combinator=b instanceof a.Combinator?b:new a.Combinator(b),typeof c=="string"?this.value=c.trim():c?this.value=c:this.value="",this.index=d},a.Element.prototype.eval=function(b){return new a.Element(this.combinator,this.value.eval?this.value.eval(b):this.value,this.index)},a.Element.prototype.toCSS=function(a){return this.combinator.toCSS(a||{})+(this.value.toCSS?this.value.toCSS(a):this.value)},a.Combinator=function(a){a===" "?this.value=" ":a==="& "?this.value="& ":this.value=a?a.trim():""},a.Combinator.prototype.toCSS=function(a){return{"":""," ":" ","&":"","& ":" ",":":" :","+":a.compress?"+":" + ","~":a.compress?"~":" ~ ",">":a.compress?">":" > "}[this.value]}}(c("../tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={eval:function(b){return this.value.length>1?new a.Expression(this.value.map(function(a){return a.eval(b)})):this.value.length===1?this.value[0].eval(b):this},toCSS:function(a){return this.value.map(function(b){return b.toCSS?b.toCSS(a):""}).join(" ")}}}(c("../tree")),function(a){a.Import=function(b,c,d,e){var f=this;this.index=e,this._path=b,this.features=d&&new a.Value(d),b instanceof a.Quoted?this.path=/\.(le?|c)ss(\?.*)?$/.test(b.value)?b.value:b.value+".less":this.path=b.value.value||b.value,this.css=/css(\?.*)?$/.test(this.path),this.css||c.push(this.path,function(b,c){b&&(b.index=e),f.root=c||new a.Ruleset([],[])})},a.Import.prototype={toCSS:function(a){var b=this.features?" "+this.features.toCSS(a):"";return this.css?"@import "+this._path.toCSS()+b+";\n":""},eval:function(b){var c,d=this.features&&this.features.eval(b);if(this.css)return this;c=new a.Ruleset([],this.root.rules.slice(0));for(var e=0;e<c.rules.length;e++)c.rules[e]instanceof a.Import&&Array.prototype
.splice.apply(c.rules,[e,1].concat(c.rules[e].eval(b)));return this.features?new a.Media(c.rules,this.features.value):c.rules}}}(c("../tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify((new a.Variable("@"+e,d.index)).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: `"+f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return typeof c=="string"?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(c("../tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value},compare:function(b){return b instanceof a.Keyword?b.value===this.value?0:1:-1}},a.True=new a.Keyword("true"),a.False=new a.Keyword("false")}(c("../tree")),function(a){a.Media=function(b,c){var d=new a.Element("&",null,0),e=[new a.Selector([d])];this.features=new a.Value(c),this.ruleset=new a.Ruleset(e,b),this.ruleset.allowImports=!0},a.Media.prototype={toCSS:function(a,b){var c=this.features.toCSS(b);return this.ruleset.root=a.length===0||a[0].multiMedia,"@media "+c+(b.compress?"{":" {\n  ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n  ")+(b.compress?"}":"\n}\n")},eval:function(b){b.mediaBlocks||(b.mediaBlocks=[],b.mediaPath=[]);var c=b.mediaBlocks.length;b.mediaPath.push(this),b.mediaBlocks.push(this);var d=new a.Media([],[]);return d.features=this.features.eval(b),b.frames.unshift(this.ruleset),d.ruleset=this.ruleset.eval(b),b.frames.shift(),b.mediaBlocks[c]=d,b.mediaPath.pop(),b.mediaPath.length===0?d.evalTop(b):d.evalNested(b)},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)},evalTop:function(b){var c=this;if(b.mediaBlocks.length>1){var d=new a.Element("&",null,0),e=[new a.Selector([d])];c=new a.Ruleset(e,b.mediaBlocks),c.multiMedia=!0}return delete b.mediaBlocks,delete b.mediaPath,c},evalNested:function(b){var c,d,e=b.mediaPath.concat([this]);for(c=0;c<e.length;c++)d=e[c].features instanceof a.Value?e[c].features.value:e[c].features,e[c]=Array.isArray(d)?d:[d];return this.features=new a.Value(this.permute(e).map(function(b){b=b.map(function(b){return b.toCSS?b:new a.Anonymous(b)});for(c=b.length-1;c>0;c--)b.splice(c,0,new a.Anonymous("and"));return new a.Expression(b)})),new a.Ruleset([],[])},permute:function(a){if(a.length===0)return[];if(a.length===1)return a[0];var b=[],c=this.permute(a.slice(1));for(var d=0;d<c.length;d++)for(var e=0;e<a[0].length;e++)b.push([a[0][e]].concat(c[d]));return b}}}(c("../tree")),function(a){a.mixin={},a.mixin.Call=function(b,c,d,e,f){this.selector=new a.Selector(b),this.arguments=c,this.index=d,this.filename=e,this.important=f},a.mixin.Call.prototype={eval:function(a){var b,c,d=[],e=!1;for(var f=0;f<a.frames.length;f++)if((b=a.frames[f].find(this.selector)).length>0){c=this.arguments&&this.arguments.map(function(b){return b.eval(a)});for(var g=0;g<b.length;g++)if(b[g].match(c,a))try{Array.prototype.push.apply(d,b[g].eval(a,this.arguments,this.important).rules),e=!0}catch(h){throw{message:h.message,index:this.index,filename:this.filename,stack:h.stack}}if(e)return d;throw{type:"Runtime",message:"No matching definition was found for `"+this.selector.toCSS().trim()+"("+this.arguments.map(function(a){return a.toCSS()}).join(", ")+")`",index:this.index,filename:this.filename}}throw{type:"Name",message:this.selector.toCSS().trim()+" is undefined",index:this.index,filename:this.filename}}},a.mixin.Definition=function(b,c,d,e,f){this.name=b,this.selectors=[new a.Selector([new a.Element(null,b)])],this.params=c,this.condition=e,this.variadic=f,this.arity=c.length,this.rules=d,this._lookups={},this.required=c.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.parent=a.Ruleset.prototype,this.frames=[]},a.mixin.Definition.prototype={toCSS:function(){return""},variable:function(a){return this.parent.variable.call(this,a)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},evalParams:function(b,c){var d=new a.Ruleset(null,[]),e;for(var f=0,g,h;f<this.params.length;f++)if(h=this.params[f].name)if(this.params[f].variadic&&c){e=[];for(var i=f;i<c.length;i++)e.push(c[i].eval(b));d.rules.unshift(new a.Rule(h,(new a.Expression(e)).eval(b)))}else if(g=c&&c[f]||this.params[f].value)d.rules.unshift(new a.Rule(h,g.eval(b)));else throw{type:"Runtime",message:"wrong number of arguments for "+this.name+" ("+c.length+" for "+this.arity+")"};return d},eval:function(b,c,d){var e=this.evalParams(b,c),f,g=[],h,i;for(var j=0;j<Math.max(this.params.length,c&&c.length);j++)g.push(c[j]||this.params[j].value);return e.rules.unshift(new a.Rule("@arguments",(new a.Expression(g)).eval(b))),h=d?this.rules.map(function(b){return new a.Rule(b.name,b.value,"!important",b.index)}):this.rules.slice(0),(new a.Ruleset(null,h)).eval({frames:[this,e].concat(this.frames,b.frames)})},match:function(a,b){var c=a&&a.length||0,d,e;if(!this.variadic){if(c<this.required)return!1;if(c>this.params.length)return!1;if(this.required>0&&c>this.params.length)return!1}if(this.condition&&!this.condition.eval({frames:[this.evalParams(b,a)].concat(b.frames)}))return!1;d=Math.min(c,this.arity);for(var f=0;f<d;f++)if(!this.params[f].name&&a[f].eval(b).toCSS()!=this.params[f].value.eval(b).toCSS())return!1;return!0}}}(c("../tree")),function(a){a.Operation=function(a,b){this.op=a.trim(),this.operands=b},a.Operation.prototype.eval=function(b){var c=this.operands[0].eval(b),d=this.operands[1].eval(b),e;if(c instanceof a.Dimension&&d instanceof a.Color)if(this.op==="*"||this.op==="+")e=d,d=c,c=e;else throw{name:"OperationError",message:"Can't substract or divide a color from a number"};return c.operate(this.op,d)},a.operate=function(a,b,c){switch(a){case"+":return b+c;case"-":return b-c;case"*":return b*c;case"/":return b/c}}}(c("../tree")),function(a){a.Paren=function(a){this.value=a},a.Paren.prototype={toCSS:function(a){return"("+this.value.toCSS(a)+")"},eval:function(b){return new a.Paren(this.value.eval(b))}}}(c("../tree")),function(a){a.Quoted=function(a,b,c,d){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d},a.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return(new a.JavaScript(e,c.index,!0)).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=(new a.Variable("@"+e,c.index)).eval(b);return"value"in f?f.value:f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index)}}}(c("../tree")),function(a){a.Rule=function(b,c,d,e,f){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.index=e,this.inline=f||!1,b.charAt(0)==="@"?this.variable=!0:this.variable=!1},a.Rule.prototype.toCSS=function(a){return this.variable?"":this.name+(a.compress?":":": ")+this.value.toCSS(a)+this.important+(this.inline?"":";")},a.Rule.prototype.eval=function(b){return new a.Rule(this.name,this.value.eval(b),this.important,this.index,this.inline)},a.Shorthand=function(a,b){this.a=a,this.b=b},a.Shorthand.prototype={toCSS:function(a){return this.a.toCSS(a)+"/"+this.b.toCSS(a)},eval:function(){return this}}}(c("../tree")),function(a){a.Ruleset=function(a,b,c){this.selectors=a,this.rules=b,this._lookups={},this.strictImports=c},a.Ruleset.prototype={eval:function(b){var c=this.selectors&&this.selectors.map(function(a){return a.eval(b)}),d=new a.Ruleset(c,this.rules.slice(0),this.strictImports);d.root=this.root,d.allowImports=this.allowImports,b.frames.unshift(d);if(d.root||d.allowImports||!d.strictImports)for(var e=0;e<d.rules.length;e++)d.rules[e]instanceof a.Import&&Array.prototype.splice.apply(d.rules,[e,1].concat(d.rules[e].eval(b)));for(var e=0;e<d.rules.length;e++)d.rules[e]instanceof a.mixin.Definition&&(d.rules[e].frames=b.frames.slice(0));for(var e=0;e<d.rules.length;e++)d.rules[e]instanceof a.mixin.Call&&Array.prototype.splice.apply(d.rules,[e,1].concat(d.rules[e].eval(b)));for(var e=0,f;e<d.rules.length;e++)f=d.rules[e],f instanceof a.mixin.Definition||(d.rules[e]=f.eval?f.eval(b):f);return b.frames.shift(),d},match:function(a){return!a||a.length===0},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(b,c){return c instanceof a.Rule&&c.variable===!0&&(b[c.name]=c),b},{})},variable:function(a){return this.variables()[a]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(b){return b instanceof a.Ruleset||b instanceof a.mixin.Definition})},find:function(b,c){c=c||this;var d=[],e,f,g=b.toCSS();return g in this._lookups?this._lookups[g]:(this.rulesets().forEach(function(e){if(e!==c)for(var g=0;g<e.selectors.length;g++)if(f=b.match(e.selectors[g])){b.elements.length>e.selectors[g].elements.length?Array.prototype.push.apply(d,e.find(new a.Selector(b.elements.slice(1)),c)):d.push(e);break}}),this._lookups[g]=d)},toCSS:function(b,c){var d=[],e=[],f=[],g=[],h,i;this.root||(b.length===0?g=this.selectors.map(function(a){return[a]}):this.joinSelectors(g,b,this.selectors));for(var j=0;j<this.rules.length;j++)i=this.rules[j],i.rules||i instanceof a.Directive||i instanceof a.Media?f.push(i.toCSS(g,c)):i instanceof a.Comment?i.silent||(this.root?f.push(i.toCSS(c)):e.push(i.toCSS(c))):i.toCSS&&!i.variable?e.push(i.toCSS(c)):i.value&&!i.variable&&e.push(i.value.toString());return f=f.join(""),this.root?d.push(e.join(c.compress?"":"\n")):e.length>0&&(h=g.map(function(a){return a.map(function(a){return a.toCSS(c)}).join("").trim()}).join(c.compress?",":",\n"),d.push(h,(c.compress?"{":" {\n  ")+e.join(c.compress?"":"\n  ")+(c.compress?"}":"\n}\n"))),d.push(f),d.join("")+(c.compress?"\n":"")},joinSelectors:function(a,b,c){for(var d=0;d<c.length;d++)this.joinSelector(a,b,c[d])},joinSelector:function(b,c,d){var e=[],f=[],g=[],h=[],i=!1,j;for(var k=0;k<d.elements.length;k++)j=d.elements[k],j.combinator.value.charAt(0)==="&"&&(i=!0),i?h.push(j):g.push(j);i||(h=g,g=[]),g.length>0&&e.push(new a.Selector(g)),h.length>0&&f.push(new a.Selector(h));for(var l=0;l<c.length;l++)b.push(e.concat(c[l]).concat(f))}}}(c("../tree")),function(a){a.Selector=function(a){this.elements=a,this.elements[0].combinator.value===""&&(this.elements[0].combinator.value=" ")},a.Selector.prototype.match=function(a){var b=this.elements.length,c=a.elements.length,d=Math.min(b,c);if(b<c)return!1;for(var e=0;e<d;e++)if(this.elements[e].value!==a.elements[e].value)return!1;return!0},a.Selector.prototype.eval=function(b){return new a.Selector(this.elements.map(function(a){return a.eval(b)}))},a.Selector.prototype.toCSS=function(a){return this._css?this._css:this._css=this.elements.map(function(b){return typeof b=="string"?" "+b.trim():b.toCSS(a)}).join("")}}(c("../tree")),function(b){b.URL=function(b,c){b.data?this.attrs=b:(typeof a!="undefined"&&!/^(?:https?:\/\/|file:\/\/|data:|\/)/.test(b.value)&&c.length>0&&(b.value=c[0]+(b.value.charAt(0)==="/"?b.value.slice(1):b.value)),this.value=b,this.paths=c)},b.URL.prototype={toCSS:function(){return"url("+(this.attrs?"data:"+this.attrs.mime+this.attrs.charset+this.attrs.base64+this.attrs.data:this.value.toCSS())+")"},eval:function(a){return this.attrs?this:new b.URL(this.value.eval(a),this.paths)}}}(c("../tree")),function(a){a.Value=function(a){this.value=a,this.is="value"},a.Value.prototype={eval:function(b){return this.value.length===1?this.value[0].eval(b):new a.Value(this.value.map(function(a){return a.eval(b)}))},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(a.compress?",":", ")}}}(c("../tree")),function(a){a.Variable=function(a,b,c){this.name=a,this.index=b,this.file=c},a.Variable.prototype={eval:function(b){var c,d,e=this.name;e.indexOf("@@")==0&&(e="@"+(new a.Variable(e.slice(1))).eval(b).value);if(c=a.find(b.frames,function(a){if(d=a.variable(e))return d.value.eval(b)}))return c;throw{type:"Name",message:"variable "+e+" is undefined",filename:this.file,index:this.index}}}}(c("../tree")),function(a){a.find=function(a,b){for(var c=0,d;c<a.length;c++)if(d=b.call(a,a[c]))return d;return null},a.jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)}}(c("./tree"));var f=location.protocol==="file:"||location.protocol==="chrome:"||location.protocol==="chrome-extension:"||location.protocol==="resource:";d.env=d.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||f?"development":"production"),d.async=!1,d.poll=d.poll||(f?1e3:1500),d.watch=function(){return this.watchMode=!0},d.unwatch=function(){return this.watchMode=!1},d.env==="development"?(d.optimization=0,/!watch/.test(location.hash)&&d.watch(),d.watchTimer=setInterval(function(){d.watchMode&&m(function(a,b,c,d,e){b&&p(b.toCSS(),d,e.lastModified)})},d.poll)):d.optimization=3;var g;try{g=typeof a.localStorage=="undefined"?null:a.localStorage}catch(h){g=null}var i=document.getElementsByTagName("link"),j=/^text\/(x-)?less$/;d.sheets=[];for(var k=0;k<i.length;k++)(i[k].rel==="stylesheet/less"||i[k].rel.match(/stylesheet/)&&i[k].type.match(j))&&d.sheets.push(i[k]);d.refresh=function(a){var b,c;b=c=new Date,m(function(a,d,e,f,g){g.local?t("loading "+f.href+" from cache."):(t("parsed "+f.href+" successfully."),p(d.toCSS(),f,g.lastModified)),t("css for "+f.href+" generated in "+(new Date-c)+"ms"),g.remaining===0&&t("css generated in "+(new Date-b)+"ms"),c=new Date},a),l()},d.refreshStyles=l,d.refresh(d.env==="development")})(window);
var trackingKey = 'utm_source'; //key of the tracking parameter
var trackingValue = "criteo"; // value of the tracking parameter
var cookie = "crtg_dd"; // cookie name where the dd value will be stored
var days = 60; // cookie life time in days

cr_readTracking(trackingKey, trackingValue); // call the function to create/update cookie with deduplication value
cr_getCookie("crtg_dd"); // call the function to return deduplication value, see callTransactionCode for possible usage example

// Scan the value of the URL parameters followed by ? sign. Create/update the cookie if parameter string contains trackingKey value only
// Set cookie value to 1 if the value of trackingKey = trackingValue, set the value to 0 if trackingKey != trackingValue
// This function uses cr_createCookie function
function cr_readTracking(key, value) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == key) {
            if (pair[1] == value) {
                cr_createCookie(cookie, 1, days);
            } else {
                cr_createCookie(cookie, 0, days);
            }
        }
    }
};

// Creating or updating cookie by recreating it
function cr_createCookie(cookie, value, days) {
    var d = new Date();
    d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();

    // Declare at the top of the script, the value of the domain including the sub-domains with the dot
    var cookieDomain = '.safarinow.com';

    // in function cr_createCookie, include the domain declared before
    document.cookie = cookie + "=" + value + "; " + expires + "; domain=" + cookieDomain + "; path=/";
};

// Read the value of the cookie and return the value. In case the cookie is not found, return default value "0"
function cr_getCookie(c_name) {
    var i, x, y, ARRCookies = document.cookie.split(";");
    for (i = 0; i < ARRCookies.length; i++) {
        x = ARRCookies[i].substr(0, ARRCookies[i].indexOf("="));
        y = ARRCookies[i].substr(ARRCookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
    return "0";
}

function cr_getSiteType() {
    if ((navigator.userAgent.match(/Mobile/i) && navigator.userAgent.match(/Android/i)) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/webOS/i)) {
        return "m";
    } else if (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/PlayBook/i) || (navigator.userAgent.match(/Android/i) && !navigator.userAgent.match(/Mobile/i))) {
        return "t";
    } else {
        return "d";
    }
}
/** * HTML5 Placeholder Text jQuery Fallback with Modernizr * * @url http://ravennainteractive.com/2012/04/html5-input-placeholders-fallback/ */

jQuery(function () {
    createPlaceHolders(this);
});

function createPlaceHolders(wrapperEl) {
    if (!Modernizr.input.placeholder) {
        jQuery(wrapperEl).find('[placeholder]').each(function () {
            if (jQuery(this).val() == '') {
                jQuery(this).val(jQuery(this).attr('placeholder'));
            }
        });
        // focus and blur of placeholders 
        jQuery('[placeholder]').focus(function () {
            if (jQuery(this).val() == jQuery(this).attr('placeholder')) {
                jQuery(this).val('');
                jQuery(this).removeClass('placeholder');
            }
        }).blur(function () {
            if (jQuery(this).val() == '' || jQuery(this).val() == jQuery(this).attr('placeholder')) {
                jQuery(this).val(jQuery(this).attr('placeholder'));
                jQuery(this).addClass('placeholder');
            }
        });
        // remove placeholders on submit 
        jQuery('[placeholder]').closest('form').submit(function () {
            clearPlaceHolders(this);
        });
    }
}

function clearPlaceHolders(wrapperEl) {
    if (!Modernizr.input.placeholder) {
        jQuery(wrapperEl).find('[placeholder]').each(function () {
            if (jQuery(this).val() == jQuery(this).attr('placeholder')) {
                jQuery(this).val('');
            }
        });
    }
}
var currentMonth = -1;
var unavailableDates = "";
var availabilityDatePicker = false;
var availabilityDatePickerClass = "";
var datePickerDateFormat = "dd M yy", dateFrom = "", dateTo = "";

// leave this outside documentready:

$(document).on("click", ".barOne .right > span", function () {
    var c = $(this).parent().attr('class'),
        d = c.split("right ")[1];

    $(this).parent().find("ul").toggle();

    var s = ".barOne div.right:not(." + d + ") ul";
    $(s).hide().parent().removeClass('active');
    return false;
});

$(document).click(function () {
    $(".barOne .right ul").hide().parent().removeClass('active');
});

// end - leave this outside documentready:


$(function () {

    var drContext = $(".edit-special,.BillboardForm"), dr = null;
    if (drContext.length > 0) {
        dr = $(".checkin,.checkout", drContext);
        dr.dateRange({
            showAvailability: false,
            onClose: function (fromTo, date, changed) {
                showNights();
                var dates = $("#hfDates");
                if (dates.length > 0) {
                    dates.val(dr.eq(0).datepicker("getDate").valueOf().toString() + "," + dr.eq(1).datepicker("getDate").valueOf().toString());
                }
            }
        });

        showNights();
    }

    function showNights() {
        var nights = dr.dateRange("getNights");
        if (nights > 0) {
            var nightsString = dr.dateRange("getNights", "string");
            $(".nights", drContext).text(nightsString);
        }
    }

    initDatePickers();
    initAvailabilityDatePickers();

    // top right search on each page
    var _mainSearchBox = $("div.header .txtSearch");
    if (_mainSearchBox.length > 0) {
        registerAutoComplete(_mainSearchBox, {
            trackWindowResize: true,
            position: {
                offset: "-10 -0"
            }
            ,
            onSearchStart: function () {
                $("#pnlSearch").parent().children("img.main-search-prog").fadeIn('fast');
            },
            onSearchEnd: function () {
                $("#pnlSearch").parent().children("img.main-search-prog").hide();
            },
            onFocus: function (item) { return false; },
            onSelect: function (item) {
                //_mainSearchBox.val(item.actual);
                $("#pnlSearch input.hdnMasterUrl").val(item.actual);
                window.location = 'http://' + document.domain + item.value;
                return false;
            }
        });
    }
});


function initDatePickers() {
    var dp = $(".uiDatePicker");
    if (dp.length > 0) {
        dp.datepicker({ dateFormat: datePickerDateFormat });
    }

    var homePageSrch = $(".HomePageSearch"), homeDates = homePageSrch.find(".ui-date-picker");
    if (homeDates.length > 0) {
        $([]).add(homeDates.filter(".checkin")).add(homeDates.filter(".checkout")).dateRange({
            showAvailability: false,
            triggers: [{ from: homePageSrch.find(".checkin .icon-calendar") }, { to: homePageSrch.find(".checkout .icon-calendar") }]
        });
    }

    var dpRange = $(".uiDatePickerFromToFrom,.uiDatePickerFromToTo");
    if (dpRange.length > 0) {
        dpRange.datepicker({
            minDate: new Date(),
            dateFormat: datePickerDateFormat,
            showOtherMonths: true,
            selectOtherMonths: true,
            onSelect: function (selectedDate) {
                var tempDate = $(this).datepicker('getDate'), type = $(this).data('datepickertype'), changed = false;
                $(".CheckAvailability input:eq(0)").pop("hide");
                if ($(this).hasClass("uiDatePickerFromToFrom")) {
                    if (tempDate) {
                        tempDate.setDate(tempDate.getDate() + 1);
                        if (type == "ezone-seasons") {
                            //this is to ensure setting only the appropriate end date to 1 day after start date
                            //instead of all end dates as per else statement (preserved as is to reduce impact on existing pages)
                            $(this).parent().parent().find('.uiDatePickerFromToTo').datepicker("option", "minDate", tempDate);
                        } else {
                            $(".uiDatePickerFromToTo").datepicker("option", "minDate", tempDate);
                        }
                        $("#checkAvailabilityButton").removeClass('GreyMdmDis').addClass('GreenMdm');
                    }

                    if (type == "inlineEnquiry") {
                        $InlineEnquiry.ValidateCheckin();
                    }
                    changed = selectedDate != dateFrom;
                    dateFrom = selectedDate;
                } else {
                    //From date change
                    if (tempDate) {
                        tempDate.setDate(tempDate.getDate() - 1);
                        $("#checkAvailabilityButton").removeClass('GreyMdmDis').addClass('GreenMdm');
                    }

                    if (type == "inlineEnquiry") {
                        $InlineEnquiry.ValidateCheckout();
                    }
                    changed = selectedDate != dateTo;
                    dateTo = selectedDate;
                }
                $(this).data("date-changed", changed);
            },
            beforeShow: function (mydate) {
                availabilityDatePicker = false;
                console.log("(Common) 143" + mydate);
                insertClearDates(mydate);
            },
            onClose: function (dateText, inst) {
                var type = $(this).data('datepickertype'),
                    isFrom = $(this).hasClass("uiDatePickerFromToFrom");

                if (isFrom) {
                    if ($(this).val()) {
                        switch (type) {
                            case "quoteRequest":
                                $(".quote-request .uiDatePickerFromToTo").focus();
                                break;
                            case "inlineEnquiry":
                                $("#inlineEnquiry .uiDatePickerFromToTo").focus();
                                break;
                            //case "listingFilters":
                            //    $(".listingFilters .uiDatePickerFromToTo").focus();
                            //    break;
                            case "ezone-seasons":
                                sn.app.ezseasonsandrates.focusToDate(this);
                                break;
                        }
                    }
                } else if (!isFrom) {
                    if (type == "listingFilters") {
                        if ($(this).data("date-changed")) {
                            $ListingsView.DatesChanged();
                        }
                    }

                    setNights('.uiDatePickerFromToFrom', '.uiDatePickerFromToTo');
                }

                if (type == "ezone-seasons") {
                    sn.app.ezseasonsandrates.dateChanged(this);
                }
            }
        });
    }
}

function initAvailabilityDatePickers() {
    //initAvailabilityPlaceholders();

    if ($("#hfUnavailableDates").length > 0) {
        unavailableDates = $("#hfUnavailableDates").val().split(",");
    }

    $('.ui-datepicker-prev, .ui-datepicker-next').on("click", function () {
        if (!$(this).hasClass("ui-state-disabled") && availabilityDatePicker) {
            insertLegend();
        }
    });

    var dp = $(".uiDatePicker");
    if (dp.length > 0) {
        dp.datepicker({ dateFormat: datePickerDateFormat });
    }

    var dpRange = $(".uiAvailabilityDatePickerFrom,.uiAvailabilityDatePickerTo");
    if (dpRange.length > 0) {
        //initPlaceholders();
        dpRange.datepicker({
            minDate: new Date(),
            dateFormat: datePickerDateFormat,
            showOtherMonths: true,
            selectOtherMonths: false,
            onSelect: function (selectedDate) {
                var tempDate = $(this).datepicker('getDate'), type = $(this).data('datepickertype'), changed = false;
                if ($(this).hasClass("uiAvailabilityDatePickerFrom")) {
                    if (tempDate) {
                        tempDate.setDate(tempDate.getDate() + 1);
                        $(".uiAvailabilityDatePickerTo").datepicker("option", "minDate", tempDate);
                        $("#checkAvailabilityButton").removeClass('GreyMdmDis').addClass('GreenMdm');
                    }

                    if (type == "inlineEnquiry") {
                        $InlineEnquiry.ValidateCheckin();
                    }
                    if (type == "NewPageEnquiry") {
                        ValidateCheckin();
                    }

                    changed = selectedDate != dateFrom;
                    dateFrom = selectedDate;
                } else {
                    //From date change
                    if (tempDate) {
                        tempDate.setDate(tempDate.getDate() - 1);
                        $("#checkAvailabilityButton").removeClass('GreyMdmDis').addClass('GreenMdm');
                    }

                    if (type == "inlineEnquiry") {
                        $InlineEnquiry.ValidateCheckout();
                    }

                    if (type == "NewPageEnquiry") {
                        ValidateCheckout();
                    }

                    changed = selectedDate != dateTo;
                    dateTo = selectedDate;
                }
                $(this).data("date-changed", changed);
            },
            onClose: function (dateText, inst) {
                var type = $(this).data('datepickertype'),
                    isFrom = $(this).hasClass("uiAvailabilityDatePickerFrom");
                if (isFrom) {
                    if ($(this).val()) {
                        switch (type) {
                            case "inlineEnquiry":
                                $("#inlineEnquiry .uiAvailabilityDatePickerTo").focus();
                                break;
                            case "NewPageEnquiry":
                                $("#newPageEnquiry .uiAvailabilityDatePickerTo").focus();
                                break;
                            case "listingFilters":
                                $(".listingFilters .uiAvailabilityDatePickerTo").focus();
                                break;
                        }
                    }

                    if ($("#hfCheckIn").length > 0) {
                        $("#hfCheckIn").val($(this).val());
                    };

                } else if (!isFrom) {
                    switch (type) {
                        case "listingFilters":
                            if ($(this).data("date-changed")) {
                                $ListingsView.DatesChanged();
                                if (typeof snMap != "undefined") {
                                    snMap.loadEstablishments();
                                }
                            }
                            break;
                        case "inlineEnquiry":
                            if (typeof $AllocateWeb != "undefined") {
                                $AllocateWeb.CheckAvailability();
                            }
                            break;
                    }

                    setNights('.uiAvailabilityDatePickerFrom', '.uiAvailabilityDatePickerTo');

                    if ($("#hfCheckOut").length > 0) {
                        $("#hfCheckOut").val($(this).val());
                    }
                }

                ValidateAvailability();
            },
            onChangeMonthYear: function (year, month, inst) {
                if (this.dateRange.settings.showClearDates) {
                    console.log("(Utlities) 1715: onChangeMonthYear inst.dpDiv-->" + inst.dpDiv + "this-->" + this);
                    insertClearDates(inst.dpDiv);
                }
                currentMonth = month
            },
            beforeShow: function (mydate) {
                availabilityDatePicker = true;
                if ($(this).hasClass("uiAvailabilityDatePickerFrom")) {
                    availabilityDatePickerClass = "uiAvailabilityDatePickerFrom";
                }
                if ($(this).hasClass("uiAvailabilityDatePickerTo")) {
                    availabilityDatePickerClass = "uiAvailabilityDatePickerTo";
                    var datePickerDate = $(".uiAvailabilityDatePickerTo").datepicker("option", "minDate");
                    //var tempDate = new Date();
                    var tempDate = $(".uiAvailabilityDatePickerFrom").datepicker('getDate'),
                        fromHasDate = $(".uiAvailabilityDatePickerFrom").val() != $(".uiAvailabilityDatePickerFrom").attr('rel') && $(".uiAvailabilityDatePickerFrom").val().length;

                    if (datePickerDate.getTime() <= tempDate.getTime() && fromHasDate) {
                        tempDate.setDate(tempDate.getDate() + 1);
                        $(".uiAvailabilityDatePickerTo").datepicker("option", "minDate", tempDate);
                    }
                }
                insertLegend();
            },
            beforeShowDay: function (mydate) {
                if (currentMonth == -1) {
                    if ($(this).datepicker('getDate') != null) {
                        currentMonth = $(this).datepicker('getDate').getMonth() + 1;
                    } else {
                        currentMonth = new Date().getMonth() + 1;
                    }
                }

                var $return = true;
                var $returnclass = "available";
                var minDate = $(this).datepicker("option", "minDate");
                minDate.setHours(0, 0, 0, 0);

                $checkdate = new Date(mydate);
                for (var i = 0; i < unavailableDates.length; i++) {
                    var unavailableDate = new Date(unavailableDates[i]);

                    if ($(this).hasClass("uiAvailabilityDatePickerFrom")) {
                        if (unavailableDate.getTime() == $checkdate.getTime() && mydate >= minDate && currentMonth == new Date(mydate).getMonth() + 1) {
                            $return = false;
                            $returnclass = "unavailable";
                        }
                    }
                    if ($(this).hasClass("uiAvailabilityDatePickerTo")) {
                        unavailableDate.setDate(unavailableDate.getDate() + 1);
                        if (unavailableDate.getTime() == $checkdate.getTime() && mydate >= minDate && currentMonth == new Date(mydate).getMonth() + 1) {
                            $return = false;
                            $returnclass = "unavailable";
                        }
                    }
                }

                return [$return, $returnclass];
            }
        });
    }

    ValidateAvailability();
}



function shortenText(recursiveElement, shortenTo, shortenToIfDialogueContentLong) {
    var recursiveElement = recursiveElement || "div.ShortDescription p";
    var shortenTo = shortenTo || 200;
    var shortenToIfDialogueContentLong = shortenToIfDialogueContentLong || false;

    if (shortenToIfDialogueContentLong != false) {
        if ($(this).hasClass('DialogueContentLong') == true) {
            shortenTo = shortenToIfDialogueContentLong;
        }
    }

    $(recursiveElement).each(function (i) {

        if ($(this).text().length > shortenTo) {
            var breakOnSpace = shortenTo - 50;
            var breakingChar = $(this).html().substring(breakOnSpace, breakOnSpace + 1);
            while (breakingChar != " " && breakOnSpace < shortenTo) {
                ++breakOnSpace;
                breakingChar = $(this).html().substring(breakOnSpace, breakOnSpace + 1);
            }

            var show = $(this).html().substring(0, breakOnSpace);
            var hide = "<span class='Invisible'>" + $(this).html().substring(breakOnSpace, $(this).html().length) + "</span>";
            $(this).html(show + hide);

            if (!$(this).parent().next("a.ShowMoreCorrespondence").length) {
                $(this).parent().append("<span>... <a href=\"#\" class=\"ShowMoreCorrespondence\" data-ga-showmore>More &raquo;</a></span>");
            } else {
                $(this).next("a.ShowMoreCorrespondence").show();
            }

        }

    });

}

$(document).on("click", "a.ShowMoreCorrespondence", function (e) {
    e.preventDefault();
    $(this).parent().hide().parent().find("span.Invisible").show();
});

function insertLegend() {
    clearTimeout(insertLegend.timer);

    if ($('#ui-datepicker-div .ui-datepicker-calendar').is(':visible')) {
        if ($(".calendar-legend").length == 0 && availabilityDatePicker) {
            //$('#ui-datepicker-div').prepend('<div class=\"calendarTitle\">' + (availabilityDatePickerClass == "uiAvailabilityDatePickerFrom" ? "Check-in" : "Check-out") + '</div>');
            $('#ui-datepicker-div').append('<div class=\"calendar-legend\"><ul><li class=\"calendar-legend-available\">Available</li><li class=\"calendar-legend-unavailable\">Not Available</li></ul></div>');
        }
    }
    else {
        insertLegend.timer = setTimeout(insertLegend, 10);
    }
}

function insertClearDates(mydate) {
    console.log("(Common) 418 insertClearDates ");
    clearTimeout(insertClearDates.timer);

    if ($('#ui-datepicker-div .ui-datepicker-calendar').is(':visible')) {
        console.log("(Common) 423 IsVisible-->" + $('#ui-datepicker-div .ui-datepicker-calendar').is(':visible'));
        if ($(".calendar-clear").length == 0) {
            console.log("(Common 425) Length-->" + $('.calendar-clear').length);
            $('#ui-datepicker-div').append('<a class=\"calendar-clear\">Clear dates</a>');

            var calendarClearLinks = document.querySelectorAll(".calendar-clear");

            for (var i = 0; i < calendarClearLinks.length; i++) {
                $(calendarClearLinks[i]).on("click", function (e) {
                    $('#Checkin').val('').datepicker("refresh");
                    $('#Checkout').val('').datepicker("refresh");
                    $('#Checkin').val('').datepicker("update");
                    $('#Checkout').val('').datepicker("update");
                    /*mydate.dateRange.current.datepicker("hide");
                    mydate.dateRange.other.datepicker("hide");
                    mydate.dateRange.current.datepicker('setDate', null);
                    mydate.dateRange.other.datepicker('setDate', null);  
                    */
                    deleteCookie("search.args");
                    if (typeof (mydate.dateRange.settings.onClear) === "function") {
                        mydate.dateRange.settings.onClear.call();
                    }
                  
                });
            }

            var searchText = '';
            if ($('#Main_ctlSearch_txtSearch').length > 0) {
                searchText = $('#Main_ctlSearch_txtSearch').val();

            } else {
                if ($('#Main_txtListingSearch').length > 0 && $('#Main_txtListingSearch').val().length > 0) {
                    searchText = $('#Main_txtListingSearch').val();
                } else if ($('#txtSearch').length > 0 && $('#txtSearch').val().length > 0) {
                    searchText = $('#txtSearch').val();
                }
            }
        }
    }
    else {
        insertClearDates.timer = setTimeout(insertClearDates, 10);
    }
}

// jQuert ScrollTo Init
$(document).on('click', 'a[href^=#scr]', function (e) {
    e.preventDefault();

    offset = -10;
    if ($(".bookingProcess").length) offset = -120;
    $.scrollTo("." + $(this).attr('href').substr(1), 600, { offset: offset });
});

$(document).on("click", ".PageOptions dt input", function (ev) {
    ev.stopImmediatePropagation();
});

$(document).on("keypress", ".PageOptions input[type=text], .nav-quick-search input[type=text]", function (event) {
    if (event.which == 13) {
        event.preventDefault();
        loc = "";
        theId = this.id;
        val = $(this).val().trim();

        switch (theId) {
            case "enquiryID":
                loc = '/c/Reservations/Enquiry.aspx?e=' + val;
                break;
            case "sellerID":
                loc = '/e/reservations/default.aspx?spsid=' + val;
                break;
            case "customerID":
                loc = '/c/Reservations/default.aspx?cid=' + val;
                break;
            case "contactID":
                loc = '/lib/hbef/management/crm/ManagementView.aspx?id=' + val;
                break;
            case "productID":
                loc = '/e/establishment/overview.aspx?spid=' + val;
                break;
            case "eventlogID":
                loc = '/staff-zone/sysadmin/eventlogitem.aspx?id=' + val;
                break;
        }
        if (loc.length > 0) {
            location.href = loc;
        }
    }
});

ValidateCheckin = function (el) {
    if ($('#tbCheckin').val()) {
        var d = new Date($('#tbCheckin').val());
        var today = new Date();
        today.setDate(today.getDate() - 1);
        if (d < today) {
            $("#tbCheckin").parent().addClass('error');
            return validation = false;
        }
    } else {
        $("#tbCheckin").parent().addClass('error');
        return validation = false;
    }
    $("#tbCheckin").parent().removeClass('error');
    setNights('#tbCheckin', '#tbCheckout');
};

ValidateCheckout = function (el) {
    //convert to date and goto be greater than checkin
    var v = $('#tbCheckout').val();
    if (v) {
        var i = new Date($('#tbCheckin').val());
        var o = new Date(v);
        if (o < i) {
            $("#tbCheckout").parent().addClass('error');
            return validation = false;
        }
    } else {
        $("#tbCheckout").parent().addClass('error');
        return validation = false;
    }
    $("#tbCheckout").parent().removeClass('error');
    setNights('#tbCheckin', '#tbCheckout');
};

CalculateNights = function (i, o) {
    var l1 = i.length;
    var l2 = o.length;
    var nights = 0;
    if (l1 && l2) {
        i = new Date(i);
        o = new Date(o);
        nights = Math.ceil((o.getTime() - i.getTime()) / 86400000);
    }
    return isNaN(nights) ? 0 : nights;
};

setNights = function (fromSelector, toSelector) {
    var nightsEl = $(".nights,.nightCount span");
    if (nightsEl.length > 0) {
        var nights = CalculateNights($(fromSelector).val(), $(toSelector).val());
        if (nights != null && nights > 0) {
            setNightsInline(nightsEl, nights);
        }
    }
};

setNightsInlineSpan = function (n) {
    n = isNaN(n) ? 0 : n;
    setNightsInline($(".nightCount span"), n);
};
setNightsInline = function (el, n) {
    n = isNaN(n) ? 0 : n;
    el.html(n + " Night" + (n != 1 ? "s" : ""));
};

ValidateAvailability = function (checkIn, checkOut, unavailableDates) {
    $(".overlapUnavailableDates span").html("");
    $(".overlapUnavailableDates").removeClass('error');

    if (checkIn != null && checkOut) {
        checkOut.setDate(checkOut.getDate() - 1);
        for (var i = 0; i < unavailableDates.length; i++) {

            if (dateExistsInDateRange(new Date(unavailableDates[i]), new Date(checkIn), new Date(checkOut))) {
                $(".overlapUnavailableDates span").html("Dates overlap unavailable dates");
                $(".overlapUnavailableDates").addClass('error');
                return validation = false;
            }
        }
    }
};

function dateExistsInDateRange(date, currentViewStart, currentViewEnd) {
    while (currentViewStart <= currentViewEnd) {
        if (date.getTime() == currentViewStart.getTime())
            return date;

        currentViewStart.setDate(currentViewStart.getDate() + 1);
    }

    return null;
}

function initAvailabilityPlaceholders() {
    $("input.availabilityPlaceholder").each(function () {
        if ($(this).val() == "") {
            $(this).val($(this).attr('rel')).css('color', '#67a1b9').addClass('placeholderActive');
        }
    });
    $("input.availabilityPlaceholder").focus(function () {
        if ($(this).val() == $(this).attr('rel')) {
            $(this).val('').css('color', '#67a1b9').removeClass('placeholderActive');
        }
    }).blur(function () {
        if ($(this).val() == '') {
            $(this).val($(this).attr('rel')).css('color', '#67a1b9').addClass('placeholderActive');
        } else {
            $(this).removeClass('placeholderActive');
            $(this).css('color', '#585858');
        }
    });
}


//#btnSearch = Header search
//#Main_ctlSearch_ButtonSearch = site homepage
//.SearchButton = hub page
$(document).on("click", "#btnSearch, #ButtonSearch, .SearchButton, #Main_ctlSearch_ButtonSearch", function (e) {

    var searchText = '';
    if ($('#Main_ctlSearch_txtSearch').length > 0) {
        searchText = $('#Main_ctlSearch_txtSearch').val();

    } else {
        if ($('#Main_txtListingSearch').length > 0 && $('#Main_txtListingSearch').val().length > 0) {
            searchText = $('#Main_txtListingSearch').val();
        } else if ($('#txtSearch').length > 0 && $('#txtSearch').val().length > 0) {
            searchText = $('#txtSearch').val();
        }
    }

    if (searchText == 'Where would you like to go?' || searchText == '') {
        if (!e) {
            e = window.event;
        }
        e.preventDefault();
    }
});

function copyToClipboard(elem) {
    // create hidden text element, if it doesn't already exist
    var targetId = "_hiddenCopyText_";
    var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
    var origSelectionStart, origSelectionEnd;
    var target;
    if (isInput) {
        // can just use the original source element for the selection and copy
        target = elem;
        origSelectionStart = elem.selectionStart;
        origSelectionEnd = elem.selectionEnd;
    } else {
        // must use a temporary form element for the selection and copy
        target = document.getElementById(targetId);
        if (!target) {
            target = document.createElement("textarea");
            target.style.position = "absolute";
            target.style.left = "-9999px";
            target.style.top = "0";
            target.id = targetId;
            document.body.appendChild(target);
        }
        target.textContent = elem.textContent;
    }
    // select the content
    var currentFocus = document.activeElement;
    target.focus();
    target.setSelectionRange(0, target.value.length);

    // copy the selection
    var succeed;
    try {
        succeed = document.execCommand("copy");
        alert("Auto login link copied to clipboard. Open new Incognito window and paste");
    } catch (e) {
        succeed = false;
    }
    // restore original focus
    if (currentFocus && typeof currentFocus.focus === "function") {
        currentFocus.focus();
    }

    if (isInput) {
        // restore prior selection
        elem.setSelectionRange(origSelectionStart, origSelectionEnd);
    } else {
        // clear temporary content
        target.textContent = "";
    }
    return succeed;
}



/**
 * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
 * Licensed under MIT
 * @author Ariel Flesler
 * @version 2.1.2
 */
;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
/*** INDEX

* CLICK-ONCE BUTTON
* DATE RANGE SELECTOR (for Telerik calendar controls and optional 'nights' display)
* URL DIALOG JQUERY PLUGIN
* POPUP JQUERY PLUGIN
* CONTROL UTILITIES

****/


var __dayMilliseconds = 86400000;
var __hourMilliseconds = 3600000;
var __queryString = null;
var currencySymbols = new Array();
currencySymbols['ZAR'] = { a: "R", b: "R" };
currencySymbols['USD'] = { a: "&#36;", b: "$" };
currencySymbols['GBP'] = { a: "&#163;", b: "£" };
currencySymbols['EUR'] = { a: "&#128;", b: "€" };
currencySymbols['KES'] = { a: "KSh", b: "KSh" };

//Allows numeric keypress only
function numericOnly(e) {
    return numericKeypress(e, false);
}

//Allows numeric keypress and decimal point only
function floatOnly(e) {
    return numericKeypress(e, true);
}

function getCurrencySymbol(currencyCode, html) {
    var s = currencySymbols[currencyCode];
    if (typeof (s) === "undefined") {
        return currencyCode;
    } else {
        return html ? s.a : s.b;
    }
}

function numericKeypress(e, forFloat) {
    var ev = e ? e : window.event;
    var code = ev.which || ev.keyCode;
    if (ev.shiftKey) {
        return false;
    }
    if (ev.ctrlKey) {
        return (code === 99 || code === 120 || code === 97); //allow CTL+c, allow CTL+x, CTL+a (copy/cut/select all)
    } else if (forFloat && code === 46) { //if floating point, allow one period
        var src = $(ev.srcElement);
        var m = null;
        if (typeof (src.val) === "function") {
            m = src.val().match(/\./g);
        }
        return m === null || m.length === 0;
    } else {
        return ((code >= 48 && code <= 57) ||
            code === 8 ||
            code === 16 ||
            code === 9 ||
            code === 37 ||
            code === 35 ||
            code === 36 ||
            code === 13); //allow backspace, delete, tab, right and left arrows, home, end, enter
    }
}

function validateMoneyInput(v, maxmin) {
    var matches = v.toString().match(/^\-{0,1}\d+\.{0,1}\d*$/g);
    var valid = matches !== null && matches.length === 1;
    if (valid && typeof (maxmin) === "object") {
        var money = parseFloat(v.toString());
        if (typeof (maxmin.Min) === "number") {
            valid = money >= maxmin.Min;
        }
        if (valid && typeof (maxmin.Max) === "number") {
            valid = money <= maxmin.Max;
        }
    }
    return valid;
}

function formatMoneyInput(v) {
    var money = parseFloat(v);
    if (isNaN(money)) {
        return null;
    }
    var s = money.toString();
    var pindex = s.indexOf(".");
    if (pindex === -1) {
        s = s + ".00";
    } else {
        var items = s.split(".");
        var f = items[1];
        s = items[0] + "." + (f.length > 1 ? f.substr(0, 2) : f + "0");
    }
    return s;
}

function validatePage(valGroup) {
    if (typeof (Page_ClientValidate) === 'function') {
        return Page_ClientValidate(valGroup);
    }
}

function validateEmail(sender, args) {
    if (args.Value.length === 0) {
        args.IsValid = false;
        return;
    }
    var matches = args.Value.match(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);
    args.IsValid = matches !== null && matches.length === 1;
}

function validateEmailAddress(email) {
    if (email.length === 0) {
        return false;
    }
    var matches = email.match(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);
    return matches !== null && matches.length === 1;
}

function validateStayDates(arrival, departure) {
    return typeof (arrival.getMonth) === "function" &&
        typeof (departure.getMonth) === "function" &&
        departure.valueOf() >= (arrival.valueOf() + __dayMilliseconds);
}

function validateExpiryDate(arrival, expiry) {
    return typeof (arrival.getMonth) === "function" &&
        typeof (expiry.getMonth) === "function" &&
        expiry.valueOf() <= arrival.valueOf();
}

function validateDeposit(deposit) {
    return (deposit <= 100 && deposit >= 25)

}

function validateStringLengthRange(stringToCompare, minLength, maxLength) {
    var myLength = stringToCompare.length;
    return (myLength <= maxLength && myLength >= minLength);
}

function validateIntValue(txt, minValue, maxValue) {
    var v = txt.val();
    var vn = parseInt(v);
    return v.length > 0 &&
        !v.match(/\./) &&
        !isNaN(vn) &&
        (!minValue || vn >= minValue) &&
        (!maxValue || vn <= maxValue);
}

function getTextNoSpaces(a) {
    return a.val().replace(/\s/g, "");
}

function onControlValidated(ctl, isvalid, append, cls, useIcon, failMsg, ico) {
    if (typeof (ctl.data("originalClass")) === "undefined") {
        ctl.data("originalClass", ctl.attr("class"));
    }

    if (useIcon === true && ctl.data("icon")) {
        ctl.data("icon").remove();
        ctl.removeData("icon");
    }
    if (isvalid) {
        if (append) {
            ctl.removeClass(cls ? cls : "invalid");
        } else {
            ctl.attr("class", ctl.data("originalClass"));
        }
    } else {
        if (append) {
            if (!ctl.hasClass(cls ? cls : "invalid")) {
                ctl.addClass(cls ? cls : "invalid");
            }
        } else {
            ctl.attr("class", cls ? cls : "invalid");
        }

        if (useIcon === true) {
            var closest = ctl.closest(".validation-container"),
                container = closest.length === 0 ? $("<span class='validation-container'></span>") : closest;
            if (closest.length === 0) {
                var prev = ctl.index() === 0 ? null : ctl.prev();
                if (prev === null) {
                    container.prependTo(ctl.parent());
                } else {
                    container.insertAfter(prev);
                }
                ctl.appendTo(container);
            }
            var pos = container.position(),
                width = container.width(),
                height = container.outerHeight(),
                iconLeft = width - 16,
                iconTop = (height / 2) - 8,
                iconFile = typeof (ico) === "string" && ico.length > 0 ? ico : "validate_error.png";
            icon = $("<img src='/images/icons/" +
                iconFile +
                "' alt='' title='" +
                failMsg +
                "' class='validation-icon' />");
            icon.css("top", iconTop);
            icon.css("left", iconLeft);
            icon.appendTo(container);
            ctl.data("icon", icon);
            icon.show(80).delay(100).hide(50).delay(100).show(50).delay(100).hide(50).delay(100).show(50);
        }
    }
}

//Navigates to the specified url after aborting any busy async requests
function navigateWithAsyncAbort(url) {
    abortAsyncRequest();
    window.location = url;
}

function postbackAsync(updatePanel) {
    abortAsyncRequest();
    Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(new Array(updatePanel));
}

function isInAsyncPostback() {
    return Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack();
}

function abortAsyncRequest() {
    if (isInAsyncPostback()) {
        Sys.WebForms.PageRequestManager.getInstance().abortPostBack();
    }
}

///Returns an object containing all querystring key/value pairs as its properties, etc.
function getLocationQuery() {
    if (__queryString !== null) {
        return __queryString;
    }
    __queryString = {};
    __queryString.get = function (keys, add) {
        var qs = "";
        if (keys !== null && keys.push && keys.length > 0) {
            for (var i = 0; i < keys.length; i++) {
                var prop = keys[i],
                    value = __queryString[prop];
                if (typeof (value) !== "undefined") {
                    if (qs.length > 0) {
                        qs += "&";
                    }
                    qs += prop + "=" + value;
                }
            }
        } else {
            for (var p in __queryString) {
                var val = __queryString[p];
                if (typeof (val) === "function" || typeof (val) === "object" || typeof (val) === "undefined") {
                    continue;
                }
                if (qs.length > 0) {
                    qs += "&";
                }
                qs += p + "=" + val;
            }
        }
        if (add && add.length && add.length > 0) {
            if (qs.length > 0) {
                qs += "&";
            }
            qs += add;
        }
        return qs;
    };
    var query = window.location.search.replace("?", "");
    if (query.length === 0) {
        return __queryString;
    }
    var keyValues = query.split("&");
    for (var i = 0; i < keyValues.length; i++) {
        var keyValue = keyValues[i].split("=");
        __queryString[keyValue[0]] = keyValue[1];
    }
    return __queryString;
}

function getPageName(url) {
    if (typeof (url) !== "string" || url.length === 0) {
        return "";
    }
    var s = url.split("/")
    if (s.length === 0) {
        return "";
    }
    var last = s[s.length - 1],
        page = last.split("?")[0];
    return page;
}

function queryString() {
    var _qs = this;
    //Returns an object with properties representing querystring values
    this.get = function () {
        var query = {}, srch = window.location.search.replace("?", "");
        if (srch.length === 0) {
            return query;
        }
        var keyValues = srch.split("&");
        for (var i = 0; i < keyValues.length; i++) {
            var keyValue = keyValues[i].split("=");
            query[keyValue[0]] = decodeURI(keyValue[1]);
        }
        return query;
    };
    //Builds a querystring from an object map
    this.build = function (map) {
        var query = "";
        if (typeof (map) === "object") {
            for (var key in map) {
                var value = map[key];
                if (typeof (value) === "string" || typeof (value) === "number" || typeof (value) === "boolean") {
                    query = _qs.add(query, key, value);
                }
            }
        }
        return query;
    };
    //Adds the given key and value to the specified url. If the key exists, it will be updated to the new value.
    this.add = function (url, key, value) {
        if (typeof (url) !== "string") {
            return url;
        }
        if (_qs.getKeyMatch(url, key) !== null) {
            url = _qs.remove(url, key);
        }
        //If no value then removed do not add the key back
        if (value.length === 0) {
            //clean off the last ? if nothing to pass
            if (url.indexOf("?") === url.length - 1) {
                url = url.substring(0, url.indexOf("?"));
            }
            return url;
        }
        var matchQ = url.match(/.+\?$/), endsWithQ = matchQ !== null && matchQ.length > 0;
        var prefix = endsWithQ ? "" : url.indexOf("?") !== -1 ? "&" : "?";
        return url + prefix + key + "=" + encodeURI(value);
    };
    this.remove = function (url, key) {
        if (!_qs.haveUrl(url)) {
            return url;
        }
        var match = _qs.getKeyMatch(url, key);
        if (match) {
            var atQueryStart = match.length === 2 && match[1] === "?",
                start = atQueryStart ? match.index + 1 : match.index;

            for (i = start; i < url.length; i++) {
                var character = url[i], atEnd = i === url.length - 1;
                if ((i > start && character === "&") || atEnd) {
                    var end = atEnd || atQueryStart ? i + 1 : i;
                    url = url.replace(url.substring(start, end), "");
                    break;
                }
            }

            if (url[url.length - 1] === "&") {
                url = url.substring(0, url.length - 2);
            } else if (url[url.length - 1] === "?") {
                url = url.substring(0, url.length - 1);
            }
        }
        return url;
    };
    this.getKeyMatch = function (url, key) {
        var re = new RegExp("(^|&|\\?){1}" + key + "=", "i");
        return url.match(re);
    };
    this.haveUrl = function (url) {
        return typeof (url) === "string" && url.length > 0;
    };
}

//dt = javascript date object
//add = pos/neg integer indicating how many of the specified date parts to add
//part = date part, e.g. "s" (seconds) or "m" (minutes)
function dateAdd(dt, add, part) {
    var val = 0;
    switch (part) {
        case "s": //seconds
            val = 1000 * add;
            break;
        case "m": //minutes
            val = 60000 * add;
            break;
        case "h": //hours
            val = __hourMilliseconds * add;
            break;
        case "d": //days
            val = __dayMilliseconds * add;
            break;
    }
    return new Date(dt.valueOf() + val);
}

function dateDiff(a, b, part) {
    var ms = Math.abs(a.valueOf() - b.valueOf());
    var diff = 0.0;
    switch (part) {
        case "ms": //milliseconds
            diff = ms;
            break;
        case "s": //seconds
            diff = ms / 1000;
            break;
        case "m": //minutes
            diff = ms / 60000;
            break;
        case "h": //hours
            diff = ms / __hourMilliseconds;
            break;
        case "d": //days
            diff = ms / __dayMilliseconds;
            break;
    }
    return Math.round(diff);
}

var MonthNames = [
    "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November",
    "December"
];
var MonthNamesShort = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"];

function getMonthName(dateValue) {
    return MonthNames[dateValue.getMonth()];
}

function getMonthNameShort(dateValue) {
    return MonthNamesShort[dateValue.getMonth()];
}


/*********************************** DATE RANGE SELECTOR (for Telerik calendar controls and optional 'nights' display) *************************************************/
function DateRangeSelector() {
    this.startCalendar = null;
    this.endCalendar = null;
    this.nightsElement = null;
    this.start = null;
    this.end = null;
    this.isValid = false;
    var isSettingStart = false, sid = "", eid = "", nid = "";

    this.initInternal = function () {
        this.startCalendar = $find(sid);
        this.endCalendar = $find(eid);
        if (nid !== undefined) {
            this.nightsElement = $("#" + nid);
        }
    };

    //startId = client id of start calendar; endId = client id of end calendar; nightsId = client id of nights control (like a span)
    this.init = function (startId, endId, nightsId) {
        sid = startId;
        eid = endId;
        nid = nightsId;
        this.initInternal();
    };

    this.resetDates = function () {
        if (this.startCalendar === null) {
            this.initInternal();
        }
        this.start = this.startCalendar.get_selectedDate();
        this.end = this.endCalendar.get_selectedDate();
    };

    this.validate = function () {
        this.isValid = this.start.valueOf() < this.end.valueOf();
        return this.isValid;
    };

    this.onEndChanged = function () {
        if (!isSettingStart) {
            this.resetDates();
            this.setNights(dateDiff(this.start, this.end, "d"));
        }
    };

    this.onStartChanged = function (a, b) {
        isSettingStart = true;
        this.resetDates();
        var newEnd = dateAdd(this.start, 1, "d");
        this.endCalendar.set_minDate(newEnd);

        //If start is >= end, set new end.
        if (this.start >= this.end) {
            this.endCalendar.set_selectedDate(newEnd);
            this.end = newEnd;
        }
        this.setNights(dateDiff(this.start, this.end, "d"));
        isSettingStart = false;
    };

    this.setNights = function (n) {
        if (this.nightsElement !== undefined && this.nightsElement !== null) {
            this.nightsElement.data("nights", n);
            this.nightsElement.text(n + (n > 1 ? " Nights" : " Night"));
        }
    };

}
/****************************************************************************************************************************/

/******************************************** CONTROL UTILITIES ***************************************************************/

function selectOption(select, index) {
    var o = select.children("option");
    o.removeAttr("selected");
    var selected = o.eq(index);
    selected.attr("selected", "selected");
    select.val(selected.val());
}

function selectOptionByVal(select, value) {
    var o = select.children("option");
    o.removeAttr("selected");
    var selected = o.filter('[value="' + value + '"]');
    selected.attr("selected", "selected");
    select.val(value);
}

function enable(items, enabled) {
    if (typeof (items) !== 'undefined' && items !== null) {
        if (enabled) {
            items.removeAttr("disabled");
        } else {
            items.attr("disabled", "disabled");
        }
    }
}

function masterSlaveCheckbox(master, slave, callback) {
    master.click(function () {
        var $this = $(this), $a = $this.attr("checked") === "checked";
        slave.each(function () {
            var $cb = $(this),
                enable = typeof ($cb.data("master-enable")) === "undefined" ? true : $cb.data("master-enable") === 1,
                disable = typeof ($cb.data("master-disable")) === "undefined" ? true : $cb.data("master-disable") === 1;
            if ($a && enable) {
                $cb.attr("checked", "checked");
            } else if (!$a && disable) {
                $cb.removeAttr("checked");
            }
        });
        if (typeof (callback) === "function") {
            callback(slave.filter(":checked").length);
        }
    });

    if (typeof (callback) === "function") {
        slave.click(function () {
            var $b = slave.filter(":checked").length;
            if ($b === 0) {
                master.removeAttr("checked");
            }
            callback($b);
        });
    }
}

function monitorCharCount(txt, maxlength, indicator) {
    if (txt && !isNaN(maxlength)) {
        if (typeof (indicator) !== "undefined") {
            indicator.html(maxlength);
            txt[0].snLengthInd = indicator;
        }
        txt.data("snMaxLength", maxlength);
        if (typeof (indicator) !== "undefined") {
            txt.snLengthInd = indicator
        };
        txt.on('keypress',
            function (e) {
                var t = $(this),
                    l = t.val().length,
                    m = t.data("snMaxLength"),
                    paste = e.ctrlKey && e.which === 118, // paste CTL + V
                    //CTL key combinations and backspace, delete, tab, right and left arrows, home, end
                    otherValid = (!paste && e.ctrlKey) ||
                        ((e.which >= 48 && e.which <= 57) ||
                            e.which === 8 ||
                            e.which === 16 ||
                            e.which === 9 ||
                            e.which === 37 ||
                            e.which === 35 ||
                            e.which === 36);
                if ((!paste && l + 1 > m) && !otherValid) {
                    e.preventDefault();
                    e.stopPropagation();

                }
            });
        txt.on('keyup',
            function (e) {
                var t = $(this),
                    tEl = t[0],
                    l = t.val().length,
                    m = t.data("snMaxLength"),
                    rem = l > m ? 0 : m - l;
                if (typeof (tEl.snLengthInd) !== "undefined") {
                    tEl.snLengthInd.html(rem);
                }
                if (rem === 0) {
                    t.val(t.val().substr(0, m));
                }
            });
    }
}

/******************************************** JQUERY CUSTOMISATIONS ********************************************************/
(function ($) {
    //Custom filter to determine if an element has data identified by a given key. m[3] = key 
    $.expr[':'].hasData = function (elem, index, m) {
        return typeof ($(elem).data(m[3])) !== "undefined";
    };

    //Custom filter to determine elements that have data with the specified value 
    $.expr[':'].data = function (elem, index, m) {
        var keyValue = m[3].replace(/[\"\'\s]/g, "").split(","),
            key = keyValue[0],
            val = keyValue[1];
        return key && key.length > 0 && val && val.length > 0 ? $(elem).data(key) === val : false;
    };

    /***************** JSON STANDARD LOAD JQUERY PLUGIN ***************/

    $.fn.loadJson = function (selectType) {
        var $this = $(this);

        $.ajax({
            url: "/site/httphandlers/selectlist.ashx",
            dataType: 'json',
            type: 'POST',
            data: { type: selectType },
            cache: false,
            error: function (xhr, status, err) {
                $this.html("");
                $this.append('<option value="-1">Error loading list</option>');
            },
            success: function (data) {
                if (data) {
                    $this.html("");
                    for (i = 0; i < data.length; i++) {
                        var item = data[i];
                        $this.append('<option value="' + item.Value + '">' + item.Text + '</option>');
                    }
                }
            }
        });
    };

    $.isValueType = function (value) {
        return typeof (value) === "string" || typeof (value) === "number" || typeof (value) === "boolean";
    };

})(jQuery);


/******************************************** URL DIALOG JQUERY PLUGIN ********************************************************/

(function ($) {
    var methods = {
        show: function (options) {
            var $this = this.first();

            var settings = $.extend({
                'url': '',
                'scroll': 'auto',
                'width': 500,
                'height': 700,
                'title': '',
                'show': null,
                'dialogClass': '',
                'afterClose': null
            },
                options);

            var dlg = $("#__urldlg");
            if (dlg.length === 0) {
                $this.append("<iframe id=\"__urldlg\" frameborder=\"0\"></iframe>");
                dlg = $("#__urldlg");
            }
            dlg.css("display", "none");

            var $prog = $this.data("prog");
            if (!$prog) {
                $this.append("<div id=\"__hrldlgprog\" class=\"url-dialog-progress\">&nbsp;</div>");
                $prog = $("#__hrldlgprog");
                $this.data("prog", $prog);
            }
            $prog.show();

            //Register with iFrame load to show it and fade out the progress film
            dlg.load(function () {
                $(this).css("display", "inline");
                $prog.fadeOut();
            });

            dlg.attr("scrolling", settings.scroll);
            dlg.css("width", settings.width + "px");
            dlg.css("height", settings.height - 10 + "px");
            dlg.attr("src", settings.url);
            $this.css("width", settings.width + "px");
            $this.css("height", settings.height + "px");

            $this.dialog({
                autoOpen: false,
                height: settings.height,
                width: settings.width,
                modal: true,
                title: settings.title,
                show: settings.show,
                dialogClass: settings.dialogClass,
                open: function () {
                    var $this = $(this);
                    $this.css("padding", "0");
                    $this.css("padding-bottom", "5px");
                    $this.css("overflow", "hidden");
                    //Set the height of the iframe to the UI.dialog-calculated height
                    dlg.css("height", $this.css("height"));
                    $this.show();
                },
                close: function () {
                    if (typeof (settings.afterClose) === "function") {
                        settings.afterClose();
                    }
                }
            });

            $this.dialog("open");
            return $this;
        },
        hide: function () {
            var $this = this.first();
            $this.dialog("close");
            $this.hide();
        }
    };

    $.fn.urlDialog = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.show.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.urlDialog');
        }
    };
})(jQuery);

/********************************************POP JQUERY PLUGIN********************************************************/
(function ($) {
    $.fn.pop = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, arguments);
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.pop');
        }
    };

    $.fn.pop.all = $([]);

    var state = {
        single$: null,
        singleEl: null,
        mouse: false,
        mouseEl: null,
        mouseXY: { X: 0, Y: 0 },
        hoverTimeout: null
    };

    var methods = {
        init: function (options) {
            var $body = $(document.body);
            this.each(function () {
                var $this = $(this);

                this.pop = {};
                this.pop.settings = $.extend({
                    'mode': 'hover', // showing the popup - possible values: hover; click; manual
                    'position': 'top', // arrow position - possible values: top; right; bottom; left; topleft
                    'hoverDelay': 250,
                    'backColor': '#333',
                    'borderColor': '#333',
                    'color': '#fff',
                    'arrowWidth': 7,
                    'opacity': 1.0, // content opacity - 0.0 to 1.0
                    'distance': 5, //distance of the popup away from the element
                    'offset':
                    0, //Offset of the popup from the default (center) position, which will be n pixels top or left, depending on the position.
                    //Does not apply to mouse positioning.
                    //E.g. if position = top/bottom, offset is n px from left. If position is left/right, offset is n px from top.
                    //This can also be set via the element using a 'data-pop-offset' attribute.
                    'addClass': '',
                    'trackMouse':
                    false, // whether to track mouse movement. This only applies if 'mode' is set to 'hover'
                    'effect': 'fade', // the effect in showing the popup - possible values: fade, show
                    'content': null, //the HTML string content or callback function that returns the HTML content
                    'beforeShow': null,
                    'afterShow': null,
                    'afterHide': null
                },
                    options);

                this.pop.settings.isManual = this.pop.settings.mode === "manual";
                if (this.pop.settings.mode !== "hover") {
                    this.pop.settings.trackMouse = false;
                }
                var o = $this.data("pop-offset");
                if (typeof (o) === "number") {
                    this.pop.settings.offset = parseInt(o, 10);
                }
                if (typeof (this.pop.popup) !== "undefined") {
                    this.pop.popup.remove();
                }
                var s = this.pop.settings;
                if (this.pop.popup) {
                    this.off(".pop").pop.popup.remove();
                }
                this.pop.popup = $("<div>").addClass("pop-widget").addClass(s.addClass)
                    .css({
                        display: "none",
                        position: "absolute",
                        backgroundColor: s.backColor,
                        border: "1px solid " + s.borderColor,
                        color: s.color,
                        padding: "5px 12px",
                        zIndex: 1004,
                        maxWidth: "300px"
                    }).appendTo($body);

                this.pop.popup.content = $("<div>").addClass("pop-widget-content").appendTo(this.pop.popup);
                this.pop.popup.arrow =
                    $(
                        "<div class=\"pop-widget-arrow\" style=\"position:absolute;\"><div class=\"border\"></div><div class=\"arrow\"></div></div>")
                        .prependTo(this.pop.popup);

                var a = this.pop.popup.arrow.children(".arrow"),
                    b = this.pop.popup.arrow.children(".border"),
                    ab = $([]).add(a).add(b),
                    pos = s.arrowWidth * 2 * -1,
                    ap = pos.toString() + "px",
                    bp = (pos - 1).toString() + "px";

                ab.css({ position: "absolute", border: s.arrowWidth.toString() + "px solid transparent" });

                switch (s.position) {
                    case 'topleft':
                        this.pop.popup.arrow.css({ bottom: 0, left: 10 });
                        a.css({ borderTopColor: s.backColor, bottom: ap });
                        b.css({ borderTopColor: s.borderColor, bottom: bp });
                        break;
                    case 'top':
                        this.pop.popup.arrow.css({ bottom: 0 });
                        a.css({ borderTopColor: s.backColor, bottom: ap });
                        b.css({ borderTopColor: s.borderColor, bottom: bp });
                        break;
                    case 'right':
                        this.pop.popup.arrow.css({ left: 0 });
                        a.css({ borderRightColor: s.backColor, left: ap });
                        b.css({ borderRightColor: s.borderColor, left: bp });
                        break;
                    case 'bottom':
                        this.pop.popup.arrow.css({ top: 0 });
                        a.css({ borderBottomColor: s.backColor, top: ap });
                        b.css({ borderBottomColor: s.borderColor, top: bp });
                        break;
                    case 'left':
                        this.pop.popup.arrow.css({ right: 0 });
                        a.css({ borderLeftColor: s.backColor, bottom: ap });
                        b.css({ borderLeftColor: s.borderColor, bottom: bp });
                        break;
                    case 'bottomleft':
                        this.pop.popup.arrow.css({ top: 0, left: 10 });
                        a.css({ borderBottomColor: s.backColor, top: ap });
                        b.css({ borderBottomColor: s.borderColor, top: bp });
                        break;
                    case 'bottomright':
                        this.pop.popup.arrow.css({ top: 0, right: 0 });
                        a.css({ borderBottomColor: s.backColor, top: ap });
                        b.css({ borderBottomColor: s.borderColor, top: bp });
                        break;
                    case 'topright':
                        this.pop.popup.arrow.css({ bottom: 0, right: 0 });
                        a.css({ borderTopColor: s.backColor, bottom: ap });
                        b.css({ borderTopColor: s.borderColor, bottom: bp });
                        break;
                }

                switch (s.mode) {
                    case 'hover':
                        $this.on("mouseenter.pop", _private.onMouseEnter).on("mouseleave.pop", _private.onMouseLeave);
                        break;
                    case 'click':
                        $this.on("click.pop", _private.onClick);
                        break;
                }

                if (s.mode !== "hover") {
                    $.fn.pop.all.push($this);
                }
            });

            if (options.mode !== "hover") {
                $(window).on("resize.pop", _private.onWinResize);
            }

            return this;
        },
        show: function () {
            this.each(function () {
                var $this = $(this), e = this;
                e.pop.popup.content.css({ width: "auto" });
                _private.setHtml.apply($this, arguments);

                if (typeof (e.pop.settings.beforeShow) === "function") {
                    e.pop.settings.beforeShow($this);
                }

                if (!e.pop.settings.isManual) {
                    state.single$ = $this;
                    state.singleEl = $this[0];
                }

                _private.decidePosition($this, true);

                if (e.pop.settings.effect === 'fade') {
                    e.pop.popup.fadeIn('fast',
                        function () {
                            var $faded = $(this);
                            if (!e.pop.settings.isManual && (!state.singleEl || this !== state.singleEl.pop.popup[0])) {
                                $faded.hide();
                                return;
                            }
                            _private.onAfterShow($this);
                        });
                } else {
                    e.pop.popup.show();
                    _private.onAfterShow($this);
                }
            });

            return this;
        },
        hide: function () {
            _private.unTrackMouse();

            this.each(function () {
                if (typeof this.pop === "undefined") return false;

                var $this = $(this);
                this.pop.popup.hide();
                if (state.singleEl && state.singleEl === this) {
                    state.single$ = null;
                    state.singleEl = null;
                    $(document).off("click.pop", _private.onBodyClick);
                }

                if (typeof (this.pop.settings.afterHide) === "function") {
                    this.pop.settings.afterHide($this);
                }
            });

            return this;
        },
        reposition: function () {
            _private.reposition.apply(this, arguments);
        },
        off: function () {
            this.off(".pop");
            $.fn.pop.all = $([]);
            this.each(function () {
                if (typeof (this.pop.popup) !== "undefined") {
                    this.pop.popup.remove();
                }
            });
        }
    };

    var _private = {
        onClick: function (event) {
            var $this = $(this);
            if (state.singleEl === this) {
                methods.hide.apply($this, arguments);
            } else {
                event.stopPropagation();
                _private.hideOthers($this);
                state.mouseXY.X = event.pageX;
                state.mouseXY.Y = event.pageY;
                methods.show.call($this);
            }
        },
        onMouseEnter: function () {
            var $this = $(this);
            if (this.pop.settings.trackMouse) {
                _private.trackMouse.apply($this, arguments);
            }
            state.single$ = $this;
            state.singleEl = $this[0];

            $this.data("pop-widget-hover", true);
            this.pop.popup.data("pop-widget-hover", true);

            state.hoverTimeout = setTimeout(function () {
                if (state.single$ &&
                    state.single$.data("pop-widget-hover") &&
                    !state.singleEl.pop.popup.is(":visible")) {
                    methods.show.call(state.single$);
                }
            },
                this.pop.settings.hoverDelay);
        },
        onMouseLeave: function () {
            clearTimeout(state.hoverTimeout);
            state.single$ = null;
            state.singleEl = null;
            var $this = $(this);
            $this.removeData("pop-widget-hover");
            this.pop.popup.removeData("pop-widget-hover");
            methods.hide.apply($this, arguments);
        },
        onAfterShow: function (a) {
            var e = a[0], o = e.pop.settings.opacity;
            if (o < 1.0) {
                e.pop.popup.fadeTo(0, o);
            }
            if (e.pop.settings.mode === 'click') {
                $(document).on("click.pop", a, _private.onBodyClick);
            }
            if (typeof (e.pop.settings.afterShow) === "function") {
                e.pop.settings.afterShow(a);
            }
        },
        setHtml: function () {
            this.each(function () {
                var $this = $(this), c = this.pop.settings.content, ct = typeof c, html = "";
                switch (ct) {
                    case "function":
                        html = c.apply($this, arguments);
                        break;
                    case "string":
                        html = c;
                        break;
                }
                if (typeof (html) === "string" && html.length > 0) {
                    this.pop.popup.content.html(html);
                }
            });
        },
        clickIntersects: function (event) {
            var o = this.offset(),
                r = o.left + this.outerWidth(),
                b = o.top + this.outerHeight();
            return (event.pageX > o.left && event.pageX < r && event.pageY > o.top && event.pageY < b);
        },
        onBodyClick: function (event) {
            if (!state.single$) {
                return;
            }
            _private.hideOthers(state.single$);
            if (_private.clickIntersects.call(state.singleEl.pop.popup, event) === false) {
                methods.hide.apply(state.single$, arguments);
            }
        },
        hideOthers: function (except) {
            $.fn.pop.all.each(function () {
                var p = this[0].pop.popup, pe = p[0], e = except[0].pop.popup[0];
                if (pe !== e && p.is(":visible")) {
                    p.hide();
                }
            });
        },
        trackMouseLeave: function () {
            this.on("mouseleave.pop",
                function () {
                    methods.hide.apply(this, arguments);
                    methods.unTrackMouse.apply(this, arguments);
                });
        },
        trackMouse: function () {
            if (!state.mouse) {
                state.mouse = true;
                state.mouseEl = this[0];
                _private.setMouseData(state.mouseEl);
                $("body").on("mousemove.pop", _private.onMouseMove);
            }
        },
        unTrackMouse: function () {
            state.mouse = false;
            $("body").off("mousemove.pop", _private.onMouseMove);
        },
        onMouseMove: function (event) {
            state.mouseXY.X = event.pageX;
            state.mouseXY.Y = event.pageY;
            state.mouseEl.pop.setMousePosition(state.mouseEl);
        },
        onWinResize: function () {
            $.fn.pop.all.each(function () {
                var e = this[0];
                if (e.pop.popup && e.pop.popup.is(":visible")) {
                    _private.setPosition(this);
                }
            });
        },
        reposition: function () {
            $(this).each(function () {
                if (this.pop.popup && this.pop.popup.is(":visible")) {
                    _private.setPosition($(this));
                }
            });
        },
        decidePosition: function (a, setMouseData) {
            var e = a[0], b = typeof (setMouseData) === "boolean" ? setMouseData : false;
            if (e.pop.settings.trackMouse) {
                if (b) {
                    _private.setMouseData(e);
                }
                e.pop.setMousePosition(e);
            } else {
                _private.setPosition(a);
            }
        },
        setMouseData: function (e) {
            var arrow = e.pop.popup.arrow.children(".border:first-child"), arrowOffset = arrow.offset();
            e.pop.mouse = {
                ph: e.pop.popup.outerHeight(),
                ph2: e.pop.popup.outerHeight() / 2,
                pw: e.pop.popup.outerWidth(),
                pw2: e.pop.popup.outerWidth() / 2,
                o: 10,
                at: arrowOffset.top,
                al: arrowOffset.left,
                ah: arrow.outerHeight(),
                ah2: arrow.outerHeight() / 2,
                aw: arrow.outerWidth(),
                aw2: arrow.outerWidth() / 2
            };
            switch (e.pop.settings.position) {
                case 'top':
                    e.pop.setMousePosition = _private.setMouseTop;
                    break;
                case 'right':
                    e.pop.setMousePosition = _private.setMouseRight;
                    break;
                case 'bottom':
                    e.pop.setMousePosition = _private.setMouseBottom;
                    break;
                case 'left':
                    e.pop.setMousePosition = _private.setMouseLeft;
                    break;
            }
        },
        setMouseTop: function (e) {
            var newTop = state.mouseXY.Y - e.pop.mouse.ph - e.pop.mouse.ah - e.pop.mouse.o;
            newLeft = state.mouseXY.X - e.pop.mouse.pw2;
            e.pop.popup.arrow.css({ left: e.pop.mouse.pw2 - e.pop.mouse.aw2 });
            e.pop.popup.css({ top: newTop, left: newLeft });
        },
        setMouseRight: function (e) {
            var newTop = state.mouseXY.Y - e.pop.mouse.ph2;
            newLeft = state.mouseXY.X + e.pop.mouse.aw + e.pop.mouse.o;
            e.pop.popup.arrow.css({ top: e.pop.mouse.pih2 - e.pop.mouse.ah2 });
            e.pop.popup.css({ top: newTop, left: newLeft });
        },
        setMouseBottom: function (e) {
            var newTop = state.mouseXY.Y + e.pop.mouse.ah + e.pop.mouse.o;
            newLeft = state.mouseXY.X - e.pop.mouse.pw2;
            e.pop.popup.arrow.css({ left: e.pop.mouse.piw2 - e.pop.mouse.aw2 });
            e.pop.popup.css({ top: newTop, left: newLeft });
        },
        setMouseLeft: function (e) {
            var newTop = state.mouseXY.Y - e.pop.mouse.ph2;
            newLeft = state.mouseXY.X - e.pop.mouse.aw - e.pop.mouse.o;
            e.pop.popup.arrow.css({ top: e.pop.mouse.pih2 - e.pop.mouse.ah2 });
            e.pop.popup.css({ top: newTop, left: newLeft });
        },
        setPosition: function (a) {
            var e = a[0],
                pheight = e.pop.popup.outerHeight(),
                pwidth = e.pop.popup.outerWidth(),
                newTop = 0,
                newLeft = 0,
                offset = a.offset(),
                eheight = a.outerHeight(),
                ewidth = a.outerWidth(),
                dist = e.pop.settings.distance,
                awidth = e.pop.settings.arrowWidth,
                adjust = e.pop.settings.offset;

            switch (e.pop.settings.position) {
                case 'topleft':
                    newTop = offset.top - pheight - dist;
                    newLeft = offset.left + adjust;
                    e.pop.popup.arrow.css({ left: 10 });
                    break;
                case 'top':
                    newTop = offset.top - pheight - dist;
                    newLeft = offset.left + (ewidth / 2) - (pwidth / 2) + adjust;
                    e.pop.popup.arrow.css({ left: (pwidth / 2) - awidth });
                    break;
                case 'right':
                    newTop = offset.top + (eheight / 2) - (pheight / 2) + adjust;
                    newLeft = offset.left + ewidth + dist;
                    e.pop.popup.arrow.css({ top: (pheight / 2) - awidth });
                    break;
                case 'bottom':
                    newTop = offset.top + eheight + dist;
                    newLeft = offset.left + (ewidth / 2) - (pwidth / 2) + adjust;
                    e.pop.popup.arrow.css({ left: (pwidth / 2) - awidth });
                    break;
                case 'left':
                    newTop = offset.top + (eheight / 2) - (pheight / 2) + adjust;
                    newLeft = offset.left - pwidth - dist;
                    e.pop.popup.arrow.css({ top: (pheight / 2) - awidth });
                    break;
                case 'bottomleft':
                    newTop = offset.top + eheight + dist;
                    newLeft = offset.left + adjust;
                    e.pop.popup.arrow.css({ left: 10 });
                    break;
                case 'bottomright':
                    newTop = offset.top + eheight + dist;
                    newLeft = offset.left + ewidth - e.pop.popup.outerWidth();
                    e.pop.popup.arrow.css({ right: 22 });
                    break;
                case 'topright':
                    newTop = offset.top - pheight - dist;
                    newLeft = offset.left + ewidth - e.pop.popup.outerWidth();
                    e.pop.popup.arrow.css({ right: 22 });
                    break;
            }
            e.pop.popup.css({ top: newTop, left: newLeft });
        }
    };

})(jQuery);

/********************************************VALIDATION JQUERY PLUGIN********************************************************/
(function ($) {
    $.fn.validation = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.validation');
        }
    };

    var methods = {
        init: function (options) {
            this.each(function () {
                var $this = $(this),
                    e = this,
                    type = $this.data("v-type"),
                    ev = $this.data("v-event"),
                    pos = $this.data("v-position"),
                    offset = $this.data("v-offset"),
                    invoke = _private.getFunction(type),
                    event = type === "manual" ? "none" : "blur";

                e.isValid = true;
                e.validation = {};
                e.validation.settings = {};

                ev = typeof (ev) === "undefined" ? event : ev.replace(/\.validation/g, "");
                ev += ".validation";
                this.validation.invoke = invoke;
                $this.data("v-event", ev);

                if (ev !== "none.validation") {
                    $this.on(ev,
                        function () {
                            var a = $(this), b = a.data("v-event");
                            if (b !== "blur.validation" || (b === "blur.validation" && !this.isValid)) {
                                a.validation("invoke");
                            }
                        });
                }

                $.extend(e.validation.settings,
                    {
                        'as': 'icon', // display option: icon or tooltip
                        'position': 'right', //top, right, left, bottom
                        'invalidClass': 'invalid',
                        'promptAttribute':
                        '', //the name of the element attribute that contains the prompt/placeholder text for the field
                        'offset': 0, //See jQuery.pop offset option for description
                        'numericRange': null //The numeric range settings for numeric range validation
                    },
                    options);

                //Override settings from element
                if (typeof (pos) === "string" && pos.length > 0) {
                    e.validation.settings.position = pos;
                }
                if (typeof (offset) === "number") {
                    e.validation.settings.offset = parseInt(offset, 10);
                }

                if (e.validation.settings.as === "tooltip") {
                    $this.pop({
                        mode: 'manual',
                        effect: 'fade',
                        position: e.validation.settings.position,
                        backColor: "#000",
                        borderColor: "#000",
                        distance: 10,
                        addClass: "validation-tooltip",
                        offset: e.validation.settings.offset,
                        content: _private.getTooltipMsg
                    });
                }
            });
            return this;
        },
        off: function () {
            methods.manualInvoke.call(this, true, "");
            this.off(".validation");
            this.each(function () {
                this.isValid = undefined;
                this.validation = undefined;
            });
            this.pop("off");
            return this;
        },
        invoke: function () {
            this.each(function () {
                if (typeof (this.validation.invoke) === "function") {
                    this.validation.invoke.apply($(this), arguments);
                }
            });
            return this;
        },
        manualInvoke: function (isValid, failMessage) {
            this.each(function () {
                var $this = $(this);
                this.isValid = isValid;
                _private.showValidation($this, failMessage);
            });
            return this;
        },
        //"once": an event name to bind to once-off, which will auto invoke the same validation type
        manualTypeInvoke: function (type, once) {
            var f = _private.getFunction(type);
            if (typeof (f) !== "function") {
                $.error("Unable to find validation function for validation type '" + type + "'");
                return this;
            }
            this.each(function () {
                this.validation.manualTypeInvoke = f;
                var $this = $(this);
                f.apply($this, arguments);
                if (typeof (once) === "string" && !this.isValid) {
                    $this.one(once,
                        function () {
                            this.validation.manualTypeInvoke.apply($(this), arguments);
                        });
                }
            });
            return this;
        },
        showFirst: function (offset) {
            //Scrolls to the element that is highest up on the page and that is hidden because of scrolling
            var top = 999999999, first = null, scrollTop = $(window).scrollTop();
            if (scrollTop === 0) {
                return this;
            }
            this.each(function () {
                var p = this.pop.popup;
                if (p.is(":visible")) {
                    var t = p.offset().top;
                    if (t < scrollTop && t < top) {
                        top = t;
                        first = p;
                    }
                }
            });
            if (first) {
                var t = typeof (offset) === "number" ? top - 20 + offset : top - 20;
                $("html,body").animate({ scrollTop: t }, 750);
            }
            return this;
        },
        reposition: function () {
            this.pop("reposition");
        }
    };

    var _private = {
        requiredText: function () {
            var failMsg = this.data("v-req");
            failMsg = failMsg ? failMsg : "This field is required";

            var textValue = _private.textNoSpaces(this);
            this[0].isValid = textValue.length > 0;
            _private.showValidation(this, failMsg);
            return this;
        },
        requiredEmail: function () {
            _private.requiredText.apply(this, arguments);
            if (!this[0].isValid) {
                return this;
            }
            _private.email.apply(this, arguments);
            return this;
        },
        email: function () {
            var e = this[0], eml = _private.textNoSpaces(this);
            if (eml.length === 0) {
                e.isValid = true;
                _private.showValidation(this, "");
                return this;
            }

            var matches = eml.match(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);
            e.isValid = matches !== null && matches.length === 1;

            var failMsg = this.data("v-email-format");
            failMsg = failMsg ? failMsg : "Incorrect email format";

            _private.showValidation(this, failMsg);
            return this;
        },
        numericRange: function () {
            var e = this[0], range = e.validation.settings.numericRange;
            if (typeof (range) === "undefined" ||
                typeof (range.min) === "undefined" ||
                typeof (range.max) === "undefined") {
                $.error('Numeric range values have not been specified for jQuery.validation');
            }
            _private.requiredText.apply(this, arguments);
            if (!e.isValid) {
                return this;
            }
            var val = _private.textNoSpaces(this),
                isNumeric = $.isNumeric(val);
            e.isValid = isNumeric ? parseFloat(val) >= range.min && parseFloat(val) <= range.max : false;
            _private.showValidation(this,
                "Value must be between " + range.min.toString() + " and " + range.max.toString());
            return this;
        },
        getFunction: function (type) {
            var f;
            switch (type) {
                case "email":
                    f = _private.email;
                    break;
                case "req-email":
                    f = _private.requiredEmail;
                    break;
                case "req-text":
                    f = _private.requiredText;
                    break;
                case "num-range":
                    f = _private.numericRange;
                    break;
            }
            return f;
        },
        showValidation: function (a, failMsg) {
            switch (a[0].validation.settings.as) {
                case 'icon':
                    _private.toggleIcon(a, failMsg);
                    break;
                case 'tooltip':
                    _private.toggleTooltip(a, failMsg);
                    break;
            }
        },
        toggleClass: function (a) {
            var e = a[0], cls = e.validation.settings.invalidClass;
            if (e.isValid) {
                a.removeClass(cls);
            } else {
                if (!a.hasClass(cls)) {
                    a.addClass(cls);
                }
            }
        },
        toggleIcon: function (a, msg) {
            if (typeof (a.data("validation-icon")) !== "undefined") {
                a.data("validation-icon").remove();
                a.removeData("validation-icon");
            };

            var e = a[0];

            _private.toggleClass(a);

            if (!e.isValid) {
                var c = _private.wrapElement(a, true), w = c.width(), h = c.outerHeight(), l = w - 18, t = (h / 2) - 7;

                icon = $("<a href='javascript:void(0);' title='" + msg + "' class='validation-icon' />");
                icon.css("top", t);
                icon.css("left", l);
                icon.appendTo(c);
                a.data("validation-icon", icon);
                icon.show(80).delay(100).hide(50).delay(100).show(50).delay(100).hide(50).delay(100).show(50);
            } else {
                _private.unwrapElement(a);
            }
        },
        toggleTooltip: function (a, failMsg) {
            _private.toggleClass(a);

            var e = a[0];
            if (!e.isValid) {
                a.data("v-msg", failMsg);
                a.pop("show");
            } else {
                a.pop("hide");
            }
        },
        getTooltipMsg: function () {
            return $(this).data("v-msg");
        },
        wrapElement: function (a, always) {
            if (!always && a.is("input,textarea")) {
                return;
            }
            var c = a.closest(".validation-container");
            if (c.length === 0) {
                a.wrap("<span class='validation-container'></span>");
            }
            return a.closest(".validation-container");
        },
        unwrapElement: function (a) {
            var c = a.closest(".validation-container");
            if (c.length > 0) {
                a.unwrap();
            }
        },
        textNoSpaces: function (a) {
            var e = a[0],
                pa = e.validation.settings.promptAttribute,
                prompt = pa.length > 0 ? a.attr(pa) : undefined,
                val = a.val();
            return prompt !== undefined && val === prompt ? "" : val.replace(/\s/g, "");
        }
    };

})(jQuery);

function isPageValid() {
    var isAllValid = true;
    $("[data-v-type]").each(function () {
        if (!this.validation) {
            return;
        }
        var $this = $(this);
        $this.validation("invoke");
        if (typeof (this.isValid) !== "undefined" && !this.isValid) {
            isAllValid = false;
        }
    });
    return isAllValid;
}

/********************************************DATERANGE JQUERY PLUGIN********************************************************/
(function ($) {
    $.fn.dateRange = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.dateRange');
        }
    };

    var methods = {
        init: function (options) {
            if (this.length < 2) {
                $.error('jQuery.dateRange requires two date controls');
            }
            if (options.toDateOffset) {
                options.toDateOffset = Math.abs(options.toDateOffset);
            }
            var items = this;
            this.each(function (index, element) {
                var $this = $(this), e = this;

                e.dateRange = {};
                e.dateRange.isFrom = index % 2 === 0;
                e.dateRange.isTo = index % 2 !== 0;
                e.dateRange.selectedDate = null;
                e.dateRange.changed = false;
                e.dateRange.currentMonth = -1;

                e.dateRange.settings = {};
                $.extend(e.dateRange.settings,
                    {
                        'minDate': new Date(),
                        'toDateOffset': 1,
                        'dateFormat': 'dd M yy',
                        'autoToDateFocus': true,
                        'autoOpenFromDate': false,
                        'showOtherMonths': true,
                        'selectOtherMonths': false,
                        'showAvailability': false,
                        'showClearDates': false,
                        'unavailableDates': $([]),
                        'onSelect': null,
                        'onClose': null,
                        'onClear': null,
                        'beforeShow': null
                    },
                    options);

                var s = e.dateRange.settings;
                s.minDate.setHours(0, 0, 0, 0);
                if (index % 2 === 0) {
                    e.dateRange.current = items.eq(index);
                    e.dateRange.other = items.eq(index + 1);
                } else {
                    e.dateRange.current = items.eq(index);
                    e.dateRange.other = items.eq(index - 1);
                    var fromDate = e.dateRange.other.datepicker("getDate"),
                        min = fromDate ? fromDate : s.minDate;
                    s.minDate = _private.addDays(min, s.toDateOffset);
                }

                $this.datepicker({
                    minDate: s.minDate,
                    maxDate: s.maxDate,
                    dateFormat: s.dateFormat,
                    showOtherMonths: s.showOtherMonths,
                    selectOtherMonths: s.selectOtherMonths,
                    onSelect: function () {
                        var $this = $(this), fromTo = this.dateRange.isFrom ? "from" : "to";
                        if (this.dateRange.isFrom) {
                            var fromDate = $this.datepicker("getDate"),
                                toMinDate = _private.addDays(fromDate, 1);
                            this.dateRange.other.datepicker("option", "minDate", toMinDate);
                            this.dateRange.other[0].dateRange.currentMonth = toMinDate.getMonth() + 1;
                        }

                        var date = $this.datepicker("getDate");

                        this.dateRange.changed = !_private.datesEqual(this.dateRange.selectedDate, date);
                        this.dateRange.selectedDate = date;

                        if (typeof (this.dateRange.settings.onSelect) === "function") {
                            this.dateRange.settings.onSelect.call($this, fromTo, date, this.dateRange.changed);
                        }
                    },
                    onClear: function () {
                    },
                    onClose: function () {
                        var $this = $(this),
                            fromTo = this.dateRange.isFrom ? "from" : "to",
                            changed = this.dateRange.changed,
                            toDateClosed;

                        this.dateRange.selectedDate = $this.datepicker("getDate");
                        this.dateRange.other[0].dateRange.selectedDate = this.dateRange.other.datepicker("getDate");

                        if (this.dateRange.isFrom) {
                            if (this.dateRange.settings.autoToDateFocus && changed) {
                                this.dateRange.other.datepicker("setDate", this.dateRange.other.datepicker("getDate"));
                                if (this.dateRange.other.is(':visible'))
                                    this.dateRange.other.datepicker("show");
                            }
                            toDateClosed = false;
                        } else {
                            //If the 'to' date is before the 'from' date or is null, set the default
                            var fromDate = this.dateRange.other[0].dateRange.selectedDate,
                                toDate = this.dateRange.selectedDate;
                            if (fromDate !== null && (toDate === null || fromDate > toDate)) {
                                $this.datepicker("setDate", _private.addDays(fromDate, 1));
                                changed = true;
                            }
                            toDateClosed = true;
                        }

                        this.dateRange.changed = false;
                        var date = $this.datepicker("getDate");
                        this.dateRange.currentMonth = date ? date.getMonth() + 1 : -1;

                        if (typeof (this.dateRange.settings.onClose) === "function") {
                            this.dateRange.settings.onClose.call($this,
                                fromTo,
                                date,
                                changed,
                                this.dateRange.other.datepicker("getDate"),
                                toDateClosed);
                        }

                        var el = document.getElementById("ModalOverlay");
                        if (el !== null) {
                            var cls = "show";
                            var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
                            el.className = el.className.replace(reg, ' ');
                        }
                    },
                    onChangeMonthYear: function (year, month, inst) {
                        //Ensure we always have a legend when the calendar redraws
                        if (this.dateRange.settings.showAvailability) {
                            _private.insertLegend(inst.dpDiv, this);
                        }
                        if (this.dateRange.settings.showClearDates) {
                            console.log("(Utlities) 1715: onChangeMonthYear inst.dpDiv-->" + inst.dpDiv + "this-->" + this);
                            _private.insertClearDates(inst.dpDiv, this);
                        }
                        this.dateRange.currentMonth = month;
                    },
                    beforeShow: function (input, inst) {
                        //Ensure we always have a legend when the calendar redraws
                        if (input.dateRange.settings.showAvailability) {
                            _private.insertLegend(inst.dpDiv, input);
                        }
                        if (this.dateRange.settings.showClearDates) {
                            console.log("(Utlities) 1726: beforeShow inst.dpDiv-->" + inst.dpDiv + "this-->" + this);
                            _private.insertClearDates(inst.dpDiv, this);
                        }
                        var date = input.dateRange.selectedDate;
                        input.dateRange.currentMonth = date !== null
                            ? date.getMonth() + 1
                            : $(input).datepicker("option", "minDate").getMonth() + 1;
                        var fromTo = this.dateRange.isFrom ? "from" : "to";
                        if (typeof (this.dateRange.settings.beforeShow) === "function") {
                            this.dateRange.settings.beforeShow.call($this, fromTo);
                        }

                    },
                    beforeShowDay: function (date) {
                        var min = $(this).datepicker("option", "minDate"),
                            selectable = date >= min && this.dateRange.currentMonth === date.getMonth() + 1,
                            noRealtimeAvailability = $('.NoRealtimeAvailability').length > 0;

                        if (!this.dateRange.settings.showAvailability || !selectable) {
                            return [true, ""];
                        }

                        var u = this.dateRange.settings.unavailableDates,
                            uLen = u.length,
                            cssClass = "available";

                        if (noRealtimeAvailability) {
                            cssClass = "onrequest";
                        }

                        for (var i = 0; i < uLen; i++) {
                            var unavailable = new Date(u[i]);
                            //Offset the to date by one
                            if (this.dateRange.isTo) {
                                unavailable = _private.addDays(unavailable, 1);
                            }
                            var isUnavailable = unavailable.valueOf() === date.valueOf() &&
                                this.dateRange.currentMonth === date.getMonth() + 1;
                            if (isUnavailable) {
                                cssClass = "unavailable";
                                selectable = false;
                                break;
                            }
                        }

                        return [selectable, cssClass];
                    }
                });

                var initial = $this.datepicker("getDate");
                var forceDates = document.getElementById("hdForceDates");
                if (initial) {
                    e.dateRange.selectedDate = initial;

                    if (forceDates !== null && forceDates.value === "true") {
                        this.dateRange.other[0].focus();
                        e.dateRange.currentMonth = initial.getMonth() + 1;
                    }
                    else {
                        e.dateRange.currentMonth = initial.getMonth() + 1;
                    }
                }
                else {
                    if (this.dateRange.settings.autoOpenFromDate) {
                        this.dateRange.other[0].focus();
                    }
                }
            });

            //Set up triggers (additional elements) to invoke each calendar show. E.g.: [{ from: 'selector' }, { to: 'selector' }]
            if (options.triggers && options.triggers.length) {
                for (i = 0; i < options.triggers.length; i++) {
                    var t = options.triggers[i], isFrom = t["from"], trigger = isFrom ? t["from"] : t["to"];
                    if (trigger) {
                        if (typeof (trigger) === "object") {
                            _private.registerTrigger.call(this, trigger, isFrom);
                        } else if (typeof (trigger) === "string") {
                            _private.registerTrigger.call(this, $(trigger), isFrom);
                        }
                    }
                }
            }

            return this;
        },
        pickerClosed: function () {
            var data = _private.getData(this);
            return data.pickerClosed;
        },
        getNights: function (returnType) {
            var data = _private.getData(this);
            if (data.selectedFrom === null || data.selectedTo === null) {
                return 0;
            }
            var ms = Math.abs(data.selectedFrom.getTime() - data.selectedTo.getTime()),
                nights = Math.ceil(ms / 86400000);
            return returnType === "string" ? nights.toString() + " Night" + (nights !== 1 ? "s" : "") : nights;
        },
        getDateString: function (format) {
            var data = _private.getData(this);
            if (data.selectedFrom === null || data.selectedTo === null) {
                return '';
            }
            var datesSelected = data.selectedFrom + ' - ' + data.selectedTo;
            return datesSelected;
        },
        unavailableSelected: function () {
            var data = _private.getData(this);
            if (!data.showAvailability ||
                !data.unavailableDates ||
                !data.unavailableDates.length ||
                data.unavailableDates.length === 0 ||
                data.selectedFrom === null ||
                data.selectedTo === null) {
                return false;
            }
            var result = false;
            for (var i = 0; i < data.unavailableDates.length; i++) {
                var unavailable = new Date(data.unavailableDates[i]);
                var to = _private.addDays(data.selectedTo, -1);
                if (_private.dateExistsInRange(unavailable, data.selectedFrom, to)) {
                    result = true;
                    break;
                }
            }
            return result;
        }
    };

    var _private = {
        getData: function (context) {
            var f = context[0],
                t = context[1],
                s = f.dateRange.settings,
                a = s.showAvailability,
                u = s.unavailableDates,
                tc = t.dateRange.isTo;
            return {
                from: f,
                to: t,
                selectedFrom: $(f).datepicker("getDate"),
                selectedTo: $(t).datepicker("getDate"),
                showAvailability: a,
                unavailableDates: u,
                pickerClosed: tc
            };
        },
        datesEqual: function (a, b) {
            return a !== null && b !== null && a.valueOf() === b.valueOf();
        },
        dateExistsInRange: function (date, start, end) {
            var s = start;
            while (s <= end) {
                if (date.valueOf() === s.valueOf()) {
                    return true;
                }
                s = _private.addDays(s, 1);
            }
            return false;
        },
        insertLegend: function (container, input) {
            if (input.dateRange.showTimeout) {
                clearTimeout(input.dateRange.showTimeout);
            }
            var legend = container.find(".calendar-legend");
            legend.remove();
            input.dateRange.showTimeout = setTimeout(function () {
                var noRealtimeAvailability = $('.NoRealtimeAvailability').length > 0;
                if (noRealtimeAvailability) {
                    $(
                        '<div class=\"calendar-legend\"><ul><li class=\"calendar-legend-onrequest\"><span>&nbsp;</span>On Request</li><li class=\"calendar-legend-unavailable\">Not Available</li></ul></div>')
                        .appendTo(container);
                } else {
                    $(
                        '<div class=\"calendar-legend\"><ul><li class=\"calendar-legend-available\">Available</li><li class=\"calendar-legend-unavailable\">Not Available</li></ul></div>')
                        .appendTo(container);
                }

            },
                20);
        },
        insertClearDates: function (container, input) {
            console.log("(Utlities) 1908 insertClearDates container-->" + container + "input -->" + input);
            console.log("(Utlities) 1908 insertClearDates Current Value-->" + input.dateRange.current.val() + "Other Value-->" + input.dateRange.other.val());
            if ((input.dateRange.current.val() !== "Check-in" && input.dateRange.current.val() !== "") ||
                (input.dateRange.other.val() !== "Check-out" && input.dateRange.other.val() !== "")) {
                if (input.dateRange.showTimeout) {
                    clearTimeout(input.dateRange.showTimeout);
                }
                var calendarClear = container.find(".calendar-clear");
                calendarClear.remove();
                input.dateRange.showTimeout = setTimeout(function () {
                    $('<a class=\"calendar-clear\">Clear dates</a>').appendTo(container);
                    var calendarClearLinks = document.querySelectorAll(".calendar-clear");

                    for (var i = 0; i < calendarClearLinks.length; i++) {
                        $(calendarClearLinks[i]).on("click", function (e) {
                            input.dateRange.current.datepicker("hide");
                            input.dateRange.other.datepicker("hide");
                            input.dateRange.current.datepicker('setDate', null);
                            input.dateRange.other.datepicker('setDate', null);
                            deleteCookie("search.args");
                            if (typeof (input.dateRange.settings.onClear) === "function") {
                                input.dateRange.settings.onClear.call();
                            }
                        });
                    }
                }, 20);
            }
        },
        addDays: function (date, add) {
            return new Date(date.valueOf() + (86400000 * add));
        },
        registerTrigger: function (trig, isFrom) {
            var item = isFrom ? this[0] : this[1];
            trig.on("click",
                function () {
                    $(item).datepicker("show");
                });
        }
    };

})(jQuery);

//Supporting functions
function OpenEnquiry(DivTag, enquiryid) {
    var newUrl = '/c/Reservations/Enquiry.aspx?e=' + enquiryid;

    var h = $(window).height() * 0.95;

    $(DivTag).urlDialog('show',
        {
            url: newUrl,
            height: h,
            width: 1550,
            title: "Enquiry: ",
            scroll: "auto"
        });
}

//This opens both new or existing Activities
function OpenActivity(DivTag, activityId, enquiryId, activityTypeId, contactId, spId, closingFunction) {
    var newUrl = '/lib/hbef/management/activityedit.aspx?UseBlankMaster=true';


    if (activityId !== null) {
        if (isNaN(activityId) === false && activityId !== '') {
            newUrl += '&activityid=' + activityId;
        }
    }

    if (enquiryId !== null) {
        if (isNaN(enquiryId) === false && enquiryId !== '') {
            newUrl += '&enquiryid=' + enquiryId;
        }
    }

    if (activityTypeId !== null) {
        if (isNaN(activityTypeId) === false && activityTypeId !== '') {
            newUrl += '&typeid=' + activityTypeId;
        }
    }

    if (contactId !== null) {
        if (isNaN(contactId) === false && contactId !== '') {
            newUrl += '&cid=' + contactId;
        }
    }

    if (spId !== null) {
        if (isNaN(spId) === false && spId !== '') {
            newUrl += '&spid=' + spId;
        }
    }

    $(DivTag).urlDialog('show',
        {
            url: newUrl,
            height: 560,
            width: 410,
            title: "Ticket: ",
            afterClose: closingFunction,
            scroll: "no"
        });
}


/********************************************AUTOCOMPLETE********************************************************/

var _acMatchStart = new RegExp("#!#", "g");
var _acMatchEnd = new RegExp("!#!", "g");

// e = jQuery-obtained element; 
// s = settings: position, onFocus callback, onSelect callback, itemTypes string (p|l|pl|c|a|e, etc.), showCategories (Never/Always/IfMultiple)
//searchType (default = null|review)
function registerAutoComplete(e, s) {

    var haveMultiple = false;

    var settings = $.extend({
        position: { my: "right top", at: "right bottom", of: "#pnlSearch", offset: "203 15", collision: "none" },
        onOpen: null, //function accepts two params: (1)element registered with autocomplete; (2)UL that forms the autocomplete list.
        onClose: null,
        onFocus: null, //return true/false from callback. Return false to override default jQuery UI functionality.
        onSelect: null, //return true/false from callback. Return false to override default jQuery UI functionality.
        onSearchBegin: null,
        onSearchEnd: null,
        showCategories: "Always",
        autoSizeToWindow: true,
        trackWindowResize: false
    }, s);

    var queryString = "";
    if (s.filter !== null) {
        queryString = "?d=" + s.filter;
    }

    e.attr("maxlength", "30");
    e.data("autocomplete-settings", settings);
    e.data("renderMenu", function (ul, items) {
        var self = this, currentCategory = "";

        $.each(items, function (index, item) {
            if (item.category !== currentCategory) {
                var liCategory = $("<li class='ui-autocomplete-category'>" + item.category + "</li>");
                ul.append(liCategory);
                if (currentCategory.length === 0) {
                    liCategory.css("margin-top", "0");
                }
                currentCategory = item.category;
            }
            self._renderItem(ul, item);
        });
    });

    e.autocomplete(
        {
            delay: 300,
            minLength: 2,
            position: settings.position,
            open: function (event, ui) {
                var el = $(event.target), s = el.data("autocomplete-settings"), ac = el.data("autocomplete"),
                    txt = ac.element.eq(0), ul = ac.menu.element.eq(0), win = $(window);

                if (s.trackWindowResize) {
                    var nsEvent = "resize." + txt.attr("id");
                    win.on(nsEvent, function (event) {
                        ul.position(s.position);
                    });
                }

                if (s.autoSizeToWindow) {
                    var contentHeight = 0, clientHeight = win.height(), ulOffset = ul.offset(), scrollTop = win.scrollTop(),
                        actualTop = ulOffset.top - scrollTop, remainingSpace = clientHeight - actualTop - 5;

                    ul.children().each(function () {
                        contentHeight += $(this).outerHeight();
                    });
                    ul.height(contentHeight > remainingSpace ? remainingSpace : contentHeight);
                }

                if (typeof (s.onOpen) === "function") {
                    return s.onOpen(txt, ul);
                }
            },
            close: function (event, ui) {
                var el = $(event.target), s = el.data("autocomplete-settings"), ac = el.data("autocomplete"), txt = ac.element.eq(0);
                if (s.trackWindowResize) {
                    var nsEvent = "resize." + txt.attr("id");
                    $(window).off(nsEvent);
                }
                if (typeof (s.onClose) === "function") {
                    var ace = el.data("autocomplete");
                    return s.onClose(ace.element.eq(0), ace.menu.element.eq(0));
                }
            },
            focus: function (event, ui) {
                var el = $(event.target), s = el.data("autocomplete-settings");
                if (typeof (s.onFocus) === "function") {
                    return s.onFocus(ui.item, el);
                }
            },
            select: function (event, ui) {
                //if (ui.item.unmatched) {
                //    return false;
                //}
                var el = $(event.target), s = el.data("autocomplete-settings");
                if (typeof (s.onSelect) === "function") {
                    return s.onSelect(ui.item, el);
                }
            },
            source: function (request, response) {
                var el = this.element, s = el.data("autocomplete-settings");

                if (typeof (s.onSearchStart) === "function") {
                    var ac = el.data("autocomplete");
                    s.onSearchStart(ac.element.eq(0), ac.menu.element.eq(0));
                }

                $.ajax({
                    url: "/site/httphandlers/suggest.ashx" + queryString,
                    dataType: "json",
                    data: {
                        term: request.term,
                        search: s.searchType,
                        d: s.itemTypes
                    },
                    success: function (data) {
                        if (data) {
                            haveMultiple = data.length > 1;
                            var items = new Array();
                            for (i = 0; i < data.length; i++) {
                                items.push(data[i]);
                            }
                            if (s.showCategories === "Always" || (s.showCategories === "IfMultiple" && haveMultiple)) {
                                el.data("autocomplete")._renderMenu = el.data("renderMenu");
                            }
                            response(items);
                        }
                    },
                    complete: function () {
                        if (typeof (s.onSearchEnd) === "function") {
                            var ac = el.data("autocomplete");
                            s.onSearchEnd(ac.element.eq(0), ac.menu.element.eq(0));
                        }
                    }
                });
            }
        });

    if (e.data("autocomplete-prompt")) {
        e.val(e.data("autocomplete-prompt"));
        e.focus(function () {
            var $this = $(this);
            if ($this.val() === $this.data("autocomplete-prompt")) {
                $this.val('');
            }
        }).blur(function () {
            var $this = $(this);
            if ($this.val().length === 0) {
                $this.val($this.data("autocomplete-prompt"));
            }
        }).mouseup(function () {
            $(this).select();
        });
    }
}

/****************************************************************************************************************************/
function ListingOverview() {
    this.requestManager = null;
    this.shortDescMaxLength = 200;
    this.shortDescrecursiveElement = "div.ShortDescription p";

    var parent = this;

    this.Init = function () {
        parent.LazyLoadImg();
        parent.requestManager = Sys.WebForms.PageRequestManager.getInstance();
        parent.requestManager.add_initializeRequest($ListingOverview.initializeRequest);
        parent.requestManager.add_pageLoaded($ListingOverview.pageLoaded);
        parent.requestManager.add_endRequest($ListingOverview.endRequest);
        shortenText(parent.shortDescrecursiveElement, parent.shortDescMaxLength);
    };

    this.initializeRequest = function (sender, e) {
        $('div.SearchResultsModalOverlay').height($('div.RightContent').height());
        parent.toggleProgressFilm(true);
    };

    this.endRequest = function (sender, e) {

        parent.toggleProgressFilm(false);

        shortenText(parent.shortDescrecursiveElement, parent.shortDescMaxLength);

        parent.LazyLoadImg();

        $('ul.Tags').each(function () {
            hideSecondlineTags(this);
        });
    };

    this.pageLoaded = function (sender, e) {
        parent.toggleProgressFilm(false);
    };

    this.toggleProgressFilm = function (on) {
        if (on) {
            $("#Main_uppResults").show();
        } else {
            $("#Main_uppResults").hide();
        }
    };

    this.LazyLoadImg = function () {
        lazyLoadListingImages();
    };
}

function lazyLoadListingImages() {
    $(".SearchListing .ListingThumbnail a img:not(img[data-remote-url])").lazyload({ threshold: 100 });
    $("#Main_uppResults").hide();
}

/* CLICK-ONCE BUTTON - START */
var snSubmitCount = 0;
var snSubmittedBy = null;

function snClickOnce(btn, msg, valGroup) {
    if (snSubmitCount > 0 || validatePage(valGroup) === false) {
        return false;
    }
    var b = $(btn);
    b.css("padding", "2px 8px").val((msg === null || msg === 'undefined') ? 'Processing...' : msg)
        .attr('disabled', 'disabled');
    snSubmittedBy = b;
}

function snOnEndPgAsnqReq() {
    snSubmitCount = 0;
}

function snCallback(f, a) {
    if (f && typeof f === 'function') {
        if (a === undefined) {
            f();
        } else {
            f(a);
        }
    }
}

function snSubmitOnce() {
    if (snSubmitCount === 0) {
        snSubmitCount++;
        return true;
    } else {
        if (snSubmittedBy) {
            var msg = snSubmittedBy.data('snResubMsg');
            var cb = snSubmittedBy.data('snResubCB');
            if (msg && msg.toString().length > 0) {
                alert(msg);
            }
            snCallback(cb);
        }
        return false;
    }
}

//$(function () {
//    //Override item rendering
//    if (typeof $.ui === "object") {
//        $.ui.autocomplete.prototype._renderItem = function (ul, item) {
//            //item.label = item.Title.replace(_acMatchStart, "<span class='ac-match'>");
//            //item.label = item.Title.replace(_acMatchEnd, "</span>");

//            item.label = "<span class='ac-match'>" + item.Title + "</span>";

//            return $("<li></li>")
//                .data("item.autocomplete", item)
//                .append("<a>" + item.Title + "</a>")
//                .appendTo(ul);
//        };
//    }

//    if (typeof Sys !== 'undefined') {
//        if (Sys.WebForms) {
//            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(snOnEndPgAsnqReq);
//        }
//    }
//    $(window).unload(function () {
//        if (snSubmittedBy) {
//            snSubmittedBy.removeAttr('disabled');
//        }
//    });
//});
/* CLICK-ONCE BUTTON - END */

function setCookie(c, v, e) {
    var d = new Date();
    d.setDate(d.getDate() + e);
    var cv = escape(v) + ((e === null) ? "" : "; expires=" + d.toUTCString() + "; path=/");
    document.cookie = c + "=" + cv;
}

function getCookie(c) {
    var i, x, y, a = document.cookie.split(";");
    for (i = 0; i < a.length; i++) {
        x = a[i].substr(0, a[i].indexOf("="));
        y = a[i].substr(a[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x === c) {
            return unescape(y);
        }
    }
}

function deleteCookie(name) {
    document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;  path=/;";
}

function Loader() {
    var t = this;

    this.LoaderDiv = "#snLoaderOverlay";
    this.IconToShow = "light";

    this.Init = function () {

    };

    this.CreateNewLoaderDiv = function (loaderDiv) {
        $("body").append("<div id=\"" + loaderDiv + "\"/ class=\"snLoaderOverlay\">");
        t.LoaderDiv = "#" + loaderDiv;
        $(t.LoaderDiv).css({ "z-index": 5 });
    };

    this.SetDimensions = function (d, bgColor) {
        $(t.LoaderDiv).removeClass("dark");

        if (bgColor === "dark") {
            $(t.LoaderDiv).addClass("dark");
        }
        $(t.LoaderDiv).css({ 'top': (d.top + 1), 'left': (d.left + 1), 'height': d.height, 'width': d.width });
    };

    this.elementFullSize = function (el) {
        return r = {
            height: el.height() + parseInt(el.css("padding-top"), 10) + parseInt(el.css("padding-bottom"), 10),
            width: el.width() + parseInt(el.css("padding-left"), 10) + parseInt(el.css("padding-right"), 10)
        }
    };

    this.Show = function (showSpeed, hideIcon, fullPage) {
        t.ShowIcon();
        $(t.LoaderDiv).show(showSpeed);
        if (typeof hideIcon === "boolean" && hideIcon === true) {
            t.HideIcon();
        }
        if (typeof fullPage === "boolean" && fullPage === true) {
            $(t.LoaderDiv).css("background-attachment", "fixed");
        } else {
            $(t.LoaderDiv).css("background-attachment", "scroll");
        }

    };

    this.Hide = function () {
        t.UnRoundCorners();
        $(t.LoaderDiv).hide();
    };

    this.ShowAvailability = function () {
        var el = $("#divRoomInfo");
        var S = this.elementFullSize(el);
        var O = el.offset();
        this.SetDimensions({ 'top': O.top, 'left': O.left, 'height': S.height - 2, 'width': S.width - 2 });
        this.Show();
    }

    this.ShowFullPage = function (showSpeed, hideIcon) {
        this.SetDimensions({ 'top': 0, 'left': 0, 'height': $(document).height(), 'width': $(document).width() });
        this.Show(showSpeed, hideIcon, true);
    }

    this.ShowDarkFullPage = function (showSpeed, hideIcon) {
        this.IconToShow = "dark";
        this.SetDimensions({ 'top': -1, 'left': -1, 'height': $(document).height(), 'width': $(document).width() },
            "dark");
        this.Show(showSpeed, hideIcon, true);
    }

    this.OverlayElement = function (el) {
        var dimension = t.elementFullSize(el);
        var O = el.offset();
        this.SetDimensions({
            'top': O.top,
            'left': O.left,
            'height': dimension.height - 2,
            'width': dimension.width - 2
        });
        this.Show();
    }

    this.ShowIcon = function () {
        var icon = this.IconToShow === "light" ? "/images/ajax-loader.gif" : "/res/img/loading1.gif";
        $(t.LoaderDiv).css({ 'background-image': "url(" + location.protocol + "//" + location.hostname + icon + ")" });
    }
    this.HideIcon = function () {
        $(t.LoaderDiv).css({ 'background-image': "none" });
    }

    this.RoundCorners = function (d) {
        $(t.LoaderDiv).css({ 'border-radius': '10px' });
    };

    this.UnRoundCorners = function (d) {
        $(t.LoaderDiv).css({ 'border-radius': '0' });
    };


};

var $Loader = new Loader();
$Loader.Init();

/**********************************************Promotions on enquiries********************************************************/
$(document).on("click",
    "a.ShowMore",
    function (e) {
        e.preventDefault();
        $(this).parent().hide().parent().parent().find("span.Invisible").show();
    });

function arrivaldate() {
    if (getStartDatePicker() !== null) {

        return getStartDatePicker().get_selectedDate();
    }
    return null;
}

function departureDate() {
    if (getDepartureDatePicker() !== null) {

        return getDepartureDatePicker().get_selectedDate();
    }
    return null;
}

function getDateOnPageLoad(datePicker) {
    var dateIn = datePicker.val();
    var dateInDate;
    if (dateIn !== null) {
        dateInDate = this.parseToDateFormat(dateIn);
        if (dateInDate !== null) {

            return dateInDate;

        }
        return false;
    }
    return false;

}

function onArrivalDatePickerDateChanged() {
    if (arrivaldate().valueOf() >= departureDate().valueOf()) {
        var nextDayMs = arrivaldate().valueOf() + 86400000;

        getDepartureDatePicker().set_selectedDate(new Date(nextDayMs));
    }
    GetPromotion();
}

function onDepartureDatePickerDateChanged() {

    if (arrivaldate().valueOf() >= departureDate().valueOf()) {

        var previousDayMs = departureDate().valueOf() - 86400000;
        getStartDatePicker().set_selectedDate(new Date(previousDayMs));

    }
    GetPromotion();
}

function parseToDateFormat(input) {

    if (input !== null && input !== "") {
        var parts = input.match(/(\d+)/g);
        return new Date(parts[0], parts[1] - 1, parts[2]);
    }
    return false;
}

function parseDate(input) {

    if (input !== null && input !== "") {
        var weekday = new Array(7);
        weekday[0] = "Sunday";
        weekday[1] = "Monday";
        weekday[2] = "Tuesday";
        weekday[3] = "Wednesday";
        weekday[4] = "Thursday";
        weekday[5] = "Friday";
        weekday[6] = "Saturday";
        var n = new Date(input).getDay();
        return weekday[n] + ', ' + $.datepicker.formatDate('dd MM, yy', new Date(input));
    }
    return null;
}


function GetPromotion() {
    if ($("[id$='hfPromotions']").length === 0) {
        return;
    }

    if ($("[id$='hfPromotions']").val() !== '') {
        $('#divPromotions').empty();
        var announce = 'These discounts are currently available during your stay.';
        var p = '<p class="red">';
        var cp = '</p>';
        var s = "<strong>";
        var sc = "</strong>";
        var msg = '';
        $.each($.parseJSON($("[id$='hfPromotions']").val()),
            function () {

                msg = msg + BuildProperties(this);
            });
        if (msg !== '') {
            msg = p + s + announce + sc + cp + msg;
            $('#divPromotions').append(msg);
        }
    }
}

function BuildProperties(jsonObject) {

    var promoStartDate;
    var promoEndDate;
    var promoTitle;
    var promoDescription;
    var promoDiscount;
    var arrival;
    var depart;
    if (arrivaldate() !== null) {
        arrival = arrivaldate().valueOf();
    } else {
        arrival = getDateOnPageLoad($("[id$='arrivaldate']"));
    }
    if (departureDate() !== null) {
        depart = departureDate().valueOf();
    } else {
        depart = getDateOnPageLoad($("[id$='departuredate']"));
    }

    $.each(jsonObject,
        function (key, val) {

            if (key === "StartDate") {
                promoStartDate = val;
            }
            if (key === "EndDate") {
                promoEndDate = val;
            }
            if (key === "Title") {
                promoTitle = val;
            }
            if (key === "Conditions") {
                promoDescription = val;
            }
            if (key === "Discount") {
                promoDiscount = val;
            }
        });

    if (
        (arrival >= promoStartDate && arrival <= promoEndDate) ||
        (depart >= promoStartDate && depart <= promoEndDate) ||
        (arrival <= promoStartDate && depart >= promoEndDate)
    ) {

        var p = '<p>';
        var cp = '</p>';
        var br = "<br />";
        var s = "<strong>";
        var sc = "</strong>";
        var more = "<span>&nbsp;-&nbsp;<a href=\"javascript:void(0);\" class=\"ShowMore\">More Details</a></span>";
        var spanHide = "<span class=\"Invisible\" >";
        var spanc = "</span>";
        var msg = "<div>" + p + s + promoTitle + sc + more + cp;
        msg = msg +
            spanHide +
            p +
            promoDescription +
            cp +
            p +
            'From ' +
            parseDate(promoStartDate) +
            br +
            'To ' +
            parseDate(promoEndDate) +
            br +
            s +
            'Discount ' +
            promoDiscount +
            '%' +
            sc +
            cp +
            spanc +
            "</div>";
        return msg;
    }
    return '';
}

function getScrollTop() {
    var scrollY = 0;
    if (document.documentElement && document.documentElement.scrollTop) {
        scrollY = document.documentElement.scrollTop;
    } else if (document.body && document.body.scrollTop) {
        scrollY = document.body.scrollTop;
    } else if (window.pageYOffset) {
        scrollY = window.pageYOffset;
    } else if (window.scrollY) {
        scrollY = window.scrollY;
    }
    return scrollY;
}

// Gets Client Height
function getClientHeight() {

    var height = 0;
    if (document.documentElement && document.documentElement.clientHeight) {
        height = document.documentElement.clientHeight;
    } else if (document.body && document.body.clientHeight) {
        height = document.body.clientHeight;
    } else if (window.innerHeight) {
        height = window.innerHeight - 18;
    }
    return height;
}

function scrollToElement(el, offset, delay) {
    if (typeof $(el) !== "undefined" && typeof $(el).offset() !== "undefined") {
        var top = $(el).offset().top;
        if (typeof offset === "number") top += offset;
        var sdelay = sdelay || 500;
        $("body, html").animate({ scrollTop: top }, sdelay);
    }

}

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) {
        "use strict";
        if (this === null) {
            throw new TypeError();
        }
        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0) {
            return -1;
        }
        var n = 0;
        if (arguments.length > 1) {
            n = Number(arguments[1]);
            if (n !== n) { // shortcut for verifying if it's NaN
                n = 0;
            } else if (n !== 0 && n !== Infinity && n !== -Infinity) {
                n = (n > 0 || -1) * Math.floor(Math.abs(n));
            }
        }
        if (n >= len) {
            return -1;
        }
        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
        for (; k < len; k++) {
            if (k in t && t[k] === searchElement) {
                return k;
            }
        }
        return -1;
    }
}

///Returns result object of Success:bool and Value:string
function GetSetting(category, name, callback) {
    var ajaxData = { action: "get", category: category, name: name };
    $.ajax({
        url: "/site/httphandlers/SettingHandler.ashx",
        dataType: 'json',
        type: 'POST',
        data: ajaxData,
        success: function (result) {
            callback(result);
        }
    });
};

///Returns result object of Success:bool and Value:string = value in cach after update 
function SetSetting(category, name, newValue, callback) {
    var ajaxData = { action: "set", category: category, name: name, value: newValue };
    $.ajax({
        url: "/site/httphandlers/SettingHandler.ashx",
        dataType: 'json',
        type: 'POST',
        data: ajaxData,
        success: function (result) {
            callback(result);
        }
    });
};

///Returns true if the underlkying session is logged in and staff - ToDO Plumb in roles
function CanSetSetting(callback) {
    var ajaxData = { action: "canset" };
    $.ajax({
        url: "/site/httphandlers/SettingHandler.ashx",
        dataType: 'json',
        type: 'POST',
        data: ajaxData,
        success: function (result) {
            callback(result.Success);
        }
    });
};

function toUrlValue(value) {
    if (!value || !value.length || value.length === 0) {
        return "";
    }

    var r = $.trim(value).replace(/[\&\+]/g, "and");
    r = r.replace("@", "at");
    r = r.replace(/[áâãäàÀÁÂÃÄ]/g, "a");
    r = r.replace(/[èéêëÈÉÊË]/g, "e");
    r = r.replace(/[ìíîïÌÍÎÏ]/g, "i");
    r = r.replace(/[òóôõöÒÓÔÕÖ]/g, "o");
    r = r.replace(/[ùúûüÙÚÛÜ]/g, "u");
    r = r.replace(/[^a-zA-Z0-9-\s]/g, " ");
    r = r.replace(/\s+/g, "-");
    return r.toLowerCase();
}

LazyLoad = function () {
    var d = document, head, pending = {}, queue = { css: [], js: [] }, ua;

    function createNode(name, attrs) {
        var node = d.createElement(name), attr;
        for (attr in attrs) {
            if (attrs.hasOwnProperty(attr)) {
                node.setAttribute(attr, attrs[attr]);
            }
        }
        return node;
    }

    function finish(type) {
        var p = pending[type];
        if (!p) {
            return;
        }
        var callback = p.callback, urls = p.urls;
        urls.shift();
        if (!urls.length) {
            if (callback) {
                callback.call(p.scope || window, p.obj);
            }
            pending[type] = null;
            if (queue[type].length) {
                load(type);
            }
        }
    }

    function getUserAgent() {
        if (ua) {
            return;
        }
        var nua = navigator.userAgent, pF = parseFloat, m;
        ua = { gecko: 0, ie: 0, opera: 0, webkit: 0 };
        m = nua.match(/AppleWebKit\/(\S*)/);
        if (m && m[1]) {
            ua.webkit = pF(m[1]);
        } else {
            m = nua.match(/MSIE\s([^;]*)/);
            if (m && m[1]) {
                ua.ie = pF(m[1]);
            } else if ((/Gecko\/(\S*)/).test(nua)) {
                ua.gecko = 1;
                m = nua.match(/rv:([^\s\)]*)/);
                if (m && m[1]) {
                    ua.gecko = pF(m[1]);
                }
            } else if (nua.indexOf("Opera")) {
                ua.opera = pF(m[1]);
            }
        }
    }

    function load(type, urls, callback, obj, scope) {
        var i, len, node, p, url;
        getUserAgent();
        if (urls) {
            urls = urls.constructor === Array ? urls : [urls];
            if (type === 'css' || ua.gecko || ua.opera) {
                queue[type].push({ urls: [].concat(urls), callback: callback, obj: obj, scope: scope });
            } else {
                for (i = 0, len = urls.length; i < len; ++i) {
                    queue[type].push({
                        urls: [urls[i]],
                        callback: i === len - 1 ? callback : null,
                        obj: obj,
                        scope: scope
                    });
                }
            }
        }
        if (pending[type] || !(p = pending[type] = queue[type].shift())) {
            return;
        }
        head = head || d.getElementsByTagName('head')[0];
        urls = p.urls;
        for (i = 0, len = urls.length; i < len; ++i) {
            url = urls[i];
            if (type === 'css') {
                node = createNode('link', { href: url, rel: 'stylesheet', type: 'text/css' });
            } else {
                node = createNode('script', { src: url });
            }
            if (ua.ie) {
                node.onreadystatechange = function () {
                    var readyState = this.readyState;
                    if (readyState === 'loaded' || readyState === 'complete') {
                        this.onreadystatechange = null;
                        finish(type);
                    }
                };
            } else if (type === 'css' && (ua.gecko || ua.webkit)) {
                setTimeout(function () { finish(type); }, 50 * len);
            } else {
                node.onload = node.onerror = function () { finish(type); };
            }
            head.appendChild(node);
        }
    }

    return {
        css: function (urls, callback, obj, scope) { load('css', urls, callback, obj, scope); },
        js: function (urls, callback, obj, scope) { load('js', urls, callback, obj, scope); }
    };
}();


/*
 * Lazy Load - jQuery plugin for lazy loading images
 *
 * Copyright (c) 2007-2009 Mika Tuupola
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Project home:
 *   http://www.appelsiini.net/projects/lazyload
 *
 * Version:  1.5.0
 *
 */
(function ($) {

    $.fn.lazyload = function (options) {
        var settings = {
            threshold: 0,
            failurelimit: 0,
            event: "scroll",
            effect: "show",
            placeholder: "",
            container: window
        };

        if (options) {
            $.extend(settings, options);
        }

        /* Fire one scroll event per scroll. Not one scroll event per image. */
        var elements = this;

        if ("scroll" == settings.event) {
            $(settings.container).bind("scroll", function (event) {

                var counter = 0;
                elements.each(function () {
                    if ($.abovethetop(this, settings) ||
                        $.leftofbegin(this, settings)) {
                        /* Nothing. */
                    } else if (!$.belowthefold(this, settings) &&
                        !$.rightoffold(this, settings)) {
                        $(this).trigger("appear");
                    } else {
                        if (counter++ > settings.failurelimit) {
                            return false;
                        }
                    }
                });
                /* Remove image from array so it is not looped next time. */
                var temp = $.grep(elements, function (element) {
                    return !element.loaded;
                });
                elements = $(temp);
            });
        }

        this.each(function () {
            var self = this;

            /* Save original only if it is not defined in HTML. */
            if (undefined == $(self).attr("original")) {
                $(self).attr("original", $(self).attr("src"));
            }

            if ("scroll" != settings.event ||
                    undefined == $(self).attr("src") ||
                    settings.placeholder == $(self).attr("src") ||
                    ($.abovethetop(self, settings) ||
                     $.leftofbegin(self, settings) ||
                     $.belowthefold(self, settings) ||
                     $.rightoffold(self, settings))) {

                if (settings.placeholder) {
                    $(self).attr("src", settings.placeholder);
                } else {
                    $(self).removeAttr("src");
                }
                self.loaded = false;
            } else {
                //self.loaded = true;
            }

            /* When appear is triggered load original image. */
            $(self).one("appear", function () {
                if (!this.loaded) {
                    $("<img />")
                        .bind("load", function () {
                            $(self)
                                .hide()
                                .attr("src", $(self).attr("original"))
                                [settings.effect](settings.effectspeed);
                            self.loaded = true;
                        })
                        .bind("error", function () { $(self).attr("src", settings.placeholder); })
                        .attr("src", $(self).attr("original"));
                };
            });

            /* When wanted event is triggered load original image */
            /* by triggering appear.                              */
            if ("scroll" != settings.event) {
                $(self).bind(settings.event, function (event) {
                    if (!self.loaded) {
                        $(self).trigger("appear");
                    }
                });
            }
        });

        /* Force initial check if images should appear. */
        $(settings.container).trigger(settings.event);

        return this;

    };

    /* Convenience methods in jQuery namespace.           */
    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */

    $.belowthefold = function (element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).height() + $(window).scrollTop();
        } else {
            var fold = $(settings.container).offset().top + $(settings.container).height();
        }
        return fold <= $(element).offset().top - settings.threshold;
    };

    $.rightoffold = function (element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).width() + $(window).scrollLeft();
        } else {
            var fold = $(settings.container).offset().left + $(settings.container).width();
        }
        return fold <= $(element).offset().left - settings.threshold;
    };

    $.abovethetop = function (element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).scrollTop();
        } else {
            var fold = $(settings.container).offset().top;
        }
        return fold >= $(element).offset().top + settings.threshold + $(element).height();
    };

    $.leftofbegin = function (element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).scrollLeft();
        } else {
            var fold = $(settings.container).offset().left;
        }
        return fold >= $(element).offset().left + settings.threshold + $(element).width();
    };
    /* Custom selectors for your convenience.   */
    /* Use as $("img:below-the-fold").something() */

    $.extend($.expr[':'], {
        "below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
        "above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
        "right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
        "left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
    });

})(jQuery);

/*
DynamicImages is able to invoke the remote url of any image elements marked with the 'data-remote-url' attribute (which contains the url)
and dynamically load those images and fit them automatically according to the size of each image element's container.

Note: for this to function, the container of the image element/s must have overflow = hidden.

Parameters:
-----------
  containerSelector   : the jQuery string selector that refers to the containing element of the image/s, 
                        from which can be determined the desired size of the image/s.
*/

(function ($) {
    $.fn.dynamicImages = function (containerSelector) {
        if (typeof (containerSelector) != "string" || containerSelector.length == 0) {
            $.error('A valid image container selector string is required for jQuery.dynamicImages');
        }
        _methods.init.apply(this, arguments);
    };

    var _image = {
        calculate: function (image, container) {
            var
            ch = container.height() < 109 ? 109 : container.height(),
            cw = container.width() < 160 ? 160 : container.width(),                    
            //ch = container.height(),
            //cw = container.width(),

            nh = image.naturalHeight,
            nw = image.naturalWidth,
            rh = nh / ch,
            rw = nw / cw, //dimensions relative to the equivalent container dimensions (relative height/relative width)
            fullHeight = rh < rw ? ch : nh / rw,
            fullWidth = rw < rh ? cw : nw / rh; //full display dimensions

            return {
                h: nh < 110 ? 110 : nh,
                w: nw < 125 ? 125 : nw,
                full: nh >= ch && nw >= cw, //can full fit if both natural image dimensions are >= the equivalent container dimensions
                fullH: fullHeight,
                fullW: fullWidth,
                //fullTop: rh < rw ? 0 : (fullHeight - ch) / 2 * -1, //top margin -ve offset
                fullTop: 0,
                fullLeft: rw < rh ? 0 : (fullWidth - cw) / 2 * -1, //left margin -ve offset
                //best fit display values
                //bestTop: rh == 1.0 ? 0 : (rh < 1.0 ? (ch - nh) / 2 : (nh - ch) / 2 * -1), //top margin offset
                bestTop: 0,
                bestLeft: rw == 1.0 ? 0 : (rw < 1.0 ? (cw - nw) / 2 : (nw - cw) / 2 * -1) //left margin offset
            };
        },
        //shows the given image in the container. The image should have already been determined to be >= the container size.
        //sizes the image using the dimension that is the smallest relative to the same dimension of the container
        full: function (calc, img, src) {
            img.height(_image.pxl(calc.fullH)).width(_image.pxl(calc.fullW)).css("margin-top", _image.pxl(calc.fullTop)).css("margin-left", _image.pxl(calc.fullLeft));
            img[0].src = src;
        },
        //fits image to container along smallest image dimension, then centers it along the other dimension
        best: function (calc, img, src) {
            img.height(_image.pxl(calc.h)).width(_image.pxl(calc.w)).css("margin-top", _image.pxl(calc.bestTop)).css("margin-left", _image.pxl(calc.bestLeft));
            img[0].src = src;
        },
        pxl: function (value) {
            return isNaN(value) ? "0" : value.toString() + "px";
        }
    };

    var _methods = {
        init: function (containerSelector) {
            this.each(function () {
                var remoteImage = $(this);
                var invalidImage = false;
                var img = new Image();
                img._element = remoteImage;
                img._container = remoteImage.closest(containerSelector);
                img.onerror = function () {
                    // doesn't exist or error loading
                    this.src = '/res/img/no-image-logo.png';
                    invalidImage = true;
                    return true;
                };
                img.onload = function (ev) {
                    //if (this.src == '/res/img/no-image-logo.png') {
                    //    return true;
                    //}
                    var loadedImage = ev.target,
                        calc = _image.calculate(loadedImage, loadedImage._container),
                        load = calc.full ? _image.full : _image.best;

                    load(calc, loadedImage._element, loadedImage.src);
                };
                

                var src = remoteImage.data("remote-url");
                if (src != undefined)
                {
                    img.src = src;
                }
            });
        }
    };
})(jQuery);
'use strict';

var trim = function(str) {
  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,'');
};

var hasClass = function(el, cn) {
  return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;
};

var addClass = function(el, cn) {
  if (!hasClass(el, cn)) {
    el.className = (el.className === '') ? cn : el.className + ' ' + cn;
  }
};

var removeClass = function(el, cn) {
  el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));
};

var toggle = function(el, cn) {
  if (hasClass(el, cn)) {
    removeClass(el, cn);
  } else {
    addClass(el, cn);
  }
};

var preventClick = function(ev) {
  ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;
};

function bindEvent(c, a, b) {
  if (c.addEventListener) {
    c.addEventListener(a, b);
  } else {
    if (c.attachEvent) {
      c.attachEvent('on' + a, b);
    }
  }
}

var searchField = document.getElementById('headerSearch'),
    searchBtn = document.getElementById('searchBtn');
if (searchField && searchBtn) {
    bindEvent(searchBtn, 'click', function (e) {
        preventClick(e);
        removeClass(searchField, 'search-inactive');
    });
}

if ('querySelector' in document) {
  var navListLong = document.querySelectorAll('.nav-list-long');
  var showMoreLink = '<li><a href="#" class="show-more">Show more...</a></li>';
  for (var i = 0; i < navListLong.length; i++) {
    addClass(navListLong[i],'nav-list-shortened');
    navListLong[i].insertAdjacentHTML('beforeend', showMoreLink);
  }

  var showMoreLinks = document.querySelectorAll('.show-more');
    for (var i = 0; i < showMoreLinks.length; i++) {
        bindEvent(showMoreLinks[i], 'click', function(e) {
            preventClick(e);
            addClass(e.srcElement, 'hidden');
            removeClass(e.srcElement.parentNode.parentNode, 'nav-list-shortened');

            // remove the hidden class from the .content > media elements
            var el = e.srcElement.parentNode;
            if (hasClass(el, 'content')) {
                for (var i = 0; i < el.childNodes.length; i++) {
                    if (hasClass(el.childNodes[i], 'media') && hasClass(el.childNodes[i], 'hidden')) {
                        removeClass(el.childNodes[i], 'hidden');
                    }
                }
            }
        });
    }
}
!function(a){"use strict";a.picturefill=function(){for(var b=a.document.getElementsByTagName("span"),c=0,d=b.length;d>c;c++)if(null!==b[c].getAttribute("data-picture")){for(var e=b[c].getElementsByTagName("span"),f=[],g=0,h=e.length;h>g;g++){var i=e[g].getAttribute("data-media");(!i||a.matchMedia&&a.matchMedia(i).matches)&&f.push(e[g])}var j=b[c].getElementsByTagName("img")[0];if(f.length){var k=f.pop();if(j&&"NOSCRIPT"!==j.parentNode.nodeName){if(k===j.parentNode)continue}else j=a.document.createElement("img"),j.alt=b[c].getAttribute("data-alt");j.src=k.getAttribute("data-src"),k.appendChild(j),j.removeAttribute("width"),j.removeAttribute("height")}else j&&j.parentNode.removeChild(j)}},a.addEventListener?(a.addEventListener("resize",a.picturefill,!1),a.addEventListener("DOMContentLoaded",function(){a.picturefill(),a.removeEventListener("load",a.picturefill,!1)},!1),a.addEventListener("load",a.picturefill,!1)):a.attachEvent&&a.attachEvent("onload",a.picturefill)}(this);
$(["requiredif", "regularexpressionif", "rangeif"]).each(function (index, validationName) {
    $.validator.addMethod(validationName, function (value, element, parameters) {
        var prefix = "";
        var lastDot = element.name.lastIndexOf(".");
        if (lastDot !== -1) {
            prefix = element.name.substring(0, lastDot + 1).replace(".", "_");
        }
        var id = "#" + prefix + parameters["dependentproperty"];
        var targetvalue = parameters["targetvalue"];
        targetvalue = (targetvalue == null ? "" : targetvalue).toString();
        var control = $(id);
        if (control.length === 0 && prefix.length > 0) {
            control = $("#" + parameters["dependentproperty"]);
        }
        if (control.length > 0) {
            var controltype = control.attr("type");
            var actualvalue = "";
            switch (controltype) {
                case "checkbox":
                    actualvalue = control.attr("checked").toString();
                    break;
                case "select":
                    actualvalue = $("option:selected", control).text();
                    break;
                default:
                    actualvalue = control.val();
                    break;
            }
            if (targetvalue.toLowerCase() === actualvalue.toLowerCase()) {
                var rule = parameters["rule"];
                var ruleparam = parameters["ruleparam"];
                return $.validator.methods[rule].call(this, value, element, ruleparam);
            }
        }
        return true;
    });
    $.validator.unobtrusive.adapters.add(validationName, ["dependentproperty", "targetvalue", "rule", "ruleparam"], function (options) {
        var rp = options.params["ruleparam"];
        options.rules[validationName.toString()] = {
            dependentproperty: options.params["dependentproperty"],
            targetvalue: options.params["targetvalue"],
            rule: options.params["rule"]
        };
        if (rp) {
            options.rules[validationName.toString()].ruleparam = rp.charAt(0) === "[" ? eval(rp) : rp;
        }
        options.messages[validationName.toString()] = options.message;
    });
});
//# sourceMappingURL=sn.app.validate.extensions.js.map
var _this = this;
var sysData;
(function (old) {
    $.fn.attr = function () {
        var _this = this;
        if (arguments.length === 0) {
            if (this.length === 0) {
                return null;
            }
            var obj = {};
            $.each(this[0].attributes, function () {
                if (_this.specified) {
                    obj[_this.name] = _this.value;
                }
            });
            return obj;
        }
        return old.apply(this, arguments);
    };
})($.fn.attr);
$.urlParam = function (name) {
    var results = new RegExp("[?&]" + name + "=([^&#]*)").exec(window.location.href);
    if (results == null) {
        return null;
    }
    else {
        return results[1] || 0;
    }
};
var sn = sn || {};
sn.app = sn.app ||
    {
        ScreenSize: { IsXs: false, IsS: false, IsM: false, IsL: false, IsXl: false, ems: 0 },
        loginDialogOriginWidth: 0,
        loginDialogOriginHeight: 0,
        loginCompletedCallback: function () {
        },
        registerCompletedCallback: function () {
        },
        ButtonKeys: { "EnterKey": 13 },
        handledAjaxErrorLocally: false,
        handledClearErrorsOnAjaxStart: true,
        init: function () {
            this.configureKO();
            this.initializeSmoothScrolling();
            this.initAutoComplete();
            this.initStaffQuickNavMenuDefaultKeypress();
            this.initLazyLoad();
            this.initToolTip();
            this.initializeShortlist();
            this.initScreenSizeListener();
            this.initCurrencyPicker();
            this.initClearImpersonation();
            this.initializeServiceFeeElements();
            this.initializeSpecialDiscountElements();
            this.initLoginDialog();
            this.initTransactionEditDialog();
            this.initEmailSubscription();
            this.initMenu();
            this.initCookieConsent();
            if (sn.app.referrals != null) {
                sn.app.referrals.initReferralHeaderBanner();
            }
        },
        configureKO: function () {
            if (typeof ko === "undefined") {
                return;
            }
            ko.options.deferUpdates = true;
            ko.bindingHandlers.valueWithInit = {
                init: function (element, valueAccessor, allBindingsAccessor, data) {
                    var property = valueAccessor(), value = element.value;
                    if (!ko.isWriteableObservable(data[property])) {
                        data[property] = ko.observable();
                    }
                    if (value != null && value !== "" && value.toLowerCase() === "true") {
                        value = true;
                    }
                    else if (value != null && value !== "" && value.toLowerCase() === "false") {
                        value = false;
                    }
                    data[property](value);
                    ko.applyBindingsToNode(element, { value: data[property] });
                }
            };
            ko.bindingHandlers.hidden = {
                init: function (element, valueAccessor, allBindingsAccessor, data) {
                    var hidden = ko.unwrap(valueAccessor());
                    $(element).css('visibility', hidden ? 'hidden' : 'visible');
                }
            };
            ko.bindingHandlers.numeric = {
                init: function (element, valueAccessor) {
                    $(element).on("keydown", function (event) {
                        if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
                            (event.keyCode == 65 && event.ctrlKey === true) ||
                            (event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 110) ||
                            (event.keyCode >= 35 && event.keyCode <= 39)) {
                            return;
                        }
                        else {
                            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                                event.preventDefault();
                            }
                        }
                    });
                }
            };
            ko.bindingHandlers.backgroundImage = {
                update: function (element, valueAccessor, allBindingsAccessor, data, bindingContext) {
                    ko.bindingHandlers.style.update(element, function () { return { backgroundImage: "url('" + valueAccessor()() + "')" }; }, allBindingsAccessor, data, bindingContext);
                }
            };
            ko.validation.rules.between = {
                validator: function (value, params) {
                    var min = params[0];
                    var max = params[1];
                    value = parseInt(value, 10);
                    if (!isNaN(value)) {
                        return value >= min && value <= max;
                    }
                    return false;
                },
                message: 'Value must be between {0} and {1}'
            };
            ko.validation.init({
                messagesOnModified: true,
                decorateElementOnModified: true,
                decorateInputElement: true
            }, true);
            $(document).ajaxStart(function () {
            });
            $("html").ajaxError(function (e, xhr, settings, exception) {
                if (!sn.app.handledAjaxErrorLocally) {
                    sn.app.handledAjaxErrorLocally = false;
                    var message = "";
                    if (xhr.status === 0) {
                        message = "You appear to be offline! Please check your network.";
                    }
                    else if (xhr.status === 403) {
                        window.location.href = "/logon.aspx";
                    }
                    else if (xhr.status === 404) {
                        message = 'Requested URL not found.';
                    }
                    else if (xhr.status === 500) {
                        message = xhr.responseText;
                        if (message.length > 0) {
                            try {
                                message = JSON.parse(xhr.responseText);
                            }
                            catch (ex) {
                                message = xhr.responseText;
                            }
                        }
                        if (message.length === 0 && xhr.responseJSON !== "") {
                            try {
                                (xhr.responseJSON);
                            }
                            catch (ex) {
                                message = xhr.responseJSON;
                            }
                        }
                    }
                    if (message.length > 0) {
                        if (ko.contextFor($("body")[0]) != null) {
                            var vm = ko.contextFor($("body")[0]).$root;
                            if (vm.errors == null) {
                                vm.errors = ko.observableArray();
                            }
                            vm.errors.push({ message: ko.observable(message) });
                        }
                    }
                }
            });
        },
        initMenu: function () {
            $("#MenuAccount").on("click", function () {
                var container = $("#MenuItems");
                if (!container.is(":visible")) {
                    container.show();
                    $(this).addClass('hover');
                    $(document.body).addClass('nav-active');
                }
            });
            $(document).mouseup(function (e) {
                var container = $("#MenuItems");
                if (!container.is(e.target) && container.has(e.target).length === 0) {
                    $(document.body).removeClass('nav-active');
                    container.hide();
                    $("#MenuAccount").removeClass('hover');
                }
            });
        },
        initAutoComplete: function () {
            var suggest = new AutoComplete();
        },
        InitializeCarousel: function () {
            var screenOptions = {};
            screenOptions.enabled = false;
            screenOptions.nativeFS = true;
            var thumbOptions = {};
            thumbOptions.arrows = false;
            thumbOptions.appendSpan = true;
            thumbOptions.firstMargin = false;
            var sliderOptions = {};
            sliderOptions.controlNavigation = "thumbnails",
                sliderOptions.imageScaleMode = "none",
                sliderOptions.imageScalePadding = 4,
                sliderOptions.imageAlignCenter = false,
                sliderOptions.loop = true,
                sliderOptions.navigateByClick = true,
                sliderOptions.numImagesToPreload = 2,
                sliderOptions.arrowsNav = false,
                sliderOptions.arrowsNavAutoHide = true,
                sliderOptions.arrowsNavHideOnTouch = true,
                sliderOptions.keyboardNavEnabled = true,
                sliderOptions.fadeinLoadedSlide = true,
                sliderOptions.globalCaption = false,
                sliderOptions.fullscreen = screenOptions;
            sliderOptions.thumbs = thumbOptions;
            $("#e-gallery")
                .royalSlider(sliderOptions);
            $(document)
                .on("mouseenter", ".gallery-left", function () {
                $(".gallery-left").stop().fadeTo("fast", 1);
                $(".gallery-right").stop().fadeTo("fast", 0.8);
            });
            $(document)
                .on("mouseleave", ".gallery-left", function () {
                $(".gallery-left").stop().fadeTo("fast", 0.8);
            });
            $(document)
                .on("mouseenter", ".gallery-right", function () {
                $(".gallery-right").stop().fadeTo("fast", 1);
                $(".gallery-left").stop().fadeTo("fast", 0.8);
            });
            $(document)
                .on("mouseleave", ".gallery-right", function () {
                $(".gallery-right").stop().fadeTo("fast", 0.8);
            });
            $(document)
                .on("click", ".gallery-left", function () {
                $(".royalSlider").data("royalSlider").prev();
            });
            $(document)
                .on("click", ".gallery-right", function () {
                $(".royalSlider").data("royalSlider").next();
            });
        },
        isValidEmailAddress: function (emailAddressList) {
            var isValid = true;
            var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([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])\.?$/i;
            var split = emailAddressList.split(",");
            $.each(split, function (i, address) {
                if (isValid) {
                    isValid = pattern.test($.trim(address));
                }
            });
            return isValid;
        },
        isNumber: function (value) {
            return /^-?\\d*(\\.\\d+)?$/i.test($.trim(value));
        },
        initializeSmoothScrolling: function () {
            $(document)
                .ready(function () {
                var $root = $("html, body");
                var ancloc = window.location.hash;
                if (ancloc != null && ancloc !== "" && $(ancloc).offset() != null && $(ancloc).offset().top > 0) {
                    event.preventDefault();
                    $root.stop()
                        .animate({ scrollTop: $(ancloc).offset().top }, {
                        duration: 1000,
                        easing: "easeOutCubic"
                    });
                    return false;
                }
                return true;
            });
            $("a[href*=#]").click(function (e) {
                var anchor = e.target;
                if (anchor.pathname === undefined || anchor.hostname === undefined) {
                    return true;
                }
                if (location.pathname.toLowerCase().replace(/^\//, "") ===
                    anchor.pathname.toLowerCase().replace(/^\//, "") &&
                    location.hostname.toLowerCase() === anchor.hostname.toLowerCase()) {
                    var target = $(anchor.hash);
                    target = target.length && target || $("[name=" + anchor.hash.slice(1) + "]");
                    if (target.length) {
                        var targetOffset = target.offset().top - 100;
                        $("html, body").stop().animate({ scrollTop: targetOffset }, 500);
                        return true;
                    }
                }
                return true;
            });
        },
        initStaffQuickNavMenuDefaultKeypress: function () {
            $(".staffProdExtraMenu input")
                .keypress(function (e) {
                if (e.which === 13) {
                    $("#frmQuickQuery").submit();
                }
            });
        },
        initLazyLoad: function () {
            $(".media img:not(.media img[data-remote-url])")
                .lazyload({ threshold: 100, placeholder: "/res/img/no-image-logo.png" });
            $(".masonary img:not(.media img[data-remote-url])")
                .lazyload({ threshold: 100, placeholder: "/res/img/no-image-logo.png" });
            $(".media img[data-remote-url]").dynamicImages(".media-img");
            $(".recent-searches a.show-more")
                .click(function () {
                $(".media img[data-remote-url]").dynamicImages(".media-img");
            });
            $(".content-footer img").lazyload({ threshold: 100, placeholder: "/res/img/no-image-logo.png" });
            $(".track-home-carousel img").lazyload({ threshold: 100, placeholder: "/res/img/no-image-logo.png" });
        },
        initToolTip: function () {
            if (!isTouchDevice()) {
                $(".masterTooltip")
                    .on({
                    mouseenter: function () {
                        $(".tooltip").remove();
                        var title = $(this).attr("title");
                        $(this).data("tipText", title).removeAttr("title");
                        $('<p class="tooltip"></p>')
                            .text(title)
                            .appendTo("body")
                            .fadeIn("slow");
                    },
                    mouseleave: function () {
                        var title = $(this).attr("title");
                        if (typeof title == typeof undefined || title === "false") {
                            $(this).attr("title", $(this).data("tipText"));
                        }
                        $(".tooltip").remove();
                    },
                    mousemove: function (e) {
                        var showLeft = $(this).hasClass("masterTooltip-left");
                        var mousex;
                        if (showLeft) {
                            mousex = e.pageX - $(".tooltip").width() - 20;
                        }
                        else {
                            mousex = e.pageX + 20;
                        }
                        var mousey = e.pageY + 10;
                        $(".tooltip")
                            .css({ top: mousey, left: mousex });
                    }
                });
            }
        },
        showLoader: function (el, loaderEl, loadingMessage) {
            var dimensions = {
                height: el.height() + parseInt(el.css("padding-top"), 10) + parseInt(el.css("padding-bottom"), 10),
                width: el.width() + parseInt(el.css("padding-left"), 10) + parseInt(el.css("padding-right"), 10)
            };
            var offSet = el.offset();
            if (offSet != null) {
                $(loaderEl)
                    .css({
                    'top': (offSet.top + 1),
                    'left': (offSet.left + 1),
                    'height': dimensions.height,
                    'width': dimensions.width
                })
                    .show();
            }
            if (loadingMessage != null) {
                $(".message", loaderEl).html(loadingMessage);
            }
        },
        hideLoader: function (loaderEl) {
            $(loaderEl).hide();
        },
        multipartialUpdate: function (views) {
            for (var v = 0; v < views.length; v++) {
                if (views[v].script) {
                    eval(views[v].script);
                }
                else {
                    if (views[v].updateTargetId[0] === "." || views[v].updateTargetId[0] === "#") {
                        $(views[v].updateTargetId).html(views[v].html);
                    }
                    else {
                        if (views[v].overridePropertyToUpdate != null && views[v].overridePropertyToUpdate === "value") {
                            $("#" + views[v].updateTargetId).val(views[v].html);
                        }
                        else {
                            $("#" + views[v].updateTargetId).html(views[v].html);
                        }
                    }
                }
            }
            return false;
        },
        initializeShortlist: function () {
            var _this = this;
            $(document)
                .on("click", ".addremove-shortlist", function (event) {
                sn.app.shortListTriggered(event, event.currentTarget);
            });
            if ($(".home-recent-searches").length === 0) {
                $(".addremove-shortlist .icon-heart-1").stop().fadeTo("fast", 0.65);
            }
            $(document)
                .on("mouseenter", ".addremove-shortlist .icon-heart-empty", function () {
                $(_this).parent().find(".icon-heart-1").stop().fadeTo("fast", 0.35);
            });
            $(document)
                .on("mouseleave", ".icon-heart-empty", function () {
                $(_this).parent().find(".icon-heart-1").stop().fadeTo("fast", 0.65);
            });
        },
        shortListTriggered: function (event, element) {
            event.preventDefault();
            event.stopPropagation();
            var spid = $(element).data("spid"), isEHome = $(element).closest(".spid-row").hasClass("sl-ehome"), clickedIcon = $(element).find("i.icon-heart-1"), addingNewItem = $(clickedIcon).hasClass("black") || $(clickedIcon).context.classList.contains("is-active");
            var obj = {};
            obj.SpId = spid;
            obj.AddingNewItem = addingNewItem;
            $.ajax({
                url: "/addtoshortlist.aspx",
                dataType: "html",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(obj),
                cache: false,
                success: function (result) {
                    if (result === "True") {
                        if (isEHome) {
                            var shortlistItemCount = $("#ShortlistItemCount").val(), newShortlistItemCount = shortlistItemCount;
                            if (addingNewItem) {
                                newShortlistItemCount++;
                            }
                            else {
                                newShortlistItemCount--;
                            }
                            $("#viewShortlist").parent().find(".short-count").text("(" + newShortlistItemCount + ")");
                            $("#ShortlistItemCount").val(newShortlistItemCount);
                        }
                        else {
                            var model = {};
                            $.ajax({
                                type: "POST",
                                url: "/listing/Shortlist/",
                                data: model,
                                beforeSend: function () {
                                    $("#searchLoader").show();
                                    $("#shortlistPanel").html("Loading your shortlist, please wait.");
                                },
                                success: function (data) {
                                    $("#searchLoader").hide();
                                    $(".media img:not(.media img[data-remote-url])").lazyload({ threshold: 100 });
                                    $(".media img[data-remote-url]").dynamicImages(".media-img");
                                    $("#shortlistPanel").html(data);
                                    $(".shortlistCount").text($("#shortlistPanel div.masonary").length);
                                    $(".shortlistCount").removeClass("l-dn");
                                },
                                error: function () {
                                    $("#searchLoader").show();
                                    $("#shortlistPanel")
                                        .html('Oops, we had a bit of a wobbly, please try again or email our support team. <br/><br/><a href="javascript:location.reload();">Click to Retry</a>');
                                }
                            });
                        }
                    }
                },
                error: function (xhr, textStatus, err) {
                    clickedIcon.show();
                    alert("Oops, we had a bit of a wobbly, please try again or email our support team.");
                },
                complete: function (d) {
                    clickedIcon.show();
                }
            });
        },
        initScreenSizeListener: function () {
            sn.app.setScreenSize();
            $(window)
                .resize(function () {
                sn.app.setScreenSize();
            });
        },
        initCurrencyPicker: function () {
            $("#currency-picker")
                .change(function (e) {
                $.ajax({
                    method: "GET",
                    url: "/Common/SetCurrencyAjax?currencyCode=" + $(e.target).val(),
                    contentType: "application/json; charset=utf-8",
                    cache: false,
                    beforeSend: function () {
                    },
                    error: function (e) {
                        console.log(e);
                        alert("Oops, we had a bit of a wobbly, please try again or email our support team.");
                    },
                    success: function (result) {
                        if (result.success) {
                            document.cookie = "currency=" + result.currency;
                            window.location.reload(true);
                        }
                        else {
                            alert(result.message);
                        }
                    }
                });
            });
        },
        initClearImpersonation: function () {
            $("#lnkClearImpersonation")
                .mouseover(function (e) {
                $(e.target).html("Stop Impersonating");
            });
            $("#lnkClearImpersonation")
                .mouseout(function (e) {
                $(e.target).html("<i class='icon-user'></i>" + $("#hdnImpersonatingName").val());
            });
            $("#lnkClearImpersonation")
                .click(function () {
                window.location.href =
                    "/common/ClearImpersonation?referer=" + encodeURI(location.pathname + location.search);
            });
        },
        setScreenSize: function () {
            sn.app.ScreenSize.ems = window.innerWidth / parseFloat($("body").css("font-size"));
            var ems = sn.app.ScreenSize.ems;
            sn.app.ScreenSize.IsXs = ems <= 20;
            sn.app.ScreenSize.IsS = ems > 20 && ems <= 30;
            sn.app.ScreenSize.IsM = ems > 30 && ems <= 40;
            sn.app.ScreenSize.IsL = ems > 40 && ems <= 50;
            sn.app.ScreenSize.IsXl = ems > 50;
            sn.app.ScreenSize.Xs = 20;
            sn.app.ScreenSize.S = 30;
            sn.app.ScreenSize.M = 40;
            sn.app.ScreenSize.L = 50;
            sn.app.ScreenSize.Xl = 70;
            sn.app.ScreenSize.XXl = 90;
        },
        initializeServiceFeeElements: function () {
            $(".servicefee-help-trigger")
                .click(function () {
                $(".servicefee-help-text").toggle("fade");
            });
            $(".pay-protection-row")
                .click(function () {
                $(".pay-protection-text").toggle("fade");
            });
            $(".pay-protection-row")
                .hover(function () {
                $(".pay-protection-text").show("fade");
            }, function () {
                $(".pay-protection-text").hide("fade");
            });
        },
        initializeSpecialDiscountElements: function () {
            $(".specialdiscount-help-trigger")
                .click(function () {
                $(".specialdiscount-help-text").toggle("fade");
            });
        },
        onLoginSuccess: function (e) {
            $("#login").show();
            $(".login-reg-loading").hide();
            if (e.status) {
                $("#loginPopupContainer").hide("fast");
                $("#contactId").val(e.contactId);
                if (sysData != null) {
                    sysData.userId = e.contactId;
                    if (sysData != null) {
                        sysData.userId = e.contactId;
                    }
                }
            }
            else {
                $("#loginPopupContainer").effect("shake", { times: 4, distance: 8 }, 400);
                $(".form-login #Password")
                    .validation({
                    as: "tooltip",
                    promptAttribute: "placeholder-text",
                    position: "topright",
                    invalidClass: _this.InvalidClass
                });
                $(".validation-summary-errors ul").empty();
                $(".validation-summary-errors ul").append("<li>" + e.reason + "</li>");
            }
            sn.app.loginCompletedCallback(e);
        },
        onLoginBegin: function () {
            $("#login").hide();
            $(".login-reg-loading").show();
        },
        onRegisterBegin: function () {
            $("#register").hide();
            $(".login-reg-loading").show();
        },
        onRegisterSuccess: function (e) {
            $("#register").show();
            $(".login-reg-loading").hide();
            if (e.status) {
                $("#registerPopupContainer").hide("fast");
                $("#contactId").val(e.contactId);
                if (sysData != null) {
                    sysData.userId = e.contactId;
                }
            }
            else {
                $("#loginPopupContainer").effect("shake", { times: 4, distance: 8 }, 400);
                $(".validation-summary-errors ul").empty();
                $(".validation-summary-errors ul").append("<li>" + e.reason + "</li>");
            }
            sn.app.registerCompletedCallback(e);
        },
        resizeDialog: function () {
            if (window.matchMedia && window.matchMedia("(max-width: 40em)").matches) {
                $(".ui-dialog")
                    .css({
                    'width': $(window).width(),
                    'height': $(window).height(),
                    'left': "0",
                    'top': "0"
                });
                $("#closeDialog").show();
            }
            else {
                document.body.style.overflow = "auto";
                $(".ui-dialog")
                    .css({
                    'width': sn.app.loginDialogOriginWidth,
                    'height': sn.app.loginDialogOriginHeight
                });
                $("#closeDialog").hide();
            }
        },
        initLoginDialog: function () {
            $("#closeDialog")
                .on("click", function (e) {
                e.preventDefault();
                if ($("#loginPopupContainer").length === 0) {
                    $("#loginOrSignUp").dialog("close");
                }
                else {
                    $("#loginPopupContainer").hide();
                    $("#registerPopupContainer").hide();
                }
                $(".ui-widget-overlay").hide();
                document.body.style.overflow = "auto";
            });
            $(".form-login #register")
                .on("click", function (e) {
                e.preventDefault();
                sn.app.showRegister(sn.app.loginCompletedCallback, sn.app.registerCompletedCallback);
            });
            $(".form-register #login")
                .on("click", function (e) {
                e.preventDefault();
                $("#forgotControls").hide();
                sn.app.showLogin(sn.app.loginCompletedCallback, sn.app.registerCompletedCallback);
            });
            $("#forgotpwd")
                .on("click", function (e) {
                e.preventDefault();
                $("#forgotControls").show();
                $("#loginControls").hide();
                $("#sendPassword")
                    .on("click", function (e) {
                    e.preventDefault();
                    sn.app.forgotPassword();
                });
            });
        },
        forgotPassword: function () {
            var email = $("#forgotEmail").val();
            if (email === "") {
                sn.app.showMessage(".form-login #message", "Enter your email address.");
                $("#loginPopupContainer").effect("shake", { times: 4, distance: 8 }, 400);
                return;
            }
            var model = {};
            model.emailAddress = email;
            $.ajax({
                method: "GET",
                url: "/account/ForgotPassword",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify({ 'emailAddress': email }),
                beforeSend: function () {
                },
                error: function (e) {
                    console.log(e);
                },
                success: function (result) {
                    sn.app.showMessage(".form-login #message", result.message);
                    if (result.isSuccessfull) {
                        $("#forgotControls").hide();
                        $("#loginControls").show();
                    }
                    else {
                        $("#loginPopupContainer").effect("shake", { times: 4, distance: 8 }, 400);
                    }
                }
            });
        },
        showRegister: function (loginCompletedCallback, registerCompletedCallback) {
            sn.app.showLoginRegister(loginCompletedCallback, registerCompletedCallback, false);
        },
        showLogin: function (loginCompletedCallback, registerCompletedCallback) {
            sn.app.showLoginRegister(loginCompletedCallback, registerCompletedCallback, true);
        },
        showLoginRegister: function (loginCompletedCallback, registerCompletedCallback, loginOnly) {
            var overlay = $(".ui-widget-overlay");
            if ($("#loginPopupContainer").children().length > 0 && $("#registerPopupContainer").children().length > 0) {
                sn.app.loginCompletedCallback = loginCompletedCallback;
                sn.app.registerCompletedCallback = registerCompletedCallback;
                $("#forgotControls").hide();
                $("#loginControls").show();
                $("#loginPopupContainer").hide("slow");
                $("#registerPopupContainer").hide("slow");
                $(".form-login #message").html("");
                var dialogContainer;
                if (loginOnly) {
                    $("#loginPopupContainer").removeClass("l-dn");
                    $("#loginPopupContainer").show("slow");
                    dialogContainer = $("#loginPopupContainer");
                }
                else {
                    $("#registerPopupContainer").removeClass("l-dn");
                    $("#registerPopupContainer").show("slow");
                    dialogContainer = $("#registerPopupContainer");
                }
                $("html, body")
                    .animate({ scrollTop: dialogContainer.offset().top - 150 }, {
                    duration: 1000,
                    easing: "easeOutCubic"
                });
                overlay.css("background", "rgba(0, 0, 0, 0.5) url(\"\")");
                overlay.click(function () {
                    $("#loginPopupContainer").hide("slow");
                    $("#registerPopupContainer").hide("slow");
                });
                return;
            }
        },
        fetchLoginDialogHtml: function (loginCompletedCallback, registerCompletedCallback) {
            sn.app.loginCompletedCallback = loginCompletedCallback;
            sn.app.registerCompletedCallback = registerCompletedCallback;
            $.ajax({
                method: "GET",
                url: "/account/logindialog",
                async: true,
                success: function (html) {
                    $("#loginOrSignUp").html(html);
                }
            });
        },
        fetchRegisterDialogHtml: function (loginCompletedCallback, registerCompletedCallback) {
            sn.app.loginCompletedCallback = loginCompletedCallback;
            sn.app.registerCompletedCallback = registerCompletedCallback;
            $.ajax({
                method: "GET",
                url: "/account/registerdialog",
                async: true,
                success: function (html) {
                    $("#loginOrSignUp").html(html);
                }
            });
        },
        showMessage: function (selector, message) {
            $(selector)
                .fadeOut(1000, function () {
                $(selector).html("");
                $(selector).append(message);
            });
            $(selector)
                .fadeIn(2000, function () {
                setTimeout(function () {
                    $(selector)
                        .fadeOut(3000, function () {
                        $(selector).html("");
                    });
                }, 5000);
            });
        },
        isInView: function (elem) {
            var $elem = $(elem);
            var $window = $(window);
            var docViewTop = $window.scrollTop();
            var isInView = false;
            if (typeof $elem !== "undefined" && typeof $elem.offset() !== "undefined") {
                var elemTop = $elem.offset().top;
                var elemBottom = elemTop + $elem.height();
                isInView = elemBottom >= docViewTop;
            }
            return isInView;
        },
        initializeMasonaryCarousel: function () {
            var screenOptions = {};
            screenOptions.enabled = false;
            screenOptions.nativeFS = true;
            var sliderOptions = {};
            sliderOptions.controlNavigation = "none",
                sliderOptions.controlsInside = false,
                sliderOptions.imageScaleMode = "none",
                sliderOptions.imageScalePadding = 0,
                sliderOptions.imageAlignCenter = false,
                sliderOptions.loop = true,
                sliderOptions.navigateByClick = false,
                sliderOptions.numImagesToPreload = 0,
                sliderOptions.arrowsNav = false,
                sliderOptions.arrowsNavAutoHide = false,
                sliderOptions.arrowsNavHideOnTouch = false,
                sliderOptions.keyboardNavEnabled = false,
                sliderOptions.fadeinLoadedSlide = true,
                sliderOptions.globalCaption = false,
                $(".masonary")
                    .each((".royalSlider"))
                    .royalSlider(sliderOptions);
            $(".masonary")
                .each((".royalSlider"))
                .each(function (index) {
                var _this = this;
                var slider = $($(".royalSlider")[index]).royalSlider().data("royalSlider");
                slider.ev.on("rsDragStart", function (e) {
                    _this.fetchGallery(e.target);
                });
                slider.ev.on("rsSlideClick", function () {
                    var url = slider.slider.data("url");
                    sn.app.listingshared.goToEstablishment(url);
                });
                slider.slider.parent("div.rsWrapper")
                    .on("click", ".gallery-left", function () {
                    fetchGallery(slider, function () { slider.prev(); });
                });
                slider.slider.parent("div.rsWrapper")
                    .on("click", ".gallery-right", function () {
                    fetchGallery(slider, function () { slider.next(); });
                });
                slider.ev.on("rsAfterContentSet", function (e, slideObject) {
                    $(slideObject.content[0])
                        .find("img")
                        .lazyload({ threshold: 100, placeholder: "/res/img/no-image-logo.png" });
                });
            });
        },
        initTransactionEditDialog: function () {
            $(".ledgerEdit")
                .click(function (e) {
                var clickedoffset = $(e.target).offset();
                var lt = $(e.target).data("ledgertype");
                var tid = $(e.target).data("transactionid");
                var trans = $(e.target).data("transaction");
                var transamount = $(e.target).data("amount");
                var transactiondate = $(e.target).data("transactiondate");
                $("#hdnEditLedgerType").val(lt);
                $("#hdnEditLedgerTransactionID").val(tid);
                $("#spLedgerUpdateText").html(trans);
                $("#spLedgerUpdateDate").html(transactiondate);
                $("#spLedgerUpdateAmount").html(transamount);
                $("#txtEditLedgerAmount").val(transamount);
                $("#TransactionEdit").show();
                var offset = {};
                offset.top = clickedoffset.top;
                $("#TransactionEdit").offset(offset);
            });
            $("#CancelLedgerEdit")
                .click(function () {
                $("#TransactionEdit").hide();
            });
        },
        initEmailSubscription: function () {
            $("button[data-subscribe='button']")
                .on("click", function (e) {
                e.preventDefault();
                var validEmail = true;
                var emailValue = $("input[data-subscribe='email']").val();
                if (emailValue.length <= 0) {
                    validEmail = false;
                }
                else {
                    var matches = emailValue.match(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);
                    if (matches === null || matches.length === 0) {
                        validEmail = false;
                    }
                }
                if (validEmail) {
                    var container = e.target;
                    $.ajax({
                        url: "/Common/SubscribeToNewsletter",
                        data: { email: $("input[data-subscribe='email']").val() },
                        type: "POST",
                        beforeSend: function () {
                            $(container).parent().find("div").remove();
                        },
                        success: function () {
                            $(container).parent().find("input").val("");
                            $(container)
                                .parent()
                                .append("<div class=\"white l-mt-s smaller\">Thank you for subscribing!</div>");
                        },
                        error: function () {
                        }
                    });
                }
                else {
                    $(_this).parent().find("div").remove();
                    $(_this).parent().append("<div class=\"white l-mt-s smaller\">* Invalid email address</div>");
                }
            });
        },
        initCookieConsent: function () {
            var cookie_name = "cookie_consent";
            var cookieValue = sn.app.getCookieValue(cookie_name, true);
            if (cookieValue === undefined || cookieValue === "") {
                $('.cookie-banner').removeClass("hidden");
            }
            else {
                $('.cookie-banner').remove();
            }
            $('.consent-yes').on('click', function () {
                sn.app.setCookie(cookie_name, "yes", (365 * 5));
                $('.cookie-banner').hide('slow');
            });
            $('.consent-no').on('click', function () {
                sn.app.setCookie(cookie_name, "no", (2));
                $('.cookie-banner').hide('slow');
            });
        },
        setCookie: function (cookieName, cookieValue, daysToExpire) {
            var dateToExpire = new Date();
            dateToExpire.setDate(dateToExpire.getDate() + daysToExpire);
            var cookieNameValue = cookieValue +
                ((daysToExpire == null) ? "" : "; expires=" + dateToExpire.toUTCString() + "; path=/");
            document.cookie = cookieName + "=" + cookieNameValue;
        },
        getCookieValue: function (cookieName, partialMatch) {
            var i, x, cookie, cookieList = document.cookie.split(";");
            for (i = 0; i < cookieList.length; i++) {
                x = cookieList[i].substr(0, cookieList[i].indexOf("="));
                cookie = cookieList[i].substr(cookieList[i].indexOf("=") + 1);
                x = x.replace(/^\s+|\s+$/g, "");
                if (x === cookieName) {
                    return cookie;
                }
                if (partialMatch) {
                    if (x.indexOf(cookieName) === 0) {
                        return cookie;
                    }
                }
            }
        },
        deleteCookie: function (cookieName) {
            var i, x, cookieList = document.cookie.split(";");
            for (i = 0; i < cookieList.length; i++) {
                x = cookieList[i].substr(0, cookieList[i].indexOf("="));
                x = x.replace(/^\s+|\s+$/g, "");
                if (x.indexOf(cookieName) === 0) {
                    cookieName = cookieList[i].substr(0, cookieList[i].indexOf("="));
                }
            }
            sn.app.setCookie(cookieName, null, -1);
        },
        submitclienterror: function (message, errors) {
            $.get("/base/SubmitClientError?message=" + message + "&errors=" + errors.toString())
                .done(function (res) { })
                .fail(function (res) { });
        },
        handleclienterror: function (message, errors) {
            var _this = this;
            iziToast.show({
                title: 'Oops!',
                message: "Something went wrong.",
                color: 'red',
                position: 'bottomCenter',
                timeout: 12000,
                buttons: [
                    [
                        '<button>Submit Error</button>', function (instance, toast) {
                            _this.submitclienterror(message, errors.toString());
                            instance.hide({ transitionOut: 'fadeOutUp' }, toast, 'close', 'btn2');
                        }
                    ]
                ]
            });
        }
    };
var AutoComplete = (function () {
    function AutoComplete() {
        this.initSearchAutoComplete();
    }
    AutoComplete.prototype.initSearchAutoComplete = function () {
        var options = {
            name: 'suggested',
            display: 'actual',
            value: "value",
            limit: Infinity,
            minLength: 3,
            hint: false,
            autoselect: true,
            source: function (query, syncResults, asyncResults) {
                var contactId = '';
                if ($('#contactId').length > 0) {
                    contactId = $('#contactId').val();
                }
                var contactIdFilter = '';
                if (contactId.length > 0) {
                    contactIdFilter = 'contactId=' + contactId + '&';
                }
                $.get('/site/httphandlers/suggest.ashx?' + contactIdFilter + 'term=' + encodeURIComponent(query), function (data) {
                    asyncResults(data);
                });
            },
            templates: {
                empty: [
                    '<div class=".tt-suggestion EmptyMessage">',
                    'Sorry, no matches found',
                    '</div>'
                ].join('\n'),
                suggestion: suggestionMarkup
            },
        };
        $("#scrollable-dropdown-menu .Typeahead").typeahead(null, options);
        $('.Typeahead').on('typeahead:select', function (ev) {
            document.location.href = ev.handleObj.handler.arguments[1].Url;
        });
        $('.Typeahead').on('typeahead:selected', function (ev) {
            $("#SearchFilterURL").val(ev.handleObj.handler.arguments[1].Url);
        });
        $('.Typeahead').on('keydown', function (e) {
            e.keyCode = e.which = 9;
            if (e.which === 13)
                $(this).trigger(e);
        }).bind('typeahead:render', function (e) {
            $('.Typeahead').parent().find('.tt-selectable:first').addClass('tt-cursor');
        });
        var typeaheads = document.getElementsByClassName("Typeahead");
        for (var i_1 = 0; i_1 < typeaheads.length; i_1++) {
            var typeahead = typeaheads[i_1];
            typeahead.addEventListener("click", function () {
                this.value = '';
                if (window.innerWidth < 768) {
                    $.scrollTo(this, 600, { offset: -15 });
                }
            });
        }
        function suggestionMarkup(e) {
            var metaMessage = e.Total + ' places to stay';
            if (e.Url.indexOf('/go/') >= 0) {
                metaMessage = '';
            }
            var imagepath = e.Image;
            if (imagepath === undefined) {
                imagepath = "/images/marker-min.png";
            }
            return ("<div class=\"suggestion u-cf Typeahead-suggestion Typeahead-selectable\">              <img class=\"suggestion-avatar\" src=\"" + imagepath + "\" onerror=\"this.src='/images/marker-min.png'\">            <div class=\"suggestion-details\">            <div class=\"suggestion-name\">" + e.Title + "</div>            <div class=\"suggestion-location\">" + e.Location + "</div>            <div class=\"suggestion-info\">" + metaMessage + "</div>            </div>            </div>");
        }
    };
    return AutoComplete;
}());
$(function () {
    $(".heart")
        .on("click", function (evt) {
        $(this).toggleClass("is-active");
        sn.app.shortListTriggered(evt, evt.currentTarget);
        return false;
    });
});
function scrollOnClick(e) {
    if (location.pathname.replace(/^\//, "") === e.target.pathname.replace(/^\//, "") &&
        location.hostname === this.hostname) {
        var $target = $(this.hash);
        $target = $target.length && $target || $("[name=" + this.hash.slice(1) + "]");
        if ($target.length) {
            var targetOffset = $target.offset().top - 100;
            $("html, body").stop().animate({ scrollTop: targetOffset }, 500);
            return true;
        }
    }
    return true;
}
function searchKeyPressHandler(e) {
    if (e.which === 13) {
        var searchTerm = $(e.target).val();
        window.location.href = "/search/mainsearch.aspx?term=" + searchTerm;
        return false;
    }
    return true;
}
;
function onFocusHandler() {
    $(this).attr("placeholder", "");
}
;
function searchButtonClickHandler() {
    var searchTerm = $(this).parent().find(".hero-search").val();
    window.location.href = "/search/mainsearch.aspx?term=" + searchTerm;
}
;
function isTouchDevice() {
    return "ontouchstart" in window
        ||
            "onmsgesturechange" in window;
}
;
function getParameterByName(name) {
    name = name.replace(/[\[\]]/g, "\\$&").toLowerCase();
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(window.location.href.toLowerCase());
    if (!results)
        return "";
    if (!results[2])
        return "";
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}
;
function addParameter(url, name, value) {
    var join = "&";
    if (url.indexOf("?") == -1) {
        join = "?";
    }
    return url + join + name + "=" + value;
}
$(window).resize(function () {
    if ($(".media").length > 0) {
        $(".media img[data-remote-url]").dynamicImages(".media-img");
    }
});
(function ($) {
    $.fn.isOnScreen = function () {
        var topView = $(window).scrollTop();
        var botView = topView + $(window).height();
        var topElement = this.offset().top;
        var botElement = topElement + this.height();
        return ((botElement <= botView) && (topElement >= topView));
    };
})(jQuery);
var recaptchaLoadCallback = function () {
    if ($('#recap').length) {
        grecaptcha.render('recap', {
            'sitekey': '6LeuugATAAAAAJFmsgWGTaSNunnXIk68kqKMXyV2',
            'callback': verifyCallback
        });
    }
};
function verifyCallback(response) {
    $('#recap-response').val(response);
    $("#recap-error").hide();
}
function getEstablishmentReviewStarHtml(reviewTotal) {
    var stars = reviewTotal / 20, starsRounded = (Math.ceil(stars * 2) / 2).toFixed(1), starHtml = "";
    if (parseInt(starsRounded) > 0) {
        for (i = 1; i <= 5; i++) {
            starHtml += "<i class=\"i i-star";
            if (starsRounded >= i) {
                starHtml += " i-star-full";
            }
            else {
                if (parseInt(starsRounded) > i - 1) {
                    starHtml += " i-star-half";
                }
            }
            starHtml += "\">&#9733;</i>";
        }
    }
    return starHtml;
}
function getEstablishmentShortDescription(description, requiredLength) {
    if (description.length > requiredLength) {
        var shortDescription = description.substring(0, requiredLength);
        var lastIndex = shortDescription.lastIndexOf(" ");
        return shortDescription.substring(0, lastIndex) + "...  ";
    }
    return description;
}
function getEstablishmentSeeMoreLink(description, requiredLength) {
    if (description.length > requiredLength) {
        return "<a class='see-more-less' href='javascript:void(0);'>see more</a>";
    }
    return "";
}
//# sourceMappingURL=sn.app.js.map
sn.app.referrals = sn.app.referrals || {
    maxEmailsAllowed: 5,
    init: function (maxEmails) {
        if (maxEmails > 1) {
            sn.app.referrals.maxEmailsAllowed = maxEmails;
        }
        sn.app.referrals.initSignupClick();
        $(".tac blue").tooltip();
        $("#friendsEmailAddressList").tagit({
            placeholderText: "Add " + sn.app.referrals.maxEmailsAllowed + " friends' email addresses",
            tagLimit: sn.app.referrals.maxEmailsAllowed,
            beforeTagAdded: function (event, ui) {
                var result = false;
                var input = ui.tagLabel;
                var emails = input.split(/[ ,;]+/);
                if (emails.length > 1) {
                    emails.forEach(function (email) {
                        $("#friendsEmailAddressList").tagit("createTag", email);
                    });
                    return false;
                }
                if (!sn.app.isValidEmailAddress(ui.tagLabel)) {
                    ui.tag.addClass("invalid-tag");
                    $(".sendemail.first").addClass("disabled");
                }
                else {
                    result = true;
                    $(".sendemail.first").removeClass("disabled");
                    ui.tag.removeClass("invalid-tag");
                    sn.app.referrals.hideMessage();
                }
                $(".tagit-new input.ui-autocomplete-input")[0].placeholder = "";
                $(".tagit-new input.ui-autocomplete-input")[0].style.width = "100%";
                $(".tagit-new input.ui-autocomplete-input")[0].style.textAlign = "left";
                $(".tagit-new")[0].style.width = "40%";
                return result;
            },
        });
        $("#friendsEmailAddressList").change(function () {
            $($("a.sendemail")[0]).data("email-address-list", $(this).val());
            $("#messageLocator").data("email-address", $(this).val());
            var currentHeightOfEmailBar = $($(".earn")[0]).position().top + $($(".earn")[0]).outerHeight(true);
            $("#referralDetail").parent().slideDown(currentHeightOfEmailBar);
        });
        $("a.sendemail").click(function (event) {
            event.preventDefault();
            var sender = $(this);
            if (sn.app.referrals.isUserLoggedIn()) {
                if (!sender.hasClass("disabled")) {
                    var emailAddressList = sender.data("email-address-list");
                    if (emailAddressList === undefined) {
                        sn.app.referrals.showError("#messageLocator", "Please enter a valid email address");
                        return;
                    }
                    var isReminder = sender.hasClass("remind");
                    sn.app.referrals.sendEmail(emailAddressList, sender, isReminder);
                }
            }
            else {
                sn.app.showLogin(function (e) {
                    if (e.status) {
                        if (!sender.hasClass("disabled")) {
                            var emailAddressList = sender.data("email-address-list");
                            if (emailAddressList === undefined) {
                                sn.app.referrals.showError("#messageLocator", "Please enter a valid email address");
                                return;
                            }
                            var isReminder = sender.hasClass("remind");
                            sn.app.referrals.sendEmail(emailAddressList, sender, isReminder);
                        }
                    }
                }, function (e) {
                    if (e.status) {
                        if (!sender.hasClass("disabled")) {
                            var emailAddressList = sender.data("email-address-list");
                            if (emailAddressList === undefined) {
                                sn.app.referrals.showError("#messageLocator", "Please enter a valid email address");
                                return;
                            }
                            var isReminder = sender.hasClass("remind");
                            sn.app.referrals.sendEmail(emailAddressList, sender, isReminder);
                        }
                    }
                });
            }
        });
        $(".login-wallet").on("click", function (event) {
            event.preventDefault();
            sn.app.showLogin(function (e) {
                if (e.status) {
                    window.location.reload(true);
                }
            }, function (e) {
                if (e.status) {
                    window.location.reload(true);
                }
            });
        });
    },
    initSignupClick: function () {
        $("#signUpButton").on("click", function () {
            sn.app.showRegister(function (e) {
                if (e.status) {
                    window.location.reload(true);
                }
            }, function (e) {
                if (e.status) {
                    window.location.reload(true);
                }
            });
        });
    },
    isUserLoggedIn: function () {
        var contactId = -1;
        if ($("#referralContactId").length > 0) {
            contactId = $("#referralContactId").first().val();
            return contactId > 0;
        }
        else if ($("#hfCustomerId").length > 0) {
            contactId = $("#hfCustomerId").first().val();
            return contactId > 0;
        }
        return false;
    },
    getReferrerContactId: function () {
        var contactid = -3;
        if ($("#referralContactId").length > 0) {
            var contactId = $("#referralContactId").first().val();
            return contactId;
        }
        else if ($("#hfCustomerId").length > 0) {
            contactId = $("#hfCustomerId").first().val();
            return contactId;
        }
        return -3;
    },
    sendEmail: function (emailAddressList, sender, isReminder) {
        var data = { "emailAddressList": emailAddressList, "contactId": sn.app.referrals.getReferrerContactId() };
        var urlString = isReminder ? "/referral/processreminders" : "/referral/processreferrals";
        var processJsonData = false;
        if (document.URL.indexOf("paymentresult.aspx") >= 0) {
            urlString = "/referral/processpaymentreferrals";
            processJsonData = true;
        }
        if (!emailAddressList) {
            sn.app.referrals.showError("#messageLocator", "No valid email addresses found.");
            return;
        }
        sn.app.referrals.hideMessage();
        $.ajax({
            dataType: "html",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: urlString,
            data: JSON.stringify(data),
            beforeSend: function () {
                $($("a.sendemail")["0"]).html("<i class='icon-spin3 animate-spin'> </i> Sending...");
            }
        })
            .done(function (response) {
            if (processJsonData) {
                var jsonResponse = $.parseJSON(response);
                if (jsonResponse.ValidEmails === "true") {
                    sn.app.referrals.showSuccess("#messageLocator", jsonResponse.Message);
                }
                else {
                    sn.app.referrals.showError("#messageLocator", jsonResponse.Message);
                }
            }
            sn.app.referrals.reset();
        })
            .always(function (response) {
            sn.app.referrals.afterSendSuccess(sender, response);
        })
            .fail(function (jqXhr, textStatus, errorThrown) {
            sn.app.referrals.afterSendFail(sender, jqXhr, textStatus, errorThrown);
        });
    },
    afterSendSuccess: function (sender, response) {
        if (response.indexOf("referralDetail") > 0) {
            $("#referralDetail").replaceWith(response);
            $("#newlyAddeddReferralsContainer").show();
            $("html, body").animate({
                scrollTop: $("#referralDetail").offset().top
            }, 1000);
            $("#referralDetail").effect("highlight", {}, 1000);
        }
        else {
            sn.app.referrals.showSuccess('label[data-email-address="' + sender.data("email-address-list") + '"]', response);
        }
    },
    afterSendFail: function (sender, jqXhr, textStatus, errorThrown) {
        sn.app.referrals.showError('label[data-email-address="' + sender.data("email-address-list") + '"]', errorThrown);
    },
    showSuccess: function (selector, message) {
        $(selector).removeClass("red");
        $(selector).addClass("green larger");
        sn.app.referrals.showMessage(selector, message, false);
    },
    showError: function (selector, message) {
        $(selector).removeClass("blue");
        $(selector).removeClass("larger");
        $(selector).addClass("red");
        sn.app.referrals.showMessage(selector, message, false);
    },
    showMessage: function (selector, message, hideAfterShow) {
        if (hideAfterShow === void 0) { hideAfterShow = true; }
        $(selector).html("");
        $(selector).append(message);
        $(selector).show();
    },
    hideMessage: function () {
        $("#messageLocator").hide();
    },
    reset: function () {
        $($("a.sendemail")["0"]).html("Invite friends");
        $("#friendsEmailAddressList").tagit("removeAll");
        $(".tagit-new input.ui-autocomplete-input")[0].placeholder = "Add " + sn.app.referrals.maxEmailsAllowed + " friends' email addresses";
        $(".tagit-new input.ui-autocomplete-input")[0].style.width = "";
        $(".tagit-new input.ui-autocomplete-input")[0].style.textAlign = "center";
        $(".tagit-new")[0].style.width = "";
    },
    initReferralHeaderBanner: function () {
        $(".referral-notice").hide();
        $(".closeReferral").on("click", sn.app.referrals.hideReferralHeaderBanner);
        sn.app.referrals.mustShowReferralHeaderBanner(true);
    },
    mustShowReferralHeaderBanner: function (wireAjaxPostBack) {
        var displayNotification = false;
        var cookie = sn.app.getCookieValue("vc_", true);
        if (cookie !== undefined) {
            var o = JSON.parse(cookie);
            var today = new Date();
            today.setHours(0, 0, 0, 0);
            var validDate = new Date();
            validDate.setHours(0, 0, 0, 0);
            if (o.ExpiryDate != null) {
                validDate = new Date(o.ExpiryDate);
                validDate.setHours(0, 0, 0, 0);
            }
            else {
                validDate = today;
            }
            displayNotification = validDate >= today;
            if (wireAjaxPostBack) {
                if (displayNotification) {
                    $.ajax({
                        method: "get",
                        data: { voucherCode: o.ShortCode },
                        url: "/referral/getvouchercookiemodel",
                        async: true,
                        success: function (model) {
                            if (model !== undefined) {
                                o = model;
                                var datediff = Math.round((validDate.valueOf() - today.valueOf()) / (1000 * 60 * 60 * 24));
                                sn.app.setCookie("vc_" + model.ShortCode, JSON.stringify(model), datediff);
                                displayNotification = datediff >= 0;
                            }
                        }
                    });
                    if (displayNotification) {
                        sn.app.referrals.showReferralHeaderBanner(o);
                        sn.app.referrals.initializeStickyNotification();
                    }
                    else {
                        sn.app.referrals.hideReferralHeaderBanner();
                    }
                }
            }
        }
    },
    showReferralHeaderBanner: function (model) {
        var notice = $(".referral-notice");
        var noticeAmount = $(".referral-value-amount");
        var noticeShortCode = $(".referral-voucher-code");
        var noticeExpiry = $(".referral-expirydate");
        noticeAmount.text(model.AmountDisplay);
        noticeShortCode.text(model.ShortCode);
        var parseDate = new Date(model.ExpiryDate);
        noticeExpiry.text(parseDate.toDateString());
        notice.show();
    },
    initializeStickyNotification: function () {
        sn.app.referrals.stickyNotificationOnScroll();
        window.addEventListener("scroll", sn.app.referrals.stickyNotificationOnScroll);
        window.addEventListener("resize", sn.app.referrals.stickyNotificationOnScroll);
    },
    stickyNotificationOnScroll: function () {
        if (sn.app.getCookieValue("vc_", true)) {
            var docViewTop = $(window).scrollTop();
            if (docViewTop > 50) {
                $(".referral-notice").addClass("stickyFixedToTop");
                $(".referral-notice").fadeIn();
            }
            else {
                $(".referral-notice").removeClass("stickyFixedToTop");
            }
        }
    },
    hideReferralHeaderBanner: function () {
        $(".referral-notice").hide();
        sn.app.deleteCookie("vc_");
    }
};
//# sourceMappingURL=sn.app.referrals.js.map
/*!
 * typeahead.js 1.2.0
 * https://github.com/twitter/typeahead.js
 * Copyright 2013-2017 Twitter, Inc. and other contributors; Licensed MIT
 */

!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return a.Bloodhound=b(c)}):"object"==typeof exports?module.exports=b(require("jquery")):a.Bloodhound=b(a.jQuery)}(this,function(a){var b=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},isElement:function(a){return!(!a||1!==a.nodeType)},isJQuery:function(b){return b instanceof a},toStr:function(a){return b.isUndefined(a)||null===a?"":a+""},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){if(!(d=c.call(null,e,a,b)))return!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){if(d=c.call(null,e,a,b))return!1}),!!d):d},mixin:a.extend,identity:function(a){return a},clone:function(b){return a.extend(!0,{},b)},getIdGenerator:function(){var a=0;return function(){return a++}},templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,j<=0?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},stringify:function(a){return b.isString(a)?a:JSON.stringify(a)},guid:function(){function a(a){var b=(Math.random().toString(16)+"000000000").substr(2,8);return a?"-"+b.substr(0,4)+"-"+b.substr(4,4):b}return"tt-"+a()+a(!0)+a(!0)+a()},noop:function(){}}}(),c="1.2.0",d=function(){"use strict";function a(a){return a=b.toStr(a),a?a.split(/\s+/):[]}function c(a){return a=b.toStr(a),a?a.split(/\W+/):[]}function d(a){a=b.toStr(a);var c=[],d="";return b.each(a.split(""),function(a){a.match(/\s+/)?d="":(c.push(d+a),d+=a)}),c}function e(a){return function(c){return c=b.isArray(c)?c:[].slice.call(arguments,0),function(d){var e=[];return b.each(c,function(c){e=e.concat(a(b.toStr(d[c])))}),e}}}return{nonword:c,whitespace:a,ngram:d,obj:{nonword:e(c),whitespace:e(a),ngram:e(d)}}}(),e=function(){"use strict";function c(c){this.maxSize=b.isNumber(c)?c:100,this.reset(),this.maxSize<=0&&(this.set=this.get=a.noop)}function d(){this.head=this.tail=null}function e(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(c.prototype,{set:function(a,b){var c,d=this.list.tail;this.size>=this.maxSize&&(this.list.remove(d),delete this.hash[d.key],this.size--),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new e(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];if(b)return this.list.moveToFront(b),b.val},reset:function(){this.size=0,this.hash={},this.list=new d}}),b.mixin(d.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),c}(),f=function(){"use strict";function c(a,c){this.prefix=["__",a,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+b.escapeRegExChars(this.prefix)),this.ls=c||h,!this.ls&&this._noop()}function d(){return(new Date).getTime()}function e(a){return JSON.stringify(b.isUndefined(a)?null:a)}function f(b){return a.parseJSON(b)}function g(a){var b,c,d=[],e=h.length;for(b=0;b<e;b++)(c=h.key(b)).match(a)&&d.push(c.replace(a,""));return d}var h;try{h=window.localStorage,h.setItem("~~~","!"),h.removeItem("~~~")}catch(a){h=null}return b.mixin(c.prototype,{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=b.noop},_safeSet:function(a,b){try{this.ls.setItem(a,b)}catch(a){"QuotaExceededError"===a.name&&(this.clear(),this._noop())}},get:function(a){return this.isExpired(a)&&this.remove(a),f(this.ls.getItem(this._prefix(a)))},set:function(a,c,f){return b.isNumber(f)?this._safeSet(this._ttlKey(a),e(d()+f)):this.ls.removeItem(this._ttlKey(a)),this._safeSet(this._prefix(a),e(c))},remove:function(a){return this.ls.removeItem(this._ttlKey(a)),this.ls.removeItem(this._prefix(a)),this},clear:function(){var a,b=g(this.keyMatcher);for(a=b.length;a--;)this.remove(b[a]);return this},isExpired:function(a){var c=f(this.ls.getItem(this._ttlKey(a)));return!!(b.isNumber(c)&&d()>c)}}),c}(),g=function(){"use strict";function c(a){a=a||{},this.maxPendingRequests=a.maxPendingRequests||6,this.cancelled=!1,this.lastReq=null,this._send=a.transport,this._get=a.limiter?a.limiter(this._get):this._get,this._cache=a.cache===!1?new e(0):g}var d=0,f={},g=new e(10);return c.setMaxPendingRequests=function(a){this.maxPendingRequests=a},c.resetCache=function(){g.reset()},b.mixin(c.prototype,{_fingerprint:function(b){return b=b||{},b.url+b.type+a.param(b.data||{})},_get:function(a,b){function c(a){b(null,a),j._cache.set(h,a)}function e(){b(!0)}function g(){d--,delete f[h],j.onDeckRequestArgs&&(j._get.apply(j,j.onDeckRequestArgs),j.onDeckRequestArgs=null)}var h,i,j=this;h=this._fingerprint(a),this.cancelled||h!==this.lastReq||((i=f[h])?i.done(c).fail(e):d<this.maxPendingRequests?(d++,f[h]=this._send(a).done(c).fail(e).always(g)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(c,d){var e,f;d=d||a.noop,c=b.isString(c)?{url:c}:c||{},f=this._fingerprint(c),this.cancelled=!1,this.lastReq=f,(e=this._cache.get(f))?d(null,e):this._get(c,d)},cancel:function(){this.cancelled=!0}}),c}(),h=window.SearchIndex=function(){"use strict";function c(c){c=c||{},c.datumTokenizer&&c.queryTokenizer||a.error("datumTokenizer and queryTokenizer are both required"),this.identify=c.identify||b.stringify,this.datumTokenizer=c.datumTokenizer,this.queryTokenizer=c.queryTokenizer,this.matchAnyQueryToken=c.matchAnyQueryToken,this.reset()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){var a={};return a[i]=[],a[h]={},a}function f(a){for(var b={},c=[],d=0,e=a.length;d<e;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){var c=0,d=0,e=[];a=a.sort(),b=b.sort();for(var f=a.length,g=b.length;c<f&&d<g;)a[c]<b[d]?c++:a[c]>b[d]?d++:(e.push(a[c]),c++,d++);return e}var h="c",i="i";return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;c.datums[f=c.identify(a)]=a,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split("");g=d.shift();)b=b[h][g]||(b[h][g]=e()),b[i].push(f)})})},get:function(a){var c=this;return b.map(a,function(a){return c.datums[a]})},search:function(a){var c,e,j=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length&&!j.matchAnyQueryToken)return!1;for(b=j.trie,c=a.split("");b&&(d=c.shift());)b=b[h][d];if(b&&0===c.length)f=b[i].slice(0),e=e?g(e,f):f;else if(!j.matchAnyQueryToken)return e=[],!1}),e?b.map(f(e),function(a){return j.datums[a]}):[]},all:function(){var a=[];for(var b in this.datums)a.push(this.datums[b]);return a},reset:function(){this.datums={},this.trie=e()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),i=function(){"use strict";function a(a){this.url=a.url,this.ttl=a.ttl,this.cache=a.cache,this.prepare=a.prepare,this.transform=a.transform,this.transport=a.transport,this.thumbprint=a.thumbprint,this.storage=new f(a.cacheKey)}var c;return c={data:"data",protocol:"protocol",thumbprint:"thumbprint"},b.mixin(a.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(a){this.cache&&(this.storage.set(c.data,a,this.ttl),this.storage.set(c.protocol,location.protocol,this.ttl),this.storage.set(c.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var a,b={};return this.cache?(b.data=this.storage.get(c.data),b.protocol=this.storage.get(c.protocol),b.thumbprint=this.storage.get(c.thumbprint),a=b.thumbprint!==this.thumbprint||b.protocol!==location.protocol,b.data&&!a?b.data:null):null},fromNetwork:function(a){function b(){a(!0)}function c(b){a(null,e.transform(b))}var d,e=this;a&&(d=this.prepare(this._settings()),this.transport(d).fail(b).done(c))},clear:function(){return this.storage.clear(),this}}),a}(),j=function(){"use strict";function a(a){this.url=a.url,this.prepare=a.prepare,this.transform=a.transform,this.indexResponse=a.indexResponse,this.transport=new g({cache:a.cache,limiter:a.limiter,transport:a.transport,maxPendingRequests:a.maxPendingRequests})}return b.mixin(a.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(a,b){function c(a,c){b(a?[]:e.transform(c))}var d,e=this;if(b)return a=a||"",d=this.prepare(a,this._settings()),this.transport.get(d,c)},cancelLastRequest:function(){this.transport.cancel()}}),a}(),k=function(){"use strict";function d(d){var e;return d?(e={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:b.identity,transform:b.identity,transport:null},d=b.isString(d)?{url:d}:d,d=b.mixin(e,d),!d.url&&a.error("prefetch requires url to be set"),d.transform=d.filter||d.transform,d.cacheKey=d.cacheKey||d.url,d.thumbprint=c+d.thumbprint,d.transport=d.transport?h(d.transport):a.ajax,d):null}function e(c){var d;if(c)return d={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:b.identity,transport:null},c=b.isString(c)?{url:c}:c,c=b.mixin(d,c),!c.url&&a.error("remote requires url to be set"),c.transform=c.filter||c.transform,c.prepare=f(c),c.limiter=g(c),c.transport=c.transport?h(c.transport):a.ajax,delete c.replace,delete c.wildcard,delete c.rateLimitBy,delete c.rateLimitWait,c}function f(a){function b(a,b){return b.url=f(b.url,a),b}function c(a,b){return b.url=b.url.replace(g,encodeURIComponent(a)),b}function d(a,b){return b}var e,f,g;return e=a.prepare,f=a.replace,g=a.wildcard,e?e:e=f?b:a.wildcard?c:d}function g(a){function c(a){return function(c){return b.debounce(c,a)}}function d(a){return function(c){return b.throttle(c,a)}}var e,f,g;return e=a.limiter,f=a.rateLimitBy,g=a.rateLimitWait,e||(e=/^throttle$/i.test(f)?d(g):c(g)),e}function h(c){return function(d){function e(a){b.defer(function(){g.resolve(a)})}function f(a){b.defer(function(){g.reject(a)})}var g=a.Deferred();return c(d,e,f),g}}return function(c){var f,g;return f={initialize:!0,identify:b.stringify,datumTokenizer:null,queryTokenizer:null,matchAnyQueryToken:!1,sufficient:5,indexRemote:!1,sorter:null,local:[],prefetch:null,remote:null},c=b.mixin(f,c||{}),!c.datumTokenizer&&a.error("datumTokenizer is required"),!c.queryTokenizer&&a.error("queryTokenizer is required"),g=c.sorter,c.sorter=g?function(a){return a.sort(g)}:b.identity,c.local=b.isFunction(c.local)?c.local():c.local,c.prefetch=d(c.prefetch),c.remote=e(c.remote),c}}(),l=function(){"use strict";function c(a){a=k(a),this.sorter=a.sorter,this.identify=a.identify,this.sufficient=a.sufficient,this.indexRemote=a.indexRemote,this.local=a.local,this.remote=a.remote?new j(a.remote):null,this.prefetch=a.prefetch?new i(a.prefetch):null,this.index=new h({identify:this.identify,datumTokenizer:a.datumTokenizer,queryTokenizer:a.queryTokenizer}),a.initialize!==!1&&this.initialize()}var e;return e=window&&window.Bloodhound,c.noConflict=function(){return window&&(window.Bloodhound=e),c},c.tokenizers=d,b.mixin(c.prototype,{__ttAdapter:function(){function a(a,b,d){return c.search(a,b,d)}function b(a,b){return c.search(a,b)}var c=this;return this.remote?a:b},_loadPrefetch:function(){function b(a,b){return a?c.reject():(e.add(b),e.prefetch.store(e.index.serialize()),void c.resolve())}var c,d,e=this;return c=a.Deferred(),this.prefetch?(d=this.prefetch.fromCache())?(this.index.bootstrap(d),c.resolve()):this.prefetch.fromNetwork(b):c.resolve(),c.promise()},_initialize:function(){function a(){b.add(b.local)}var b=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done(a),this.initPromise},initialize:function(a){return!this.initPromise||a?this._initialize():this.initPromise},add:function(a){return this.index.add(a),this},get:function(a){return a=b.isArray(a)?a:[].slice.call(arguments),this.index.get(a)},search:function(a,c,d){function e(a){var c=[];b.each(a,function(a){!b.some(f,function(b){return g.identify(a)===g.identify(b)})&&c.push(a)}),g.indexRemote&&g.add(c),d(c)}var f,g=this;return c=c||b.noop,d=d||b.noop,f=this.sorter(this.index.search(a)),c(this.remote?f.slice():f),this.remote&&f.length<this.sufficient?this.remote.get(a,e):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return g.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),c}();return l}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){var b=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},isElement:function(a){return!(!a||1!==a.nodeType)},isJQuery:function(b){return b instanceof a},toStr:function(a){return b.isUndefined(a)||null===a?"":a+""},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){if(!(d=c.call(null,e,a,b)))return!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){if(d=c.call(null,e,a,b))return!1}),!!d):d},mixin:a.extend,identity:function(a){return a},clone:function(b){return a.extend(!0,{},b)},getIdGenerator:function(){var a=0;return function(){return a++}},templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,j<=0?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},stringify:function(a){return b.isString(a)?a:JSON.stringify(a)},guid:function(){function a(a){var b=(Math.random().toString(16)+"000000000").substr(2,8);return a?"-"+b.substr(0,4)+"-"+b.substr(4,4):b}return"tt-"+a()+a(!0)+a(!0)+a()},noop:function(){}}}(),c=function(){"use strict";function a(a){var g,h;return h=b.mixin({},f,a),g={css:e(),classes:h,html:c(h),selectors:d(h)},{css:g.css,html:g.html,classes:g.classes,selectors:g.selectors,mixin:function(a){b.mixin(a,g)}}}function c(a){return{wrapper:'<span class="'+a.wrapper+'"></span>',menu:'<div role="listbox" class="'+a.menu+'"></div>'}}function d(a){var c={};return b.each(a,function(a,b){c[b]="."+a}),c}function e(){var a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return b.isMsie()&&b.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),a}var f={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return a}(),d=function(){"use strict";function c(b){b&&b.el||a.error("EventBus initialized without el"),this.$el=a(b.el)}var d,e;return d="typeahead:",e={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},b.mixin(c.prototype,{_trigger:function(b,c){var e=a.Event(d+b);return this.$el.trigger.call(this.$el,e,c||[]),e},before:function(a){var b,c;return b=[].slice.call(arguments,1),c=this._trigger("before"+a,b),c.isDefaultPrevented()},trigger:function(a){var b;this._trigger(a,[].slice.call(arguments,1)),(b=e[a])&&this._trigger(b,[].slice.call(arguments,1))}}),c}(),e=function(){"use strict";function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,"async",b,c,d)}function c(b,c,d){return a.call(this,"sync",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&e<f;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),f=function(a){"use strict";function c(a){return f[a.toUpperCase()]||a}function d(a,d,e,f){for(var g,h=[],i=0,j=a.length;i<j;i++){var k=b.escapeRegExChars(a[i]);f&&(k=k.replace(/\S/g,c)),h.push(k)}return g=e?"\\b("+h.join("|")+")\\b":"("+h.join("|")+")",d?new RegExp(g):new RegExp(g,"i")}var e={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1,diacriticInsensitive:!1},f={A:"[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Ａａ]",B:"[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Ｂｂ]",C:"[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Ｃｃ]",D:"[DdĎďǄ-ǆǱ-ǳᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Ｄｄ]",E:"[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ｅｅ]",F:"[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ﬀ-ﬄＦｆ]",G:"[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Ｇｇ]",H:"[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Ｈｈ]",I:"[IiÌ-Ïì-ïĨ-İĲĳǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕ﬁﬃＩｉ]",J:"[JjĲ-ĵǇ-ǌǰʲᴶⅉ⒥ⒿⓙⱼＪｊ]",K:"[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Ｋｋ]",L:"[LlĹ-ŀǇ-ǉˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿ﬂﬄＬｌ]",M:"[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Ｍｍ]",N:"[NnÑñŃ-ŉǊ-ǌǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Ｎｎ]",O:"[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Ｏｏ]",P:"[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Ｐｐ]",Q:"[Qqℚ⒬Ⓠⓠ㏃Ｑｑ]",R:"[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Ｒｒ]",S:"[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜ﬆＳｓ]",T:"[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ﬅﬆＴｔ]",U:"[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Ｕｕ]",V:"[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Ｖｖ]",W:"[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ｗｗ]",X:"[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Ｘｘ]",Y:"[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Ｙｙ]",Z:"[ZzŹ-žǱ-ǳᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Ｚｚ]"};return function(c){function f(b){var d,e,f;return(d=h.exec(b.data))&&(f=a.createElement(c.tagName),c.className&&(f.className=c.className),e=b.splitText(d.index),e.splitText(d[0].length),f.appendChild(e.cloneNode(!0)),b.parentNode.replaceChild(f,e)),!!d}function g(a,b){for(var c,d=3,e=0;e<a.childNodes.length;e++)c=a.childNodes[e],c.nodeType===d?e+=b(c)?1:0:g(c,b)}var h;c=b.mixin({},e,c),c.node&&c.pattern&&(c.pattern=b.isArray(c.pattern)?c.pattern:[c.pattern],h=d(c.pattern,c.caseSensitive,c.wordsOnly,c.diacriticInsensitive),g(c.node,f))}}(window.document),g=function(){"use strict";function c(c,e){c=c||{},c.input||a.error("input is missing"),e.mixin(this),this.$hint=a(c.hint),this.$input=a(c.input),this.$input.attr({"aria-activedescendant":"","aria-owns":this.$input.attr("id")+"_listbox",role:"combobox","aria-readonly":"true","aria-autocomplete":"list"}),a(e.menu).attr("id",this.$input.attr("id")+"_listbox"),this.query=this.$input.val(),this.queryWhenFocused=this.hasFocus()?this.query:null,this.$overflowHelper=d(this.$input),this._checkLanguageDirection(),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=b.noop),this.onSync("cursorchange",this._updateDescendent)}function d(b){return a('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:b.css("font-family"),fontSize:b.css("font-size"),fontStyle:b.css("font-style"),fontVariant:b.css("font-variant"),fontWeight:b.css("font-weight"),wordSpacing:b.css("word-spacing"),letterSpacing:b.css("letter-spacing"),textIndent:b.css("text-indent"),textRendering:b.css("text-rendering"),textTransform:b.css("text-transform")}).insertAfter(b)}function f(a,b){return c.normalizeQuery(a)===c.normalizeQuery(b)}function g(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var h;return h={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},c.normalizeQuery=function(a){return b.toStr(a).replace(/^\s*/g,"").replace(/\s{2,}/g," ")},b.mixin(c.prototype,e,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.queryWhenFocused=this.query,this.trigger("focused")},_onKeydown:function(a){var b=h[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+"Keyed",a)},_onInput:function(){this._setQuery(this.getInputValue()),this.clearHintIfInvalid(),this._checkLanguageDirection()},_managePreventDefault:function(a,b){var c;switch(a){case"up":case"down":c=!g(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case"tab":c=!g(b);break;default:c=!0}return c},_checkLanguageDirection:function(){var a=(this.$input.css("direction")||"ltr").toLowerCase();this.dir!==a&&(this.dir=a,this.$hint.attr("dir",a),this.trigger("langDirChanged",a))},_setQuery:function(a,b){var c,d;c=f(a,this.query),d=!!c&&this.query.length!==a.length,this.query=a,b||c?!b&&d&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},_updateDescendent:function(a,b){this.$input.attr("aria-activedescendant",b)},bind:function(){var a,c,d,e,f=this;return a=b.bind(this._onBlur,this),c=b.bind(this._onFocus,this),d=b.bind(this._onKeydown,this),e=b.bind(this._onInput,this),this.$input.on("blur.tt",a).on("focus.tt",c).on("keydown.tt",d),!b.isMsie()||b.isMsie()>9?this.$input.on("input.tt",e):this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(a){h[a.which||a.keyCode]||b.defer(b.bind(f._onInput,f,a))}),this},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getLangDir:function(){return this.dir},getQuery:function(){return this.query||""},setQuery:function(a,b){this.setInputValue(a),this._setQuery(a,b)},hasQueryChangedSinceLastFocus:function(){return this.query!==this.queryWhenFocused},getInputValue:function(){return this.$input.val()},setInputValue:function(a){this.$input.val(a),this.clearHintIfInvalid(),this._checkLanguageDirection()},resetInputValue:function(){this.setInputValue(this.query)},getHint:function(){return this.$hint.val()},setHint:function(a){this.$hint.val(a)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var a,b,c,d;a=this.getInputValue(),b=this.getHint(),c=a!==b&&0===b.indexOf(a),d=""!==a&&c&&!this.hasOverflow(),!d&&this.clearHint()},hasFocus:function(){return this.$input.is(":focus")},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,c,d;return a=this.$input.val().length,c=this.$input[0].selectionStart,b.isNumber(c)?c===a:!document.selection||(d=document.selection.createRange(),d.moveStart("character",-a),a===d.text.length)},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$overflowHelper.remove(),this.$hint=this.$input=this.$overflowHelper=a("<div>")}}),c}(),h=function(){"use strict";function c(c,e){c=c||{},c.templates=c.templates||{},c.templates.notFound=c.templates.notFound||c.templates.empty,c.source||a.error("missing source"),c.node||a.error("missing node"),c.name&&!h(c.name)&&a.error("invalid dataset name: "+c.name),e.mixin(this),this.highlight=!!c.highlight,this.name=b.toStr(c.name||j()),this.limit=c.limit||5,this.displayFn=d(c.display||c.displayKey),this.templates=g(c.templates,this.displayFn),this.source=c.source.__ttAdapter?c.source.__ttAdapter():c.source,this.async=b.isUndefined(c.async)?this.source.length>2:!!c.async,this._resetLastSuggestion(),this.$el=a(c.node).attr("role","presentation").addClass(this.classes.dataset).addClass(this.classes.dataset+"-"+this.name)}function d(a){function c(b){return b[a]}return a=a||b.stringify,b.isFunction(a)?a:c}function g(c,d){function e(c){return a('<div role="option">').attr("id",b.guid()).text(d(c))}return{notFound:c.notFound&&b.templatify(c.notFound),pending:c.pending&&b.templatify(c.pending),header:c.header&&b.templatify(c.header),footer:c.footer&&b.templatify(c.footer),suggestion:c.suggestion||e}}function h(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var i,j;return i={dataset:"tt-selectable-dataset",val:"tt-selectable-display",obj:"tt-selectable-object"},j=b.getIdGenerator(),c.extractData=function(b){var c=a(b);return c.data(i.obj)?{dataset:c.data(i.dataset)||"",val:c.data(i.val)||"",obj:c.data(i.obj)||null}:null},b.mixin(c.prototype,e,{_overwrite:function(a,b){b=b||[],b.length?this._renderSuggestions(a,b):this.async&&this.templates.pending?this._renderPending(a):!this.async&&this.templates.notFound?this._renderNotFound(a):this._empty(),this.trigger("rendered",b,!1,this.name)},_append:function(a,b){b=b||[],b.length&&this.$lastSuggestion.length?this._appendSuggestions(a,b):b.length?this._renderSuggestions(a,b):!this.$lastSuggestion.length&&this.templates.notFound&&this._renderNotFound(a),this.trigger("rendered",b,!0,this.name)},_renderSuggestions:function(a,b){var c;c=this._getSuggestionsFragment(a,b),this.$lastSuggestion=c.children().last(),this.$el.html(c).prepend(this._getHeader(a,b)).append(this._getFooter(a,b))},_appendSuggestions:function(a,b){var c,d;c=this._getSuggestionsFragment(a,b),d=c.children().last(),this.$lastSuggestion.after(c),this.$lastSuggestion=d},_renderPending:function(a){var b=this.templates.pending;this._resetLastSuggestion(),b&&this.$el.html(b({query:a,dataset:this.name}))},_renderNotFound:function(a){var b=this.templates.notFound;this._resetLastSuggestion(),b&&this.$el.html(b({query:a,dataset:this.name}))},_empty:function(){this.$el.empty(),this._resetLastSuggestion()},_getSuggestionsFragment:function(c,d){var e,g=this;return e=document.createDocumentFragment(),b.each(d,function(b){var d,f;f=g._injectQuery(c,b),d=a(g.templates.suggestion(f)).data(i.dataset,g.name).data(i.obj,b).data(i.val,g.displayFn(b)).addClass(g.classes.suggestion+" "+g.classes.selectable),e.appendChild(d[0])}),this.highlight&&f({className:this.classes.highlight,node:e,pattern:c}),a(e)},_getFooter:function(a,b){return this.templates.footer?this.templates.footer({query:a,suggestions:b,dataset:this.name}):null},_getHeader:function(a,b){return this.templates.header?this.templates.header({query:a,suggestions:b,dataset:this.name}):null},_resetLastSuggestion:function(){this.$lastSuggestion=a()},_injectQuery:function(a,c){return b.isObject(c)?b.mixin({_query:a},c):c},update:function(b){function c(a){g||(g=!0,a=(a||[]).slice(0,e.limit),h=a.length,e._overwrite(b,a),h<e.limit&&e.async&&e.trigger("asyncRequested",b,e.name))}function d(c){if(c=c||[],!f&&h<e.limit){e.cancel=a.noop;var d=Math.abs(h-e.limit);h+=d,e._append(b,c.slice(0,d)),e.async&&e.trigger("asyncReceived",b,e.name)}}var e=this,f=!1,g=!1,h=0;this.cancel(),this.cancel=function(){f=!0,e.cancel=a.noop,e.async&&e.trigger("asyncCanceled",b,e.name)},this.source(b,c,d),!g&&c([])},cancel:a.noop,clear:function(){this._empty(),this.cancel(),this.trigger("cleared")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=a("<div>")}}),c}(),i=function(){"use strict";function c(c,d){function e(b){var c=f.$node.find(b.node).first();return b.node=c.length?c:a("<div>").appendTo(f.$node),new h(b,d)}var f=this;c=c||{},c.node||a.error("node is required"),d.mixin(this),this.$node=a(c.node),this.query=null,this.datasets=b.map(c.datasets,e)}return b.mixin(c.prototype,e,{_onSelectableClick:function(b){this.trigger("selectableClicked",a(b.currentTarget))},_onRendered:function(a,b,c,d){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetRendered",b,c,d)},_onCleared:function(){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetCleared")},_propagate:function(){this.trigger.apply(this,arguments)},_allDatasetsEmpty:function(){return b.every(this.datasets,b.bind(function(a){var b=a.isEmpty();return this.$node.attr("aria-expanded",!b),b},this))},_getSelectables:function(){return this.$node.find(this.selectors.selectable)},_removeCursor:function(){var a=this.getActiveSelectable();a&&a.removeClass(this.classes.cursor)},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.outerHeight(!0),d=this.$node.scrollTop(),e=this.$node.height()+parseInt(this.$node.css("paddingTop"),10)+parseInt(this.$node.css("paddingBottom"),10),b<0?this.$node.scrollTop(d+b):e<c&&this.$node.scrollTop(d+(c-e))},bind:function(){var c,d=this;return c=b.bind(this._onSelectableClick,this),this.$node.on("click.tt",this.selectors.selectable,c),this.$node.on("mouseover",this.selectors.selectable,function(){d.setCursor(a(this))}),this.$node.on("mouseleave",function(){d._removeCursor()}),b.each(this.datasets,function(a){a.onSync("asyncRequested",d._propagate,d).onSync("asyncCanceled",d._propagate,d).onSync("asyncReceived",d._propagate,d).onSync("rendered",d._onRendered,d).onSync("cleared",d._onCleared,d)}),this},isOpen:function(){return this.$node.hasClass(this.classes.open)},open:function(){this.$node.scrollTop(0),this.$node.addClass(this.classes.open)},close:function(){this.$node.attr("aria-expanded",!1),this.$node.removeClass(this.classes.open),this._removeCursor()},setLanguageDirection:function(a){this.$node.attr("dir",a)},selectableRelativeToCursor:function(a){var b,c,d,e;return c=this.getActiveSelectable(),b=this._getSelectables(),d=c?b.index(c):-1,e=d+a,e=(e+1)%(b.length+1)-1,e=e<-1?b.length-1:e,e===-1?null:b.eq(e)},setCursor:function(a){this._removeCursor(),(a=a&&a.first())&&(a.addClass(this.classes.cursor),this._ensureVisible(a))},getSelectableData:function(a){return a&&a.length?h.extractData(a):null},getActiveSelectable:function(){var a=this._getSelectables().filter(this.selectors.cursor).first();return a.length?a:null},getTopSelectable:function(){var a=this._getSelectables().first();return a.length?a:null},update:function(a){function c(b){b.update(a)}var d=a!==this.query;return d&&(this.query=a,b.each(this.datasets,c)),d},empty:function(){function a(a){a.clear()}b.each(this.datasets,a),this.query=null,this.$node.addClass(this.classes.empty)},destroy:function(){function c(a){a.destroy()}this.$node.off(".tt"),this.$node=a("<div>"),b.each(this.datasets,c)}}),c}(),j=function(){
"use strict";function c(c){this.$el=a("<span></span>",{role:"status","aria-live":"polite"}).css({position:"absolute",padding:"0",border:"0",height:"1px",width:"1px","margin-bottom":"-1px","margin-right":"-1px",overflow:"hidden",clip:"rect(0 0 0 0)","white-space":"nowrap"}),c.$input.after(this.$el),b.each(c.menu.datasets,b.bind(function(a){a.onSync&&(a.onSync("rendered",b.bind(this.update,this)),a.onSync("cleared",b.bind(this.cleared,this)))},this))}return b.mixin(c.prototype,{update:function(a,b){var c,d=b.length;c=1===d?{result:"result",is:"is"}:{result:"results",is:"are"},this.$el.text(d+" "+c.result+" "+c.is+" available, use up and down arrow keys to navigate.")},cleared:function(){this.$el.text("")}}),c}(),k=function(){"use strict";function a(){i.apply(this,[].slice.call(arguments,0))}var c=i.prototype;return b.mixin(a.prototype,i.prototype,{open:function(){return!this._allDatasetsEmpty()&&this._show(),c.open.apply(this,[].slice.call(arguments,0))},close:function(){return this._hide(),c.close.apply(this,[].slice.call(arguments,0))},_onRendered:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),c._onRendered.apply(this,[].slice.call(arguments,0))},_onCleared:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),c._onCleared.apply(this,[].slice.call(arguments,0))},setLanguageDirection:function(a){return this.$node.css("ltr"===a?this.css.ltr:this.css.rtl),c.setLanguageDirection.apply(this,[].slice.call(arguments,0))},_hide:function(){this.$node.hide()},_show:function(){this.$node.css("display","block")}}),a}(),l=function(){"use strict";function c(c,e){var f,g,h,i,j,k,l,m,n,o,p;c=c||{},c.input||a.error("missing input"),c.menu||a.error("missing menu"),c.eventBus||a.error("missing event bus"),e.mixin(this),this.eventBus=c.eventBus,this.minLength=b.isNumber(c.minLength)?c.minLength:1,this.input=c.input,this.menu=c.menu,this.enabled=!0,this.autoselect=!!c.autoselect,this.active=!1,this.input.hasFocus()&&this.activate(),this.dir=this.input.getLangDir(),this._hacks(),this.menu.bind().onSync("selectableClicked",this._onSelectableClicked,this).onSync("asyncRequested",this._onAsyncRequested,this).onSync("asyncCanceled",this._onAsyncCanceled,this).onSync("asyncReceived",this._onAsyncReceived,this).onSync("datasetRendered",this._onDatasetRendered,this).onSync("datasetCleared",this._onDatasetCleared,this),f=d(this,"activate","open","_onFocused"),g=d(this,"deactivate","_onBlurred"),h=d(this,"isActive","isOpen","_onEnterKeyed"),i=d(this,"isActive","isOpen","_onTabKeyed"),j=d(this,"isActive","_onEscKeyed"),k=d(this,"isActive","open","_onUpKeyed"),l=d(this,"isActive","open","_onDownKeyed"),m=d(this,"isActive","isOpen","_onLeftKeyed"),n=d(this,"isActive","isOpen","_onRightKeyed"),o=d(this,"_openIfActive","_onQueryChanged"),p=d(this,"_openIfActive","_onWhitespaceChanged"),this.input.bind().onSync("focused",f,this).onSync("blurred",g,this).onSync("enterKeyed",h,this).onSync("tabKeyed",i,this).onSync("escKeyed",j,this).onSync("upKeyed",k,this).onSync("downKeyed",l,this).onSync("leftKeyed",m,this).onSync("rightKeyed",n,this).onSync("queryChanged",o,this).onSync("whitespaceChanged",p,this).onSync("langDirChanged",this._onLangDirChanged,this)}function d(a){var c=[].slice.call(arguments,1);return function(){var d=[].slice.call(arguments);b.each(c,function(b){return a[b].apply(a,d)})}}return b.mixin(c.prototype,{_hacks:function(){var c,d;c=this.input.$input||a("<div>"),d=this.menu.$node||a("<div>"),c.on("blur.tt",function(a){var e,f,g;e=document.activeElement,f=d.is(e),g=d.has(e).length>0,b.isMsie()&&(f||g)&&(a.preventDefault(),a.stopImmediatePropagation(),b.defer(function(){c.focus()}))}),d.on("mousedown.tt",function(a){a.preventDefault()})},_onSelectableClicked:function(a,b){this.select(b)},_onDatasetCleared:function(){this._updateHint()},_onDatasetRendered:function(a,b,c,d){if(this._updateHint(),this.autoselect){var e=this.selectors.cursor.substr(1);this.menu.$node.find(this.selectors.suggestion).first().addClass(e)}this.eventBus.trigger("render",b,c,d)},_onAsyncRequested:function(a,b,c){this.eventBus.trigger("asyncrequest",c,b)},_onAsyncCanceled:function(a,b,c){this.eventBus.trigger("asynccancel",c,b)},_onAsyncReceived:function(a,b,c){this.eventBus.trigger("asyncreceive",c,b)},_onFocused:function(){this._minLengthMet()&&this.menu.update(this.input.getQuery())},_onBlurred:function(){this.input.hasQueryChangedSinceLastFocus()&&this.eventBus.trigger("change",this.input.getQuery())},_onEnterKeyed:function(a,b){var c;(c=this.menu.getActiveSelectable())?this.select(c)&&(b.preventDefault(),b.stopPropagation()):this.autoselect&&this.select(this.menu.getTopSelectable())&&(b.preventDefault(),b.stopPropagation())},_onTabKeyed:function(a,b){var c;(c=this.menu.getActiveSelectable())?this.select(c)&&b.preventDefault():(c=this.menu.getTopSelectable())&&this.autocomplete(c)&&b.preventDefault()},_onEscKeyed:function(){this.close()},_onUpKeyed:function(){this.moveCursor(-1)},_onDownKeyed:function(){this.moveCursor(1)},_onLeftKeyed:function(){"rtl"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getActiveSelectable()||this.menu.getTopSelectable())},_onRightKeyed:function(){"ltr"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getActiveSelectable()||this.menu.getTopSelectable())},_onQueryChanged:function(a,b){this._minLengthMet(b)?this.menu.update(b):this.menu.empty()},_onWhitespaceChanged:function(){this._updateHint()},_onLangDirChanged:function(a,b){this.dir!==b&&(this.dir=b,this.menu.setLanguageDirection(b))},_openIfActive:function(){this.isActive()&&this.open()},_minLengthMet:function(a){return a=b.isString(a)?a:this.input.getQuery()||"",a.length>=this.minLength},_updateHint:function(){var a,c,d,e,f,h,i;a=this.menu.getTopSelectable(),c=this.menu.getSelectableData(a),d=this.input.getInputValue(),!c||b.isBlankString(d)||this.input.hasOverflow()?this.input.clearHint():(e=g.normalizeQuery(d),f=b.escapeRegExChars(e),h=new RegExp("^(?:"+f+")(.+$)","i"),i=h.exec(c.val),i&&this.input.setHint(d+i[1]))},isEnabled:function(){return this.enabled},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},isActive:function(){return this.active},activate:function(){return!!this.isActive()||!(!this.isEnabled()||this.eventBus.before("active"))&&(this.active=!0,this.eventBus.trigger("active"),!0)},deactivate:function(){return!this.isActive()||!this.eventBus.before("idle")&&(this.active=!1,this.close(),this.eventBus.trigger("idle"),!0)},isOpen:function(){return this.menu.isOpen()},open:function(){return this.isOpen()||this.eventBus.before("open")||(this.menu.open(),this._updateHint(),this.eventBus.trigger("open")),this.isOpen()},close:function(){return this.isOpen()&&!this.eventBus.before("close")&&(this.menu.close(),this.input.clearHint(),this.input.resetInputValue(),this.eventBus.trigger("close")),!this.isOpen()},setVal:function(a){this.input.setQuery(b.toStr(a))},getVal:function(){return this.input.getQuery()},select:function(a){var b=this.menu.getSelectableData(a);return!(!b||this.eventBus.before("select",b.obj,b.dataset))&&(this.input.setQuery(b.val,!0),this.eventBus.trigger("select",b.obj,b.dataset),this.close(),!0)},autocomplete:function(a){var b,c,d;return b=this.input.getQuery(),c=this.menu.getSelectableData(a),d=c&&b!==c.val,!(!d||this.eventBus.before("autocomplete",c.obj,c.dataset))&&(this.input.setQuery(c.val),this.eventBus.trigger("autocomplete",c.obj,c.dataset),!0)},moveCursor:function(a){var b,c,d,e,f,g,h;return b=this.input.getQuery(),c=this.menu.selectableRelativeToCursor(a),d=this.menu.getSelectableData(c),e=d?d.obj:null,f=d?d.dataset:null,h=c?c.attr("id"):null,this.input.trigger("cursorchange",h),g=this._minLengthMet()&&this.menu.update(b),!g&&!this.eventBus.before("cursorchange",e,f)&&(this.menu.setCursor(c),d?this.input.setInputValue(d.val):(this.input.resetInputValue(),this._updateHint()),this.eventBus.trigger("cursorchange",e,f),!0)},destroy:function(){this.input.destroy(),this.menu.destroy()}}),c}();!function(){"use strict";function e(b,c){b.each(function(){var b,d=a(this);(b=d.data(q.typeahead))&&c(b,d)})}function f(a,b){return a.clone().addClass(b.classes.hint).removeData().css(b.css.hint).css(m(a)).prop({readonly:!0,required:!1}).removeAttr("id name placeholder").removeClass("required").attr({spellcheck:"false",tabindex:-1})}function h(a,b){a.data(q.attrs,{dir:a.attr("dir"),autocomplete:a.attr("autocomplete"),spellcheck:a.attr("spellcheck"),style:a.attr("style")}),a.addClass(b.classes.input).attr({spellcheck:!1});try{!a.attr("dir")&&a.attr("dir","auto")}catch(a){}return a}function m(a){return{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}}function n(a){var c,d;c=a.data(q.www),d=a.parent().filter(c.selectors.wrapper),b.each(a.data(q.attrs),function(c,d){b.isUndefined(c)?a.removeAttr(d):a.attr(d,c)}),a.removeData(q.typeahead).removeData(q.www).removeData(q.attr).removeClass(c.classes.input),d.length&&(a.detach().insertAfter(d),d.remove())}function o(c){var d,e;return d=b.isJQuery(c)||b.isElement(c),e=d?a(c).first():[],e.length?e:null}var p,q,r;p=a.fn.typeahead,q={www:"tt-www",attrs:"tt-attrs",typeahead:"tt-typeahead"},r={initialize:function(e,m){function n(){var c,n,r,s,t,u,v,w,x,y,z,A;b.each(m,function(a){a.highlight=!!e.highlight}),c=a(this),n=a(p.html.wrapper),r=o(e.hint),s=o(e.menu),t=e.hint!==!1&&!r,u=e.menu!==!1&&!s,t&&(r=f(c,p)),u&&(s=a(p.html.menu).css(p.css.menu)),r&&r.val(""),c=h(c,p),(t||u)&&(n.css(p.css.wrapper),c.css(t?p.css.input:p.css.inputWithNoHint),c.wrap(n).parent().prepend(t?r:null).append(u?s:null)),A=u?k:i,v=new d({el:c}),w=new g({hint:r,input:c},p),x=new A({node:s,datasets:m},p),y=new j({$input:c,menu:x}),z=new l({input:w,menu:x,eventBus:v,minLength:e.minLength,autoselect:e.autoselect},p),c.data(q.www,p),c.data(q.typeahead,z)}var p;return m=b.isArray(m)?m:[].slice.call(arguments,1),e=e||{},p=c(e.classNames),this.each(n)},isEnabled:function(){var a;return e(this.first(),function(b){a=b.isEnabled()}),a},enable:function(){return e(this,function(a){a.enable()}),this},disable:function(){return e(this,function(a){a.disable()}),this},isActive:function(){var a;return e(this.first(),function(b){a=b.isActive()}),a},activate:function(){return e(this,function(a){a.activate()}),this},deactivate:function(){return e(this,function(a){a.deactivate()}),this},isOpen:function(){var a;return e(this.first(),function(b){a=b.isOpen()}),a},open:function(){return e(this,function(a){a.open()}),this},close:function(){return e(this,function(a){a.close()}),this},select:function(b){var c=!1,d=a(b);return e(this.first(),function(a){c=a.select(d)}),c},autocomplete:function(b){var c=!1,d=a(b);return e(this.first(),function(a){c=a.autocomplete(d)}),c},moveCursor:function(a){var b=!1;return e(this.first(),function(c){b=c.moveCursor(a)}),b},val:function(a){var c;return arguments.length?(e(this,function(c){c.setVal(b.toStr(a))}),this):(e(this.first(),function(a){c=a.getVal()}),c)},destroy:function(){return e(this,function(a,b){n(b),a.destroy()}),this}},a.fn.typeahead=function(a){return r[a]?r[a].apply(this,[].slice.call(arguments,1)):r.initialize.apply(this,arguments)},a.fn.typeahead.noConflict=function(){return a.fn.typeahead=p,this}}()});
var Utility = (function () {
    function Utility() {
    }
    Utility.GetWindowHeight = function () {
        var windowHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);
        return windowHeight;
    };
    Utility.GetWindowWidth = function () {
        var windowWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);
        return windowWidth;
    };
    Utility.HasClass = function (ele, cls) {
        var classMatch = ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
        return classMatch != null && classMatch.length > 0;
    };
    Utility.AddClass = function (ele, cls) {
        if (ele != null) {
            if (!this.HasClass(ele, cls)) {
                ele.className += " " + cls;
            }
        }
    };
    Utility.RemoveClass = function (ele, cls) {
        if (ele != null) {
            if (this.HasClass(ele, cls)) {
                var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
                ele.className = ele.className.replace(reg, ' ');
            }
        }
    };
    Utility.Offset = function (el) {
        var rect = el.getBoundingClientRect(), scrollLeft = window.pageXOffset || document.documentElement.scrollLeft, scrollTop = window.pageYOffset || document.documentElement.scrollTop;
        return { top: rect.top + scrollTop, left: rect.left + scrollLeft };
    };
    Utility.restrictToPhoneNumber = function (event) {
        var k;
        document.all ? k = event.keyCode : k = event.which;
        return (k < 58 || (k > 90 && k < 106) || k == 107);
    };
    Utility.showLoader = function (el, message) {
        if (message === void 0) { message = ""; }
        Utility.AddClass(document.getElementById("loader-wrapper"), "show");
        if (message != "") {
            var messageEl = document.getElementById("loadermessage");
            if (messageEl != null) {
                messageEl.innerText = message;
            }
        }
    };
    Utility.hideLoader = function (el) {
        Utility.RemoveClass(document.getElementById("loader-wrapper"), "show");
        var messageEl = document.getElementById("loadermessage");
        if (messageEl != null) {
            messageEl.innerText = "";
        }
    };
    Utility.getDeviceContext = function () {
        var windowWidth = this.GetWindowWidth();
        if (windowWidth < 768) {
            return DeviceContext.Mobile;
        }
        else {
            if (windowWidth < 1200) {
                return DeviceContext.Tablet;
            }
            else {
                return DeviceContext.Desktop;
            }
        }
    };
    Utility.currentYPosition = function () {
        if (window.pageYOffset)
            return window.pageYOffset;
        if (document.documentElement && document.documentElement.scrollTop)
            return document.documentElement.scrollTop;
        if (document.body.scrollTop)
            return document.body.scrollTop;
        return 0;
    };
    Utility.elmYPosition = function (el) {
        var y = el.offsetTop;
        return y;
    };
    Utility.smoothScroll = function (el, offset) {
        if (offset === void 0) { offset = 0; }
        var startY = Utility.currentYPosition();
        var stopY = Utility.elmYPosition(el) - offset;
        var distance = stopY > startY ? stopY - startY : startY - stopY;
        console.log("page offset: " + window.pageYOffset + " startY: " + startY + " stopY: " + stopY + " distance: " + distance);
        if (distance == 0 || startY < stopY) {
            return;
        }
        var speed = Math.round(distance / 100);
        if (speed >= 20)
            speed = 20;
        var step = Math.round(distance / 50);
        var leapY = stopY > startY ? startY + step : startY - step;
        var timer = 0;
        if (stopY > startY) {
            for (var i = startY; i < stopY; i += step) {
                setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed);
                leapY += step;
                if (leapY > stopY)
                    leapY = stopY;
                timer++;
            }
            return;
        }
        for (var i = startY; i > stopY; i -= step) {
            setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed);
            leapY -= step;
            if (leapY < stopY)
                leapY = stopY;
            timer++;
        }
    };
    Utility.getFormattedDate = function (date) {
        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
        var year = date.getFullYear();
        return day + "/" + month + "/" + year;
    };
    Utility.getWindowHeight = function () {
        if (!navigator.userAgent.match(/iphone|ipod|ipad/i)) {
            return window.innerHeight;
        }
        else {
            var _dims = { w: 0, h: 0 };
            var _axis = void 0;
            _axis = window.innerHeight > window.innerWidth ? 0 : 90;
            var ruler = document.createElement('div');
            ruler.style.position = 'fixed';
            ruler.style.height = '100vh';
            ruler.style.width = "0";
            ruler.style.top = "0";
            document.documentElement.appendChild(ruler);
            _dims.w = _axis === 90 ? ruler.offsetHeight : window.innerWidth;
            _dims.h = _axis === 90 ? window.innerWidth : ruler.offsetHeight;
            document.documentElement.removeChild(ruler);
            ruler = null;
            console.log("window.innerHeight = " + window.innerHeight);
            if (Math.abs(_axis) !== 90) {
                console.log("ios height = " + _dims.h);
                return _dims.h;
            }
            console.log("ios height = " + _dims.w);
            return _dims.w;
        }
    };
    Utility.addUrlParam = function (key, value) {
        key = encodeURI(key);
        value = encodeURI(value);
        var kvp = document.location.search.substr(1).split('&');
        var i = kvp.length;
        var x;
        while (i--) {
            x = kvp[i].split('=');
            if (x[0] == key) {
                x[1] = value;
                kvp[i] = x.join('=');
                break;
            }
        }
        if (i < 0) {
            kvp[kvp.length] = [key, value].join('=');
        }
        document.location.search = kvp.join('&');
    };
    Utility.getUrlParam = function (key, urladdress) {
        if (urladdress === void 0) { urladdress = ""; }
        if (urladdress == "")
            urladdress = self.location.toString();
        urladdress = window.location.search.substring(1);
        var vars = urladdress.split("&");
        var query_string = {};
        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split("=");
            var keypart = decodeURIComponent(pair[0]);
            var value = decodeURIComponent(pair[1]);
            if (typeof query_string[keypart] === "undefined") {
                query_string[keypart] = decodeURIComponent(value);
            }
            else if (typeof query_string[keypart] === "string") {
                var arr = [query_string[keypart], decodeURIComponent(value)];
                query_string[keypart] = arr;
            }
            else {
                query_string[keypart].push(decodeURIComponent(value));
            }
        }
        return query_string[key];
    };
    Utility.getCookie = function (name) {
        var nameLenPlus = (name.length + 1);
        return document.cookie
            .split(';')
            .map(function (c) { return c.trim(); })
            .filter(function (cookie) {
            return cookie.substring(0, nameLenPlus) === name + "=";
        })
            .map(function (cookie) {
            return decodeURIComponent(cookie.substring(nameLenPlus));
        })[0] || null;
    };
    Utility.setCookie = function (name, val, days) {
        var date = new Date();
        var value = val;
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        document.cookie = name + "=" + value + "; expires=" + date.toUTCString() + "; path=/";
    };
    return Utility;
}());
var MD5;
(function (MD5) {
    function md5cycle(x, k) {
        var a = x[0], b = x[1], c = x[2], d = x[3];
        a = ff(a, b, c, d, k[0], 7, -680876936);
        d = ff(d, a, b, c, k[1], 12, -389564586);
        c = ff(c, d, a, b, k[2], 17, 606105819);
        b = ff(b, c, d, a, k[3], 22, -1044525330);
        a = ff(a, b, c, d, k[4], 7, -176418897);
        d = ff(d, a, b, c, k[5], 12, 1200080426);
        c = ff(c, d, a, b, k[6], 17, -1473231341);
        b = ff(b, c, d, a, k[7], 22, -45705983);
        a = ff(a, b, c, d, k[8], 7, 1770035416);
        d = ff(d, a, b, c, k[9], 12, -1958414417);
        c = ff(c, d, a, b, k[10], 17, -42063);
        b = ff(b, c, d, a, k[11], 22, -1990404162);
        a = ff(a, b, c, d, k[12], 7, 1804603682);
        d = ff(d, a, b, c, k[13], 12, -40341101);
        c = ff(c, d, a, b, k[14], 17, -1502002290);
        b = ff(b, c, d, a, k[15], 22, 1236535329);
        a = gg(a, b, c, d, k[1], 5, -165796510);
        d = gg(d, a, b, c, k[6], 9, -1069501632);
        c = gg(c, d, a, b, k[11], 14, 643717713);
        b = gg(b, c, d, a, k[0], 20, -373897302);
        a = gg(a, b, c, d, k[5], 5, -701558691);
        d = gg(d, a, b, c, k[10], 9, 38016083);
        c = gg(c, d, a, b, k[15], 14, -660478335);
        b = gg(b, c, d, a, k[4], 20, -405537848);
        a = gg(a, b, c, d, k[9], 5, 568446438);
        d = gg(d, a, b, c, k[14], 9, -1019803690);
        c = gg(c, d, a, b, k[3], 14, -187363961);
        b = gg(b, c, d, a, k[8], 20, 1163531501);
        a = gg(a, b, c, d, k[13], 5, -1444681467);
        d = gg(d, a, b, c, k[2], 9, -51403784);
        c = gg(c, d, a, b, k[7], 14, 1735328473);
        b = gg(b, c, d, a, k[12], 20, -1926607734);
        a = hh(a, b, c, d, k[5], 4, -378558);
        d = hh(d, a, b, c, k[8], 11, -2022574463);
        c = hh(c, d, a, b, k[11], 16, 1839030562);
        b = hh(b, c, d, a, k[14], 23, -35309556);
        a = hh(a, b, c, d, k[1], 4, -1530992060);
        d = hh(d, a, b, c, k[4], 11, 1272893353);
        c = hh(c, d, a, b, k[7], 16, -155497632);
        b = hh(b, c, d, a, k[10], 23, -1094730640);
        a = hh(a, b, c, d, k[13], 4, 681279174);
        d = hh(d, a, b, c, k[0], 11, -358537222);
        c = hh(c, d, a, b, k[3], 16, -722521979);
        b = hh(b, c, d, a, k[6], 23, 76029189);
        a = hh(a, b, c, d, k[9], 4, -640364487);
        d = hh(d, a, b, c, k[12], 11, -421815835);
        c = hh(c, d, a, b, k[15], 16, 530742520);
        b = hh(b, c, d, a, k[2], 23, -995338651);
        a = ii(a, b, c, d, k[0], 6, -198630844);
        d = ii(d, a, b, c, k[7], 10, 1126891415);
        c = ii(c, d, a, b, k[14], 15, -1416354905);
        b = ii(b, c, d, a, k[5], 21, -57434055);
        a = ii(a, b, c, d, k[12], 6, 1700485571);
        d = ii(d, a, b, c, k[3], 10, -1894986606);
        c = ii(c, d, a, b, k[10], 15, -1051523);
        b = ii(b, c, d, a, k[1], 21, -2054922799);
        a = ii(a, b, c, d, k[8], 6, 1873313359);
        d = ii(d, a, b, c, k[15], 10, -30611744);
        c = ii(c, d, a, b, k[6], 15, -1560198380);
        b = ii(b, c, d, a, k[13], 21, 1309151649);
        a = ii(a, b, c, d, k[4], 6, -145523070);
        d = ii(d, a, b, c, k[11], 10, -1120210379);
        c = ii(c, d, a, b, k[2], 15, 718787259);
        b = ii(b, c, d, a, k[9], 21, -343485551);
        x[0] = add32(a, x[0]);
        x[1] = add32(b, x[1]);
        x[2] = add32(c, x[2]);
        x[3] = add32(d, x[3]);
    }
    function cmn(q, a, b, x, s, t) {
        a = add32(add32(a, q), add32(x, t));
        return add32((a << s) | (a >>> (32 - s)), b);
    }
    function ff(a, b, c, d, x, s, t) {
        return cmn((b & c) | ((~b) & d), a, b, x, s, t);
    }
    function gg(a, b, c, d, x, s, t) {
        return cmn((b & d) | (c & (~d)), a, b, x, s, t);
    }
    function hh(a, b, c, d, x, s, t) {
        return cmn(b ^ c ^ d, a, b, x, s, t);
    }
    function ii(a, b, c, d, x, s, t) {
        return cmn(c ^ (b | (~d)), a, b, x, s, t);
    }
    function md51(s) {
        var txt = '';
        var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i;
        for (i = 64; i <= s.length; i += 64) {
            md5cycle(state, md5blk(s.substring(i - 64, i)));
        }
        s = s.substring(i - 64);
        var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
        for (i = 0; i < s.length; i++)
            tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
        tail[i >> 2] |= 0x80 << ((i % 4) << 3);
        if (i > 55) {
            md5cycle(state, tail);
            for (i = 0; i < 16; i++)
                tail[i] = 0;
        }
        tail[14] = n * 8;
        md5cycle(state, tail);
        return state;
    }
    function md5blk(s) {
        var md5blks = [], i;
        for (i = 0; i < 64; i += 4) {
            md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
        }
        return md5blks;
    }
    var hex_chr = '0123456789abcdef'.split('');
    function rhex(n) {
        var s = '', j = 0;
        for (; j < 4; j++)
            s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];
        return s;
    }
    function hex(x) {
        for (var i = 0; i < x.length; i++)
            x[i] = rhex(x[i]);
        return x.join('');
    }
    function md5(s) {
        return hex(md51(s));
    }
    var add32 = function (a, b) {
        return (a + b) & 0xFFFFFFFF;
    };
    if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') {
        add32 = function (x, y) {
            var lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16);
            return (msw << 16) | (lsw & 0xFFFF);
        };
    }
    MD5.encrypt = function (s) {
        return md5(s);
    };
})(MD5 || (MD5 = {}));
//# sourceMappingURL=sn.app.utility.js.map
