\").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,\"position\"),l=m(a),n={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=m.css(a,\"top\"),i=m.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&m.inArray(\"auto\",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),\"using\"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===m.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=m.css(a[0],\"borderTopWidth\",!0),c.left+=m.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-m.css(d,\"marginTop\",!0),left:b.left-c.left-m.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,\"html\")&&\"static\"===m.css(a,\"position\"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each([\"top\",\"left\"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+\"px\":c):void 0})}),m.each({Height:\"height\",Width:\"width\"},function(a,b){m.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||\"boolean\"!=typeof d),g=c||(d===!0||e===!0?\"margin\":\"border\");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement[\"client\"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body[\"scroll\"+a],e[\"scroll\"+a],b.body[\"offset\"+a],e[\"offset\"+a],e[\"client\"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});\r\n","/*!\r\n * jQuery Cookie Plugin v1.4.1\r\n * https://github.com/carhartl/jquery-cookie\r\n *\r\n * Copyright 2006, 2014 Klaus Hartl\r\n * Released under the MIT license\r\n */\r\n(function (factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD (Register as an anonymous module)\r\n\t\tdefine(['jquery'], factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\t// Node/CommonJS\r\n\t\tmodule.exports = factory(require('jquery'));\r\n\t} else {\r\n\t\t// Browser globals\r\n\t\tfactory(jQuery);\r\n\t}\r\n}(function ($) {\r\n\r\n\tvar pluses = /\\+/g;\r\n\r\n\tfunction encode(s) {\r\n\t\treturn config.raw ? s : encodeURIComponent(s);\r\n\t}\r\n\r\n\tfunction decode(s) {\r\n\t\treturn config.raw ? s : decodeURIComponent(s);\r\n\t}\r\n\r\n\tfunction stringifyCookieValue(value) {\r\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\r\n\t}\r\n\r\n\tfunction parseCookieValue(s) {\r\n\t\tif (s.indexOf('\"') === 0) {\r\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\r\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// Replace server-side written pluses with spaces.\r\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\r\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\r\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\r\n\t\t\treturn config.json ? JSON.parse(s) : s;\r\n\t\t} catch(e) {}\r\n\t}\r\n\r\n\tfunction read(s, converter) {\r\n\t\tvar value = config.raw ? s : parseCookieValue(s);\r\n\t\treturn $.isFunction(converter) ? converter(value) : value;\r\n\t}\r\n\r\n\tvar config = $.cookie = function (key, value, options) {\r\n\r\n\t\t// Write\r\n\r\n\t\tif (arguments.length > 1 && !$.isFunction(value)) {\r\n\t\t\toptions = $.extend({}, config.defaults, options);\r\n\r\n\t\t\tif (typeof options.expires === 'number') {\r\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\r\n\t\t\t\tt.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n\t\t\t}\r\n\r\n\t\t\treturn (document.cookie = [\r\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\r\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n\t\t\t\toptions.path ? '; path=' + options.path : '',\r\n\t\t\t\toptions.domain ? '; domain=' + options.domain : '',\r\n\t\t\t\toptions.secure ? '; secure' : ''\r\n\t\t\t].join(''));\r\n\t\t}\r\n\r\n\t\t// Read\r\n\r\n\t\tvar result = key ? undefined : {},\r\n\t\t\t// To prevent the for loop in the first place assign an empty array\r\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\r\n\t\t\t// calling $.cookie().\r\n\t\t\tcookies = document.cookie ? document.cookie.split('; ') : [],\r\n\t\t\ti = 0,\r\n\t\t\tl = cookies.length;\r\n\r\n\t\tfor (; i < l; i++) {\r\n\t\t\tvar parts = cookies[i].split('='),\r\n\t\t\t\tname = decode(parts.shift()),\r\n\t\t\t\tcookie = parts.join('=');\r\n\r\n\t\t\tif (key === name) {\r\n\t\t\t\t// If second argument (value) is a function it's a converter...\r\n\t\t\t\tresult = read(cookie, value);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// Prevent storing a cookie that we couldn't decode.\r\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\r\n\t\t\t\tresult[name] = cookie;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tconfig.defaults = {};\r\n\r\n\t$.removeCookie = function (key, options) {\r\n\t\t// Must not alter options, thus extending a fresh object...\r\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\r\n\t\treturn !$.cookie(key);\r\n\t};\r\n\r\n}));\r\n","// jQuery Mask Plugin v1.11.4\r\n// github.com/igorescobar/jQuery-Mask-Plugin\r\n(function(b){\"function\"===typeof define&&define.amd?define([\"jquery\"],b):\"object\"===typeof exports?module.exports=b(require(\"jquery\")):b(jQuery||Zepto)})(function(b){var y=function(a,d,e){a=b(a);var g=this,k=a.val(),l;d=\"function\"===typeof d?d(a.val(),void 0,a,e):d;var c={invalid:[],getCaret:function(){try{var q,v=0,b=a.get(0),f=document.selection,c=b.selectionStart;if(f&&-1===navigator.appVersion.indexOf(\"MSIE 10\"))q=f.createRange(),q.moveStart(\"character\",a.is(\"input\")?-a.val().length:-a.text().length),\r\nv=q.text.length;else if(c||\"0\"===c)v=c;return v}catch(d){}},setCaret:function(q){try{if(a.is(\":focus\")){var b,c=a.get(0);c.setSelectionRange?c.setSelectionRange(q,q):c.createTextRange&&(b=c.createTextRange(),b.collapse(!0),b.moveEnd(\"character\",q),b.moveStart(\"character\",q),b.select())}}catch(f){}},events:function(){a.on(\"keyup.mask\",c.behaviour).on(\"paste.mask drop.mask\",function(){setTimeout(function(){a.keydown().keyup()},100)}).on(\"change.mask\",function(){a.data(\"changed\",!0)}).on(\"blur.mask\",\r\nfunction(){k===a.val()||a.data(\"changed\")||a.triggerHandler(\"change\");a.data(\"changed\",!1)}).on(\"keydown.mask, blur.mask\",function(){k=a.val()}).on(\"focus.mask\",function(a){!0===e.selectOnFocus&&b(a.target).select()}).on(\"focusout.mask\",function(){e.clearIfNotMatch&&!l.test(c.val())&&c.val(\"\")})},getRegexMask:function(){for(var a=[],b,c,f,e,h=0;h
\r\n\t\t\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\r\n\t\t\t\t\tif ( !isNaN( value ) && value !== 0 ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telem = elem.parent();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t},\r\n\r\n\tuniqueId: function() {\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( !this.id ) {\r\n\t\t\t\tthis.id = \"ui-id-\" + (++uuid);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tremoveUniqueId: function() {\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( runiqueId.test( this.id ) ) {\r\n\t\t\t\t$( this ).removeAttr( \"id\" );\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// selectors\r\nfunction focusable( element, isTabIndexNotNaN ) {\r\n\tvar map, mapName, img,\r\n\t\tnodeName = element.nodeName.toLowerCase();\r\n\tif ( \"area\" === nodeName ) {\r\n\t\tmap = element.parentNode;\r\n\t\tmapName = map.name;\r\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\timg = $( \"img[usemap=#\" + mapName + \"]\" )[0];\r\n\t\treturn !!img && visible( img );\r\n\t}\r\n\treturn ( /input|select|textarea|button|object/.test( nodeName ) ?\r\n\t\t!element.disabled :\r\n\t\t\"a\" === nodeName ?\r\n\t\t\telement.href || isTabIndexNotNaN :\r\n\t\t\tisTabIndexNotNaN) &&\r\n\t\t// the element and all of its ancestors must be visible\r\n\t\tvisible( element );\r\n}\r\n\r\nfunction visible( element ) {\r\n\treturn $.expr.filters.visible( element ) &&\r\n\t\t!$( element ).parents().addBack().filter(function() {\r\n\t\t\treturn $.css( this, \"visibility\" ) === \"hidden\";\r\n\t\t}).length;\r\n}\r\n\r\n$.extend( $.expr[ \":\" ], {\r\n\tdata: $.expr.createPseudo ?\r\n\t\t$.expr.createPseudo(function( dataName ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn !!$.data( elem, dataName );\r\n\t\t\t};\r\n\t\t}) :\r\n\t\t// support: jQuery <1.8\r\n\t\tfunction( elem, i, match ) {\r\n\t\t\treturn !!$.data( elem, match[ 3 ] );\r\n\t\t},\r\n\r\n\tfocusable: function( element ) {\r\n\t\treturn focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\r\n\t},\r\n\r\n\ttabbable: function( element ) {\r\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\r\n\t\t\tisTabIndexNaN = isNaN( tabIndex );\r\n\t\treturn ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\r\n\t}\r\n});\r\n\r\n// support: jQuery <1.8\r\nif ( !$( \"\" ).data( \"a-b\", \"a\" ).removeData( \"a-b\" ).data( \"a-b\" ) ) {\r\n\t$.fn.removeData = (function( removeData ) {\r\n\t\treturn function( key ) {\r\n\t\t\tif ( arguments.length ) {\r\n\t\t\t\treturn removeData.call( this, $.camelCase( key ) );\r\n\t\t\t} else {\r\n\t\t\t\treturn removeData.call( this );\r\n\t\t\t}\r\n\t\t};\r\n\t})( $.fn.removeData );\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// deprecated\r\n$.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\r\n\r\n$.support.selectstart = \"onselectstart\" in document.createElement( \"div\" );\r\n$.fn.extend({\r\n\tdisableSelection: function() {\r\n\t\treturn this.bind( ( $.support.selectstart ? \"selectstart\" : \"mousedown\" ) +\r\n\t\t\t\".ui-disableSelection\", function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t});\r\n\t},\r\n\r\n\tenableSelection: function() {\r\n\t\treturn this.unbind( \".ui-disableSelection\" );\r\n\t}\r\n});\r\n\r\n$.extend( $.ui, {\r\n\t// $.ui.plugin is deprecated. Use $.widget() extensions instead.\r\n\tplugin: {\r\n\t\tadd: function( module, option, set ) {\r\n\t\t\tvar i,\r\n\t\t\t\tproto = $.ui[ module ].prototype;\r\n\t\t\tfor ( i in set ) {\r\n\t\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\r\n\t\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\r\n\t\t\t}\r\n\t\t},\r\n\t\tcall: function( instance, name, args ) {\r\n\t\t\tvar i,\r\n\t\t\t\tset = instance.plugins[ name ];\r\n\t\t\tif ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tfor ( i = 0; i < set.length; i++ ) {\r\n\t\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\r\n\t\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// only used by resizable\r\n\thasScroll: function( el, a ) {\r\n\r\n\t\t//If overflow is hidden, the element might have extra content, but the user wants to hide it\r\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\r\n\t\t\thas = false;\r\n\r\n\t\tif ( el[ scroll ] > 0 ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// TODO: determine which cases actually cause this to happen\r\n\t\t// if the element doesn't have the scroll set, see if it's possible to\r\n\t\t// set the scroll\r\n\t\tel[ scroll ] = 1;\r\n\t\thas = ( el[ scroll ] > 0 );\r\n\t\tel[ scroll ] = 0;\r\n\t\treturn has;\r\n\t}\r\n});\r\n\r\n})( jQuery );\r\n(function( $, undefined ) {\r\n\r\nvar uuid = 0,\r\n\tslice = Array.prototype.slice,\r\n\t_cleanData = $.cleanData;\r\n$.cleanData = function( elems ) {\r\n\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\r\n\t\ttry {\r\n\t\t\t$( elem ).triggerHandler( \"remove\" );\r\n\t\t// http://bugs.jquery.com/ticket/8235\r\n\t\t} catch( e ) {}\r\n\t}\r\n\t_cleanData( elems );\r\n};\r\n\r\n$.widget = function( name, base, prototype ) {\r\n\tvar fullName, existingConstructor, constructor, basePrototype,\r\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\r\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\r\n\t\tproxiedPrototype = {},\r\n\t\tnamespace = name.split( \".\" )[ 0 ];\r\n\r\n\tname = name.split( \".\" )[ 1 ];\r\n\tfullName = namespace + \"-\" + name;\r\n\r\n\tif ( !prototype ) {\r\n\t\tprototype = base;\r\n\t\tbase = $.Widget;\r\n\t}\r\n\r\n\t// create selector for plugin\r\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\r\n\t\treturn !!$.data( elem, fullName );\r\n\t};\r\n\r\n\t$[ namespace ] = $[ namespace ] || {};\r\n\texistingConstructor = $[ namespace ][ name ];\r\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\r\n\t\t// allow instantiation without \"new\" keyword\r\n\t\tif ( !this._createWidget ) {\r\n\t\t\treturn new constructor( options, element );\r\n\t\t}\r\n\r\n\t\t// allow instantiation without initializing for simple inheritance\r\n\t\t// must use \"new\" keyword (the code above always passes args)\r\n\t\tif ( arguments.length ) {\r\n\t\t\tthis._createWidget( options, element );\r\n\t\t}\r\n\t};\r\n\t// extend with the existing constructor to carry over any static properties\r\n\t$.extend( constructor, existingConstructor, {\r\n\t\tversion: prototype.version,\r\n\t\t// copy the object used to create the prototype in case we need to\r\n\t\t// redefine the widget later\r\n\t\t_proto: $.extend( {}, prototype ),\r\n\t\t// track widgets that inherit from this widget in case this widget is\r\n\t\t// redefined after a widget inherits from it\r\n\t\t_childConstructors: []\r\n\t});\r\n\r\n\tbasePrototype = new base();\r\n\t// we need to make the options hash a property directly on the new instance\r\n\t// otherwise we'll modify the options hash on the prototype that we're\r\n\t// inheriting from\r\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\r\n\t$.each( prototype, function( prop, value ) {\r\n\t\tif ( !$.isFunction( value ) ) {\r\n\t\t\tproxiedPrototype[ prop ] = value;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tproxiedPrototype[ prop ] = (function() {\r\n\t\t\tvar _super = function() {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\r\n\t\t\t\t},\r\n\t\t\t\t_superApply = function( args ) {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\r\n\t\t\t\t};\r\n\t\t\treturn function() {\r\n\t\t\t\tvar __super = this._super,\r\n\t\t\t\t\t__superApply = this._superApply,\r\n\t\t\t\t\treturnValue;\r\n\r\n\t\t\t\tthis._super = _super;\r\n\t\t\t\tthis._superApply = _superApply;\r\n\r\n\t\t\t\treturnValue = value.apply( this, arguments );\r\n\r\n\t\t\t\tthis._super = __super;\r\n\t\t\t\tthis._superApply = __superApply;\r\n\r\n\t\t\t\treturn returnValue;\r\n\t\t\t};\r\n\t\t})();\r\n\t});\r\n\tconstructor.prototype = $.widget.extend( basePrototype, {\r\n\t\t// TODO: remove support for widgetEventPrefix\r\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\r\n\t\t// don't prefix for widgets that aren't DOM-based\r\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\r\n\t}, proxiedPrototype, {\r\n\t\tconstructor: constructor,\r\n\t\tnamespace: namespace,\r\n\t\twidgetName: name,\r\n\t\twidgetFullName: fullName\r\n\t});\r\n\r\n\t// If this widget is being redefined then we need to find all widgets that\r\n\t// are inheriting from it and redefine all of them so that they inherit from\r\n\t// the new version of this widget. We're essentially trying to replace one\r\n\t// level in the prototype chain.\r\n\tif ( existingConstructor ) {\r\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\r\n\t\t\tvar childPrototype = child.prototype;\r\n\r\n\t\t\t// redefine the child widget using the same prototype that was\r\n\t\t\t// originally used, but inherit from the new version of the base\r\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\r\n\t\t});\r\n\t\t// remove the list of existing child constructors from the old constructor\r\n\t\t// so the old child constructors can be garbage collected\r\n\t\tdelete existingConstructor._childConstructors;\r\n\t} else {\r\n\t\tbase._childConstructors.push( constructor );\r\n\t}\r\n\r\n\t$.widget.bridge( name, constructor );\r\n};\r\n\r\n$.widget.extend = function( target ) {\r\n\tvar input = slice.call( arguments, 1 ),\r\n\t\tinputIndex = 0,\r\n\t\tinputLength = input.length,\r\n\t\tkey,\r\n\t\tvalue;\r\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\r\n\t\tfor ( key in input[ inputIndex ] ) {\r\n\t\t\tvalue = input[ inputIndex ][ key ];\r\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\r\n\t\t\t\t// Clone objects\r\n\t\t\t\tif ( $.isPlainObject( value ) ) {\r\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\r\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\r\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\r\n\t\t\t\t\t\t$.widget.extend( {}, value );\r\n\t\t\t\t// Copy everything else by reference\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[ key ] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n$.widget.bridge = function( name, object ) {\r\n\tvar fullName = object.prototype.widgetFullName || name;\r\n\t$.fn[ name ] = function( options ) {\r\n\t\tvar isMethodCall = typeof options === \"string\",\r\n\t\t\targs = slice.call( arguments, 1 ),\r\n\t\t\treturnValue = this;\r\n\r\n\t\t// allow multiple hashes to be passed on init\r\n\t\toptions = !isMethodCall && args.length ?\r\n\t\t\t$.widget.extend.apply( null, [ options ].concat(args) ) :\r\n\t\t\toptions;\r\n\r\n\t\tif ( isMethodCall ) {\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar methodValue,\r\n\t\t\t\t\tinstance = $.data( this, fullName );\r\n\t\t\t\tif ( !instance ) {\r\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\r\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\r\n\t\t\t\t}\r\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\r\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\r\n\t\t\t\t}\r\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\r\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\r\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\r\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\r\n\t\t\t\t\t\tmethodValue;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar instance = $.data( this, fullName );\r\n\t\t\t\tif ( instance ) {\r\n\t\t\t\t\tinstance.option( options || {} )._init();\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn returnValue;\r\n\t};\r\n};\r\n\r\n$.Widget = function( /* options, element */ ) {};\r\n$.Widget._childConstructors = [];\r\n\r\n$.Widget.prototype = {\r\n\twidgetName: \"widget\",\r\n\twidgetEventPrefix: \"\",\r\n\tdefaultElement: \"\",\r\n\toptions: {\r\n\t\tdisabled: false,\r\n\r\n\t\t// callbacks\r\n\t\tcreate: null\r\n\t},\r\n\t_createWidget: function( options, element ) {\r\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\r\n\t\tthis.element = $( element );\r\n\t\tthis.uuid = uuid++;\r\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\r\n\t\tthis.options = $.widget.extend( {},\r\n\t\t\tthis.options,\r\n\t\t\tthis._getCreateOptions(),\r\n\t\t\toptions );\r\n\r\n\t\tthis.bindings = $();\r\n\t\tthis.hoverable = $();\r\n\t\tthis.focusable = $();\r\n\r\n\t\tif ( element !== this ) {\r\n\t\t\t$.data( element, this.widgetFullName, this );\r\n\t\t\tthis._on( true, this.element, {\r\n\t\t\t\tremove: function( event ) {\r\n\t\t\t\t\tif ( event.target === element ) {\r\n\t\t\t\t\t\tthis.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.document = $( element.style ?\r\n\t\t\t\t// element within the document\r\n\t\t\t\telement.ownerDocument :\r\n\t\t\t\t// element is window or document\r\n\t\t\t\telement.document || element );\r\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\r\n\t\t}\r\n\r\n\t\tthis._create();\r\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\r\n\t\tthis._init();\r\n\t},\r\n\t_getCreateOptions: $.noop,\r\n\t_getCreateEventData: $.noop,\r\n\t_create: $.noop,\r\n\t_init: $.noop,\r\n\r\n\tdestroy: function() {\r\n\t\tthis._destroy();\r\n\t\t// we can probably remove the unbind calls in 2.0\r\n\t\t// all event bindings should go through this._on()\r\n\t\tthis.element\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t// 1.9 BC for #7810\r\n\t\t\t// TODO remove dual storage\r\n\t\t\t.removeData( this.widgetName )\r\n\t\t\t.removeData( this.widgetFullName )\r\n\t\t\t// support: jquery <1.6.3\r\n\t\t\t// http://bugs.jquery.com/ticket/9413\r\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\r\n\t\tthis.widget()\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.removeClass(\r\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\r\n\t\t\t\t\"ui-state-disabled\" );\r\n\r\n\t\t// clean up events and states\r\n\t\tthis.bindings.unbind( this.eventNamespace );\r\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t},\r\n\t_destroy: $.noop,\r\n\r\n\twidget: function() {\r\n\t\treturn this.element;\r\n\t},\r\n\r\n\toption: function( key, value ) {\r\n\t\tvar options = key,\r\n\t\t\tparts,\r\n\t\t\tcurOption,\r\n\t\t\ti;\r\n\r\n\t\tif ( arguments.length === 0 ) {\r\n\t\t\t// don't return a reference to the internal hash\r\n\t\t\treturn $.widget.extend( {}, this.options );\r\n\t\t}\r\n\r\n\t\tif ( typeof key === \"string\" ) {\r\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\r\n\t\t\toptions = {};\r\n\t\t\tparts = key.split( \".\" );\r\n\t\t\tkey = parts.shift();\r\n\t\t\tif ( parts.length ) {\r\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\r\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\r\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\r\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\r\n\t\t\t\t}\r\n\t\t\t\tkey = parts.pop();\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\r\n\t\t\t\t}\r\n\t\t\t\tcurOption[ key ] = value;\r\n\t\t\t} else {\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\r\n\t\t\t\t}\r\n\t\t\t\toptions[ key ] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._setOptions( options );\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOptions: function( options ) {\r\n\t\tvar key;\r\n\r\n\t\tfor ( key in options ) {\r\n\t\t\tthis._setOption( key, options[ key ] );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOption: function( key, value ) {\r\n\t\tthis.options[ key ] = value;\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.widget()\r\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled ui-state-disabled\", !!value )\r\n\t\t\t\t.attr( \"aria-disabled\", value );\r\n\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function() {\r\n\t\treturn this._setOption( \"disabled\", false );\r\n\t},\r\n\tdisable: function() {\r\n\t\treturn this._setOption( \"disabled\", true );\r\n\t},\r\n\r\n\t_on: function( suppressDisabledCheck, element, handlers ) {\r\n\t\tvar delegateElement,\r\n\t\t\tinstance = this;\r\n\r\n\t\t// no suppressDisabledCheck flag, shuffle arguments\r\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = suppressDisabledCheck;\r\n\t\t\tsuppressDisabledCheck = false;\r\n\t\t}\r\n\r\n\t\t// no element argument, shuffle and use this.element\r\n\t\tif ( !handlers ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = this.element;\r\n\t\t\tdelegateElement = this.widget();\r\n\t\t} else {\r\n\t\t\t// accept selectors, DOM elements\r\n\t\t\telement = delegateElement = $( element );\r\n\t\t\tthis.bindings = this.bindings.add( element );\r\n\t\t}\r\n\r\n\t\t$.each( handlers, function( event, handler ) {\r\n\t\t\tfunction handlerProxy() {\r\n\t\t\t\t// allow widgets to customize the disabled handling\r\n\t\t\t\t// - disabled as an array instead of boolean\r\n\t\t\t\t// - disabled class as method for disabling individual parts\r\n\t\t\t\tif ( !suppressDisabledCheck &&\r\n\t\t\t\t\t\t( instance.options.disabled === true ||\r\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t\t.apply( instance, arguments );\r\n\t\t\t}\r\n\r\n\t\t\t// copy the guid so direct unbinding works\r\n\t\t\tif ( typeof handler !== \"string\" ) {\r\n\t\t\t\thandlerProxy.guid = handler.guid =\r\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\r\n\t\t\t}\r\n\r\n\t\t\tvar match = event.match( /^(\\w+)\\s*(.*)$/ ),\r\n\t\t\t\teventName = match[1] + instance.eventNamespace,\r\n\t\t\t\tselector = match[2];\r\n\t\t\tif ( selector ) {\r\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\r\n\t\t\t} else {\r\n\t\t\t\telement.bind( eventName, handlerProxy );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_off: function( element, eventName ) {\r\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) + this.eventNamespace;\r\n\t\telement.unbind( eventName ).undelegate( eventName );\r\n\t},\r\n\r\n\t_delay: function( handler, delay ) {\r\n\t\tfunction handlerProxy() {\r\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t.apply( instance, arguments );\r\n\t\t}\r\n\t\tvar instance = this;\r\n\t\treturn setTimeout( handlerProxy, delay || 0 );\r\n\t},\r\n\r\n\t_hoverable: function( element ) {\r\n\t\tthis.hoverable = this.hoverable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tmouseenter: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\r\n\t\t\t},\r\n\t\t\tmouseleave: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_focusable: function( element ) {\r\n\t\tthis.focusable = this.focusable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tfocusin: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\r\n\t\t\t},\r\n\t\t\tfocusout: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_trigger: function( type, event, data ) {\r\n\t\tvar prop, orig,\r\n\t\t\tcallback = this.options[ type ];\r\n\r\n\t\tdata = data || {};\r\n\t\tevent = $.Event( event );\r\n\t\tevent.type = ( type === this.widgetEventPrefix ?\r\n\t\t\ttype :\r\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\r\n\t\t// the original event may come from any element\r\n\t\t// so we need to reset the target on the new event\r\n\t\tevent.target = this.element[ 0 ];\r\n\r\n\t\t// copy original event properties over to the new event\r\n\t\torig = event.originalEvent;\r\n\t\tif ( orig ) {\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tif ( !( prop in event ) ) {\r\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element.trigger( event, data );\r\n\t\treturn !( $.isFunction( callback ) &&\r\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\r\n\t\t\tevent.isDefaultPrevented() );\r\n\t}\r\n};\r\n\r\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\r\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\r\n\t\tif ( typeof options === \"string\" ) {\r\n\t\t\toptions = { effect: options };\r\n\t\t}\r\n\t\tvar hasOptions,\r\n\t\t\teffectName = !options ?\r\n\t\t\t\tmethod :\r\n\t\t\t\toptions === true || typeof options === \"number\" ?\r\n\t\t\t\t\tdefaultEffect :\r\n\t\t\t\t\toptions.effect || defaultEffect;\r\n\t\toptions = options || {};\r\n\t\tif ( typeof options === \"number\" ) {\r\n\t\t\toptions = { duration: options };\r\n\t\t}\r\n\t\thasOptions = !$.isEmptyObject( options );\r\n\t\toptions.complete = callback;\r\n\t\tif ( options.delay ) {\r\n\t\t\telement.delay( options.delay );\r\n\t\t}\r\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\r\n\t\t\telement[ method ]( options );\r\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\r\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\r\n\t\t} else {\r\n\t\t\telement.queue(function( next ) {\r\n\t\t\t\t$( this )[ method ]();\r\n\t\t\t\tif ( callback ) {\r\n\t\t\t\t\tcallback.call( element[ 0 ] );\r\n\t\t\t\t}\r\n\t\t\t\tnext();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n});\r\n\r\n})( jQuery );\r\n(function( $, undefined ) {\r\n\r\nvar mouseHandled = false;\r\n$( document ).mouseup( function() {\r\n\tmouseHandled = false;\r\n});\r\n\r\n$.widget(\"ui.mouse\", {\r\n\tversion: \"1.10.4\",\r\n\toptions: {\r\n\t\tcancel: \"input,textarea,button,select,option\",\r\n\t\tdistance: 1,\r\n\t\tdelay: 0\r\n\t},\r\n\t_mouseInit: function() {\r\n\t\tvar that = this;\r\n\r\n\t\tthis.element\r\n\t\t\t.bind(\"mousedown.\"+this.widgetName, function(event) {\r\n\t\t\t\treturn that._mouseDown(event);\r\n\t\t\t})\r\n\t\t\t.bind(\"click.\"+this.widgetName, function(event) {\r\n\t\t\t\tif (true === $.data(event.target, that.widgetName + \".preventClickEvent\")) {\r\n\t\t\t\t\t$.removeData(event.target, that.widgetName + \".preventClickEvent\");\r\n\t\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.started = false;\r\n\t},\r\n\r\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\r\n\t// other instances of mouse\r\n\t_mouseDestroy: function() {\r\n\t\tthis.element.unbind(\".\"+this.widgetName);\r\n\t\tif ( this._mouseMoveDelegate ) {\r\n\t\t\t$(document)\r\n\t\t\t\t.unbind(\"mousemove.\"+this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t\t.unbind(\"mouseup.\"+this.widgetName, this._mouseUpDelegate);\r\n\t\t}\r\n\t},\r\n\r\n\t_mouseDown: function(event) {\r\n\t\t// don't let more than one widget handle mouseStart\r\n\t\tif( mouseHandled ) { return; }\r\n\r\n\t\t// we may have missed mouseup (out of window)\r\n\t\t(this._mouseStarted && this._mouseUp(event));\r\n\r\n\t\tthis._mouseDownEvent = event;\r\n\r\n\t\tvar that = this,\r\n\t\t\tbtnIsLeft = (event.which === 1),\r\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\r\n\t\t\t// disabled inputs (#7620)\r\n\t\t\telIsCancel = (typeof this.options.cancel === \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);\r\n\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tthis.mouseDelayMet = !this.options.delay;\r\n\t\tif (!this.mouseDelayMet) {\r\n\t\t\tthis._mouseDelayTimer = setTimeout(function() {\r\n\t\t\t\tthat.mouseDelayMet = true;\r\n\t\t\t}, this.options.delay);\r\n\t\t}\r\n\r\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r\n\t\t\tthis._mouseStarted = (this._mouseStart(event) !== false);\r\n\t\t\tif (!this._mouseStarted) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Click event may never have fired (Gecko & Opera)\r\n\t\tif (true === $.data(event.target, this.widgetName + \".preventClickEvent\")) {\r\n\t\t\t$.removeData(event.target, this.widgetName + \".preventClickEvent\");\r\n\t\t}\r\n\r\n\t\t// these delegates are required to keep context\r\n\t\tthis._mouseMoveDelegate = function(event) {\r\n\t\t\treturn that._mouseMove(event);\r\n\t\t};\r\n\t\tthis._mouseUpDelegate = function(event) {\r\n\t\t\treturn that._mouseUp(event);\r\n\t\t};\r\n\t\t$(document)\r\n\t\t\t.bind(\"mousemove.\"+this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t.bind(\"mouseup.\"+this.widgetName, this._mouseUpDelegate);\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tmouseHandled = true;\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseMove: function(event) {\r\n\t\t// IE mouseup check - mouseup happened when mouse was out of window\r\n\t\tif ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {\r\n\t\t\treturn this._mouseUp(event);\r\n\t\t}\r\n\r\n\t\tif (this._mouseStarted) {\r\n\t\t\tthis._mouseDrag(event);\r\n\t\t\treturn event.preventDefault();\r\n\t\t}\r\n\r\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r\n\t\t\tthis._mouseStarted =\r\n\t\t\t\t(this._mouseStart(this._mouseDownEvent, event) !== false);\r\n\t\t\t(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\r\n\t\t}\r\n\r\n\t\treturn !this._mouseStarted;\r\n\t},\r\n\r\n\t_mouseUp: function(event) {\r\n\t\t$(document)\r\n\t\t\t.unbind(\"mousemove.\"+this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t.unbind(\"mouseup.\"+this.widgetName, this._mouseUpDelegate);\r\n\r\n\t\tif (this._mouseStarted) {\r\n\t\t\tthis._mouseStarted = false;\r\n\r\n\t\t\tif (event.target === this._mouseDownEvent.target) {\r\n\t\t\t\t$.data(event.target, this.widgetName + \".preventClickEvent\", true);\r\n\t\t\t}\r\n\r\n\t\t\tthis._mouseStop(event);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseDistanceMet: function(event) {\r\n\t\treturn (Math.max(\r\n\t\t\t\tMath.abs(this._mouseDownEvent.pageX - event.pageX),\r\n\t\t\t\tMath.abs(this._mouseDownEvent.pageY - event.pageY)\r\n\t\t\t) >= this.options.distance\r\n\t\t);\r\n\t},\r\n\r\n\t_mouseDelayMet: function(/* event */) {\r\n\t\treturn this.mouseDelayMet;\r\n\t},\r\n\r\n\t// These are placeholder methods, to be overriden by extending plugin\r\n\t_mouseStart: function(/* event */) {},\r\n\t_mouseDrag: function(/* event */) {},\r\n\t_mouseStop: function(/* event */) {},\r\n\t_mouseCapture: function(/* event */) { return true; }\r\n});\r\n\r\n})(jQuery);\r\n(function( $, undefined ) {\r\n\r\n$.ui = $.ui || {};\r\n\r\nvar cachedScrollbarWidth,\r\n\tmax = Math.max,\r\n\tabs = Math.abs,\r\n\tround = Math.round,\r\n\trhorizontal = /left|center|right/,\r\n\trvertical = /top|center|bottom/,\r\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\r\n\trposition = /^\\w+/,\r\n\trpercent = /%$/,\r\n\t_position = $.fn.position;\r\n\r\nfunction getOffsets( offsets, width, height ) {\r\n\treturn [\r\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\r\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\r\n\t];\r\n}\r\n\r\nfunction parseCss( element, property ) {\r\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\r\n}\r\n\r\nfunction getDimensions( elem ) {\r\n\tvar raw = elem[0];\r\n\tif ( raw.nodeType === 9 ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: 0, left: 0 }\r\n\t\t};\r\n\t}\r\n\tif ( $.isWindow( raw ) ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\r\n\t\t};\r\n\t}\r\n\tif ( raw.preventDefault ) {\r\n\t\treturn {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0,\r\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\r\n\t\t};\r\n\t}\r\n\treturn {\r\n\t\twidth: elem.outerWidth(),\r\n\t\theight: elem.outerHeight(),\r\n\t\toffset: elem.offset()\r\n\t};\r\n}\r\n\r\n$.position = {\r\n\tscrollbarWidth: function() {\r\n\t\tif ( cachedScrollbarWidth !== undefined ) {\r\n\t\t\treturn cachedScrollbarWidth;\r\n\t\t}\r\n\t\tvar w1, w2,\r\n\t\t\tdiv = $( \"
\" ),\r\n\t\t\tinnerDiv = div.children()[0];\r\n\r\n\t\t$( \"body\" ).append( div );\r\n\t\tw1 = innerDiv.offsetWidth;\r\n\t\tdiv.css( \"overflow\", \"scroll\" );\r\n\r\n\t\tw2 = innerDiv.offsetWidth;\r\n\r\n\t\tif ( w1 === w2 ) {\r\n\t\t\tw2 = div[0].clientWidth;\r\n\t\t}\r\n\r\n\t\tdiv.remove();\r\n\r\n\t\treturn (cachedScrollbarWidth = w1 - w2);\r\n\t},\r\n\tgetScrollInfo: function( within ) {\r\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-x\" ),\r\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-y\" ),\r\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\r\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[0].scrollWidth ),\r\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\r\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[0].scrollHeight );\r\n\t\treturn {\r\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\r\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\r\n\t\t};\r\n\t},\r\n\tgetWithinInfo: function( element ) {\r\n\t\tvar withinElement = $( element || window ),\r\n\t\t\tisWindow = $.isWindow( withinElement[0] ),\r\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;\r\n\t\treturn {\r\n\t\t\telement: withinElement,\r\n\t\t\tisWindow: isWindow,\r\n\t\t\tisDocument: isDocument,\r\n\t\t\toffset: withinElement.offset() || { left: 0, top: 0 },\r\n\t\t\tscrollLeft: withinElement.scrollLeft(),\r\n\t\t\tscrollTop: withinElement.scrollTop(),\r\n\t\t\twidth: isWindow ? withinElement.width() : withinElement.outerWidth(),\r\n\t\t\theight: isWindow ? withinElement.height() : withinElement.outerHeight()\r\n\t\t};\r\n\t}\r\n};\r\n\r\n$.fn.position = function( options ) {\r\n\tif ( !options || !options.of ) {\r\n\t\treturn _position.apply( this, arguments );\r\n\t}\r\n\r\n\t// make a copy, we don't want to modify arguments\r\n\toptions = $.extend( {}, options );\r\n\r\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\r\n\t\ttarget = $( options.of ),\r\n\t\twithin = $.position.getWithinInfo( options.within ),\r\n\t\tscrollInfo = $.position.getScrollInfo( within ),\r\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\r\n\t\toffsets = {};\r\n\r\n\tdimensions = getDimensions( target );\r\n\tif ( target[0].preventDefault ) {\r\n\t\t// force left top to allow flipping\r\n\t\toptions.at = \"left top\";\r\n\t}\r\n\ttargetWidth = dimensions.width;\r\n\ttargetHeight = dimensions.height;\r\n\ttargetOffset = dimensions.offset;\r\n\t// clone to reuse original targetOffset later\r\n\tbasePosition = $.extend( {}, targetOffset );\r\n\r\n\t// force my and at to have valid horizontal and vertical positions\r\n\t// if a value is missing or invalid, it will be converted to center\r\n\t$.each( [ \"my\", \"at\" ], function() {\r\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\r\n\t\t\thorizontalOffset,\r\n\t\t\tverticalOffset;\r\n\r\n\t\tif ( pos.length === 1) {\r\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\r\n\t\t\t\tpos.concat( [ \"center\" ] ) :\r\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\r\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\r\n\t\t\t\t\t[ \"center\", \"center\" ];\r\n\t\t}\r\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\r\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\r\n\r\n\t\t// calculate offsets\r\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\r\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\r\n\t\toffsets[ this ] = [\r\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\r\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\r\n\t\t];\r\n\r\n\t\t// reduce to just the positions without the offsets\r\n\t\toptions[ this ] = [\r\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\r\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\r\n\t\t];\r\n\t});\r\n\r\n\t// normalize collision option\r\n\tif ( collision.length === 1 ) {\r\n\t\tcollision[ 1 ] = collision[ 0 ];\r\n\t}\r\n\r\n\tif ( options.at[ 0 ] === \"right\" ) {\r\n\t\tbasePosition.left += targetWidth;\r\n\t} else if ( options.at[ 0 ] === \"center\" ) {\r\n\t\tbasePosition.left += targetWidth / 2;\r\n\t}\r\n\r\n\tif ( options.at[ 1 ] === \"bottom\" ) {\r\n\t\tbasePosition.top += targetHeight;\r\n\t} else if ( options.at[ 1 ] === \"center\" ) {\r\n\t\tbasePosition.top += targetHeight / 2;\r\n\t}\r\n\r\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\r\n\tbasePosition.left += atOffset[ 0 ];\r\n\tbasePosition.top += atOffset[ 1 ];\r\n\r\n\treturn this.each(function() {\r\n\t\tvar collisionPosition, using,\r\n\t\t\telem = $( this ),\r\n\t\t\telemWidth = elem.outerWidth(),\r\n\t\t\telemHeight = elem.outerHeight(),\r\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\r\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\r\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) + scrollInfo.width,\r\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) + scrollInfo.height,\r\n\t\t\tposition = $.extend( {}, basePosition ),\r\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\r\n\r\n\t\tif ( options.my[ 0 ] === \"right\" ) {\r\n\t\t\tposition.left -= elemWidth;\r\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\r\n\t\t\tposition.left -= elemWidth / 2;\r\n\t\t}\r\n\r\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\r\n\t\t\tposition.top -= elemHeight;\r\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\r\n\t\t\tposition.top -= elemHeight / 2;\r\n\t\t}\r\n\r\n\t\tposition.left += myOffset[ 0 ];\r\n\t\tposition.top += myOffset[ 1 ];\r\n\r\n\t\t// if the browser doesn't support fractions, then round for consistent results\r\n\t\tif ( !$.support.offsetFractions ) {\r\n\t\t\tposition.left = round( position.left );\r\n\t\t\tposition.top = round( position.top );\r\n\t\t}\r\n\r\n\t\tcollisionPosition = {\r\n\t\t\tmarginLeft: marginLeft,\r\n\t\t\tmarginTop: marginTop\r\n\t\t};\r\n\r\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\r\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\r\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\r\n\t\t\t\t\ttargetWidth: targetWidth,\r\n\t\t\t\t\ttargetHeight: targetHeight,\r\n\t\t\t\t\telemWidth: elemWidth,\r\n\t\t\t\t\telemHeight: elemHeight,\r\n\t\t\t\t\tcollisionPosition: collisionPosition,\r\n\t\t\t\t\tcollisionWidth: collisionWidth,\r\n\t\t\t\t\tcollisionHeight: collisionHeight,\r\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\r\n\t\t\t\t\tmy: options.my,\r\n\t\t\t\t\tat: options.at,\r\n\t\t\t\t\twithin: within,\r\n\t\t\t\t\telem : elem\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ( options.using ) {\r\n\t\t\t// adds feedback as second argument to using callback, if present\r\n\t\t\tusing = function( props ) {\r\n\t\t\t\tvar left = targetOffset.left - position.left,\r\n\t\t\t\t\tright = left + targetWidth - elemWidth,\r\n\t\t\t\t\ttop = targetOffset.top - position.top,\r\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\r\n\t\t\t\t\tfeedback = {\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\telement: target,\r\n\t\t\t\t\t\t\tleft: targetOffset.left,\r\n\t\t\t\t\t\t\ttop: targetOffset.top,\r\n\t\t\t\t\t\t\twidth: targetWidth,\r\n\t\t\t\t\t\t\theight: targetHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\telement: {\r\n\t\t\t\t\t\t\telement: elem,\r\n\t\t\t\t\t\t\tleft: position.left,\r\n\t\t\t\t\t\t\ttop: position.top,\r\n\t\t\t\t\t\t\twidth: elemWidth,\r\n\t\t\t\t\t\t\theight: elemHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\r\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\r\n\t\t\t\t\t};\r\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\r\n\t\t\t\t\tfeedback.horizontal = \"center\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\r\n\t\t\t\t\tfeedback.vertical = \"middle\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\r\n\t\t\t\t\tfeedback.important = \"horizontal\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfeedback.important = \"vertical\";\r\n\t\t\t\t}\r\n\t\t\t\toptions.using.call( this, props, feedback );\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\telem.offset( $.extend( position, { using: using } ) );\r\n\t});\r\n};\r\n\r\n$.ui.position = {\r\n\tfit: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\r\n\t\t\t\tnewOverRight;\r\n\r\n\t\t\t// element is wider than within\r\n\t\t\tif ( data.collisionWidth > outerWidth ) {\r\n\t\t\t\t// element is initially over the left side of within\r\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\r\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;\r\n\t\t\t\t\tposition.left += overLeft - newOverRight;\r\n\t\t\t\t// element is initially over right side of within\r\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\r\n\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t// element is initially over both left and right sides of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overLeft > overRight ) {\r\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// too far left -> align with left edge\r\n\t\t\t} else if ( overLeft > 0 ) {\r\n\t\t\t\tposition.left += overLeft;\r\n\t\t\t// too far right -> align with right edge\r\n\t\t\t} else if ( overRight > 0 ) {\r\n\t\t\t\tposition.left -= overRight;\r\n\t\t\t// adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\touterHeight = data.within.height,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = withinOffset - collisionPosTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\r\n\t\t\t\tnewOverBottom;\r\n\r\n\t\t\t// element is taller than within\r\n\t\t\tif ( data.collisionHeight > outerHeight ) {\r\n\t\t\t\t// element is initially over the top of within\r\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\r\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;\r\n\t\t\t\t\tposition.top += overTop - newOverBottom;\r\n\t\t\t\t// element is initially over bottom of within\r\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\r\n\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t// element is initially over both top and bottom of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overTop > overBottom ) {\r\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// too far up -> align with top\r\n\t\t\t} else if ( overTop > 0 ) {\r\n\t\t\t\tposition.top += overTop;\r\n\t\t\t// too far down -> align with bottom edge\r\n\t\t\t} else if ( overBottom > 0 ) {\r\n\t\t\t\tposition.top -= overBottom;\r\n\t\t\t// adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflip: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\r\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\r\n\t\t\t\t\t-data.elemWidth :\r\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\tdata.elemWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\r\n\t\t\t\t\tdata.targetWidth :\r\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\t-data.targetWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 0 ],\r\n\t\t\t\tnewOverRight,\r\n\t\t\t\tnewOverLeft;\r\n\r\n\t\t\tif ( overLeft < 0 ) {\r\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;\r\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if ( overRight > 0 ) {\r\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;\r\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\r\n\t\t\t\touterHeight = within.height,\r\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = collisionPosTop - offsetTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\r\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\r\n\t\t\t\tmyOffset = top ?\r\n\t\t\t\t\t-data.elemHeight :\r\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\tdata.elemHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\r\n\t\t\t\t\tdata.targetHeight :\r\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\t-data.targetHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 1 ],\r\n\t\t\t\tnewOverTop,\r\n\t\t\t\tnewOverBottom;\r\n\t\t\tif ( overTop < 0 ) {\r\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;\r\n\t\t\t\tif ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if ( overBottom > 0 ) {\r\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;\r\n\t\t\t\tif ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflipfit: {\r\n\t\tleft: function() {\r\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\r\n\t\t},\r\n\t\ttop: function() {\r\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// fraction support test\r\n(function () {\r\n\tvar testElement, testElementParent, testElementStyle, offsetLeft, i,\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ],\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t//Create a \"fake body\" for testing based on method used in jQuery.support\r\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\r\n\ttestElementStyle = {\r\n\t\tvisibility: \"hidden\",\r\n\t\twidth: 0,\r\n\t\theight: 0,\r\n\t\tborder: 0,\r\n\t\tmargin: 0,\r\n\t\tbackground: \"none\"\r\n\t};\r\n\tif ( body ) {\r\n\t\t$.extend( testElementStyle, {\r\n\t\t\tposition: \"absolute\",\r\n\t\t\tleft: \"-1000px\",\r\n\t\t\ttop: \"-1000px\"\r\n\t\t});\r\n\t}\r\n\tfor ( i in testElementStyle ) {\r\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\r\n\t}\r\n\ttestElement.appendChild( div );\r\n\ttestElementParent = body || document.documentElement;\r\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\r\n\r\n\tdiv.style.cssText = \"position: absolute; left: 10.7432222px;\";\r\n\r\n\toffsetLeft = $( div ).offset().left;\r\n\t$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;\r\n\r\n\ttestElement.innerHTML = \"\";\r\n\ttestElementParent.removeChild( testElement );\r\n})();\r\n\r\n}( jQuery ) );\r\n(function( $, undefined ) {\r\n\r\n$.widget( \"ui.autocomplete\", {\r\n\tversion: \"1.10.4\",\r\n\tdefaultElement: \"
\",\r\n\toptions: {\r\n\t\tappendTo: null,\r\n\t\tautoFocus: false,\r\n\t\tdelay: 300,\r\n\t\tminLength: 1,\r\n\t\tposition: {\r\n\t\t\tmy: \"left top\",\r\n\t\t\tat: \"left bottom\",\r\n\t\t\tcollision: \"none\"\r\n\t\t},\r\n\t\tsource: null,\r\n\r\n\t\t// callbacks\r\n\t\tchange: null,\r\n\t\tclose: null,\r\n\t\tfocus: null,\r\n\t\topen: null,\r\n\t\tresponse: null,\r\n\t\tsearch: null,\r\n\t\tselect: null\r\n\t},\r\n\r\n\trequestIndex: 0,\r\n\tpending: 0,\r\n\r\n\t_create: function() {\r\n\t\t// Some browsers only repeat keydown events, not keypress events,\r\n\t\t// so we use the suppressKeyPress flag to determine if we've already\r\n\t\t// handled the keydown event. #7269\r\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\r\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\r\n\t\t// events when we know the keydown event was used to modify the\r\n\t\t// search term. #7799\r\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\r\n\t\t\tnodeName = this.element[0].nodeName.toLowerCase(),\r\n\t\t\tisTextarea = nodeName === \"textarea\",\r\n\t\t\tisInput = nodeName === \"input\";\r\n\r\n\t\tthis.isMultiLine =\r\n\t\t\t// Textareas are always multi-line\r\n\t\t\tisTextarea ? true :\r\n\t\t\t// Inputs are always single-line, even if inside a contentEditable element\r\n\t\t\t// IE also treats inputs as contentEditable\r\n\t\t\tisInput ? false :\r\n\t\t\t// All other element types are determined by whether or not they're contentEditable\r\n\t\t\tthis.element.prop( \"isContentEditable\" );\r\n\r\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\r\n\t\tthis.isNewMenu = true;\r\n\r\n\t\tthis.element\r\n\t\t\t.addClass( \"ui-autocomplete-input\" )\r\n\t\t\t.attr( \"autocomplete\", \"off\" );\r\n\r\n\t\tthis._on( this.element, {\r\n\t\t\tkeydown: function( event ) {\r\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tsuppressInput = true;\r\n\t\t\t\t\tsuppressKeyPressRepeat = true;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuppressKeyPress = false;\r\n\t\t\t\tsuppressInput = false;\r\n\t\t\t\tsuppressKeyPressRepeat = false;\r\n\t\t\t\tvar keyCode = $.ui.keyCode;\r\n\t\t\t\tswitch( event.keyCode ) {\r\n\t\t\t\tcase keyCode.PAGE_UP:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._move( \"previousPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.PAGE_DOWN:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._move( \"nextPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.UP:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.DOWN:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._keyEvent( \"next\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.ENTER:\r\n\t\t\t\tcase keyCode.NUMPAD_ENTER:\r\n\t\t\t\t\t// when menu is open and has focus\r\n\t\t\t\t\tif ( this.menu.active ) {\r\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\r\n\t\t\t\t\t\t// which causes forms to submit\r\n\t\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tthis.menu.select( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.TAB:\r\n\t\t\t\t\tif ( this.menu.active ) {\r\n\t\t\t\t\t\tthis.menu.select( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.ESCAPE:\r\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\r\n\t\t\t\t\t\tthis._value( this.term );\r\n\t\t\t\t\t\tthis.close( event );\r\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\r\n\t\t\t\t\t\t// Single press can mean undo or clear\r\n\t\t\t\t\t\t// Double press in IE means clear the whole form\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsuppressKeyPressRepeat = true;\r\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\r\n\t\t\t\t\tthis._searchTimeout( event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tkeypress: function( event ) {\r\n\t\t\t\tif ( suppressKeyPress ) {\r\n\t\t\t\t\tsuppressKeyPress = false;\r\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif ( suppressKeyPressRepeat ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\r\n\t\t\t\tvar keyCode = $.ui.keyCode;\r\n\t\t\t\tswitch( event.keyCode ) {\r\n\t\t\t\tcase keyCode.PAGE_UP:\r\n\t\t\t\t\tthis._move( \"previousPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.PAGE_DOWN:\r\n\t\t\t\t\tthis._move( \"nextPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.UP:\r\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.DOWN:\r\n\t\t\t\t\tthis._keyEvent( \"next\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tinput: function( event ) {\r\n\t\t\t\tif ( suppressInput ) {\r\n\t\t\t\t\tsuppressInput = false;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._searchTimeout( event );\r\n\t\t\t},\r\n\t\t\tfocus: function() {\r\n\t\t\t\tthis.selectedItem = null;\r\n\t\t\t\tthis.previous = this._value();\r\n\t\t\t},\r\n\t\t\tblur: function( event ) {\r\n\t\t\t\tif ( this.cancelBlur ) {\r\n\t\t\t\t\tdelete this.cancelBlur;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout( this.searching );\r\n\t\t\t\tthis.close( event );\r\n\t\t\t\tthis._change( event );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._initSource();\r\n\t\tthis.menu = $( \"
\" )\r\n\t\t\t.addClass( \"ui-autocomplete ui-front\" )\r\n\t\t\t.appendTo( this._appendTo() )\r\n\t\t\t.menu({\r\n\t\t\t\t// disable ARIA support, the live region takes care of that\r\n\t\t\t\trole: null\r\n\t\t\t})\r\n\t\t\t.hide()\r\n\t\t\t.data( \"ui-menu\" );\r\n\r\n\t\tthis._on( this.menu.element, {\r\n\t\t\tmousedown: function( event ) {\r\n\t\t\t\t// prevent moving focus out of the text field\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\r\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\r\n\t\t\t\tthis.cancelBlur = true;\r\n\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\tdelete this.cancelBlur;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\r\n\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\r\n\t\t\t\t// so we have to track the next mousedown and close the menu if\r\n\t\t\t\t// the user clicks somewhere outside of the autocomplete\r\n\t\t\t\tvar menuElement = this.menu.element[ 0 ];\r\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item\" ).length ) {\r\n\t\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\t\tvar that = this;\r\n\t\t\t\t\t\tthis.document.one( \"mousedown\", function( event ) {\r\n\t\t\t\t\t\t\tif ( event.target !== that.element[ 0 ] &&\r\n\t\t\t\t\t\t\t\t\tevent.target !== menuElement &&\r\n\t\t\t\t\t\t\t\t\t!$.contains( menuElement, event.target ) ) {\r\n\t\t\t\t\t\t\t\tthat.close();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmenufocus: function( event, ui ) {\r\n\t\t\t\t// support: Firefox\r\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\r\n\t\t\t\tif ( this.isNewMenu ) {\r\n\t\t\t\t\tthis.isNewMenu = false;\r\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\r\n\t\t\t\t\t\tthis.menu.blur();\r\n\r\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\r\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" );\r\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\r\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\r\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\r\n\t\t\t\t\t\tthis._value( item.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Normally the input is populated with the item's value as the\r\n\t\t\t\t\t// menu is navigated, causing screen readers to notice a change and\r\n\t\t\t\t\t// announce the item. Since the focus event was canceled, this doesn't\r\n\t\t\t\t\t// happen, so we update the live region so that screen readers can\r\n\t\t\t\t\t// still notice the change and announce it.\r\n\t\t\t\t\tthis.liveRegion.text( item.value );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmenuselect: function( event, ui ) {\r\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\r\n\t\t\t\t\tprevious = this.previous;\r\n\r\n\t\t\t\t// only trigger when focus was lost (click on menu)\r\n\t\t\t\tif ( this.element[0] !== this.document[0].activeElement ) {\r\n\t\t\t\t\tthis.element.focus();\r\n\t\t\t\t\tthis.previous = previous;\r\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\r\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\r\n\t\t\t\t\t// term synchronously and asynchronously :-(\r\n\t\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\t\tthis.previous = previous;\r\n\t\t\t\t\t\tthis.selectedItem = item;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\r\n\t\t\t\t\tthis._value( item.value );\r\n\t\t\t\t}\r\n\t\t\t\t// reset the term after the select event\r\n\t\t\t\t// this allows custom select handling to work properly\r\n\t\t\t\tthis.term = this._value();\r\n\r\n\t\t\t\tthis.close( event );\r\n\t\t\t\tthis.selectedItem = item;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.liveRegion = $( \"\", {\r\n\t\t\t\trole: \"status\",\r\n\t\t\t\t\"aria-live\": \"polite\"\r\n\t\t\t})\r\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\r\n\t\t\t.insertBefore( this.element );\r\n\r\n\t\t// turning off autocomplete prevents the browser from remembering the\r\n\t\t// value when navigating through history, so we re-enable autocomplete\r\n\t\t// if the page is unloaded before the widget is destroyed. #7790\r\n\t\tthis._on( this.window, {\r\n\t\t\tbeforeunload: function() {\r\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tclearTimeout( this.searching );\r\n\t\tthis.element\r\n\t\t\t.removeClass( \"ui-autocomplete-input\" )\r\n\t\t\t.removeAttr( \"autocomplete\" );\r\n\t\tthis.menu.element.remove();\r\n\t\tthis.liveRegion.remove();\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tthis._super( key, value );\r\n\t\tif ( key === \"source\" ) {\r\n\t\t\tthis._initSource();\r\n\t\t}\r\n\t\tif ( key === \"appendTo\" ) {\r\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\r\n\t\t}\r\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\r\n\t\t\tthis.xhr.abort();\r\n\t\t}\r\n\t},\r\n\r\n\t_appendTo: function() {\r\n\t\tvar element = this.options.appendTo;\r\n\r\n\t\tif ( element ) {\r\n\t\t\telement = element.jquery || element.nodeType ?\r\n\t\t\t\t$( element ) :\r\n\t\t\t\tthis.document.find( element ).eq( 0 );\r\n\t\t}\r\n\r\n\t\tif ( !element ) {\r\n\t\t\telement = this.element.closest( \".ui-front\" );\r\n\t\t}\r\n\r\n\t\tif ( !element.length ) {\r\n\t\t\telement = this.document[0].body;\r\n\t\t}\r\n\r\n\t\treturn element;\r\n\t},\r\n\r\n\t_initSource: function() {\r\n\t\tvar array, url,\r\n\t\t\tthat = this;\r\n\t\tif ( $.isArray(this.options.source) ) {\r\n\t\t\tarray = this.options.source;\r\n\t\t\tthis.source = function( request, response ) {\r\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\r\n\t\t\t};\r\n\t\t} else if ( typeof this.options.source === \"string\" ) {\r\n\t\t\turl = this.options.source;\r\n\t\t\tthis.source = function( request, response ) {\r\n\t\t\t\tif ( that.xhr ) {\r\n\t\t\t\t\tthat.xhr.abort();\r\n\t\t\t\t}\r\n\t\t\t\tthat.xhr = $.ajax({\r\n\t\t\t\t\turl: url,\r\n\t\t\t\t\tdata: request,\r\n\t\t\t\t\tdataType: \"json\",\r\n\t\t\t\t\tsuccess: function( data ) {\r\n\t\t\t\t\t\tresponse( data );\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\tresponse( [] );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tthis.source = this.options.source;\r\n\t\t}\r\n\t},\r\n\r\n\t_searchTimeout: function( event ) {\r\n\t\tclearTimeout( this.searching );\r\n\t\tthis.searching = this._delay(function() {\r\n\t\t\t// only search if the value has changed\r\n\t\t\tif ( this.term !== this._value() ) {\r\n\t\t\t\tthis.selectedItem = null;\r\n\t\t\t\tthis.search( null, event );\r\n\t\t\t}\r\n\t\t}, this.options.delay );\r\n\t},\r\n\r\n\tsearch: function( value, event ) {\r\n\t\tvalue = value != null ? value : this._value();\r\n\r\n\t\t// always save the actual value, not the one passed as an argument\r\n\t\tthis.term = this._value();\r\n\r\n\t\tif ( value.length < this.options.minLength ) {\r\n\t\t\treturn this.close( event );\r\n\t\t}\r\n\r\n\t\tif ( this._trigger( \"search\", event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn this._search( value );\r\n\t},\r\n\r\n\t_search: function( value ) {\r\n\t\tthis.pending++;\r\n\t\tthis.element.addClass( \"ui-autocomplete-loading\" );\r\n\t\tthis.cancelSearch = false;\r\n\r\n\t\tthis.source( { term: value }, this._response() );\r\n\t},\r\n\r\n\t_response: function() {\r\n\t\tvar index = ++this.requestIndex;\r\n\r\n\t\treturn $.proxy(function( content ) {\r\n\t\t\tif ( index === this.requestIndex ) {\r\n\t\t\t\tthis.__response( content );\r\n\t\t\t}\r\n\r\n\t\t\tthis.pending--;\r\n\t\t\tif ( !this.pending ) {\r\n\t\t\t\tthis.element.removeClass( \"ui-autocomplete-loading\" );\r\n\t\t\t}\r\n\t\t}, this );\r\n\t},\r\n\r\n\t__response: function( content ) {\r\n\t\tif ( content ) {\r\n\t\t\tcontent = this._normalize( content );\r\n\t\t}\r\n\t\tthis._trigger( \"response\", null, { content: content } );\r\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\r\n\t\t\tthis._suggest( content );\r\n\t\t\tthis._trigger( \"open\" );\r\n\t\t} else {\r\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\r\n\t\t\tthis._close();\r\n\t\t}\r\n\t},\r\n\r\n\tclose: function( event ) {\r\n\t\tthis.cancelSearch = true;\r\n\t\tthis._close( event );\r\n\t},\r\n\r\n\t_close: function( event ) {\r\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis.menu.element.hide();\r\n\t\t\tthis.menu.blur();\r\n\t\t\tthis.isNewMenu = true;\r\n\t\t\tthis._trigger( \"close\", event );\r\n\t\t}\r\n\t},\r\n\r\n\t_change: function( event ) {\r\n\t\tif ( this.previous !== this._value() ) {\r\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\r\n\t\t}\r\n\t},\r\n\r\n\t_normalize: function( items ) {\r\n\t\t// assume all items have the right format when the first item is complete\r\n\t\tif ( items.length && items[0].label && items[0].value ) {\r\n\t\t\treturn items;\r\n\t\t}\r\n\t\treturn $.map( items, function( item ) {\r\n\t\t\tif ( typeof item === \"string\" ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tlabel: item,\r\n\t\t\t\t\tvalue: item\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn $.extend({\r\n\t\t\t\tlabel: item.label || item.value,\r\n\t\t\t\tvalue: item.value || item.label\r\n\t\t\t}, item );\r\n\t\t});\r\n\t},\r\n\r\n\t_suggest: function( items ) {\r\n\t\tvar ul = this.menu.element.empty();\r\n\t\tthis._renderMenu( ul, items );\r\n\t\tthis.isNewMenu = true;\r\n\t\tthis.menu.refresh();\r\n\r\n\t\t// size and position menu\r\n\t\tul.show();\r\n\t\tthis._resizeMenu();\r\n\t\tul.position( $.extend({\r\n\t\t\tof: this.element\r\n\t\t}, this.options.position ));\r\n\r\n\t\tif ( this.options.autoFocus ) {\r\n\t\t\tthis.menu.next();\r\n\t\t}\r\n\t},\r\n\r\n\t_resizeMenu: function() {\r\n\t\tvar ul = this.menu.element;\r\n\t\tul.outerWidth( Math.max(\r\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\r\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\r\n\t\t\tul.width( \"\" ).outerWidth() + 1,\r\n\t\t\tthis.element.outerWidth()\r\n\t\t) );\r\n\t},\r\n\r\n\t_renderMenu: function( ul, items ) {\r\n\t\tvar that = this;\r\n\t\t$.each( items, function( index, item ) {\r\n\t\t\tthat._renderItemData( ul, item );\r\n\t\t});\r\n\t},\r\n\r\n\t_renderItemData: function( ul, item ) {\r\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\r\n\t},\r\n\r\n\t_renderItem: function( ul, item ) {\r\n\t\treturn $( \"- \" )\r\n\t\t\t.append( $( \"\" ).text( item.label ) )\r\n\t\t\t.appendTo( ul );\r\n\t},\r\n\r\n\t_move: function( direction, event ) {\r\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis.search( null, event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\r\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\r\n\t\t\tthis._value( this.term );\r\n\t\t\tthis.menu.blur();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.menu[ direction ]( event );\r\n\t},\r\n\r\n\twidget: function() {\r\n\t\treturn this.menu.element;\r\n\t},\r\n\r\n\t_value: function() {\r\n\t\treturn this.valueMethod.apply( this.element, arguments );\r\n\t},\r\n\r\n\t_keyEvent: function( keyEvent, event ) {\r\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis._move( keyEvent, event );\r\n\r\n\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n});\r\n\r\n$.extend( $.ui.autocomplete, {\r\n\tescapeRegex: function( value ) {\r\n\t\treturn value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\r\n\t},\r\n\tfilter: function(array, term) {\r\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), \"i\" );\r\n\t\treturn $.grep( array, function(value) {\r\n\t\t\treturn matcher.test( value.label || value.value || value );\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// live region extension, adding a `messages` option\r\n// NOTE: This is an experimental API. We are still investigating\r\n// a full solution for string manipulation and internationalization.\r\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\r\n\toptions: {\r\n\t\tmessages: {\r\n\t\t\tnoResults: \"No search results.\",\r\n\t\t\tresults: function( amount ) {\r\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\r\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t__response: function( content ) {\r\n\t\tvar message;\r\n\t\tthis._superApply( arguments );\r\n\t\tif ( this.options.disabled || this.cancelSearch ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( content && content.length ) {\r\n\t\t\tmessage = this.options.messages.results( content.length );\r\n\t\t} else {\r\n\t\t\tmessage = this.options.messages.noResults;\r\n\t\t}\r\n\t\tthis.liveRegion.text( message );\r\n\t}\r\n});\r\n\r\n}( jQuery ));\r\n(function( $, undefined ) {\r\n\r\n$.widget( \"ui.menu\", {\r\n\tversion: \"1.10.4\",\r\n\tdefaultElement: \"
\",\r\n\tdelay: 300,\r\n\toptions: {\r\n\t\ticons: {\r\n\t\t\tsubmenu: \"ui-icon-carat-1-e\"\r\n\t\t},\r\n\t\tmenus: \"ul\",\r\n\t\tposition: {\r\n\t\t\tmy: \"left top\",\r\n\t\t\tat: \"right top\"\r\n\t\t},\r\n\t\trole: \"menu\",\r\n\r\n\t\t// callbacks\r\n\t\tblur: null,\r\n\t\tfocus: null,\r\n\t\tselect: null\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis.activeMenu = this.element;\r\n\t\t// flag used to prevent firing of the click handler\r\n\t\t// as the event bubbles up through nested menus\r\n\t\tthis.mouseHandled = false;\r\n\t\tthis.element\r\n\t\t\t.uniqueId()\r\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-corner-all\" )\r\n\t\t\t.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length )\r\n\t\t\t.attr({\r\n\t\t\t\trole: this.options.role,\r\n\t\t\t\ttabIndex: 0\r\n\t\t\t})\r\n\t\t\t// need to catch all clicks on disabled menu\r\n\t\t\t// not possible through _on\r\n\t\t\t.bind( \"click\" + this.eventNamespace, $.proxy(function( event ) {\r\n\t\t\t\tif ( this.options.disabled ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}, this ));\r\n\r\n\t\tif ( this.options.disabled ) {\r\n\t\t\tthis.element\r\n\t\t\t\t.addClass( \"ui-state-disabled\" )\r\n\t\t\t\t.attr( \"aria-disabled\", \"true\" );\r\n\t\t}\r\n\r\n\t\tthis._on({\r\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\r\n\t\t\t// them (focus should always stay on UL during navigation).\r\n\t\t\t\"mousedown .ui-menu-item > a\": function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t},\r\n\t\t\t\"click .ui-state-disabled > a\": function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t},\r\n\t\t\t\"click .ui-menu-item:has(a)\": function( event ) {\r\n\t\t\t\tvar target = $( event.target ).closest( \".ui-menu-item\" );\r\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\r\n\t\t\t\t\tthis.select( event );\r\n\r\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\r\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\r\n\t\t\t\t\t\tthis.mouseHandled = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Open submenu on click\r\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\r\n\t\t\t\t\t\tthis.expand( event );\r\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) && $( this.document[ 0 ].activeElement ).closest( \".ui-menu\" ).length ) {\r\n\r\n\t\t\t\t\t\t// Redirect focus to the menu\r\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\r\n\r\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\r\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\r\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\r\n\t\t\t\t\t\t\tclearTimeout( this.timer );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\r\n\t\t\t\tvar target = $( event.currentTarget );\r\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\r\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\r\n\t\t\t\ttarget.siblings().children( \".ui-state-active\" ).removeClass( \"ui-state-active\" );\r\n\t\t\t\tthis.focus( event, target );\r\n\t\t\t},\r\n\t\t\tmouseleave: \"collapseAll\",\r\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\r\n\t\t\tfocus: function( event, keepActiveItem ) {\r\n\t\t\t\t// If there's already an active item, keep it active\r\n\t\t\t\t// If not, activate the first item\r\n\t\t\t\tvar item = this.active || this.element.children( \".ui-menu-item\" ).eq( 0 );\r\n\r\n\t\t\t\tif ( !keepActiveItem ) {\r\n\t\t\t\t\tthis.focus( event, item );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tblur: function( event ) {\r\n\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\tif ( !$.contains( this.element[0], this.document[0].activeElement ) ) {\r\n\t\t\t\t\t\tthis.collapseAll( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tkeydown: \"_keydown\"\r\n\t\t});\r\n\r\n\t\tthis.refresh();\r\n\r\n\t\t// Clicks outside of a menu collapse any open menus\r\n\t\tthis._on( this.document, {\r\n\t\t\tclick: function( event ) {\r\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu\" ).length ) {\r\n\t\t\t\t\tthis.collapseAll( event );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Reset the mouseHandled flag\r\n\t\t\t\tthis.mouseHandled = false;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\t// Destroy (sub)menus\r\n\t\tthis.element\r\n\t\t\t.removeAttr( \"aria-activedescendant\" )\r\n\t\t\t.find( \".ui-menu\" ).addBack()\r\n\t\t\t\t.removeClass( \"ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons\" )\r\n\t\t\t\t.removeAttr( \"role\" )\r\n\t\t\t\t.removeAttr( \"tabIndex\" )\r\n\t\t\t\t.removeAttr( \"aria-labelledby\" )\r\n\t\t\t\t.removeAttr( \"aria-expanded\" )\r\n\t\t\t\t.removeAttr( \"aria-hidden\" )\r\n\t\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t\t.removeUniqueId()\r\n\t\t\t\t.show();\r\n\r\n\t\t// Destroy menu items\r\n\t\tthis.element.find( \".ui-menu-item\" )\r\n\t\t\t.removeClass( \"ui-menu-item\" )\r\n\t\t\t.removeAttr( \"role\" )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.children( \"a\" )\r\n\t\t\t\t.removeUniqueId()\r\n\t\t\t\t.removeClass( \"ui-corner-all ui-state-hover\" )\r\n\t\t\t\t.removeAttr( \"tabIndex\" )\r\n\t\t\t\t.removeAttr( \"role\" )\r\n\t\t\t\t.removeAttr( \"aria-haspopup\" )\r\n\t\t\t\t.children().each( function() {\r\n\t\t\t\t\tvar elem = $( this );\r\n\t\t\t\t\tif ( elem.data( \"ui-menu-submenu-carat\" ) ) {\r\n\t\t\t\t\t\telem.remove();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t// Destroy menu dividers\r\n\t\tthis.element.find( \".ui-menu-divider\" ).removeClass( \"ui-menu-divider ui-widget-content\" );\r\n\t},\r\n\r\n\t_keydown: function( event ) {\r\n\t\tvar match, prev, character, skip, regex,\r\n\t\t\tpreventDefault = true;\r\n\r\n\t\tfunction escape( value ) {\r\n\t\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\r\n\t\t}\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\t\tcase $.ui.keyCode.PAGE_UP:\r\n\t\t\tthis.previousPage( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.PAGE_DOWN:\r\n\t\t\tthis.nextPage( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.HOME:\r\n\t\t\tthis._move( \"first\", \"first\", event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.END:\r\n\t\t\tthis._move( \"last\", \"last\", event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.UP:\r\n\t\t\tthis.previous( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.DOWN:\r\n\t\t\tthis.next( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.LEFT:\r\n\t\t\tthis.collapse( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.RIGHT:\r\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\r\n\t\t\t\tthis.expand( event );\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.ENTER:\r\n\t\tcase $.ui.keyCode.SPACE:\r\n\t\t\tthis._activate( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.ESCAPE:\r\n\t\t\tthis.collapse( event );\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tpreventDefault = false;\r\n\t\t\tprev = this.previousFilter || \"\";\r\n\t\t\tcharacter = String.fromCharCode( event.keyCode );\r\n\t\t\tskip = false;\r\n\r\n\t\t\tclearTimeout( this.filterTimer );\r\n\r\n\t\t\tif ( character === prev ) {\r\n\t\t\t\tskip = true;\r\n\t\t\t} else {\r\n\t\t\t\tcharacter = prev + character;\r\n\t\t\t}\r\n\r\n\t\t\tregex = new RegExp( \"^\" + escape( character ), \"i\" );\r\n\t\t\tmatch = this.activeMenu.children( \".ui-menu-item\" ).filter(function() {\r\n\t\t\t\treturn regex.test( $( this ).children( \"a\" ).text() );\r\n\t\t\t});\r\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\r\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\r\n\t\t\t\tmatch;\r\n\r\n\t\t\t// If no matches on the current filter, reset to the last character pressed\r\n\t\t\t// to move down the menu to the first item that starts with that character\r\n\t\t\tif ( !match.length ) {\r\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\r\n\t\t\t\tregex = new RegExp( \"^\" + escape( character ), \"i\" );\r\n\t\t\t\tmatch = this.activeMenu.children( \".ui-menu-item\" ).filter(function() {\r\n\t\t\t\t\treturn regex.test( $( this ).children( \"a\" ).text() );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif ( match.length ) {\r\n\t\t\t\tthis.focus( event, match );\r\n\t\t\t\tif ( match.length > 1 ) {\r\n\t\t\t\t\tthis.previousFilter = character;\r\n\t\t\t\t\tthis.filterTimer = this._delay(function() {\r\n\t\t\t\t\t\tdelete this.previousFilter;\r\n\t\t\t\t\t}, 1000 );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdelete this.previousFilter;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdelete this.previousFilter;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( preventDefault ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t},\r\n\r\n\t_activate: function( event ) {\r\n\t\tif ( !this.active.is( \".ui-state-disabled\" ) ) {\r\n\t\t\tif ( this.active.children( \"a[aria-haspopup='true']\" ).length ) {\r\n\t\t\t\tthis.expand( event );\r\n\t\t\t} else {\r\n\t\t\t\tthis.select( event );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\trefresh: function() {\r\n\t\tvar menus,\r\n\t\t\ticon = this.options.icons.submenu,\r\n\t\t\tsubmenus = this.element.find( this.options.menus );\r\n\r\n\t\tthis.element.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length );\r\n\r\n\t\t// Initialize nested menus\r\n\t\tsubmenus.filter( \":not(.ui-menu)\" )\r\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-corner-all\" )\r\n\t\t\t.hide()\r\n\t\t\t.attr({\r\n\t\t\t\trole: this.options.role,\r\n\t\t\t\t\"aria-hidden\": \"true\",\r\n\t\t\t\t\"aria-expanded\": \"false\"\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tvar menu = $( this ),\r\n\t\t\t\t\titem = menu.prev( \"a\" ),\r\n\t\t\t\t\tsubmenuCarat = $( \"\" )\r\n\t\t\t\t\t\t.addClass( \"ui-menu-icon ui-icon \" + icon )\r\n\t\t\t\t\t\t.data( \"ui-menu-submenu-carat\", true );\r\n\r\n\t\t\t\titem\r\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\r\n\t\t\t\t\t.prepend( submenuCarat );\r\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\r\n\t\t\t});\r\n\r\n\t\tmenus = submenus.add( this.element );\r\n\r\n\t\t// Don't refresh list items that are already adapted\r\n\t\tmenus.children( \":not(.ui-menu-item):has(a)\" )\r\n\t\t\t.addClass( \"ui-menu-item\" )\r\n\t\t\t.attr( \"role\", \"presentation\" )\r\n\t\t\t.children( \"a\" )\r\n\t\t\t\t.uniqueId()\r\n\t\t\t\t.addClass( \"ui-corner-all\" )\r\n\t\t\t\t.attr({\r\n\t\t\t\t\ttabIndex: -1,\r\n\t\t\t\t\trole: this._itemRole()\r\n\t\t\t\t});\r\n\r\n\t\t// Initialize unlinked menu-items containing spaces and/or dashes only as dividers\r\n\t\tmenus.children( \":not(.ui-menu-item)\" ).each(function() {\r\n\t\t\tvar item = $( this );\r\n\t\t\t// hyphen, em dash, en dash\r\n\t\t\tif ( !/[^\\-\\u2014\\u2013\\s]/.test( item.text() ) ) {\r\n\t\t\t\titem.addClass( \"ui-widget-content ui-menu-divider\" );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Add aria-disabled attribute to any disabled menu item\r\n\t\tmenus.children( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\r\n\r\n\t\t// If the active item has been removed, blur the menu\r\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\r\n\t\t\tthis.blur();\r\n\t\t}\r\n\t},\r\n\r\n\t_itemRole: function() {\r\n\t\treturn {\r\n\t\t\tmenu: \"menuitem\",\r\n\t\t\tlistbox: \"option\"\r\n\t\t}[ this.options.role ];\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"icons\" ) {\r\n\t\t\tthis.element.find( \".ui-menu-icon\" )\r\n\t\t\t\t.removeClass( this.options.icons.submenu )\r\n\t\t\t\t.addClass( value.submenu );\r\n\t\t}\r\n\t\tthis._super( key, value );\r\n\t},\r\n\r\n\tfocus: function( event, item ) {\r\n\t\tvar nested, focused;\r\n\t\tthis.blur( event, event && event.type === \"focus\" );\r\n\r\n\t\tthis._scrollIntoView( item );\r\n\r\n\t\tthis.active = item.first();\r\n\t\tfocused = this.active.children( \"a\" ).addClass( \"ui-state-focus\" );\r\n\t\t// Only update aria-activedescendant if there's a role\r\n\t\t// otherwise we assume focus is managed elsewhere\r\n\t\tif ( this.options.role ) {\r\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\r\n\t\t}\r\n\r\n\t\t// Highlight active parent menu item, if any\r\n\t\tthis.active\r\n\t\t\t.parent()\r\n\t\t\t.closest( \".ui-menu-item\" )\r\n\t\t\t.children( \"a:first\" )\r\n\t\t\t.addClass( \"ui-state-active\" );\r\n\r\n\t\tif ( event && event.type === \"keydown\" ) {\r\n\t\t\tthis._close();\r\n\t\t} else {\r\n\t\t\tthis.timer = this._delay(function() {\r\n\t\t\t\tthis._close();\r\n\t\t\t}, this.delay );\r\n\t\t}\r\n\r\n\t\tnested = item.children( \".ui-menu\" );\r\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\r\n\t\t\tthis._startOpening(nested);\r\n\t\t}\r\n\t\tthis.activeMenu = item.parent();\r\n\r\n\t\tthis._trigger( \"focus\", event, { item: item } );\r\n\t},\r\n\r\n\t_scrollIntoView: function( item ) {\r\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[0], \"borderTopWidth\" ) ) || 0;\r\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[0], \"paddingTop\" ) ) || 0;\r\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\r\n\t\t\tscroll = this.activeMenu.scrollTop();\r\n\t\t\telementHeight = this.activeMenu.height();\r\n\t\t\titemHeight = item.height();\r\n\r\n\t\t\tif ( offset < 0 ) {\r\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\r\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\r\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tblur: function( event, fromFocus ) {\r\n\t\tif ( !fromFocus ) {\r\n\t\t\tclearTimeout( this.timer );\r\n\t\t}\r\n\r\n\t\tif ( !this.active ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.active.children( \"a\" ).removeClass( \"ui-state-focus\" );\r\n\t\tthis.active = null;\r\n\r\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\r\n\t},\r\n\r\n\t_startOpening: function( submenu ) {\r\n\t\tclearTimeout( this.timer );\r\n\r\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\r\n\t\t// shift in the submenu position when mousing over the carat icon\r\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.timer = this._delay(function() {\r\n\t\t\tthis._close();\r\n\t\t\tthis._open( submenu );\r\n\t\t}, this.delay );\r\n\t},\r\n\r\n\t_open: function( submenu ) {\r\n\t\tvar position = $.extend({\r\n\t\t\tof: this.active\r\n\t\t}, this.options.position );\r\n\r\n\t\tclearTimeout( this.timer );\r\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\r\n\t\t\t.hide()\r\n\t\t\t.attr( \"aria-hidden\", \"true\" );\r\n\r\n\t\tsubmenu\r\n\t\t\t.show()\r\n\t\t\t.removeAttr( \"aria-hidden\" )\r\n\t\t\t.attr( \"aria-expanded\", \"true\" )\r\n\t\t\t.position( position );\r\n\t},\r\n\r\n\tcollapseAll: function( event, all ) {\r\n\t\tclearTimeout( this.timer );\r\n\t\tthis.timer = this._delay(function() {\r\n\t\t\t// If we were passed an event, look for the submenu that contains the event\r\n\t\t\tvar currentMenu = all ? this.element :\r\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\r\n\r\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway\r\n\t\t\tif ( !currentMenu.length ) {\r\n\t\t\t\tcurrentMenu = this.element;\r\n\t\t\t}\r\n\r\n\t\t\tthis._close( currentMenu );\r\n\r\n\t\t\tthis.blur( event );\r\n\t\t\tthis.activeMenu = currentMenu;\r\n\t\t}, this.delay );\r\n\t},\r\n\r\n\t// With no arguments, closes the currently active menu - if nothing is active\r\n\t// it closes all menus. If passed an argument, it will search for menus BELOW\r\n\t_close: function( startMenu ) {\r\n\t\tif ( !startMenu ) {\r\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\r\n\t\t}\r\n\r\n\t\tstartMenu\r\n\t\t\t.find( \".ui-menu\" )\r\n\t\t\t\t.hide()\r\n\t\t\t\t.attr( \"aria-hidden\", \"true\" )\r\n\t\t\t\t.attr( \"aria-expanded\", \"false\" )\r\n\t\t\t.end()\r\n\t\t\t.find( \"a.ui-state-active\" )\r\n\t\t\t\t.removeClass( \"ui-state-active\" );\r\n\t},\r\n\r\n\tcollapse: function( event ) {\r\n\t\tvar newItem = this.active &&\r\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\r\n\t\tif ( newItem && newItem.length ) {\r\n\t\t\tthis._close();\r\n\t\t\tthis.focus( event, newItem );\r\n\t\t}\r\n\t},\r\n\r\n\texpand: function( event ) {\r\n\t\tvar newItem = this.active &&\r\n\t\t\tthis.active\r\n\t\t\t\t.children( \".ui-menu \" )\r\n\t\t\t\t.children( \".ui-menu-item\" )\r\n\t\t\t\t.first();\r\n\r\n\t\tif ( newItem && newItem.length ) {\r\n\t\t\tthis._open( newItem.parent() );\r\n\r\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\r\n\t\t\tthis._delay(function() {\r\n\t\t\t\tthis.focus( event, newItem );\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tnext: function( event ) {\r\n\t\tthis._move( \"next\", \"first\", event );\r\n\t},\r\n\r\n\tprevious: function( event ) {\r\n\t\tthis._move( \"prev\", \"last\", event );\r\n\t},\r\n\r\n\tisFirstItem: function() {\r\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\r\n\t},\r\n\r\n\tisLastItem: function() {\r\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\r\n\t},\r\n\r\n\t_move: function( direction, filter, event ) {\r\n\t\tvar next;\r\n\t\tif ( this.active ) {\r\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\r\n\t\t\t\tnext = this.active\r\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\r\n\t\t\t\t\t.eq( -1 );\r\n\t\t\t} else {\r\n\t\t\t\tnext = this.active\r\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\r\n\t\t\t\t\t.eq( 0 );\r\n\t\t\t}\r\n\t\t}\r\n\t\tif ( !next || !next.length || !this.active ) {\r\n\t\t\tnext = this.activeMenu.children( \".ui-menu-item\" )[ filter ]();\r\n\t\t}\r\n\r\n\t\tthis.focus( event, next );\r\n\t},\r\n\r\n\tnextPage: function( event ) {\r\n\t\tvar item, base, height;\r\n\r\n\t\tif ( !this.active ) {\r\n\t\t\tthis.next( event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.isLastItem() ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tbase = this.active.offset().top;\r\n\t\t\theight = this.element.height();\r\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each(function() {\r\n\t\t\t\titem = $( this );\r\n\t\t\t\treturn item.offset().top - base - height < 0;\r\n\t\t\t});\r\n\r\n\t\t\tthis.focus( event, item );\r\n\t\t} else {\r\n\t\t\tthis.focus( event, this.activeMenu.children( \".ui-menu-item\" )\r\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\r\n\t\t}\r\n\t},\r\n\r\n\tpreviousPage: function( event ) {\r\n\t\tvar item, base, height;\r\n\t\tif ( !this.active ) {\r\n\t\t\tthis.next( event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.isFirstItem() ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tbase = this.active.offset().top;\r\n\t\t\theight = this.element.height();\r\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each(function() {\r\n\t\t\t\titem = $( this );\r\n\t\t\t\treturn item.offset().top - base + height > 0;\r\n\t\t\t});\r\n\r\n\t\t\tthis.focus( event, item );\r\n\t\t} else {\r\n\t\t\tthis.focus( event, this.activeMenu.children( \".ui-menu-item\" ).first() );\r\n\t\t}\r\n\t},\r\n\r\n\t_hasScroll: function() {\r\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\r\n\t},\r\n\r\n\tselect: function( event ) {\r\n\t\t// TODO: It should never be possible to not have an active item at this\r\n\t\t// point, but the tests don't trigger mouseenter before click.\r\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\r\n\t\tvar ui = { item: this.active };\r\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\r\n\t\t\tthis.collapseAll( event, true );\r\n\t\t}\r\n\t\tthis._trigger( \"select\", event, ui );\r\n\t}\r\n});\r\n\r\n}( jQuery ));\r\n","/*!\r\n * Bootstrap v3.3.7 (http://getbootstrap.com)\r\n * Copyright 2011-2016 Twitter, Inc.\r\n * Licensed under the MIT license\r\n */\r\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(a){\"use strict\";var b=a.fn.jquery.split(\" \")[0].split(\".\");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(a){\"use strict\";function b(){var a=document.createElement(\"bootstrap\"),b={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(\"bsTransitionEnd\",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var c=a(this),e=c.data(\"bs.alert\");e||c.data(\"bs.alert\",e=new d(this)),\"string\"==typeof b&&e[b].call(c)})}var c='[data-dismiss=\"alert\"]',d=function(b){a(b).on(\"click\",c,this.close)};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger(\"closed.bs.alert\").remove()}var e=a(this),f=e.attr(\"data-target\");f||(f=e.attr(\"href\"),f=f&&f.replace(/.*(?=#[^\\s]*$)/,\"\"));var g=a(\"#\"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(\".alert\")),g.trigger(b=a.Event(\"close.bs.alert\")),b.isDefaultPrevented()||(g.removeClass(\"in\"),a.support.transition&&g.hasClass(\"fade\")?g.one(\"bsTransitionEnd\",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on(\"click.bs.alert.data-api\",c,d.prototype.close)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.button\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.button\",e=new c(this,f)),\"toggle\"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION=\"3.3.7\",c.DEFAULTS={loadingText:\"loading...\"},c.prototype.setState=function(b){var c=\"disabled\",d=this.$element,e=d.is(\"input\")?\"val\":\"html\",f=d.data();b+=\"Text\",null==f.resetText&&d.data(\"resetText\",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),\"loadingText\"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle=\"buttons\"]');if(b.length){var c=this.$element.find(\"input\");\"radio\"==c.prop(\"type\")?(c.prop(\"checked\")&&(a=!1),b.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==c.prop(\"type\")&&(c.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(a=!1),this.$element.toggleClass(\"active\")),c.prop(\"checked\",this.$element.hasClass(\"active\")),a&&c.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(c){var d=a(c.target).closest(\".btn\");b.call(d,\"toggle\"),a(c.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(c.preventDefault(),d.is(\"input,button\")?d.trigger(\"focus\"):d.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(b){a(b.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.carousel\"),f=a.extend({},c.DEFAULTS,d.data(),\"object\"==typeof b&&b),g=\"string\"==typeof b?b:f.slide;e||d.data(\"bs.carousel\",e=new c(this,f)),\"number\"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",a.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",a.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",a.proxy(this.cycle,this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(\".item\"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d=\"prev\"==a&&0===c||\"next\"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e=\"prev\"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?\"next\":\"prev\",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(\".next, .prev\").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(b,d){var e=this.$element.find(\".item.active\"),f=d||this.getItemForDirection(b,e),g=this.interval,h=\"next\"==b?\"left\":\"right\",i=this;if(f.hasClass(\"active\"))return this.sliding=!1;var j=f[0],k=a.Event(\"slide.bs.carousel\",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass(\"active\")}var m=a.Event(\"slid.bs.carousel\",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass(\"slide\")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one(\"bsTransitionEnd\",function(){f.removeClass([b,h].join(\" \")).addClass(\"active\"),e.removeClass([\"active\",h].join(\" \")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass(\"active\"),f.addClass(\"active\"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr(\"data-target\")||(d=e.attr(\"href\"))&&d.replace(/.*(?=#[^\\s]+$)/,\"\"));if(f.hasClass(\"carousel\")){var g=a.extend({},f.data(),e.data()),h=e.attr(\"data-slide-to\");h&&(g.interval=!1),b.call(f,g),h&&f.data(\"bs.carousel\").to(h),c.preventDefault()}};a(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),a(window).on(\"load\",function(){a('[data-ride=\"carousel\"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){\"use strict\";function b(b){var c,d=b.attr(\"data-target\")||(c=b.attr(\"href\"))&&c.replace(/.*(?=#[^\\s]+$)/,\"\");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data(\"bs.collapse\"),f=a.extend({},d.DEFAULTS,c.data(),\"object\"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data(\"bs.collapse\",e=new d(this,f)),\"string\"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+b.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+b.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass(\"width\");return a?\"width\":\"height\"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var b,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(b=e.data(\"bs.collapse\"),b&&b.transitioning))){var f=a.Event(\"show.bs.collapse\");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,\"hide\"),b||e.data(\"bs.collapse\",null));var g=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var h=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return h.call(this);var i=a.camelCase([\"scroll\",g].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var b=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};return a.support.transition?void this.$element[c](0).one(\"bsTransitionEnd\",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass(\"in\");a.attr(\"aria-expanded\",c),b.toggleClass(\"collapsed\",!c).attr(\"aria-expanded\",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(d){var e=a(this);e.attr(\"data-target\")||d.preventDefault();var f=b(e),g=f.data(\"bs.collapse\"),h=g?\"toggle\":e.data();c.call(f,h)})}(jQuery),+function(a){\"use strict\";function b(b){var c=b.attr(\"data-target\");c||(c=b.attr(\"href\"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\\s]*$)/,\"\"));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass(\"open\")&&(c&&\"click\"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event(\"hide.bs.dropdown\",f)),c.isDefaultPrevented()||(d.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data(\"bs.dropdown\");d||c.data(\"bs.dropdown\",d=new g(this)),\"string\"==typeof b&&d[b].call(c)})}var e=\".dropdown-backdrop\",f='[data-toggle=\"dropdown\"]',g=function(b){a(b).on(\"click.bs.dropdown\",this.toggle)};g.VERSION=\"3.3.7\",g.prototype.toggle=function(d){var e=a(this);if(!e.is(\".disabled, :disabled\")){var f=b(e),g=f.hasClass(\"open\");if(c(),!g){\"ontouchstart\"in document.documentElement&&!f.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",c);var h={relatedTarget:this};if(f.trigger(d=a.Event(\"show.bs.dropdown\",h)),d.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),f.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(\".disabled, :disabled\")){var e=b(d),g=e.hasClass(\"open\");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger(\"focus\"),d.trigger(\"click\");var h=\" li:not(.disabled):visible a\",i=e.find(\".dropdown-menu\"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:\"\"})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var e=this.options.trigger.split(\" \"),f=e.length;f--;){var g=e[f];if(\"click\"==g)this.$element.on(\"click.\"+this.type,this.options.selector,a.proxy(this.toggle,this));else if(\"manual\"!=g){var h=\"hover\"==g?\"mouseenter\":\"focusin\",i=\"hover\"==g?\"mouseleave\":\"focusout\";this.$element.on(h+\".\"+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+\".\"+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&\"number\"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusin\"==b.type?\"focus\":\"hover\"]=!0),c.tip().hasClass(\"in\")||\"in\"==c.hoverState?void(c.hoverState=\"in\"):(clearTimeout(c.timeout),c.hoverState=\"in\",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){\"in\"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusout\"==b.type?\"focus\":\"hover\"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState=\"out\",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){\"out\"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr(\"id\",g),this.$element.attr(\"aria-describedby\",g),this.options.animation&&f.addClass(\"fade\");var h=\"function\"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\\s?auto?\\s?/i,j=i.test(h);j&&(h=h.replace(i,\"\")||\"top\"),f.detach().css({top:0,left:0,display:\"block\"}).addClass(h).data(\"bs.\"+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h=\"bottom\"==h&&k.bottom+m>o.bottom?\"top\":\"top\"==h&&k.top-mo.width?\"left\":\"left\"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr(\"data-original-title\")||(\"function\"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data(\"bs.\"+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass(\"in\")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off(\".\"+a.type).removeData(\"bs.\"+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.popover\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.popover\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.init(\"popover\",a,b)};if(!a.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");c.VERSION=\"3.3.7\",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(\".popover-title\")[this.options.html?\"html\":\"text\"](b),a.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof c?\"html\":\"append\":\"text\"](c),a.removeClass(\"fade top bottom left right in\"),a.find(\".popover-title\").html()||a.find(\".popover-title\").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr(\"data-content\")||(\"function\"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){\"use strict\";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data(\"bs.scrollspy\"),f=\"object\"==typeof c&&c;e||d.data(\"bs.scrollspy\",e=new b(this,f)),\"string\"==typeof c&&e[c]()})}b.VERSION=\"3.3.7\",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c=\"offset\",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c=\"position\",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data(\"target\")||b.attr(\"href\"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(\":visible\")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),h?(b[0].offsetWidth,b.addClass(\"in\")):b.removeClass(\"fade\"),b.parent(\".dropdown-menu\").length&&b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),e&&e()}var g=d.find(\"> .active\"),h=e&&a.support.transition&&(g.length&&g.hasClass(\"fade\")||!!d.find(\"> .fade\").length);g.length&&h?g.one(\"bsTransitionEnd\",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass(\"in\")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),\"show\")};a(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',e).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',e)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.affix\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.affix\",e=new c(this,f)),\"string\"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on(\"scroll.bs.affix.data-api\",a.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION=\"3.3.7\",c.RESET=\"affix affix-top affix-bottom\",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&\"top\"==this.affixed)return e=a-d&&\"bottom\"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());\"object\"!=typeof d&&(f=e=d),\"function\"==typeof e&&(e=d.top(this.$element)),\"function\"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css(\"top\",\"\");var i=\"affix\"+(h?\"-\"+h:\"\"),j=a.Event(i+\".bs.affix\");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin=\"bottom\"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on(\"load\",function(){a('[data-spy=\"affix\"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);",null,"var CheckOutPath = \"CheckOut\";\r\nvar CheckOutAddressPath = \"CheckOutAddress\";\r\nvar CheckOutValidator = \"CheckoutValidation\";\r\nvar CheckoutPayment = \"CheckoutPayment\";\r\nvar isSingleLineCreditCard = false;\r\n\r\nfunction ShowInstallmentByBankCode(BankCode, cardType, BankLogoPath) {\r\n\r\n var activeCls = $(\"#PaymentGroups .PaymentGroupItem.active:first input:first\").attr(\"data-payment\");\r\n\r\n $(\"#PosGroups .PosGroupItem\").hide();\r\n\r\n switch (cardType) {\r\n\r\n case \"Credit\":\r\n if (activeCls != \"KrediKarti\") {\r\n\r\n AutoFillBankLogo = BankLogoPath;\r\n activeCls = \"KrediKarti\";\r\n\r\n $(\".PaymentGroupSelectNew li\").removeClass(\"active\");\r\n $(\".PaymentGroupSelectNew li a.KrediKarti\").parent().addClass(\"active\");\r\n $(\".PaymentGroupSelectNew li a input\").removeAttr(\"checked\");\r\n $(\".PaymentGroupSelectNew li a.KrediKarti input\").attr(\"checked\", \"checked\");\r\n $(\".PaymentGroupSelectNew li a.KrediKarti input\").trigger(\"change\");\r\n\r\n if (BankLogoPath != undefined && BankLogoPath != \"\") {\r\n\r\n $(\"div#CreditCardLogo > img\").show();\r\n $(\"div#CreditCardLogo > img\").attr(\"src\", \"/ContentImages/Banks/\" + BankLogoPath);\r\n }\r\n\r\n }\r\n break;\r\n\r\n case \"Debit\":\r\n if (activeCls != \"DebitCard\") {\r\n\r\n\r\n AutoFillBankLogo = BankLogoPath;\r\n\r\n activeCls = \"DebitCard\";\r\n\r\n $(\".PaymentGroupSelectNew li\").removeClass(\"active\");\r\n $(\".PaymentGroupSelectNew li a.DebitCard\").parent().addClass(\"active\");\r\n\r\n $(\".PaymentGroupSelectNew li a input\").removeAttr(\"checked\");\r\n $(\".PaymentGroupSelectNew li a.DebitCard input\").attr(\"checked\", \"checked\");\r\n\r\n //Debite Geçiş\r\n $(\".PaymentGroupSelectNew li a.DebitCard input\").trigger(\"change\");\r\n\r\n if (BankLogoPath != undefined && BankLogoPath != \"\") {\r\n\r\n $(\"div#CreditCardLogo > img\").show();\r\n $(\"div#CreditCardLogo > img\").attr(\"src\", \"/ContentImages/Banks/\" + BankLogoPath);\r\n\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n break;\r\n\r\n }\r\n\r\n $(\".Installments ul\").hide();\r\n\r\n if (activeCls == \"KrediKarti\") {\r\n $(\".Installments ul.InstallmentHeader\").show();\r\n } else {\r\n $(\".AllInstallments\").hide();\r\n $(\"#PaymentBanners\").hide();\r\n }\r\n\r\n //Banka kredi kartı title\r\n $(\".Installments .BarInner span\").hide();\r\n $(\".Installments .BarInner span.\" + activeCls).show();\r\n\r\n var cardown = $(\"#CardOwner:first\").val();\r\n\r\n //Amex ve ShopAndMiles Taksit gösterme, ama garantiden geç\r\n var isAmex = false;\r\n var isShopAndMiles = false;\r\n if (LastCardName.toUpperCase().indexOf(\"AMEX\") > -1) isAmex = true;\r\n if (LastCardName.toUpperCase().indexOf(\"MASTER SM\") > -1 || LastCardName.toUpperCase().indexOf(\"VISA SM\") > -1) isShopAndMiles = true;\r\n if (isAmex || isShopAndMiles) BankCode = \"62\";\r\n\r\n //Banka koduna ait taksit seçeneği varsa\r\n if ($(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"']\").length > 0 && cardown.toUpperCase() != \"ENVER GÖKMEN1\") {\r\n\r\n $(\"#PosGroups .PosGroupItem[data-rel='\" + BankCode + \"']\").show();\r\n $(\"#PosGroups .PosGroupItem[data-rel='\" + BankCode + \"']\").addClass(\"active\");\r\n\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"']\").show();\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"'] li\").show();\r\n\r\n //Pos başlık logo ile birlikte göster/gizle hide olduğunda sadece taksitler görünür.\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"'] .PosHeader\").show();\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first input\").attr(\"checked\", \"checked\");\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first input\").trigger(\"change\");\r\n $(\".Installments ul.InstallmentHeader\").show();\r\n\r\n if (isAmex || isShopAndMiles) {\r\n\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"'] li\").hide();\r\n $(\".Installments ul[data-rel='\" + BankCode + \"'][data-cardtype='\" + activeCls + \"'] li.FirstInstallment\").show();\r\n\r\n }\r\n\r\n }\r\n else {\r\n\r\n //Banka koduna ait taksit seçeneği YOKSA tek çekim göster \r\n if (cardown != \"ENVER GÖKMEN1\") {\r\n\r\n // console.log(\"activeCls:\", activeCls, \" BankCode:\", BankCode);\r\n\r\n $(\"#PosGroups .PosGroupItem[data-webposid='other']\").show();\r\n $(\"#PosGroups .PosGroupItem[data-webposid='other']\").addClass(\"active\");\r\n\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] li\").hide();\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] .PosHeader\").hide();\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"']:first\").show();\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first\").show();\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first input\").attr(\"checked\", \"checked\");\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first input\").trigger(\"change\");\r\n $(\".Installments ul.InstallmentHeader\").hide();\r\n\r\n }\r\n else {\r\n //--------------------------------------------------------------------------------------------------------------------- \r\n //Banka koduna ait taksit seçeneği YOKSA tüm taksitleri göster \r\n $(\".Installments ul[data-cardtype='\" + activeCls + \"']\").show();\r\n $(\".Installments ul[data-cardtype='\" + activeCls + \"'] li\").show();\r\n $(\".Installments ul[data-cardtype='\" + activeCls + \"'] .PosHeader\").show();\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first input\").attr(\"checked\", \"checked\");\r\n $(\".Installments ul.DefaultPos[data-cardtype='\" + activeCls + \"'] li.FirstInstallment:first input\").trigger(\"change\");\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n}\r\n\r\nvar firstBin = \"\";\r\nvar lastBin = \"\";\r\nvar AutoFillCard1 = \"\";\r\nvar AutoFillBankCode = \"-1\";\r\nvar AutoFillCard2 = \"\";\r\nvar AutoFillName = \"\";\r\nvar AutoFillBankLogo = \"\";\r\nvar LastCardName = \"\";\r\n\r\nfunction CheckBinNumber(t, t_1, t_2) {\r\n\r\n var t_1 = $(\"#CardNumbers > input#CardNumber1\").val().replace(/\\D/g, '');\r\n var t_2 = $(\"#CardNumbers > input#CardNumber2\").val().replace(/\\D/g, '');\r\n var t_3 = $(\"#CardNumbers > input#CardNumber3\").val().replace(/\\D/g, '');\r\n var t_4 = $(\"#CardNumbers > input#CardNumber4\").val().replace(/\\D/g, '');\r\n\r\n var t = (t_1 + t_2);\r\n\r\n if (t.length >= 8 && (isSingleLineCreditCard || (t_1.length == 4 && t_2.length >= 4))) {\r\n\r\n var tval6 = t.substring(0, 8);\r\n lastBin = tval6;\r\n\r\n if (lastBin != firstBin) {\r\n\r\n $.ajax({\r\n url: \"/\" + CheckoutPayment + \"/CardDetails\",\r\n dataType: 'json',\r\n async: true,\r\n data: \"BinNo=\" + tval6,\r\n success: function (jsonReturn) {\r\n\r\n if (jsonReturn.length !== 0) {\r\n\r\n $.each(jsonReturn, function (index, element) {\r\n var ax = (element.ID + \"-\");\r\n\r\n $(\"div#CreditCardLogo > img\").show();\r\n $(\"div#CreditCardLogo > img\").attr(\"src\", \"/ContentImages/Banks/\" + element.BankLogoPath);\r\n\r\n bnkCode = element.BankCode;\r\n cardType = element.CardType;\r\n AutoFillBankCode = bnkCode;\r\n var LogoPath = element.BankLogoPath;\r\n\r\n if (element.CardLogoPath != undefined && element.CardLogoPath.length > 0) {\r\n LogoPath = element.BankLogoPath;\r\n }\r\n\r\n LastCardName = element.CardName;\r\n ShowInstallmentByBankCode(bnkCode, cardType, LogoPath);\r\n\r\n\r\n });\r\n\r\n }\r\n else {\r\n\r\n bnkCode = \"-1\";\r\n AutoFillBankCode = \"-1\";\r\n ShowInstallmentByBankCode(bnkCode, -1, \"\");\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n });\r\n\r\n firstBin = lastBin;\r\n\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nfunction formatCC(value) {\r\n var v = value.replace(/\\s+/g, '').replace(/[^0-9]/gi, '')\r\n var matches = v.match(/\\d{4,16}/g);\r\n var match = matches && matches[0] || ''\r\n var parts = []\r\n for (i = 0, len = match.length; i < len; i += 4) {\r\n parts.push(match.substring(i, i + 4))\r\n }\r\n if (parts.length) {\r\n return parts.join(' ')\r\n } else {\r\n return value\r\n }\r\n}\r\n\r\nfunction validateCardNumber(number) {\r\n var regex = new RegExp(\"^[0-9]{16}$\");\r\n if (!regex.test(number))\r\n return false;\r\n\r\n return luhnCheck(number);\r\n}\r\n\r\nfunction luhnCheck(val) {\r\n var sum = 0;\r\n for (var i = 0; i < val.length; i++) {\r\n var intVal = parseInt(val.substr(i, 1));\r\n if (i % 2 == 0) {\r\n intVal *= 2;\r\n if (intVal > 9) {\r\n intVal = 1 + (intVal % 10);\r\n }\r\n }\r\n sum += intVal;\r\n }\r\n return (sum % 10) == 0;\r\n}\r\n\r\nfunction IsNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n}\r\n\r\nfunction ReloadOnTimeOut(dt) {\r\n\r\n if (dt != undefined) {\r\n\r\n //timeout no state found reload\r\n if (dt.StatusText == \"CheckOutStateTimeOut\" || dt.StatusText == \"Reload\") {\r\n\r\n $(\".AjaxLoader\").show();\r\n document.location.reload(true);\r\n }\r\n }\r\n}\r\n\r\nfunction PrepareAddressAndPayment() {\r\n\r\n if ($(\"#CurStep\").length > 0) {\r\n\r\n\r\n var step = $(\"#CurStep\").val();\r\n\r\n var url = \"\";\r\n\r\n if (step == \"Sepet\") {\r\n url = \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckOutAddress/PrepareUserAdresses\";\r\n }\r\n\r\n if (step == \"Adres\") {\r\n url = \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckOutPayment/PreparePayment\";\r\n }\r\n\r\n if (url.length > 0) {\r\n $.ajax({\r\n type: 'post',\r\n url: url,\r\n success: function (dt) {\r\n\r\n }\r\n });\r\n }\r\n\r\n }\r\n}\r\n\r\n\r\nfunction SetPaymentType(webPosInstallmentID, BankID) {\r\n\r\n if (BankID == undefined) { BankID = 0; }\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckOutPayment/SetPaymentType?webPosInstallmentID=\" + webPosInstallmentID + \"&bankID=\" + BankID,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status) {\r\n\r\n RefreshOrderSummary(false, false);\r\n\r\n } else {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n }\r\n }\r\n\r\n });\r\n\r\n}\r\n\r\nfunction ReloadPage() {\r\n\r\n $(\".AjaxLoader\").show();\r\n $(\".container\").css(\"opacity\", \"0.5\");\r\n document.location.reload(true);\r\n\r\n}\r\n\r\nfunction SetErrorResults(target, errors, clear, slideDown) {\r\n\r\n\r\n $('html,body').animate({ scrollTop: 0 }, 'slow', function () { });\r\n\r\n if (clear) {\r\n $(target).html(\"\");\r\n }\r\n\r\n if (errors != undefined && errors.length > 0) {\r\n\r\n for (var i = 0; i < errors.length; i++) {\r\n\r\n $(target).append(errors[i] + \"
\");\r\n }\r\n\r\n if (slideDown) {\r\n\r\n $(target).show();\r\n }\r\n else {\r\n $(target).show();\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction GetAddressForm(url) {\r\n\r\n if ($(\"#AddressArea\").length > 0) {\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n cache: false,\r\n url: url,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n $(\"#AddressArea\").html(dt);\r\n HandleAddressInputs();\r\n\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\nfunction RefreshOrderSummary(animateTop, showCouponLine) {\r\n\r\n\r\n $.ajax({\r\n type: 'get',\r\n cache: false,\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/\" + CheckOutPath + \"/summary\",\r\n success: function (dt) {\r\n $(\"#OrderSummary\").html(dt);\r\n\r\n if (showCouponLine) {\r\n\r\n $(\".CouponLine\").hide();\r\n $(\".CouponLine\").show(\"slow\");\r\n\r\n if ($(\"#CouponModal\").length > 0) {\r\n $(\"#CouponModal\").modal(\"hide\");\r\n }\r\n }\r\n\r\n if (animateTop) {\r\n $('html,body').animate({ scrollTop: 2000 }, 'slow', function () { });\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n}\r\n\r\nfunction RefreshCargoList() {\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckOutAddress/GetCargoList\",\r\n success: function (dt) {\r\n $(\"#CargoList\").html(dt);\r\n }\r\n\r\n });\r\n}\r\n\r\nfunction HandleAddressInputs() {\r\n\r\n if ($(\".OrderAdressForm\").length > 0) {\r\n\r\n if ($(\".OrderAdressForm #Phone2\").length > 0) {\r\n\r\n console.log($(\".OrderAdressForm #Phone2\").text().length);\r\n\r\n if ($(\".OrderAdressForm #Phone2\").val().length <= 0) {\r\n $(\".OrderAdressForm #Phone2\").val(\"0\");\r\n }\r\n\r\n $(\".OrderAdressForm #Phone2\").mask(\"0999 999 99 99\");\r\n }\r\n }\r\n}\r\n\r\nfunction UseCoupon(couponCode) {\r\n\r\n $.ajax({\r\n type: 'get',\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: 'json',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckOutCart/AddCoupon?couponCode=\" + couponCode,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n //Sipariş özetini Yenile\r\n RefreshOrderSummary(true, true);\r\n\r\n $(\"#OrderCoupons tr\").removeClass(\"added\");\r\n $(\"#OrderCoupons tr button[data-value=\" + couponCode + \"]\").closest(\"tr\").addClass(\"added\");\r\n\r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n }\r\n }\r\n\r\n });\r\n\r\n}\r\n\r\nfunction SetCreditCartAndStep(adim, href) {\r\n\r\n if ($(\"#CardForm\").length > 0) {\r\n\r\n $form = $(\"#CardForm\");\r\n\r\n $.ajax({\r\n type: 'post',\r\n async: true,\r\n cache: false,\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckoutPayment/SetCreditCard\",\r\n data: $form.serialize(),\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n\r\n SetStep(adim, href);\r\n //Sipariş özetini Yenile\r\n //RefreshOrderSummary(true, true); \r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n }\r\n}\r\n\r\nfunction SetStepDataLayer() {\r\n\r\n $.ajax({\r\n type: 'POST',\r\n cache: false,\r\n url: \"/tr/p/CheckoutValidation/SetStep?step=Adres\",\r\n data: \"\",\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n\r\n if (dt.StatusText == \"AdresStep\") {\r\n\r\n if (dt.Result != undefined) {\r\n\r\n var obj = JSON.parse(dt.Result);\r\n\r\n ga('ec:setAction', 'checkout_option', {\r\n 'step': 3,\r\n 'option': 'Aras Kargo'\r\n });\r\n\r\n ga('send', 'event', 'Checkout', 'Option', {\r\n hitCallback: function () {\r\n // Advance to next page.\r\n }\r\n });\r\n }\r\n $(\"#LoginRegisterModal\").modal(\"show\");\r\n }\r\n\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\n\r\nfunction SetStep(adim, href) {\r\n if (typeof adim != 'undefined') {\r\n\r\n\r\n var OrdNote = \"\";\r\n if ($(\"#OrderNoteText\").length > 0) {\r\n OrdNote += \"OrderNote=\" + $(\"#OrderNoteText\").val();\r\n }\r\n\r\n $.ajax({\r\n type: 'POST',\r\n cache: false,\r\n url: \"/\" + SmallLangCode + \"/p/\" + CheckOutValidator + \"/SetStep?step=\" + adim,\r\n data: OrdNote,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == false) {\r\n\r\n //ask for login or memberless\r\n if (dt.StatusText == \"AskForLogin\") {\r\n\r\n $(\"#LoginRegisterModal\").modal(\"show\");\r\n }\r\n\r\n //Edit Address Or Create Address\r\n if ($(\"#AddressArea\").length > 0 && (dt.StatusText == \"MissingAddress\" || dt.StatusText == \"InvalidAddress\")) {\r\n\r\n var url = \"/\" + $(\"#SmallLangCode\").val() + \"/p/\" + CheckOutAddressPath + \"/EditOrCreate?id=0\";\r\n //console.clear();\r\n //console.log(id);\r\n\r\n GetAddressForm(url);\r\n\r\n } else if (dt.Status == false) {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n }\r\n\r\n }\r\n\r\n\r\n if (dt.Status == true) {\r\n\r\n $(\"#Steps button, #Steps .StepName, #nextbtn, .Bottom #nextbtn, #backbutton, .Bottom #backbutton\").attr(\"disabled\", \"disabled\");\r\n //$(\"#Steps button, #Steps .StepName, #nextbtn, .Bottom #nextbtn, #backbtn, .Bottom #backbtn\").attr(\"disabled\", \"disabled\");\r\n\r\n //hata yoksa ve progress ise bekleyinizi göster\r\n if (adim == \"progress\") {\r\n\r\n $(\"#nextbtn, .Bottom #nextbtn, #backbutton, .Bottom #backbutton\").text($(\"#PleaseWait\").val());\r\n // $(\"#nextbtn, .Bottom #nextbtn, #backbtn, .Bottom #backbtn\").text($(\"#PleaseWait\").val());\r\n\r\n $(\".AjaxLoaderDiv\").css(\"left\", \"44%\");\r\n\r\n }\r\n\r\n //goto next step\r\n document.location.href = \"/\" + SmallLangCode + \"/p/\" + CheckOutPath + \"/\" + adim;\r\n\r\n }\r\n }\r\n\r\n });\r\n }\r\n}\r\n\r\nfunction ToggleAgreements() {\r\n $(\".AgreementHeader\").on(\"click\", function () {\r\n $(this).next(\".toggle\").slideToggle();\r\n $(this).find(\"i\").toggleClass(\"minus-icon\");\r\n\r\n });\r\n}\r\n\r\n\r\nfunction goHome() {\r\n $(\"#backbtn\").on(\"click\", function () {\r\n window.location = \"/\";\r\n }\r\n )\r\n}\r\n\r\n$(document).ready(function () {\r\n\r\n PrepareAddressAndPayment();\r\n ToggleAgreements();\r\n\r\n goHome();\r\n\r\n if ($(\".SingleLineCart\").length > 0) {\r\n isSingleLineCreditCard = true;\r\n }\r\n\r\n\r\n\r\n //SetStep Validate and Navigate\r\n $(\"body\").on(\"click\", \"#Steps button, #Steps .StepName, #nextbtn, #backbtn\", function () {\r\n\r\n var adim = $(this).attr(\"data-next\");\r\n var href = $(this).attr(\"data-href\");\r\n\r\n if (href != undefined && href != \"\") {\r\n document.location.href = href;\r\n return;\r\n }\r\n\r\n if ($(\".PaymentDetail.KrediKarti\").hasClass(\"active\") && adim == \"progress\") {\r\n SetCreditCartAndStep(adim, href);\r\n\r\n } else {\r\n SetStep(adim, href);\r\n }\r\n\r\n\r\n\r\n });\r\n\r\n\r\n $(\"#LoginRegisterModal\").on(\"click\", \".ContinueWithoutMember\", function (e) {\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/\" + CheckOutValidator + \"/SetMemberless?memberless=true\",\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n\r\n //SetStep(adim, href);\r\n //Sipariş özetini Yenile\r\n //RefreshOrderSummary(true, true); \r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n return false;\r\n e.preventDefault();\r\n\r\n });\r\n\r\n\r\n //Cart Change Delete \r\n $('input.sepetAdet').keyup(function () {\r\n\r\n var updateID = $(this).attr(\"data-id\");\r\n var yeniAdet = $(this).val();\r\n var adetKutusu = $(this);\r\n var LangID = $(\"#LangID\").val();\r\n\r\n if (yeniAdet <= 1) {\r\n $(adetKutusu).val(1);\r\n }\r\n else if (yeniAdet >= 9) {\r\n $(adetKutusu).val(9);\r\n }\r\n\r\n //update'den Sonra\r\n var sepetToplami = 0;\r\n\r\n\r\n var ToplamAdet = $(\"#ustSepetAdet\").html();\r\n\r\n var guncellenecekContainerObje = $(this).parent().parent();\r\n\r\n $(guncellenecekContainerObje).find(\".ustSepetAjaxLoader\").show();\r\n $(guncellenecekContainerObje).find(\".ustSepetDelete\").hide();\r\n\r\n $(guncellenecekContainerObje).css(\"opacity\", \"0.5\");\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: '/Cart/UpdateCartAmount',\r\n data: 'id=' + updateID + \"&adet=\" + yeniAdet + \"&langID=\" + LangID,\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: 'json',\r\n cahce: false,\r\n success: function (dt) {\r\n\r\n if (dt.Sonuc == true) {\r\n\r\n document.location.reload(true);\r\n\r\n }\r\n else {\r\n\r\n alert(dt.IslemSonucAciklama);\r\n }\r\n\r\n $(guncellenecekContainerObje).find(\".ustSepetAjaxLoader\").hide();\r\n $(guncellenecekContainerObje).find(\".ustSepetDelete\").show();\r\n $(guncellenecekContainerObje).css(\"opacity\", \"1\");\r\n\r\n\r\n }\r\n });\r\n\r\n\r\n //ISNUMERIC ADET SONU\r\n\r\n });\r\n\r\n //Amount Option Change\r\n $('.BasketDetails .GenMinus, .BasketDetails .GenPlus').click(function () {\r\n\r\n $SepetAdet = $(this).closest(\".BasketDetails\").find(\"input.sepetAdet\");\r\n if ($(this).hasClass(\"GenPlus\") == true) {\r\n if ($SepetAdet.val() >= 9) {\r\n\r\n $SepetAdet.val(parseInt(9));\r\n }\r\n else {\r\n\r\n $SepetAdet.val(parseInt($SepetAdet.val()) + 1);\r\n }\r\n }\r\n else {\r\n\r\n $SepetAdet.val(parseInt($SepetAdet.val()) - 1);\r\n }\r\n\r\n if ($SepetAdet.val() != \"0\") {\r\n\r\n $SepetAdet.trigger('keyup');\r\n }\r\n else {\r\n\r\n $SepetAdet.val(1)\r\n }\r\n\r\n });\r\n\r\n $(\"#OrderBasket .RemoveIcon\").click(function () {\r\n\r\n var Silid = $(this).attr(\"data-id\").replace(\"sepetsil\", \"\");\r\n var LangID = $(\"#LangID\").val();\r\n\r\n $(this).closest(\"tr\").css(\"opacity\", \"0.5\");\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + '/p/Cart/RemoveFromCart',\r\n data: 'id=' + Silid + \"&langID=\" + LangID,\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: 'json',\r\n success: function (dt) {\r\n\r\n //ReloadOnTimeOut(dt);\r\n\r\n if (dt.Sonuc == false) {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n\r\n } else {\r\n ReloadPage();\r\n }\r\n }\r\n });\r\n\r\n\r\n });\r\n\r\n //COUPON\r\n $(\"#CouponForm\").submit(function (e) {\r\n\r\n couponCode = $(\"#CouponCodeInput\", $(this)).val();\r\n\r\n UseCoupon(couponCode);\r\n\r\n e.preventDefault();\r\n return false;\r\n });\r\n\r\n $(\"body .UsetCouponTd\").click(function (e) {\r\n\r\n couponCode = $(this).attr(\"data-value\");\r\n\r\n UseCoupon(couponCode);\r\n\r\n e.preventDefault();\r\n return false;\r\n });\r\n\r\n $(\"body\").on(\"click\", \".RemoveCoupon\", function (e) {\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + '/p/CheckOutCart/RemoveCoupon',\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: 'json',\r\n success: function (dt) {\r\n\r\n if (dt.Sonuc == false) {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n\r\n } else {\r\n\r\n RefreshOrderSummary(false, false);\r\n $(\"#OrderCoupons tr\").removeClass(\"added\");\r\n }\r\n }\r\n });\r\n\r\n e.preventDefault();\r\n return false;\r\n\r\n });\r\n\r\n //END CCOUPON\r\n\r\n //Adress Create And Edit\r\n $(\"body\").on(\"click\", \".AdresPopup\", function () {\r\n\r\n var url = $(this).attr(\"data-href\");\r\n\r\n GetAddressForm(url);\r\n\r\n });\r\n\r\n\r\n\r\n $(\"#OrderAdress\").on(\"click\", \".RemoveIcon\", function () {\r\n\r\n $(this).closest(\"tr\").css(\"opacity\", \"0.5\");\r\n var id = $(this).attr(\"data-id\");\r\n\r\n var url = \"/\" + $(\"#SmallLangCode\").val() + \"/p/\" + CheckOutAddressPath + \"/Delete?adresid=\" + id;\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: url,\r\n dataType: 'json',\r\n success: function (data) {\r\n\r\n ReloadOnTimeOut(data);\r\n\r\n if (data.Status == true) {\r\n\r\n $(\"#OpStatusBar div.alert-success ul li\").html(data.ResultDescription[0]);\r\n $(\"#OpStatusBar > div.alert-sucess \").show();\r\n\r\n ReloadPage();\r\n\r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#OpStatusBar div.alert-danger ul li\"), data.ResultDescription, true, false);\r\n $(\"#OpStatusBar > div.alert-danger \").show();\r\n }\r\n\r\n },\r\n error: function (data) {\r\n\r\n $(\"#Errors .alert-error\").html(data.ResultDescription[0]);\r\n }\r\n });\r\n\r\n\r\n });\r\n\r\n\r\n $(\"body\").on(\"change\", \".ddl_ulke\", function () {\r\n\r\n var seciliUlkeID = $(this).val();\r\n $(\".ajaxilce\").show();\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: '/User/GetCities',\r\n data: 'countryid=' + seciliUlkeID,\r\n dataType: 'json',\r\n success: function (dt) {\r\n\r\n var icerik = \"\";\r\n\r\n $('#CityID option').remove();\r\n $('.ddl_sehir option').remove();\r\n $('.ddl_ilce option').remove();\r\n $('.ddl_mahalle option').remove();\r\n\r\n $('#CityID')\r\n .append($(\"\")\r\n .attr(\"value\", \"\")\r\n .text(\"Lütfen Seçin\"));\r\n\r\n\r\n $('#CityID').parent().find(\"span\").html(\"Lütfen Seçin\");\r\n\r\n for (var i = 0; i < dt.length; i++) {\r\n\r\n\r\n $('#CityID')\r\n .append($(\"\")\r\n .attr(\"value\", dt[i].ID)\r\n .text(dt[i].Name));\r\n\r\n }\r\n\r\n $(\".ajaxilce\").hide();\r\n\r\n\r\n }\r\n });\r\n\r\n RefReshCityAndTowns();\r\n\r\n });\r\n\r\n $(\"body\").on(\"change\", \".ddl_sehir\", function () {\r\n\r\n var seciliSehirOID = $(this).val();\r\n $(\".ajaxilce\").show();\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: '/User/GetTowns',\r\n data: 'cityid=' + seciliSehirOID,\r\n dataType: 'json',\r\n success: function (dt) {\r\n\r\n var icerik = \"\";\r\n $('#TownID option').remove();\r\n\r\n $('#TownID')\r\n .append($(\"\")\r\n .attr(\"value\", \"\")\r\n .text(\"Lütfen Seçin\"));\r\n\r\n\r\n $('#TownID').parent().find(\"span\").html(\"Lütfen Seçin\");\r\n\r\n for (var i = 0; i < dt.length; i++) {\r\n\r\n $('#TownID')\r\n .append($(\"\")\r\n .attr(\"value\", dt[i].ID)\r\n .text(dt[i].Name));\r\n\r\n }\r\n\r\n $(\".ajaxilce\").hide();\r\n\r\n\r\n }\r\n });\r\n\r\n\r\n });\r\n\r\n $(\"body\").on(\"change\", \".ddl_ilce\", function () {\r\n\r\n var seciliIlceID = $(this).val();\r\n $(\".ajaxilce\").show();\r\n\r\n $.ajax({\r\n type: 'get',\r\n url: '/User/GetQuarters',\r\n data: 'TownID=' + seciliIlceID,\r\n dataType: 'json',\r\n success: function (dt) {\r\n\r\n var icerik = \"\";\r\n $('#QuarterID option').remove();\r\n\r\n $('#QuarterID')\r\n .append($(\"\")\r\n .attr(\"value\", \"\")\r\n .text(\"Lütfen Seçin\"));\r\n\r\n\r\n $('#QuarterID').parent().find(\"span\").html(\"Lütfen Seçin\");\r\n\r\n for (var i = 0; i < dt.length; i++) {\r\n\r\n $('#QuarterID')\r\n .append($(\"\")\r\n .attr(\"value\", dt[i].ID)\r\n .text(dt[i].Name));\r\n\r\n }\r\n\r\n $(\".ajaxilce\").hide();\r\n\r\n\r\n }\r\n });\r\n\r\n\r\n });\r\n\r\n $(\"#AddressArea\").on(\"submit\", \"form.OrderAdressForm\", function (e) {\r\n\r\n $form = $(this);\r\n $(\"#OpStatusBar div\").hide();\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: $form.attr(\"action\"),\r\n data: $form.serialize(),\r\n dataType: \"json\",\r\n cache: false,\r\n success: function (data) {\r\n\r\n ReloadOnTimeOut(data);\r\n\r\n if (data.Status == true) {\r\n\r\n $(\"#OpStatusBar div.alert-success ul li\").html(data.ResultDescription[0]);\r\n $(\"#OpStatusBar > div.alert-sucess \").show();\r\n\r\n ReloadPage();\r\n\r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#OpStatusBar div.alert-danger ul li\"), data.ResultDescription, true, false);\r\n $(\"#OpStatusBar > div.alert-danger \").show();\r\n }\r\n\r\n },\r\n error: function (data) {\r\n\r\n $(\"#Errors .alert-error\").html(data.ResultDescription[0]);\r\n }\r\n\r\n });\r\n\r\n e.preventDefault();\r\n return false;\r\n\r\n });\r\n\r\n var deliverCheckedVal = 0;\r\n var billingCheckedVal = 0;\r\n\r\n if ($(\"#OrderAdress input[name=adr_del]:checked\").length > 0) {\r\n deliverCheckedVal = $(\"#OrderAdress input[name=adr_del]:checked\").val();\r\n }\r\n\r\n if ($(\"#OrderAdress input[name=adr_bil]:checked\").length > 0) {\r\n\r\n billingCheckedVal = $(\"#OrderAdress input[name=adr_bil]:checked\").val();\r\n }\r\n\r\n //SetAdres\r\n $(\"#OrderAdress\").on(\"change\", \"input[type=radio]\", function (e) {\r\n\r\n var adrtype = $(this).attr(\"data-adrtype\");\r\n var id = $(this).val();\r\n $clicked = $(this);\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/\" + CheckOutAddressPath + \"/SetAddress?addressID=\" + id + \"&addressType=\" + adrtype,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status) {\r\n\r\n //Sipariş özetini Yenile\r\n RefreshOrderSummary(false, false);\r\n //KargoListesini Yenile \r\n\r\n if (adrtype == \"Delivery\") {\r\n RefreshCargoList();\r\n }\r\n\r\n $(\"#AddressArea\").html(\"\");\r\n }\r\n\r\n if (dt.Status == false && dt.StatusText == \"InvalidAddress\" && $(\"#AddressArea\").length > 0) {\r\n\r\n var url = \"/\" + $(\"#SmallLangCode\").val() + \"/p/\" + CheckOutAddressPath + \"/EditOrCreate?id=\" + id;\r\n\r\n GetAddressForm(url);\r\n\r\n } else if (dt.Status == false) {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n }\r\n\r\n if (dt.Status == false) {\r\n\r\n //Remove Checked Status Before go\r\n if (adrtype == \"Delivery\") {\r\n\r\n $(\"#OrderAdress input[name=adr_del]\").removeAttr(\"checked\");\r\n $(\"#OrderAdress input[name=adr_del][value=\" + deliverCheckedVal + \"]\").prop(\"checked\", \"checked\");\r\n\r\n } else if (adrtype == \"Billing\") {\r\n\r\n $(\"#OrderAdress input[name=adr_bil]\").removeAttr(\"checked\");\r\n $(\"#OrderAdress input[name=adr_bil][value=\" + billingCheckedVal + \"]\").prop(\"checked\", \"checked\");\r\n\r\n }\r\n }\r\n else {\r\n\r\n if (adrtype == \"Delivery\") {\r\n\r\n deliverCheckedVal = id;\r\n\r\n } else if (adrtype == \"Billing\") {\r\n\r\n billingCheckedVal = id;\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n //SetKargo\r\n\r\n var selectedCargoPriceID = 0;\r\n\r\n if ($(\"#CargoTable input:checked\").length > 0) {\r\n selectedCargoPriceID = $(\"#CargoTable input:checked\").val();\r\n }\r\n\r\n //$(\"body\").on(\"click\", \"#OrderAdress td\", function () {\r\n\r\n // $lbl = $(this).find(\"label\");\r\n\r\n // console.log($lbl.length);\r\n\r\n // if ($lbl.length <= 0) {\r\n\r\n // $(this).closest(\"tr\").find(\"label\").trigger(\"click\");\r\n // } \r\n //});\r\n\r\n $(\"body\").on(\"click\", \"#CargoTable td\", function () {\r\n\r\n $lbl = $(this).find(\"label\");\r\n\r\n console.log($lbl.length);\r\n\r\n if ($lbl.length <= 0) {\r\n\r\n $(this).closest(\"tr\").find(\"label\").trigger(\"click\");\r\n }\r\n });\r\n\r\n $(\"#GiftTable\").on(\"change\", \"input\", function () {\r\n\r\n var wantGift = $(this).is(\":checked\");\r\n\r\n console.log(\"gift status : \", wantGift);\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckoutCart/SetGift?wantGift=\" + wantGift,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n\r\n RefreshOrderSummary();\r\n\r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n\r\n $(\"#GiftTable input\").removeProp(\"checked\");\r\n $(\"#GiftTable input[value=\" + selectedCargoPriceID + \"]\").prop(\"checked\", \"checked\");\r\n }\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n\r\n $(\"body\").on(\"click\", \"#GiftTable td:not(.RadioTd)\", function (e) {\r\n\r\n console.log(\"tr clicked\");\r\n\r\n $radinput = $(this).closest(\"tr\").find(\"input:first\");\r\n $radinput.prop(\"checked\", !$radinput.is(\":checked\"));\r\n $(this).closest(\"tr\").find(\"input\").trigger(\"change\");\r\n\r\n });\r\n\r\n\r\n $(\"body\").on(\"change\", \"#PaymentGroups input, .WebPosItem input, #BankList input, #PayAtDoor input\", function (e) {\r\n\r\n $label = $(this).closest(\"label\");\r\n $input = $(this);\r\n\r\n var paymentType = $input.attr(\"data-payment\");\r\n var paymentTypeValue = $input.val();\r\n\r\n var webposinstallmentid = $input.attr(\"data-webposinstallment-id\");\r\n var bankid = $input.attr(\"data-bankid\");\r\n\r\n $(\"#PaymentGroups input\").removeProp(\"checked\");\r\n $(\"#PaymentGroups label, .TaksitLabel\").removeClass(\"active\");\r\n\r\n $label2 = $(\"#PaymentGroups label input[data-payment='\" + paymentType + \"']:first\").closest(\"label\");\r\n\r\n\r\n $label.addClass(\"active\");\r\n $label2.addClass(\"active\");\r\n\r\n $label.find(\"input\").prop(\"checked\", \"checked\");\r\n\r\n\r\n\r\n $(\".PaymentDetail\").removeClass(\"active\");\r\n $(\".PaymentDetail.\" + paymentType).addClass(\"active\");\r\n\r\n if ($(this).closest(\"#PaymentGroups\").length > 0) {\r\n\r\n $(\"#Erros\").html(\"\");\r\n $(\"#Erros\").hide();\r\n $(\".WebPosItem\").hide();\r\n\r\n var webPosId = $(\".WebPosItem.active\").attr(\"data-webposid\");\r\n\r\n $(\".WebPosItem[data-webposid='\" + webPosId + \"']\").show();\r\n //$(\".WebPosItem[data-cardtype='\" + paymentType + \"']\").show();\r\n\r\n\r\n }\r\n\r\n SetPaymentType(webposinstallmentid, bankid);\r\n\r\n });\r\n\r\n\r\n $(\"body\").on(\"click\", \".PosGroupItem\", function (e) {\r\n $(\".PosGroupItem\").removeClass(\"active\");\r\n $(this).addClass(\"active\");\r\n var webPosId = $(this).attr(\"data-webposid\");\r\n\r\n $(\".WebPosItem\").hide();\r\n $(\".WebPosItem[data-webposid='\" + webPosId + \"']\").show();\r\n\r\n });\r\n\r\n $(\"body\").on(\"keyup\", \"#CardNumbers input\", function (e) {\r\n\r\n var cr_1 = $(\"#CardNumbers > input#CardNumber1\").val().replace(/\\D/g, '');\r\n cr_1 = formatCC(cr_1);\r\n $(\"#CardNumbers > input#CardNumber1\").val(cr_1);\r\n\r\n var cardNumber = cr_1.replace(/\\D/g, '');\r\n\r\n isAllValid = false;\r\n\r\n if (cardNumber.length == 16 && validateCardNumber(cardNumber) == false) {\r\n\r\n $(\"#CardNumbers > input\").addClass(\"NotValid\");\r\n isAllValid = false;\r\n\r\n } else {\r\n $(\"#CardNumbers > input\").removeClass(\"NotValid\");\r\n isAllValid = true;\r\n }\r\n\r\n\r\n if (IsNumeric($(this).val().replace(/\\D/g, '')) == false && $(this).val() != \"\" && $(this).hasClass(\"cardno\")) {\r\n\r\n $(this).addClass(\"NotValid\");\r\n }\r\n else {\r\n\r\n if (isAllValid || cardNumber.length < 16 || !$(this).hasClass(\"cardno\")) {\r\n $(this).removeClass(\"NotValid\");\r\n }\r\n\r\n if (isAllValid) {\r\n $(\"#CardNumbers > input\").removeClass(\"NotValid\");\r\n }\r\n }\r\n\r\n\r\n\r\n CheckBinNumber();\r\n\r\n //if ($(this).attr(\"id\") == \"CardOwner\" && IsNumeric($(this).val().replace(/\\D/g, ''))) {\r\n\r\n // $(this).addClass(\"NotValid\");\r\n // $(\".CardOwnerHeader\").addClass(\"MoveNeeded\");\r\n //}\r\n //else if ($(this).attr(\"id\") == \"CardOwner\") {\r\n\r\n // $(this).removeClass(\"NotValid\");\r\n // $(\".CardOwnerHeader\").removeClass(\"MoveNeeded\");\r\n\r\n //}\r\n\r\n });\r\n\r\n\r\n $(\"#CargoTable\").on(\"change\", \"input\", function () {\r\n\r\n var id = $(this).val();\r\n $clicked = $(this);\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckoutAddress/SetCargoPrice?cargoPriceID=\" + id,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n\r\n RefreshOrderSummary();\r\n selectedCargoPriceID = id;\r\n\r\n }\r\n else {\r\n\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n\r\n $(\"#CargoTable input\").removeProp(\"checked\");\r\n $(\"#CargoTable input[value=\" + selectedCargoPriceID + \"]\").prop(\"checked\", \"checked\");\r\n\r\n }\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n $(\"body\").on(\"change\", \"#AggrementApprove\", function () {\r\n\r\n var IsApproved = $(this).is(\":checked\");\r\n\r\n $.ajax({\r\n type: 'post',\r\n url: \"/\" + $(\"#SmallLangCode\").val() + \"/p/CheckoutPayment/SetAgreement?isApproved=\" + IsApproved,\r\n success: function (dt) {\r\n\r\n ReloadOnTimeOut(dt);\r\n\r\n if (dt.Status == true) {\r\n\r\n RefreshOrderSummary();\r\n\r\n }\r\n else {\r\n\r\n SetErrorResults($(\"#Erros\"), dt.ResultDescription, true, true);\r\n\r\n }\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n\r\n\r\n //LOGIN & REGISTER\r\n var UseTagManager = false;\r\n $(\"body\").on(\"submit\", \"form.UyeGiris\", function () {\r\n\r\n $form = $(this);\r\n\r\n $(\"#LoginButton\").attr(\"disabled\", \"disabled\");\r\n $(\".AjaxLoader\").show();\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: $form.attr(\"action\"),\r\n data: $form.serialize(),\r\n dataType: \"json\",\r\n success: function (dt) {\r\n\r\n $(\".AjaxLoader\").hide();\r\n $(\"#LoginButton\").removeAttr(\"disabled\");\r\n\r\n if (dt.Sonuc == true) {\r\n\r\n if (UseTagManager) {\r\n\r\n AddUserAction(\"Login\");\r\n }\r\n\r\n if (dt.JsonRs == \"Reload\") {\r\n\r\n $(\"#AlertResult\").removeClass(\"alert-danger\");\r\n $(\"#AlertResult\").addClass(\"alert-success\").show().find(\"span\").html(dt.IslemSonucAciklama);\r\n\r\n $(\".AjaxLoader\").show();\r\n $form.hide();\r\n $(\".RwRegisterLogin\").hide();\r\n\r\n document.location.reload();\r\n\r\n }\r\n\r\n if (dt.JsonRs == \"Redirect\") {\r\n\r\n $form.hide();\r\n $(\".AjaxLoader\").show();\r\n $(\".RwRegisterLogin\").hide();\r\n\r\n document.location = dt.Deger5;\r\n }\r\n\r\n $(\"#AlertResult\").removeClass(\"alert-danger\");\r\n\r\n if ($(\"#register_FbRedirectUrl\").length > 0 && $(\"#register_FbRedirectUrl\").val() != \"\" && $(\"#register_FbRedirectUrl\").val().indexOf(\"undefined\") != -1) {\r\n document.location = $(\"#register_FbRedirectUrl\").val();\r\n }\r\n\r\n\r\n }\r\n else {\r\n\r\n $(\"#AlertResult\").removeClass(\"alert-success\");\r\n $(\"#AlertResult\").addClass(\"alert-danger\").show().find(\"span\").html(dt.IslemSonucAciklama);\r\n }\r\n\r\n },\r\n error: function () {\r\n\r\n alert('Talebiniz yerine getirilirken bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.!');\r\n }\r\n\r\n });\r\n\r\n\r\n return false;\r\n\r\n\r\n });\r\n\r\n $(\"body\").on(\"submit\", \"form.UyeOl\", function () {\r\n\r\n $form = $(this);\r\n\r\n $(\"#LoginButton\").attr(\"disabled\", \"disabled\");\r\n $(\".AjaxLoader\").show();\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: $form.attr(\"action\"),\r\n data: $form.serialize(),\r\n dataType: \"json\",\r\n success: function (dt) {\r\n\r\n $(\".AjaxLoader\").hide();\r\n $(\"#LoginButton\").removeAttr(\"disabled\");\r\n\r\n if (dt.Sonuc == true) {\r\n\r\n if (UseTagManager) {\r\n AddUserAction(\"Signup\");\r\n }\r\n\r\n if (dt.JsonRs == \"Redirect\") {\r\n\r\n $form.hide();\r\n $(\".AjaxLoader\").show();\r\n $(\".RwRegisterLogin\").hide();\r\n\r\n document.location = \"/\";\r\n }\r\n\r\n if (dt.JsonRs == \"Reload\") {\r\n\r\n $form.hide();\r\n\r\n $(\".AjaxLoader\").show();\r\n $(\".RwRegisterLogin\").hide();\r\n\r\n document.location.reload();\r\n }\r\n\r\n $(\"#AlertResult\").removeClass(\"alert-error\");\r\n $(\"#AlertResult\").hide();\r\n //$(\"#AlertResult\").addClass(\"alert-success\").show().find(\"span\").html(dt.IslemSonucAciklama);\r\n\r\n\r\n\r\n if ($(\"#register_FbRedirectUrl\").length > 0 && $(\"#register_FbRedirectUrl\").val() != \"\" && $(\"#register_FbRedirectUrl\").val().indexOf(\"undefined\") != -1) {\r\n document.location = $(\"#register_FbRedirectUrl\").val();\r\n }\r\n\r\n }\r\n else {\r\n\r\n $(\"#AlertResult\").removeClass(\"alert-success\");\r\n $(\"#AlertResult\").addClass(\"alert-error\").show().find(\"span\").html(dt.IslemSonucAciklama);\r\n }\r\n\r\n },\r\n error: function () {\r\n\r\n alert('Talebiniz yerine getirilirken bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.!');\r\n }\r\n\r\n });\r\n\r\n\r\n return false;\r\n\r\n\r\n });\r\n\r\n\r\n $(\"body\").on(\"click\", \"a.RegisterIcon, a.LoginIcon, #CheckoutHeader .RegisterIcon a, #CheckoutHeader .LoginIcon a, #CheckoutHeader a.RegisterIcon , #CheckoutHeader a.LoginIcon\", function (e) {\r\n\r\n SetStepDataLayer();\r\n\r\n $(\"#LoginRegisterModal\").modal('show');\r\n\r\n if (typeof UseSwStat != 'undefined' && UseSwStat == true) {\r\n\r\n var swparams = GetSwPageParams();\r\n swparams = ChangeSwHashedStringParamValue(swparams, \"ActionType\", \"SiparisUyelikPopupAcma\");\r\n AddSwAction(swparams);\r\n\r\n }\r\n\r\n if (UseTagManager) {\r\n AddCheckOutView('', 2);\r\n SendGaDataLayerVirtual();\r\n }\r\n\r\n if ($(this).closest(\"li\").hasClass(\"RegisterIcon\") || $(this).hasClass(\"RegisterIcon\")) {\r\n\r\n if ($(\".UyeKayitCol\").hasClass(\"pull-right\") == false) {\r\n\r\n $(\".RegisterInBanner\").trigger(\"click\");\r\n }\r\n\r\n }\r\n else {\r\n if ($(\".UyeKayitCol\").hasClass(\"pull-right\")) {\r\n\r\n $(\".RegisterInBanner\").trigger(\"click\");\r\n }\r\n }\r\n\r\n e.preventDefault();\r\n return false;\r\n });\r\n\r\n $(\"body\").on(\"click\", \"#ReadAgreement\", function (e) {\r\n\r\n $(\"#AgreementModal .modal-body\").html($(\"#AgreementDetails\").html() + $(\"#OnBilgilendirmetails\").html());\r\n $(\"#AgreementModal\").modal('show');\r\n\r\n return false;\r\n });\r\n\r\n $(\"#UserWelcome\").on(\"click\", \"a.Popup\", function (e) {\r\n\r\n $(\"#LoginRegisterModal\").modal('show');\r\n\r\n e.preventDefault();\r\n return false;\r\n });\r\n\r\n\r\n $(\"body .LogRegTabs\").on(\"click\", \"li.tb\", function (e) {\r\n\r\n var target = $(this).attr(\"data-target\");\r\n\r\n //console.log(target);\r\n\r\n $(\".Tab1, .Tab2\").hide();\r\n $(\".\" + target).show();\r\n\r\n $(\".LogRegTabs li\").removeClass(\"active\");\r\n $(this).addClass(\"active\");\r\n\r\n e.preventDefault();\r\n return false;\r\n });\r\n\r\n\r\n $(\"body\").on(\"click\", \".ForgetPass\", function (e) {\r\n\r\n $(\"#forgottenpassModal\").modal('show');\r\n\r\n });\r\n\r\n $(\"body\").on(\"submit\", \"form.ForgettenForm\", function () {\r\n\r\n $form = $(\"form.ForgettenForm\");\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: $form.attr(\"action\"),\r\n data: $form.serialize(),\r\n dataType: 'json',\r\n success: function (dta) {\r\n\r\n if (dta.Sonuc == true) {\r\n\r\n $(\".ForgettenForm p:first\").html(dta.IslemSonucAciklama);\r\n\r\n $(\"#email\").hide();\r\n $(\"#forgottenPassSubmit\").hide();\r\n\r\n $(\".ForgettenForm p:first\").removeClass(\"alert-danger\");\r\n $(\".ForgettenForm p:first\").addClass(\"alert alert-success\");\r\n\r\n }\r\n else {\r\n\r\n $(\".ForgettenForm p:first\").html(dta.IslemSonucAciklama);\r\n $(\".ForgettenForm p:first\").addClass(\"alert alert-danger\");\r\n }\r\n\r\n\r\n\r\n },\r\n error: function () {\r\n\r\n alert('Talebiniz yerine getirilirken bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.!');\r\n }\r\n\r\n });\r\n\r\n\r\n return false;\r\n\r\n\r\n });\r\n\r\n\r\n //LOGIN & REGISTER END\r\n\r\n\r\n});"]}