diff --git a/_src/admin/js/admin.js b/_src/admin/js/admin.js index 3c846c8..ac7947e 100644 --- a/_src/admin/js/admin.js +++ b/_src/admin/js/admin.js @@ -52,7 +52,39 @@ APP.initMenu = function(){ }; APP.initPlugins = function() { - /* + $.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker; + $.datepicker._updateDatepicker = function(inst) { + $.datepicker._updateDatepicker_original(inst); + var afterShow = this._get(inst, 'afterShow'); + if (afterShow) + afterShow.apply((inst.input ? inst.input[0] : null)); + } + $.datepicker.regional['ko'] = { + closeText: '닫기', + prevText: '이전달', + nextText: '다음달', + currentText: '오늘', + monthNames: ['1월','2월','3월','4월','5월','6월', '7월','8월','9월','10월','11월','12월'], + monthNamesShort: ['1월','2월','3월','4월','5월','6월', '7월','8월','9월','10월','11월','12월'], + dayNames: ['일','월','화','수','목','금','토'], + dayNamesShort: ['일','월','화','수','목','금','토'], + dayNamesMin: ['일','월','화','수','목','금','토'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + changeMonth: true, + changeYear: true, + yearSuffix: '', + afterShow: function() { + $('.ui-datepicker-prev').empty().append( '' ); + $('.ui-datepicker-next').empty().append( '' ); + } + }; + + $.datepicker.setDefaults($.datepicker.regional['ko']); + $('[data-toggle="datepicker"]').datepicker(); $("body").on("click", '[data-toggle="datepicker"]', function(){ @@ -63,6 +95,7 @@ APP.initPlugins = function() { } }); + /* $('[data-toggle="formatter"]').each(function(){ if( $(this).data('pattern') ) { diff --git a/_src/admin/js/jquery-ui.js b/_src/admin/js/jquery-ui.js new file mode 100644 index 0000000..ad8d539 --- /dev/null +++ b/_src/admin/js/jquery-ui.js @@ -0,0 +1,6581 @@ +/*! jQuery UI - v1.12.1 - 2018-10-29 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, keycode.js, scroll-parent.js, unique-id.js, widgets/sortable.js, widgets/autocomplete.js, widgets/datepicker.js, widgets/menu.js, widgets/mouse.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + +$.ui = $.ui || {}; + +var version = $.ui.version = "1.12.1"; + + +/*! + * jQuery UI Widget 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + + + +var widgetUuid = 0; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( $.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // Create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + + if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } + + methodValue = instance[ options ].apply( instance, args ); + + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var i; + + if ( arguments.length === 0 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.unique( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +var widget = $.widget; + + +/*! + * jQuery UI Position 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + + +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
" + + "
" ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); + + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[ 0 ] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isWindow && !isDocument; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // Make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each( function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + } ); + } + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + } ); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +} )(); + +var position = $.ui.position; + + +/*! + * jQuery UI :data 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ + + +var data = $.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : + + // Support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + } +} ); + +/*! + * jQuery UI Keycode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + + +var keycode = $.ui.keyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 +}; + + +/*! + * jQuery UI Scroll Parent 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ + + + +var scrollParent = $.fn.scrollParent = function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; +}; + + +/*! + * jQuery UI Unique ID 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + + + +var uniqueId = $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; + + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + } ); + }; + } )(), + + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + } ); + } +} ); + + + + +// This file is deprecated +var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); + +/*! + * jQuery UI Mouse 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Mouse +//>>group: Widgets +//>>description: Abstracts mouse-based interactions to assist in creating certain widgets. +//>>docs: http://api.jqueryui.com/mouse/ + + + +var mouseHandled = false; +$( document ).on( "mouseup", function() { + mouseHandled = false; +} ); + +var widgetsMouse = $.widget( "ui.mouse", { + version: "1.12.1", + options: { + cancel: "input, textarea, button, select, option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .on( "mousedown." + this.widgetName, function( event ) { + return that._mouseDown( event ); + } ) + .on( "click." + this.widgetName, function( event ) { + if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) { + $.removeData( event.target, that.widgetName + ".preventClickEvent" ); + event.stopImmediatePropagation(); + return false; + } + } ); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.off( "." + this.widgetName ); + if ( this._mouseMoveDelegate ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + } + }, + + _mouseDown: function( event ) { + + // don't let more than one widget handle mouseStart + if ( mouseHandled ) { + return; + } + + this._mouseMoved = false; + + // We may have missed mouseup (out of window) + ( this._mouseStarted && this._mouseUp( event ) ); + + this._mouseDownEvent = event; + + var that = this, + btnIsLeft = ( event.which === 1 ), + + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ? + $( event.target ).closest( this.options.cancel ).length : false ); + if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if ( !this.mouseDelayMet ) { + this._mouseDelayTimer = setTimeout( function() { + that.mouseDelayMet = true; + }, this.options.delay ); + } + + if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { + this._mouseStarted = ( this._mouseStart( event ) !== false ); + if ( !this._mouseStarted ) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) { + $.removeData( event.target, this.widgetName + ".preventClickEvent" ); + } + + // These delegates are required to keep context + this._mouseMoveDelegate = function( event ) { + return that._mouseMove( event ); + }; + this._mouseUpDelegate = function( event ) { + return that._mouseUp( event ); + }; + + this.document + .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function( event ) { + + // Only check for mouseups outside the document if you've moved inside the document + // at least once. This prevents the firing of mouseup in the case of IE<9, which will + // fire a mousemove event if content is placed under the cursor. See #7778 + // Support: IE <9 + if ( this._mouseMoved ) { + + // IE mouseup check - mouseup happened when mouse was out of window + if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && + !event.button ) { + return this._mouseUp( event ); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + + // Support: Safari <=8 - 9 + // Safari sets which to 0 if you press any of the following keys + // during a drag (#14461) + if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || + event.originalEvent.metaKey || event.originalEvent.shiftKey ) { + this.ignoreMissingWhich = true; + } else if ( !this.ignoreMissingWhich ) { + return this._mouseUp( event ); + } + } + } + + if ( event.which || event.button ) { + this._mouseMoved = true; + } + + if ( this._mouseStarted ) { + this._mouseDrag( event ); + return event.preventDefault(); + } + + if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { + this._mouseStarted = + ( this._mouseStart( this._mouseDownEvent, event ) !== false ); + ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) ); + } + + return !this._mouseStarted; + }, + + _mouseUp: function( event ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + if ( this._mouseStarted ) { + this._mouseStarted = false; + + if ( event.target === this._mouseDownEvent.target ) { + $.data( event.target, this.widgetName + ".preventClickEvent", true ); + } + + this._mouseStop( event ); + } + + if ( this._mouseDelayTimer ) { + clearTimeout( this._mouseDelayTimer ); + delete this._mouseDelayTimer; + } + + this.ignoreMissingWhich = false; + mouseHandled = false; + event.preventDefault(); + }, + + _mouseDistanceMet: function( event ) { + return ( Math.max( + Math.abs( this._mouseDownEvent.pageX - event.pageX ), + Math.abs( this._mouseDownEvent.pageY - event.pageY ) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function( /* event */ ) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function( /* event */ ) {}, + _mouseDrag: function( /* event */ ) {}, + _mouseStop: function( /* event */ ) {}, + _mouseCapture: function( /* event */ ) { return true; } +} ); + + +/*! + * jQuery UI Sortable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Sortable +//>>group: Interactions +//>>description: Enables items in a list to be sorted using the mouse. +//>>docs: http://api.jqueryui.com/sortable/ +//>>demos: http://jqueryui.com/sortable/ +//>>css.structure: ../../themes/base/sortable.css + + + +var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, { + version: "1.12.1", + widgetEventPrefix: "sort", + ready: false, + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: "auto", + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: "> *", + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000, + + // Callbacks + activate: null, + beforeStop: null, + change: null, + deactivate: null, + out: null, + over: null, + receive: null, + remove: null, + sort: null, + start: null, + stop: null, + update: null + }, + + _isOverAxis: function( x, reference, size ) { + return ( x >= reference ) && ( x < ( reference + size ) ); + }, + + _isFloating: function( item ) { + return ( /left|right/ ).test( item.css( "float" ) ) || + ( /inline|table-cell/ ).test( item.css( "display" ) ); + }, + + _create: function() { + this.containerCache = {}; + this._addClass( "ui-sortable" ); + + //Get the items + this.refresh(); + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + this._setHandleClassName(); + + //We're ready to go + this.ready = true; + + }, + + _setOption: function( key, value ) { + this._super( key, value ); + + if ( key === "handle" ) { + this._setHandleClassName(); + } + }, + + _setHandleClassName: function() { + var that = this; + this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" ); + $.each( this.items, function() { + that._addClass( + this.instance.options.handle ? + this.item.find( this.instance.options.handle ) : + this.item, + "ui-sortable-handle" + ); + } ); + }, + + _destroy: function() { + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) { + this.items[ i ].item.removeData( this.widgetName + "-item" ); + } + + return this; + }, + + _mouseCapture: function( event, overrideHandle ) { + var currentItem = null, + validHandle = false, + that = this; + + if ( this.reverting ) { + return false; + } + + if ( this.options.disabled || this.options.type === "static" ) { + return false; + } + + //We have to refresh the items data once first + this._refreshItems( event ); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + $( event.target ).parents().each( function() { + if ( $.data( this, that.widgetName + "-item" ) === that ) { + currentItem = $( this ); + return false; + } + } ); + if ( $.data( event.target, that.widgetName + "-item" ) === that ) { + currentItem = $( event.target ); + } + + if ( !currentItem ) { + return false; + } + if ( this.options.handle && !overrideHandle ) { + $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() { + if ( this === event.target ) { + validHandle = true; + } + } ); + if ( !validHandle ) { + return false; + } + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function( event, overrideHandle, noActivation ) { + + var i, body, + o = this.options; + + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to + // mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper( event ); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend( this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + + // This is a relative to absolute position minus the actual position calculation - + // only used for relative positioned helper + relative: this._getRelativeOffset() + } ); + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css( "position", "absolute" ); + this.cssPosition = this.helper.css( "position" ); + + //Generate the original position + this.originalPosition = this._generatePosition( event ); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if "cursorAt" is supplied + ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) ); + + //Cache the former DOM position + this.domPosition = { + prev: this.currentItem.prev()[ 0 ], + parent: this.currentItem.parent()[ 0 ] + }; + + // If the helper is not the original, hide the original so it's not playing any role during + // the drag, won't cause anything bad this way + if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if ( o.containment ) { + this._setContainment(); + } + + if ( o.cursor && o.cursor !== "auto" ) { // cursor option + body = this.document.find( "body" ); + + // Support: IE + this.storedCursor = body.css( "cursor" ); + body.css( "cursor", o.cursor ); + + this.storedStylesheet = + $( "" ).appendTo( body ); + } + + if ( o.opacity ) { // opacity option + if ( this.helper.css( "opacity" ) ) { + this._storedOpacity = this.helper.css( "opacity" ); + } + this.helper.css( "opacity", o.opacity ); + } + + if ( o.zIndex ) { // zIndex option + if ( this.helper.css( "zIndex" ) ) { + this._storedZIndex = this.helper.css( "zIndex" ); + } + this.helper.css( "zIndex", o.zIndex ); + } + + //Prepare scrolling + if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && + this.scrollParent[ 0 ].tagName !== "HTML" ) { + this.overflowOffset = this.scrollParent.offset(); + } + + //Call callbacks + this._trigger( "start", event, this._uiHash() ); + + //Recache the helper size + if ( !this._preserveHelperProportions ) { + this._cacheHelperProportions(); + } + + //Post "activate" events to possible containers + if ( !noActivation ) { + for ( i = this.containers.length - 1; i >= 0; i-- ) { + this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); + } + } + + //Prepare possible droppables + if ( $.ui.ddmanager ) { + $.ui.ddmanager.current = this; + } + + if ( $.ui.ddmanager && !o.dropBehaviour ) { + $.ui.ddmanager.prepareOffsets( this, event ); + } + + this.dragging = true; + + this._addClass( this.helper, "ui-sortable-helper" ); + + // Execute the drag once - this causes the helper not to be visiblebefore getting its + // correct position + this._mouseDrag( event ); + return true; + + }, + + _mouseDrag: function( event ) { + var i, item, itemElement, intersection, + o = this.options, + scrolled = false; + + //Compute the helpers position + this.position = this._generatePosition( event ); + this.positionAbs = this._convertPositionTo( "absolute" ); + + if ( !this.lastPositionAbs ) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if ( this.options.scroll ) { + if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && + this.scrollParent[ 0 ].tagName !== "HTML" ) { + + if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) - + event.pageY < o.scrollSensitivity ) { + this.scrollParent[ 0 ].scrollTop = + scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed; + } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) { + this.scrollParent[ 0 ].scrollTop = + scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed; + } + + if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) - + event.pageX < o.scrollSensitivity ) { + this.scrollParent[ 0 ].scrollLeft = scrolled = + this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed; + } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) { + this.scrollParent[ 0 ].scrollLeft = scrolled = + this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed; + } + + } else { + + if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) { + scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed ); + } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) < + o.scrollSensitivity ) { + scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed ); + } + + if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) { + scrolled = this.document.scrollLeft( + this.document.scrollLeft() - o.scrollSpeed + ); + } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) < + o.scrollSensitivity ) { + scrolled = this.document.scrollLeft( + this.document.scrollLeft() + o.scrollSpeed + ); + } + + } + + if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) { + $.ui.ddmanager.prepareOffsets( this, event ); + } + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo( "absolute" ); + + //Set the helper position + if ( !this.options.axis || this.options.axis !== "y" ) { + this.helper[ 0 ].style.left = this.position.left + "px"; + } + if ( !this.options.axis || this.options.axis !== "x" ) { + this.helper[ 0 ].style.top = this.position.top + "px"; + } + + //Rearrange + for ( i = this.items.length - 1; i >= 0; i-- ) { + + //Cache variables and intersection, continue if no intersection + item = this.items[ i ]; + itemElement = item.item[ 0 ]; + intersection = this._intersectsWithPointer( item ); + if ( !intersection ) { + continue; + } + + // Only put the placeholder inside the current Container, skip all + // items from other containers. This works because when moving + // an item from one container to another the + // currentContainer is switched before the placeholder is moved. + // + // Without this, moving items in "sub-sortables" can cause + // the placeholder to jitter between the outer and inner container. + if ( item.instance !== this.currentContainer ) { + continue; + } + + // Cannot intersect with itself + // no useless actions that have been done before + // no action if the item moved is the parent of the item checked + if ( itemElement !== this.currentItem[ 0 ] && + this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement && + !$.contains( this.placeholder[ 0 ], itemElement ) && + ( this.options.type === "semi-dynamic" ? + !$.contains( this.element[ 0 ], itemElement ) : + true + ) + ) { + + this.direction = intersection === 1 ? "down" : "up"; + + if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) { + this._rearrange( event, item ); + } else { + break; + } + + this._trigger( "change", event, this._uiHash() ); + break; + } + } + + //Post events to containers + this._contactContainers( event ); + + //Interconnect with droppables + if ( $.ui.ddmanager ) { + $.ui.ddmanager.drag( this, event ); + } + + //Call callbacks + this._trigger( "sort", event, this._uiHash() ); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function( event, noPropagation ) { + + if ( !event ) { + return; + } + + //If we are using droppables, inform the manager about the drop + if ( $.ui.ddmanager && !this.options.dropBehaviour ) { + $.ui.ddmanager.drop( this, event ); + } + + if ( this.options.revert ) { + var that = this, + cur = this.placeholder.offset(), + axis = this.options.axis, + animation = {}; + + if ( !axis || axis === "x" ) { + animation.left = cur.left - this.offset.parent.left - this.margins.left + + ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? + 0 : + this.offsetParent[ 0 ].scrollLeft + ); + } + if ( !axis || axis === "y" ) { + animation.top = cur.top - this.offset.parent.top - this.margins.top + + ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? + 0 : + this.offsetParent[ 0 ].scrollTop + ); + } + this.reverting = true; + $( this.helper ).animate( + animation, + parseInt( this.options.revert, 10 ) || 500, + function() { + that._clear( event ); + } + ); + } else { + this._clear( event, noPropagation ); + } + + return false; + + }, + + cancel: function() { + + if ( this.dragging ) { + + this._mouseUp( new $.Event( "mouseup", { target: null } ) ); + + if ( this.options.helper === "original" ) { + this.currentItem.css( this._storedCSS ); + this._removeClass( this.currentItem, "ui-sortable-helper" ); + } else { + this.currentItem.show(); + } + + //Post deactivating events to containers + for ( var i = this.containers.length - 1; i >= 0; i-- ) { + this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) ); + if ( this.containers[ i ].containerCache.over ) { + this.containers[ i ]._trigger( "out", null, this._uiHash( this ) ); + this.containers[ i ].containerCache.over = 0; + } + } + + } + + if ( this.placeholder ) { + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, + // it unbinds ALL events from the original node! + if ( this.placeholder[ 0 ].parentNode ) { + this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); + } + if ( this.options.helper !== "original" && this.helper && + this.helper[ 0 ].parentNode ) { + this.helper.remove(); + } + + $.extend( this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + } ); + + if ( this.domPosition.prev ) { + $( this.domPosition.prev ).after( this.currentItem ); + } else { + $( this.domPosition.parent ).prepend( this.currentItem ); + } + } + + return this; + + }, + + serialize: function( o ) { + + var items = this._getItemsAsjQuery( o && o.connected ), + str = []; + o = o || {}; + + $( items ).each( function() { + var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" ) + .match( o.expression || ( /(.+)[\-=_](.+)/ ) ); + if ( res ) { + str.push( + ( o.key || res[ 1 ] + "[]" ) + + "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) ); + } + } ); + + if ( !str.length && o.key ) { + str.push( o.key + "=" ); + } + + return str.join( "&" ); + + }, + + toArray: function( o ) { + + var items = this._getItemsAsjQuery( o && o.connected ), + ret = []; + + o = o || {}; + + items.each( function() { + ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" ); + } ); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function( item ) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height, + l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height, + dyClick = this.offset.click.top, + dxClick = this.offset.click.left, + isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && + ( y1 + dyClick ) < b ), + isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && + ( x1 + dxClick ) < r ), + isOverElement = isOverElementHeight && isOverElementWidth; + + if ( this.options.tolerance === "pointer" || + this.options.forcePointerForContainers || + ( this.options.tolerance !== "pointer" && + this.helperProportions[ this.floating ? "width" : "height" ] > + item[ this.floating ? "width" : "height" ] ) + ) { + return isOverElement; + } else { + + return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half + x2 - ( this.helperProportions.width / 2 ) < r && // Left Half + t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half + y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function( item ) { + var verticalDirection, horizontalDirection, + isOverElementHeight = ( this.options.axis === "x" ) || + this._isOverAxis( + this.positionAbs.top + this.offset.click.top, item.top, item.height ), + isOverElementWidth = ( this.options.axis === "y" ) || + this._isOverAxis( + this.positionAbs.left + this.offset.click.left, item.left, item.width ), + isOverElement = isOverElementHeight && isOverElementWidth; + + if ( !isOverElement ) { + return false; + } + + verticalDirection = this._getDragVerticalDirection(); + horizontalDirection = this._getDragHorizontalDirection(); + + return this.floating ? + ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) + : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) ); + + }, + + _intersectsWithSides: function( item ) { + + var isOverBottomHalf = this._isOverAxis( this.positionAbs.top + + this.offset.click.top, item.top + ( item.height / 2 ), item.height ), + isOverRightHalf = this._isOverAxis( this.positionAbs.left + + this.offset.click.left, item.left + ( item.width / 2 ), item.width ), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if ( this.floating && horizontalDirection ) { + return ( ( horizontalDirection === "right" && isOverRightHalf ) || + ( horizontalDirection === "left" && !isOverRightHalf ) ); + } else { + return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) || + ( verticalDirection === "up" && !isOverBottomHalf ) ); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta !== 0 && ( delta > 0 ? "down" : "up" ); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta !== 0 && ( delta > 0 ? "right" : "left" ); + }, + + refresh: function( event ) { + this._refreshItems( event ); + this._setHandleClassName(); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor === String ? + [ options.connectWith ] : + options.connectWith; + }, + + _getItemsAsjQuery: function( connected ) { + + var i, j, cur, inst, + items = [], + queries = [], + connectWith = this._connectWith(); + + if ( connectWith && connected ) { + for ( i = connectWith.length - 1; i >= 0; i-- ) { + cur = $( connectWith[ i ], this.document[ 0 ] ); + for ( j = cur.length - 1; j >= 0; j-- ) { + inst = $.data( cur[ j ], this.widgetFullName ); + if ( inst && inst !== this && !inst.options.disabled ) { + queries.push( [ $.isFunction( inst.options.items ) ? + inst.options.items.call( inst.element ) : + $( inst.options.items, inst.element ) + .not( ".ui-sortable-helper" ) + .not( ".ui-sortable-placeholder" ), inst ] ); + } + } + } + } + + queries.push( [ $.isFunction( this.options.items ) ? + this.options.items + .call( this.element, null, { options: this.options, item: this.currentItem } ) : + $( this.options.items, this.element ) + .not( ".ui-sortable-helper" ) + .not( ".ui-sortable-placeholder" ), this ] ); + + function addItems() { + items.push( this ); + } + for ( i = queries.length - 1; i >= 0; i-- ) { + queries[ i ][ 0 ].each( addItems ); + } + + return $( items ); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" ); + + this.items = $.grep( this.items, function( item ) { + for ( var j = 0; j < list.length; j++ ) { + if ( list[ j ] === item.item[ 0 ] ) { + return false; + } + } + return true; + } ); + + }, + + _refreshItems: function( event ) { + + this.items = []; + this.containers = [ this ]; + + var i, j, cur, inst, targetData, _queries, item, queriesLength, + items = this.items, + queries = [ [ $.isFunction( this.options.items ) ? + this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) : + $( this.options.items, this.element ), this ] ], + connectWith = this._connectWith(); + + //Shouldn't be run the first time through due to massive slow-down + if ( connectWith && this.ready ) { + for ( i = connectWith.length - 1; i >= 0; i-- ) { + cur = $( connectWith[ i ], this.document[ 0 ] ); + for ( j = cur.length - 1; j >= 0; j-- ) { + inst = $.data( cur[ j ], this.widgetFullName ); + if ( inst && inst !== this && !inst.options.disabled ) { + queries.push( [ $.isFunction( inst.options.items ) ? + inst.options.items + .call( inst.element[ 0 ], event, { item: this.currentItem } ) : + $( inst.options.items, inst.element ), inst ] ); + this.containers.push( inst ); + } + } + } + } + + for ( i = queries.length - 1; i >= 0; i-- ) { + targetData = queries[ i ][ 1 ]; + _queries = queries[ i ][ 0 ]; + + for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) { + item = $( _queries[ j ] ); + + // Data for target checking (mouse manager) + item.data( this.widgetName + "-item", targetData ); + + items.push( { + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + } ); + } + } + + }, + + refreshPositions: function( fast ) { + + // Determine whether items are being displayed horizontally + this.floating = this.items.length ? + this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) : + false; + + //This has to be redone because due to the item being moved out/into the offsetParent, + // the offsetParent's position will change + if ( this.offsetParent && this.helper ) { + this.offset.parent = this._getParentOffset(); + } + + var i, item, t, p; + + for ( i = this.items.length - 1; i >= 0; i-- ) { + item = this.items[ i ]; + + //We ignore calculating positions of all connected containers when we're not over them + if ( item.instance !== this.currentContainer && this.currentContainer && + item.item[ 0 ] !== this.currentItem[ 0 ] ) { + continue; + } + + t = this.options.toleranceElement ? + $( this.options.toleranceElement, item.item ) : + item.item; + + if ( !fast ) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + p = t.offset(); + item.left = p.left; + item.top = p.top; + } + + if ( this.options.custom && this.options.custom.refreshContainers ) { + this.options.custom.refreshContainers.call( this ); + } else { + for ( i = this.containers.length - 1; i >= 0; i-- ) { + p = this.containers[ i ].element.offset(); + this.containers[ i ].containerCache.left = p.left; + this.containers[ i ].containerCache.top = p.top; + this.containers[ i ].containerCache.width = + this.containers[ i ].element.outerWidth(); + this.containers[ i ].containerCache.height = + this.containers[ i ].element.outerHeight(); + } + } + + return this; + }, + + _createPlaceholder: function( that ) { + that = that || this; + var className, + o = that.options; + + if ( !o.placeholder || o.placeholder.constructor === String ) { + className = o.placeholder; + o.placeholder = { + element: function() { + + var nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(), + element = $( "<" + nodeName + ">", that.document[ 0 ] ); + + that._addClass( element, "ui-sortable-placeholder", + className || that.currentItem[ 0 ].className ) + ._removeClass( element, "ui-sortable-helper" ); + + if ( nodeName === "tbody" ) { + that._createTrPlaceholder( + that.currentItem.find( "tr" ).eq( 0 ), + $( "", that.document[ 0 ] ).appendTo( element ) + ); + } else if ( nodeName === "tr" ) { + that._createTrPlaceholder( that.currentItem, element ); + } else if ( nodeName === "img" ) { + element.attr( "src", that.currentItem.attr( "src" ) ); + } + + if ( !className ) { + element.css( "visibility", "hidden" ); + } + + return element; + }, + update: function( container, p ) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - + // the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a + // class name is specified + if ( className && !o.forcePlaceholderSize ) { + return; + } + + //If the element doesn't have a actual height by itself (without styles coming + // from a stylesheet), it receives the inline height from the dragged item + if ( !p.height() ) { + p.height( + that.currentItem.innerHeight() - + parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) - + parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) ); + } + if ( !p.width() ) { + p.width( + that.currentItem.innerWidth() - + parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) - + parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) ); + } + } + }; + } + + //Create the placeholder + that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) ); + + //Append it after the actual current item + that.currentItem.after( that.placeholder ); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update( that, that.placeholder ); + + }, + + _createTrPlaceholder: function( sourceTr, targetTr ) { + var that = this; + + sourceTr.children().each( function() { + $( " ", that.document[ 0 ] ) + .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) + .appendTo( targetTr ); + } ); + }, + + _contactContainers: function( event ) { + var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, + floating, axis, + innermostContainer = null, + innermostIndex = null; + + // Get innermost container that intersects with item + for ( i = this.containers.length - 1; i >= 0; i-- ) { + + // Never consider a container that's located within the item itself + if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) { + continue; + } + + if ( this._intersectsWith( this.containers[ i ].containerCache ) ) { + + // If we've already found a container and it's more "inner" than this, then continue + if ( innermostContainer && + $.contains( + this.containers[ i ].element[ 0 ], + innermostContainer.element[ 0 ] ) ) { + continue; + } + + innermostContainer = this.containers[ i ]; + innermostIndex = i; + + } else { + + // container doesn't intersect. trigger "out" event if necessary + if ( this.containers[ i ].containerCache.over ) { + this.containers[ i ]._trigger( "out", event, this._uiHash( this ) ); + this.containers[ i ].containerCache.over = 0; + } + } + + } + + // If no intersecting containers found, return + if ( !innermostContainer ) { + return; + } + + // Move the item into the container if it's not there already + if ( this.containers.length === 1 ) { + if ( !this.containers[ innermostIndex ].containerCache.over ) { + this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); + this.containers[ innermostIndex ].containerCache.over = 1; + } + } else { + + // When entering a new container, we will find the item with the least distance and + // append our item near it + dist = 10000; + itemWithLeastDistance = null; + floating = innermostContainer.floating || this._isFloating( this.currentItem ); + posProperty = floating ? "left" : "top"; + sizeProperty = floating ? "width" : "height"; + axis = floating ? "pageX" : "pageY"; + + for ( j = this.items.length - 1; j >= 0; j-- ) { + if ( !$.contains( + this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] ) + ) { + continue; + } + if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) { + continue; + } + + cur = this.items[ j ].item.offset()[ posProperty ]; + nearBottom = false; + if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) { + nearBottom = true; + } + + if ( Math.abs( event[ axis ] - cur ) < dist ) { + dist = Math.abs( event[ axis ] - cur ); + itemWithLeastDistance = this.items[ j ]; + this.direction = nearBottom ? "up" : "down"; + } + } + + //Check if dropOnEmpty is enabled + if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) { + return; + } + + if ( this.currentContainer === this.containers[ innermostIndex ] ) { + if ( !this.currentContainer.containerCache.over ) { + this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() ); + this.currentContainer.containerCache.over = 1; + } + return; + } + + itemWithLeastDistance ? + this._rearrange( event, itemWithLeastDistance, null, true ) : + this._rearrange( event, null, this.containers[ innermostIndex ].element, true ); + this._trigger( "change", event, this._uiHash() ); + this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) ); + this.currentContainer = this.containers[ innermostIndex ]; + + //Update the placeholder + this.options.placeholder.update( this.currentContainer, this.placeholder ); + + this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); + this.containers[ innermostIndex ].containerCache.over = 1; + } + + }, + + _createHelper: function( event ) { + + var o = this.options, + helper = $.isFunction( o.helper ) ? + $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) : + ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem ); + + //Add the helper to the DOM if that didn't happen already + if ( !helper.parents( "body" ).length ) { + $( o.appendTo !== "parent" ? + o.appendTo : + this.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] ); + } + + if ( helper[ 0 ] === this.currentItem[ 0 ] ) { + this._storedCSS = { + width: this.currentItem[ 0 ].style.width, + height: this.currentItem[ 0 ].style.height, + position: this.currentItem.css( "position" ), + top: this.currentItem.css( "top" ), + left: this.currentItem.css( "left" ) + }; + } + + if ( !helper[ 0 ].style.width || o.forceHelperSize ) { + helper.width( this.currentItem.width() ); + } + if ( !helper[ 0 ].style.height || o.forceHelperSize ) { + helper.height( this.currentItem.height() ); + } + + return helper; + + }, + + _adjustOffsetFromHelper: function( obj ) { + if ( typeof obj === "string" ) { + obj = obj.split( " " ); + } + if ( $.isArray( obj ) ) { + obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 }; + } + if ( "left" in obj ) { + this.offset.click.left = obj.left + this.margins.left; + } + if ( "right" in obj ) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ( "top" in obj ) { + this.offset.click.top = obj.top + this.margins.top; + } + if ( "bottom" in obj ) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the + // following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the + // next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't + // the document, which means that the scroll is included in the initial calculation of the + // offset of the parent, and never recalculated upon drag + if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] && + $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + // This needs to be actually done for all browsers, since pageX/pageY includes this + // information with an ugly IE fix + if ( this.offsetParent[ 0 ] === this.document[ 0 ].body || + ( this.offsetParent[ 0 ].tagName && + this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) { + po = { top: 0, left: 0 }; + } + + return { + top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ), + left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 ) + }; + + }, + + _getRelativeOffset: function() { + + if ( this.cssPosition === "relative" ) { + var p = this.currentItem.position(); + return { + top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) + + this.scrollParent.scrollTop(), + left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) + + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ), + top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 ) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var ce, co, over, + o = this.options; + if ( o.containment === "parent" ) { + o.containment = this.helper[ 0 ].parentNode; + } + if ( o.containment === "document" || o.containment === "window" ) { + this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + o.containment === "document" ? + this.document.width() : + this.window.width() - this.helperProportions.width - this.margins.left, + ( o.containment === "document" ? + ( this.document.height() || document.body.parentNode.scrollHeight ) : + this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight + ) - this.helperProportions.height - this.margins.top + ]; + } + + if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) { + ce = $( o.containment )[ 0 ]; + co = $( o.containment ).offset(); + over = ( $( ce ).css( "overflow" ) !== "hidden" ); + + this.containment = [ + co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) + + ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left, + co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) + + ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top, + co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) - + ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) - + this.helperProportions.width - this.margins.left, + co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) - + ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) - + this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function( d, pos ) { + + if ( !pos ) { + pos = this.position; + } + var mod = d === "absolute" ? 1 : -1, + scroll = this.cssPosition === "absolute" && + !( this.scrollParent[ 0 ] !== this.document[ 0 ] && + $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? + this.offsetParent : + this.scrollParent, + scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); + + return { + top: ( + + // The absolute mouse position + pos.top + + + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.relative.top * mod + + + // The offsetParent's offset without borders (offset + border) + this.offset.parent.top * mod - + ( ( this.cssPosition === "fixed" ? + -this.scrollParent.scrollTop() : + ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod ) + ), + left: ( + + // The absolute mouse position + pos.left + + + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.relative.left * mod + + + // The offsetParent's offset without borders (offset + border) + this.offset.parent.left * mod - + ( ( this.cssPosition === "fixed" ? + -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : + scroll.scrollLeft() ) * mod ) + ) + }; + + }, + + _generatePosition: function( event ) { + + var top, left, + o = this.options, + pageX = event.pageX, + pageY = event.pageY, + scroll = this.cssPosition === "absolute" && + !( this.scrollParent[ 0 ] !== this.document[ 0 ] && + $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? + this.offsetParent : + this.scrollParent, + scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] && + this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) { + this.offset.relative = this._getRelativeOffset(); + } + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options + + if ( this.containment ) { + if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) { + pageX = this.containment[ 0 ] + this.offset.click.left; + } + if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) { + pageY = this.containment[ 1 ] + this.offset.click.top; + } + if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) { + pageX = this.containment[ 2 ] + this.offset.click.left; + } + if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) { + pageY = this.containment[ 3 ] + this.offset.click.top; + } + } + + if ( o.grid ) { + top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) / + o.grid[ 1 ] ) * o.grid[ 1 ]; + pageY = this.containment ? + ( ( top - this.offset.click.top >= this.containment[ 1 ] && + top - this.offset.click.top <= this.containment[ 3 ] ) ? + top : + ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ? + top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : + top; + + left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) / + o.grid[ 0 ] ) * o.grid[ 0 ]; + pageX = this.containment ? + ( ( left - this.offset.click.left >= this.containment[ 0 ] && + left - this.offset.click.left <= this.containment[ 2 ] ) ? + left : + ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ? + left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : + left; + } + + } + + return { + top: ( + + // The absolute mouse position + pageY - + + // Click offset (relative to the element) + this.offset.click.top - + + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.relative.top - + + // The offsetParent's offset without borders (offset + border) + this.offset.parent.top + + ( ( this.cssPosition === "fixed" ? + -this.scrollParent.scrollTop() : + ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) ) + ), + left: ( + + // The absolute mouse position + pageX - + + // Click offset (relative to the element) + this.offset.click.left - + + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.relative.left - + + // The offsetParent's offset without borders (offset + border) + this.offset.parent.left + + ( ( this.cssPosition === "fixed" ? + -this.scrollParent.scrollLeft() : + scrollIsRootNode ? 0 : scroll.scrollLeft() ) ) + ) + }; + + }, + + _rearrange: function( event, i, a, hardRefresh ) { + + a ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) : + i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ], + ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) ); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, + // if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var counter = this.counter; + + this._delay( function() { + if ( counter === this.counter ) { + + //Precompute after each DOM insertion, NOT on mousemove + this.refreshPositions( !hardRefresh ); + } + } ); + + }, + + _clear: function( event, noPropagation ) { + + this.reverting = false; + + // We delay all events that have to be triggered to after the point where the placeholder + // has been removed and everything else normalized again + var i, + delayedTriggers = []; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets + // reappended (see #4088) + if ( !this._noFinalSort && this.currentItem.parent().length ) { + this.placeholder.before( this.currentItem ); + } + this._noFinalSort = null; + + if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) { + for ( i in this._storedCSS ) { + if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) { + this._storedCSS[ i ] = ""; + } + } + this.currentItem.css( this._storedCSS ); + this._removeClass( this.currentItem, "ui-sortable-helper" ); + } else { + this.currentItem.show(); + } + + if ( this.fromOutside && !noPropagation ) { + delayedTriggers.push( function( event ) { + this._trigger( "receive", event, this._uiHash( this.fromOutside ) ); + } ); + } + if ( ( this.fromOutside || + this.domPosition.prev !== + this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] || + this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) { + + // Trigger update callback if the DOM position has changed + delayedTriggers.push( function( event ) { + this._trigger( "update", event, this._uiHash() ); + } ); + } + + // Check if the items Container has Changed and trigger appropriate + // events. + if ( this !== this.currentContainer ) { + if ( !noPropagation ) { + delayedTriggers.push( function( event ) { + this._trigger( "remove", event, this._uiHash() ); + } ); + delayedTriggers.push( ( function( c ) { + return function( event ) { + c._trigger( "receive", event, this._uiHash( this ) ); + }; + } ).call( this, this.currentContainer ) ); + delayedTriggers.push( ( function( c ) { + return function( event ) { + c._trigger( "update", event, this._uiHash( this ) ); + }; + } ).call( this, this.currentContainer ) ); + } + } + + //Post events to containers + function delayEvent( type, instance, container ) { + return function( event ) { + container._trigger( type, event, instance._uiHash( instance ) ); + }; + } + for ( i = this.containers.length - 1; i >= 0; i-- ) { + if ( !noPropagation ) { + delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) ); + } + if ( this.containers[ i ].containerCache.over ) { + delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) ); + this.containers[ i ].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if ( this.storedCursor ) { + this.document.find( "body" ).css( "cursor", this.storedCursor ); + this.storedStylesheet.remove(); + } + if ( this._storedOpacity ) { + this.helper.css( "opacity", this._storedOpacity ); + } + if ( this._storedZIndex ) { + this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex ); + } + + this.dragging = false; + + if ( !noPropagation ) { + this._trigger( "beforeStop", event, this._uiHash() ); + } + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, + // it unbinds ALL events from the original node! + this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); + + if ( !this.cancelHelperRemoval ) { + if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { + this.helper.remove(); + } + this.helper = null; + } + + if ( !noPropagation ) { + for ( i = 0; i < delayedTriggers.length; i++ ) { + + // Trigger all delayed events + delayedTriggers[ i ].call( this, event ); + } + this._trigger( "stop", event, this._uiHash() ); + } + + this.fromOutside = false; + return !this.cancelHelperRemoval; + + }, + + _trigger: function() { + if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) { + this.cancel(); + } + }, + + _uiHash: function( _inst ) { + var inst = _inst || this; + return { + helper: inst.helper, + placeholder: inst.placeholder || $( [] ), + position: inst.position, + originalPosition: inst.originalPosition, + offset: inst.positionAbs, + item: inst.currentItem, + sender: _inst ? _inst.element : null + }; + } + +} ); + + + +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an \n
\n
\n \n {{#param}}\n {{#@each}}\n \n {{/@each}}\n {{/param}}\n
\n {{/iframe}}\n {{^iframe}}\n
\n {{/iframe}}\n \n {{^disableResize}}\n
\n
\n
\n
\n
\n
\n
\n
\n {{/disableResize}}\n \n '},get:function(t,n,i){return ax5.mustache.render(e.tmpl[t].call(this,i),n)}}}(),function(){var e,t=ax5.ui,n=ax5.util;t.addClass({className:"toast"},function(){var i,a=this,r=0,o=null;this.instanceId=ax5.getGuid(),this.config={clickEventName:"click",theme:"default",width:300,icon:"",closeIcon:"",msg:"",lang:{ok:"ok",cancel:"cancel"},displayTime:3e3,animateTime:250,containerPosition:"bottom-left"},this.toastContainer=null,this.queue=[],i=this.config;var s=function(e,t){return e&&e.onStateChanged?e.onStateChanged.call(t,t):this.onStateChanged&&this.onStateChanged.call(t,t),e=null,t=null,!0},l=function(t,n){var i={toastId:t,theme:n.theme,icon:n.icon,msg:(n.msg||"").replace(/\n/g,"
"),btns:n.btns,closeIcon:n.closeIcon};try{return e.tmpl.get.call(this,"toastDisplay",i)}finally{t=null,i=null}},u=function(e,t){o&&clearTimeout(o);var u,c={width:e.width};if(e.id="ax5-toast-"+a.containerId+"-"+ ++r,jQuery("#"+e.id).get(0))return this;"bottom"==n.left(i.containerPosition,"-")?this.toastContainer.append(l(e.id,e)):this.toastContainer.prepend(l(e.id,e)),(u=jQuery("#"+e.id)).css({width:c.width}),e.toastBox=u,this.queue.push(e),s.call(this,e,{self:this,state:"open",toastId:e.id}),"push"===e.toastType?(setTimeout(function(){this.close(e,t)}.bind(this),i.displayTime),u.find("[data-ax-toast-btn]").on(i.clickEventName,function(n){d.call(this,n||window.event,e,u,t)}.bind(this))):"confirm"===e.toastType&&u.find("[data-ax-toast-btn]").on(i.clickEventName,function(n){d.call(this,n||window.event,e,u,t)}.bind(this)),c=null},d=function(e,t,i,a,r,o){if(r=n.findParentNode(e.target,function(e){if(e.getAttribute("data-ax-toast-btn"))return!0})){var s={key:o=r.getAttribute("data-ax-toast-btn"),value:t.btns?t.btns[o]:o,toastId:t.id,btn_target:r};t.btns&&t.btns[o].onClick?t.btns[o].onClick.call(s,o):"push"===t.toastType?(a&&a.call(s,o),this.close(t,a)):"confirm"===t.toastType&&(a&&a.call(s,o),this.close(t,a))}e=null,t=null,a=null,r=null,o=null};this.init=function(){this.onStateChanged=i.onStateChanged,a.containerId=ax5.getGuid();var e=[];i.zIndex&&e.push("z-index:"+i.zIndex),jQuery(document.body).append('
'),this.toastContainer=jQuery('[data-toast-container="'+a.containerId+'"]')},this.push=function(e,t){return a.containerId||this.init(),n.isString(e)&&(e={title:i.title,msg:e}),e.toastType="push",a.dialogConfig={},jQuery.extend(!0,a.dialogConfig,i,e),e=a.dialogConfig,u.call(this,e,t),e=null,t=null,this},this.confirm=function(e,t){return a.containerId||this.init(),n.isString(e)&&(e={title:i.title,msg:e}),e.toastType="confirm",a.dialogConfig={},jQuery.extend(!0,a.dialogConfig,i,e),void 0===(e=a.dialogConfig).btns&&(e.btns={ok:{label:i.lang.ok,theme:e.theme}}),u.call(this,e,t),e=null,t=null,this},this.close=function(e,t){void 0===e&&(e=n.last(this.queue));var a=e.toastBox;return a.addClass("push"==e.toastType?"removed":"destroy"),this.queue=n.filter(this.queue,function(){return e.id!=this.id}),setTimeout(function(){var n={toastId:e.id};a.remove(),t&&t.call(n),n={self:this,state:"close",toastId:e.id},s.call(this,e,n),0===this.queue.length&&(o&&clearTimeout(o),o=setTimeout(function(){0===this.queue.length&&(r=0)}.bind(this),3e3)),n=null,e=null,t=null,a=null}.bind(this),i.animateTime),this},this.main=function(){t.toast_instance=t.toast_instance||[],t.toast_instance.push(this),arguments&&n.isObject(arguments[0])&&this.setConfig(arguments[0])}.apply(this,arguments)}),e=ax5.ui.toast}(),function(){var e=ax5.ui.toast;e.tmpl={toastDisplay:function(e){return'\n
\n {{#icon}}\n
{{{.}}}
\n {{/icon}}\n
{{{msg}}}
\n {{#btns}}\n
\n
\n {{#@each}}\n \n {{/@each}}\n
\n
\n {{/btns}}\n {{^btns}}\n {{{closeIcon}}}\n {{/btns}}\n
\n
'},get:function(t,n,i){return ax5.mustache.render(e.tmpl[t].call(this,i),n)}}}(),function(){var e=ax5.ui,t=ax5.util,n=void 0;e.addClass({className:"calendar"},function(){var i=this,a=void 0,r=1;this.instanceId=ax5.getGuid(),this.target=null,this.selection=[],this.selectionMap={},this.selectableMap={},this.markerMap={},this.printedDay={start:"",end:""},this.config={clickEventName:"click",theme:"default",startOfWeek:0,mode:"day",dateFormat:"yyyy-MM-dd",displayDate:new Date,animateTime:100,dimensions:{controlHeight:"40",controlButtonWidth:"40",colHeadHeight:"30",itemPadding:2},lang:{yearHeading:"Choose the year",monthHeading:"Choose the month",yearTmpl:"%s",months:ax5.info.months||["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"],dayTmpl:"%s"},multipleSelect:!1,selectMode:"day",defaultMarkerTheme:"holiday",defaultPeriodTheme:"period"},a=this.config;var o=function(e,t){e&&e.onStateChanged?e.onStateChanged.call(t,t):this.onStateChanged&&this.onStateChanged.call(t,t),t=null},s=function(){var e,n,i=t.date(a.displayDate),r="",o="";return a.control&&("day"==a.mode||"d"==a.mode?(r=a.control.yearTmpl?a.control.yearTmpl.replace("%s",i.getFullYear()):i.getFullYear(),o=a.control.monthTmpl?a.control.monthTmpl.replace("%s",a.lang.months[i.getMonth()]):a.lang.months[i.getMonth()],this.$["control-display"].html(a.control.yearFirst?''+r+''+o+"":''+o+''+r+"")):"month"==a.mode||"m"==a.mode?(r=a.control.yearTmpl?a.control.yearTmpl.replace("%s",i.getFullYear()):i.getFullYear(),this.$["control-display"].html(''+r+"")):"year"!=a.mode&&"y"!=a.mode||(e=a.control.yearTmpl?a.control.yearTmpl.replace("%s",i.getFullYear()-10):i.getFullYear()-10,n=a.control.yearTmpl?a.control.yearTmpl.replace("%s",Number(i.getFullYear())+9):Number(i.getFullYear())+9,this.$["control-display"].html(e+" ~ "+n)),this.$["control-display"].find("[data-calendar-display]").on(a.clickEventName,function(e){var n,i=t.findParentNode(e.target,function(e){if(e.getAttribute("data-calendar-display"))return!0});i&&(n=i.getAttribute("data-calendar-display"),this.changeMode(n)),i=null,n=null}.bind(this))),i=null,r=null,o=null,e=null,n=null,this},l=function(e){var r,l,u,d,h,f,m=t.date(e),p=new Date(m.getFullYear(),m.getMonth(),1,12),g=a.displayDate,v=function(){var e=p.getDay();0==e&&(e=7),e-=a.startOfWeek;try{return t.date(p,{add:{d:-e}})}finally{e=null}}(),y=m.getMonth(),b={},x=this.$.body.width(),w=Math.floor(x*(6/7));for(a.dimensions.height&&(w=t.number(a.dimensions.height)-t.number(a.dimensions.colHeadHeight)),b.height=Math.floor(w/6)-2*t.number(a.dimensions.itemPadding)+"px",b["line-height"]=b.height,b.padding=t.cssNumber(a.dimensions.itemPadding),d={weekNames:[].concat(ax5.info.weekNames),list:[]},a.startOfWeek&&(d.weekNames=d.weekNames.concat(d.weekNames.slice(0,a.startOfWeek)).splice(a.startOfWeek)),d.weekNames.forEach(function(e){e.colHeadHeight=t.cssNumber(a.dimensions.colHeadHeight)}),r=v,l=0;l<6;){for(u=0;u<7;){a.startOfWeek;var k=""+t.date(r,{return:a.dateFormat}),_={row:l,col:u,isStartOfWeek:0==u,thisDate:""+k,thisDataLabel:a.lang.dayTmpl.replace("%s",r.getDate()),itemStyles:t.css(b),addClass:(f=void 0,f="",a.selectable?i.selectableMap[k]?f+=r.getMonth()==y?" live":"":f+=" disable":r.getMonth()==y&&(k==t.date(g,{return:"yyyyMMdd"})?f+=" focus":f+=" live",0==r.getDay()&&(f+=" sunday"),6==r.getDay()&&(f+=" saturday")),f+" "+(i.markerMap[k]?i.markerMap[k].theme||a.defaultMarkerTheme:"")+" "+(i.selectionMap[k]?"selected-day":""))};d.list.push(_),u++,r=t.date(r,{add:{d:1}}),k=null,_=null}l++}h=n.tmpl.get.call(this,"dayTmpl",d),this.$.body.html(h),this.$.body.find("[data-calendar-item-date]").on(a.clickEventName,function(e){e=e||window.event,c.call(i,e,"date"),t.stopEvent(e)}),this.printedDay={start:v,end:r},o.call(this,null,{self:this,action:"printDay",printedDay:this.printedDay}),s.call(this),m=null,p=null,g=null,v=null,r=null,y=null,b=null,l=null,u=null,x=null,w=null,d=null,h=null},u=function(e){var r,l,u,d,h,f,m=t.date(e),p=m.getMonth(),g={},v=this.$.body.width(),y=Math.floor(v*(6/7));for(a.dimensions.height&&(y=t.number(a.dimensions.height)-t.number(a.dimensions.colHeadHeight)),g.height=Math.floor(y/4)-2*t.number(a.dimensions.itemPadding)+"px",g["line-height"]=g.height,g.padding=t.cssNumber(a.dimensions.itemPadding),h={colHeadHeight:t.cssNumber(a.dimensions.colHeadHeight),colHeadLabel:a.lang.monthHeading,list:[]},d=0,u=0,r=0;r<4;){for(l=0;l<3;){var b={row:r,col:l,isStartOfRow:0==l,thisMonth:m.getFullYear()+"-"+t.setDigit(u+1,2)+"-01",thisMonthLabel:a.lang.months[u],itemStyles:t.css(g),addClass:(a.selectable?i.selectableMap[u]?"live":"disable":"live")+" "+(u==p?"focus":"")+" "+(i.markerMap[u]?i.markerMap[u].theme||a.defaultMarkerTheme:"")};h.list.push(b),u++,l++,b=null}r++}f=n.tmpl.get.call(this,"monthTmpl",h),this.$.body.html(f),this.$.body.find("[data-calendar-item-month]").on(a.clickEventName,function(e){e=e||window.event,c.call(i,e,"month"),t.stopEvent(e)}),this.printedDay={start:m.getFullYear()+"-"+t.setDigit(d+1,2),end:m.getFullYear()+"-"+t.setDigit(u,2)},o.call(this,null,{self:this,action:"printMonth",printedDay:this.printedDay}),s.call(this),m=null,p=null,g=null,r=null,l=null,u=null,d=null,v=null,y=null,h=null,f=null},d=function(e){var r,l,u,d,h,f,m=t.date(e),p=m.getFullYear(),g={},v=this.$.body.width(),y=Math.floor(v*(6/7));for(a.dimensions.height&&(y=t.number(a.dimensions.height)-t.number(a.dimensions.colHeadHeight)),g.height=Math.floor(y/5)-2*t.number(a.dimensions.itemPadding)+"px",g["line-height"]=g.height,g.padding=t.cssNumber(a.dimensions.itemPadding),h={colHeadHeight:t.cssNumber(a.dimensions.colHeadHeight),colHeadLabel:a.lang.yearHeading,list:[]},d=p-10,u=p-10,r=0;r<5;){for(l=0;l<4;){var b={row:r,col:l,isStartOfRow:0==l,thisYear:u+"-"+t.setDigit(m.getMonth()+1,2)+"-01",thisYearLabel:a.lang.yearTmpl.replace("%s",u),itemStyles:t.css(g),addClass:(a.selectable?i.selectableMap[u]?"live":"disable":"live")+" "+(u==p?"focus":"")+" "+(i.selectableMap[u]?i.selectableMap[u].theme||a.defaultMarkerTheme:"")};h.list.push(b),u++,l++,b=null}r++}f=n.tmpl.get.call(this,"yearTmpl",h),this.$.body.html(f),this.$.body.find("[data-calendar-item-year]").on(a.clickEventName,function(e){e=e||window.event,c.call(this,e,"year"),t.stopEvent(e)}),this.printedDay={start:d,end:u-1},o.call(this,null,{self:this,action:"printYear",printedDay:this.printedDay}),s.call(this),m=null,p=null,g=null,r=null,l=null,u=null,d=null,v=null,y=null,h=null,f=null},c=function(e,n,o,s){var l,u;n=n||"date",(o=t.findParentNode(e.target,function(e){if(e.getAttribute("data-calendar-item-"+n))return!0}))&&(s=o.getAttribute("data-calendar-item-"+n),l=t.date(s,{return:a.dateFormat}),u=!0,r=a.multipleSelect?t.isNumber(a.multipleSelect)?a.multipleSelect:2:1,a.selectable&&(i.selectableMap[l]||(u=!1)),"date"==n?u&&(i.selection.length>=r&&i.selection.splice(0,i.selection.length-(r-1)).forEach(function(e){i.$.body.find('[data-calendar-item-date="'+t.date(e,{return:a.dateFormat})+'"]').removeClass("selected-day")}),jQuery(o).addClass("selected-day"),i.selection.push(s),i.onClick&&i.onClick.call({self:this,date:s,target:this.target,dateElement:o})):"month"==n?"month"==a.selectMode?u&&(i.selection.length>=r&&i.selection.splice(0,i.selection.length-(r-1)).forEach(function(e){i.$.body.find('[data-calendar-item-month="'+t.date(e,{return:"yyyy-MM-dd"})+'"]').removeClass("selected-month")}),jQuery(o).addClass("selected-month"),i.selection.push(s),i.onClick&&i.onClick.call({self:this,date:s,target:this.target,dateElement:o})):i.changeMode("day",s):"year"==n&&("year"==a.selectMode?u&&(i.selection.length>=r&&i.selection.splice(0,i.selection.length-(r-1)).forEach(function(e){i.$.body.find('[data-calendar-item-year="'+t.date(e,{return:"yyyy-MM-dd"})+'"]').removeClass("selected-year")}),jQuery(o).addClass("selected-year"),i.selection.push(s),i.onClick&&i.onClick.call({self:this,date:s,target:this.target,dateElement:o})):i.changeMode("month",s))),n=null,o=null,s=null,l=null,u=null};this.init=function(){this.onStateChanged=a.onStateChanged,this.onClick=a.onClick,a.target||console.log(ax5.info.getError("ax5calendar","401","setConfig")),this.target=jQuery(a.target),a.displayDate=t.date(a.displayDate),this.target.html(function(){var e=jQuery.extend(!0,{},a,{controlCSS:{},controlButtonCSS:{}});e.controlButtonCSS.height=e.controlCSS.height=t.cssNumber(a.dimensions.controlHeight),e.controlButtonCSS["line-height"]=e.controlCSS["line-height"]=t.cssNumber(a.dimensions.controlHeight),e.controlButtonCSS.width=t.cssNumber(a.dimensions.controlHeight),e.controlCSS=t.css(e.controlCSS),e.controlButtonCSS=t.css(e.controlButtonCSS);try{return n.tmpl.get.call(this,"frameTmpl",e)}finally{e=null}}.call(this)),this.$={root:this.target.find('[data-calendar-els="root"]'),control:this.target.find('[data-calendar-els="control"]'),"control-display":this.target.find('[data-calendar-els="control-display"]'),body:this.target.find('[data-calendar-els="body"]')},a.control&&this.$.root.on(a.clickEventName,"[data-calendar-move]",function(e){(function(e,n,i){(n=t.findParentNode(e.target,function(e){if(e.getAttribute("data-calendar-move"))return!0}))&&(i=n.getAttribute("data-calendar-move"),"day"==a.mode||"d"==a.mode?(a.displayDate="left"==i?t.date(a.displayDate,{add:{m:-1}}):t.date(a.displayDate,{add:{m:1}}),l.call(this,a.displayDate)):"month"==a.mode||"m"==a.mode?(a.displayDate="left"==i?t.date(a.displayDate,{add:{y:-1}}):t.date(a.displayDate,{add:{y:1}}),u.call(this,a.displayDate)):"year"!=a.mode&&"y"!=a.mode||(a.displayDate="left"==i?t.date(a.displayDate,{add:{y:-10}}):t.date(a.displayDate,{add:{y:10}}),d.call(this,a.displayDate))),n=null,i=null}).call(this,e||window.event)}.bind(this)),a.selection&&this.setSelection(a.selection,!1),a.selectable&&this.setSelectable(a.selectable,!1),a.marker&&this.setMarker(a.marker,!1),setTimeout(function(){"day"===a.mode||"d"===a.mode?l.call(this,a.displayDate):"month"===a.mode||"m"===a.mode?u.call(this,a.displayDate):"year"!==a.mode&&"y"!==a.mode||d.call(this,a.displayDate)}.bind(this))},this.changeMode=function(e,t){return void 0!==t&&(a.displayDate=t),e&&(a.mode=e),this.$.body.removeClass("fadein").addClass("fadeout"),setTimeout(function(){"day"==a.mode||"d"==a.mode?l.call(this,a.displayDate):"month"==a.mode||"m"==a.mode?u.call(this,a.displayDate):"year"!=a.mode&&"y"!=a.mode||d.call(this,a.displayDate),this.$.body.removeClass("fadeout").addClass("fadein")}.bind(this),a.animateTime),this},this.setSelection=function(){i.selectionMap={};var e=function(e,n,r){return n={},t.isArray(e)?(i.selection=e=e.splice(0,r),e.forEach(function(e){t.isDate(e)&&(e=t.date(e,{return:a.dateFormat})),n[e]=!0}),n):n};return function(n,i){var o={};if(r=a.multipleSelect?t.isNumber(a.multipleSelect)?a.multipleSelect:2:1,a.selection=n){if(!t.isArray(n))return this;o=e(n,{},r)}return this.selectionMap=jQuery.extend({},o),!1!==i&&function(){setTimeout(function(){for(var e in this.selectionMap)this.$.body.find('[data-calendar-item-date="'+e+'"]').addClass("selected-day")}.bind(this))}.call(this),o=null,this}}(),this.getSelection=function(){return this.selection},this.setSelectable=function(){i.selectableMap={};var e={arr:function(e,n){return n={},t.isArray(e)?(e.forEach(function(e){t.isDate(e)&&(e=t.date(e,{return:a.dateFormat})),n[e]=!0}),n):n},obj:function(e,n){if(n={},t.isArray(e))return n;if(e.range)return n;for(var i in e)n[i]=e[i];return n},range:function(e,n){return n={},t.isArray(e)?n:e.range?(e.range.forEach(function(e){if(t.isDateFormat(e.from)&&t.isDateFormat(e.to))for(var i=t.date(e.from);i<=t.date(e.to);i.setDate(i.getDate()+1))n[t.date(i,{return:a.dateFormat})]=!0;else for(var r=e.from;r<=e.to;r++)n[r]=!0}),n):n}};return function(n,i){var r,o={};if(a.selectable=n)if(t.isArray(n))o=e.arr(n);else{for(r in e)if(n[r]){o=e[r](n);break}0===Object.keys(o).length&&(o=e.obj(n))}return this.selectableMap=o,!1!==i&&this.changeMode(),this}}(),this.setMarker=function(){i.markerMap={};var e={obj:function(e,n){if(n={},t.isArray(e))return n;if(e.range)return n;for(var i in e)n[i]=e[i];return e=null,n},range:function(e,n){return n={},t.isArray(e)?n:e.range?(e.range.forEach(function(e){if(t.isDateFormat(e.from)&&t.isDateFormat(e.to))for(var i=t.date(e.from);i<=t.date(e.to);i.setDate(i.getDate()+1))n[t.date(i,{return:a.dateFormat})]={theme:e.theme,label:e.label};else for(var r=e.from;r<=e.to;r++)n[r]={theme:e.theme,label:e.label}}),e=null,n):n}};return function(t,n){var i,r={};if(a.marker=t){for(i in e)if(t[i]){r=e[i](t);break}0===Object.keys(r).length&&(r=e.obj(t))}return this.markerMap=r,!1!==n&&function(){setTimeout(function(){if("day"===a.mode||"d"===a.mode)for(var e in this.markerMap)this.$.body.find('[data-calendar-item-date="'+e+'"]').addClass(this.markerMap[e].theme||a.defaultMarkerTheme)}.bind(this))}.call(this),this}}(),this.setPeriod=function(){i.periodMap={};var e=function(e,n){return n={},t.isArray(e)?n:e.range?(e.range.forEach(function(e){if(t.isDateFormat(e.from)&&t.isDateFormat(e.to))for(var i=new Date(t.date(e.from));i<=t.date(e.to);i.setDate(i.getDate()+1))i.getTime()==t.date(e.from).getTime()?n[t.date(i,{return:a.dateFormat})]={theme:e.theme||a.defaultPeriodTheme,label:e.fromLabel}:i.getTime()==t.date(e.to).getTime()?n[t.date(i,{return:a.dateFormat})]={theme:e.theme||a.defaultPeriodTheme,label:e.toLabel}:n[t.date(i,{return:a.dateFormat})]={theme:e.theme||a.defaultPeriodTheme}}),e=null,n):n};return function(t,n){var i={};return!1!==n&&function(){if("day"===a.mode||"d"===a.mode)for(var e in this.periodMap)this.$.body.find('[data-calendar-item-date="'+e+'"]').find(".addon-footer").empty(),this.$.body.find('[data-calendar-item-date="'+e+'"]').removeClass(this.periodMap[e].theme)}.call(this),(a.period=t)&&(i=e(t)),this.periodMap=i,!1!==n&&function(){setTimeout(function(){if("day"===a.mode||"d"===a.mode)for(var e in this.periodMap)this.periodMap[e].label&&this.$.body.find('[data-calendar-item-date="'+e+'"]').find(".addon-footer").html(this.periodMap[e].label),this.$.body.find('[data-calendar-item-date="'+e+'"]').addClass(this.periodMap[e].theme)}.bind(this))}.call(this),this}}(),this.main=function(){e.calendar_instance=e.calendar_instance||[],e.calendar_instance.push(this),arguments&&t.isObject(arguments[0])&&this.setConfig(arguments[0])}.apply(this,arguments)}),n=ax5.ui.calendar}(),function(){var e=ax5.ui.calendar;e.tmpl={frameTmpl:function(e){return'\n
\n {{#control}}\n
\n {{{left}}}\n
\n {{{right}}}\n
\n {{/control}}\n
\n
\n '},dayTmpl:function(e){return'\n \n \n \n {{#weekNames}}\n \n {{/weekNames}}\n \n \n \n \n {{#list}} \n {{#isStartOfWeek}}\n {{^@first}}\n \n \n {{/@first}}\n {{/isStartOfWeek}}\n \n {{/list}}\n \n \n
\n {{label}}\n
\n \n \n {{thisDataLabel}}\n \n \n
\n '},monthTmpl:function(e){return'\n \n \n \n \n \n \n \n \n {{#list}} \n {{#isStartOfRow}}\n {{^@first}}\n \n \n {{/@first}}\n {{/isStartOfRow}}\n \n {{/list}}\n \n \n
\n {{colHeadLabel}}\n
\n \n \n {{thisMonthLabel}}\n \n \n
\n '},yearTmpl:function(e){return'\n \n \n \n \n \n \n \n \n {{#list}} \n {{#isStartOfRow}}\n {{^@first}}\n \n \n {{/@first}}\n {{/isStartOfRow}}\n \n {{/list}}\n \n \n
\n {{colHeadLabel}}\n
\n \n \n {{thisYearLabel}}\n \n \n
\n '},get:function(t,n,i){return ax5.mustache.render(e.tmpl[t].call(this,i),n)}}}(),function(){var e=ax5.ui,t=ax5.util,n=void 0;e.addClass({className:"picker"},function(){var e,i=this;this.instanceId=ax5.getGuid(),this.config={clickEventName:"click",theme:"default",title:"",lang:{ok:"ok",cancel:"cancel"},animateTime:100,calendar:{multipleSelect:!1,control:{left:ax5.def.picker.date_leftArrow||"←",yearTmpl:ax5.def.picker.date_yearTmpl||"%s",monthTmpl:ax5.def.picker.date_monthTmpl||"%s",right:ax5.def.picker.date_rightArrow||"→",yearFirst:!0}},palette:{}},this.queue=[],this.activePicker=null,this.activePickerQueueIndex=-1,this.openTimer=null,this.closeTimer=null,e=this.config;var a,r,o,s,l=function(e,t){return e&&e.onStateChanged?e.onStateChanged.call(t,t):this.onStateChanged&&this.onStateChanged.call(t,t),!0},u=(a={focus:function(e,t){this.open(e)},click:function(e,t){this.open(e)}},r={"@fn":function(t,n){var i=this.queue[t],a=n.length,r={inputLength:a||1};a>1&&(r.btns={ok:{label:e.lang.ok,theme:e.theme}}),this.queue[t]=jQuery.extend(!0,r,i),r=null,a=null},date:function(t,n){var i=this.queue[t],a=i.content&&i.content.width||270,r=i.content&&i.content.margin||5,o=n.length,s={contentWidth:a*o+(o-1)*r,content:{width:a,margin:r},inputLength:o||1};o>1&&!i.btns&&(s.btns={ok:{label:e.lang.ok,theme:e.theme}}),this.queue[t]=jQuery.extend(!0,s,i),a=null,r=null,s=null,o=null},"secure-num":function(e,t){var n=this.queue[e],i=t.length,a={inputLength:i||1};this.queue[e]=jQuery.extend(!0,a,n),a=null,i=null},keyboard:function(e,t){var n=this.queue[e],i=t.length,a={inputLength:i||1};this.queue[e]=jQuery.extend(!0,a,n),a=null,i=null},numpad:function(e,t){var n=this.queue[e],i=t.length,a={inputLength:i||1};this.queue[e]=jQuery.extend(!0,a,n),a=null,i=null},color:function(n,i){var a=this.queue[n],r=a.content&&a.content.width||270,o=a.content&&a.content.margin||5,s=i.length,l={contentWidth:r*s+(s-1)*o,content:{width:r,margin:o},inputLength:s||1},u=a.$target.find('[data-ax5picker-color="preview"]');u.get(0)&&(u.css({"background-color":"#"+t.color(i.val()||"#000000").getHexValue()}),i.on("change",function(){u.css({"background-color":"#"+t.color(this.value||"#000000").getHexValue()})})),s>1&&!a.btns&&(l.btns={ok:{label:e.lang.ok,theme:e.theme}}),this.queue[n]=jQuery.extend(!0,l,a),r=null,o=null,l=null,s=null}},function(e){var n=this.queue[e],i=void 0;if(!n.content)return console.log(ax5.info.getError("ax5picker","501","bind")),this;if(i="INPUT"==n.$target.get(0).tagName.toUpperCase()?n.$target:n.$target.find("input[type]"),t.isFunction(n.content))r["@fn"].call(this,e,i);else for(var o in r)if(n.content.type==o){r[o].call(this,e,i);break}return i.unbind("focus.ax5picker").unbind("click.ax5picker").bind("focus.ax5picker",a.focus.bind(this,e)).bind("click.ax5picker",a.click.bind(this,e)),n.$target.find(".input-group-addon").unbind("click.ax5picker").bind("click.ax5picker",a.click.bind(this,e)),n.content.formatter&&ax5.ui.formatter&&i.ax5formatter(n.content.formatter),i=null,n=null,e=null,this}),d=function(e){if(!this.activePicker)return this;var t=this.queue[this.activePickerQueueIndex];e&&(this.activePicker.css({top:-999}),jQuery(document.body).append(this.activePicker)),setTimeout(function(){(function(t){var n,i,a,r,o=jQuery(window),s=jQuery(document.body);n=t.$target.offset(),i={width:t.$target.outerWidth(),height:t.$target.outerHeight()},a={winWidth:Math.max(o.width(),s.width()),winHeight:Math.max(o.height(),s.height()),width:this.activePicker.outerWidth(),height:this.activePicker.outerHeight()},t.direction&&""!==t.direction&&"auto"!==t.direction?r=t.direction:(r="top",n.top-a.height-12<0?r="top":n.top+i.height+a.height+12>a.winHeight&&(r="bottom")),e&&this.activePicker.addClass("direction-"+r);var l=function(){var e={left:0,top:0};switch(r){case"top":e.left=n.left+i.width/2-a.width/2,e.top=n.top+i.height+12;break;case"bottom":e.left=n.left+i.width/2-a.width/2,e.top=n.top-a.height-12;break;case"left":e.left=n.left+i.width+12,e.top=n.top-a.height/2+i.height/2;break;case"right":e.left=n.left-a.width-12,e.top=n.top-a.height/2+i.height/2}return e}();(function(){"top"!=r&&"bottom"!=r||(l.left<0?(l.left=12,this.activePickerArrow.css({left:n.left+i.width/2-l.left})):l.left+a.width>a.winWidth&&(l.left=a.winWidth-a.width-12,this.activePickerArrow.css({left:n.left+i.width/2-l.left})))}).call(this),this.activePicker.css(l)}).call(this,t)}.bind(this))},c=function(e){if(t.isString(e)||(e=jQuery(e).data("data-axpicker-id")),t.isString(e))return t.search(this.queue,function(){return this.id==e});console.log(ax5.info.getError("ax5picker","402","getQueIdx"))};this.init=function(){this.onStateChanged=e.onStateChanged},this.bind=function(n){var i={},a=void 0;return(n=jQuery.extend(!0,i,e,n)).target?(n.$target=jQuery(n.target),n.$target.get(0)?(n.id||(n.id=n.$target.data("data-axpicker-id")),n.id||(n.id="ax5-picker-"+ax5.getGuid(),n.$target.data("data-axpicker-id",n.id)),-1===(a=t.search(this.queue,function(){return this.id==n.id}))?(this.queue.push(n),u.call(this,this.queue.length-1)):(this.queue[a]=jQuery.extend(!0,{},this.queue[a],n),u.call(this,a)),i=null,a=null,this):(console.log(ax5.info.getError("ax5picker","401","bind")),this)):(console.log(ax5.info.getError("ax5picker","401","bind")),this)},this.setContentValue=(o={date:function(e,t,n){var i,a,r=[];return"INPUT"!==e.$target.get(0).tagName.toUpperCase()&&e.$target.find("input[type]").each(function(){r.push(this.value)}),0==t?(r.length>1&&""!==r[1]?ax5.util.dday(r[1],{today:r[0]})<0&&(a=n):a=n,a&&(e.pickerCalendar[1].ax5uiInstance.setSelection([a],!1).changeMode("d",a),this.setContentValue(e.id,1,a)),n):1==t?(r.length>1&&ax5.util.dday(r[1],{today:r[0]})<0&&(i=r[1]),i&&(e.pickerCalendar[0].ax5uiInstance.setSelection([i],!1).changeMode("d",i),this.setContentValue(e.id,0,i)),n):void 0}},function(e,n,a,r){var s=t.isNumber(e)?e:c.call(this,e),u=this.queue[s],d=void 0;if(r||(r={}),u){if((d="INPUT"==u.$target.get(0).tagName.toUpperCase()?u.$target:jQuery(u.$target.find("input[type]").get(n))).val(a),u.disableChangeTrigger){var h=u.$target.find('[data-ax5picker-color="preview"]');h.get(0)&&h.css({"background-color":a})}else d.trigger("change");u.inputLength>1&&o[u.content.type]&&(a=o[u.content.type].call(this,u,n,a));var f={self:i,state:"changeValue",item:u,inputIndex:n,value:a,values:[a]};"INPUT"!==u.$target.get(0).tagName.toUpperCase()&&(f.values=[],u.$target.find("input[type]").each(function(){f.values.push(this.value)})),l.call(this,u,f),1!=u.inputLength||r.doNotClose||this.close()}return u=null,e=null,n=null,a=null,this}),this.getContentValue=function(e,n){var i=t.isNumber(e)?e:c.call(this,e),a=this.queue[i];return a?("INPUT"==a.$target.get(0).tagName.toUpperCase()?a.$target:jQuery(a.$target.find("input[type]").get(n))).val():(a=null,e=null,n=null,this)},this.open=(s={"@fn":function(e,t){var n=this.queue[e];return n.content.call(n,function(e){t(e)}),!0},date:function(n){for(var a=this.queue[n],r=[],o=jQuery.extend({},e.calendar,{displayDate:new Date}),s="INPUT"==a.$target.get(0).tagName.toUpperCase()?a.$target:a.$target.find("input[type]"),l=0;l'),l');r.push('
'),a.pickerContent.html(r.join("")),a.pickerCalendar=[],a.pickerContent.find("[data-calendar-target]").each(function(){var e=this.getAttribute("data-calendar-target"),t=s.get(e).value,n=ax5.util.date(t),r={year:function(e){return ax5.util.date(e,{return:"yyyy"})},month:function(e){return ax5.util.date(e,{return:"yyyy-MM"})},day:function(e){return e}};o.displayDate=n,t&&(o.selection=[n]),(o=jQuery.extend(!0,o,a.content.config||{})).target=this,o.onClick=function(){i.setContentValue(a.id,e,r[o.selectMode||"day"](this.date))},a.pickerCalendar.push({itemId:a.id,inputIndex:e,ax5uiInstance:new ax5.ui.calendar(o)})})},"secure-num":function(e){for(var n=this.queue[e],a=[],r=0;r'),r');a.push('
'),n.pickerContent.html(a.join("")),n.pickerContent.find("[data-secure-num-target]").each(function(){var e=this.getAttribute("data-secure-num-target"),t=[];(function(e){var t,n,i;for(i=e.length;i;i-=1)t=Math.floor(Math.random()*i),n=e[i-1],e[i-1]=e[t],e[t]=n;return e})([0,1,2,3,4,5,6,7,8,9]).forEach(function(e){t.push('
'),t.push('"),t.push("
")}),[{label:"←",fn:"back"},{label:"C",fn:"clear"}].forEach(function(e){t.push('
'),t.push('"),t.push("
")}),t.push('
'),$(this).html(t.join("")).on("click","[data-secure-num-value]",function(){var t=this.getAttribute("data-secure-num-value"),a="INPUT"==n.$target.get(0).tagName.toUpperCase()?n.$target:jQuery(n.$target.find("input[type]").get(e)),r=a.val();"back"==t?a.val(r.substring(0,r.length-1)):"clear"==t?a.val(""):a.val(r+t),l.call(this,n,{self:i,state:"changeValue",item:n,value:a.val()})})})},keyboard:function(e){for(var n=this.queue[e],a=[],r=0;r'),r');a.push('
'),n.pickerContent.html(a.join(""));var o=[[{value:"`",shiftValue:"~"},{value:"1",shiftValue:"!"},{value:"2",shiftValue:"@"},{value:"3",shiftValue:"#"},{value:"4",shiftValue:"$"},{value:"5",shiftValue:"%"},{value:"6",shiftValue:"^"},{value:"7",shiftValue:"&"},{value:"8",shiftValue:"*"},{value:"9",shiftValue:"("},{value:"0",shiftValue:")"},{value:"-",shiftValue:"_"},{value:"=",shiftValue:"+"},{label:"←",fn:"back"}],[{value:"q",shiftValue:"Q"},{value:"w",shiftValue:"W"},{value:"e",shiftValue:"E"},{value:"r",shiftValue:"R"},{value:"t",shiftValue:"T"},{value:"y",shiftValue:"Y"},{value:"u",shiftValue:"U"},{value:"i",shiftValue:"I"},{value:"o",shiftValue:"O"},{value:"p",shiftValue:"P"},{value:"[",shiftValue:"{"},{value:"]",shiftValue:"}"},{value:"\\",shiftValue:"|"}],[{label:"Clear",fn:"clear"},{value:"a",shiftValue:"A"},{value:"s",shiftValue:"S"},{value:"d",shiftValue:"D"},{value:"f",shiftValue:"F"},{value:"g",shiftValue:"G"},{value:"h",shiftValue:"H"},{value:"j",shiftValue:"J"},{value:"k",shiftValue:"K"},{value:"l",shiftValue:"L"},{value:";",shiftValue:":"},{value:"'",shiftValue:'"'}],[{label:"Shift",fn:"shift"},{value:"z",shiftValue:"Z"},{value:"x",shiftValue:"X"},{value:"c",shiftValue:"C"},{value:"v",shiftValue:"V"},{value:"b",shiftValue:"B"},{value:"n",shiftValue:"N"},{value:"m",shiftValue:"M"},{value:",",shiftValue:"<"},{value:".",shiftValue:">"},{value:"/",shiftValue:"?"},{label:"Close",fn:"close"}]],s=function(e){var t=[];return o.forEach(function(i){t.push('
'),i.forEach(function(i){var a,r,o,s,l;i.fn?(a=i.fn,r=i.label,o=n.content.config.specialBtnWrapStyle,s=n.content.config.specialBtnTheme,l=n.content.config.specialBtnStyle):(r=a=e?i.shiftValue:i.value,o=n.content.config.btnWrapStyle,s=n.content.config.btnTheme,l=n.content.config.btnStyle),t.push('
'),t.push('"),t.push("
")}),t.push("
")}),t.join("")};n.pickerContent.find("[data-keyboard-target]").each(function(){var e=this.getAttribute("data-keyboard-target"),t=$(this),a=!1;t.html(s(a)).on("mousedown","[data-keyboard-value]",function(){var r=this.getAttribute("data-keyboard-value"),o="INPUT"==n.$target.get(0).tagName.toUpperCase()?n.$target:jQuery(n.$target.find("input[type]").get(e)),u=o.val();switch(r){case"back":o.val(u.substring(0,u.length-1));break;case"clear":o.val("");break;case"shift":return a=!a,t.html(s(a)),!1;case"close":return i.close(),!1;default:o.val(u+r)}l.call(this,n,{self:i,state:"changeValue",item:n,value:o.val()})})})},numpad:function(e){for(var n=this.queue[e],a=[],r=0;r'),r');a.push('
'),n.pickerContent.html(a.join("")),n.pickerContent.find("[data-numpad-target]").each(function(){var e=this.getAttribute("data-numpad-target"),t=[];(n.content.config.keyArray||[{value:"7"},{value:"8"},{value:"9"},{label:"BS",fn:"back"},{value:"4"},{value:"5"},{value:"6"},{label:"CLS",fn:"clear"},{value:"1"},{value:"2"},{value:"3"},{value:""},{value:"."},{value:"0"},{value:""},{label:"OK",fn:"enter"}]).forEach(function(e){var i=void 0,a=void 0,r=void 0,o=void 0,s=void 0;e.fn?(i=e.fn,a=e.label,o=n.content.config.specialBtnTheme,r=n.content.config.specialBtnWrapStyle,s=n.content.config.specialBtnStyle):(a=i=e.value,o=i?n.content.config.btnTheme:"",r=n.content.config.btnWrapStyle,s=n.content.config.btnStyle),t.push('
'),t.push('"),t.push("
")}),t.push('
'),$(this).html(t.join("")).on("mousedown","[data-numpad-value]",function(){var t=this.getAttribute("data-numpad-value"),a="INPUT"==n.$target.get(0).tagName.toUpperCase()?n.$target:jQuery(n.$target.find("input[type]").get(e)),r=a.val(),o="";switch(t){case"back":o="changeValue",a.val(r.substring(0,r.length-1));break;case"clear":o="changeValue",a.val("");break;case"enter":return i.close(n,"enter"),!1;case"close":return i.close(),!1;default:o="changeValue",a.val(r+t)}l.call(this,n,{self:i,state:o,item:n,value:a.val()})})})},color:function(n){for(var a=this.queue[n],r=[],o=jQuery.extend({},e.palette),s="INPUT"==a.$target.get(0).tagName.toUpperCase()?a.$target:a.$target.find("input[type]"),l=0;l'),l');r.push('
'),a.pickerContent.html(r.join("")),a.pickerPalette=[],a.pickerContent.find("[data-palette-target]").each(function(){var e=this.getAttribute("data-palette-target"),t=s.get(e).value;o.selectedColor=t,(o=jQuery.extend(!0,o,a.content.config||{})).target=this,o.onClick=function(t){i.setContentValue(a.id,e,t)},o.onUpdateColor=function(t){i.setContentValue(a.id,e,t,{doNotClose:!0})},a.pickerPalette.push({itemId:a.id,inputIndex:e,ax5uiInstance:new ax5.ui.palette(o)})})}},function(i,a){var r=t.isNumber(i)?i:c.call(this,i),o=this.queue[r];return this.openTimer&&clearTimeout(this.openTimer),this.activePicker?this.activePickerQueueIndex==r?this:a>2?this:(this.close(),this.openTimer=setTimeout(function(){this.open(r,(a||0)+1)}.bind(this),e.animateTime),this):(this.activePicker=jQuery(n.tmpl.get.call(this,"pickerTmpl",o)),this.activePickerArrow=this.activePicker.find(".ax-picker-arrow"),this.activePickerQueueIndex=r,o.pickerContent=this.activePicker.find('[data-picker-els="content"]'),t.isFunction(o.content)?(o.pickerContent.html("Loading.."),s["@fn"].call(this,r,function(e){o.pickerContent.html(e)})):o.content.type in s&&s[o.content.type].call(this,r),this.activePicker.find("[data-picker-btn]").on(e.clickEventName,function(e){(function(e,n){if(e.srcElement&&(e.target=e.srcElement),n=t.findParentNode(e.target,function(e){if(e.getAttribute("data-picker-btn"))return!0})){var i=this.queue[this.activePickerQueueIndex],a=n.getAttribute("data-picker-btn");if(i.btns&&i.btns[a].onClick){var r={key:a,value:i.btns[a],self:this,item:i};i.btns[a].onClick.call(r,a)}else this.close()}}).call(this,e||window.event,r)}.bind(this)),d.call(this,"append"),jQuery(window).bind("resize.ax5picker",function(){d.call(this)}.bind(this)),jQuery(window).bind("keyup.ax5picker",function(e){e=e||window.event,function(e){e.keyCode==ax5.info.eventKeys.ESC&&this.close()}.call(this,e),t.stopEvent(e)}.bind(this)),jQuery(window).bind("click.ax5picker",function(e){e=e||window.event,function(e,n){if(!this.activePicker)return this;var i=this.queue[this.activePickerQueueIndex];return t.findParentNode(e.target,function(e){return!!e.getAttribute("data-picker-els")||i.$target.get(0)==e||void 0})?this:(this.close(),this)}.call(this,e),t.stopEvent(e)}.bind(this)),l.call(this,o,{self:this,state:"open",item:o}),this)}),this.close=function(t,n){return this.closeTimer&&clearTimeout(this.closeTimer),this.activePicker?(t=this.queue[this.activePickerQueueIndex],this.activePicker.addClass("destroy"),jQuery(window).unbind("resize.ax5picker"),jQuery(window).unbind("click.ax5picker"),jQuery(window).unbind("keyup.ax5picker"),this.closeTimer=setTimeout(function(){this.activePicker&&this.activePicker.remove(),this.activePicker=null,this.activePickerQueueIndex=-1,l.call(this,t,{self:this,state:n||"close"})}.bind(this),e.animateTime),this):this},this.main=function(){arguments&&t.isObject(arguments[0])&&this.setConfig(arguments[0])}.apply(this,arguments)}),n=ax5.ui.picker}(),function(){var e=ax5.ui.picker;ax5.util;e.tmpl={pickerTmpl:function(){return'\n
\n {{#title}}\n
{{title}}
\n {{/title}}\n
\n
\n {{#btns}}\n
\n {{#btns}}\n {{#@each}}\n \n {{/@each}}\n {{/btns}}\n
\n {{/btns}}\n
\n
\n
\n'},get:function(t,n,i){return ax5.mustache.render(e.tmpl[t].call(this,i),n)}}}(),ax5&&ax5.ui&&ax5.ui.picker&&(ax5.ui.picker_instance=new ax5.ui.picker,jQuery.fn.ax5picker=function(e){if(ax5.util.isString(e))switch(e){case"open":return ax5.ui.picker_instance.open(this);case"close":return ax5.ui.picker_instance.close(this);case"setValue":return ax5.ui.picker_instance.setContentValue(this,arguments[1],arguments[2]);default:return this}else void 0===e&&(e={}),jQuery.each(this,function(){var t={target:this};e=jQuery.extend(!0,e,t),ax5.ui.picker_instance.bind(e)});return this}),function(){"use strict";var e,t,n,i,a;e=function(e,t){return"string"==typeof e&&"string"==typeof t&&e.toLowerCase()===t.toLowerCase()},t=function(e,n,i){var a=i||"0",r=e.toString();return r.lengths?"20":"19")+o):s,m=!0;break;case"m":case"n":case"M":case"F":if(isNaN(s)){if(!((l=f.getMonth(o))>0))return null;v.month=l}else{if(!(s>=1&&12>=s))return null;v.month=s}m=!0;break;case"d":case"j":if(!(s>=1&&31>=s))return null;v.day=s,m=!0;break;case"g":case"h":if(h=a[u=i.indexOf("a")>-1?i.indexOf("a"):i.indexOf("A")>-1?i.indexOf("A"):-1],u>-1)d=e(h,g.meridiem[0])?0:e(h,g.meridiem[1])?12:-1,s>=1&&12>=s&&d>-1?v.hour=s+d-1:s>=0&&23>=s&&(v.hour=s);else{if(!(s>=0&&23>=s))return null;v.hour=s}p=!0;break;case"G":case"H":if(!(s>=0&&23>=s))return null;v.hour=s,p=!0;break;case"i":if(!(s>=0&&59>=s))return null;v.min=s,p=!0;break;case"s":if(!(s>=0&&59>=s))return null;v.sec=s,p=!0}if(!0===m&&v.year&&v.month&&v.day)v.date=new Date(v.year,v.month-1,v.day,v.hour,v.min,v.sec,0);else{if(!0!==p)return null;v.date=new Date(0,0,0,v.hour,v.min,v.sec,0)}return v.date},guessDate:function(e,t){if("string"!=typeof e)return e;var n,i,a,r,o,s,l=e.replace(this.separators,"\0").split("\0"),u=t.match(this.validParts),d=new Date,c=0;if(!/^[djmn]/g.test(u[0]))return e;for(a=0;a(n=o.length)?n:4,!(i=parseInt(4>n?i.toString().substr(0,4-n)+o:o.substr(0,4))))return null;d.setFullYear(i);break;case 3:d.setHours(s);break;case 4:d.setMinutes(s);break;case 5:d.setSeconds(s)}(r=o.substr(c)).length>0&&l.splice(a+1,0,r)}return d},parseFormat:function(e,n){var i,a=this,r=a.dateSettings,o=/\\?(.?)/gi,s=function(e,t){return i[e]?i[e]():t};return i={d:function(){return t(i.j(),2)},D:function(){return r.daysShort[i.w()]},j:function(){return n.getDate()},l:function(){return r.days[i.w()]},N:function(){return i.w()||7},w:function(){return n.getDay()},z:function(){var e=new Date(i.Y(),i.n()-1,i.j()),t=new Date(i.Y(),0,1);return Math.round((e-t)/864e5)},W:function(){var e=new Date(i.Y(),i.n()-1,i.j()-i.N()+3),n=new Date(e.getFullYear(),0,4);return t(1+Math.round((e-n)/864e5/7),2)},F:function(){return r.months[n.getMonth()]},m:function(){return t(i.n(),2)},M:function(){return r.monthsShort[n.getMonth()]},n:function(){return n.getMonth()+1},t:function(){return new Date(i.Y(),i.n(),0).getDate()},L:function(){var e=i.Y();return e%4==0&&e%100!=0||e%400==0?1:0},o:function(){var e=i.n(),t=i.W();return i.Y()+(12===e&&9>t?1:1===e&&t>9?-1:0)},Y:function(){return n.getFullYear()},y:function(){return i.Y().toString().slice(-2)},a:function(){return i.A().toLowerCase()},A:function(){var e=i.G()<12?0:1;return r.meridiem[e]},B:function(){var e=3600*n.getUTCHours(),i=60*n.getUTCMinutes(),a=n.getUTCSeconds();return t(Math.floor((e+i+a+3600)/86.4)%1e3,3)},g:function(){return i.G()%12||12},G:function(){return n.getHours()},h:function(){return t(i.g(),2)},H:function(){return t(i.G(),2)},i:function(){return t(n.getMinutes(),2)},s:function(){return t(n.getSeconds(),2)},u:function(){return t(1e3*n.getMilliseconds(),6)},e:function(){return/\((.*)\)/.exec(String(n))[1]||"Coordinated Universal Time"},I:function(){return new Date(i.Y(),0)-Date.UTC(i.Y(),0)!=new Date(i.Y(),6)-Date.UTC(i.Y(),6)?1:0},O:function(){var e=n.getTimezoneOffset(),i=Math.abs(e);return(e>0?"-":"+")+t(100*Math.floor(i/60)+i%60,4)},P:function(){var e=i.O();return e.substr(0,3)+":"+e.substr(3,2)},T:function(){return(String(n).match(a.tzParts)||[""]).pop().replace(a.tzClip,"")||"UTC"},Z:function(){return 60*-n.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(o,s)},r:function(){return"D, d M Y H:i:s O".replace(o,s)},U:function(){return n.getTime()/1e3||0}},s(e,e)},formatDate:function(e,t){var n,i,a,r,o,s=this,l="";if("string"==typeof e&&!(e=s.parseDate(e,t)))return null;if(e instanceof Date){for(a=t.length,n=0;a>n;n++)"S"!==(o=t.charAt(n))&&"\\"!==o&&(n>0&&"\\"===t.charAt(n-1)?l+=o:(r=s.parseFormat(o,e),n!==a-1&&s.intParts.test(o)&&"S"===t.charAt(n+1)&&(i=parseInt(r)||0,r+=s.dateSettings.ordinal(i)),l+=r));return l}return""}}}();var datetimepickerFactory=function(e){"use strict";var t={i18n:{ar:{months:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],dayOfWeekShort:["ن","ث","ع","خ","ج","س","ح"],dayOfWeek:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"]},ro:{months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],dayOfWeekShort:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],dayOfWeek:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"]},id:{months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],dayOfWeekShort:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],dayOfWeek:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},is:{months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],dayOfWeekShort:["Sun","Mán","Þrið","Mið","Fim","Fös","Lau"],dayOfWeek:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"]},bg:{months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],dayOfWeekShort:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"]},fa:{months:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],dayOfWeekShort:["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayOfWeek:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"]},ru:{months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],dayOfWeekShort:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"]},uk:{months:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],dayOfWeekShort:["Ндл","Пнд","Втр","Срд","Чтв","Птн","Сбт"],dayOfWeek:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"]},en:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},el:{months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],dayOfWeekShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayOfWeek:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"]},de:{months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],dayOfWeekShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayOfWeek:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},nl:{months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],dayOfWeekShort:["zo","ma","di","wo","do","vr","za"],dayOfWeek:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},tr:{months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],dayOfWeekShort:["Paz","Pts","Sal","Çar","Per","Cum","Cts"],dayOfWeek:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},fr:{months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],dayOfWeekShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayOfWeek:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},es:{months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],dayOfWeekShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],dayOfWeek:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"]},th:{months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],dayOfWeekShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayOfWeek:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"]},pl:{months:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],dayOfWeekShort:["nd","pn","wt","śr","cz","pt","sb"],dayOfWeek:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"]},pt:{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},ch:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"]},se:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},km:{months:["មករា​","កុម្ភៈ","មិនា​","មេសា​","ឧសភា​","មិថុនា​","កក្កដា​","សីហា​","កញ្ញា​","តុលា​","វិច្ឆិកា","ធ្នូ​"],dayOfWeekShort:["អាទិ​","ច័ន្ទ​","អង្គារ​","ពុធ​","ព្រហ​​","សុក្រ​","សៅរ៍"],dayOfWeek:["អាទិត្យ​","ច័ន្ទ​","អង្គារ​","ពុធ​","ព្រហស្បតិ៍​","សុក្រ​","សៅរ៍"]},kr:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},it:{months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayOfWeek:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]},da:{months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},no:{months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"]},ja:{months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeekShort:["日","月","火","水","木","金","土"],dayOfWeek:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"]},vi:{months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayOfWeekShort:["CN","T2","T3","T4","T5","T6","T7"],dayOfWeek:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"]},sl:{months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],dayOfWeekShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayOfWeek:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},cs:{months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],dayOfWeekShort:["Ne","Po","Út","St","Čt","Pá","So"]},hu:{months:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],dayOfWeekShort:["Va","Hé","Ke","Sze","Cs","Pé","Szo"],dayOfWeek:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"]},az:{months:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],dayOfWeekShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayOfWeek:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"]},bs:{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ca:{months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],dayOfWeekShort:["Dg","Dl","Dt","Dc","Dj","Dv","Ds"],dayOfWeek:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"]},"en-GB":{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},et:{months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],dayOfWeekShort:["P","E","T","K","N","R","L"],dayOfWeek:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"]},eu:{months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],dayOfWeekShort:["Ig.","Al.","Ar.","Az.","Og.","Or.","La."],dayOfWeek:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"]},fi:{months:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],dayOfWeekShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayOfWeek:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},gl:{months:["Xan","Feb","Maz","Abr","Mai","Xun","Xul","Ago","Set","Out","Nov","Dec"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Xov","Ven","Sab"],dayOfWeek:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"]},hr:{months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ko:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},lt:{months:["Sausio","Vasario","Kovo","Balandžio","Gegužės","Birželio","Liepos","Rugpjūčio","Rugsėjo","Spalio","Lapkričio","Gruodžio"],dayOfWeekShort:["Sek","Pir","Ant","Tre","Ket","Pen","Šeš"],dayOfWeek:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"]},lv:{months:["Janvāris","Februāris","Marts","Aprīlis ","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],dayOfWeekShort:["Sv","Pr","Ot","Tr","Ct","Pk","St"],dayOfWeek:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"]},mk:{months:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],dayOfWeekShort:["нед","пон","вто","сре","чет","пет","саб"],dayOfWeek:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"]},mn:{months:["1-р сар","2-р сар","3-р сар","4-р сар","5-р сар","6-р сар","7-р сар","8-р сар","9-р сар","10-р сар","11-р сар","12-р сар"],dayOfWeekShort:["Дав","Мяг","Лха","Пүр","Бсн","Бям","Ням"],dayOfWeek:["Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба","Ням"]},"pt-BR":{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},sk:{months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],dayOfWeekShort:["Ne","Po","Ut","St","Št","Pi","So"],dayOfWeek:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},sq:{months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],dayOfWeekShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],dayOfWeek:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"]},"sr-YU":{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sre","čet","Pet","Sub"],dayOfWeek:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"]},sr:{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],dayOfWeekShort:["нед","пон","уто","сре","чет","пет","суб"],dayOfWeek:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"]},sv:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayOfWeek:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"]},"zh-TW":{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},zh:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},ug:{months:["1-ئاي","2-ئاي","3-ئاي","4-ئاي","5-ئاي","6-ئاي","7-ئاي","8-ئاي","9-ئاي","10-ئاي","11-ئاي","12-ئاي"],dayOfWeek:["يەكشەنبە","دۈشەنبە","سەيشەنبە","چارشەنبە","پەيشەنبە","جۈمە","شەنبە"]},he:{months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],dayOfWeekShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayOfWeek:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"]},hy:{months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],dayOfWeekShort:["Կի","Երկ","Երք","Չոր","Հնգ","Ուրբ","Շբթ"],dayOfWeek:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"]},kg:{months:["Үчтүн айы","Бирдин айы","Жалган Куран","Чын Куран","Бугу","Кулжа","Теке","Баш Оона","Аяк Оона","Тогуздун айы","Жетинин айы","Бештин айы"],dayOfWeekShort:["Жек","Дүй","Шей","Шар","Бей","Жум","Ише"],dayOfWeek:["Жекшемб","Дүйшөмб","Шейшемб","Шаршемб","Бейшемби","Жума","Ишенб"]},rm:{months:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],dayOfWeekShort:["Du","Gli","Ma","Me","Gie","Ve","So"],dayOfWeek:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"]},ka:{months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],dayOfWeekShort:["კვ","ორშ","სამშ","ოთხ","ხუთ","პარ","შაბ"],dayOfWeek:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"]}},ownerDocument:document,contentWindow:window,value:"",rtl:!1,format:"Y/m/d H:i",formatTime:"H:i",formatDate:"Y/m/d",startDate:!1,step:60,monthChangeSpinner:!0,closeOnDateSelect:!1,closeOnTimeSelect:!0,closeOnWithoutClick:!0,closeOnInputClick:!0,openOnFocus:!0,timepicker:!0,datepicker:!0,weeks:!1,defaultTime:!1,defaultDate:!1,minDate:!1,maxDate:!1,minTime:!1,maxTime:!1,minDateTime:!1,maxDateTime:!1,allowTimes:[],opened:!1,initTime:!0,inline:!1,theme:"",touchMovedThreshold:5,onSelectDate:function(){},onSelectTime:function(){},onChangeMonth:function(){},onGetWeekOfYear:function(){},onChangeYear:function(){},onChangeDateTime:function(){},onShow:function(){},onClose:function(){},onGenerate:function(){},withoutCopyright:!0,inverseButton:!1,hours12:!1,next:"xdsoft_next",prev:"xdsoft_prev",dayOfWeekStart:0,parentID:"body",timeHeightInTimePicker:25,timepickerScrollbar:!0,todayButton:!0,prevButton:!0,nextButton:!0,defaultSelect:!0,scrollMonth:!0,scrollTime:!0,scrollInput:!0,lazyInit:!1,mask:!1,validateOnBlur:!0,allowBlank:!0,yearStart:1950,yearEnd:2050,monthStart:0,monthEnd:11,style:"",id:"",fixed:!1,roundTime:"round",className:"",weekends:[],highlightedDates:[],highlightedPeriods:[],allowDates:[],allowDateRe:null,disabledDates:[],disabledWeekDays:[],yearOffset:0,beforeShowDay:null,enterLikeTab:!0,showApplyButton:!1},n=null,i=null,a="en",r={meridiem:["AM","PM"]},o=function(){var o=t.i18n[a],s={days:o.dayOfWeek,daysShort:o.dayOfWeekShort,months:o.months,monthsShort:e.map(o.months,function(e){return e.substring(0,3)})};"function"==typeof DateFormatter&&(n=i=new DateFormatter({dateSettings:e.extend({},r,s)}))},s={moment:{default_options:{format:"YYYY/MM/DD HH:mm",formatDate:"YYYY/MM/DD",formatTime:"HH:mm"},formatter:{parseDate:function(e,t){if(u(t))return i.parseDate(e,t);var n=moment(e,t);return!!n.isValid()&&n.toDate()},formatDate:function(e,t){return u(t)?i.formatDate(e,t):moment(e).format(t)},formatMask:function(e){return e.replace(/Y{4}/g,"9999").replace(/Y{2}/g,"99").replace(/M{2}/g,"19").replace(/D{2}/g,"39").replace(/H{2}/g,"29").replace(/m{2}/g,"59").replace(/s{2}/g,"59")}}}};e.datetimepicker={setLocale:function(e){var n=t.i18n[e]?e:"en";a!==n&&(a=n,o())},setDateFormatter:function(i){if("string"==typeof i&&s.hasOwnProperty(i)){var a=s[i];e.extend(t,a.default_options),n=a.formatter}else n=i}};var l={RFC_2822:"D, d M Y H:i:s O",ATOM:"Y-m-dTH:i:sP",ISO_8601:"Y-m-dTH:i:sO",RFC_822:"D, d M y H:i:s O",RFC_850:"l, d-M-y H:i:s T",RFC_1036:"D, d M y H:i:s O",RFC_1123:"D, d M Y H:i:s O",RSS:"D, d M Y H:i:s O",W3C:"Y-m-dTH:i:sP"},u=function(e){return-1!==Object.values(l).indexOf(e)};function d(e,t,n){this.date=e,this.desc=t,this.style=n}e.extend(e.datetimepicker,l),o(),window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(-([a-z]))/g;return"float"===t&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(e,t,n){return n.toUpperCase()})),e.currentStyle[t]||null},this}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,t){var n,i;for(n=t||0,i=this.length;n'),s=e('
'),o.append(s),l.addClass("xdsoft_scroller_box").append(o),v=function(e){var t=u(e).y-h+g;t<0&&(t=0),t+s[0].offsetHeight>m&&(t=m-s[0].offsetHeight),l.trigger("scroll_element.xdsoft_scroller",[d?t/d:0])},s.on("touchstart.xdsoft_scroller mousedown.xdsoft_scroller",function(i){a||l.trigger("resize_scroll.xdsoft_scroller",[n]),h=u(i).y,g=parseInt(s.css("margin-top"),10),m=o[0].offsetHeight,"mousedown"===i.type||"touchstart"===i.type?(t.ownerDocument&&e(t.ownerDocument.body).addClass("xdsoft_noselect"),e([t.ownerDocument.body,t.contentWindow]).on("touchend mouseup.xdsoft_scroller",function n(){e([t.ownerDocument.body,t.contentWindow]).off("touchend mouseup.xdsoft_scroller",n).off("mousemove.xdsoft_scroller",v).removeClass("xdsoft_noselect")}),e(t.ownerDocument.body).on("mousemove.xdsoft_scroller",v)):(p=!0,i.stopPropagation(),i.preventDefault())}).on("touchmove",function(e){p&&(e.preventDefault(),v(e))}).on("touchend touchcancel",function(){p=!1,g=0}),l.on("scroll_element.xdsoft_scroller",function(e,t){a||l.trigger("resize_scroll.xdsoft_scroller",[t,!0]),t=t>1?1:t<0||isNaN(t)?0:t,s.css("margin-top",d*t),setTimeout(function(){i.css("marginTop",-parseInt((i[0].offsetHeight-a)*t,10))},10)}).on("resize_scroll.xdsoft_scroller",function(e,t,n){var u,c;a=l[0].clientHeight,r=i[0].offsetHeight,c=(u=a/r)*o[0].offsetHeight,u>1?s.hide():(s.show(),s.css("height",parseInt(c>10?c:10,10)),d=o[0].offsetHeight-s[0].offsetHeight,!0!==n&&l.trigger("scroll_element.xdsoft_scroller",[t||Math.abs(parseInt(i.css("marginTop"),10))/(r-a)]))}),l.on("mousewheel",function(e){var t=Math.abs(parseInt(i.css("marginTop"),10));return(t-=20*e.deltaY)<0&&(t=0),l.trigger("scroll_element.xdsoft_scroller",[t/(r-a)]),e.stopPropagation(),!1}),l.on("touchstart",function(e){c=u(e),f=Math.abs(parseInt(i.css("marginTop"),10))}),l.on("touchmove",function(e){if(c){e.preventDefault();var t=u(e);l.trigger("scroll_element.xdsoft_scroller",[(f-(t.y-c.y))/(r-a)])}}),l.on("touchend touchcancel",function(){c=!1,f=0})),l.trigger("resize_scroll.xdsoft_scroller",[n])):l.find(".xdsoft_scrollbar").hide()})},e.fn.datetimepicker=function(i,r){var o,s,l=this,u=48,c=57,h=96,f=105,m=17,p=46,g=13,v=27,y=8,b=37,x=38,w=39,k=40,_=9,D=116,T=65,S=67,M=86,C=90,P=89,A=!1,O=e.isPlainObject(i)||!i?e.extend(!0,{},t,i):e.extend(!0,{},t),E=0;return o=function(t){var r,o,s,l,E,j,I=e('
'),$=e(''),N=e('
'),F=e('
'),W=e('
'),z=e('
'),R=z.find(".xdsoft_time_box").eq(0),H=e('
'),L=e(''),Y=e('
'),U=e('
'),Q=!1,B=0;O.id&&I.attr("id",O.id),O.style&&I.attr("style",O.style),O.weeks&&I.addClass("xdsoft_showweeks"),O.rtl&&I.addClass("xdsoft_rtl"),I.addClass("xdsoft_"+O.theme),I.addClass(O.className),F.find(".xdsoft_month span").after(Y),F.find(".xdsoft_year span").after(U),F.find(".xdsoft_month,.xdsoft_year").on("touchstart mousedown.xdsoft",function(t){var n,i,a=e(this).find(".xdsoft_select").eq(0),r=0,o=0,s=a.is(":visible");for(F.find(".xdsoft_select").hide(),E.currentTime&&(r=E.currentTime[e(this).hasClass("xdsoft_month")?"getMonth":"getFullYear"]()),a[s?"hide":"show"](),n=a.find("div.xdsoft_option"),i=0;iO.touchMovedThreshold&&(this.touchMoved=!0)};function q(){var e,n=!1;return O.startDate?n=E.strToDate(O.startDate):(n=O.value||(t&&t.val&&t.val()?t.val():""))?(n=E.strToDateTime(n),O.yearOffset&&(n=new Date(n.getFullYear()-O.yearOffset,n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()))):O.defaultDate&&(n=E.strToDateTime(O.defaultDate),O.defaultTime&&(e=E.strtotime(O.defaultTime),n.setHours(e.getHours()),n.setMinutes(e.getMinutes()))),n&&E.isValidDate(n)?I.data("changed",!0):n="",n||0}function K(i){var a=function(e,t){var n=e.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g,"\\$1").replace(/_/g,"{digit+}").replace(/([0-9]{1})/g,"{digit$1}").replace(/\{digit([0-9]{1})\}/g,"[0-$1_]{1}").replace(/\{digit[\+]\}/g,"[0-9_]{1}");return new RegExp(n).test(t)},r=function(e,t){if(!(e="string"==typeof e||e instanceof String?i.ownerDocument.getElementById(e):e))return!1;if(e.createTextRange){var n=e.createTextRange();return n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",t),n.select(),!0}return!!e.setSelectionRange&&(e.setSelectionRange(t,t),!0)};i.mask&&t.off("keydown.xdsoft"),!0===i.mask&&(n.formatMask?i.mask=n.formatMask(i.format):i.mask=i.format.replace(/Y/g,"9999").replace(/F/g,"9999").replace(/m/g,"19").replace(/d/g,"39").replace(/H/g,"29").replace(/i/g,"59").replace(/s/g,"59")),"string"===e.type(i.mask)&&(a(i.mask,t.val())||(t.val(i.mask.replace(/[0-9]/g,"_")),r(t[0],0)),t.on("paste.xdsoft",function(n){var o=(n.clipboardData||n.originalEvent.clipboardData||window.clipboardData).getData("text"),s=this.value,l=this.selectionStart,u=s.substr(0,l),d=s.substr(l+o.length);return s=u+o+d,l+=o.length,a(i.mask,s)?(this.value=s,r(this,l)):""===e.trim(s)?this.value=i.mask.replace(/[0-9]/g,"_"):t.trigger("error_input.xdsoft"),n.preventDefault(),!1}),t.on("keydown.xdsoft",function(n){var o,s=this.value,l=n.which,d=this.selectionStart,O=this.selectionEnd,E=d!==O;if(l>=u&&l<=c||l>=h&&l<=f||l===y||l===p){for(o=l===y||l===p?"_":String.fromCharCode(h<=l&&l<=f?l-u:l),l===y&&d&&!E&&(d-=1);;){var j=i.mask.substr(d,1),I=d0;if(!(/[^0-9_]/.test(j)&&I&&$))break;d+=l!==y||E?1:-1}if(E){var N=O-d,F=i.mask.replace(/[0-9]/g,"_"),W=F.substr(d,N).substr(1),z=s.substr(0,d),R=o+W,H=s.substr(d+N);s=z+R+H}else{var L=s.substr(0,d),Y=o,U=s.substr(d+1);s=L+Y+U}if(""===e.trim(s))s=F;else if(d===i.mask.length)return n.preventDefault(),!1;for(d+=l===y?0:1;/[^0-9_]/.test(i.mask.substr(d,1))&&d0;)d+=l===y?0:1;a(i.mask,s)?(this.value=s,r(this,d)):""===e.trim(s)?this.value=i.mask.replace(/[0-9]/g,"_"):t.trigger("error_input.xdsoft")}else if(-1!==[T,S,M,C,P].indexOf(l)&&A||-1!==[v,x,k,b,w,D,m,_,g].indexOf(l))return!0;return n.preventDefault(),!1}))}F.find(".xdsoft_select").xdsoftScroller(O).on("touchstart mousedown.xdsoft",function(e){var t=e.originalEvent;this.touchMoved=!1,this.touchStartPosition=t.touches?t.touches[0]:t,e.stopPropagation(),e.preventDefault()}).on("touchmove",".xdsoft_option",V).on("touchend mousedown.xdsoft",".xdsoft_option",function(){if(!this.touchMoved){void 0!==E.currentTime&&null!==E.currentTime||(E.currentTime=E.now());var t=E.currentTime.getFullYear();E&&E.currentTime&&E.currentTime[e(this).parent().parent().hasClass("xdsoft_monthselect")?"setMonth":"setFullYear"](e(this).data("value")),e(this).parent().parent().hide(),I.trigger("xchange.xdsoft"),O.onChangeMonth&&e.isFunction(O.onChangeMonth)&&O.onChangeMonth.call(I,E.currentTime,I.data("input")),t!==E.currentTime.getFullYear()&&e.isFunction(O.onChangeYear)&&O.onChangeYear.call(I,E.currentTime,I.data("input"))}}),I.getValue=function(){return E.getCurrentTime()},I.setOptions=function(i){var a={};O=e.extend(!0,{},O,i),i.allowTimes&&e.isArray(i.allowTimes)&&i.allowTimes.length&&(O.allowTimes=e.extend(!0,[],i.allowTimes)),i.weekends&&e.isArray(i.weekends)&&i.weekends.length&&(O.weekends=e.extend(!0,[],i.weekends)),i.allowDates&&e.isArray(i.allowDates)&&i.allowDates.length&&(O.allowDates=e.extend(!0,[],i.allowDates)),i.allowDateRe&&"[object String]"===Object.prototype.toString.call(i.allowDateRe)&&(O.allowDateRe=new RegExp(i.allowDateRe)),i.highlightedDates&&e.isArray(i.highlightedDates)&&i.highlightedDates.length&&(e.each(i.highlightedDates,function(t,i){var r,o=e.map(i.split(","),e.trim),s=new d(n.parseDate(o[0],O.formatDate),o[1],o[2]),l=n.formatDate(s.date,O.formatDate);void 0!==a[l]?(r=a[l].desc)&&r.length&&s.desc&&s.desc.length&&(a[l].desc=r+"\n"+s.desc):a[l]=s}),O.highlightedDates=e.extend(!0,[],a)),i.highlightedPeriods&&e.isArray(i.highlightedPeriods)&&i.highlightedPeriods.length&&(a=e.extend(!0,[],O.highlightedDates),e.each(i.highlightedPeriods,function(t,i){var r,o,s,l,u,c,h;if(e.isArray(i))r=i[0],o=i[1],s=i[2],h=i[3];else{var f=e.map(i.split(","),e.trim);r=n.parseDate(f[0],O.formatDate),o=n.parseDate(f[1],O.formatDate),s=f[2],h=f[3]}for(;r<=o;)l=new d(r,s,h),u=n.formatDate(r,O.formatDate),r.setDate(r.getDate()+1),void 0!==a[u]?(c=a[u].desc)&&c.length&&l.desc&&l.desc.length&&(a[u].desc=c+"\n"+l.desc):a[u]=l}),O.highlightedDates=e.extend(!0,[],a)),i.disabledDates&&e.isArray(i.disabledDates)&&i.disabledDates.length&&(O.disabledDates=e.extend(!0,[],i.disabledDates)),i.disabledWeekDays&&e.isArray(i.disabledWeekDays)&&i.disabledWeekDays.length&&(O.disabledWeekDays=e.extend(!0,[],i.disabledWeekDays)),!O.open&&!O.opened||O.inline||t.trigger("open.xdsoft"),O.inline&&(Q=!0,I.addClass("xdsoft_inline"),t.after(I).hide()),O.inverseButton&&(O.next="xdsoft_prev",O.prev="xdsoft_next"),O.datepicker?N.addClass("active"):N.removeClass("active"),O.timepicker?z.addClass("active"):z.removeClass("active"),O.value&&(E.setCurrentTime(O.value),t&&t.val&&t.val(E.str)),isNaN(O.dayOfWeekStart)?O.dayOfWeekStart=0:O.dayOfWeekStart=parseInt(O.dayOfWeekStart,10)%7,O.timepickerScrollbar||R.xdsoftScroller(O,"hide"),O.minDate&&/^[\+\-](.*)$/.test(O.minDate)&&(O.minDate=n.formatDate(E.strToDateTime(O.minDate),O.formatDate)),O.maxDate&&/^[\+\-](.*)$/.test(O.maxDate)&&(O.maxDate=n.formatDate(E.strToDateTime(O.maxDate),O.formatDate)),O.minDateTime&&/^\+(.*)$/.test(O.minDateTime)&&(O.minDateTime=E.strToDateTime(O.minDateTime).dateFormat(O.formatDate)),O.maxDateTime&&/^\+(.*)$/.test(O.maxDateTime)&&(O.maxDateTime=E.strToDateTime(O.maxDateTime).dateFormat(O.formatDate)),L.toggle(O.showApplyButton),F.find(".xdsoft_today_button").css("visibility",O.todayButton?"visible":"hidden"),F.find("."+O.prev).css("visibility",O.prevButton?"visible":"hidden"),F.find("."+O.next).css("visibility",O.nextButton?"visible":"hidden"),K(O),O.validateOnBlur&&t.off("blur.xdsoft").on("blur.xdsoft",function(){if(O.allowBlank&&(!e.trim(e(this).val()).length||"string"==typeof O.mask&&e.trim(e(this).val())===O.mask.replace(/[0-9]/g,"_")))e(this).val(null),I.data("xdsoft_datetime").empty();else{var t=n.parseDate(e(this).val(),O.format);if(t)e(this).val(n.formatDate(t,O.format));else{var i=+[e(this).val()[0],e(this).val()[1]].join(""),a=+[e(this).val()[2],e(this).val()[3]].join("");!O.datepicker&&O.timepicker&&i>=0&&i<24&&a>=0&&a<60?e(this).val([i,a].map(function(e){return e>9?e:"0"+e}).join(":")):e(this).val(n.formatDate(E.now(),O.format))}I.data("xdsoft_datetime").setCurrentTime(e(this).val())}I.trigger("changedatetime.xdsoft"),I.trigger("close.xdsoft")}),O.dayOfWeekStartPrev=0===O.dayOfWeekStart?6:O.dayOfWeekStart-1,I.trigger("xchange.xdsoft").trigger("afterOpen.xdsoft")},I.data("options",O).on("touchstart mousedown.xdsoft",function(e){return e.stopPropagation(),e.preventDefault(),U.hide(),Y.hide(),!1}),R.append(H),R.xdsoftScroller(O),I.on("afterOpen.xdsoft",function(){R.xdsoftScroller(O)}),I.append(N).append(z),!0!==O.withoutCopyright&&I.append($),N.append(F).append(W).append(L),e(O.parentID).append(I),E=new function(){var t=this;t.now=function(e){var n,i,a=new Date;return!e&&O.defaultDate&&(n=t.strToDateTime(O.defaultDate),a.setFullYear(n.getFullYear()),a.setMonth(n.getMonth()),a.setDate(n.getDate())),a.setFullYear(a.getFullYear()),!e&&O.defaultTime&&(i=t.strtotime(O.defaultTime),a.setHours(i.getHours()),a.setMinutes(i.getMinutes()),a.setSeconds(i.getSeconds()),a.setMilliseconds(i.getMilliseconds())),a},t.isValidDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)&&!isNaN(e.getTime())},t.setCurrentTime=function(e,n){"string"==typeof e?t.currentTime=t.strToDateTime(e):t.isValidDate(e)?t.currentTime=e:e||n||!O.allowBlank||O.inline?t.currentTime=t.now():t.currentTime=null,I.trigger("xchange.xdsoft")},t.empty=function(){t.currentTime=null},t.getCurrentTime=function(){return t.currentTime},t.nextMonth=function(){void 0!==t.currentTime&&null!==t.currentTime||(t.currentTime=t.now());var n,i=t.currentTime.getMonth()+1;return 12===i&&(t.currentTime.setFullYear(t.currentTime.getFullYear()+1),i=0),n=t.currentTime.getFullYear(),t.currentTime.setDate(Math.min(new Date(t.currentTime.getFullYear(),i+1,0).getDate(),t.currentTime.getDate())),t.currentTime.setMonth(i),O.onChangeMonth&&e.isFunction(O.onChangeMonth)&&O.onChangeMonth.call(I,E.currentTime,I.data("input")),n!==t.currentTime.getFullYear()&&e.isFunction(O.onChangeYear)&&O.onChangeYear.call(I,E.currentTime,I.data("input")),I.trigger("xchange.xdsoft"),i},t.prevMonth=function(){void 0!==t.currentTime&&null!==t.currentTime||(t.currentTime=t.now());var n=t.currentTime.getMonth()-1;return-1===n&&(t.currentTime.setFullYear(t.currentTime.getFullYear()-1),n=11),t.currentTime.setDate(Math.min(new Date(t.currentTime.getFullYear(),n+1,0).getDate(),t.currentTime.getDate())),t.currentTime.setMonth(n),O.onChangeMonth&&e.isFunction(O.onChangeMonth)&&O.onChangeMonth.call(I,E.currentTime,I.data("input")),I.trigger("xchange.xdsoft"),n},t.getWeekOfYear=function(t){if(O.onGetWeekOfYear&&e.isFunction(O.onGetWeekOfYear)){var n=O.onGetWeekOfYear.call(I,t);if(void 0!==n)return n}var i=new Date(t.getFullYear(),0,1);return 4!==i.getDay()&&i.setMonth(0,1+(4-i.getDay()+7)%7),Math.ceil(((t-i)/864e5+i.getDay()+1)/7)},t.strToDateTime=function(e){var i,a,r=[];return e&&e instanceof Date&&t.isValidDate(e)?e:((r=/^([+-]{1})(.*)$/.exec(e))&&(r[2]=n.parseDate(r[2],O.formatDate)),r&&r[2]?(i=r[2].getTime()-6e4*r[2].getTimezoneOffset(),a=new Date(t.now(!0).getTime()+parseInt(r[1]+"1",10)*i)):a=e?n.parseDate(e,O.format):t.now(),t.isValidDate(a)||(a=t.now()),a)},t.strToDate=function(e){if(e&&e instanceof Date&&t.isValidDate(e))return e;var i=e?n.parseDate(e,O.formatDate):t.now(!0);return t.isValidDate(i)||(i=t.now(!0)),i},t.strtotime=function(e){if(e&&e instanceof Date&&t.isValidDate(e))return e;var i=e?n.parseDate(e,O.formatTime):t.now(!0);return t.isValidDate(i)||(i=t.now(!0)),i},t.str=function(){var e=O.format;return O.yearOffset&&(e=(e=e.replace("Y",t.currentTime.getFullYear()+O.yearOffset)).replace("y",String(t.currentTime.getFullYear()+O.yearOffset).substring(2,4))),n.formatDate(t.currentTime,e)},t.currentTime=this.now()},L.on("touchend click",function(e){e.preventDefault(),I.data("changed",!0),E.setCurrentTime(q()),t.val(E.str()),I.trigger("close.xdsoft")}),F.find(".xdsoft_today_button").on("touchend mousedown.xdsoft",function(){I.data("changed",!0),E.setCurrentTime(0,!0),I.trigger("afterOpen.xdsoft")}).on("dblclick.xdsoft",function(){var e,n,i=E.getCurrentTime();i=new Date(i.getFullYear(),i.getMonth(),i.getDate()),e=E.strToDate(O.minDate),i<(e=new Date(e.getFullYear(),e.getMonth(),e.getDate()))||(n=E.strToDate(O.maxDate),i>(n=new Date(n.getFullYear(),n.getMonth(),n.getDate()))||(t.val(E.str()),t.trigger("change"),I.trigger("close.xdsoft")))}),F.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var t=e(this),n=0,i=!1;!function e(a){t.hasClass(O.next)?E.nextMonth():t.hasClass(O.prev)&&E.prevMonth(),O.monthChangeSpinner&&(i||(n=setTimeout(e,a||100)))}(500),e([O.ownerDocument.body,O.contentWindow]).on("touchend mouseup.xdsoft",function t(){clearTimeout(n),i=!0,e([O.ownerDocument.body,O.contentWindow]).off("touchend mouseup.xdsoft",t)})}),z.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var t=e(this),n=0,i=!1,a=110;!function e(r){var o=R[0].clientHeight,s=H[0].offsetHeight,l=Math.abs(parseInt(H.css("marginTop"),10));t.hasClass(O.next)&&s-o-O.timeHeightInTimePicker>=l?H.css("marginTop","-"+(l+O.timeHeightInTimePicker)+"px"):t.hasClass(O.prev)&&l-O.timeHeightInTimePicker>=0&&H.css("marginTop","-"+(l-O.timeHeightInTimePicker)+"px"),R.trigger("scroll_element.xdsoft_scroller",[Math.abs(parseInt(H[0].style.marginTop,10)/(s-o))]),a=a>10?10:a-10,i||(n=setTimeout(e,r||a))}(500),e([O.ownerDocument.body,O.contentWindow]).on("touchend mouseup.xdsoft",function t(){clearTimeout(n),i=!0,e([O.ownerDocument.body,O.contentWindow]).off("touchend mouseup.xdsoft",t)})}),r=0,I.on("xchange.xdsoft",function(o){clearTimeout(r),r=setTimeout(function(){void 0!==E.currentTime&&null!==E.currentTime||(E.currentTime=E.now());for(var r,o,s,l,u,d,c,h,f,m,p="",g=new Date(E.currentTime.getFullYear(),E.currentTime.getMonth(),1,12,0,0),v=0,y=E.now(),b=!1,x=!1,w=!1,k=!1,_=[],D=!0,T="";g.getDay()!==O.dayOfWeekStart;)g.setDate(g.getDate()-1);for(p+="",O.weeks&&(p+=""),r=0;r<7;r+=1)p+="";for(p+="",p+="",!1!==O.maxDate&&(b=E.strToDate(O.maxDate),b=new Date(b.getFullYear(),b.getMonth(),b.getDate(),23,59,59,999)),!1!==O.minDate&&(x=E.strToDate(O.minDate),x=new Date(x.getFullYear(),x.getMonth(),x.getDate())),!1!==O.minDateTime&&(w=E.strToDate(O.minDateTime),w=new Date(w.getFullYear(),w.getMonth(),w.getDate(),w.getHours(),w.getMinutes(),w.getSeconds())),!1!==O.maxDateTime&&(k=E.strToDate(O.maxDateTime),k=new Date(k.getFullYear(),k.getMonth(),k.getDate(),k.getHours(),k.getMinutes(),k.getSeconds())),!1!==k&&(m=31*(12*k.getFullYear()+k.getMonth())+k.getDate());v0&&-1===O.allowDates.indexOf(n.formatDate(g,O.formatDate))&&_.push("xdsoft_disabled");var S=31*(12*g.getFullYear()+g.getMonth())+g.getDate();(!1!==b&&g>b||!1!==w&&gm||c&&!1===c[0])&&_.push("xdsoft_disabled"),-1!==O.disabledDates.indexOf(n.formatDate(g,O.formatDate))&&_.push("xdsoft_disabled"),-1!==O.disabledWeekDays.indexOf(s)&&_.push("xdsoft_disabled"),t.is("[disabled]")&&_.push("xdsoft_disabled"),c&&""!==c[1]&&_.push(c[1]),E.currentTime.getMonth()!==A&&_.push("xdsoft_other_month"),(O.defaultSelect||I.data("changed"))&&n.formatDate(E.currentTime,O.formatDate)===n.formatDate(g,O.formatDate)&&_.push("xdsoft_current"),n.formatDate(y,O.formatDate)===n.formatDate(g,O.formatDate)&&_.push("xdsoft_today"),0!==g.getDay()&&6!==g.getDay()&&-1===O.weekends.indexOf(n.formatDate(g,O.formatDate))||_.push("xdsoft_weekend"),void 0!==O.highlightedDates[n.formatDate(g,O.formatDate)]&&(o=O.highlightedDates[n.formatDate(g,O.formatDate)],_.push(void 0===o.style?"xdsoft_highlighted_default":o.style),f=void 0===o.desc?"":o.desc),O.beforeShowDay&&e.isFunction(O.beforeShowDay)&&_.push(O.beforeShowDay(g)),D&&(p+="",D=!1,O.weeks&&(p+="")),p+='",g.getDay()===O.dayOfWeekStartPrev&&(p+="",D=!0),g.setDate(l+1)}p+="
"+O.i18n[a].dayOfWeekShort[(r+O.dayOfWeekStart)%7]+"
"+d+"
'+l+"
",W.html(p),F.find(".xdsoft_label span").eq(0).text(O.i18n[a].months[E.currentTime.getMonth()]),F.find(".xdsoft_label span").eq(1).text(E.currentTime.getFullYear()+O.yearOffset),T="",A="";var M=0;if(!1!==O.minTime){var C=E.strtotime(O.minTime);M=60*C.getHours()+C.getMinutes()}var P=1440;if(!1!==O.maxTime){C=E.strtotime(O.maxTime);P=60*C.getHours()+C.getMinutes()}if(!1!==O.minDateTime){C=E.strToDateTime(O.minDateTime);if(n.formatDate(E.currentTime,O.formatDate)===n.formatDate(C,O.formatDate))(A=60*C.getHours()+C.getMinutes())>M&&(M=A)}if(!1!==O.maxDateTime){var A;C=E.strToDateTime(O.maxDateTime);if(n.formatDate(E.currentTime,O.formatDate)===n.formatDate(C,O.formatDate))(A=60*C.getHours()+C.getMinutes())=P||l59||r.getMinutes()===parseInt(a,10))&&(O.defaultSelect||I.data("changed")?_.push("xdsoft_current"):O.initTime&&_.push("xdsoft_init_time")),parseInt(y.getHours(),10)===parseInt(i,10)&&parseInt(y.getMinutes(),10)===parseInt(a,10)&&_.push("xdsoft_today"),T+='
'+n.formatDate(o,O.formatTime)+"
"},O.allowTimes&&e.isArray(O.allowTimes)&&O.allowTimes.length)for(v=0;v=P||h((v<10?"0":"")+v,A=(r<10?"0":"")+r))}for(H.html(T),i="",v=parseInt(O.yearStart,10);v<=parseInt(O.yearEnd,10);v+=1)i+='
'+(v+O.yearOffset)+"
";for(U.children().eq(0).html(i),v=parseInt(O.monthStart,10),i="";v<=parseInt(O.monthEnd,10);v+=1)i+='
'+O.i18n[a].months[v]+"
";Y.children().eq(0).html(i),e(I).trigger("generate.xdsoft")},10),o.stopPropagation()}).on("afterOpen.xdsoft",function(){var e,t,n,i;O.timepicker&&(H.find(".xdsoft_current").length?e=".xdsoft_current":H.find(".xdsoft_init_time").length&&(e=".xdsoft_init_time"),e?(t=R[0].clientHeight,(n=H[0].offsetHeight)-t<(i=H.find(e).index()*O.timeHeightInTimePicker+1)&&(i=n-t),R.trigger("scroll_element.xdsoft_scroller",[parseInt(i,10)/(n-t)])):R.trigger("scroll_element.xdsoft_scroller",[0]))}),o=0,W.on("touchend click.xdsoft","td",function(n){n.stopPropagation(),o+=1;var i=e(this),a=E.currentTime;if(null==a&&(E.currentTime=E.now(),a=E.currentTime),i.hasClass("xdsoft_disabled"))return!1;a.setDate(1),a.setFullYear(i.data("year")),a.setMonth(i.data("month")),a.setDate(i.data("date")),I.trigger("select.xdsoft",[a]),t.val(E.str()),O.onSelectDate&&e.isFunction(O.onSelectDate)&&O.onSelectDate.call(I,E.currentTime,I.data("input"),n),I.data("changed",!0),I.trigger("xchange.xdsoft"),I.trigger("changedatetime.xdsoft"),(o>1||!0===O.closeOnDateSelect||!1===O.closeOnDateSelect&&!O.timepicker)&&!O.inline&&I.trigger("close.xdsoft"),setTimeout(function(){o=0},200)}),H.on("touchstart","div",function(e){this.touchMoved=!1}).on("touchmove","div",V).on("touchend click.xdsoft","div",function(t){if(!this.touchMoved){t.stopPropagation();var n=e(this),i=E.currentTime;if(null==i&&(E.currentTime=E.now(),i=E.currentTime),n.hasClass("xdsoft_disabled"))return!1;i.setHours(n.data("hour")),i.setMinutes(n.data("minute")),I.trigger("select.xdsoft",[i]),I.data("input").val(E.str()),O.onSelectTime&&e.isFunction(O.onSelectTime)&&O.onSelectTime.call(I,E.currentTime,I.data("input"),t),I.data("changed",!0),I.trigger("xchange.xdsoft"),I.trigger("changedatetime.xdsoft"),!0!==O.inline&&!0===O.closeOnTimeSelect&&I.trigger("close.xdsoft")}}),N.on("mousewheel.xdsoft",function(e){return!O.scrollMonth||(e.deltaY<0?E.nextMonth():E.prevMonth(),!1)}),t.on("mousewheel.xdsoft",function(e){return!O.scrollInput||(!O.datepicker&&O.timepicker?((s=H.find(".xdsoft_current").length?H.find(".xdsoft_current").eq(0).index():0)+e.deltaY>=0&&s+e.deltaYh+f?(d="bottom",i=h+f-t.top):i-=f):i+I[0].offsetHeight>h+f&&(i=t.top-I[0].offsetHeight+1),i<0&&(i=0),a+n.offsetWidth>u&&(a=u-n.offsetWidth)),o=I[0],j(o,function(e){if("relative"===O.contentWindow.getComputedStyle(e).getPropertyValue("position")&&u>=e.offsetWidth)return a-=(u-e.offsetWidth)/2,!1}),(c={position:r,left:a,top:"",bottom:""})[d]=i,I.css(c)},I.on("open.xdsoft",function(t){var n=!0;O.onShow&&e.isFunction(O.onShow)&&(n=O.onShow.call(I,E.currentTime,I.data("input"),t)),!1!==n&&(I.show(),l(),e(O.contentWindow).off("resize.xdsoft",l).on("resize.xdsoft",l),O.closeOnWithoutClick&&e([O.ownerDocument.body,O.contentWindow]).on("touchstart mousedown.xdsoft",function t(){I.trigger("close.xdsoft"),e([O.ownerDocument.body,O.contentWindow]).off("touchstart mousedown.xdsoft",t)}))}).on("close.xdsoft",function(t){var n=!0;F.find(".xdsoft_month,.xdsoft_year").find(".xdsoft_select").hide(),O.onClose&&e.isFunction(O.onClose)&&(n=O.onClose.call(I,E.currentTime,I.data("input"),t)),!1===n||O.opened||O.inline||I.hide(),t.stopPropagation()}).on("toggle.xdsoft",function(){I.is(":visible")?I.trigger("close.xdsoft"):I.trigger("open.xdsoft")}).data("input",t),B=0,I.data("xdsoft_datetime",E),I.setOptions(O),E.setCurrentTime(q()),t.data("xdsoft_datetimepicker",I).on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function(){t.is(":disabled")||t.data("xdsoft_datetimepicker").is(":visible")&&O.closeOnInputClick||O.openOnFocus&&(clearTimeout(B),B=setTimeout(function(){t.is(":disabled")||(Q=!0,E.setCurrentTime(q(),!0),O.mask&&K(O),I.trigger("open.xdsoft"))},100))}).on("keydown.xdsoft",function(t){var n,i=t.which;return-1!==[g].indexOf(i)&&O.enterLikeTab?(n=e("input:visible,textarea:visible,button:visible,a:visible"),I.trigger("close.xdsoft"),n.eq(n.index(this)+1).focus(),!1):-1!==[_].indexOf(i)?(I.trigger("close.xdsoft"),!0):void 0}).on("blur.xdsoft",function(){I.trigger("close.xdsoft")})},s=function(t){var n=t.data("xdsoft_datetimepicker");n&&(n.data("xdsoft_datetime",null),n.remove(),t.data("xdsoft_datetimepicker",null).off(".xdsoft"),e(O.contentWindow).off("resize.xdsoft"),e([O.contentWindow,O.ownerDocument.body]).off("mousedown.xdsoft touchstart"),t.unmousewheel&&t.unmousewheel())},e(O.ownerDocument).off("keydown.xdsoftctrl keyup.xdsoftctrl").on("keydown.xdsoftctrl",function(e){e.keyCode===m&&(A=!0)}).on("keyup.xdsoftctrl",function(e){e.keyCode===m&&(A=!1)}),this.each(function(){var t,a=e(this).data("xdsoft_datetimepicker");if(a){if("string"===e.type(i))switch(i){case"show":e(this).select().focus(),a.trigger("open.xdsoft");break;case"hide":a.trigger("close.xdsoft");break;case"toggle":a.trigger("toggle.xdsoft");break;case"destroy":s(e(this));break;case"reset":this.value=this.defaultValue,this.value&&a.data("xdsoft_datetime").isValidDate(n.parseDate(this.value,O.format))||a.data("changed",!1),a.data("xdsoft_datetime").setCurrentTime(this.value);break;case"validate":a.data("input").trigger("blur.xdsoft");break;default:a[i]&&e.isFunction(a[i])&&(l=a[i](r))}else a.setOptions(i);return 0}"string"!==e.type(i)&&(!O.lazyInit||O.open||O.inline?o(e(this)):(t=e(this)).on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function e(){t.is(":disabled")||t.data("xdsoft_datetimepicker")||(clearTimeout(E),E=setTimeout(function(){t.data("xdsoft_datetimepicker")||o(t),t.off("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",e).trigger("open.xdsoft")},100))}))}),l},e.fn.datetimepicker.defaults=t};!function(e){"function"==typeof define&&define.amd?define(["jquery","jquery-mousewheel"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(datetimepickerFactory),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){var t,n,i=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],a="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],r=Array.prototype.slice;if(e.event.fixHooks)for(var o=i.length;o;)e.event.fixHooks[i[--o]]=e.event.mouseHooks;var s=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var t=a.length;t;)this.addEventListener(a[--t],l,!1);else this.onmousewheel=l;e.data(this,"mousewheel-line-height",s.getLineHeight(this)),e.data(this,"mousewheel-page-height",s.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var t=a.length;t;)this.removeEventListener(a[--t],l,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var n=e(t),i=n["offsetParent"in e.fn?"offsetParent":"parent"]();return i.length||(i=e("body")),parseInt(i.css("fontSize"),10)||parseInt(n.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function l(i){var a,o=i||window.event,l=r.call(arguments,1),c=0,h=0,f=0,m=0,p=0;if((i=e.event.fix(o)).type="mousewheel","detail"in o&&(f=-1*o.detail),"wheelDelta"in o&&(f=o.wheelDelta),"wheelDeltaY"in o&&(f=o.wheelDeltaY),"wheelDeltaX"in o&&(h=-1*o.wheelDeltaX),"axis"in o&&o.axis===o.HORIZONTAL_AXIS&&(h=-1*f,f=0),c=0===f?h:f,"deltaY"in o&&(c=f=-1*o.deltaY),"deltaX"in o&&(h=o.deltaX,0===f&&(c=-1*h)),0!==f||0!==h){if(1===o.deltaMode){var g=e.data(this,"mousewheel-line-height");c*=g,f*=g,h*=g}else if(2===o.deltaMode){var v=e.data(this,"mousewheel-page-height");c*=v,f*=v,h*=v}if(a=Math.max(Math.abs(f),Math.abs(h)),(!n||a=1?"floor":"ceil"](c/n),h=Math[h>=1?"floor":"ceil"](h/n),f=Math[f>=1?"floor":"ceil"](f/n),s.settings.normalizeOffset&&this.getBoundingClientRect){var y=this.getBoundingClientRect();m=i.clientX-y.left,p=i.clientY-y.top}return i.deltaX=h,i.deltaY=f,i.deltaFactor=n,i.offsetX=m,i.offsetY=p,i.deltaMode=0,l.unshift(i,c,h,f),t&&clearTimeout(t),t=setTimeout(u,200),(e.event.dispatch||e.event.handle).apply(this,l)}}function u(){n=null}function d(e,t){return s.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}),function(){"use strict";function e(e){e.fn._fadeIn=e.fn.fadeIn;var t=e.noop||function(){},n=/MSIE/.test(navigator.userAgent),i=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent),a=(document.documentMode,e.isFunction(document.createElement("div").style.setExpression));e.blockUI=function(e){s(window,e)},e.unblockUI=function(e){l(window,e)},e.growlUI=function(t,n,i,a){var r=e('
');t&&r.append("

"+t+"

"),n&&r.append("

"+n+"

"),void 0===i&&(i=3e3);var o=function(t){t=t||{},e.blockUI({message:r,fadeIn:void 0!==t.fadeIn?t.fadeIn:700,fadeOut:void 0!==t.fadeOut?t.fadeOut:1e3,timeout:void 0!==t.timeout?t.timeout:i,centerY:!1,showOverlay:!1,onUnblock:a,css:e.blockUI.defaults.growlCSS})};o();r.css("opacity");r.mouseover(function(){o({fadeIn:0,timeout:3e4});var t=e(".blockMsg");t.stop(),t.fadeTo(300,1)}).mouseout(function(){e(".blockMsg").fadeOut(1e3)})},e.fn.block=function(t){if(this[0]===window)return e.blockUI(t),this;var n=e.extend({},e.blockUI.defaults,t||{});return this.each(function(){var t=e(this);n.ignoreIfBlocked&&t.data("blockUI.isBlocked")||t.unblock({fadeOut:0})}),this.each(function(){"static"==e.css(this,"position")&&(this.style.position="relative",e(this).data("blockUI.static",!0)),this.style.zoom=1,s(this,t)})},e.fn.unblock=function(t){return this[0]===window?(e.unblockUI(t),this):this.each(function(){l(this,t)})},e.blockUI.version=2.7,e.blockUI.defaults={message:"

Please wait...

",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",opacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var r=null,o=[];function s(s,u){var c,m,p=s==window,g=u&&void 0!==u.message?u.message:void 0;if(!(u=e.extend({},e.blockUI.defaults,u||{})).ignoreIfBlocked||!e(s).data("blockUI.isBlocked")){if(u.overlayCSS=e.extend({},e.blockUI.defaults.overlayCSS,u.overlayCSS||{}),c=e.extend({},e.blockUI.defaults.css,u.css||{}),u.onOverlayClick&&(u.overlayCSS.cursor="pointer"),m=e.extend({},e.blockUI.defaults.themedCSS,u.themedCSS||{}),g=void 0===g?u.message:g,p&&r&&l(window,{fadeOut:0}),g&&"string"!=typeof g&&(g.parentNode||g.jquery)){var v=g.jquery?g[0]:g,y={};e(s).data("blockUI.history",y),y.el=v,y.parent=v.parentNode,y.display=v.style.display,y.position=v.style.position,y.parent&&y.parent.removeChild(v)}e(s).data("blockUI.onUnblock",u.onUnblock);var b,x,w,k,_=u.baseZ;b=n||u.forceIframe?e(''):e(''),x=u.theme?e(''):e(''),u.theme&&p?(k='"):u.theme?(k='"):k=p?'':'',w=e(k),g&&(u.theme?(w.css(m),w.addClass("ui-widget-content")):w.css(c)),u.theme||x.css(u.overlayCSS),x.css("position",p?"fixed":"absolute"),(n||u.forceIframe)&&b.css("opacity",0);var D=[b,x,w],T=e(p?"body":s);e.each(D,function(){this.appendTo(T)}),u.theme&&u.draggable&&e.fn.draggable&&w.draggable({handle:".ui-dialog-titlebar",cancel:"li"});var S=a&&(!e.support.boxModel||e("object,embed",p?null:s).length>0);if(i||S){if(p&&u.allowBodyStretch&&e.support.boxModel&&e("html,body").css("height","100%"),(i||!e.support.boxModel)&&!p)var M=f(s,"borderTopWidth"),C=f(s,"borderLeftWidth"),P=M?"(0 - "+M+")":0,A=C?"(0 - "+C+")":0;e.each(D,function(e,t){var n=t[0].style;if(n.position="absolute",e<2)p?n.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+u.quirksmodeOffsetHack+') + "px"'):n.setExpression("height",'this.parentNode.offsetHeight + "px"'),p?n.setExpression("width",'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):n.setExpression("width",'this.parentNode.offsetWidth + "px"'),A&&n.setExpression("left",A),P&&n.setExpression("top",P);else if(u.centerY)p&&n.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'),n.marginTop=0;else if(!u.centerY&&p){var i="((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "+(u.css&&u.css.top?parseInt(u.css.top,10):0)+') + "px"';n.setExpression("top",i)}})}if(g&&(u.theme?w.find(".ui-widget-content").append(g):w.append(g),(g.jquery||g.nodeType)&&e(g).show()),(n||u.forceIframe)&&u.showOverlay&&b.show(),u.fadeIn){var O=u.onBlock?u.onBlock:t,E=u.showOverlay&&!g?O:t,j=g?O:t;u.showOverlay&&x._fadeIn(u.fadeIn,E),g&&w._fadeIn(u.fadeIn,j)}else u.showOverlay&&x.show(),g&&w.show(),u.onBlock&&u.onBlock.bind(w)();if(d(1,s,u),p?(r=w[0],o=e(u.focusableElements,r),u.focusInput&&setTimeout(h,20)):function(e,t,n){var i=e.parentNode,a=e.style,r=(i.offsetWidth-e.offsetWidth)/2-f(i,"borderLeftWidth"),o=(i.offsetHeight-e.offsetHeight)/2-f(i,"borderTopWidth");t&&(a.left=r>0?r+"px":"0");n&&(a.top=o>0?o+"px":"0")}(w[0],u.centerX,u.centerY),u.timeout){var I=setTimeout(function(){p?e.unblockUI(u):e(s).unblock(u)},u.timeout);e(s).data("blockUI.timeout",I)}}}function l(t,n){var i,a,s=t==window,l=e(t),c=l.data("blockUI.history"),h=l.data("blockUI.timeout");h&&(clearTimeout(h),l.removeData("blockUI.timeout")),n=e.extend({},e.blockUI.defaults,n||{}),d(0,t,n),null===n.onUnblock&&(n.onUnblock=l.data("blockUI.onUnblock"),l.removeData("blockUI.onUnblock")),a=s?e("body").children().filter(".blockUI").add("body > .blockUI"):l.find(">.blockUI"),n.cursorReset&&(a.length>1&&(a[1].style.cursor=n.cursorReset),a.length>2&&(a[2].style.cursor=n.cursorReset)),s&&(r=o=null),n.fadeOut?(i=a.length,a.stop().fadeOut(n.fadeOut,function(){0==--i&&u(a,c,n,t)})):u(a,c,n,t)}function u(t,n,i,a){var r=e(a);if(!r.data("blockUI.isBlocked")){t.each(function(e,t){this.parentNode&&this.parentNode.removeChild(this)}),n&&n.el&&(n.el.style.display=n.display,n.el.style.position=n.position,n.el.style.cursor="default",n.parent&&n.parent.appendChild(n.el),r.removeData("blockUI.history")),r.data("blockUI.static")&&r.css("position","static"),"function"==typeof i.onUnblock&&i.onUnblock(a,i);var o=e(document.body),s=o.width(),l=o[0].style.width;o.width(s-1).width(s),o[0].style.width=l}}function d(t,n,i){var a=n==window,o=e(n);if((t||(!a||r)&&(a||o.data("blockUI.isBlocked")))&&(o.data("blockUI.isBlocked",t),a&&i.bindEvents&&(!t||i.showOverlay))){var s="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";t?e(document).bind(s,i,c):e(document).unbind(s,c)}}function c(t){if("keydown"===t.type&&t.keyCode&&9==t.keyCode&&r&&t.data.constrainTabKey){var n=o,i=!t.shiftKey&&t.target===n[n.length-1],a=t.shiftKey&&t.target===n[0];if(i||a)return setTimeout(function(){h(a)},10),!1}var s=t.data,l=e(t.target);return l.hasClass("blockOverlay")&&s.onOverlayClick&&s.onOverlayClick(t),l.parents("div."+s.blockMsgClass).length>0||0===l.parents().children().filter("div.blockUI").length}function h(e){if(o){var t=o[!0===e?o.length-1:0];t&&t.focus()}}function f(t,n){return parseInt(e.css(t,n),10)||0}}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],e):e(jQuery)}(),function(e,t){"function"==typeof define&&define.amd?define(["jQuery"],t):"object"==typeof exports?t(require("jQuery")):t(e.jQuery)}(this,function(e){var t=function(){var e={},t=new RegExp("{{([^}]+)}}","g");return e.parse=function(e){for(var n={inpts:{},chars:{}},i=function(e){for(var n,i=[];n=t.exec(e);)i.push(n);return i}(e),a=e.length,r=0,o=0,s=0,l=function(e){for(var t=e.length,i=0;it[0]&&ee.focus,a=0===n.end;(i||a)&&t.set(e.el,e.focus)},0)},r.prototype._processKey=function(e,i,a){if(this.sel=t.get(this.el),this.val=this.el.value,this.delta=0,this.sel.begin!==this.sel.end)this.delta=-1*Math.abs(this.sel.begin-this.sel.end),this.val=n.removeChars(this.val,this.sel.begin,this.sel.end);else if(i&&46===i)this._delete();else if(i&&this.sel.begin-1>=0)this.val=n.removeChars(this.val,this.sel.end-1,this.sel.end),this.delta-=1;else if(i)return!0;i||(this.val=n.addChars(this.val,e,this.sel.begin),this.delta+=e.length),this._formatValue(a)},r.prototype._delete=function(){for(;this.chars[this.sel.begin];)this._nextPos();this.sel.beginthis.focus&&(this.delta+=this.sel.end-this.focus);for(var e=0,t=0;t<=this.mLength;t++){var i,a=this.chars[t],r=this.hldrs[t],o=t+e;o=t>=this.sel.begin?o+this.delta:o,i=this.val.charAt(o),(a&&a===i||r&&r===i)&&(this.val=n.removeChars(this.val,o,o+1),e--)}this.hldrs={},this.focus=this.val.length},r.prototype._validateInpts=function(){for(var e=0;e-1?{begin:a,end:a}:{begin:-n.moveStart("character",-a),end:-n.moveEnd("character",-a)}}return{begin:0,end:0}},set:function(e,t){if("object"!=typeof t&&(t={begin:t,end:t}),e.setSelectionRange)e.focus(),e.setSelectionRange(t.begin,t.end);else if(e.createTextRange){var n=e.createTextRange();n.collapse(!0),n.moveEnd("character",t.end),n.moveStart("character",t.begin),n.select()}}};return e}(),n);$.fn.formatter=function(e){return"object"==typeof e&&this.each(function(){$.data(this,"plugin_formatter")||$.data(this,"plugin_formatter",new i(this,e))}),this.resetPattern=function(e){return this.each(function(){var t=$.data(this,"plugin_formatter");t&&t.resetPattern(e)}),this},this},$.fn.formatter.addInptType=function(e,t){i.addInptType(e,t)}}),function(e,t){var n,i=e.fn.domManip,a="_tmplitem",r=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,o={},s={},l={key:0,data:{}},u=0,d=0,c=[];function h(t,n,i,a){var r={data:a||0===a||!1===a?a:n?n.data:{},_wrap:n?n._wrap:null,tmpl:null,parent:n||null,nodes:[],calls:b,nest:x,wrap:w,html:k,update:_};return t&&e.extend(r,t,{nodes:[],parent:n}),i&&(r.tmpl=i,r._ctnt=r._ctnt||r.tmpl(e,r),r.key=++u,(c.length?s:o)[u]=r),r}function f(t,n,i){var r,o=i?e.map(i,function(e){return"string"==typeof e?t.key?e.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+a+'="'+t.key+'" $2'):e:f(e,t,e._ctnt)}):t;return n?o:((o=o.join("")).replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(t,n,i,a){y(r=e(i).get()),n&&(r=m(n).concat(r)),a&&(r=r.concat(m(a)))}),r||m(o))}function m(t){var n=document.createElement("div");return n.innerHTML=t,e.makeArray(n.childNodes)}function p(t){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+e.trim(t).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(t,n,i,a,r,o,s){var l,u,d,c=e.tmpl.tag[i];if(!c)throw"Unknown template tag: "+i;return l=c._default||[],o&&!/\w$/.test(r)&&(r+=o,o=""),r?(r=v(r),s=s?","+v(s)+")":o?")":"",u=o?r.indexOf(".")>-1?r+v(o):"("+r+").call($item"+s:r,d=o?u:"(typeof("+r+")==='function'?("+r+").call($item):("+r+"))"):d=u=l.$1||"null",a=v(a),"');"+c[n?"close":"open"].split("$notnull_1").join(r?"typeof("+r+")!=='undefined' && ("+r+")!=null":"true").split("$1a").join(d).split("$1").join(u).split("$2").join(a||l.$2||"")+"__.push('"})+"');}return __;")}function g(t,n){t._wrap=f(t,!0,e.isArray(n)?n:[r.test(n)?n:e(n).html()]).join("")}function v(e){return e?e.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function y(t){var n,i,r,l,c,f="_"+d,m={};for(r=0,l=t.length;r=0;c--)p(i[c]);p(n)}function p(t){var n,i,r,l,c=t;if(l=t.getAttribute(a)){for(;c.parentNode&&1===(c=c.parentNode).nodeType&&!(n=c.getAttribute(a)););n!==l&&(c=c.parentNode?11===c.nodeType?0:c.getAttribute(a)||0:0,(r=o[l])||((r=h(r=s[l],o[c]||s[c])).key=++u,o[u]=r),d&&p(l)),t.removeAttribute(a)}else d&&(r=e.data(t,"tmplItem"))&&(p(r.key),o[r.key]=r,c=(c=e.data(t.parentNode,"tmplItem"))?c.key:0);if(r){for(i=r;i&&i.key!=c;)i.nodes.push(t),i=i.parent;delete r._ctnt,delete r._wrap,e.data(t,"tmplItem",r)}function p(e){r=m[e+=f]=m[e]||h(r,o[r.parent.key+f]||r.parent)}}}function b(e,t,n,i){if(!e)return c.pop();c.push({_:e,tmpl:t,item:this,data:n,options:i})}function x(t,n,i){return e.tmpl(e.template(t),n,i,this)}function w(t,n){var i=t.options||{};return i.wrapped=n,e.tmpl(e.template(t.tmpl),t.data,i,t.item)}function k(t,n){var i=this._wrap;return e.map(e(e.isArray(i)?i.join(""):i).filter(t||"*"),function(e){return n?e.innerText||e.textContent:e.outerHTML||(t=e,(i=document.createElement("div")).appendChild(t.cloneNode(!0)),i.innerHTML);var t,i})}function _(){var t=this.nodes;e.tmpl(null,null,null,this).insertBefore(t[0]),e(t).remove()}e.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,i){e.fn[t]=function(a){var r,s,l,u,c=[],h=e(a),f=1===this.length&&this[0].parentNode;if(n=o||{},f&&11===f.nodeType&&1===f.childNodes.length&&1===h.length)h[i](this[0]),c=this;else{for(s=0,l=h.length;s0?this.clone(!0):this).get(),e(h[s])[i](r),c=c.concat(r);d=0,c=this.pushStack(c,t,h.selector)}return u=n,n=null,e.tmpl.complete(u),c}}),e.fn.extend({tmpl:function(t,n,i){return e.tmpl(this[0],t,n,i)},tmplItem:function(){return e.tmplItem(this[0])},template:function(t){return e.template(t,this[0])},domManip:function(t,a,r,s){if(t[0]&&e.isArray(t[0])){for(var l,u=e.makeArray(arguments),c=t[0],h=c.length,f=0;f").join(">").split('"').join(""").split("'").join("'")}}),e.extend(e.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},if:{open:"if(($notnull_1) && $1a){",close:"}"},else:{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(e){o={}},afterManip:function(t,n,i){var a=11===n.nodeType?e.makeArray(n.childNodes):1===n.nodeType?[n]:[];i.call(t,n),y(a),d++}})}(jQuery),APP.init=function(){APP.initAjaxDefaultSetting(),APP.initMenu(),APP.initAx5(),APP.initPlugins(),APP.initCheckboxAll()},APP.initAjaxDefaultSetting=function(){$(document).ajaxError(function(e,t,n){var i="알수없는 오류가 발생하였습니다.";void 0!==t.responseJSON&&void 0!==t.responseJSON.message?i=t.responseJSON.message:500==t.status?i="서버 코드 오류가 발생하였습니다.\n관리자에게 문의하세요":401==t.status&&(i="해당 명령을 실행할 권한이 없습니다."),toastr.error(i,"오류 발생")}).ajaxStart(function(){$.blockUI({css:{width:"25px",top:"49%",left:"49%",border:"0px none",backgroundColor:"transparent",cursor:"wait"},message:'로딩중',baseZ:1e4,overlayCSS:{opacity:0}})}).ajaxComplete(function(){$.unblockUI()})},APP.initMenu=function(){$("#nav .main-navigation li").each(function(){$(this).data("active")==menuActive&&($(this).addClass("active"),$(this).parents("li").addClass("active"))})},APP.initPlugins=function(){},APP.initCheckboxAll=function(){$("[data-checkbox]").click(function(){var e=$(this),t=e.data("checkbox-all")&&"true"==e.data("checkbox-all").toString(),n=e.data("checkbox"),i=e.prop("checked"),a=t?e:$('[data-checkbox="'+n+'"][data-checkbox-all="true"]');t?$('[data-checkbox="'+n+'"]').prop("checked",i):a.prop("checked",$('[data-checkbox="'+n+'"]').not('[data-checkbox-all="true"]').length==$('[data-checkbox="'+n+'"]:checked').not('[data-checkbox-all="true"]').length)})},APP.initAx5=function(){APP.MASK=new ax5.ui.mask({zIndex:1e3}),APP.MASK2=new ax5.ui.mask({zIndex:2e3}),APP.modal=new ax5.ui.modal({absolute:!0,iframeLoadingMsg:''}),APP.modal2=new ax5.ui.modal({absolute:!0,iframeLoadingMsg:''}),APP.toast=new ax5.ui.toast({containerPosition:"top-right",closeIcon:''})},$(function(){APP.init()}),function(e){"use strict";var t=".dropdown-backdrop",n='[data-toggle="dropdown"]',i=function(t){e(t).on("click.bs.dropdown",this.toggle)};function a(t){var n=t.attr("data-target");n||(n=(n=t.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&e(n);return i&&i.length?i:t.parent()}function r(i){i&&3===i.which||(e(t).remove(),e(n).each(function(){var t=e(this),n=a(t),r={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&e.contains(n[0],i.target)||(n.trigger(i=e.Event("hide.bs.dropdown",r)),i.isDefaultPrevented()||(t.attr("aria-expanded","false"),n.removeClass("open").trigger(e.Event("hidden.bs.dropdown",r)))))}))}i.VERSION="3.3.7",i.prototype.toggle=function(t){var n=e(this);if(!n.is(".disabled, :disabled")){var i=a(n),o=i.hasClass("open");if(r(),!o){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",r);var s={relatedTarget:this};if(i.trigger(t=e.Event("show.bs.dropdown",s)),t.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(e.Event("shown.bs.dropdown",s))}return!1}},i.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var i=e(this);if(t.preventDefault(),t.stopPropagation(),!i.is(".disabled, :disabled")){var r=a(i),o=r.hasClass("open");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&r.find(n).trigger("focus"),i.trigger("click");var s=r.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(t.target);38==t.which&&l>0&&l--,40==t.which&&l',onClick:function(){APP.MODAL.callback()}}}}});return{open:function(e){e=$.extend(!0,{},t,e),$(document.body).addClass("modalOpened"),this.modalCallback=e.callback,this.modalSendData=e.sendData,APP.modal.open(e)},css:function(t){t=$.extend(!0,{},e,t),APP.modal.css(t)},align:function(e){APP.modal.align(e)},close:function(e){APP.modal.close(),setTimeout(function(){$(document.body).removeClass("modalOpened")},500)},minimize:function(){APP.modal.minimize()},maximize:function(){APP.modal.maximize()},callback:function(e){this.modalCallback&&this.modalCallback(e),this.close(e)},modalCallback:{},getData:function(){if(this.modalSendData)return this.modalSendData()}}}(),APP.MODAL2=function(){var e={width:400,height:400,position:{left:"center",top:"middle"}},t=$.extend(!0,{},e,{iframeLoadingMsg:"",iframe:{method:"get",url:"#"},closeToEsc:!0,onStateChanged:function(){"open"===this.state?APP.MASK2.open():"close"===this.state&&APP.MASK2.close()},animateTime:100,zIndex:2001,absolute:!0,fullScreen:!1,header:{title:"새로운 윈도우",btns:{close:{label:'',onClick:function(){APP.MODAL2.callback()}}}}});return{open:function(e){e=$.extend(!0,{},t,e),$(document.body).addClass("modalOpened"),this.modalCallback=e.callback,this.modalSendData=e.sendData,APP.modal2.open(e)},css:function(t){t=$.extend(!0,{},e,t),APP.modal2.css(t)},align:function(e){APP.modal2.align(e)},close:function(e){APP.modal2.close(),setTimeout(function(){$(document.body).removeClass("modalOpened")},500)},minimize:function(){APP.modal2.minimize()},maximize:function(){APP.modal2.maximize()},callback:function(e){this.modalCallback&&this.modalCallback(e),this.close(e)},modalCallback:{},getData:function(){if(this.modalSendData)return this.modalSendData()}}}(),APP.TOAST={confirm:function(e){APP.toast.push({theme:"default",icon:'',msg:e})},error:function(e){APP.toast.push({theme:"danger",icon:'',msg:e})},success:function(e){APP.toast.push({theme:"success",icon:'',msg:e})}},APP.BOARD.keyCheck=function(e){return""==e?"게시판 고유키를 입력하세요":APP.REGEX.uniqueID.test(e)?!APP.BOARD.existCheck(e)||"이미 존재하는 키 입니다.":"게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다."},APP.BOARD.existCheck=function(e){var t=null;return $.ajax({url:base_url+"/ajax/board/info",type:"get",async:!1,cache:!1,data:{brd_key:e,is_raw:!0},success:function(e){t=e}}),t},APP.BOARD.CATEGORY.form=function(e,t,n){t=void 0!==t&&t>=0?t:null,n=void 0!==n&&n?n:null;return(e=void 0!==e&&e?e:null)?parseInt(t)<0?(alert("부모 카테고리가 선택되지 않았습니다."),!1):void APP.MODAL.open({width:400,height:200,header:{title:n?"카테고리 정보 수정":"카테고리 추가"},callback:function(){parent.location.reload()},iframe:{method:"get",url:"/admin/board/category_form",param:{brd_key:e,bca_parent:t,bca_idx:n}}}):(alert("게시판이 지정되지 않았습니다."),!1)},APP.BOARD.CATEGORY.remove=function(e){if(APP.BOARD.CATEGORY.count(e)>0)return alert("해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요"),!1;var t=APP.BOARD.CATEGORY.postCount(e);return!(t>0&&!confirm("해당 카테고리에 등록된 글이 "+t+"건이 있습니다. 삭제를 진행하시겠습니까?"))&&(!!confirm("해당 카테고리를 삭제하시겠습니까?")&&void $.ajax({url:base_url+"/ajax/board/category",type:"DELETE",cache:!1,async:!1,data:{bca_idx:e},success:function(e){e.result?(alert("카테고리 삭제에 성공하였습니다."),location.reload()):(alert("카테고리 삭제에 실패하였습니다."),location.reload())}}))},APP.BOARD.EXTRA.form=function(e,t){if(t=void 0!==t&&t?t:null,!(e=void 0!==e&&e?e:null))return alert("게시판이 지정되지 않았습니다."),!1;APP.MODAL.open({width:400,height:200,header:{title:t?"입력필드 수정":"입력필드 추가"},callback:function(){parent.location.reload()},iframe:{method:"get",url:"/admin/board/extra_form",param:{brd_key:e,bmt_idx:t}}})},APP.BOARD.EXTRA.remove=function(e,t){return e=void 0!==e&&e?e:null,(t=void 0!==t&&t?t:null)?!!confirm("해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?")&&void $.ajax({url:base_url+"/ajax/board/extra",type:"DELETE",cache:!1,async:!1,data:{brd_key:e,bmt_idx:t},success:function(e){e.result?(alert("입력필드 삭제에 성공하였습니다."),location.reload()):(alert("입력필드 삭제에 실패하였습니다."),location.reload())}}):(alert("잘못된 접근입니다."),!1)};var faq={form:function(e,t){t="string"==typeof t||"number"==typeof t?t:null;if(!(e="string"==typeof e||"number"==typeof e?e:null))return alert("FAQ 분류 정보가 없습니다."),!1;APP.MODAL.open({width:800,height:650,header:{title:t?"FAQ 정보 수정":"FAQ 추가"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/management/faq_form",param:{fac_idx:e,faq_idx:t}}})},remove:function(e){if(void 0!==e&&e&&""!=e.trim()||alert("잘못된 접근입니다."),!confirm("해당 FAQ를 삭제하시겠습니까?"))return!1;$.ajax({url:"/ajax/faq/info",type:"delete",async:!1,cache:!1,data:{faq_idx:e},success:function(e){alert("FAQ가 삭제되었습니다."),location.reload()}})},category:{}};faq.category.form=function(e){e="string"==typeof e||"number"==typeof e?e:null;APP.MODAL.open({width:$(window).width()>600?600:$(window).width(),height:250,header:{title:e?"FAQ 분류 정보 수정":"FAQ 분류 추가"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/management/faq_category_form",param:{fac_idx:e}}})},faq.category.exist=function(e){if(void 0===e||!e||""==e.trim())return!1;var t=!1;return $.ajax({url:"/ajax/faq/category",type:"get",async:!1,cache:!1,data:{fac_idx:e},success:function(e){t=!(e&&void 0!==e.fac_idx&&e.fac_idx)}}),t},faq.category.remove=function(e){void 0!==e&&e&&""!=e.trim()||alert("잘못된 접근입니다.");var t=0;if($.ajax({url:"/ajax/faq/lists",type:"get",async:!1,cache:!1,data:{fac_idx:e},success:function(e){t=e.total_count}}),!confirm(t>0?"해당 FAQ 분류에 "+t+"개의 FAQ 목록이 등록되어 있습니다.\nFAQ 분류을 삭제할시 등록된 FAQ 목록도 같이 삭제됩니다.\n\n계속 하시겠습니까?":"FAQ 분류을 삭제하시겠습니까?"))return!1;$.ajax({url:"/ajax/faq/category",type:"delete",async:!1,cache:!1,data:{fac_idx:e},success:function(e){alert("FAQ 분류가 삭제되었습니다."),location.href=base_url+"/admin/management/faq"}})},APP.MEMBER.POP_INFO_ADMIN=function(e){if(void 0===e||!e)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"회원 정보"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/info/"+e,param:{}}})},APP.MEMBER.POP_PASSWORD_ADMIN=function(e){if(void 0===e||!e)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"비밀번호 변경"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/password/"+e,param:{}}})},APP.MEMBER.POP_MODIFY_ADMIN=function(e){if(void 0===e||!e)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"회원 정보 수정"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/modify/"+e,param:{}}})},APP.MEMBER.POP_POINT_ADMIN=function(e){if(void 0===e||!e)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"회원 포인트 관리"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/point/"+e,param:{}}})},APP.MEMBER.POP_POINT_FORM_ADMIN=function(e){(e=void 0!==e&&e?e:null)?(APP.MODAL2.callback=function(){location.reload()},APP.MODAL2.open({width:410,height:200,header:{title:"회원 포인트 추가"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/point_form/"+e}})):alert("잘못된 접근입니다.")},APP.MEMBER.STATUS_CHANGE=function(e,t,n){if(void 0===e||!e||void 0===t||!t||void 0===n||!n)return alert(LANG.common_msg_invalid_access),!1;var i="";if("Y"==n)i=LANG.member_status_y;else if("N"==n)i=LANG.member_status_n;else if("D"==n)i=LANG.member_status_d;else{if("H"!=n)return alert(LANG.common_msg_invalid_access),!1;i=LANG.member_status_h}confirm("해당 회원의 상태를 ["+i+"] 상태로 변경합니까?")&&$.ajax({url:"/ajax/members/status",type:"POST",async:!1,cache:!1,data:{mem_idx:e,current_status:t,change_status:n},success:function(){alert("지정한 회원의 상태를 ["+i+"] 상태로 변경하였습니다."),location.reload()}})},$(function(){}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=t,i.c=e,i.i=function(t){return t},i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=3)}([function(t,e,i){var n,a,o,r;r=function(t,e){"use strict";var i,n=(i=e)&&i.__esModule?i:{default:i};var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};var o=function(){function t(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var i=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=i+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,n.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,n.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":a(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=r},a=[t,i(7)],void 0===(o="function"==typeof(n=r)?n.apply(e,a):n)||(t.exports=o)},function(t,e,i){var n=i(6),a=i(5);t.exports=function(t,e,i){if(!t&&!e&&!i)throw new Error("Missing required arguments");if(!n.string(e))throw new TypeError("Second argument must be a String");if(!n.fn(i))throw new TypeError("Third argument must be a Function");if(n.node(t))return function(t,e,i){return t.addEventListener(e,i),{destroy:function(){t.removeEventListener(e,i)}}}(t,e,i);if(n.nodeList(t))return function(t,e,i){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,i)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,i)})}}}(t,e,i);if(n.string(t))return function(t,e,i){return a(document.body,t,e,i)}(t,e,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(t,e){function i(){}i.prototype={on:function(t,e,i){var n=this.e||(this.e={});return(n[t]||(n[t]=[])).push({fn:e,ctx:i}),this},once:function(t,e,i){var n=this;function a(){n.off(t,a),e.apply(i,arguments)}return a._=e,this.on(t,a,i)},emit:function(t){for(var e=[].slice.call(arguments,1),i=((this.e||(this.e={}))[t]||[]).slice(),n=0,a=i.length;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===l(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,r.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return h("action",t)}},{key:"defaultTarget",value:function(t){var e=h("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return h("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,i=!!document.queryCommandSupported;return e.forEach(function(t){i=i&&!!document.queryCommandSupported(t)}),i}}]),e}();function h(t,e){var i="data-clipboard-"+t;if(e.hasAttribute(i))return e.getAttribute(i)}t.exports=u},a=[t,i(0),i(2),i(1)],void 0===(o="function"==typeof(n=r)?n.apply(e,a):n)||(t.exports=o)},function(t,e){var i=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&t.nodeType!==i;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},function(t,e,i){var n=i(4);function a(t,e,i,a,o){var r=function(t,e,i,a){return function(i){i.delegateTarget=n(i.target,e),i.delegateTarget&&a.call(t,i)}}.apply(this,arguments);return t.addEventListener(i,r,o),{destroy:function(){t.removeEventListener(i,r,o)}}}t.exports=function(t,e,i,n,o){return"function"==typeof t.addEventListener?a.apply(null,arguments):"function"==typeof i?a.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return a(t,e,i,n,o)}))}},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var i=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===i||"[object HTMLCollection]"===i)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var i=t.hasAttribute("readonly");i||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),i||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var n=window.getSelection(),a=document.createRange();a.selectNodeContents(t),n.removeAllRanges(),n.addRange(a),e=n.toString()}return e}}])}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=/\+/g;function i(t){return a.raw?t:encodeURIComponent(t)}function n(i,n){var o=a.raw?i:function(t){0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return t=decodeURIComponent(t.replace(e," ")),a.json?JSON.parse(t):t}catch(t){}}(i);return t.isFunction(n)?n(o):o}var a=t.cookie=function(e,o,r){if(arguments.length>1&&!t.isFunction(o)){if("number"==typeof(r=t.extend({},a.defaults,r)).expires){var s=r.expires,l=r.expires=new Date;l.setMilliseconds(l.getMilliseconds()+864e5*s)}return document.cookie=[i(e),"=",function(t){return i(a.json?JSON.stringify(t):String(t))}(o),r.expires?"; expires="+r.expires.toUTCString():"",r.path?"; path="+r.path:"",r.domain?"; domain="+r.domain:"",r.secure?"; secure":""].join("")}for(var c,u=e?void 0:{},h=document.cookie?document.cookie.split("; "):[],d=0,f=h.length;d0&&t.on("submit",function(){$.blockUI({css:{width:"25px",top:"49%",left:"49%",border:"0px none",backgroundColor:"transparent",cursor:"wait"},message:'로딩중',baseZ:1e4,overlayCSS:{opacity:0}})})});var DateFormatter,_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};(function(){"use strict";var t=this,e=this,i=e?e.document:null,n=(e&&e.document.documentElement,/^(["'](\\.|[^"\\\n\r])*?["']|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/),a=/^-ms-/,o=/[\-_]([\da-z])/gi,r=/([A-Z])/g,s=/\./,l=/[-|+]?[\D]/gi,c=/\D/gi,u=new RegExp("([0-9])([0-9][0-9][0-9][,.])"),h=/&/g,d=/=/,f=/[ ]+/g,p={},m=void 0,g=void 0;p.guid=1,p.getGuid=function(){return p.guid++},p.info=m=function(){var t=arguments,n=function(t,i,n,a,o,r){return e&&e.navigator?(i=-1!=(t=navigator.userAgent.toLowerCase()).search(/mobile/g),-1!=t.search(/iphone/g)?{name:"iphone",version:0,mobile:!0}:-1!=t.search(/ipad/g)?{name:"ipad",version:0,mobile:!0}:-1!=t.search(/android/g)?{name:"android",version:(a=/(android)[ \/]([\w.]+)/.exec(t)||[])[2]||"0",mobile:i}:("","msie"==(o=(a=/(opr)[ \/]([\w.]+)/.exec(t)||/(chrome)[ \/]([\w.]+)/.exec(t)||/(webkit)[ \/]([\w.]+)/.exec(t)||/(msie) ([\w.]+)/.exec(t)||t.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(t)||[])[1]||"")&&(o="ie"),{name:o,version:a[2]||"0",mobile:i})):{}}(),a=!("undefined"==typeof window||"undefined"==typeof navigator||!e.document),o=e&&/Firefox/i.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel";return{errorMsg:{},version:"1.4.126",baseUrl:"",onerror:function(){console.error(g.toArray(t).join(":"))},eventKeys:{BACKSPACE:8,TAB:9,RETURN:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46,HOME:36,END:35,PAGEUP:33,PAGEDOWN:34,INSERT:45,SPACE:32},weekNames:[{label:"SUN"},{label:"MON"},{label:"TUE"},{label:"WED"},{label:"THU"},{label:"FRI"},{label:"SAT"}],browser:n,isBrowser:a,supportTouch:!!e&&("ontouchstart"in e||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0),supportFileApi:!!e&&(e.FileReader&&e.File&&e.FileList&&e.Blob),wheelEnm:o,urlUtil:function(t,n){return n=(t={href:e.location.href,param:e.location.search,referrer:i.referrer,pathname:e.location.pathname,hostname:e.location.hostname,port:e.location.port}).href.split(/[\?#]/),t.param=t.param.replace("?",""),t.url=n[0],t.href.search("#")>-1&&(t.hashdata=g.last(n)),n=null,t.baseUrl=g.left(t.href,"?").replace(t.pathname,""),t},getError:function(t,e,i){return m.errorMsg&&m.errorMsg[t]?{className:t,errorCode:e,methodName:i,msg:m.errorMsg[t][e]}:{className:t,errorCode:e,methodName:i}}}}(),p.util=g=function(){var v=Object.prototype.toString;function y(t,e){if(M(t))return[];var i=void 0,n=0,a=t.length;if(void 0===a||"function"==typeof t){for(i in t)if(void 0!==t[i]&&!1===e.call(t[i],i,t[i]))break}else for(;n0&&(e+=","),e+=_(t[i]);e+="]"}else if(p.util.isObject(t)){e+="{";var a=[];y(t,function(t,e){a.push('"'+t+'": '+_(e))}),e+=a.join(", "),e+="}"}else e=p.util.isString(t)?'"'+t+'"':p.util.isNumber(t)?t:p.util.isUndefined(t)?"undefined":p.util.isFunction(t)?'"{Function}"':t;return e}function b(t){return"[object Object]"==v.call(t)}function w(t){return"[object Array]"==v.call(t)}function k(t){return"function"==typeof t}function x(t){return"[object String]"==v.call(t)}function D(t){return"[object Number]"==v.call(t)}function M(t){return null==t||""===t}function T(t,e){return void 0===t||void 0===e?"":x(e)?t.indexOf(e)>-1?t.substr(0,t.indexOf(e)):"":D(e)?t.substr(0,e):""}function C(t,e){return void 0===t||void 0===e?"":(t=""+t,x(e)?t.lastIndexOf(e)>-1?t.substr(t.lastIndexOf(e)+1):"":D(e)?t.substr(t.length-e):"")}function S(t){return t.replace(a,"ms-").replace(o,function(t,e){return e.toUpperCase()})}function P(t){return S(t).replace(r,function(t,e){return"-"+e.toLowerCase()})}function A(t,e){var i,n,a,o=(""+t).split(s);return n=Number(o[0].replace(/,/g,""))<0||"-0"==o[0],a=0,o[0]=o[0].replace(l,""),o[1]?(o[1]=o[1].replace(c,""),a=Number(o[0]+"."+o[1])||0):a=Number(o[0])||0,i=n?-a:a,y(e,function(t,e){var n,a;"round"==t&&(i=D(e)?e<0?+(Math.round(i+"e-"+Math.abs(e))+"e+"+Math.abs(e)):+(Math.round(i+"e+"+e)+"e-"+e):Math.round(i)),"floor"==t&&(i=Math.floor(i)),"ceil"==t?i=Math.ceil(i):"money"==t?i=function(t){var e=""+i;if(isNaN(e)||""==e)return"";var n=e.split(".");n[0]+=".";do{n[0]=n[0].replace(u,"$1,$2")}while(u.test(n[0]));return n.length>1?n.join(""):n[0].split(".")[0]}():"abs"==t?i=Math.abs(Number(i)):"byte"==t&&(n="KB",(a=Number(i)/1024)/1024>1&&(n="MB",a/=1024),a/1024>1&&(n="GB",a/=1024),i=A(a,{round:1})+n)}),i}function I(t,e,i,n,a,o){var r;return new Date,e<0&&(e=0),void 0===n&&(n=12),void 0===a&&(a=0),r=new Date(Date.UTC(t,e,i||1,n,a,o||0)),0==e&&1==i&&r.getUTCHours()+r.getTimezoneOffset()/60<0?r.setUTCHours(0):r.setUTCHours(r.getUTCHours()+r.getTimezoneOffset()/60),r}function O(t,e){var i,n,a,o,r,s,l,c,u,h,d,f,p,g,v,y=void 0,_=void 0,b=void 0,w=void 0,k=void 0,D=void 0,M=void 0,T=void 0,S=void 0,P=void 0;if(x(t))if(0==t.length)t=new Date;else if(t.length>15)/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d+)?(([+-]\d\d:\d\d)|Z)?$/i.test(t)||/^\d{4}(-\d\d(-\d\d(T\d\d:\d\d(:\d\d)?(\.\d+)?(([+-]\d\d:\d\d)|Z)?)?)?)?$/i.test(t)?t=new Date(t):(y=(S=(D=t.split(/ /g))[0].split(/\D/g))[0],_=parseFloat(S[1]),b=parseFloat(S[2]),M=(T=D[1]||"09:00").substring(0,5).split(":"),w=parseFloat(M[0]),k=parseFloat(M[1]),"AM"!==C(T,2)&&"PM"!==C(T,2)||(w+=12),t=I(y,_-1,b,w,k));else if(14==t.length)P=t.replace(/\D/g,""),t=I(P.substr(0,4),P.substr(4,2)-1,A(P.substr(6,2)),A(P.substr(8,2)),A(P.substr(10,2)),A(P.substr(12,2)));else if(t.length>7)P=t.replace(/\D/g,""),t=I(P.substr(0,4),P.substr(4,2)-1,A(P.substr(6,2)));else if(t.length>4)P=t.replace(/\D/g,""),t=I(P.substr(0,4),P.substr(4,2)-1,1);else{if(t.length>2)return I((P=t.replace(/\D/g,"")).substr(0,4),P.substr(4,2)-1,1);t=new Date}return void 0===e||void 0===t?t:("add"in e&&(t=function(t,e){var i=void 0,n=void 0,a=void 0,o=void 0;return void 0!==e.d?t.setTime(t.getTime()+864e5*e.d):void 0!==e.m?(i=t.getFullYear(),n=t.getMonth(),a=t.getDate(),(o=E(i+=parseInt(e.m/12),n+=e.m%12))=e||i<0||h&&t-c>=o}function m(){var t=Date.now();if(p(t))return g(t);s=setTimeout(m,function(t){var i=t-c,n=e-(t-l);return h?Math.min(n,o-i):n}(t))}function g(t){return s=void 0,d&&n?f(t):(n=a=void 0,r)}function v(){for(var t=Date.now(),i=p(t),o=arguments.length,d=Array(o),g=0;g\&\"]/gm,function(t){switch(t){case"<":return"<";case">":return">";case"&":return"&";case'"':return""";default:return t}}):""}function Y(t){return"[object String]"!=v.call(t)?t:t?t.replace(/(<)|(>)|(&)|(")/gm,function(t){switch(t){case"<":return"<";case">":return">";case"&":return"&";case""":return'"';default:return t}}):""}return{alert:function(t){return e.alert(_(t)),t},each:y,map:function(t,e){if(M(t))return[];var i=void 0,n=0,a=t.length,o=[],r=void 0;if(b(t)){for(i in t)if(void 0!==t[i]){if(r=void 0,!1===(r=e.call(t[i],i,t[i])))break;o.push(r)}}else for(;n0&&(void 0===e[n]||!1!==(a=i.call(t,a,e[--n]))););return a},filter:function(t,e){if(M(t))return[];var i,n=0,a=t.length,o=[];if(b(t))for(i in t)void 0!==t[i]&&e.call(t[i],i,t[i])&&o.push(t[i]);else for(;n7&&O(t)instanceof Date)return!0;if((t=t.replace(/\D/g,"")).length>7){var i=t.substr(4,2),n=t.substr(6,2);(t=O(t)).getMonth()==i-1&&t.getDate()==n&&(e=!0)}}return e},stopEvent:function(t){t||(t=window.event);return t.cancelBubble=!0,t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1},selectRange:W,debounce:H,throttle:function(t,e,i){var n=!0,a=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return b(i)&&(n="leading"in i?!!i.leading:n,a="trailing"in i?!!i.trailing:a),H(t,e,{leading:n,maxWait:e,trailing:a})},escapeHtml:z,unescapeHtml:Y,string:function(t){return new function(t){this.value=t,this.toString=function(){return this.value},this.format=function(){for(var t=[],e=0,i=arguments.length;e.5?l/(2-o-r):l/(o+r),o){case t:n=(e-i)/l+(e1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}if(t=c(t,360),e=c(e,100),i=c(i,100),0===e)n=a=o=i;else{var s=i<.5?i*(1+e):i+e-i*e,l=2*i-s;n=r(l,s,t+1/3),a=r(l,s,t),o=r(l,s,t-1/3)}return{r:255*n,g:255*a,b:255*o}}return new function(e){this._originalValue=e,e=function(t){var e=void 0;return(e=o.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=o.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=o.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=o.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=o.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=o.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=o.hex8.exec(t))?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16),a:parseInt(e[4]/255,16),format:"hex8"}:(e=o.hex6.exec(t))?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16),format:"hex"}:(e=o.hex4.exec(t))?{r:parseInt(e[1]+""+e[1],16),g:parseInt(e[2]+""+e[2],16),b:parseInt(e[3]+""+e[3],16),a:parseInt(e[4]+""+e[4],16),format:"hex8"}:!!(e=o.hex3.exec(t))&&{r:parseInt(e[1]+""+e[1],16),g:parseInt(e[2]+""+e[2],16),b:parseInt(e[3]+""+e[3],16),format:"hex"}}(e),this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a||1,this._format=e.format,this._hex=l(this.r)+l(this.g)+l(this.b),this.getHexValue=function(){return this._hex},this.lighten=function(e){e=0===e?0:e||10;var i,n=u(this.r,this.g,this.b);return n.l+=e/100,n.l=Math.min(1,Math.max(0,n.l)),n.h=360*n.h,t("rgba("+s((i=h(n.h,r(n.s),r(n.l))).r)+", "+s(i.g)+", "+s(i.b)+", "+this.a+")")},this.darken=function(e){e=0===e?0:e||10;var i,n=u(this.r,this.g,this.b);return n.l-=e/100,n.l=Math.min(1,Math.max(0,n.l)),n.h=360*n.h,t("rgba("+s((i=h(n.h,r(n.s),r(n.l))).r)+", "+s(i.g)+", "+s(i.b)+", "+this.a+")")},this.getBrightness=function(){return(299*this.r+587*this.g+114*this.b)/1e3},this.isDark=function(){return this.getBrightness()<128},this.isLight=function(){return!this.isDark()},this.getHsl=function(){var t=u(this.r,this.g,this.b);return t.l=Math.min(1,Math.max(0,t.l)),t.h=360*t.h,{h:t.h,s:t.s,l:t.l}}}(e)}}}(),"object"===("undefined"==typeof module?"undefined":_typeof(module))&&"object"===_typeof(module.exports)?module.exports=p:t.ax5=p}).call("undefined"!=typeof window?window:void 0),ax5.def={},ax5.info.errorMsg.ax5dialog={501:"Duplicate call error"},ax5.info.errorMsg.ax5picker={401:"Can not find target element",402:"Can not find boundID",501:"Can not find content key"},ax5.info.errorMsg["single-uploader"]={460:"There are no files to be uploaded.",461:"There is no uploaded files."},ax5.info.errorMsg.ax5calendar={401:"Can not find target element"},ax5.info.errorMsg.ax5formatter={401:"Can not find target element",402:"Can not find boundID",501:"Can not find pattern"},ax5.info.errorMsg.ax5menu={501:"Can not find menu item"},ax5.info.errorMsg.ax5select={401:"Can not find target element",402:"Can not find boundID",501:"Can not find option"},ax5.info.errorMsg.ax5combobox={401:"Can not find target element",402:"Can not find boundID",501:"Can not find option"},function(){"use strict";var t,e,i,n,a,o,r=/^\s*|\s*$/g;(Object.keys||(Object.keys=(t=Object.prototype.hasOwnProperty,e=!{toString:null}.propertyIsEnumerable("toString"),n=(i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"]).length,function(a){if("object"!==(void 0===a?"undefined":_typeof(a))&&("function"!=typeof a||null===a))throw new TypeError("type err");var o,r,s=[];for(o in a)t.call(a,o)&&s.push(o);if(e)for(r=0;r>>0;if("function"!=typeof t)throw TypeError();var n,a=arguments[1];for(n=0;ni));n+=1);return t.removeRule(0),r};document.querySelectorAll=function(t){return e(t,1/0)},document.querySelector=function(t){return e(t,1)[0]||null}}}(),String.prototype.trim||(String.prototype.trim=function(){return this.replace(r,"")}),window.JSON||(window.JSON={parse:function(t){return new Function("","return "+t)()},stringify:(o=/["]/g,a=function(t){var e,i,n;switch(e=void 0===t?"undefined":_typeof(t)){case"string":return'"'+t.replace(o,'\\"')+'"';case"number":case"boolean":return t.toString();case"undefined":return"undefined";case"function":return'""';case"object":if(!t)return"null";if(e="",t.splice){for(i=0,n=t.length;i=9)return!1;var t=Array.prototype.splice;Array.prototype.splice=function(){var e=Array.prototype.slice.call(arguments);return void 0===e[1]&&(e[1]=this.length-e[0]),t.apply(this,e)}}(),function(){var t=Array.prototype.slice;try{t.call(document.documentElement)}catch(e){Array.prototype.slice=function(e,i){if(i=void 0!==i?i:this.length,"[object Array]"===Object.prototype.toString.call(this))return t.call(this,e,i);var n,a,o=[],r=this.length,s=e||0;s=s>=0?s:Math.max(0,r+s);var l="number"==typeof i?Math.min(i,r):r;if(i<0&&(l=r+i),(a=l-s)>0)if(o=new Array(a),this.charAt)for(n=0;n":">",'"':""","'":"'","/":"/"};var u=/\s*/,h=/\s+/,d=/\s*=/,f=/\s*\}/,p=/#|\^|\/|>|\{|&|=|!/;function m(t){this.string=t,this.tail=t,this.pos=0}function g(t,e){this.view=t,this.cache={".":this.view,"@each":function(){var t=[];for(var e in this)t.push({"@key":e,"@value":this[e]});return t}},this.parent=e}function v(){this.cache={}}m.prototype.eos=function(){return""===this.tail},m.prototype.scan=function(t){var e=this.tail.match(t);if(!e||0!==e.index)return"";var i=e[0];return this.tail=this.tail.substring(i.length),this.pos+=i.length,i},m.prototype.scanUntil=function(t){var e,i=this.tail.search(t);switch(i){case-1:e=this.tail,this.tail="";break;case 0:e="";break;default:e=this.tail.substring(0,i),this.tail=this.tail.substring(i)}return this.pos+=e.length,e},g.prototype.push=function(t){return new g(t,this)},g.prototype.lookup=function(t){var e,i=this.cache;if(i.hasOwnProperty(t))e=i[t];else{for(var a,r,s=this,l=!1;s;){if(t.indexOf(".")>0)for(e=s.view,a=t.split("."),r=0;null!=e&&r0?a[a.length-1][4]:i;break;default:n.push(e)}return i}(function(t){for(var e,i,n=[],a=0,o=t.length;a"===o?r=this.renderPartial(a,e,i,n):"&"===o?r=this.unescapedValue(a,e):"name"===o?r=this.escapedValue(a,e):"text"===o&&(r=this.rawValue(a)),void 0!==r&&(s+=r);return s},v.prototype.renderSection=function(t,e,a,o){var r=this,s="",l=e.lookup(t[1]);if(l){if(i(l))for(var c=0,u=l.length;c"'\/]/g,function(t){return c[t]})},t.Scanner=m,t.Context=g,t.Writer=v}),function(){var t=ax5.ui,e=ax5.util,i=void 0;t.addClass({className:"mask"},function(){var n,a=this;this.instanceId=ax5.getGuid(),this.config={theme:"",target:jQuery(document.body).get(0),animateTime:250},this.maskContent="",this.status="off",n=this.config;var o=function(t,e){return t&&t.onStateChanged?t.onStateChanged.call(e,e):this.onStateChanged&&this.onStateChanged.call(e,e),t=null,e=null,!0},r=function(t){this.maskContent=t};this.init=function(){this.onStateChanged=n.onStateChanged,this.onClick=n.onClick,this.config.content&&r.call(this,this.config.content)},this.open=function(t){"on"===this.status&&this.close(),t&&t.content&&r.call(this,t.content),t&&void 0===t.templateName&&(t.templateName="defaultMask"),a.maskConfig=jQuery.extend(!0,{},this.config,t);var e=a.maskConfig,n=e.target,s=jQuery(n),l="ax-mask-"+ax5.getGuid(),c=void 0,u={},h={},d=e.templateName,f=function(t){return void 0===t.templateName&&(t.templateName="defaultMask"),i.tmpl.get.call(this,t.templateName,t)}({theme:e.theme,maskId:l,body:this.maskContent,templateName:d});return jQuery(document.body).append(f),n&&n!==jQuery(document.body).get(0)&&(u={position:e.position||"absolute",left:s.offset().left,top:s.offset().top,width:s.outerWidth(),height:s.outerHeight()},s.addClass("ax-masking"),jQuery(window).on("resize.ax5mask-"+this.instanceId,function(t){this.align()}.bind(this))),void 0!==a.maskConfig.zIndex&&(u["z-index"]=a.maskConfig.zIndex),this.$mask=c=jQuery("#"+l),this.$target=s,this.status="on",c.css(u),e.onClick&&c.on("click",function(t){h={self:a,state:"open",type:"click"},a.maskConfig.onClick.call(h,h)}),o.call(this,null,{self:this,state:"open"}),t=null,e=null,n=null,s=null,l=null,c=null,u=null,h=null,d=null,f=null,this},this.close=function(t){if(this.$mask){var e=function(){this.status="off",this.$mask.remove(),this.$target.removeClass("ax-masking"),o.call(this,null,{self:this,state:"close"}),jQuery(window).off("resize.ax5mask-"+this.instanceId)};t?setTimeout(function(){e.call(this)}.bind(this),t):e.call(this)}return this},this.fadeOut=function(){return this.$mask&&(this.$mask.addClass("fade-out"),setTimeout(function(){(function(){this.status="off",this.$mask.remove(),this.$target.removeClass("ax-masking"),o.call(this,null,{self:this,state:"close"}),jQuery(window).off("resize.ax5mask-"+this.instanceId)}).call(this)}.bind(this),n.animateTime)),this},this.align=function(){if(this.maskConfig&&this.maskConfig.target&&this.maskConfig.target!==jQuery(document.body).get(0))try{var t={position:this.maskConfig.position||"absolute",left:this.$target.offset().left,top:this.$target.offset().top,width:this.$target.outerWidth(),height:this.$target.outerHeight()};this.$mask.css(t)}catch(t){}return this},this.pullRequest=function(){console.log("test pullRequest01"),console.log("test pullRequest02")},this.main=function(){t.mask_instance=t.mask_instance||[],t.mask_instance.push(this),arguments&&e.isObject(arguments[0])&&this.setConfig(arguments[0])}.apply(this,arguments)}),i=ax5.ui.mask}(),function(){var t=ax5.ui.mask;t.tmpl={defaultMask:function(t){return'\n
\n
\n
\n
\n {{{body}}}\n
\n
\n
\n '},get:function(e,i,n){return ax5.mustache.render(t.tmpl[e].call(this,n),i)}}}(),function(){var t=ax5.ui,e=ax5.util,i=void 0;t.addClass({className:"modal"},function(){var n,a=this,o={mousedown:ax5.info.supportTouch?"touchstart":"mousedown",mousemove:ax5.info.supportTouch?"touchmove":"mousemove",mouseup:ax5.info.supportTouch?"touchend":"mouseup"},r=function(t){var e=t;return"changedTouches"in t&&t.changedTouches&&(e=t.changedTouches[0]),{clientX:e.clientX,clientY:e.clientY}};this.instanceId=ax5.getGuid(),this.config={id:"ax5-modal-"+this.instanceId,position:{left:"center",top:"middle",margin:10},minimizePosition:"bottom-right",clickEventName:"ontouchstart"in document.documentElement?"touchstart":"click",theme:"default",width:300,height:400,closeToEsc:!0,disableDrag:!1,disableResize:!1,animateTime:250,iframe:!1},this.activeModal=null,this.watingModal=!1,this.$={},n=this.config;var s=function(t,e){var i={resize:function(e){t&&t.onResize?t.onResize.call(e,e):this.onResize&&this.onResize.call(e,e)},move:function(){}};return e.state in i&&i[e.state].call(this,e),t&&t.onStateChanged?t.onStateChanged.call(e,e):this.onStateChanged&&this.onStateChanged.call(e,e),!0},l=function(t,n){var l=void 0;jQuery(document.body).append(function(t,e){var n={modalId:t,theme:e.theme,header:e.header,fullScreen:e.fullScreen?"fullscreen":"",styles:"",iframe:e.iframe,iframeLoadingMsg:e.iframeLoadingMsg,disableResize:e.disableResize};return e.zIndex&&(n.styles+="z-index:"+e.zIndex+";"),e.absolute&&(n.styles+="position:absolute;"),n.iframe&&"string"==typeof n.iframe.param&&(n.iframe.param=ax5.util.param(n.iframe.param)),i.tmpl.get.call(this,"content",n,{})}.call(this,t.id,t)),this.activeModal=jQuery("#"+t.id),this.$={root:this.activeModal,header:this.activeModal.find('[data-modal-els="header"]'),body:this.activeModal.find('[data-modal-els="body"]')},t.iframe?(this.$["iframe-wrap"]=this.activeModal.find('[data-modal-els="iframe-wrap"]'),this.$.iframe=this.activeModal.find('[data-modal-els="iframe"]'),this.$["iframe-form"]=this.activeModal.find('[data-modal-els="iframe-form"]'),this.$["iframe-loading"]=this.activeModal.find('[data-modal-els="iframe-loading"]')):this.$["body-frame"]=this.activeModal.find('[data-modal-els="body-frame"]'),this.align(),l={self:this,id:t.id,theme:t.theme,width:t.width,height:t.height,state:"open",$:this.$},t.iframe&&(this.$["iframe-wrap"].css({height:t.height}),this.$.iframe.css({height:t.height}),this.$["iframe-form"].attr({method:t.iframe.method}),this.$["iframe-form"].attr({target:t.id+"-frame"}),this.$["iframe-form"].attr({action:t.iframe.url}),this.$.iframe.on("load",function(){l.state="load",t.iframeLoadingMsg&&this.$["iframe-loading"].hide(),s.call(this,t,l)}.bind(this)),t.iframeLoadingMsg||this.$.iframe.show(),this.$["iframe-form"].submit()),n&&n.call(l,l),this.watingModal||s.call(this,t,l),t.closeToEsc&&jQuery(window).bind("keydown.ax-modal",function(t){u.call(this,t||window.event)}.bind(this)),jQuery(window).bind("resize.ax-modal",function(t){this.align(null,t||window.event)}.bind(this)),this.$.header.off(o.mousedown).off("dragstart").on(o.mousedown,function(i){var n=e.findParentNode(i.target,function(t){if(t.getAttribute("data-modal-header-btn"))return!0});t.isFullScreen||n||1==t.disableDrag||(a.mousePosition=r(i),d.on.call(a)),n&&c.call(a,i||window.event,t)}).on("dragstart",function(t){return e.stopEvent(t.originalEvent),!1}),this.activeModal.off(o.mousedown).off("dragstart").on(o.mousedown,"[data-ax5modal-resizer]",function(e){if(t.disableDrag||t.isFullScreen)return!1;a.mousePosition=r(e),f.on.call(a,this.getAttribute("data-ax5modal-resizer"))}).on("dragstart",function(t){return e.stopEvent(t.originalEvent),!1})},c=function(t,i,n,a,o){var r=void 0;t.srcElement&&(t.target=t.srcElement),(a=e.findParentNode(t.target,function(t){if(t.getAttribute("data-modal-header-btn"))return!0}))&&(r={self:this,key:o=a.getAttribute("data-modal-header-btn"),value:i.header.btns[o],dialogId:i.id,btnTarget:a},i.header.btns[o].onClick&&i.header.btns[o].onClick.call(r,o)),r=null,i=null,a=null,o=null},u=function(t){t.keyCode==ax5.info.eventKeys.ESC&&this.close()},h={"top-left":function(){this.align({left:"left",top:"top"})},"top-right":function(){this.align({left:"right",top:"top"})},"bottom-left":function(){this.align({left:"left",top:"bottom"})},"bottom-right":function(){this.align({left:"right",top:"bottom"})},"center-middle":function(){this.align({left:"center",top:"middle"})}},d={on:function(){var t=this.activeModal.css("z-index"),e=this.activeModal.offset(),i={width:this.activeModal.outerWidth(),height:this.activeModal.outerHeight()};jQuery(window).width(),jQuery(window).height(),jQuery(document).scrollLeft(),jQuery(document).scrollTop(),a.__dx=0,a.__dy=0,a.resizerBg=jQuery('
'),a.resizer=jQuery('
'),a.resizerBg.css({zIndex:t}),a.resizer.css({left:e.left,top:e.top,width:i.width,height:i.height,zIndex:t+1}),jQuery(document.body).append(a.resizerBg).append(a.resizer),a.activeModal.addClass("draged"),jQuery(document.body).on(o.mousemove+".ax5modal-move-"+this.instanceId,function(t){a.resizer.css(function(t){return a.__dx=t.clientX-a.mousePosition.clientX,a.__dy=t.clientY-a.mousePosition.clientY,{left:e.left+a.__dx,top:e.top+a.__dy}}(t))}).on(o.mouseup+".ax5modal-move-"+this.instanceId,function(t){d.off.call(a)}).on("mouseleave.ax5modal-move-"+this.instanceId,function(t){d.off.call(a)}),jQuery(document.body).attr("unselectable","on").css("user-select","none").on("selectstart",!1)},off:function(){this.activeModal.removeClass("draged"),function(){var t=this.resizer.offset();this.modalConfig.absolute||(t.left-=jQuery(document).scrollLeft(),t.top-=jQuery(document).scrollTop()),this.activeModal.css(t),this.modalConfig.left=t.left,this.modalConfig.top=t.top,t=null}.call(this),this.resizer.remove(),this.resizer=null,this.resizerBg.remove(),this.resizerBg=null,jQuery(document.body).off(o.mousemove+".ax5modal-move-"+this.instanceId).off(o.mouseup+".ax5modal-move-"+this.instanceId).off("mouseleave.ax5modal-move-"+this.instanceId),jQuery(document.body).removeAttr("unselectable").css("user-select","auto").off("selectstart"),s.call(this,a.modalConfig,{self:this,state:"move"})}},f={on:function(t){var e=this.activeModal.css("z-index"),i=this.activeModal.offset(),n={width:this.activeModal.outerWidth(),height:this.activeModal.outerHeight()},r=(jQuery(window).width(),jQuery(window).height(),jQuery(document).scrollLeft(),jQuery(document).scrollTop(),{top:function(t){return l>n.height-a.__dy&&(a.__dy=n.height-l),t.shiftKey?(l>n.height-2*a.__dy&&(a.__dy=(n.height-l)/2),{left:i.left,top:i.top+a.__dy,width:n.width,height:n.height-2*a.__dy}):t.altKey?(l>n.height-2*a.__dy&&(a.__dy=(n.height-l)/2),{left:i.left+a.__dy,top:i.top+a.__dy,width:n.width-2*a.__dy,height:n.height-2*a.__dy}):{left:i.left,top:i.top+a.__dy,width:n.width,height:n.height-a.__dy}},bottom:function(t){return l>n.height+a.__dy&&(a.__dy=-n.height+l),t.shiftKey?(l>n.height+2*a.__dy&&(a.__dy=(-n.height+l)/2),{left:i.left,top:i.top-a.__dy,width:n.width,height:n.height+2*a.__dy}):t.altKey?(l>n.height+2*a.__dy&&(a.__dy=(-n.height+l)/2),{left:i.left-a.__dy,top:i.top-a.__dy,width:n.width+2*a.__dy,height:n.height+2*a.__dy}):{left:i.left,top:i.top,width:n.width,height:n.height+a.__dy}},left:function(t){return s>n.width-a.__dx&&(a.__dx=n.width-s),t.shiftKey?(s>n.width-2*a.__dx&&(a.__dx=(n.width-s)/2),{left:i.left+a.__dx,top:i.top,width:n.width-2*a.__dx,height:n.height}):t.altKey?(s>n.width-2*a.__dx&&(a.__dx=(n.width-s)/2),{left:i.left+a.__dx,top:i.top+a.__dx,width:n.width-2*a.__dx,height:n.height-2*a.__dx}):{left:i.left+a.__dx,top:i.top,width:n.width-a.__dx,height:n.height}},right:function(t){return s>n.width+a.__dx&&(a.__dx=-n.width+s),t.shiftKey?(s>n.width+2*a.__dx&&(a.__dx=(-n.width+s)/2),{left:i.left-a.__dx,top:i.top,width:n.width+2*a.__dx,height:n.height}):t.altKey?(s>n.width+2*a.__dx&&(a.__dx=(-n.width+s)/2),{left:i.left-a.__dx,top:i.top-a.__dx,width:n.width+2*a.__dx,height:n.height+2*a.__dx}):{left:i.left,top:i.top,width:n.width+a.__dx,height:n.height}},"top-left":function(t){return s>n.width-a.__dx&&(a.__dx=n.width-s),l>n.height-a.__dy&&(a.__dy=n.height-l),t.shiftKey||t.altKey?(l>n.height-2*a.__dy&&(a.__dy=(n.height-l)/2),s>n.width-2*a.__dx&&(a.__dx=(n.width-s)/2),{left:i.left+a.__dx,top:i.top+a.__dy,width:n.width-2*a.__dx,height:n.height-2*a.__dy}):(l>n.height-2*a.__dy&&(a.__dy=(n.height-l)/2),s>n.width-2*a.__dx&&(a.__dx=(n.width-s)/2),{left:i.left+a.__dx,top:i.top+a.__dy,width:n.width-a.__dx,height:n.height-a.__dy})},"top-right":function(t){return s>n.width+a.__dx&&(a.__dx=-n.width+s),l>n.height-a.__dy&&(a.__dy=n.height-l),t.shiftKey||t.altKey?(l>n.height-2*a.__dy&&(a.__dy=(n.height-l)/2),s>n.width+2*a.__dx&&(a.__dx=(-n.width+s)/2),{left:i.left-a.__dx,top:i.top+a.__dy,width:n.width+2*a.__dx,height:n.height-2*a.__dy}):{left:i.left,top:i.top+a.__dy,width:n.width+a.__dx,height:n.height-a.__dy}},"bottom-left":function(t){return s>n.width-a.__dx&&(a.__dx=n.width-s),l>n.height+a.__dy&&(a.__dy=-n.height+l),t.shiftKey||t.altKey?(s>n.width-2*a.__dx&&(a.__dx=(n.width-s)/2),l>n.height+2*a.__dy&&(a.__dy=(-n.height+l)/2),{left:i.left+a.__dx,top:i.top-a.__dy,width:n.width-2*a.__dx,height:n.height+2*a.__dy}):{left:i.left+a.__dx,top:i.top,width:n.width-a.__dx,height:n.height+a.__dy}},"bottom-right":function(t){return s>n.width+a.__dx&&(a.__dx=-n.width+s),l>n.height+a.__dy&&(a.__dy=-n.height+l),t.shiftKey||t.altKey?(s>n.width+2*a.__dx&&(a.__dx=(-n.width+s)/2),l>n.height+2*a.__dy&&(a.__dy=(-n.height+l)/2),{left:i.left-a.__dx,top:i.top-a.__dy,width:n.width+2*a.__dx,height:n.height+2*a.__dy}):{left:i.left,top:i.top,width:n.width+a.__dx,height:n.height+a.__dy}}}),s=100,l=100,c={top:"row-resize",bottom:"row-resize",left:"col-resize",right:"col-resize","top-left":"nwse-resize","top-right":"nesw-resize","bottom-left":"nesw-resize","bottom-right":"nwse-resize"};a.__dx=0,a.__dy=0,a.resizerBg=jQuery('
'),a.resizer=jQuery('
'),a.resizerBg.css({zIndex:e,cursor:c[t]}),a.resizer.css({left:i.left,top:i.top,width:n.width,height:n.height,zIndex:e+1,cursor:c[t]}),jQuery(document.body).append(a.resizerBg).append(a.resizer),a.activeModal.addClass("draged"),jQuery(document.body).bind(o.mousemove+".ax5modal-resize-"+this.instanceId,function(e){a.resizer.css(function(e){return a.__dx=e.clientX-a.mousePosition.clientX,a.__dy=e.clientY-a.mousePosition.clientY,r[t](e)}(e))}).bind(o.mouseup+".ax5modal-resize-"+this.instanceId,function(t){f.off.call(a)}).bind("mouseleave.ax5modal-resize-"+this.instanceId,function(t){f.off.call(a)}),jQuery(document.body).attr("unselectable","on").css("user-select","none").bind("selectstart",!1)},off:function(){this.activeModal.removeClass("draged"),function(){var t=this.resizer.offset();jQuery.extend(t,{width:this.resizer.width(),height:this.resizer.height()}),this.modalConfig.absolute||(t.left-=jQuery(document).scrollLeft(),t.top-=jQuery(document).scrollTop()),this.activeModal.css(t),this.modalConfig.left=t.left,this.modalConfig.top=t.top,this.modalConfig.width=t.width,this.modalConfig.height=t.height,this.$.body.css({height:t.height-this.modalConfig.headerHeight}),this.modalConfig.iframe&&(this.$["iframe-wrap"].css({height:t.height-this.modalConfig.headerHeight}),this.$.iframe.css({height:t.height-this.modalConfig.headerHeight})),t=null}.call(this),this.resizer.remove(),this.resizer=null,this.resizerBg.remove(),this.resizerBg=null,s.call(this,a.modalConfig,{self:this,state:"resize"}),jQuery(document.body).unbind(o.mousemove+".ax5modal-resize-"+this.instanceId).unbind(o.mouseup+".ax5modal-resize-"+this.instanceId).unbind("mouseleave.ax5modal-resize-"+this.instanceId),jQuery(document.body).removeAttr("unselectable").css("user-select","auto").unbind("selectstart")}};this.init=function(){this.onStateChanged=n.onStateChanged,this.onResize=n.onResize},this.open=function(t,e,i){return void 0===i&&(i=0),this.activeModal?i<3?(this.watingModal=!0,setTimeout(function(){this.open(t,e,i+1)}.bind(this),n.animateTime)):this.watingModal=!1:(t=a.modalConfig=jQuery.extend(!0,{},n,t),l.call(this,t,e),this.watingModal=!1),this},this.close=function(t){var i=void 0,o=void 0;return this.activeModal&&(i=a.modalConfig,this.activeModal.addClass("destroy"),jQuery(window).unbind("keydown.ax-modal"),jQuery(window).unbind("resize.ax-modal"),setTimeout(function(){if(i.iframe){var n=this.$.iframe;if(n){var a=n.get(0),r=a.contentDocument?a.contentDocument:a.contentWindow.document;try{$(r.body).children().each(function(){$(this).remove()})}catch(t){}r.innerHTML="",n.attr("src","about:blank").remove(),window.CollectGarbage&&window.CollectGarbage()}}this.activeModal.remove(),this.activeModal=null,this.watingModal||s.call(this,i,{self:this,state:"close"}),t&&e.isFunction(t.callback)&&(o={self:this,id:i.id,theme:i.theme,width:i.width,height:i.height,state:"close",$:this.$},t.callback.call(o,o))}.bind(this),n.animateTime)),this.minimized=!1,this},this.minimize=function(t){if(!0!==this.minimized){var e=a.modalConfig;void 0===t&&(t=n.minimizePosition),this.minimized=!0,this.$.body.hide(),a.modalConfig.originalHeight=e.height,a.modalConfig.height=0,h[t].call(this),s.call(this,e,{self:this,state:"minimize"})}return this},this.restore=function(){var t=a.modalConfig;return this.minimized&&(this.minimized=!1,this.$.body.show(),a.modalConfig.height=a.modalConfig.originalHeight,a.modalConfig.originalHeight=void 0,this.align({left:"center",top:"middle"}),s.call(this,t,{self:this,state:"restore"})),this},this.css=function(t){return this.activeModal&&!a.fullScreen&&(this.activeModal.css(t),void 0!==t.width&&(a.modalConfig.width=t.width),void 0!==t.height&&(a.modalConfig.height=t.height),this.align()),this},this.setModalConfig=function(t){return a.modalConfig=jQuery.extend({},a.modalConfig,t),this.align(),this},this.align=function(t,i){if(!this.activeModal)return this;var n,o=a.modalConfig,r={width:o.width,height:o.height};return(o.isFullScreen=void 0!==(n=o.fullScreen)&&(e.isFunction(n)?n():void 0))?(o.header&&this.$.header.show(),o.header?(o.headerHeight=this.$.header.outerHeight(),r.height+=o.headerHeight):o.headerHeight=0,r.width=jQuery(window).width(),r.height=o.height,r.left=0,r.top=0):(o.header&&this.$.header.show(),t&&jQuery.extend(!0,o.position,t),o.header?(o.headerHeight=this.$.header.outerHeight(),r.height+=o.headerHeight):o.headerHeight=0,"left"==o.position.left?r.left=o.position.margin||0:"right"==o.position.left?r.left=jQuery(window).width()-r.width-(o.position.margin||0):"center"==o.position.left?r.left=jQuery(window).width()/2-r.width/2:r.left=o.position.left||0,"top"==o.position.top?r.top=o.position.margin||0:"bottom"==o.position.top?r.top=jQuery(window).height()-r.height-(o.position.margin||0):"middle"==o.position.top?r.top=jQuery(window).height()/2-r.height/2:r.top=o.position.top||0,r.left<0&&(r.left=0),r.top<0&&(r.top=0),o.absolute&&(r.top+=jQuery(window).scrollTop(),r.left+=jQuery(window).scrollLeft())),this.activeModal.css(r),this.$.body.css({height:r.height-(o.headerHeight||0)}),o.iframe&&(this.$["iframe-wrap"].css({height:r.height-o.headerHeight}),this.$.iframe.css({height:r.height-o.headerHeight})),this},this.main=function(){t.modal_instance=t.modal_instance||[],t.modal_instance.push(this),arguments&&e.isObject(arguments[0])&&this.setConfig(arguments[0])}.apply(this,arguments)}),i=ax5.ui.modal}(),function(){var t=ax5.ui.modal;t.tmpl={content:function(){return' \n
\n {{#header}}\n
\n {{{title}}}\n {{#btns}}\n
\n {{#@each}}\n \n {{/@each}}\n
\n {{/btns}}\n
\n {{/header}}\n
\n {{#iframe}}\n
\n
{{{iframeLoadingMsg}}}
\n \n
\n
\n \n {{#param}}\n {{#@each}}\n \n {{/@each}}\n {{/param}}\n
\n {{/iframe}}\n {{^iframe}}\n
\n {{/iframe}}\n
\n {{^disableResize}}\n
\n
\n
\n
\n
\n
\n
\n
\n {{/disableResize}}\n
\n '},get:function(e,i,n){return ax5.mustache.render(t.tmpl[e].call(this,n),i)}}}(),function(){var t,e=ax5.ui,i=ax5.util;e.addClass({className:"toast"},function(){var n,a=this,o=0,r=null;this.instanceId=ax5.getGuid(),this.config={clickEventName:"click",theme:"default",width:300,icon:"",closeIcon:"",msg:"",lang:{ok:"ok",cancel:"cancel"},displayTime:3e3,animateTime:250,containerPosition:"bottom-left"},this.toastContainer=null,this.queue=[],n=this.config;var s=function(t,e){return t&&t.onStateChanged?t.onStateChanged.call(e,e):this.onStateChanged&&this.onStateChanged.call(e,e),t=null,e=null,!0},l=function(e,i){var n={toastId:e,theme:i.theme,icon:i.icon,msg:(i.msg||"").replace(/\n/g,"
"),btns:i.btns,closeIcon:i.closeIcon};try{return t.tmpl.get.call(this,"toastDisplay",n)}finally{e=null,n=null}},c=function(t,e){r&&clearTimeout(r);var c,h={width:t.width};if(t.id="ax5-toast-"+a.containerId+"-"+ ++o,jQuery("#"+t.id).get(0))return this;"bottom"==i.left(n.containerPosition,"-")?this.toastContainer.append(l(t.id,t)):this.toastContainer.prepend(l(t.id,t)),(c=jQuery("#"+t.id)).css({width:h.width}),t.toastBox=c,this.queue.push(t),s.call(this,t,{self:this,state:"open",toastId:t.id}),"push"===t.toastType?(setTimeout(function(){this.close(t,e)}.bind(this),n.displayTime),c.find("[data-ax-toast-btn]").on(n.clickEventName,function(i){u.call(this,i||window.event,t,c,e)}.bind(this))):"confirm"===t.toastType&&c.find("[data-ax-toast-btn]").on(n.clickEventName,function(i){u.call(this,i||window.event,t,c,e)}.bind(this)),h=null},u=function(t,e,n,a,o,r){if(o=i.findParentNode(t.target,function(t){if(t.getAttribute("data-ax-toast-btn"))return!0})){var s={key:r=o.getAttribute("data-ax-toast-btn"),value:e.btns?e.btns[r]:r,toastId:e.id,btn_target:o};e.btns&&e.btns[r].onClick?e.btns[r].onClick.call(s,r):"push"===e.toastType?(a&&a.call(s,r),this.close(e,a)):"confirm"===e.toastType&&(a&&a.call(s,r),this.close(e,a))}t=null,e=null,a=null,o=null,r=null};this.init=function(){this.onStateChanged=n.onStateChanged,a.containerId=ax5.getGuid();var t=[];n.zIndex&&t.push("z-index:"+n.zIndex),jQuery(document.body).append('
'),this.toastContainer=jQuery('[data-toast-container="'+a.containerId+'"]')},this.push=function(t,e){return a.containerId||this.init(),i.isString(t)&&(t={title:n.title,msg:t}),t.toastType="push",a.dialogConfig={},jQuery.extend(!0,a.dialogConfig,n,t),t=a.dialogConfig,c.call(this,t,e),t=null,e=null,this},this.confirm=function(t,e){return a.containerId||this.init(),i.isString(t)&&(t={title:n.title,msg:t}),t.toastType="confirm",a.dialogConfig={},jQuery.extend(!0,a.dialogConfig,n,t),void 0===(t=a.dialogConfig).btns&&(t.btns={ok:{label:n.lang.ok,theme:t.theme}}),c.call(this,t,e),t=null,e=null,this},this.close=function(t,e){void 0===t&&(t=i.last(this.queue));var a=t.toastBox;return a.addClass("push"==t.toastType?"removed":"destroy"),this.queue=i.filter(this.queue,function(){return t.id!=this.id}),setTimeout(function(){var i={toastId:t.id};a.remove(),e&&e.call(i),i={self:this,state:"close",toastId:t.id},s.call(this,t,i),0===this.queue.length&&(r&&clearTimeout(r),r=setTimeout(function(){0===this.queue.length&&(o=0)}.bind(this),3e3)),i=null,t=null,e=null,a=null}.bind(this),n.animateTime),this},this.main=function(){e.toast_instance=e.toast_instance||[],e.toast_instance.push(this),arguments&&i.isObject(arguments[0])&&this.setConfig(arguments[0])}.apply(this,arguments)}),t=ax5.ui.toast}(),function(){var t=ax5.ui.toast;t.tmpl={toastDisplay:function(t){return'\n
\n {{#icon}}\n
{{{.}}}
\n {{/icon}}\n
{{{msg}}}
\n {{#btns}}\n
\n
\n {{#@each}}\n \n {{/@each}}\n
\n
\n {{/btns}}\n {{^btns}}\n {{{closeIcon}}}\n {{/btns}}\n
\n
'},get:function(e,i,n){return ax5.mustache.render(t.tmpl[e].call(this,n),i)}}}(),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){t.ui=t.ui||{};t.ui.version="1.12.1";var e,i=0,n=Array.prototype.slice;t.cleanData=(e=t.cleanData,function(i){var n,a,o;for(o=0;null!=(a=i[o]);o++)try{(n=t._data(a,"events"))&&n.remove&&t(a).triggerHandler("remove")}catch(t){}e(i)}),t.widget=function(e,i,n){var a,o,r,s={},l=e.split(".")[0],c=l+"-"+(e=e.split(".")[1]);return n||(n=i,i=t.Widget),t.isArray(n)&&(n=t.extend.apply(null,[{}].concat(n))),t.expr[":"][c.toLowerCase()]=function(e){return!!t.data(e,c)},t[l]=t[l]||{},a=t[l][e],o=t[l][e]=function(t,e){if(!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},t.extend(o,a,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),(r=new i).options=t.widget.extend({},r.options),t.each(n,function(e,n){t.isFunction(n)?s[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function a(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=a,e=n.apply(this,arguments),this._super=i,this._superApply=o,e}}():s[e]=n}),o.prototype=t.widget.extend(r,{widgetEventPrefix:a&&r.widgetEventPrefix||e},s,{constructor:o,namespace:l,widgetName:e,widgetFullName:c}),a?(t.each(a._childConstructors,function(e,i){var n=i.prototype;t.widget(n.namespace+"."+n.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,a,o=n.call(arguments,1),r=0,s=o.length;r",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,n){n=t(n||this.defaultElement||this)[0],this.element=t(n),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},n!==this&&(t.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===n&&this.destroy()}}),this.document=t(n.style?n.ownerDocument:n.document||n),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var n,a,o,r=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(r={},n=e.split("."),e=n.shift(),n.length){for(a=r[e]=t.widget.extend({},this.options[e]),o=0;o
"),o=a.children()[0];return t("body").append(a),i=o.offsetWidth,a.css("overflow","scroll"),i===(n=o.offsetWidth)&&(n=a[0].clientWidth),a.remove(),e=i-n},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),n=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),a="scroll"===i||"auto"===i&&e.width0?"right":"center",vertical:u<0?"top":l>0?"bottom":"middle"};di(n(l),n(u))?h.important="horizontal":h.important="vertical",e.using.call(this,t,h)}),r.offset(t.extend(M,{using:o}))})},t.ui.position={fit:{left:function(t,e){var n,a=e.within,o=a.isWindow?a.scrollLeft:a.offset.left,r=a.width,s=t.left-e.collisionPosition.marginLeft,l=o-s,c=s+e.collisionWidth-r-o;e.collisionWidth>r?l>0&&c<=0?(n=t.left+l+e.collisionWidth-r-o,t.left+=l-n):t.left=c>0&&l<=0?o:l>c?o+r-e.collisionWidth:o:l>0?t.left+=l:c>0?t.left-=c:t.left=i(t.left-s,t.left)},top:function(t,e){var n,a=e.within,o=a.isWindow?a.scrollTop:a.offset.top,r=e.within.height,s=t.top-e.collisionPosition.marginTop,l=o-s,c=s+e.collisionHeight-r-o;e.collisionHeight>r?l>0&&c<=0?(n=t.top+l+e.collisionHeight-r-o,t.top+=l-n):t.top=c>0&&l<=0?o:l>c?o+r-e.collisionHeight:o:l>0?t.top+=l:c>0?t.top-=c:t.top=i(t.top-s,t.top)}},flip:{left:function(t,e){var i,a,o=e.within,r=o.offset.left+o.scrollLeft,s=o.width,l=o.isWindow?o.scrollLeft:o.offset.left,c=t.left-e.collisionPosition.marginLeft,u=c-l,h=c+e.collisionWidth-s-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,f="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,p=-2*e.offset[0];u<0?((i=t.left+d+f+p+e.collisionWidth-s-r)<0||i0&&((a=t.left-e.collisionPosition.marginLeft+d+f+p-l)>0||n(a)0&&((i=t.top-e.collisionPosition.marginTop+d+f+p-l)>0||n(i)=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&t=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var n=null,a=!1,o=this;return!this.reverting&&(!this.options.disabled&&"static"!==this.options.type&&(this._refreshItems(e),t(e.target).parents().each(function(){if(t.data(this,o.widgetName+"-item")===o)return n=t(this),!1}),t.data(e.target,o.widgetName+"-item")===o&&(n=t(e.target)),!!n&&(!(this.options.handle&&!i&&(t(this.options.handle,n).find("*").addBack().each(function(){this===e.target&&(a=!0)}),!a))&&(this.currentItem=n,this._removeCurrentsFromItems(),!0))))},_mouseStart:function(e,i,n){var a,o,r=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,r.cursorAt&&this._adjustOffsetFromHelper(r.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),r.containment&&this._setContainment(),r.cursor&&"auto"!==r.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",r.cursor),this.storedStylesheet=t("").appendTo(o)),r.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",r.opacity)),r.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",r.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!n)for(a=this.containers.length-1;a>=0;a--)this.containers[a]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!r.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,n,a,o,r=this.options,s=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(a=(n=this.items[i]).item[0],(o=this._intersectsWithPointer(n))&&n.instance===this.currentContainer&&!(a===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===a||t.contains(this.placeholder[0],a)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],a))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(n))break;this._rearrange(e,n),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var n=this,a=this.placeholder.offset(),o=this.options.axis,r={};o&&"x"!==o||(r.left=a.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(r.top=a.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(r,parseInt(this.options.revert,10)||500,function(){n._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),n=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&n.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!n.length&&e.key&&n.push(e.key+"="),n.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),n=[];return e=e||{},i.each(function(){n.push(t(e.item||this).attr(e.attribute||"id")||"")}),n},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,n=this.positionAbs.top,a=n+this.helperProportions.height,o=t.left,r=o+t.width,s=t.top,l=s+t.height,c=this.offset.click.top,u=this.offset.click.left,h="x"===this.options.axis||n+c>s&&n+co&&e+ut[this.floating?"width":"height"]?f:o0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,n,a,o,r=[],s=[],l=this._connectWith();if(l&&e)for(i=l.length-1;i>=0;i--)for(n=(a=t(l[i],this.document[0])).length-1;n>=0;n--)(o=t.data(a[n],this.widgetFullName))&&o!==this&&!o.options.disabled&&s.push([t.isFunction(o.options.items)?o.options.items.call(o.element):t(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);function c(){r.push(this)}for(s.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=s.length-1;i>=0;i--)s[i][0].each(c);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;i=0;i--)for(n=(a=t(d[i],this.document[0])).length-1;n>=0;n--)(o=t.data(a[n],this.widgetFullName))&&o!==this&&!o.options.disabled&&(h.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=h.length-1;i>=0;i--)for(r=h[i][1],n=0,c=(s=h[i][0]).length;n=0;i--)(n=this.items[i]).instance!==this.currentContainer&&this.currentContainer&&n.item[0]!==this.currentItem[0]||(a=this.options.toleranceElement?t(this.options.toleranceElement,n.item):n.item,e||(n.width=a.outerWidth(),n.height=a.outerHeight()),o=a.offset(),n.left=o.left,n.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){var i,n=(e=e||this).options;n.placeholder&&n.placeholder.constructor!==String||(i=n.placeholder,n.placeholder={element:function(){var n=e.currentItem[0].nodeName.toLowerCase(),a=t("<"+n+">",e.document[0]);return e._addClass(a,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(a,"ui-sortable-helper"),"tbody"===n?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("",e.document[0]).appendTo(a)):"tr"===n?e._createTrPlaceholder(e.currentItem,a):"img"===n&&a.attr("src",e.currentItem.attr("src")),i||a.css("visibility","hidden"),a},update:function(t,a){i&&!n.forcePlaceholderSize||(a.height()||a.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),a.width()||a.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(n.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),n.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var n=this;e.children().each(function(){t(" ",n.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,n,a,o,r,s,l,c,u,h,d=null,f=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],f=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[f].containerCache.over||(this.containers[f]._trigger("over",e,this._uiHash(this)),this.containers[f].containerCache.over=1);else{for(a=1e4,o=null,r=(u=d.floating||this._isFloating(this.currentItem))?"left":"top",s=u?"width":"height",h=u?"pageX":"pageY",n=this.items.length-1;n>=0;n--)t.contains(this.containers[f].element[0],this.items[n].item[0])&&this.items[n].item[0]!==this.currentItem[0]&&(l=this.items[n].item.offset()[r],c=!1,e[h]-l>this.items[n][s]/2&&(c=!0),Math.abs(e[h]-l)this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(r=this.containment[3]+this.offset.click.top)),a.grid&&(i=this.originalPageY+Math.round((r-this.originalPageY)/a.grid[1])*a.grid[1],r=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-a.grid[1]:i+a.grid[1]:i,n=this.originalPageX+Math.round((o-this.originalPageX)/a.grid[0])*a.grid[0],o=this.containment?n-this.offset.click.left>=this.containment[0]&&n-this.offset.click.left<=this.containment[2]?n:n-this.offset.click.left>=this.containment[0]?n-a.grid[0]:n+a.grid[0]:n)),{top:r-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():l?0:s.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:s.scrollLeft())}},_rearrange:function(t,e,i,n){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var a=this.counter;this._delay(function(){a===this.counter&&this.refreshPositions(!n)})},_clear:function(t,e){this.reverting=!1;var i,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function a(t,e,i){return function(n){i._trigger(t,n,e._uiHash(e))}}for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||n.push(a("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(n.push(a("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),n=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&n.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),n=t(e.currentTarget);i[0]===n[0]&&(this._removeClass(n.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,n))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]))&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),e.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,n,a,o,r=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:r=!1,n=this.previousFilter||"",o=!1,a=e.keyCode>=96&&e.keyCode<=105?(e.keyCode-96).toString():String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,i=this._filterMenuItems(a),(i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i).length||(a=String.fromCharCode(e.keyCode),i=this._filterMenuItems(a)),i.length?(this.focus(e,i),this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}r&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,n,a,o=this,r=this.options.icons.submenu,s=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),i=s.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),n=t("").data("ui-menu-submenu-caret",!0);o._addClass(n,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(i,"ui-menu","ui-widget ui-widget-content ui-front"),(e=s.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var e=t(this);o._isDivider(e)&&o._addClass(e,"ui-menu-divider","ui-widget-content")}),a=(n=e.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(a,"ui-menu-item-wrapper"),e.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,n,a;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),n=this.active.children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",n.attr("id")),a=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(a,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,n,a,o,r,s;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,n=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,a=e.offset().top-this.activeMenu.offset().top-i-n,o=this.activeMenu.scrollTop(),r=this.activeMenu.height(),s=e.outerHeight(),a<0?this.activeMenu.scrollTop(o+a):a+s>r&&this.activeMenu.scrollTop(o+a-r+s))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var n=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));n.length||(n=this.element),this._close(n),this.blur(e),this._removeClass(n.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=n},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var n;this.active&&(n="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),n&&n.length&&this.active||(n=this.activeMenu.find(this.options.items)[e]()),this.focus(i,n)},nextPage:function(e){var i,n,a;this.active?this.isLastItem()||(this._hasScroll()?(n=this.active.offset().top,a=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-n-a<0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())):this.next(e)},previousPage:function(e){var i,n,a;this.active?this.isFirstItem()||(this._hasScroll()?(n=this.active.offset().top,a=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-n+a>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())):this.next(e)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,n,a=this.element[0].nodeName.toLowerCase(),o="textarea"===a,r="input"===a;this.isMultiLine=o||!r&&this._isContentEditable(this.element),this.valueMethod=this.element[o||r?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(a){if(this.element.prop("readOnly"))return e=!0,n=!0,void(i=!0);e=!1,n=!1,i=!1;var o=t.ui.keyCode;switch(a.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",a);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",a);break;case o.UP:e=!0,this._keyEvent("previous",a);break;case o.DOWN:e=!0,this._keyEvent("next",a);break;case o.ENTER:this.menu.active&&(e=!0,a.preventDefault(),this.menu.select(a));break;case o.TAB:this.menu.active&&this.menu.select(a);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(a),a.preventDefault());break;default:i=!0,this._searchTimeout(a)}},keypress:function(n){if(e)return e=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||n.preventDefault());if(!i){var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:this._move("previousPage",n);break;case a.PAGE_DOWN:this._move("nextPage",n);break;case a.UP:this._keyEvent("previous",n);break;case a.DOWN:this._keyEvent("next",n)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),this._change(t))}}),this._initSource(),this.menu=t("
    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var n,a;if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)});a=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:a})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(a.value),(n=i.item.attr("aria-label")||a.value)&&t.trim(n).length&&(this.liveRegion.children().hide(),t("
    ").text(n).appendTo(this.liveRegion))},menuselect:function(e,i){var n=i.item.data("ui-autocomplete-item"),a=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=a,this._delay(function(){this.previous=a,this.selectedItem=n})),!1!==this._trigger("select",e,{item:n})&&this._value(n.value),this.term=this._value(),this.close(e),this.selectedItem=n}}),this.liveRegion=t("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,n=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,n){n(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,a){n.xhr&&n.xhr.abort(),n.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){a(t)},error:function(){a([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),n=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;e&&(!e||i||n)||(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
    ").text(i.label)).appendTo(e)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var n=new RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return n.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
    ").text(i).appendTo(this.liveRegion))}});var r;t.ui.autocomplete;function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=l(t("
    "))}function l(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,c)}function c(){t.datepicker._isDisabledDatepicker(r.inline?r.dpDiv.parent()[0]:r.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function u(e,i){for(var n in t.extend(e,i),i)null==i[n]&&(e[n]=i[n]);return e}t.extend(t.ui,{datepicker:{version:"1.12.1"}}),t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return u(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var n,a,o;a="div"===(n=e.nodeName.toLowerCase())||"span"===n,e.id||(this.uuid+=1,e.id="dp"+this.uuid),(o=this._newInst(t(e),a)).settings=t.extend({},i||{}),"input"===n?this._connectDatepicker(e,o):a&&this._inlineDatepicker(e,o)},_newInst:function(e,i){return{id:e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?l(t("
    ")):this.dpDiv}},_connectDatepicker:function(e,i){var n=t(e);i.append=t([]),i.trigger=t([]),n.hasClass(this.markerClassName)||(this._attachments(n,i),n.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var n,a,o,r=this._get(i,"appendText"),s=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t(""+r+""),e[s?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),"focus"!==(n=this._get(i,"showOn"))&&"both"!==n||e.on("focus",this._showDatepicker),"button"!==n&&"both"!==n||(a=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("").addClass(this._triggerClass).attr({src:o,alt:a,title:a}):t("").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:a,title:a}):a)),e[s?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,n,a,o=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,n=0,a=0;ai&&(i=t[a].length,n=a);return n},o.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var n=t(e);n.hasClass(this.markerClassName)||(n.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,n,a,o){var r,s,l,c,h,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),(d=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},t.data(this._dialogInput[0],"datepicker",d)),u(d.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(s=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,h=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[s/2-100+c,l/2-150+h]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=n,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,n=t(e),a=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(a.append.remove(),a.trigger.remove(),n.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==i&&"span"!==i||n.removeClass(this.markerClassName).empty(),r===a&&(r=null))},_enableDatepicker:function(e){var i,n,a=t(e),o=t.data(e,"datepicker");a.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==i&&"span"!==i||((n=a.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,n,a=t(e),o=t.data(e,"datepicker");a.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==i&&"span"!==i||((n=a.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e-1},_doKeyUp:function(e){var i=t.datepicker._getInst(e.target);if(i.input.val()!==i.lastVal)try{t.datepicker.parseDate(t.datepicker._get(i,"dateFormat"),i.input?i.input.val():null,t.datepicker._getFormatConfig(i))&&(t.datepicker._setDateFromField(i),t.datepicker._updateAlternate(i),t.datepicker._updateDatepicker(i))}catch(t){}return!0},_showDatepicker:function(e){var i,n,a,o,r,s,l;("input"!==(e=e.target||e).nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),t.datepicker._isDisabledDatepicker(e)||t.datepicker._lastInput===e)||(i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),!1!==(a=(n=t.datepicker._get(i,"beforeShow"))?n.apply(e,[e,i]):{})&&(u(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),o=!1,t(e).parents().each(function(){return!(o|="fixed"===t(this).css("position"))}),r={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),r=t.datepicker._checkOffset(i,r,o),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":o?"fixed":"absolute",display:"none",left:r.left+"px",top:r.top+"px"}),i.inline||(s=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.css("z-index",function(t){for(var e,i;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[s]?i.dpDiv.show(s,t.datepicker._get(i,"showOptions"),l):i.dpDiv[s||"show"](s?l:null),t.datepicker._shouldFocusInput(i)&&i.input.trigger("focus"),t.datepicker._curInst=i)))},_updateDatepicker:function(e){this.maxRows=4,r=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,n=this._getNumberOfMonths(e),a=n[1],o=e.dpDiv.find("."+this._dayOverClass+" a");o.length>0&&c.apply(o.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),a>1&&e.dpDiv.addClass("ui-datepicker-multi-"+a).css("width",17*a+"em"),e.dpDiv[(1!==n[0]||1!==n[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,n){var a=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,s=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(n?0:t(document).scrollLeft()),c=document.documentElement.clientHeight+(n?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?a-r:0,i.left-=n&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=n&&i.top===e.input.offset().top+s?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+a>l&&l>a?Math.abs(i.left+a-l):0),i.top-=Math.min(i.top,i.top+o>c&&c>o?Math.abs(o+s):0),i},_findPos:function(e){for(var i,n=this._getInst(e),a=this._get(n,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[a?"previousSibling":"nextSibling"];return[(i=t(e).offset()).left,i.top]},_hideDatepicker:function(e){var i,n,a,o,r=this._curInst;!r||e&&r!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(r,"showAnim"),n=this._get(r,"duration"),a=function(){t.datepicker._tidyDialog(r)},t.effects&&(t.effects.effect[i]||t.effects[i])?r.dpDiv.hide(i,t.datepicker._get(r,"showOptions"),n,a):r.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?n:null,a),i||a(),this._datepickerShowing=!1,(o=this._get(r,"onClose"))&&o.apply(r.input?r.input[0]:null,[r.input?r.input.val():"",r]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),n=t.datepicker._getInst(i[0]);(i[0].id===t.datepicker._mainDivId||0!==i.parents("#"+t.datepicker._mainDivId).length||i.hasClass(t.datepicker.markerClassName)||i.closest("."+t.datepicker._triggerClass).length||!t.datepicker._datepickerShowing||t.datepicker._inDialog&&t.blockUI)&&(!i.hasClass(t.datepicker.markerClassName)||t.datepicker._curInst===n)||t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,n){var a=t(e),o=this._getInst(a[0]);this._isDisabledDatepicker(a[0])||(this._adjustInstDate(o,i+("M"===n?this._get(o,"showCurrentAtPos"):0),n),this._updateDatepicker(o))},_gotoToday:function(e){var i,n=t(e),a=this._getInst(n[0]);this._get(a,"gotoCurrent")&&a.currentDay?(a.selectedDay=a.currentDay,a.drawMonth=a.selectedMonth=a.currentMonth,a.drawYear=a.selectedYear=a.currentYear):(i=new Date,a.selectedDay=i.getDate(),a.drawMonth=a.selectedMonth=i.getMonth(),a.drawYear=a.selectedYear=i.getFullYear()),this._notifyChange(a),this._adjustDate(n)},_selectMonthYear:function(e,i,n){var a=t(e),o=this._getInst(a[0]);o["selected"+("M"===n?"Month":"Year")]=o["draw"+("M"===n?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(a)},_selectDay:function(e,i,n,a){var o,r=t(e);t(a).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||((o=this._getInst(r[0])).selectedDay=o.currentDay=t("a",a).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=n,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var n,a=t(e),o=this._getInst(a[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),(n=this._get(o,"onSelect"))?n.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,n,a,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),n=this._getDate(e),a=this.formatDate(i,n,this._getFormatConfig(e)),t(o).val(a))},noWeekends:function(t){var e=t.getDay();return[e>0&&e<6,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,n){if(null==e||null==i)throw"Invalid arguments";if(""===(i="object"==typeof i?i.toString():i+""))return null;var a,o,r,s,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),h=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,d=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,p=(n?n.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,_=!1,b=function(t){var i=a+1-1)for(g=1,v=y;;){if(v<=(o=this._getDaysInMonth(m,g-1)))break;g++,v-=o}if((s=this._daylightSavingAdjust(new Date(m,g-1,v))).getFullYear()!==m||s.getMonth()+1!==g||s.getDate()!==v)throw"Invalid date";return s},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";var n,a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,s=(i?i.monthNames:null)||this._defaults.monthNames,l=function(e){var i=n+112?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var n=!e,a=t.selectedMonth,o=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),a===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(n?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),n="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(n,-i,"M")},next:function(){t.datepicker._adjustDate(n,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(n)},selectDay:function(){return t.datepicker._selectDay(n,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(n,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(n,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,n,a,o,r,s,l,c,u,h,d,f,p,m,g,v,y,_,b,w,k,x,D,M,T,C,S,P,A,I,O,E,j,N,F,W,H,z,Y=new Date,L=this._daylightSavingAdjust(new Date(Y.getFullYear(),Y.getMonth(),Y.getDate())),R=this._get(t,"isRTL"),$=this._get(t,"showButtonPanel"),U=this._get(t,"hideIfNoPrevNext"),B=this._get(t,"navigationAsDateFormat"),K=this._getNumberOfMonths(t),Q=this._get(t,"showCurrentAtPos"),q=this._get(t,"stepMonths"),J=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),V=this._getMinMaxDate(t,"min"),X=this._getMinMaxDate(t,"max"),Z=t.drawMonth-Q,tt=t.drawYear;if(Z<0&&(Z+=12,tt--),X)for(e=this._daylightSavingAdjust(new Date(X.getFullYear(),X.getMonth()-K[0]*K[1]+1,X.getDate())),e=V&&ee;)--Z<0&&(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=B?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-q,1)),this._getFormatConfig(t)):i,n=this._canAdjustMonth(t,-1,tt,Z)?""+i+"":U?"":""+i+"",a=this._get(t,"nextText"),a=B?this.formatDate(a,this._daylightSavingAdjust(new Date(tt,Z+q,1)),this._getFormatConfig(t)):a,o=this._canAdjustMonth(t,1,tt,Z)?""+a+"":U?"":""+a+"",r=this._get(t,"currentText"),s=this._get(t,"gotoCurrent")&&t.currentDay?G:L,r=B?this.formatDate(r,s,this._getFormatConfig(t)):r,l=t.inline?"":"",c=$?"
    "+(R?l:"")+(this._isInRange(t,s)?"":"")+(R?"":l)+"
    ":"",u=parseInt(this._get(t,"firstDay"),10),u=isNaN(u)?0:u,h=this._get(t,"showWeek"),d=this._get(t,"dayNames"),f=this._get(t,"dayNamesMin"),p=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),y=this._get(t,"selectOtherMonths"),_=this._getDefaultDate(t),b="",k=0;k1)switch(D){case 0:C+=" ui-datepicker-group-first",T=" ui-corner-"+(R?"right":"left");break;case K[1]-1:C+=" ui-datepicker-group-last",T=" ui-corner-"+(R?"left":"right");break;default:C+=" ui-datepicker-group-middle",T=""}C+="'>"}for(C+="
    "+(/all|left/.test(T)&&0===k?R?o:n:"")+(/all|right/.test(T)&&0===k?R?n:o:"")+this._generateMonthYearHeader(t,Z,tt,V,X,k>0||D>0,p,m)+"
    ",S=h?"":"",w=0;w<7;w++)S+="";for(C+=S+"",A=this._getDaysInMonth(tt,Z),tt===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,A)),I=(this._getFirstDayOfMonth(tt,Z)-u+7)%7,O=Math.ceil((I+A)/7),E=J&&this.maxRows>O?this.maxRows:O,this.maxRows=E,j=this._daylightSavingAdjust(new Date(tt,Z,1-I)),N=0;N",F=h?"":"",w=0;w<7;w++)W=g?g.apply(t.input?t.input[0]:null,[j]):[!0,""],z=(H=j.getMonth()!==Z)&&!y||!W[0]||V&&jX,F+="",j.setDate(j.getDate()+1),j=this._daylightSavingAdjust(j);C+=F+""}++Z>11&&(Z=0,tt++),x+=C+="
    "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+f[P]+"
    "+this._get(t,"calculateWeek")(j)+""+(H&&!v?" ":z?""+j.getDate()+"":""+j.getDate()+"")+"
    "+(J?"
    "+(K[0]>0&&D===K[1]-1?"
    ":""):"")}b+=x}return b+=c,t._keyEvent=!1,b},_generateMonthYearHeader:function(t,e,i,n,a,o,r,s){var l,c,u,h,d,f,p,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),y=this._get(t,"showMonthAfterYear"),_="
    ",b="";if(o||!g)b+=""+r[e]+"";else{for(l=n&&n.getFullYear()===i,c=a&&a.getFullYear()===i,b+=""}if(y||(_+=b+(!o&&g&&v?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!v)_+=""+i+"";else{for(h=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=(f=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e})(h[0]),m=Math.max(p,f(h[1]||"")),p=n?Math.max(p,n.getFullYear()):p,m=a?Math.min(m,a.getFullYear()):m,t.yearshtml+="",_+=t.yearshtml,t.yearshtml=null}return _+=this._get(t,"yearSuffix"),y&&(_+=(!o&&g&&v?"":" ")+b),_+="
    "},_adjustInstDate:function(t,e,i){var n=t.selectedYear+("Y"===i?e:0),a=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(n,a))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(n,a,o)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),a=i&&en?n:a},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,n){var a=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,n+(e<0?e:a[0]*a[1]),1));return e<0&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,n,a=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),r=null,s=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),n=(new Date).getFullYear(),r=parseInt(i[0],10),s=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=n),i[1].match(/[+\-].*/)&&(s+=n)),(!a||e.getTime()>=a.getTime())&&(!o||e.getTime()<=o.getTime())&&(!r||e.getFullYear()>=r)&&(!s||e.getFullYear()<=s)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,n){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var a=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(n,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),a,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1";t.datepicker}),function(){"use strict";var t,e,i,n,a;t=function(t,e){return"string"==typeof t&&"string"==typeof e&&t.toLowerCase()===e.toLowerCase()},e=function(t,i,n){var a=n||"0",o=t.toString();return o.lengths?"20":"19")+r):s,p=!0;break;case"m":case"n":case"M":case"F":if(isNaN(s)){if(!((l=f.getMonth(r))>0))return null;v.month=l}else{if(!(s>=1&&12>=s))return null;v.month=s}p=!0;break;case"d":case"j":if(!(s>=1&&31>=s))return null;v.day=s,p=!0;break;case"g":case"h":if(d=a[c=n.indexOf("a")>-1?n.indexOf("a"):n.indexOf("A")>-1?n.indexOf("A"):-1],c>-1)u=t(d,g.meridiem[0])?0:t(d,g.meridiem[1])?12:-1,s>=1&&12>=s&&u>-1?v.hour=s+u-1:s>=0&&23>=s&&(v.hour=s);else{if(!(s>=0&&23>=s))return null;v.hour=s}m=!0;break;case"G":case"H":if(!(s>=0&&23>=s))return null;v.hour=s,m=!0;break;case"i":if(!(s>=0&&59>=s))return null;v.min=s,m=!0;break;case"s":if(!(s>=0&&59>=s))return null;v.sec=s,m=!0}if(!0===p&&v.year&&v.month&&v.day)v.date=new Date(v.year,v.month-1,v.day,v.hour,v.min,v.sec,0);else{if(!0!==m)return null;v.date=new Date(0,0,0,v.hour,v.min,v.sec,0)}return v.date},guessDate:function(t,e){if("string"!=typeof t)return t;var i,n,a,o,r,s,l=t.replace(this.separators,"\0").split("\0"),c=e.match(this.validParts),u=new Date,h=0;if(!/^[djmn]/g.test(c[0]))return t;for(a=0;a(i=r.length)?i:4,!(n=parseInt(4>i?n.toString().substr(0,4-i)+r:r.substr(0,4))))return null;u.setFullYear(n);break;case 3:u.setHours(s);break;case 4:u.setMinutes(s);break;case 5:u.setSeconds(s)}(o=r.substr(h)).length>0&&l.splice(a+1,0,o)}return u},parseFormat:function(t,i){var n,a=this,o=a.dateSettings,r=/\\?(.?)/gi,s=function(t,e){return n[t]?n[t]():e};return n={d:function(){return e(n.j(),2)},D:function(){return o.daysShort[n.w()]},j:function(){return i.getDate()},l:function(){return o.days[n.w()]},N:function(){return n.w()||7},w:function(){return i.getDay()},z:function(){var t=new Date(n.Y(),n.n()-1,n.j()),e=new Date(n.Y(),0,1);return Math.round((t-e)/864e5)},W:function(){var t=new Date(n.Y(),n.n()-1,n.j()-n.N()+3),i=new Date(t.getFullYear(),0,4);return e(1+Math.round((t-i)/864e5/7),2)},F:function(){return o.months[i.getMonth()]},m:function(){return e(n.n(),2)},M:function(){return o.monthsShort[i.getMonth()]},n:function(){return i.getMonth()+1},t:function(){return new Date(n.Y(),n.n(),0).getDate()},L:function(){var t=n.Y();return t%4==0&&t%100!=0||t%400==0?1:0},o:function(){var t=n.n(),e=n.W();return n.Y()+(12===t&&9>e?1:1===t&&e>9?-1:0)},Y:function(){return i.getFullYear()},y:function(){return n.Y().toString().slice(-2)},a:function(){return n.A().toLowerCase()},A:function(){var t=n.G()<12?0:1;return o.meridiem[t]},B:function(){var t=3600*i.getUTCHours(),n=60*i.getUTCMinutes(),a=i.getUTCSeconds();return e(Math.floor((t+n+a+3600)/86.4)%1e3,3)},g:function(){return n.G()%12||12},G:function(){return i.getHours()},h:function(){return e(n.g(),2)},H:function(){return e(n.G(),2)},i:function(){return e(i.getMinutes(),2)},s:function(){return e(i.getSeconds(),2)},u:function(){return e(1e3*i.getMilliseconds(),6)},e:function(){return/\((.*)\)/.exec(String(i))[1]||"Coordinated Universal Time"},I:function(){return new Date(n.Y(),0)-Date.UTC(n.Y(),0)!=new Date(n.Y(),6)-Date.UTC(n.Y(),6)?1:0},O:function(){var t=i.getTimezoneOffset(),n=Math.abs(t);return(t>0?"-":"+")+e(100*Math.floor(n/60)+n%60,4)},P:function(){var t=n.O();return t.substr(0,3)+":"+t.substr(3,2)},T:function(){return(String(i).match(a.tzParts)||[""]).pop().replace(a.tzClip,"")||"UTC"},Z:function(){return 60*-i.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(r,s)},r:function(){return"D, d M Y H:i:s O".replace(r,s)},U:function(){return i.getTime()/1e3||0}},s(t,t)},formatDate:function(t,e){var i,n,a,o,r,s=this,l="";if("string"==typeof t&&!(t=s.parseDate(t,e)))return null;if(t instanceof Date){for(a=e.length,i=0;a>i;i++)"S"!==(r=e.charAt(i))&&"\\"!==r&&(i>0&&"\\"===e.charAt(i-1)?l+=r:(o=s.parseFormat(r,t),i!==a-1&&s.intParts.test(r)&&"S"===e.charAt(i+1)&&(n=parseInt(o)||0,o+=s.dateSettings.ordinal(n)),l+=o));return l}return""}}}();var datetimepickerFactory=function(t){"use strict";var e={i18n:{ar:{months:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],dayOfWeekShort:["ن","ث","ع","خ","ج","س","ح"],dayOfWeek:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"]},ro:{months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],dayOfWeekShort:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],dayOfWeek:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"]},id:{months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],dayOfWeekShort:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],dayOfWeek:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},is:{months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],dayOfWeekShort:["Sun","Mán","Þrið","Mið","Fim","Fös","Lau"],dayOfWeek:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"]},bg:{months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],dayOfWeekShort:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"]},fa:{months:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],dayOfWeekShort:["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayOfWeek:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"]},ru:{months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],dayOfWeekShort:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"]},uk:{months:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],dayOfWeekShort:["Ндл","Пнд","Втр","Срд","Чтв","Птн","Сбт"],dayOfWeek:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"]},en:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},el:{months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],dayOfWeekShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayOfWeek:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"]},de:{months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],dayOfWeekShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayOfWeek:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},nl:{months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],dayOfWeekShort:["zo","ma","di","wo","do","vr","za"],dayOfWeek:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},tr:{months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],dayOfWeekShort:["Paz","Pts","Sal","Çar","Per","Cum","Cts"],dayOfWeek:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},fr:{months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],dayOfWeekShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayOfWeek:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},es:{months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],dayOfWeekShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],dayOfWeek:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"]},th:{months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],dayOfWeekShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayOfWeek:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"]},pl:{months:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],dayOfWeekShort:["nd","pn","wt","śr","cz","pt","sb"],dayOfWeek:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"]},pt:{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},ch:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"]},se:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},km:{months:["មករា​","កុម្ភៈ","មិនា​","មេសា​","ឧសភា​","មិថុនា​","កក្កដា​","សីហា​","កញ្ញា​","តុលា​","វិច្ឆិកា","ធ្នូ​"],dayOfWeekShort:["អាទិ​","ច័ន្ទ​","អង្គារ​","ពុធ​","ព្រហ​​","សុក្រ​","សៅរ៍"],dayOfWeek:["អាទិត្យ​","ច័ន្ទ​","អង្គារ​","ពុធ​","ព្រហស្បតិ៍​","សុក្រ​","សៅរ៍"]},kr:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},it:{months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayOfWeek:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]},da:{months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},no:{months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"]},ja:{months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeekShort:["日","月","火","水","木","金","土"],dayOfWeek:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"]},vi:{months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayOfWeekShort:["CN","T2","T3","T4","T5","T6","T7"],dayOfWeek:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"]},sl:{months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],dayOfWeekShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayOfWeek:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},cs:{months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],dayOfWeekShort:["Ne","Po","Út","St","Čt","Pá","So"]},hu:{months:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],dayOfWeekShort:["Va","Hé","Ke","Sze","Cs","Pé","Szo"],dayOfWeek:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"]},az:{months:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],dayOfWeekShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayOfWeek:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"]},bs:{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ca:{months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],dayOfWeekShort:["Dg","Dl","Dt","Dc","Dj","Dv","Ds"],dayOfWeek:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"]},"en-GB":{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},et:{months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],dayOfWeekShort:["P","E","T","K","N","R","L"],dayOfWeek:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"]},eu:{months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],dayOfWeekShort:["Ig.","Al.","Ar.","Az.","Og.","Or.","La."],dayOfWeek:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"]},fi:{months:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],dayOfWeekShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayOfWeek:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},gl:{months:["Xan","Feb","Maz","Abr","Mai","Xun","Xul","Ago","Set","Out","Nov","Dec"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Xov","Ven","Sab"],dayOfWeek:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"]},hr:{months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ko:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},lt:{months:["Sausio","Vasario","Kovo","Balandžio","Gegužės","Birželio","Liepos","Rugpjūčio","Rugsėjo","Spalio","Lapkričio","Gruodžio"],dayOfWeekShort:["Sek","Pir","Ant","Tre","Ket","Pen","Šeš"],dayOfWeek:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"]},lv:{months:["Janvāris","Februāris","Marts","Aprīlis ","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],dayOfWeekShort:["Sv","Pr","Ot","Tr","Ct","Pk","St"],dayOfWeek:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"]},mk:{months:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],dayOfWeekShort:["нед","пон","вто","сре","чет","пет","саб"],dayOfWeek:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"]},mn:{months:["1-р сар","2-р сар","3-р сар","4-р сар","5-р сар","6-р сар","7-р сар","8-р сар","9-р сар","10-р сар","11-р сар","12-р сар"],dayOfWeekShort:["Дав","Мяг","Лха","Пүр","Бсн","Бям","Ням"],dayOfWeek:["Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба","Ням"]},"pt-BR":{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},sk:{months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],dayOfWeekShort:["Ne","Po","Ut","St","Št","Pi","So"],dayOfWeek:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},sq:{months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],dayOfWeekShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],dayOfWeek:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"]},"sr-YU":{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sre","čet","Pet","Sub"],dayOfWeek:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"]},sr:{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],dayOfWeekShort:["нед","пон","уто","сре","чет","пет","суб"],dayOfWeek:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"]},sv:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayOfWeek:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"]},"zh-TW":{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},zh:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},ug:{months:["1-ئاي","2-ئاي","3-ئاي","4-ئاي","5-ئاي","6-ئاي","7-ئاي","8-ئاي","9-ئاي","10-ئاي","11-ئاي","12-ئاي"],dayOfWeek:["يەكشەنبە","دۈشەنبە","سەيشەنبە","چارشەنبە","پەيشەنبە","جۈمە","شەنبە"]},he:{months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],dayOfWeekShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayOfWeek:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"]},hy:{months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],dayOfWeekShort:["Կի","Երկ","Երք","Չոր","Հնգ","Ուրբ","Շբթ"],dayOfWeek:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"]},kg:{months:["Үчтүн айы","Бирдин айы","Жалган Куран","Чын Куран","Бугу","Кулжа","Теке","Баш Оона","Аяк Оона","Тогуздун айы","Жетинин айы","Бештин айы"],dayOfWeekShort:["Жек","Дүй","Шей","Шар","Бей","Жум","Ише"],dayOfWeek:["Жекшемб","Дүйшөмб","Шейшемб","Шаршемб","Бейшемби","Жума","Ишенб"]},rm:{months:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],dayOfWeekShort:["Du","Gli","Ma","Me","Gie","Ve","So"],dayOfWeek:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"]},ka:{months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],dayOfWeekShort:["კვ","ორშ","სამშ","ოთხ","ხუთ","პარ","შაბ"],dayOfWeek:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"]}},ownerDocument:document,contentWindow:window,value:"",rtl:!1,format:"Y/m/d H:i",formatTime:"H:i",formatDate:"Y/m/d",startDate:!1,step:60,monthChangeSpinner:!0,closeOnDateSelect:!1,closeOnTimeSelect:!0,closeOnWithoutClick:!0,closeOnInputClick:!0,openOnFocus:!0,timepicker:!0,datepicker:!0,weeks:!1,defaultTime:!1,defaultDate:!1,minDate:!1,maxDate:!1,minTime:!1,maxTime:!1,minDateTime:!1,maxDateTime:!1,allowTimes:[],opened:!1,initTime:!0,inline:!1,theme:"",touchMovedThreshold:5,onSelectDate:function(){},onSelectTime:function(){},onChangeMonth:function(){},onGetWeekOfYear:function(){},onChangeYear:function(){},onChangeDateTime:function(){},onShow:function(){},onClose:function(){},onGenerate:function(){},withoutCopyright:!0,inverseButton:!1,hours12:!1,next:"xdsoft_next",prev:"xdsoft_prev",dayOfWeekStart:0,parentID:"body",timeHeightInTimePicker:25,timepickerScrollbar:!0,todayButton:!0,prevButton:!0,nextButton:!0,defaultSelect:!0,scrollMonth:!0,scrollTime:!0,scrollInput:!0,lazyInit:!1,mask:!1,validateOnBlur:!0,allowBlank:!0,yearStart:1950,yearEnd:2050,monthStart:0,monthEnd:11,style:"",id:"",fixed:!1,roundTime:"round",className:"",weekends:[],highlightedDates:[],highlightedPeriods:[],allowDates:[],allowDateRe:null,disabledDates:[],disabledWeekDays:[],yearOffset:0,beforeShowDay:null,enterLikeTab:!0,showApplyButton:!1},i=null,n=null,a="en",o={meridiem:["AM","PM"]},r=function(){var r=e.i18n[a],s={days:r.dayOfWeek,daysShort:r.dayOfWeekShort,months:r.months,monthsShort:t.map(r.months,function(t){return t.substring(0,3)})};"function"==typeof DateFormatter&&(i=n=new DateFormatter({dateSettings:t.extend({},o,s)}))},s={moment:{default_options:{format:"YYYY/MM/DD HH:mm",formatDate:"YYYY/MM/DD",formatTime:"HH:mm"},formatter:{parseDate:function(t,e){if(c(e))return n.parseDate(t,e);var i=moment(t,e);return!!i.isValid()&&i.toDate()},formatDate:function(t,e){return c(e)?n.formatDate(t,e):moment(t).format(e)},formatMask:function(t){return t.replace(/Y{4}/g,"9999").replace(/Y{2}/g,"99").replace(/M{2}/g,"19").replace(/D{2}/g,"39").replace(/H{2}/g,"29").replace(/m{2}/g,"59").replace(/s{2}/g,"59")}}}};t.datetimepicker={setLocale:function(t){var i=e.i18n[t]?t:"en";a!==i&&(a=i,r())},setDateFormatter:function(n){if("string"==typeof n&&s.hasOwnProperty(n)){var a=s[n];t.extend(e,a.default_options),i=a.formatter}else i=n}};var l={RFC_2822:"D, d M Y H:i:s O",ATOM:"Y-m-dTH:i:sP",ISO_8601:"Y-m-dTH:i:sO",RFC_822:"D, d M y H:i:s O",RFC_850:"l, d-M-y H:i:s T",RFC_1036:"D, d M y H:i:s O",RFC_1123:"D, d M Y H:i:s O",RSS:"D, d M Y H:i:s O",W3C:"Y-m-dTH:i:sP"},c=function(t){return-1!==Object.values(l).indexOf(t)};function u(t,e,i){this.date=t,this.desc=e,this.style=i}t.extend(t.datetimepicker,l),r(),window.getComputedStyle||(window.getComputedStyle=function(t){return this.el=t,this.getPropertyValue=function(e){var i=/(-([a-z]))/g;return"float"===e&&(e="styleFloat"),i.test(e)&&(e=e.replace(i,function(t,e,i){return i.toUpperCase()})),t.currentStyle[e]||null},this}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){var i,n;for(i=e||0,n=this.length;i
    '),s=t('
    '),r.append(s),l.addClass("xdsoft_scroller_box").append(r),v=function(t){var e=c(t).y-d+g;e<0&&(e=0),e+s[0].offsetHeight>p&&(e=p-s[0].offsetHeight),l.trigger("scroll_element.xdsoft_scroller",[u?e/u:0])},s.on("touchstart.xdsoft_scroller mousedown.xdsoft_scroller",function(n){a||l.trigger("resize_scroll.xdsoft_scroller",[i]),d=c(n).y,g=parseInt(s.css("margin-top"),10),p=r[0].offsetHeight,"mousedown"===n.type||"touchstart"===n.type?(e.ownerDocument&&t(e.ownerDocument.body).addClass("xdsoft_noselect"),t([e.ownerDocument.body,e.contentWindow]).on("touchend mouseup.xdsoft_scroller",function i(){t([e.ownerDocument.body,e.contentWindow]).off("touchend mouseup.xdsoft_scroller",i).off("mousemove.xdsoft_scroller",v).removeClass("xdsoft_noselect")}),t(e.ownerDocument.body).on("mousemove.xdsoft_scroller",v)):(m=!0,n.stopPropagation(),n.preventDefault())}).on("touchmove",function(t){m&&(t.preventDefault(),v(t))}).on("touchend touchcancel",function(){m=!1,g=0}),l.on("scroll_element.xdsoft_scroller",function(t,e){a||l.trigger("resize_scroll.xdsoft_scroller",[e,!0]),e=e>1?1:e<0||isNaN(e)?0:e,s.css("margin-top",u*e),setTimeout(function(){n.css("marginTop",-parseInt((n[0].offsetHeight-a)*e,10))},10)}).on("resize_scroll.xdsoft_scroller",function(t,e,i){var c,h;a=l[0].clientHeight,o=n[0].offsetHeight,h=(c=a/o)*r[0].offsetHeight,c>1?s.hide():(s.show(),s.css("height",parseInt(h>10?h:10,10)),u=r[0].offsetHeight-s[0].offsetHeight,!0!==i&&l.trigger("scroll_element.xdsoft_scroller",[e||Math.abs(parseInt(n.css("marginTop"),10))/(o-a)]))}),l.on("mousewheel",function(t){var e=Math.abs(parseInt(n.css("marginTop"),10));return(e-=20*t.deltaY)<0&&(e=0),l.trigger("scroll_element.xdsoft_scroller",[e/(o-a)]),t.stopPropagation(),!1}),l.on("touchstart",function(t){h=c(t),f=Math.abs(parseInt(n.css("marginTop"),10))}),l.on("touchmove",function(t){if(h){t.preventDefault();var e=c(t);l.trigger("scroll_element.xdsoft_scroller",[(f-(e.y-h.y))/(o-a)])}}),l.on("touchend touchcancel",function(){h=!1,f=0})),l.trigger("resize_scroll.xdsoft_scroller",[i])):l.find(".xdsoft_scrollbar").hide()})},t.fn.datetimepicker=function(n,o){var r,s,l=this,c=48,h=57,d=96,f=105,p=17,m=46,g=13,v=27,y=8,_=37,b=38,w=39,k=40,x=9,D=116,M=65,T=67,C=86,S=90,P=89,A=!1,I=t.isPlainObject(n)||!n?t.extend(!0,{},e,n):t.extend(!0,{},e),O=0;return r=function(e){var o,r,s,l,O,E,j=t('
    '),N=t(''),F=t('
    '),W=t('
    '),H=t('
    '),z=t('
    '),Y=z.find(".xdsoft_time_box").eq(0),L=t('
    '),R=t(''),$=t('
    '),U=t('
    '),B=!1,K=0;I.id&&j.attr("id",I.id),I.style&&j.attr("style",I.style),I.weeks&&j.addClass("xdsoft_showweeks"),I.rtl&&j.addClass("xdsoft_rtl"),j.addClass("xdsoft_"+I.theme),j.addClass(I.className),W.find(".xdsoft_month span").after($),W.find(".xdsoft_year span").after(U),W.find(".xdsoft_month,.xdsoft_year").on("touchstart mousedown.xdsoft",function(e){var i,n,a=t(this).find(".xdsoft_select").eq(0),o=0,r=0,s=a.is(":visible");for(W.find(".xdsoft_select").hide(),O.currentTime&&(o=O.currentTime[t(this).hasClass("xdsoft_month")?"getMonth":"getFullYear"]()),a[s?"hide":"show"](),i=a.find("div.xdsoft_option"),n=0;nI.touchMovedThreshold&&(this.touchMoved=!0)};function q(){var t,i=!1;return I.startDate?i=O.strToDate(I.startDate):(i=I.value||(e&&e.val&&e.val()?e.val():""))?(i=O.strToDateTime(i),I.yearOffset&&(i=new Date(i.getFullYear()-I.yearOffset,i.getMonth(),i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds(),i.getMilliseconds()))):I.defaultDate&&(i=O.strToDateTime(I.defaultDate),I.defaultTime&&(t=O.strtotime(I.defaultTime),i.setHours(t.getHours()),i.setMinutes(t.getMinutes()))),i&&O.isValidDate(i)?j.data("changed",!0):i="",i||0}function J(n){var a=function(t,e){var i=t.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g,"\\$1").replace(/_/g,"{digit+}").replace(/([0-9]{1})/g,"{digit$1}").replace(/\{digit([0-9]{1})\}/g,"[0-$1_]{1}").replace(/\{digit[\+]\}/g,"[0-9_]{1}");return new RegExp(i).test(e)},o=function(t,e){if(!(t="string"==typeof t||t instanceof String?n.ownerDocument.getElementById(t):t))return!1;if(t.createTextRange){var i=t.createTextRange();return i.collapse(!0),i.moveEnd("character",e),i.moveStart("character",e),i.select(),!0}return!!t.setSelectionRange&&(t.setSelectionRange(e,e),!0)};n.mask&&e.off("keydown.xdsoft"),!0===n.mask&&(i.formatMask?n.mask=i.formatMask(n.format):n.mask=n.format.replace(/Y/g,"9999").replace(/F/g,"9999").replace(/m/g,"19").replace(/d/g,"39").replace(/H/g,"29").replace(/i/g,"59").replace(/s/g,"59")),"string"===t.type(n.mask)&&(a(n.mask,e.val())||(e.val(n.mask.replace(/[0-9]/g,"_")),o(e[0],0)),e.on("paste.xdsoft",function(i){var r=(i.clipboardData||i.originalEvent.clipboardData||window.clipboardData).getData("text"),s=this.value,l=this.selectionStart,c=s.substr(0,l),u=s.substr(l+r.length);return s=c+r+u,l+=r.length,a(n.mask,s)?(this.value=s,o(this,l)):""===t.trim(s)?this.value=n.mask.replace(/[0-9]/g,"_"):e.trigger("error_input.xdsoft"),i.preventDefault(),!1}),e.on("keydown.xdsoft",function(i){var r,s=this.value,l=i.which,u=this.selectionStart,I=this.selectionEnd,O=u!==I;if(l>=c&&l<=h||l>=d&&l<=f||l===y||l===m){for(r=l===y||l===m?"_":String.fromCharCode(d<=l&&l<=f?l-c:l),l===y&&u&&!O&&(u-=1);;){var E=n.mask.substr(u,1),j=u0;if(!(/[^0-9_]/.test(E)&&j&&N))break;u+=l!==y||O?1:-1}if(O){var F=I-u,W=n.mask.replace(/[0-9]/g,"_"),H=W.substr(u,F).substr(1),z=s.substr(0,u),Y=r+H,L=s.substr(u+F);s=z+Y+L}else{var R=s.substr(0,u),$=r,U=s.substr(u+1);s=R+$+U}if(""===t.trim(s))s=W;else if(u===n.mask.length)return i.preventDefault(),!1;for(u+=l===y?0:1;/[^0-9_]/.test(n.mask.substr(u,1))&&u0;)u+=l===y?0:1;a(n.mask,s)?(this.value=s,o(this,u)):""===t.trim(s)?this.value=n.mask.replace(/[0-9]/g,"_"):e.trigger("error_input.xdsoft")}else if(-1!==[M,T,C,S,P].indexOf(l)&&A||-1!==[v,b,k,_,w,D,p,x,g].indexOf(l))return!0;return i.preventDefault(),!1}))}W.find(".xdsoft_select").xdsoftScroller(I).on("touchstart mousedown.xdsoft",function(t){var e=t.originalEvent;this.touchMoved=!1,this.touchStartPosition=e.touches?e.touches[0]:e,t.stopPropagation(),t.preventDefault()}).on("touchmove",".xdsoft_option",Q).on("touchend mousedown.xdsoft",".xdsoft_option",function(){if(!this.touchMoved){void 0!==O.currentTime&&null!==O.currentTime||(O.currentTime=O.now());var e=O.currentTime.getFullYear();O&&O.currentTime&&O.currentTime[t(this).parent().parent().hasClass("xdsoft_monthselect")?"setMonth":"setFullYear"](t(this).data("value")),t(this).parent().parent().hide(),j.trigger("xchange.xdsoft"),I.onChangeMonth&&t.isFunction(I.onChangeMonth)&&I.onChangeMonth.call(j,O.currentTime,j.data("input")),e!==O.currentTime.getFullYear()&&t.isFunction(I.onChangeYear)&&I.onChangeYear.call(j,O.currentTime,j.data("input"))}}),j.getValue=function(){return O.getCurrentTime()},j.setOptions=function(n){var a={};I=t.extend(!0,{},I,n),n.allowTimes&&t.isArray(n.allowTimes)&&n.allowTimes.length&&(I.allowTimes=t.extend(!0,[],n.allowTimes)),n.weekends&&t.isArray(n.weekends)&&n.weekends.length&&(I.weekends=t.extend(!0,[],n.weekends)),n.allowDates&&t.isArray(n.allowDates)&&n.allowDates.length&&(I.allowDates=t.extend(!0,[],n.allowDates)),n.allowDateRe&&"[object String]"===Object.prototype.toString.call(n.allowDateRe)&&(I.allowDateRe=new RegExp(n.allowDateRe)),n.highlightedDates&&t.isArray(n.highlightedDates)&&n.highlightedDates.length&&(t.each(n.highlightedDates,function(e,n){var o,r=t.map(n.split(","),t.trim),s=new u(i.parseDate(r[0],I.formatDate),r[1],r[2]),l=i.formatDate(s.date,I.formatDate);void 0!==a[l]?(o=a[l].desc)&&o.length&&s.desc&&s.desc.length&&(a[l].desc=o+"\n"+s.desc):a[l]=s}),I.highlightedDates=t.extend(!0,[],a)),n.highlightedPeriods&&t.isArray(n.highlightedPeriods)&&n.highlightedPeriods.length&&(a=t.extend(!0,[],I.highlightedDates),t.each(n.highlightedPeriods,function(e,n){var o,r,s,l,c,h,d;if(t.isArray(n))o=n[0],r=n[1],s=n[2],d=n[3];else{var f=t.map(n.split(","),t.trim);o=i.parseDate(f[0],I.formatDate),r=i.parseDate(f[1],I.formatDate),s=f[2],d=f[3]}for(;o<=r;)l=new u(o,s,d),c=i.formatDate(o,I.formatDate),o.setDate(o.getDate()+1),void 0!==a[c]?(h=a[c].desc)&&h.length&&l.desc&&l.desc.length&&(a[c].desc=h+"\n"+l.desc):a[c]=l}),I.highlightedDates=t.extend(!0,[],a)),n.disabledDates&&t.isArray(n.disabledDates)&&n.disabledDates.length&&(I.disabledDates=t.extend(!0,[],n.disabledDates)),n.disabledWeekDays&&t.isArray(n.disabledWeekDays)&&n.disabledWeekDays.length&&(I.disabledWeekDays=t.extend(!0,[],n.disabledWeekDays)),!I.open&&!I.opened||I.inline||e.trigger("open.xdsoft"),I.inline&&(B=!0,j.addClass("xdsoft_inline"),e.after(j).hide()),I.inverseButton&&(I.next="xdsoft_prev",I.prev="xdsoft_next"),I.datepicker?F.addClass("active"):F.removeClass("active"),I.timepicker?z.addClass("active"):z.removeClass("active"),I.value&&(O.setCurrentTime(I.value),e&&e.val&&e.val(O.str)),isNaN(I.dayOfWeekStart)?I.dayOfWeekStart=0:I.dayOfWeekStart=parseInt(I.dayOfWeekStart,10)%7,I.timepickerScrollbar||Y.xdsoftScroller(I,"hide"),I.minDate&&/^[\+\-](.*)$/.test(I.minDate)&&(I.minDate=i.formatDate(O.strToDateTime(I.minDate),I.formatDate)),I.maxDate&&/^[\+\-](.*)$/.test(I.maxDate)&&(I.maxDate=i.formatDate(O.strToDateTime(I.maxDate),I.formatDate)),I.minDateTime&&/^\+(.*)$/.test(I.minDateTime)&&(I.minDateTime=O.strToDateTime(I.minDateTime).dateFormat(I.formatDate)),I.maxDateTime&&/^\+(.*)$/.test(I.maxDateTime)&&(I.maxDateTime=O.strToDateTime(I.maxDateTime).dateFormat(I.formatDate)),R.toggle(I.showApplyButton),W.find(".xdsoft_today_button").css("visibility",I.todayButton?"visible":"hidden"),W.find("."+I.prev).css("visibility",I.prevButton?"visible":"hidden"),W.find("."+I.next).css("visibility",I.nextButton?"visible":"hidden"),J(I),I.validateOnBlur&&e.off("blur.xdsoft").on("blur.xdsoft",function(){if(I.allowBlank&&(!t.trim(t(this).val()).length||"string"==typeof I.mask&&t.trim(t(this).val())===I.mask.replace(/[0-9]/g,"_")))t(this).val(null),j.data("xdsoft_datetime").empty();else{var e=i.parseDate(t(this).val(),I.format);if(e)t(this).val(i.formatDate(e,I.format));else{var n=+[t(this).val()[0],t(this).val()[1]].join(""),a=+[t(this).val()[2],t(this).val()[3]].join("");!I.datepicker&&I.timepicker&&n>=0&&n<24&&a>=0&&a<60?t(this).val([n,a].map(function(t){return t>9?t:"0"+t}).join(":")):t(this).val(i.formatDate(O.now(),I.format))}j.data("xdsoft_datetime").setCurrentTime(t(this).val())}j.trigger("changedatetime.xdsoft"),j.trigger("close.xdsoft")}),I.dayOfWeekStartPrev=0===I.dayOfWeekStart?6:I.dayOfWeekStart-1,j.trigger("xchange.xdsoft").trigger("afterOpen.xdsoft")},j.data("options",I).on("touchstart mousedown.xdsoft",function(t){return t.stopPropagation(),t.preventDefault(),U.hide(),$.hide(),!1}),Y.append(L),Y.xdsoftScroller(I),j.on("afterOpen.xdsoft",function(){Y.xdsoftScroller(I)}),j.append(F).append(z),!0!==I.withoutCopyright&&j.append(N),F.append(W).append(H).append(R),t(I.parentID).append(j),O=new function(){var e=this;e.now=function(t){var i,n,a=new Date;return!t&&I.defaultDate&&(i=e.strToDateTime(I.defaultDate),a.setFullYear(i.getFullYear()),a.setMonth(i.getMonth()),a.setDate(i.getDate())),a.setFullYear(a.getFullYear()),!t&&I.defaultTime&&(n=e.strtotime(I.defaultTime),a.setHours(n.getHours()),a.setMinutes(n.getMinutes()),a.setSeconds(n.getSeconds()),a.setMilliseconds(n.getMilliseconds())),a},e.isValidDate=function(t){return"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(t.getTime())},e.setCurrentTime=function(t,i){"string"==typeof t?e.currentTime=e.strToDateTime(t):e.isValidDate(t)?e.currentTime=t:t||i||!I.allowBlank||I.inline?e.currentTime=e.now():e.currentTime=null,j.trigger("xchange.xdsoft")},e.empty=function(){e.currentTime=null},e.getCurrentTime=function(){return e.currentTime},e.nextMonth=function(){void 0!==e.currentTime&&null!==e.currentTime||(e.currentTime=e.now());var i,n=e.currentTime.getMonth()+1;return 12===n&&(e.currentTime.setFullYear(e.currentTime.getFullYear()+1),n=0),i=e.currentTime.getFullYear(),e.currentTime.setDate(Math.min(new Date(e.currentTime.getFullYear(),n+1,0).getDate(),e.currentTime.getDate())),e.currentTime.setMonth(n),I.onChangeMonth&&t.isFunction(I.onChangeMonth)&&I.onChangeMonth.call(j,O.currentTime,j.data("input")),i!==e.currentTime.getFullYear()&&t.isFunction(I.onChangeYear)&&I.onChangeYear.call(j,O.currentTime,j.data("input")),j.trigger("xchange.xdsoft"),n},e.prevMonth=function(){void 0!==e.currentTime&&null!==e.currentTime||(e.currentTime=e.now());var i=e.currentTime.getMonth()-1;return-1===i&&(e.currentTime.setFullYear(e.currentTime.getFullYear()-1),i=11),e.currentTime.setDate(Math.min(new Date(e.currentTime.getFullYear(),i+1,0).getDate(),e.currentTime.getDate())),e.currentTime.setMonth(i),I.onChangeMonth&&t.isFunction(I.onChangeMonth)&&I.onChangeMonth.call(j,O.currentTime,j.data("input")),j.trigger("xchange.xdsoft"),i},e.getWeekOfYear=function(e){if(I.onGetWeekOfYear&&t.isFunction(I.onGetWeekOfYear)){var i=I.onGetWeekOfYear.call(j,e);if(void 0!==i)return i}var n=new Date(e.getFullYear(),0,1);return 4!==n.getDay()&&n.setMonth(0,1+(4-n.getDay()+7)%7),Math.ceil(((e-n)/864e5+n.getDay()+1)/7)},e.strToDateTime=function(t){var n,a,o=[];return t&&t instanceof Date&&e.isValidDate(t)?t:((o=/^([+-]{1})(.*)$/.exec(t))&&(o[2]=i.parseDate(o[2],I.formatDate)),o&&o[2]?(n=o[2].getTime()-6e4*o[2].getTimezoneOffset(),a=new Date(e.now(!0).getTime()+parseInt(o[1]+"1",10)*n)):a=t?i.parseDate(t,I.format):e.now(),e.isValidDate(a)||(a=e.now()),a)},e.strToDate=function(t){if(t&&t instanceof Date&&e.isValidDate(t))return t;var n=t?i.parseDate(t,I.formatDate):e.now(!0);return e.isValidDate(n)||(n=e.now(!0)),n},e.strtotime=function(t){if(t&&t instanceof Date&&e.isValidDate(t))return t;var n=t?i.parseDate(t,I.formatTime):e.now(!0);return e.isValidDate(n)||(n=e.now(!0)),n},e.str=function(){var t=I.format;return I.yearOffset&&(t=(t=t.replace("Y",e.currentTime.getFullYear()+I.yearOffset)).replace("y",String(e.currentTime.getFullYear()+I.yearOffset).substring(2,4))),i.formatDate(e.currentTime,t)},e.currentTime=this.now()},R.on("touchend click",function(t){t.preventDefault(),j.data("changed",!0),O.setCurrentTime(q()),e.val(O.str()),j.trigger("close.xdsoft")}),W.find(".xdsoft_today_button").on("touchend mousedown.xdsoft",function(){j.data("changed",!0),O.setCurrentTime(0,!0),j.trigger("afterOpen.xdsoft")}).on("dblclick.xdsoft",function(){var t,i,n=O.getCurrentTime();n=new Date(n.getFullYear(),n.getMonth(),n.getDate()),t=O.strToDate(I.minDate),n<(t=new Date(t.getFullYear(),t.getMonth(),t.getDate()))||(i=O.strToDate(I.maxDate),n>(i=new Date(i.getFullYear(),i.getMonth(),i.getDate()))||(e.val(O.str()),e.trigger("change"),j.trigger("close.xdsoft")))}),W.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var e=t(this),i=0,n=!1;!function t(a){e.hasClass(I.next)?O.nextMonth():e.hasClass(I.prev)&&O.prevMonth(),I.monthChangeSpinner&&(n||(i=setTimeout(t,a||100)))}(500),t([I.ownerDocument.body,I.contentWindow]).on("touchend mouseup.xdsoft",function e(){clearTimeout(i),n=!0,t([I.ownerDocument.body,I.contentWindow]).off("touchend mouseup.xdsoft",e)})}),z.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var e=t(this),i=0,n=!1,a=110;!function t(o){var r=Y[0].clientHeight,s=L[0].offsetHeight,l=Math.abs(parseInt(L.css("marginTop"),10));e.hasClass(I.next)&&s-r-I.timeHeightInTimePicker>=l?L.css("marginTop","-"+(l+I.timeHeightInTimePicker)+"px"):e.hasClass(I.prev)&&l-I.timeHeightInTimePicker>=0&&L.css("marginTop","-"+(l-I.timeHeightInTimePicker)+"px"),Y.trigger("scroll_element.xdsoft_scroller",[Math.abs(parseInt(L[0].style.marginTop,10)/(s-r))]),a=a>10?10:a-10,n||(i=setTimeout(t,o||a))}(500),t([I.ownerDocument.body,I.contentWindow]).on("touchend mouseup.xdsoft",function e(){clearTimeout(i),n=!0,t([I.ownerDocument.body,I.contentWindow]).off("touchend mouseup.xdsoft",e)})}),o=0,j.on("xchange.xdsoft",function(r){clearTimeout(o),o=setTimeout(function(){void 0!==O.currentTime&&null!==O.currentTime||(O.currentTime=O.now());for(var o,r,s,l,c,u,h,d,f,p,m="",g=new Date(O.currentTime.getFullYear(),O.currentTime.getMonth(),1,12,0,0),v=0,y=O.now(),_=!1,b=!1,w=!1,k=!1,x=[],D=!0,M="";g.getDay()!==I.dayOfWeekStart;)g.setDate(g.getDate()-1);for(m+="",I.weeks&&(m+=""),o=0;o<7;o+=1)m+="";for(m+="",m+="",!1!==I.maxDate&&(_=O.strToDate(I.maxDate),_=new Date(_.getFullYear(),_.getMonth(),_.getDate(),23,59,59,999)),!1!==I.minDate&&(b=O.strToDate(I.minDate),b=new Date(b.getFullYear(),b.getMonth(),b.getDate())),!1!==I.minDateTime&&(w=O.strToDate(I.minDateTime),w=new Date(w.getFullYear(),w.getMonth(),w.getDate(),w.getHours(),w.getMinutes(),w.getSeconds())),!1!==I.maxDateTime&&(k=O.strToDate(I.maxDateTime),k=new Date(k.getFullYear(),k.getMonth(),k.getDate(),k.getHours(),k.getMinutes(),k.getSeconds())),!1!==k&&(p=31*(12*k.getFullYear()+k.getMonth())+k.getDate());v0&&-1===I.allowDates.indexOf(i.formatDate(g,I.formatDate))&&x.push("xdsoft_disabled");var T=31*(12*g.getFullYear()+g.getMonth())+g.getDate();(!1!==_&&g>_||!1!==w&&gp||h&&!1===h[0])&&x.push("xdsoft_disabled"),-1!==I.disabledDates.indexOf(i.formatDate(g,I.formatDate))&&x.push("xdsoft_disabled"),-1!==I.disabledWeekDays.indexOf(s)&&x.push("xdsoft_disabled"),e.is("[disabled]")&&x.push("xdsoft_disabled"),h&&""!==h[1]&&x.push(h[1]),O.currentTime.getMonth()!==A&&x.push("xdsoft_other_month"),(I.defaultSelect||j.data("changed"))&&i.formatDate(O.currentTime,I.formatDate)===i.formatDate(g,I.formatDate)&&x.push("xdsoft_current"),i.formatDate(y,I.formatDate)===i.formatDate(g,I.formatDate)&&x.push("xdsoft_today"),0!==g.getDay()&&6!==g.getDay()&&-1===I.weekends.indexOf(i.formatDate(g,I.formatDate))||x.push("xdsoft_weekend"),void 0!==I.highlightedDates[i.formatDate(g,I.formatDate)]&&(r=I.highlightedDates[i.formatDate(g,I.formatDate)],x.push(void 0===r.style?"xdsoft_highlighted_default":r.style),f=void 0===r.desc?"":r.desc),I.beforeShowDay&&t.isFunction(I.beforeShowDay)&&x.push(I.beforeShowDay(g)),D&&(m+="",D=!1,I.weeks&&(m+="")),m+='",g.getDay()===I.dayOfWeekStartPrev&&(m+="",D=!0),g.setDate(l+1)}m+="
    "+I.i18n[a].dayOfWeekShort[(o+I.dayOfWeekStart)%7]+"
    "+u+"
    '+l+"
    ",H.html(m),W.find(".xdsoft_label span").eq(0).text(I.i18n[a].months[O.currentTime.getMonth()]),W.find(".xdsoft_label span").eq(1).text(O.currentTime.getFullYear()+I.yearOffset),M="",A="";var C=0;if(!1!==I.minTime){var S=O.strtotime(I.minTime);C=60*S.getHours()+S.getMinutes()}var P=1440;if(!1!==I.maxTime){S=O.strtotime(I.maxTime);P=60*S.getHours()+S.getMinutes()}if(!1!==I.minDateTime){S=O.strToDateTime(I.minDateTime);if(i.formatDate(O.currentTime,I.formatDate)===i.formatDate(S,I.formatDate))(A=60*S.getHours()+S.getMinutes())>C&&(C=A)}if(!1!==I.maxDateTime){var A;S=O.strToDateTime(I.maxDateTime);if(i.formatDate(O.currentTime,I.formatDate)===i.formatDate(S,I.formatDate))(A=60*S.getHours()+S.getMinutes())=P||l59||o.getMinutes()===parseInt(a,10))&&(I.defaultSelect||j.data("changed")?x.push("xdsoft_current"):I.initTime&&x.push("xdsoft_init_time")),parseInt(y.getHours(),10)===parseInt(n,10)&&parseInt(y.getMinutes(),10)===parseInt(a,10)&&x.push("xdsoft_today"),M+='
    '+i.formatDate(r,I.formatTime)+"
    "},I.allowTimes&&t.isArray(I.allowTimes)&&I.allowTimes.length)for(v=0;v=P||d((v<10?"0":"")+v,A=(o<10?"0":"")+o))}for(L.html(M),n="",v=parseInt(I.yearStart,10);v<=parseInt(I.yearEnd,10);v+=1)n+='
    '+(v+I.yearOffset)+"
    ";for(U.children().eq(0).html(n),v=parseInt(I.monthStart,10),n="";v<=parseInt(I.monthEnd,10);v+=1)n+='
    '+I.i18n[a].months[v]+"
    ";$.children().eq(0).html(n),t(j).trigger("generate.xdsoft")},10),r.stopPropagation()}).on("afterOpen.xdsoft",function(){var t,e,i,n;I.timepicker&&(L.find(".xdsoft_current").length?t=".xdsoft_current":L.find(".xdsoft_init_time").length&&(t=".xdsoft_init_time"),t?(e=Y[0].clientHeight,(i=L[0].offsetHeight)-e<(n=L.find(t).index()*I.timeHeightInTimePicker+1)&&(n=i-e),Y.trigger("scroll_element.xdsoft_scroller",[parseInt(n,10)/(i-e)])):Y.trigger("scroll_element.xdsoft_scroller",[0]))}),r=0,H.on("touchend click.xdsoft","td",function(i){i.stopPropagation(),r+=1;var n=t(this),a=O.currentTime;if(null==a&&(O.currentTime=O.now(),a=O.currentTime),n.hasClass("xdsoft_disabled"))return!1;a.setDate(1),a.setFullYear(n.data("year")),a.setMonth(n.data("month")),a.setDate(n.data("date")),j.trigger("select.xdsoft",[a]),e.val(O.str()),I.onSelectDate&&t.isFunction(I.onSelectDate)&&I.onSelectDate.call(j,O.currentTime,j.data("input"),i),j.data("changed",!0),j.trigger("xchange.xdsoft"),j.trigger("changedatetime.xdsoft"),(r>1||!0===I.closeOnDateSelect||!1===I.closeOnDateSelect&&!I.timepicker)&&!I.inline&&j.trigger("close.xdsoft"),setTimeout(function(){r=0},200)}),L.on("touchstart","div",function(t){this.touchMoved=!1}).on("touchmove","div",Q).on("touchend click.xdsoft","div",function(e){if(!this.touchMoved){e.stopPropagation();var i=t(this),n=O.currentTime;if(null==n&&(O.currentTime=O.now(),n=O.currentTime),i.hasClass("xdsoft_disabled"))return!1;n.setHours(i.data("hour")),n.setMinutes(i.data("minute")),j.trigger("select.xdsoft",[n]),j.data("input").val(O.str()),I.onSelectTime&&t.isFunction(I.onSelectTime)&&I.onSelectTime.call(j,O.currentTime,j.data("input"),e),j.data("changed",!0),j.trigger("xchange.xdsoft"),j.trigger("changedatetime.xdsoft"),!0!==I.inline&&!0===I.closeOnTimeSelect&&j.trigger("close.xdsoft")}}),F.on("mousewheel.xdsoft",function(t){return!I.scrollMonth||(t.deltaY<0?O.nextMonth():O.prevMonth(),!1)}),e.on("mousewheel.xdsoft",function(t){return!I.scrollInput||(!I.datepicker&&I.timepicker?((s=L.find(".xdsoft_current").length?L.find(".xdsoft_current").eq(0).index():0)+t.deltaY>=0&&s+t.deltaYd+f?(u="bottom",n=d+f-e.top):n-=f):n+j[0].offsetHeight>d+f&&(n=e.top-j[0].offsetHeight+1),n<0&&(n=0),a+i.offsetWidth>c&&(a=c-i.offsetWidth)),r=j[0],E(r,function(t){if("relative"===I.contentWindow.getComputedStyle(t).getPropertyValue("position")&&c>=t.offsetWidth)return a-=(c-t.offsetWidth)/2,!1}),(h={position:o,left:a,top:"",bottom:""})[u]=n,j.css(h)},j.on("open.xdsoft",function(e){var i=!0;I.onShow&&t.isFunction(I.onShow)&&(i=I.onShow.call(j,O.currentTime,j.data("input"),e)),!1!==i&&(j.show(),l(),t(I.contentWindow).off("resize.xdsoft",l).on("resize.xdsoft",l),I.closeOnWithoutClick&&t([I.ownerDocument.body,I.contentWindow]).on("touchstart mousedown.xdsoft",function e(){j.trigger("close.xdsoft"),t([I.ownerDocument.body,I.contentWindow]).off("touchstart mousedown.xdsoft",e)}))}).on("close.xdsoft",function(e){var i=!0;W.find(".xdsoft_month,.xdsoft_year").find(".xdsoft_select").hide(),I.onClose&&t.isFunction(I.onClose)&&(i=I.onClose.call(j,O.currentTime,j.data("input"),e)),!1===i||I.opened||I.inline||j.hide(),e.stopPropagation()}).on("toggle.xdsoft",function(){j.is(":visible")?j.trigger("close.xdsoft"):j.trigger("open.xdsoft")}).data("input",e),K=0,j.data("xdsoft_datetime",O),j.setOptions(I),O.setCurrentTime(q()),e.data("xdsoft_datetimepicker",j).on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function(){e.is(":disabled")||e.data("xdsoft_datetimepicker").is(":visible")&&I.closeOnInputClick||I.openOnFocus&&(clearTimeout(K),K=setTimeout(function(){e.is(":disabled")||(B=!0,O.setCurrentTime(q(),!0),I.mask&&J(I),j.trigger("open.xdsoft"))},100))}).on("keydown.xdsoft",function(e){var i,n=e.which;return-1!==[g].indexOf(n)&&I.enterLikeTab?(i=t("input:visible,textarea:visible,button:visible,a:visible"),j.trigger("close.xdsoft"),i.eq(i.index(this)+1).focus(),!1):-1!==[x].indexOf(n)?(j.trigger("close.xdsoft"),!0):void 0}).on("blur.xdsoft",function(){j.trigger("close.xdsoft")})},s=function(e){var i=e.data("xdsoft_datetimepicker");i&&(i.data("xdsoft_datetime",null),i.remove(),e.data("xdsoft_datetimepicker",null).off(".xdsoft"),t(I.contentWindow).off("resize.xdsoft"),t([I.contentWindow,I.ownerDocument.body]).off("mousedown.xdsoft touchstart"),e.unmousewheel&&e.unmousewheel())},t(I.ownerDocument).off("keydown.xdsoftctrl keyup.xdsoftctrl").on("keydown.xdsoftctrl",function(t){t.keyCode===p&&(A=!0)}).on("keyup.xdsoftctrl",function(t){t.keyCode===p&&(A=!1)}),this.each(function(){var e,a=t(this).data("xdsoft_datetimepicker");if(a){if("string"===t.type(n))switch(n){case"show":t(this).select().focus(),a.trigger("open.xdsoft");break;case"hide":a.trigger("close.xdsoft");break;case"toggle":a.trigger("toggle.xdsoft");break;case"destroy":s(t(this));break;case"reset":this.value=this.defaultValue,this.value&&a.data("xdsoft_datetime").isValidDate(i.parseDate(this.value,I.format))||a.data("changed",!1),a.data("xdsoft_datetime").setCurrentTime(this.value);break;case"validate":a.data("input").trigger("blur.xdsoft");break;default:a[n]&&t.isFunction(a[n])&&(l=a[n](o))}else a.setOptions(n);return 0}"string"!==t.type(n)&&(!I.lazyInit||I.open||I.inline?r(t(this)):(e=t(this)).on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function t(){e.is(":disabled")||e.data("xdsoft_datetimepicker")||(clearTimeout(O),O=setTimeout(function(){e.data("xdsoft_datetimepicker")||r(e),e.off("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",t).trigger("open.xdsoft")},100))}))}),l},t.fn.datetimepicker.defaults=e};!function(t){"function"==typeof define&&define.amd?define(["jquery","jquery-mousewheel"],t):"object"==typeof exports?module.exports=t(require("jquery")):t(jQuery)}(datetimepickerFactory),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports?module.exports=t:t(jQuery)}(function(t){var e,i,n=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],a="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],o=Array.prototype.slice;if(t.event.fixHooks)for(var r=n.length;r;)t.event.fixHooks[n[--r]]=t.event.mouseHooks;var s=t.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var e=a.length;e;)this.addEventListener(a[--e],l,!1);else this.onmousewheel=l;t.data(this,"mousewheel-line-height",s.getLineHeight(this)),t.data(this,"mousewheel-page-height",s.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=a.length;e;)this.removeEventListener(a[--e],l,!1);else this.onmousewheel=null;t.removeData(this,"mousewheel-line-height"),t.removeData(this,"mousewheel-page-height")},getLineHeight:function(e){var i=t(e),n=i["offsetParent"in t.fn?"offsetParent":"parent"]();return n.length||(n=t("body")),parseInt(n.css("fontSize"),10)||parseInt(i.css("fontSize"),10)||16},getPageHeight:function(e){return t(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function l(n){var a,r=n||window.event,l=o.call(arguments,1),h=0,d=0,f=0,p=0,m=0;if((n=t.event.fix(r)).type="mousewheel","detail"in r&&(f=-1*r.detail),"wheelDelta"in r&&(f=r.wheelDelta),"wheelDeltaY"in r&&(f=r.wheelDeltaY),"wheelDeltaX"in r&&(d=-1*r.wheelDeltaX),"axis"in r&&r.axis===r.HORIZONTAL_AXIS&&(d=-1*f,f=0),h=0===f?d:f,"deltaY"in r&&(h=f=-1*r.deltaY),"deltaX"in r&&(d=r.deltaX,0===f&&(h=-1*d)),0!==f||0!==d){if(1===r.deltaMode){var g=t.data(this,"mousewheel-line-height");h*=g,f*=g,d*=g}else if(2===r.deltaMode){var v=t.data(this,"mousewheel-page-height");h*=v,f*=v,d*=v}if(a=Math.max(Math.abs(f),Math.abs(d)),(!i||a=1?"floor":"ceil"](h/i),d=Math[d>=1?"floor":"ceil"](d/i),f=Math[f>=1?"floor":"ceil"](f/i),s.settings.normalizeOffset&&this.getBoundingClientRect){var y=this.getBoundingClientRect();p=n.clientX-y.left,m=n.clientY-y.top}return n.deltaX=d,n.deltaY=f,n.deltaFactor=i,n.offsetX=p,n.offsetY=m,n.deltaMode=0,l.unshift(n,h,d,f),e&&clearTimeout(e),e=setTimeout(c,200),(t.event.dispatch||t.event.handle).apply(this,l)}}function c(){i=null}function u(t,e){return s.settings.adjustOldDeltas&&"mousewheel"===t.type&&e%120==0}t.fn.extend({mousewheel:function(t){return t?this.bind("mousewheel",t):this.trigger("mousewheel")},unmousewheel:function(t){return this.unbind("mousewheel",t)}})}),function(){"use strict";function t(t){t.fn._fadeIn=t.fn.fadeIn;var e=t.noop||function(){},i=/MSIE/.test(navigator.userAgent),n=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent),a=(document.documentMode,t.isFunction(document.createElement("div").style.setExpression));t.blockUI=function(t){s(window,t)},t.unblockUI=function(t){l(window,t)},t.growlUI=function(e,i,n,a){var o=t('
    ');e&&o.append("

    "+e+"

    "),i&&o.append("

    "+i+"

    "),void 0===n&&(n=3e3);var r=function(e){e=e||{},t.blockUI({message:o,fadeIn:void 0!==e.fadeIn?e.fadeIn:700,fadeOut:void 0!==e.fadeOut?e.fadeOut:1e3,timeout:void 0!==e.timeout?e.timeout:n,centerY:!1,showOverlay:!1,onUnblock:a,css:t.blockUI.defaults.growlCSS})};r();o.css("opacity");o.mouseover(function(){r({fadeIn:0,timeout:3e4});var e=t(".blockMsg");e.stop(),e.fadeTo(300,1)}).mouseout(function(){t(".blockMsg").fadeOut(1e3)})},t.fn.block=function(e){if(this[0]===window)return t.blockUI(e),this;var i=t.extend({},t.blockUI.defaults,e||{});return this.each(function(){var e=t(this);i.ignoreIfBlocked&&e.data("blockUI.isBlocked")||e.unblock({fadeOut:0})}),this.each(function(){"static"==t.css(this,"position")&&(this.style.position="relative",t(this).data("blockUI.static",!0)),this.style.zoom=1,s(this,e)})},t.fn.unblock=function(e){return this[0]===window?(t.unblockUI(e),this):this.each(function(){l(this,e)})},t.blockUI.version=2.7,t.blockUI.defaults={message:"

    Please wait...

    ",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",opacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var o=null,r=[];function s(s,c){var h,p,m=s==window,g=c&&void 0!==c.message?c.message:void 0;if(!(c=t.extend({},t.blockUI.defaults,c||{})).ignoreIfBlocked||!t(s).data("blockUI.isBlocked")){if(c.overlayCSS=t.extend({},t.blockUI.defaults.overlayCSS,c.overlayCSS||{}),h=t.extend({},t.blockUI.defaults.css,c.css||{}),c.onOverlayClick&&(c.overlayCSS.cursor="pointer"),p=t.extend({},t.blockUI.defaults.themedCSS,c.themedCSS||{}),g=void 0===g?c.message:g,m&&o&&l(window,{fadeOut:0}),g&&"string"!=typeof g&&(g.parentNode||g.jquery)){var v=g.jquery?g[0]:g,y={};t(s).data("blockUI.history",y),y.el=v,y.parent=v.parentNode,y.display=v.style.display,y.position=v.style.position,y.parent&&y.parent.removeChild(v)}t(s).data("blockUI.onUnblock",c.onUnblock);var _,b,w,k,x=c.baseZ;_=i||c.forceIframe?t(''):t(''),b=c.theme?t(''):t(''),c.theme&&m?(k='"):c.theme?(k='"):k=m?'':'',w=t(k),g&&(c.theme?(w.css(p),w.addClass("ui-widget-content")):w.css(h)),c.theme||b.css(c.overlayCSS),b.css("position",m?"fixed":"absolute"),(i||c.forceIframe)&&_.css("opacity",0);var D=[_,b,w],M=t(m?"body":s);t.each(D,function(){this.appendTo(M)}),c.theme&&c.draggable&&t.fn.draggable&&w.draggable({handle:".ui-dialog-titlebar",cancel:"li"});var T=a&&(!t.support.boxModel||t("object,embed",m?null:s).length>0);if(n||T){if(m&&c.allowBodyStretch&&t.support.boxModel&&t("html,body").css("height","100%"),(n||!t.support.boxModel)&&!m)var C=f(s,"borderTopWidth"),S=f(s,"borderLeftWidth"),P=C?"(0 - "+C+")":0,A=S?"(0 - "+S+")":0;t.each(D,function(t,e){var i=e[0].style;if(i.position="absolute",t<2)m?i.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+c.quirksmodeOffsetHack+') + "px"'):i.setExpression("height",'this.parentNode.offsetHeight + "px"'),m?i.setExpression("width",'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):i.setExpression("width",'this.parentNode.offsetWidth + "px"'),A&&i.setExpression("left",A),P&&i.setExpression("top",P);else if(c.centerY)m&&i.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'),i.marginTop=0;else if(!c.centerY&&m){var n="((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "+(c.css&&c.css.top?parseInt(c.css.top,10):0)+') + "px"';i.setExpression("top",n)}})}if(g&&(c.theme?w.find(".ui-widget-content").append(g):w.append(g),(g.jquery||g.nodeType)&&t(g).show()),(i||c.forceIframe)&&c.showOverlay&&_.show(),c.fadeIn){var I=c.onBlock?c.onBlock:e,O=c.showOverlay&&!g?I:e,E=g?I:e;c.showOverlay&&b._fadeIn(c.fadeIn,O),g&&w._fadeIn(c.fadeIn,E)}else c.showOverlay&&b.show(),g&&w.show(),c.onBlock&&c.onBlock.bind(w)();if(u(1,s,c),m?(o=w[0],r=t(c.focusableElements,o),c.focusInput&&setTimeout(d,20)):function(t,e,i){var n=t.parentNode,a=t.style,o=(n.offsetWidth-t.offsetWidth)/2-f(n,"borderLeftWidth"),r=(n.offsetHeight-t.offsetHeight)/2-f(n,"borderTopWidth");e&&(a.left=o>0?o+"px":"0");i&&(a.top=r>0?r+"px":"0")}(w[0],c.centerX,c.centerY),c.timeout){var j=setTimeout(function(){m?t.unblockUI(c):t(s).unblock(c)},c.timeout);t(s).data("blockUI.timeout",j)}}}function l(e,i){var n,a,s=e==window,l=t(e),h=l.data("blockUI.history"),d=l.data("blockUI.timeout");d&&(clearTimeout(d),l.removeData("blockUI.timeout")),i=t.extend({},t.blockUI.defaults,i||{}),u(0,e,i),null===i.onUnblock&&(i.onUnblock=l.data("blockUI.onUnblock"),l.removeData("blockUI.onUnblock")),a=s?t("body").children().filter(".blockUI").add("body > .blockUI"):l.find(">.blockUI"),i.cursorReset&&(a.length>1&&(a[1].style.cursor=i.cursorReset),a.length>2&&(a[2].style.cursor=i.cursorReset)),s&&(o=r=null),i.fadeOut?(n=a.length,a.stop().fadeOut(i.fadeOut,function(){0==--n&&c(a,h,i,e)})):c(a,h,i,e)}function c(e,i,n,a){var o=t(a);if(!o.data("blockUI.isBlocked")){e.each(function(t,e){this.parentNode&&this.parentNode.removeChild(this)}),i&&i.el&&(i.el.style.display=i.display,i.el.style.position=i.position,i.el.style.cursor="default",i.parent&&i.parent.appendChild(i.el),o.removeData("blockUI.history")),o.data("blockUI.static")&&o.css("position","static"),"function"==typeof n.onUnblock&&n.onUnblock(a,n);var r=t(document.body),s=r.width(),l=r[0].style.width;r.width(s-1).width(s),r[0].style.width=l}}function u(e,i,n){var a=i==window,r=t(i);if((e||(!a||o)&&(a||r.data("blockUI.isBlocked")))&&(r.data("blockUI.isBlocked",e),a&&n.bindEvents&&(!e||n.showOverlay))){var s="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";e?t(document).bind(s,n,h):t(document).unbind(s,h)}}function h(e){if("keydown"===e.type&&e.keyCode&&9==e.keyCode&&o&&e.data.constrainTabKey){var i=r,n=!e.shiftKey&&e.target===i[i.length-1],a=e.shiftKey&&e.target===i[0];if(n||a)return setTimeout(function(){d(a)},10),!1}var s=e.data,l=t(e.target);return l.hasClass("blockOverlay")&&s.onOverlayClick&&s.onOverlayClick(e),l.parents("div."+s.blockMsgClass).length>0||0===l.parents().children().filter("div.blockUI").length}function d(t){if(r){var e=r[!0===t?r.length-1:0];e&&e.focus()}}function f(e,i){return parseInt(t.css(e,i),10)||0}}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],t):t(jQuery)}(),function(t,e){"function"==typeof define&&define.amd?define(["jQuery"],e):"object"==typeof exports?e(require("jQuery")):e(t.jQuery)}(this,function(t){var e=function(){var t={},e=new RegExp("{{([^}]+)}}","g");return t.parse=function(t){for(var i={inpts:{},chars:{}},n=function(t){for(var i,n=[];i=e.exec(t);)n.push(i);return n}(t),a=t.length,o=0,r=0,s=0,l=function(t){for(var e=t.length,n=0;ne[0]&&tt.focus,a=0===i.end;(n||a)&&e.set(t.el,t.focus)},0)},o.prototype._processKey=function(t,n,a){if(this.sel=e.get(this.el),this.val=this.el.value,this.delta=0,this.sel.begin!==this.sel.end)this.delta=-1*Math.abs(this.sel.begin-this.sel.end),this.val=i.removeChars(this.val,this.sel.begin,this.sel.end);else if(n&&46===n)this._delete();else if(n&&this.sel.begin-1>=0)this.val=i.removeChars(this.val,this.sel.end-1,this.sel.end),this.delta-=1;else if(n)return!0;n||(this.val=i.addChars(this.val,t,this.sel.begin),this.delta+=t.length),this._formatValue(a)},o.prototype._delete=function(){for(;this.chars[this.sel.begin];)this._nextPos();this.sel.beginthis.focus&&(this.delta+=this.sel.end-this.focus);for(var t=0,e=0;e<=this.mLength;e++){var n,a=this.chars[e],o=this.hldrs[e],r=e+t;r=e>=this.sel.begin?r+this.delta:r,n=this.val.charAt(r),(a&&a===n||o&&o===n)&&(this.val=i.removeChars(this.val,r,r+1),t--)}this.hldrs={},this.focus=this.val.length},o.prototype._validateInpts=function(){for(var t=0;t-1?{begin:a,end:a}:{begin:-i.moveStart("character",-a),end:-i.moveEnd("character",-a)}}return{begin:0,end:0}},set:function(t,e){if("object"!=typeof e&&(e={begin:e,end:e}),t.setSelectionRange)t.focus(),t.setSelectionRange(e.begin,e.end);else if(t.createTextRange){var i=t.createTextRange();i.collapse(!0),i.moveEnd("character",e.end),i.moveStart("character",e.begin),i.select()}}};return t}(),i);$.fn.formatter=function(t){return"object"==typeof t&&this.each(function(){$.data(this,"plugin_formatter")||$.data(this,"plugin_formatter",new n(this,t))}),this.resetPattern=function(t){return this.each(function(){var e=$.data(this,"plugin_formatter");e&&e.resetPattern(t)}),this},this},$.fn.formatter.addInptType=function(t,e){n.addInptType(t,e)}}),function(t,e){var i,n=t.fn.domManip,a="_tmplitem",o=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,r={},s={},l={key:0,data:{}},c=0,u=0,h=[];function d(e,i,n,a){var o={data:a||0===a||!1===a?a:i?i.data:{},_wrap:i?i._wrap:null,tmpl:null,parent:i||null,nodes:[],calls:_,nest:b,wrap:w,html:k,update:x};return e&&t.extend(o,e,{nodes:[],parent:i}),n&&(o.tmpl=n,o._ctnt=o._ctnt||o.tmpl(t,o),o.key=++c,(h.length?s:r)[c]=o),o}function f(e,i,n){var o,r=n?t.map(n,function(t){return"string"==typeof t?e.key?t.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+a+'="'+e.key+'" $2'):t:f(t,e,t._ctnt)}):e;return i?r:((r=r.join("")).replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(e,i,n,a){y(o=t(n).get()),i&&(o=p(i).concat(o)),a&&(o=o.concat(p(a)))}),o||p(r))}function p(e){var i=document.createElement("div");return i.innerHTML=e,t.makeArray(i.childNodes)}function m(e){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+t.trim(e).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(e,i,n,a,o,r,s){var l,c,u,h=t.tmpl.tag[n];if(!h)throw"Unknown template tag: "+n;return l=h._default||[],r&&!/\w$/.test(o)&&(o+=r,r=""),o?(o=v(o),s=s?","+v(s)+")":r?")":"",c=r?o.indexOf(".")>-1?o+v(r):"("+o+").call($item"+s:o,u=r?c:"(typeof("+o+")==='function'?("+o+").call($item):("+o+"))"):u=c=l.$1||"null",a=v(a),"');"+h[i?"close":"open"].split("$notnull_1").join(o?"typeof("+o+")!=='undefined' && ("+o+")!=null":"true").split("$1a").join(u).split("$1").join(c).split("$2").join(a||l.$2||"")+"__.push('"})+"');}return __;")}function g(e,i){e._wrap=f(e,!0,t.isArray(i)?i:[o.test(i)?i:t(i).html()]).join("")}function v(t){return t?t.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function y(e){var i,n,o,l,h,f="_"+u,p={};for(o=0,l=e.length;o=0;h--)m(n[h]);m(i)}function m(e){var i,n,o,l,h=e;if(l=e.getAttribute(a)){for(;h.parentNode&&1===(h=h.parentNode).nodeType&&!(i=h.getAttribute(a)););i!==l&&(h=h.parentNode?11===h.nodeType?0:h.getAttribute(a)||0:0,(o=r[l])||((o=d(o=s[l],r[h]||s[h])).key=++c,r[c]=o),u&&m(l)),e.removeAttribute(a)}else u&&(o=t.data(e,"tmplItem"))&&(m(o.key),r[o.key]=o,h=(h=t.data(e.parentNode,"tmplItem"))?h.key:0);if(o){for(n=o;n&&n.key!=h;)n.nodes.push(e),n=n.parent;delete o._ctnt,delete o._wrap,t.data(e,"tmplItem",o)}function m(t){o=p[t+=f]=p[t]||d(o,r[o.parent.key+f]||o.parent)}}}function _(t,e,i,n){if(!t)return h.pop();h.push({_:t,tmpl:e,item:this,data:i,options:n})}function b(e,i,n){return t.tmpl(t.template(e),i,n,this)}function w(e,i){var n=e.options||{};return n.wrapped=i,t.tmpl(t.template(e.tmpl),e.data,n,e.item)}function k(e,i){var n=this._wrap;return t.map(t(t.isArray(n)?n.join(""):n).filter(e||"*"),function(t){return i?t.innerText||t.textContent:t.outerHTML||(e=t,(n=document.createElement("div")).appendChild(e.cloneNode(!0)),n.innerHTML);var e,n})}function x(){var e=this.nodes;t.tmpl(null,null,null,this).insertBefore(e[0]),t(e).remove()}t.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,n){t.fn[e]=function(a){var o,s,l,c,h=[],d=t(a),f=1===this.length&&this[0].parentNode;if(i=r||{},f&&11===f.nodeType&&1===f.childNodes.length&&1===d.length)d[n](this[0]),h=this;else{for(s=0,l=d.length;s0?this.clone(!0):this).get(),t(d[s])[n](o),h=h.concat(o);u=0,h=this.pushStack(h,e,d.selector)}return c=i,i=null,t.tmpl.complete(c),h}}),t.fn.extend({tmpl:function(e,i,n){return t.tmpl(this[0],e,i,n)},tmplItem:function(){return t.tmplItem(this[0])},template:function(e){return t.template(e,this[0])},domManip:function(e,a,o,s){if(e[0]&&t.isArray(e[0])){for(var l,c=t.makeArray(arguments),h=e[0],d=h.length,f=0;f").join(">").split('"').join(""").split("'").join("'")}}),t.extend(t.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},if:{open:"if(($notnull_1) && $1a){",close:"}"},else:{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(t){r={}},afterManip:function(e,i,n){var a=11===i.nodeType?t.makeArray(i.childNodes):1===i.nodeType?[i]:[];n.call(e,i),y(a),u++}})}(jQuery),APP.init=function(){APP.initAjaxDefaultSetting(),APP.initMenu(),APP.initAx5(),APP.initPlugins(),APP.initCheckboxAll()},APP.initAjaxDefaultSetting=function(){$(document).ajaxError(function(t,e,i){var n="알수없는 오류가 발생하였습니다.";void 0!==e.responseJSON&&void 0!==e.responseJSON.message?n=e.responseJSON.message:500==e.status?n="서버 코드 오류가 발생하였습니다.\n관리자에게 문의하세요":401==e.status&&(n="해당 명령을 실행할 권한이 없습니다."),toastr.error(n,"오류 발생")}).ajaxStart(function(){$.blockUI({css:{width:"25px",top:"49%",left:"49%",border:"0px none",backgroundColor:"transparent",cursor:"wait"},message:'로딩중',baseZ:1e4,overlayCSS:{opacity:0}})}).ajaxComplete(function(){$.unblockUI()})},APP.initMenu=function(){$("#nav .main-navigation li").each(function(){$(this).data("active")==menuActive&&($(this).addClass("active"),$(this).parents("li").addClass("active"))})},APP.initPlugins=function(){$.datepicker._updateDatepicker_original=$.datepicker._updateDatepicker,$.datepicker._updateDatepicker=function(t){$.datepicker._updateDatepicker_original(t);var e=this._get(t,"afterShow");e&&e.apply(t.input?t.input[0]:null)},$.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일","월","화","수","목","금","토"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,changeMonth:!0,changeYear:!0,yearSuffix:"",afterShow:function(){$(".ui-datepicker-prev").empty().append(''),$(".ui-datepicker-next").empty().append('')}},$.datepicker.setDefaults($.datepicker.regional.ko),$('[data-toggle="datepicker"]').datepicker(),$("body").on("click",'[data-toggle="datepicker"]',function(){$(this).hasClass("hasDatepicker")||($(this).datepicker(),$(this).datepicker("show"))})},APP.initCheckboxAll=function(){$("[data-checkbox]").click(function(){var t=$(this),e=t.data("checkbox-all")&&"true"==t.data("checkbox-all").toString(),i=t.data("checkbox"),n=t.prop("checked"),a=e?t:$('[data-checkbox="'+i+'"][data-checkbox-all="true"]');e?$('[data-checkbox="'+i+'"]').prop("checked",n):a.prop("checked",$('[data-checkbox="'+i+'"]').not('[data-checkbox-all="true"]').length==$('[data-checkbox="'+i+'"]:checked').not('[data-checkbox-all="true"]').length)})},APP.initAx5=function(){APP.MASK=new ax5.ui.mask({zIndex:1e3}),APP.MASK2=new ax5.ui.mask({zIndex:2e3}),APP.modal=new ax5.ui.modal({absolute:!0,iframeLoadingMsg:''}),APP.modal2=new ax5.ui.modal({absolute:!0,iframeLoadingMsg:''}),APP.toast=new ax5.ui.toast({containerPosition:"top-right",closeIcon:''})},$(function(){APP.init()}),function(t){"use strict";var e=".dropdown-backdrop",i='[data-toggle="dropdown"]',n=function(e){t(e).on("click.bs.dropdown",this.toggle)};function a(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var n=i&&t(i);return n&&n.length?n:e.parent()}function o(n){n&&3===n.which||(t(e).remove(),t(i).each(function(){var e=t(this),i=a(e),o={relatedTarget:this};i.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(i[0],n.target)||(i.trigger(n=t.Event("hide.bs.dropdown",o)),n.isDefaultPrevented()||(e.attr("aria-expanded","false"),i.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}n.VERSION="3.3.7",n.prototype.toggle=function(e){var i=t(this);if(!i.is(".disabled, :disabled")){var n=a(i),r=n.hasClass("open");if(o(),!r){"ontouchstart"in document.documentElement&&!n.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",o);var s={relatedTarget:this};if(n.trigger(e=t.Event("show.bs.dropdown",s)),e.isDefaultPrevented())return;i.trigger("focus").attr("aria-expanded","true"),n.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},n.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var n=t(this);if(e.preventDefault(),e.stopPropagation(),!n.is(".disabled, :disabled")){var o=a(n),r=o.hasClass("open");if(!r&&27!=e.which||r&&27==e.which)return 27==e.which&&o.find(i).trigger("focus"),n.trigger("click");var s=o.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(e.target);38==e.which&&l>0&&l--,40==e.which&&l',onClick:function(){APP.MODAL.callback()}}}}});return{open:function(t){t=$.extend(!0,{},e,t),$(document.body).addClass("modalOpened"),this.modalCallback=t.callback,this.modalSendData=t.sendData,APP.modal.open(t)},css:function(e){e=$.extend(!0,{},t,e),APP.modal.css(e)},align:function(t){APP.modal.align(t)},close:function(t){APP.modal.close(),setTimeout(function(){$(document.body).removeClass("modalOpened")},500)},minimize:function(){APP.modal.minimize()},maximize:function(){APP.modal.maximize()},callback:function(t){this.modalCallback&&this.modalCallback(t),this.close(t)},modalCallback:{},getData:function(){if(this.modalSendData)return this.modalSendData()}}}(),APP.MODAL2=function(){var t={width:400,height:400,position:{left:"center",top:"middle"}},e=$.extend(!0,{},t,{iframeLoadingMsg:"",iframe:{method:"get",url:"#"},closeToEsc:!0,onStateChanged:function(){"open"===this.state?APP.MASK2.open():"close"===this.state&&APP.MASK2.close()},animateTime:100,zIndex:2001,absolute:!0,fullScreen:!1,header:{title:"새로운 윈도우",btns:{close:{label:'',onClick:function(){APP.MODAL2.callback()}}}}});return{open:function(t){t=$.extend(!0,{},e,t),$(document.body).addClass("modalOpened"),this.modalCallback=t.callback,this.modalSendData=t.sendData,APP.modal2.open(t)},css:function(e){e=$.extend(!0,{},t,e),APP.modal2.css(e)},align:function(t){APP.modal2.align(t)},close:function(t){APP.modal2.close(),setTimeout(function(){$(document.body).removeClass("modalOpened")},500)},minimize:function(){APP.modal2.minimize()},maximize:function(){APP.modal2.maximize()},callback:function(t){this.modalCallback&&this.modalCallback(t),this.close(t)},modalCallback:{},getData:function(){if(this.modalSendData)return this.modalSendData()}}}(),APP.TOAST={confirm:function(t){APP.toast.push({theme:"default",icon:'',msg:t})},error:function(t){APP.toast.push({theme:"danger",icon:'',msg:t})},success:function(t){APP.toast.push({theme:"success",icon:'',msg:t})}},APP.BOARD.keyCheck=function(t){return""==t?"게시판 고유키를 입력하세요":APP.REGEX.uniqueID.test(t)?!APP.BOARD.existCheck(t)||"이미 존재하는 키 입니다.":"게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다."},APP.BOARD.existCheck=function(t){var e=null;return $.ajax({url:base_url+"/ajax/board/info",type:"get",async:!1,cache:!1,data:{brd_key:t,is_raw:!0},success:function(t){e=t}}),e},APP.BOARD.CATEGORY.form=function(t,e,i){e=void 0!==e&&e>=0?e:null,i=void 0!==i&&i?i:null;return(t=void 0!==t&&t?t:null)?parseInt(e)<0?(alert("부모 카테고리가 선택되지 않았습니다."),!1):void APP.MODAL.open({width:400,height:200,header:{title:i?"카테고리 정보 수정":"카테고리 추가"},callback:function(){parent.location.reload()},iframe:{method:"get",url:"/admin/board/category_form",param:{brd_key:t,bca_parent:e,bca_idx:i}}}):(alert("게시판이 지정되지 않았습니다."),!1)},APP.BOARD.CATEGORY.remove=function(t){if(APP.BOARD.CATEGORY.count(t)>0)return alert("해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요"),!1;var e=APP.BOARD.CATEGORY.postCount(t);return!(e>0&&!confirm("해당 카테고리에 등록된 글이 "+e+"건이 있습니다. 삭제를 진행하시겠습니까?"))&&(!!confirm("해당 카테고리를 삭제하시겠습니까?")&&void $.ajax({url:base_url+"/ajax/board/category",type:"DELETE",cache:!1,async:!1,data:{bca_idx:t},success:function(t){t.result?(alert("카테고리 삭제에 성공하였습니다."),location.reload()):(alert("카테고리 삭제에 실패하였습니다."),location.reload())}}))},APP.BOARD.EXTRA.form=function(t,e){if(e=void 0!==e&&e?e:null,!(t=void 0!==t&&t?t:null))return alert("게시판이 지정되지 않았습니다."),!1;APP.MODAL.open({width:400,height:200,header:{title:e?"입력필드 수정":"입력필드 추가"},callback:function(){parent.location.reload()},iframe:{method:"get",url:"/admin/board/extra_form",param:{brd_key:t,bmt_idx:e}}})},APP.BOARD.EXTRA.remove=function(t,e){return t=void 0!==t&&t?t:null,(e=void 0!==e&&e?e:null)?!!confirm("해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?")&&void $.ajax({url:base_url+"/ajax/board/extra",type:"DELETE",cache:!1,async:!1,data:{brd_key:t,bmt_idx:e},success:function(t){t.result?(alert("입력필드 삭제에 성공하였습니다."),location.reload()):(alert("입력필드 삭제에 실패하였습니다."),location.reload())}}):(alert("잘못된 접근입니다."),!1)};var faq={form:function(t,e){e="string"==typeof e||"number"==typeof e?e:null;if(!(t="string"==typeof t||"number"==typeof t?t:null))return alert("FAQ 분류 정보가 없습니다."),!1;APP.MODAL.open({width:800,height:650,header:{title:e?"FAQ 정보 수정":"FAQ 추가"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/management/faq_form",param:{fac_idx:t,faq_idx:e}}})},remove:function(t){if(void 0!==t&&t&&""!=t.trim()||alert("잘못된 접근입니다."),!confirm("해당 FAQ를 삭제하시겠습니까?"))return!1;$.ajax({url:"/ajax/faq/info",type:"delete",async:!1,cache:!1,data:{faq_idx:t},success:function(t){alert("FAQ가 삭제되었습니다."),location.reload()}})},category:{}};faq.category.form=function(t){t="string"==typeof t||"number"==typeof t?t:null;APP.MODAL.open({width:$(window).width()>600?600:$(window).width(),height:250,header:{title:t?"FAQ 분류 정보 수정":"FAQ 분류 추가"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/management/faq_category_form",param:{fac_idx:t}}})},faq.category.exist=function(t){if(void 0===t||!t||""==t.trim())return!1;var e=!1;return $.ajax({url:"/ajax/faq/category",type:"get",async:!1,cache:!1,data:{fac_idx:t},success:function(t){e=!(t&&void 0!==t.fac_idx&&t.fac_idx)}}),e},faq.category.remove=function(t){void 0!==t&&t&&""!=t.trim()||alert("잘못된 접근입니다.");var e=0;if($.ajax({url:"/ajax/faq/lists",type:"get",async:!1,cache:!1,data:{fac_idx:t},success:function(t){e=t.total_count}}),!confirm(e>0?"해당 FAQ 분류에 "+e+"개의 FAQ 목록이 등록되어 있습니다.\nFAQ 분류을 삭제할시 등록된 FAQ 목록도 같이 삭제됩니다.\n\n계속 하시겠습니까?":"FAQ 분류을 삭제하시겠습니까?"))return!1;$.ajax({url:"/ajax/faq/category",type:"delete",async:!1,cache:!1,data:{fac_idx:t},success:function(t){alert("FAQ 분류가 삭제되었습니다."),location.href=base_url+"/admin/management/faq"}})},APP.MEMBER.POP_INFO_ADMIN=function(t){if(void 0===t||!t)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"회원 정보"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/info/"+t,param:{}}})},APP.MEMBER.POP_PASSWORD_ADMIN=function(t){if(void 0===t||!t)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"비밀번호 변경"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/password/"+t,param:{}}})},APP.MEMBER.POP_MODIFY_ADMIN=function(t){if(void 0===t||!t)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"회원 정보 수정"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/modify/"+t,param:{}}})},APP.MEMBER.POP_POINT_ADMIN=function(t){if(void 0===t||!t)return alert("잘못된 접근입니다."),!1;APP.MODAL.open({width:800,height:600,header:{title:"회원 포인트 관리"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/point/"+t,param:{}}})},APP.MEMBER.POP_POINT_FORM_ADMIN=function(t){(t=void 0!==t&&t?t:null)?(APP.MODAL2.callback=function(){location.reload()},APP.MODAL2.open({width:410,height:200,header:{title:"회원 포인트 추가"},callback:function(){location.reload()},iframe:{method:"get",url:"/admin/members/point_form/"+t}})):alert("잘못된 접근입니다.")},APP.MEMBER.STATUS_CHANGE=function(t,e,i){if(void 0===t||!t||void 0===e||!e||void 0===i||!i)return alert(LANG.common_msg_invalid_access),!1;var n="";if("Y"==i)n=LANG.member_status_y;else if("N"==i)n=LANG.member_status_n;else if("D"==i)n=LANG.member_status_d;else{if("H"!=i)return alert(LANG.common_msg_invalid_access),!1;n=LANG.member_status_h}confirm("해당 회원의 상태를 ["+n+"] 상태로 변경합니까?")&&$.ajax({url:"/ajax/members/status",type:"POST",async:!1,cache:!1,data:{mem_idx:t,current_status:e,change_status:i},success:function(){alert("지정한 회원의 상태를 ["+n+"] 상태로 변경하였습니다."),location.reload()}})},$(function(){}); //# sourceMappingURL=admin.min.js.map diff --git a/public_html/assets/js/admin.min.js.map b/public_html/assets/js/admin.min.js.map index ed2c177..1f7b74b 100644 --- a/public_html/assets/js/admin.min.js.map +++ b/public_html/assets/js/admin.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["clipboard.js","jquery.cookie.js","global.js","member.js","board.js","ax5core.js","ax5formatter.js","ax5mask.js","ax5modal.js","ax5toast.js","ax5calendar.js","ax5picker.js","jquery.datetimepicker.full.js","jquery.blockUI.js","jquery.formatter.js","jquery.tmpl.js","admin.js","components.js","modal.js","toast.js","faq.js"],"names":["root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_select","obj","_select2","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","length","descriptor","writable","key","Constructor","protoProps","staticProps","ClipboardAction","options","instance","TypeError","_classCallCheck","resolveOptions","initSelection","arguments","undefined","action","container","emitter","text","trigger","selectedText","selectFake","selectTarget","_this","isRTL","document","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","window","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","err","handleResult","emit","clearSelection","bind","focus","getSelection","removeAllRanges","set","_action","Error","nodeType","hasAttribute","_target","apply","is","delegate","type","callback","string","fn","node","destroy","listenNode","nodeList","Array","forEach","listenNodeList","selector","body","listenSelector","E","on","ctx","e","push","once","self","listener","off","_","data","slice","evtArr","len","evts","liveEvents","_clipboardAction","_tinyEmitter","_goodListener","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","listenClick","subClass","superClass","create","setPrototypeOf","_inherits","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","currentTarget","clipboardAction","getAttributeValue","querySelector","actions","support","queryCommandSupported","suffix","element","attribute","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","map","HTMLElement","toString","String","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","require","jQuery","$","pluses","encode","config","raw","encodeURIComponent","read","converter","indexOf","replace","decodeURIComponent","json","JSON","parse","parseCookieValue","isFunction","cookie","extend","defaults","expires","days","t","Date","setMilliseconds","getMilliseconds","stringify","stringifyCookieValue","toUTCString","path","domain","secure","join","result","cookies","split","parts","shift","removeCookie","console","log","APP","POPUP","REGEX","uniqueID","option","title","width","height","url","cw","screen","availWidth","ch","availHeight","sw","sh","ml","mt","win","open","outerWidth","outerHeight","alert","SET_LANG","lang","location","reload","click","idx","close","remove","not","preventDefault","sns_type","href","loc","img","attr","ClipboardJS","MEMBER","init","InitLoginForm","initCheckExist","InitRegisterForm","InitMemberModifyForm","submit","$form","ajax","serialize","base_url","success","res","LANG","member_join_success","message","elementLoginID","find","elementLoginPass","val","trim","member_login_userid_required","member_login_password_required","reurl","error","each","$btn","$target","member_join_user_id_required","wordCheck","denyWordCheck","member_join_no_valid_email_address","getInfo","member_join_user_id_already_exists","member_join_user_id_available","member_join_user_id_contains_deny_word","info","async","cache","POP_CHANGE_PHOTO","ready","BOARD","CATEGORY","EXTRA","COMMENT","count","bca_idx","postCount","modify","cmt_idx","reply","cmt_num","$form_post","blockUI","css","left","backgroundColor","cursor","baseZ","overlayCSS","opacity","DateFormatter","doc","reIsJson","reMs","reSnakeCase","reCamelCase","reDot","reInt","reNotNum","reMoneySplit","RegExp","reAmp","reEq","reClassNameSplit","ax5","U","guid","getGuid","_arguments","browser","ua","mobile","browserName","match","browserVersion","navigator","userAgent","toLowerCase","search","version","exec","isBrowser","wheelEnm","test","errorMsg","baseUrl","onerror","toArray","eventKeys","BACKSPACE","TAB","RETURN","ESC","LEFT","UP","RIGHT","DOWN","DELETE","HOME","END","PAGEUP","PAGEDOWN","INSERT","SPACE","weekNames","label","supportTouch","maxTouchPoints","msMaxTouchPoints","supportFileApi","FileReader","File","FileList","Blob","urlUtil","urls","param","referrer","pathname","hostname","port","hashdata","last","getError","className","errorCode","methodName","msg","_toString","O","_fn","isNothing","toJson","jsonString","util","isArray","isObject","jsonObjectBody","isString","isNumber","isUndefined","str","pos","substr","right","lastIndexOf","camelCase","all","letter","toUpperCase","snakeCase","number","cond","isMinus","returnValue","pair","Number","k","nUnit","myByte","Math","round","abs","floor","ceil","txtNumber","isNaN","arrNumber","localDate","yy","mm","dd","hh","mi","ss","utcD","UTC","getUTCHours","getTimezoneOffset","setUTCHours","date","nY","nH","nMM","nS","nDW","regY","regM","regD","regH","regMI","regS","regDW","fStr","nM","nD","aDateTime","aTimes","aTime","aDate","va","parseFloat","substring","_d","opts","mxdd","setTime","getTime","getFullYear","getMonth","getDate","daysOfMonth","parseInt","processor","firstDayOfMonth","lastDayOfMonth","getUTCFullYear","setDigit","getHours","getMinutes","getSeconds","getDay","$1","y","num","padder","radix","times","selectRange","textRange","selectAll","el","offset","arr","moveStart","collapse","moveEnd","start","end","setStart","setEnd","firstChild","rangeType","createTextRange","moveToElementText","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","now","trailingEdge","setTimeout","timeSinceLastInvoke","min","remainingWait","debounced","isInvoking","_len","_key","leadingEdge","max","cancel","clearTimeout","flush","escapeHtml","unescapeHtml","results","fnResult","reduce","tokenItem","reduceRight","filter","sum","defaultValue","tokenValue","avg","parseJson","force","Function","first","keys","item","deepCopy","r","getType","typeName","isWindow","isElement","isNodelist","setCookie","cn","cv","exdays","expire","setDate","escape","getCookie","cname","ca","charAt","unescape","merge","second","j","v","dday","diffnum","memoryDay","DyMilli","today","getDayTime","weeksOfMonth","myDate","year","month","findParentNode","tagName","toLocaleLowerCase","klasss","hasClass","a","cssNumber","found","unit","returns","vSplited","isDate","valueOf","isDateFormat","stopEvent","event","cancelBubble","stopPropagation","throttle","_string","format","concat","decode","_pos","color","_hexColor","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","rgb","rgba","hsl","hsla","hsv","hsva","hex3","hex6","hex4","hex8","convertToPercentage","convertTo255","convertToHex","bound01","isOnePointZero","processPercent","isPercentage","rgbToHsl","g","b","h","hslToRgb","hue2rgb","q","_color","_originalValue","convertObject","_format","_hex","getHexValue","lighten","amount","darken","getBrightness","isDark","isLight","getHsl","def","501","401","402","460","461","hwp","hdeb","de","del","_f","re_trim","propertyIsEnumerable","prop","fun","thisp","bound","nop","createStyleSheet","maxCount","resultSet","addRule","currentStyle","foo","removeRule","Infinity","sJSON","vContent","splice","documentMode","_splice","_slice","begin","size","cloned","upTo","con","method","empty","dummy","properties","methods","pop","webkitMatchMedia","mozMatchMedia","oMatchMedia","msMatchMedia","matchMedia","getElementsByTagName","styleMedia","media","script","id","insertBefore","getComputedStyle","matchMedium","styleSheet","cssText","textContent","addListener","localMatchMedia","hasMediaQueries","isListening","timeoutID","queries","handleChange","evt","il","mql","listeners","jl","index","removeListener","ui","setConfig","cfg","callInit","bindWindowResize","callBack","resize","bindWindowResize__","main","addClass","cls","classStore","wrapper","arg","instanceId","initInstance","global","mustache","objectToString","escapeRegExp","hasProperty","propName","regExpTest","nonSpaceRe","isWhitespace","re","testRegExp","entityMap","&","<",">","\"","'","/","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","tail","Context","view","parentContext",".","@each","@key","@value","parent","Writer","eos","scan","scanUntil","lookup","names","context","lookupHit","clearCache","template","tags","tokens","openingTagRe","closingTagRe","closingCurlyRe","sections","spaces","hasTag","nonSpace","stripSpace","compileTags","tagsToCompile","chr","token","openSection","scanner","valueLength","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","parseTemplate","render","partials","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","defaultWriter","to_html","send","UI","FORMATTER","animateTime","queue","openTimer","closeTimer","formatterEvent","optIdx","$input","keydown","isStop","enterableKeyCodes","which","metaKey","ctrlKey","shiftKey","keyup","elemFocusPosition","beforeValue","newValue","selectionLength","elem","selectionStart","pattern","formatter","getPatternValue","input","selectionEnd","blur","_force","removeData","bindFormatterTarget","matched","patternArgument","getEnterableKeyCodes","unbind","formatterConfig","formatting","boundID","queIdx","TODAY","pattern_money","_opts","188","ctrlKeys","numKeys","eType","regExpPattern","maxRound","pattern_number","190","110","pattern_date","189","191","matchedPattern","inspectValue","inspect","Y","M","D","dLen","nval","pattern_time","186","pattern_bizno","pattern_phone","regExpPattern3","pattern_credit","18","8","17","46","40","35","187","27","36","45","37","34","33","13","39","16","9","38","91","48","49","50","51","52","53","54","55","56","57","96","97","98","99","100","101","102","103","104","105","money","bizno","phone","credit","custom","formatter_instance","ax5formatter","defaultConfig","MASK","theme","maskContent","status","onStateChanged","that","setBody","content","templateName","maskConfig","_cfg","maskId","$mask","tmpl","getBodyTmpl","append","_$target","align","zIndex","state","_delay","_close","removeClass","fadeOut","pullRequest","mask_instance","mask","defaultMask","columnKeys","tmplName","MODAL","ENM","mousedown","mousemove","mouseup","getMousePosition","mouseObj","changedTouches","clientX","clientY","minimizePosition","clickEventName","closeToEsc","disableDrag","disableResize","iframe","activeModal","watingModal","eventProcessor","onResize","move","modalId","header","fullScreen","styles","iframeLoadingMsg","absolute","hide","show","onkeyup","isButton","isFullScreen","mousePosition","moveModal","btnOnClick","originalEvent","resizeModal","srcElement","btns","dialogId","btnTarget","keyCode","alignProcessor","top-left","top-right","bottom-left","bottom-right","center-middle","modalZIndex","modalOffset","modalBox","scrollLeft","__dx","__dy","resizerBg","resizer","getResizerPosition","box","modalConfig","removeAttr","resizerType","resizerProcessor","minHeight","altKey","bottom","minWidth","cursorType","headerHeight","tryCount","_option","$iframe","iframeObject","idoc","contentDocument","contentWindow","children","innerHTML","CollectGarbage","minimized","minimize","originalHeight","restore","setModalConfig","_config","_fullScreen","modal_instance","modal","TOAST","toastSeq","toastSeqClear","icon","closeIcon","ok","displayTime","containerPosition","toastContainer","getContent","toastId","toastBox","containerId","prepend","toastType","btn_target","dialogConfig","confirm","toast_instance","toast","toastDisplay","CALENDAR","selectableCount","selectionMap","selectableMap","markerMap","printedDay","startOfWeek","mode","dateFormat","displayDate","dimensions","controlHeight","controlButtonWidth","colHeadHeight","itemPadding","yearHeading","monthHeading","yearTmpl","months","dayTmpl","multipleSelect","selectMode","defaultMarkerTheme","defaultPeriodTheme","setDisplay","yy1","yy2","control","monthTmpl","html","yearFirst","changeMode","printDay","nowDate","loopDate","classNames","dotDate","monthStratDate","_today","tableStartDate","day","add","thisMonth","itemStyles","frameWidth","frameHeight","list","thisDate","return","_date","row","col","isStartOfWeek","thisDataLabel","selectable","onclick","printMonth","tableStartMonth","nMonth","colHeadLabel","_month","isStartOfRow","thisMonthLabel","printYear","tableStartYear","nYear","_year","thisYear","thisYearLabel","dt","dateElement","controlCSS","controlButtonCSS","control-display","setSelection","setSelectable","marker","setMarker","changeDate","isPrint","from","to","isApply","setPeriod","periodMap","fromLabel","toLabel","period","calendar_instance","calendar","frameTmpl","PICKER","picker","date_leftArrow","date_yearTmpl","date_monthTmpl","date_rightArrow","palette","activePicker","activePickerQueueIndex","pickerEvent","pickerType","multipleInputProcessor","pickerContent","bindPickerTarget","@fn","_input","inputLength","contentWidth","contentMargin","secure-num","keyboard","numpad","$colorPreview","background-color","alignPicker","dim","pickerDim","pickerDirection","$window","$body","winWidth","winHeight","direction","positionCSS","activePickerArrow","getQueIdx","pickerConfig","setContentValue","_item","_inputIndex","_val","prevInputValue","nextInputValue","values","pickerCalendar","ax5uiInstance","inputIndex","disableChangeTrigger","doNotClose","getContentValue","calendarConfig","dValue","dateConvert","itemId","po","x","random","btnWrapStyle","btnTheme","btnStyle","specialBtnTheme","act","keyArray","shiftValue","getKeyBoard","isShiftKey","keyValue","keyLabel","specialBtnWrapStyle","specialBtnStyle","$this","paletteConfig","pickerPalette","dColor","selectedColor","onUpdateColor","pickerTmpl","picker_instance","ax5picker","u","dateSettings","daysShort","monthsShort","meridiem","ordinal","1","2","3","separators","validParts","intParts","tzParts","tzClip","parseDate","f","hour","sec","guessDate","setMonth","setFullYear","setHours","setMinutes","setSeconds","parseFormat","w","N","z","W","F","L","A","G","B","getUTCMinutes","getUTCSeconds","H","I","P","T","Z","formatDate","datetimepickerFactory","default_options","i18n","ar","dayOfWeekShort","dayOfWeek","ro","bg","fa","ru","uk","en","nl","tr","fr","es","th","pl","pt","se","km","kr","it","da","no","ja","vi","sl","cs","hu","az","bs","en-GB","et","eu","fi","gl","hr","ko","lt","lv","mk","mn","pt-BR","sk","sq","sr-YU","sr","sv","zh-TW","zh","ug","he","hy","kg","rm","ka","ownerDocument","rtl","formatTime","startDate","step","monthChangeSpinner","closeOnDateSelect","closeOnTimeSelect","closeOnWithoutClick","closeOnInputClick","openOnFocus","timepicker","datepicker","weeks","defaultTime","defaultDate","minDate","maxDate","minTime","maxTime","minDateTime","maxDateTime","allowTimes","opened","initTime","inline","touchMovedThreshold","onSelectDate","onSelectTime","onChangeMonth","onGetWeekOfYear","onChangeYear","onChangeDateTime","onShow","onClose","onGenerate","withoutCopyright","inverseButton","hours12","next","prev","dayOfWeekStart","parentID","timeHeightInTimePicker","timepickerScrollbar","todayButton","prevButton","nextButton","defaultSelect","scrollMonth","scrollTime","scrollInput","lazyInit","validateOnBlur","allowBlank","yearStart","yearEnd","monthStart","monthEnd","fixed","roundTime","weekends","highlightedDates","highlightedPeriods","allowDates","allowDateRe","disabledDates","disabledWeekDays","yearOffset","beforeShowDay","enterLikeTab","showApplyButton","dateHelper","defaultDateHelper","globalLocale","dateFormatterOptionsDefault","initDateFormatter","locale","dateFormatters","moment","isFormatStandard","isValid","toDate","formatMask","datetimepicker","setLocale","newLocale","setDateFormatter","dateFormatter","df","standardFormats","RFC_2822","ATOM","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RSS","W3C","HighlightedDate","desc","getPropertyValue","countDaysInMonth","xdsoftScroller","percent","timebox","parentHeight","scrollbar","scroller","timeboxparent","pointerEventToXY","touch","out","touches","maximumOffset","startY","startTop","h1","touchStart","startTopScroll","calcOffset","eq","clientHeight","offsetHeight","arguments_callee","percentage","noTriggerScroll","deltaY","coord","opt","opt2","createDateTimePicker","destroyDateTimePicker","KEY0","KEY9","_KEY0","_KEY9","CTRLKEY","DEL","ENTER","ARROWLEFT","ARROWUP","ARROWRIGHT","ARROWDOWN","F5","AKEY","CKEY","VKEY","ZKEY","YKEY","ctrlDown","isPlainObject","lazyInitTimer","xchangeTimer","timerclick","current_time_index","setPos","_xdsoft_datetime","forEachAncestorOf","xdsoft_copyright","month_picker","applyButton","monthselect","yearselect","triggerAfterOpen","timer","after","items","visible","currentTime","handleTouchMoved","touchPosition","touchStartPosition","xMovement","yMovement","sqrt","touchMoved","getCurrentValue","ct","strToDate","strToDateTime","strtotime","isValidDate","setMask","isValidValue","reg","setCaretPos","getElementById","pastedData","clipboardData","getData","valueBeforeCursor","valueAfterPaste","digit","selEnd","hasSel","fromCharCode","maskValueAtCurPos","posShorterThanMaskLength","posGreaterThanZero","selLength","defaultBlank","selReplacementRemainder","valueBeforeSel","insertChars","charsAfterSelection","insertChar","valueAfterNextChar","getValue","getCurrentTime","setOptions","_options","exDesc","splitData","hDate","keyDate","dateTest","dateEnd","setCurrentTime","toggle","splittedHours","splittedMinutes","dayOfWeekStartPrev","norecursion","dTime","requireValidDate","nextMonth","prevMonth","getWeekOfYear","datetime","week","onejan","sDateTime","timeOffset","tmpDate","sDate","sTime","currentDate","stop","arguments_callee1","arguments_callee2","arguments_callee4","pheight","marginTop","arguments_callee5","customDateSettings","line_time","description","maxDateTimeDay","table","classes","newRow","currentDay","minTimeMinutesOfDay","maxTimeMinutesOfDay","current_time","isALlowTimesInit","currentMinutesOfDay","classType","xdevent","deltaX","dateInputOffset","dateInputElem","verticalPosition","datetimepickerElem","dateInputHasFixedAncestor","$dateInput","windowWidth","verticalAnchorEdge","datetimepickerCss","windowHeight","windowScrollTop","clientWidth","diff","offsetWidth","ancestorNode","arguments_callee6","elementSelector","unmousewheel","initOnActionCallback","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","special","mousewheel","setup","handler","onmousewheel","getLineHeight","getPageHeight","teardown","$elem","$parent","settings","adjustOldDeltas","normalizeOffset","absDelta","orgEvent","delta","offsetX","offsetY","fix","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","getBoundingClientRect","boundingRect","deltaFactor","unshift","nullLowestDelta","dispatch","handle","_fadeIn","fadeIn","noOp","noop","msie","ie6","setExpr","setExpression","install","unblockUI","growlUI","timeout","$m","callBlock","centerY","showOverlay","onUnblock","growlCSS","mouseover","displayBlock","fadeTo","mouseout","block","fullOpts","$el","ignoreIfBlocked","unblock","zoom","draggable","textAlign","themedCSS","cursorReset","-webkit-border-radius","-moz-border-radius","border-radius","iframeSrc","forceIframe","centerX","allowBodyStretch","bindEvents","constrainTabKey","focusInput","focusableElements","onBlock","onOverlayClick","quirksmodeOffsetHack","blockMsgClass","pageBlock","pageBlockEls","full","jquery","display","lyr1","lyr2","lyr3","layers","$par","appendTo","expr","boxModel","sz","fixT","fixL","expression","cb","cb1","cb2","center","els","reset","cssW","events","fwd","back","parents","regexp","inpts","chars","getMatches","pLength","mCount","iCount","processMatch","valLength","mLength","utils","destObj","addChars","removeChars","isBetween","bounds","sort","attachEvent","getClip","getMatchingKey","isDelKeyDown","backspace","delete","isDelKeyPress","isSpecialKeyPress","tab","enter","home","leftarrow","uparrow","rightarrow","downarrow","isModifier","collection","patternMatcher","inptSel","persistent","repeat","placeholder","inptRegs","*","Formatter","patterns","_specFromSinglePattern","_updatePattern","hldrs","_keyDown","_keyPress","_paste","_processKey","_focus","addInptType","resetPattern","sel","_removeChars","newPattern","getPattern","isSpecial","isAfterStart","isFirstChar","delKey","ignoreCaret","_delete","_formatValue","_nextPos","newPos","_validateInpts","_addChars","curChar","curHldr","inptType","isBadType","isInvalid","inBounds","focusStart","_addChar","patternStr","parseMatcher","matcher","patternSpec","matcherStr","parsedPattern","regExpMatcher","matchedIndex","parentElement","inputRange","endRange","moveToBookmark","getBookmark","compareEndPoints","formatted","appendToTmplItems","oldManip","domManip","tmplItmAtt","htmlExpr","newTmplItems","wrappedItems","topTmplItem","itemKey","cloneIndex","stack","newTmplItem","parentItem","newItem","_wrap","nodes","calls","tiCalls","nest","tiNest","wrap","tiWrap","tiHtml","update","tiUpdate","_ctnt","build","tmplItem","nested","frag","ret","before","middle","storeTmplItems","unencode","makeArray","childNodes","buildTmplFn","markup","slash","fnargs","parens","exprAutoFnDetect","tag","_default","$2","updateWrapped","wrapped","elems","keySuffix","newClonedItems","processItemKey","pntKey","pntItem","pntNode","cloneTmplItem","textOnly","innerText","outerHTML","div","cloneNode","coll","prependTo","insertAfter","replaceAll","original","tmplItems","insert","clone","pushStack","complete","dmArgs","elemsLength","fragClone","afterManip","topLevel","dataItem","if","else","=","!","initAjaxDefaultSetting","initMenu","initAx5","initPlugins","initCheckboxAll","ajaxError","request","responseJSON","toastr","ajaxStart","ajaxComplete","menuActive","$check","is_all","checked","$allCheck","MASK2","modal2","backdrop","Dropdown","getParent","clearMenus","relatedTarget","contains","Event","isDefaultPrevented","VERSION","isActive","toggleClass","$items","old","dropdown","noConflict","defaultCss","defaultOption","modalCallback","modalSendData","sendData","modalCss","modalAlign","maximize","MODAL2","keyCheck","existCheck","brd_key","is_raw","form","bca_parent","post_count","bmt_idx","faq","fac_idx","faq_idx","category","exist","total_count","POP_INFO_ADMIN","mem_idx","POP_PASSWORD_ADMIN","POP_MODIFY_ADMIN","POP_POINT_ADMIN","POP_POINT_FORM_ADMIN","STATUS_CHANGE","current_status","change_status","common_msg_invalid_access","change_status_msg","member_status_y","member_status_n","member_status_d","member_status_h"],"mappings":"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","sourcesContent":["/*!\n * clipboard.js v2.0.1\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(6);\nvar delegate = __webpack_require__(5);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(4);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ })\n/******/ ]);\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 if (typeof define === 'function' && define.amd) {\r\n // AMD (Register as an anonymous module)\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n\r\n var pluses = /\\+/g;\r\n\r\n function encode(s) {\r\n return config.raw ? s : encodeURIComponent(s);\r\n }\r\n\r\n function decode(s) {\r\n return config.raw ? s : decodeURIComponent(s);\r\n }\r\n\r\n function stringifyCookieValue(value) {\r\n return encode(config.json ? JSON.stringify(value) : String(value));\r\n }\r\n\r\n function parseCookieValue(s) {\r\n if (s.indexOf('\"') === 0) {\r\n // This is a quoted cookie as according to RFC2068, unescape...\r\n s = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\r\n }\r\n\r\n try {\r\n // Replace server-side written pluses with spaces.\r\n // If we can't decode the cookie, ignore it, it's unusable.\r\n // If we can't parse the cookie, ignore it, it's unusable.\r\n s = decodeURIComponent(s.replace(pluses, ' '));\r\n return config.json ? JSON.parse(s) : s;\r\n } catch(e) {}\r\n }\r\n\r\n function read(s, converter) {\r\n var value = config.raw ? s : parseCookieValue(s);\r\n return $.isFunction(converter) ? converter(value) : value;\r\n }\r\n\r\n var config = $.cookie = function (key, value, options) {\r\n\r\n // Write\r\n\r\n if (arguments.length > 1 && !$.isFunction(value)) {\r\n options = $.extend({}, config.defaults, options);\r\n\r\n if (typeof options.expires === 'number') {\r\n var days = options.expires, t = options.expires = new Date();\r\n t.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n }\r\n\r\n return (document.cookie = [\r\n encode(key), '=', stringifyCookieValue(value),\r\n options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n options.path ? '; path=' + options.path : '',\r\n options.domain ? '; domain=' + options.domain : '',\r\n options.secure ? '; secure' : ''\r\n ].join(''));\r\n }\r\n\r\n // Read\r\n\r\n var result = key ? undefined : {},\r\n // To prevent the for loop in the first place assign an empty array\r\n // in case there are no cookies at all. Also prevents odd result when\r\n // calling $.cookie().\r\n cookies = document.cookie ? document.cookie.split('; ') : [],\r\n i = 0,\r\n l = cookies.length;\r\n\r\n for (; i < l; i++) {\r\n var parts = cookies[i].split('='),\r\n name = decode(parts.shift()),\r\n cookie = parts.join('=');\r\n\r\n if (key === name) {\r\n // If second argument (value) is a function it's a converter...\r\n result = read(cookie, value);\r\n break;\r\n }\r\n\r\n // Prevent storing a cookie that we couldn't decode.\r\n if (!key && (cookie = read(cookie)) !== undefined) {\r\n result[name] = cookie;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n config.defaults = {};\r\n\r\n $.removeCookie = function (key, options) {\r\n // Must not alter options, thus extending a fresh object...\r\n $.cookie(key, '', $.extend({}, options, { expires: -1 }));\r\n return !$.cookie(key);\r\n };\r\n\r\n}));","/***********************************************************************************\r\n * IE 8 이하 브라우져 console.log 에러처리\r\n ***********************************************************************************/\r\nif(!window.console || !window.console.log) {window.console = {log : function(){}};}\r\n\r\nvar APP = {};\r\nAPP.POPUP = null;\r\nAPP.REGEX = {};\r\nAPP.REGEX.uniqueID = /^[a-z][a-z0-9_]{2,19}$/g;\r\n(function($) {\r\n APP.POPUP = function(option) {\r\n var defaults={\r\n title : '_blank',\r\n width : 800,\r\n height : 600,\r\n url : ''\r\n };\r\n\r\n var options = $.extend({}, defaults, option);\r\n\r\n cw = screen.availWidth;\r\n ch = screen.availHeight;\r\n sw = options.width;\r\n sh = options.height;\r\n\r\n ml = (cw - sw) / 2;\r\n mt = (ch - sh) / 2;\r\n var option = 'width='+sw+',height='+sh+',top='+mt+',left='+ml+',scrollbars=yes,resizable=no';\r\n var win = window.open(options.url, options.title, option);\r\n if (win == null || typeof(win) == \"undefined\" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0))\r\n {\r\n alert(\"팝업 차단 기능이 설정되어있습니다\\n\\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오.\");\r\n return;\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * 언어셋 변경\r\n * @param lang\r\n * @constructor\r\n */\r\nAPP.SET_LANG = function(lang)\r\n{\r\n $.cookie('site_lang', lang, {expires:30, path:'/'});\r\n location.reload();\r\n};\r\n\r\n/**\r\n * 팝업창 닫기버튼 init\r\n */\r\n$('[data-toggle=\"btn-popup-close\"]').click(function(e){\r\n var type = $(this).data('type');\r\n var idx = $(this).data('idx');\r\n var cookie = $(this).data('cookie');\r\n\r\n if( type == 'Y')\r\n {\r\n window.close();\r\n }\r\n else if( type == 'N' )\r\n {\r\n $(\"#popup-\" + idx ).remove();\r\n }\r\n\r\n if( cookie == 1 )\r\n {\r\n $.cookie('popup_'+idx, 1, {expires:1, path:'/'});\r\n }\r\n});\r\n\r\n/**\r\n * SNS 공유\r\n */\r\n$(\"a[data-toggle='sns-share']\").not('[data-service=\"link\"]').click(function(e){\r\n e.preventDefault();\r\n\r\n var _this = $(this);\r\n var sns_type = _this.data('service');\r\n var href = _this.data('url');\r\n var title = _this.data('title');\r\n var loc = \"\";\r\n var img = $(\"meta[name='og:image']\").attr('content');\r\n\r\n if( ! sns_type || !href || !title) return;\r\n\r\n if( sns_type == 'facebook' ) {\r\n loc = '//www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'twitter' ) {\r\n loc = '//twitter.com/home?status='+encodeURIComponent(title)+' '+href;\r\n }\r\n else if ( sns_type == 'google' ) {\r\n loc = '//plus.google.com/share?url='+href;\r\n }\r\n else if ( sns_type == 'pinterest' ) {\r\n\r\n loc = '//www.pinterest.com/pin/create/button/?url='+href+'&media='+img+'&description='+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'kakaostory') {\r\n loc = 'https://story.kakao.com/share?url='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'band' ) {\r\n loc = 'http://www.band.us/plugin/share?body='+encodeURIComponent(title)+'%0A'+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'naver' ) {\r\n loc = \"http://share.naver.com/web/shareView.nhn?url=\"+encodeURIComponent(href)+\"&title=\"+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'line') {\r\n loc = \"http://line.me/R/msg/text/?\" + encodeURIComponent(title + \"\\n\" + href);\r\n }\r\n else {\r\n return false;\r\n }\r\n APP.POPUP({ url : loc});\r\n return false;\r\n});\r\n\r\n$(function(){\r\n var clipboard = new ClipboardJS('a[data-toggle=\"sns-share\"][data-service=\"link\"]', {\r\n text: function(trigger) {\r\n return trigger.getAttribute('data-url');\r\n }\r\n });\r\n clipboard.on('success', function(){\r\n alert('현재 URL이 복사되었습니다.');\r\n });\r\n});","/**********************************************************************************************************************\r\n * 회원정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_INFO_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/info/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 비밀번호 변경 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_PASSWORD_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '비밀번호 변경'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/password/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 정보수정 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_MODIFY_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보 수정'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/modify/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 포인트 관리'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 추가 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_FORM_ADMIN = function(mem_idx) {\r\n var mem_idx = typeof mem_idx != 'undefined' && mem_idx ? mem_idx : null;\r\n if(! mem_idx) {\r\n alert('잘못된 접근입니다.');\r\n return;\r\n }\r\n\r\n APP.MODAL2.callback = function(){\r\n location.reload();\r\n };\r\n APP.MODAL2.open({\r\n width: 410,\r\n height :200,\r\n header : {\r\n title : '회원 포인트 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point_form/' + mem_idx\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 STATUS 변경\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.STATUS_CHANGE = function(mem_idx, current_status, change_status) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx || typeof current_status == 'undefined' || ! current_status || typeof change_status == 'undefined' || ! change_status ) {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n var change_status_msg = '';\r\n if( change_status == 'Y' ) change_status_msg = LANG.member_status_y;\r\n else if (change_status == 'N') change_status_msg = LANG.member_status_n;\r\n else if (change_status == 'D') change_status_msg = LANG.member_status_d;\r\n else if (change_status == 'H') change_status_msg = LANG.member_status_h;\r\n else {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n\r\n if( ! confirm('해당 회원의 상태를 [' + change_status_msg + '] 상태로 변경합니까?') ) return;\r\n $.ajax({\r\n url : '/ajax/members/status',\r\n type : 'POST',\r\n async : false,\r\n cache : false,\r\n data : {\r\n mem_idx : mem_idx,\r\n current_status : current_status,\r\n change_status : change_status\r\n },\r\n success:function(){\r\n alert('지정한 회원의 상태를 [' + change_status_msg + '] 상태로 변경하였습니다.');\r\n location.reload();\r\n }\r\n })\r\n};\r\n\r\n$(function(){\r\n\r\n});\r\n","APP.BOARD.keyCheck = function(value) {\r\n if (value == '') return \"게시판 고유키를 입력하세요\";\r\n if (!APP.REGEX.uniqueID.test(value)) return \"게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다.\";\r\n if (APP.BOARD.existCheck(value)) return \"이미 존재하는 키 입니다.\";\r\n\r\n return true;\r\n};\r\n\r\nAPP.BOARD.existCheck = function(brd_key) {\r\n var info = null;\r\n $.ajax({\r\n url : base_url + '/ajax/board/info',\r\n type : 'get',\r\n async : false,\r\n cache : false,\r\n data : {\r\n brd_key : brd_key,\r\n is_raw : true\r\n },\r\n success:function(res){\r\n info = res;\r\n }\r\n });\r\n return info;\r\n};\r\n\r\nAPP.BOARD.CATEGORY.form = function(brd_key, bca_parent, bca_idx) {\r\n var brd_key = typeof brd_key != 'undefined' && brd_key ? brd_key : null;\r\n var bca_parent = typeof bca_parent != 'undefined' && bca_parent >= 0 ? bca_parent : null;\r\n var bca_idx = typeof bca_idx != 'undefined' && bca_idx ? bca_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n if(parseInt(bca_parent) < 0)\r\n {\r\n alert('부모 카테고리가 선택되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bca_idx ? '카테고리 정보 수정' : '카테고리 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/category_form',\r\n param : {\r\n brd_key : brd_key,\r\n bca_parent : bca_parent,\r\n bca_idx : bca_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.CATEGORY.remove = function(bca_idx) {\r\n \r\n if( APP.BOARD.CATEGORY.count(bca_idx) > 0 )\r\n {\r\n alert('해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요');\r\n return false;\r\n }\r\n\r\n var post_count = APP.BOARD.CATEGORY.postCount(bca_idx);\r\n if( post_count > 0 )\r\n {\r\n if(! confirm('해당 카테고리에 등록된 글이 '+post_count+'건이 있습니다. 삭제를 진행하시겠습니까?' )) {\r\n return false;\r\n }\r\n }\r\n\r\n if(! confirm('해당 카테고리를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/category\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n bca_idx : bca_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('카테고리 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('카테고리 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\nAPP.BOARD.EXTRA.form = function(brd_key, bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bmt_idx ? '입력필드 수정' : '입력필드 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/extra_form',\r\n param : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.EXTRA.remove = function(brd_key,bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! bmt_idx )\r\n {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n if(! confirm('해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/extra\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('입력필드 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('입력필드 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\n\r\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function () {\n 'use strict';\n\n // root of function\n\n var root = this,\n win = this,\n doc = win ? win.document : null,\n docElem = win ? win.document.documentElement : null,\n reIsJson = /^([\"'](\\\\.|[^\"\\\\\\n\\r])*?[\"']|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$/,\n reMs = /^-ms-/,\n reSnakeCase = /[\\-_]([\\da-z])/gi,\n reCamelCase = /([A-Z])/g,\n reDot = /\\./,\n reInt = /[-|+]?[\\D]/gi,\n reNotNum = /\\D/gi,\n reMoneySplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n reAmp = /&/g,\n reEq = /=/,\n reClassNameSplit = /[ ]+/g,\n\n\n /** @namespace {Object} ax5 */\n ax5 = {},\n info = void 0,\n U = void 0,\n dom = void 0;\n\n /**\n * guid\n * @member {Number} ax5.guid\n */\n ax5.guid = 1;\n /**\n * ax5.guid를 구하고 증가시킵니다.\n * @method ax5.getGuid\n * @returns {Number} guid\n */\n ax5.getGuid = function () {\n return ax5.guid++;\n };\n\n /**\n * 상수모음\n * @namespace ax5.info\n */\n ax5.info = info = function () {\n var _arguments = arguments;\n\n /**\n * ax5 version\n * @member {String} ax5.info.version\n */\n var version = \"1.4.126\";\n\n /**\n * ax5 library path\n * @member {String} ax5.info.baseUrl\n */\n var baseUrl = \"\";\n\n /**\n * ax5 에러 출력메세지 사용자 재 정의\n * @member {Object} ax5.info.onerror\n * @examples\n * ```\n * ax5.info.onerror = function(){\n * console.log(arguments);\n * }\n * ```\n */\n var onerror = function onerror() {\n console.error(U.toArray(_arguments).join(\":\"));\n };\n\n /**\n * event keyCodes\n * @member {Object} ax5.info.eventKeys\n * @example\n * ```\n * {\n * \tBACKSPACE: 8, TAB: 9,\n * \tRETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n * \tHOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n * }\n * ```\n */\n var eventKeys = {\n BACKSPACE: 8, TAB: 9,\n RETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n HOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n };\n\n /**\n * week names\n * @member {Object[]} weekNames\n * @member {string} weekNames[].label\n *\n * @example\n * ```\n * [\n * {label: \"SUN\"},{label: \"MON\"},{label: \"TUE\"},{label: \"WED\"},{label: \"THU\"},{label: \"FRI\"},{label: \"SAT\"}\n * ]\n * console.log( weekNames[0] );\n * console.log( ax5.info.weekNames[(new Date()).getDay()].label )\n * ```\n */\n var weekNames = [{ label: \"SUN\" }, { label: \"MON\" }, { label: \"TUE\" }, { label: \"WED\" }, { label: \"THU\" }, { label: \"FRI\" }, { label: \"SAT\" }];\n\n /**\n * 사용자 브라우저 식별용 오브젝트\n * @member {Object} ax5.info.browser\n * @example\n * ```\n * console.log( ax5.info.browser );\n * //Object {name: \"chrome\", version: \"39.0.2171.71\", mobile: false}\n * ```\n */\n var browser = function (ua, mobile, browserName, match, browser, browserVersion) {\n if (!win || !win.navigator) return {};\n\n ua = navigator.userAgent.toLowerCase(), mobile = ua.search(/mobile/g) != -1, browserName, match, browser, browserVersion;\n\n if (ua.search(/iphone/g) != -1) {\n return { name: \"iphone\", version: 0, mobile: true };\n } else if (ua.search(/ipad/g) != -1) {\n return { name: \"ipad\", version: 0, mobile: true };\n } else if (ua.search(/android/g) != -1) {\n match = /(android)[ \\/]([\\w.]+)/.exec(ua) || [];\n browserVersion = match[2] || \"0\";\n return { name: \"android\", version: browserVersion, mobile: mobile };\n } else {\n browserName = \"\";\n match = /(opr)[ \\/]([\\w.]+)/.exec(ua) || /(chrome)[ \\/]([\\w.]+)/.exec(ua) || /(webkit)[ \\/]([\\w.]+)/.exec(ua) || /(msie) ([\\w.]+)/.exec(ua) || ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) || [];\n browser = match[1] || \"\";\n browserVersion = match[2] || \"0\";\n\n if (browser == \"msie\") browser = \"ie\";\n return {\n name: browser,\n version: browserVersion,\n mobile: mobile\n };\n }\n ua = null, mobile = null, browserName = null, match = null, browser = null, browserVersion = null;\n }();\n\n /**\n * 브라우저 여부\n * @member {Boolean} ax5.info.isBrowser\n */\n var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && win.document);\n\n /**\n * 브라우저에 따른 마우스 휠 이벤트이름\n * @member {Object} ax5.info.wheelEnm\n */\n var wheelEnm = win && /Firefox/i.test(navigator.userAgent) ? \"DOMMouseScroll\" : \"mousewheel\";\n\n /**\n * 첫번째 자리수 동사 - (필요한것이 없을때 : 4, 실행오류 : 5)\n * 두번째 자리수 목적어 - 문자열 0, 숫자 1, 배열 2, 오브젝트 3, 함수 4, DOM 5, 파일 6, 기타 7\n * 세번째 자리수 옵션\n * @member {Object} ax5.info.errorMsg\n */\n var errorMsg = {};\n\n /**\n * 현재 페이지의 Url 정보를 리턴합니다.\n * @method ax5.info.urlUtil\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.util.toJson( ax5.info.urlUtil() ) );\n * {\n *\t\"baseUrl\": \"http://ax5:2018\",\n *\t\"href\": \"http://ax5:2018/samples/index.html?a=1&b=1#abc\",\n *\t\"param\": \"a=1&b=1\",\n *\t\"referrer\": \"\",\n *\t\"pathname\": \"/samples/index.html\",\n *\t\"hostname\": \"ax5\",\n *\t\"port\": \"2018\",\n *\t\"url\": \"http://ax5:2018/samples/index.html\",\n *\t\"hashdata\": \"abc\"\n * }\n * ```\n */\n function urlUtil(url, urls) {\n url = {\n href: win.location.href,\n param: win.location.search,\n referrer: doc.referrer,\n pathname: win.location.pathname,\n hostname: win.location.hostname,\n port: win.location.port\n }, urls = url.href.split(/[\\?#]/);\n url.param = url.param.replace(\"?\", \"\");\n url.url = urls[0];\n if (url.href.search(\"#\") > -1) {\n url.hashdata = U.last(urls);\n }\n urls = null;\n url.baseUrl = U.left(url.href, \"?\").replace(url.pathname, \"\");\n return url;\n }\n\n /**\n * ax5-error-msg.js 에 정의된 ax5 error를 반환합니다.\n * @method ax5.info.getError\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.info.getError(\"single-uploader\", \"460\", \"upload\") );\n *\n * if(!this.selectedFile){\n * if (cfg.onEvent) {\n * \tvar that = {\n * \t\taction: \"error\",\n * \t\terror: ax5.info.getError(\"single-uploader\", \"460\", \"upload\")\n * \t};\n * \tcfg.onEvent.call(that, that);\n * }\n * return this;\n * }\n * ```\n */\n function getError(className, errorCode, methodName) {\n if (info.errorMsg && info.errorMsg[className]) {\n return {\n className: className,\n errorCode: errorCode,\n methodName: methodName,\n msg: info.errorMsg[className][errorCode]\n };\n } else {\n return { className: className, errorCode: errorCode, methodName: methodName };\n }\n }\n\n /**\n * 브라우져의 터치 기능 유무를 확인합니다.\n * @method ax5.info.supportTouch\n * @returns {boolean}\n * @example\n * ```\n * var chkFlag = ax5.info.supportTouch;\n */\n var supportTouch = win ? 'ontouchstart' in win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 : false;\n\n var supportFileApi = win ? win.FileReader && win.File && win.FileList && win.Blob : false;\n\n return {\n errorMsg: errorMsg,\n version: version,\n baseUrl: baseUrl,\n onerror: onerror,\n eventKeys: eventKeys,\n weekNames: weekNames,\n browser: browser,\n isBrowser: isBrowser,\n supportTouch: supportTouch,\n supportFileApi: supportFileApi,\n wheelEnm: wheelEnm,\n urlUtil: urlUtil,\n getError: getError\n };\n }();\n\n /**\n * Refer to this by {@link ax5}.\n * @namespace ax5.util\n */\n ax5['util'] = U = function () {\n var _toString = Object.prototype.toString;\n\n /**\n * Object나 Array의 아이템으로 사용자 함수를 호출합니다.\n * @method ax5.util.each\n * @param {Object|Array} O\n * @param {Function} _fn\n * @example\n * ```js\n * var axf = ax5.util;\n * axf.each([0,1,2], function(){\n * \t// with this\n * });\n * axf.each({a:1, b:2}, function(){\n * \t// with this\n * });\n * ```\n */\n function each(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n isObj = l === undefined || typeof O === \"function\";\n if (isObj) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") if (_fn.call(O[key], key, O[key]) === false) break;\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") if (_fn.call(O[i], i, O[i++]) === false) break;\n }\n }\n return O;\n }\n\n // In addition to using the http://underscorejs.org : map, reduce, reduceRight, find\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값으로 이루어진 새로운 배열을 만듭니다.\n * @method ax5.util.map\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4];\n * var myObject = {a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n *\n * var _arr = ax5.util.map( myArray, function(index, I){\n * return index+1;\n * });\n * console.log(_arr);\n * // [1, 2, 3, 4, 5]\n *\n * var _arr = ax5.util.map( myObject, function(k, v){\n * return v * 2;\n * });\n * console.log(_arr);\n * // [2, 4, NaN, NaN]\n * ```\n */\n function map(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n results = [],\n fnResult = void 0;\n if (isObject(O)) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[key], key, O[key])) === false) break;else results.push(fnResult);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[i], i, O[i++])) === false) break;else results.push(fnResult);\n }\n }\n }\n return results;\n }\n\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값이 참인 아이템의 위치나 키값을 반환합니다.\n * @method ax5.util.search\n * @param {Object|Array} O\n * @param {Function|String|Number} _fn - 함수 또는 값\n * @returns {Number|String}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4,5,6];\n * var myObject = {a:\"123\",\"b\":\"123\",c:123};\n *\n * ax5.util.search(myArray, function(){\n * return this > 3;\n * });\n * // 4\n * ax5.util.search(myObject, function(k, v){\n * return v === 123;\n * });\n * // \"c\"\n * ax5.util.search([1,2,3,4], 3);\n * // 2\n * ax5.util.search([1,2], 4);\n * // -1\n * ax5.util.search([\"name\",\"value\"], \"value\");\n * // 1\n * ax5.util.search([\"name\",\"value\"], \"values\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value2\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value\");\n * // \"k2\"\n * ```\n */\n function search(O, _fn) {\n if (isNothing(O)) return -1;\n if (isObject(O)) {\n for (var key in O) {\n if (typeof O[key] != \"undefined\" && isFunction(_fn) && _fn.call(O[key], key, O[key])) {\n return key;\n break;\n } else if (O[key] == _fn) {\n return key;\n break;\n }\n }\n } else {\n for (var i = 0, l = O.length; i < l; i++) {\n if (typeof O[i] != \"undefined\" && isFunction(_fn) && _fn.call(O[i], i, O[i])) {\n return i;\n break;\n } else if (O[i] == _fn) {\n return i;\n break;\n }\n }\n }\n return -1;\n }\n\n /**\n * @method ax5.util.sum\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.sum(arr, function () {\n * if(this.name == \"122\") {\n * return this.value;\n * }\n * });\n * console.log(rs); // 19\n *\n * console.log(ax5.util.sum(arr, 10, function () {\n * return this.value;\n * }));\n * // 40\n * ```\n */\n function sum(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * @method ax5.util.avg\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.avg(arr, function () {\n * return this.value;\n * });\n *\n * console.log(rs); // 10\n * ```\n */\n function avg(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue / l;\n } else if (isObject(O)) {\n l = 0;\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;++l;\n }\n }\n return defaultValue / l;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * 배열의 왼쪽에서 오른쪽으로 연산을 진행하는데 수행한 결과가 왼쪽 값으로 반영되어 최종 왼쪽 값을 반환합니다.\n * @method ax5.util.reduce\n * @param {Array|Object} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduce( aarray, function(p, n){\n * return p * n;\n * });\n * console.log(result, aarray);\n * // 120 [5, 4, 3, 2, 1]\n *\n * ax5.util.reduce({a:1, b:2}, function(p, n){\n * return parseInt(p|0) + parseInt(n);\n * });\n * // 3\n * ```\n */\n function reduce(O, _fn) {\n var i, l, tokenItem;\n if (isArray(O)) {\n i = 0, l = O.length, tokenItem = O[i];\n for (; i < l - 1;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[++i])) === false) break;\n }\n }\n return tokenItem;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[i])) === false) break;\n }\n }\n return tokenItem;\n } else {\n console.error(\"argument error : ax5.util.reduce - use Array or Object\");\n return null;\n }\n }\n\n /**\n * 배열의 오른쪽에서 왼쪽으로 연산을 진행하는데 수행한 결과가 오른쪽 값으로 반영되어 최종 오른쪽 값을 반환합니다.\n * @method ax5.util.reduceRight\n * @param {Array} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduceRight( aarray, function(p, n){\n * console.log( n );\n * return p * n;\n * });\n * console.log(result, aarray);\n * 120 [5, 4, 3, 2, 1]\n * ```\n */\n function reduceRight(O, _fn) {\n var i = O.length - 1,\n tokenItem = O[i];\n for (; i > 0;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[--i])) === false) break;\n }\n }\n return tokenItem;\n }\n\n /**\n * 배열또는 오브젝트의 각 아이템을 인자로 하는 사용자 함수의 결과가 참인 아이템들의 배열을 반환합니다.\n * @method ax5.util.filter\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.filter( aarray, function(){\n * return this % 2;\n * });\n * console.log(result);\n * // [5, 3, 1]\n *\n * var filObject = {a:1, s:\"string\", oa:{pickup:true, name:\"AXISJ\"}, os:{pickup:true, name:\"AX5\"}};\n * result = ax5.util.filter( filObject, function(){\n * \treturn this.pickup;\n * });\n * console.log( ax5.util.toJson(result) );\n * // [{\"pickup\": , \"name\": \"AXISJ\"}, {\"pickup\": , \"name\": \"AX5\"}]\n * ```\n */\n function filter(O, _fn) {\n if (isNothing(O)) return [];\n var k,\n i = 0,\n l = O.length,\n results = [],\n fnResult;\n if (isObject(O)) {\n for (k in O) {\n if (typeof O[k] != \"undefined\") {\n if (fnResult = _fn.call(O[k], k, O[k])) results.push(O[k]);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n if (fnResult = _fn.call(O[i], i, O[i])) results.push(O[i]);\n i++;\n }\n }\n }\n return results;\n }\n\n /**\n * Object를 JSONString 으로 반환합니다.\n * @method ax5.util.toJson\n * @param {Object|Array} O\n * @returns {String} JSON\n * @example\n * ```js\n * var ax = ax5.util;\n * var myObject = {\n * a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n * console.log( ax.toJson(myObject) );\n * ```\n */\n function toJson(O) {\n var jsonString = \"\";\n if (ax5.util.isArray(O)) {\n var i = 0,\n l = O.length;\n jsonString += \"[\";\n for (; i < l; i++) {\n if (i > 0) jsonString += \",\";\n jsonString += toJson(O[i]);\n }\n jsonString += \"]\";\n } else if (ax5.util.isObject(O)) {\n jsonString += \"{\";\n var jsonObjectBody = [];\n each(O, function (key, value) {\n jsonObjectBody.push('\"' + key + '\": ' + toJson(value));\n });\n jsonString += jsonObjectBody.join(\", \");\n jsonString += \"}\";\n } else if (ax5.util.isString(O)) {\n jsonString = '\"' + O + '\"';\n } else if (ax5.util.isNumber(O)) {\n jsonString = O;\n } else if (ax5.util.isUndefined(O)) {\n jsonString = \"undefined\";\n } else if (ax5.util.isFunction(O)) {\n jsonString = '\"{Function}\"';\n } else {\n jsonString = O;\n }\n return jsonString;\n }\n\n /**\n * 관용의 JSON Parser\n * @method ax5.util.parseJson\n * @param {String} JSONString\n * @param {Boolean} [force] - 강제 적용 여부 (json 문자열 검사를 무시하고 오브젝트 변환을 시도합니다.)\n * @returns {Object}\n * @example\n * ```\n * console.log(ax5.util.parseJson('{\"a\":1}'));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':'b'}\"));\n * // Object {a: 1, b: \"b\"}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':function(){return 1;}}\", true));\n * // Object {a: 1, b: function}\n * console.log(ax5.util.parseJson(\"{a:1}\"));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"[1,2,3]\"));\n * // [1, 2, 3]\n * console.log(ax5.util.parseJson(\"['1','2','3']\"));\n * // [\"1\", \"2\", \"3\"]\n * console.log(ax5.util.parseJson(\"[{'a':'99'},'2','3']\"));\n * // [Object, \"2\", \"3\"]\n * ```\n */\n function parseJson(str, force) {\n if (force || reIsJson.test(str)) {\n try {\n return new Function('', 'return ' + str)();\n } catch (e) {\n return { error: 500, msg: 'syntax error' };\n }\n } else {\n return { error: 500, msg: 'syntax error' };\n }\n }\n\n /**\n * 인자의 타입을 반환합니다.\n * @method ax5.util.getType\n * @param {Object|Array|String|Number|Element|Etc} O\n * @returns {String} window|element|object|array|function|string|number|undefined|nodelist\n * @example\n * ```js\n * var axf = ax5.util;\n * var a = 11;\n * var b = \"11\";\n * console.log( axf.getType(a) );\n * console.log( axf.getType(b) );\n * ```\n */\n function getType(O) {\n var typeName;\n if (O != null && O == O.window) {\n typeName = \"window\";\n } else if (!!(O && O.nodeType == 1)) {\n typeName = \"element\";\n } else if (!!(O && O.nodeType == 11)) {\n typeName = \"fragment\";\n } else if (O === null) {\n typeName = \"null\";\n } else if (typeof O === \"undefined\") {\n typeName = \"undefined\";\n } else if (_toString.call(O) == \"[object Object]\") {\n typeName = \"object\";\n } else if (_toString.call(O) == \"[object Array]\") {\n typeName = \"array\";\n } else if (_toString.call(O) == \"[object String]\") {\n typeName = \"string\";\n } else if (_toString.call(O) == \"[object Number]\") {\n typeName = \"number\";\n } else if (_toString.call(O) == \"[object NodeList]\") {\n typeName = \"nodelist\";\n } else if (typeof O === \"function\") {\n typeName = \"function\";\n }\n return typeName;\n }\n\n /**\n * 오브젝트가 window 인지 판단합니다.\n * @method ax5.util.isWindow\n * @param {Object} O\n * @returns {Boolean}\n */\n function isWindow(O) {\n return O != null && O == O.window;\n }\n\n /**\n * 오브젝트가 HTML 엘리먼트여부인지 판단합니다.\n * @method ax5.util.isElement\n * @param {Object} O\n * @returns {Boolean}\n */\n function isElement(O) {\n return !!(O && (O.nodeType == 1 || O.nodeType == 11));\n }\n\n /**\n * 오브젝트가 Object인지 판단합니다.\n * @method ax5.util.isObject\n * @param {Object} O\n * @returns {Boolean}\n */\n function isObject(O) {\n return _toString.call(O) == \"[object Object]\";\n }\n\n /**\n * 오브젝트가 Array인지 판단합니다.\n * @method ax5.util.isArray\n * @param {Object} O\n * @returns {Boolean}\n */\n function isArray(O) {\n return _toString.call(O) == \"[object Array]\";\n }\n\n /**\n * 오브젝트가 Function인지 판단합니다.\n * @method ax5.util.isFunction\n * @param {Object} O\n * @returns {Boolean}\n */\n function isFunction(O) {\n return typeof O === \"function\";\n }\n\n /**\n * 오브젝트가 String인지 판단합니다.\n * @method ax5.util.isString\n * @param {Object} O\n * @returns {Boolean}\n */\n function isString(O) {\n return _toString.call(O) == \"[object String]\";\n }\n\n /**\n * 오브젝트가 Number인지 판단합니다.\n * @method ax5.util.isNumber\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNumber(O) {\n return _toString.call(O) == \"[object Number]\";\n }\n\n /**\n * 오브젝트가 NodeList인지 판단합니다.\n * @method ax5.util.isNodelist\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNodelist(O) {\n return !!(_toString.call(O) == \"[object NodeList]\" || typeof O !== \"undefined\" && O && O[0] && O[0].nodeType == 1);\n }\n\n /**\n * 오브젝트가 undefined인지 판단합니다.\n * @method ax5.util.isUndefined\n * @param {Object} O\n * @returns {Boolean}\n */\n function isUndefined(O) {\n return typeof O === \"undefined\";\n }\n\n /**\n * 오브젝트가 undefined이거나 null이거나 빈값인지 판단합니다.\n * @method ax5.util.isNothing\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNothing(O) {\n return typeof O === \"undefined\" || O === null || O === \"\";\n }\n\n /**\n * 오브젝트가 날자값인지 판단합니다.\n * @method ax5.util.isDate\n * @param {Date} O\n * @returns {Boolean}\n * @example\n * ```js\n * ax5.util.isDate('2016-09-30');\n * // false\n * ax5.util.isDate( new Date('2016-09-30') );\n * // true\n * ```\n */\n function isDate(O) {\n return O instanceof Date && !isNaN(O.valueOf());\n }\n\n function isDateFormat(O) {\n var result = false;\n if (!O) {} else if (O instanceof Date && !isNaN(O.valueOf())) {\n result = true;\n } else {\n if (O.length > 7) {\n if (date(O) instanceof Date) {\n return true;\n }\n }\n O = O.replace(/\\D/g, '');\n if (O.length > 7) {\n var mm = O.substr(4, 2),\n dd = O.substr(6, 2);\n O = date(O);\n if (O.getMonth() == mm - 1 && O.getDate() == dd) {\n result = true;\n }\n }\n }\n return result;\n }\n\n /**\n * 오브젝트의 첫번째 아이템을 반환합니다.\n * @method ax5.util.first\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.first({a:1, b:2});\n * // Object {a: 1}\n * ax5.util.first([1,2,3,4]);\n * // 1\n * ```\n */\n function first(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[0]] = O[keys[0]];\n return item;\n } else if (isArray(O)) {\n return O[0];\n } else {\n console.error(\"ax5.util.object.first\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 오브젝트의 마지막 아이템을 반환합니다.\n * @method ax5.util.last\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.last({a:1, b:2});\n * // Object {b: 2}\n * ax5.util.last([1,2,3,4]);\n * // 4\n * ```\n */\n function last(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[keys.length - 1]] = O[keys[keys.length - 1]];\n return item;\n } else if (isArray(O)) {\n return O[O.length - 1];\n } else {\n console.error(\"ax5.util.object.last\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 쿠키를 설정합니다.\n * @method ax5.util.setCookie\n * @param {String} cname - 쿠키이름\n * @param {String} cvalue - 쿠키값\n * @param {Number} [exdays] - 쿠키 유지일수\n * @param {Object} [opts] - path, domain 설정 옵션\n * @example\n * ```js\n * ax5.util.setCookie(\"jslib\", \"AX5\");\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3);\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3, {path:\"/\", domain:\".axisj.com\"});\n * ```\n */\n function setCookie(cn, cv, exdays, opts) {\n var expire;\n if (typeof exdays === \"number\") {\n expire = new Date();\n expire.setDate(expire.getDate() + exdays);\n }\n opts = opts || {};\n return doc.cookie = [escape(cn), '=', escape(cv), expire ? \"; expires=\" + expire.toUTCString() : \"\", // use expires attribute, max-age is not supported by IE\n opts.path ? \"; path=\" + opts.path : \"\", opts.domain ? \"; domain=\" + opts.domain : \"\", opts.secure ? \"; secure\" : \"\"].join(\"\");\n }\n\n /**\n * 쿠키를 가져옵니다.\n * @method ax5.util.getCookie\n * @param {String} cname\n * @returns {String} cookie value\n * @example\n * ```js\n * ax5.util.getCookie(\"jslib\");\n * ```\n */\n function getCookie(cname) {\n var name = cname + \"=\";\n var ca = doc.cookie.split(';'),\n i = 0,\n l = ca.length;\n for (; i < l; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }if (c.indexOf(name) != -1) return unescape(c.substring(name.length, c.length));\n }\n return \"\";\n }\n\n /**\n * jsonString 으로 alert 합니다.\n * @method ax5.util.alert\n * @param {Object|Array|String|Number} O\n * @returns {Object|Array|String|Number} O\n * @example ```js\n * ax5.util.alert({a:1,b:2});\n * ax5.util.alert(\"정말?\");\n * ```\n */\n function alert(O) {\n win.alert(toJson(O));\n return O;\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.left\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.left(\"abcd.efd\", 3);\n * // abc\n * ax5.util.left(\"abcd.efd\", \".\");\n * // abcd\n * ```\n */\n function left(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n if (isString(pos)) {\n return str.indexOf(pos) > -1 ? str.substr(0, str.indexOf(pos)) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(0, pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.right\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.right(\"abcd.efd\", 3);\n * // efd\n * ax5.util.right(\"abcd.efd\", \".\");\n * // efd\n * ```\n */\n function right(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n str = '' + str;\n if (isString(pos)) {\n return str.lastIndexOf(pos) > -1 ? str.substr(str.lastIndexOf(pos) + 1) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(str.length - pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * css형 문자열이나 특수문자가 포함된 문자열을 카멜케이스로 바꾸어 반환합니다.\n * @method ax5.util.camelCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.camelCase(\"inner-width\");\n * ax5.util.camelCase(\"innerWidth\");\n * // innerWidth\n * ```\n */\n function camelCase(str) {\n return str.replace(reMs, \"ms-\").replace(reSnakeCase, function (all, letter) {\n return letter.toUpperCase();\n });\n }\n\n /**\n * css형 문자열이나 카멜케이스문자열을 스네이크 케이스 문자열로 바꾸어 반환합니다.\n * @method ax5.util.snakeCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.snakeCase(\"innerWidth\");\n * ax5.util.snakeCase(\"inner-Width\");\n * ax5.util.snakeCase(\"innerWidth\");\n * // inner-width\n * ```\n */\n function snakeCase(str) {\n return camelCase(str).replace(reCamelCase, function (all, letter) {\n return \"-\" + letter.toLowerCase();\n });\n }\n\n /**\n * 문자열에서 -. 을 제외한 모든 문자열을 제거하고 숫자로 반환합니다. 옵션에 따라 원하는 형식의 숫자로 변환 할 수 도 있습니다.\n * @method ax5.util.number\n * @param {String|Number} str\n * @param {Object} cond - 옵션\n * @returns {String|Number}\n * @example\n * ```js\n * var cond = {\n * \tround: {Number|Boolean} - 반올림할 자릿수,\n * \tmoney: {Boolean} - 통화,\n * \tabs: {Boolean} - 절대값,\n * \tbyte: {Boolean} - 바이트\n * }\n *\n * console.log(ax5.util.number(123456789.678, {round:1}));\n * console.log(ax5.util.number(123456789.678, {round:1, money:true}));\n * console.log(ax5.util.number(123456789.678, {round:2, byte:true}));\n * console.log(ax5.util.number(-123456789.8888, {abs:true, round:2, money:true}));\n * console.log(ax5.util.number(\"A-1234~~56789.8~888PX\", {abs:true, round:2, money:true}));\n *\n * //123456789.7\n * //123,456,789.7\n * //117.7MB\n * //123,456,789.89\n * //123,456,789.89\n * ```\n */\n function number(str, cond) {\n var result,\n pair = ('' + str).split(reDot),\n isMinus,\n returnValue;\n\n isMinus = Number(pair[0].replace(/,/g, \"\")) < 0 || pair[0] == \"-0\";\n returnValue = 0.0;\n pair[0] = pair[0].replace(reInt, \"\");\n\n if (pair[1]) {\n pair[1] = pair[1].replace(reNotNum, \"\");\n returnValue = Number(pair[0] + \".\" + pair[1]) || 0;\n } else {\n returnValue = Number(pair[0]) || 0;\n }\n result = isMinus ? -returnValue : returnValue;\n\n each(cond, function (k, c) {\n if (k == \"round\") {\n if (isNumber(c)) {\n if (c < 0) {\n result = +(Math.round(result + \"e-\" + Math.abs(c)) + \"e+\" + Math.abs(c));\n } else {\n result = +(Math.round(result + \"e+\" + c) + \"e-\" + c);\n }\n } else {\n result = Math.round(result);\n }\n }\n if (k == \"floor\") {\n result = Math.floor(result);\n }\n if (k == \"ceil\") {\n result = Math.ceil(result);\n } else if (k == \"money\") {\n result = function (val) {\n var txtNumber = '' + val;\n if (isNaN(txtNumber) || txtNumber == \"\") {\n return \"\";\n } else {\n var arrNumber = txtNumber.split('.');\n arrNumber[0] += '.';\n do {\n arrNumber[0] = arrNumber[0].replace(reMoneySplit, '$1,$2');\n } while (reMoneySplit.test(arrNumber[0]));\n if (arrNumber.length > 1) {\n return arrNumber.join('');\n } else {\n return arrNumber[0].split('.')[0];\n }\n }\n }(result);\n } else if (k == \"abs\") {\n result = Math.abs(Number(result));\n } else if (k == \"byte\") {\n result = function (val) {\n val = Number(result);\n var nUnit = \"KB\";\n var myByte = val / 1024;\n if (myByte / 1024 > 1) {\n nUnit = \"MB\";\n myByte = myByte / 1024;\n }\n if (myByte / 1024 > 1) {\n nUnit = \"GB\";\n myByte = myByte / 1024;\n }\n return number(myByte, { round: 1 }) + nUnit;\n }(result);\n }\n });\n\n return result;\n }\n\n /**\n * 배열 비슷한 오브젝트를 배열로 변환해줍니다.\n * @method ax5.util.toArray\n * @param {Object|Elements|Arguments} O\n * @returns {Array}\n * @example\n * ```js\n * ax5.util.toArray(arguments);\n * //\n * ```\n */\n function toArray(O) {\n if (typeof O.length != \"undefined\") return Array.prototype.slice.call(O);\n return [];\n }\n\n /**\n * 첫번째 인자에 두번째 인자 아이템을 합쳐줍니다. concat과 같은 역할을 하지만. 인자가 Array타입이 아니어도 됩니다.\n * @method ax5.util.merge\n * @param {Array|ArrayLike} first\n * @param {Array|ArrayLike} second\n * @returns {Array} first\n * @example\n * ```\n *\n * ```\n */\n function merge(first, second) {\n var l = second.length,\n i = first.length,\n j = 0;\n\n if (typeof l === \"number\") {\n for (; j < l; j++) {\n first[i++] = second[j];\n }\n } else {\n while (second[j] !== undefined) {\n first[i++] = second[j++];\n }\n }\n\n first.length = i;\n\n return first;\n }\n\n /**\n * 오브젝트를 파라미터형식으로 또는 파라미터를 오브젝트 형식으로 변환합니다.\n * @method ax5.util.param\n * @param {Object|Array|String} O\n * @param {String} [cond] - param|object\n * @returns {Object|String}\n * @example\n * ```\n * ax5.util.param({a:1,b:'1232'}, \"param\");\n * ax5.util.param(\"a=1&b=1232\", \"param\");\n * // \"a=1&b=1232\"\n * ax5.util.param(\"a=1&b=1232\");\n * // {a: \"1\", b: \"1232\"}\n * ```\n */\n function param(O, cond) {\n var p;\n if (isString(O) && typeof cond !== \"undefined\" && cond == \"param\") {\n return O;\n } else if (isString(O) && typeof cond !== \"undefined\" && cond == \"object\" || isString(O) && typeof cond === \"undefined\") {\n p = {};\n each(O.split(reAmp), function () {\n var item = this.split(reEq);\n if (!p[item[0]]) p[item[0]] = item[1];else {\n if (isString(p[item[0]])) p[item[0]] = [p[item[0]]];\n p[item[0]].push(item[1]);\n }\n });\n return p;\n } else {\n p = [];\n each(O, function (k, v) {\n p.push(k + \"=\" + escape(v));\n });\n return p.join('&');\n }\n }\n\n function encode(s) {\n return encodeURIComponent(s);\n }\n\n function decode(s) {\n return decodeURIComponent(s);\n }\n\n function error() {\n ax5.info.onerror.apply(this, arguments);\n }\n\n function localDate(yy, mm, dd, hh, mi, ss) {\n var utcD, localD;\n localD = new Date();\n if (mm < 0) mm = 0;\n if (typeof hh === \"undefined\") hh = 12;\n if (typeof mi === \"undefined\") mi = 0;\n utcD = new Date(Date.UTC(yy, mm, dd || 1, hh, mi, ss || 0));\n\n if (mm == 0 && dd == 1 && utcD.getUTCHours() + utcD.getTimezoneOffset() / 60 < 0) {\n utcD.setUTCHours(0);\n } else {\n utcD.setUTCHours(utcD.getUTCHours() + utcD.getTimezoneOffset() / 60);\n }\n return utcD;\n }\n\n /**\n * 날짜 형식의 문자열이나 Date객체를 조건에 맞게 처리 한 후 원하는 return 값으로 반환합니다.\n * @method ax5.util.date\n * @param {String|Date} d\n * @param {Object} cond\n * @returns {Date|String}\n * @example\n * ```js\n * ax5.util.date('2013-01-01'); // Tue Jan 01 2013 23:59:00 GMT+0900 (KST)\n * ax5.util.date((new Date()), {add:{d:10}, return:'yyyy/MM/dd'}); // \"2015/07/01\"\n * ax5.util.date('1919-03-01', {add:{d:10}, return:'yyyy/MM/dd hh:mm:ss'}); // \"1919/03/11 23:59:00\"\n * ```\n */\n function date(d, cond) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n hh = void 0,\n mi = void 0,\n aDateTime = void 0,\n aTimes = void 0,\n aTime = void 0,\n aDate = void 0,\n va = void 0,\n ISO_8601 = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i,\n ISO_8601_FULL = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n\n if (isString(d)) {\n if (d.length == 0) {\n d = new Date();\n } else if (d.length > 15) {\n if (ISO_8601_FULL.test(d) || ISO_8601.test(d)) {\n d = new Date(d);\n } else {\n aDateTime = d.split(/ /g), aTimes, aTime, aDate = aDateTime[0].split(/\\D/g), yy = aDate[0];\n mm = parseFloat(aDate[1]);\n dd = parseFloat(aDate[2]);\n aTime = aDateTime[1] || \"09:00\";\n aTimes = aTime.substring(0, 5).split(\":\");\n hh = parseFloat(aTimes[0]);\n mi = parseFloat(aTimes[1]);\n if (right(aTime, 2) === \"AM\" || right(aTime, 2) === \"PM\") hh += 12;\n d = localDate(yy, mm - 1, dd, hh, mi);\n }\n } else if (d.length == 14) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)), number(va.substr(8, 2)), number(va.substr(10, 2)), number(va.substr(12, 2)));\n } else if (d.length > 7) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)));\n } else if (d.length > 4) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else if (d.length > 2) {\n va = d.replace(/\\D/g, \"\");\n return localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else {\n d = new Date();\n }\n }\n if (typeof cond === \"undefined\" || typeof d === \"undefined\") {\n return d;\n } else {\n if (\"add\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n mxdd = void 0,\n DyMilli = 1000 * 60 * 60 * 24;\n\n if (typeof opts[\"d\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"d\"] * DyMilli);\n } else if (typeof opts[\"m\"] !== \"undefined\") {\n yy = _d.getFullYear();\n mm = _d.getMonth();\n dd = _d.getDate();\n yy = yy + parseInt(opts[\"m\"] / 12);\n mm += opts[\"m\"] % 12;\n mxdd = daysOfMonth(yy, mm);\n if (mxdd < dd) dd = mxdd;\n _d = new Date(yy, mm, dd, 12);\n } else if (typeof opts[\"y\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"y\"] * 365 * DyMilli);\n } else if (typeof opts[\"h\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"h\"] * 1000 * 60 * 60);\n }\n\n return _d;\n }(new Date(d), cond[\"add\"]);\n }\n if (\"set\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n processor = {\n \"firstDayOfMonth\": function firstDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = 1;\n return new Date(yy, mm, dd, 12);\n },\n \"lastDayOfMonth\": function lastDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = daysOfMonth(yy, mm);\n return new Date(yy, mm, dd, 12);\n }\n };\n if (opts in processor) {\n return processor[opts](_d);\n } else {\n return _d;\n }\n }(new Date(d), cond[\"set\"]);\n }\n if (\"return\" in cond) {\n return function () {\n\n var fStr = cond[\"return\"],\n nY = void 0,\n nM = void 0,\n nD = void 0,\n nH = void 0,\n nMM = void 0,\n nS = void 0,\n nDW = void 0,\n yre = void 0,\n regY = void 0,\n mre = void 0,\n regM = void 0,\n dre = void 0,\n regD = void 0,\n hre = void 0,\n regH = void 0,\n mire = void 0,\n regMI = void 0,\n sre = void 0,\n regS = void 0,\n dwre = void 0,\n regDW = void 0;\n\n nY = d.getUTCFullYear();\n nM = setDigit(d.getMonth() + 1, 2);\n nD = setDigit(d.getDate(), 2);\n nH = setDigit(d.getHours(), 2);\n nMM = setDigit(d.getMinutes(), 2);\n nS = setDigit(d.getSeconds(), 2);\n nDW = d.getDay();\n\n yre = /[^y]*(yyyy)[^y]*/gi;\n yre.exec(fStr);\n regY = RegExp.$1;\n mre = /[^m]*(MM)[^m]*/g;\n mre.exec(fStr);\n regM = RegExp.$1;\n dre = /[^d]*(dd)[^d]*/gi;\n dre.exec(fStr);\n regD = RegExp.$1;\n hre = /[^h]*(hh)[^h]*/gi;\n hre.exec(fStr);\n regH = RegExp.$1;\n mire = /[^m]*(mm)[^i]*/g;\n mire.exec(fStr);\n regMI = RegExp.$1;\n sre = /[^s]*(ss)[^s]*/gi;\n sre.exec(fStr);\n regS = RegExp.$1;\n dwre = /[^d]*(dw)[^w]*/gi;\n dwre.exec(fStr);\n regDW = RegExp.$1;\n\n if (regY === \"yyyy\") {\n fStr = fStr.replace(regY, right(nY, regY.length));\n }\n if (regM === \"MM\") {\n if (regM.length == 1) nM = d.getMonth() + 1;\n fStr = fStr.replace(regM, nM);\n }\n if (regD === \"dd\") {\n if (regD.length == 1) nD = d.getDate();\n fStr = fStr.replace(regD, nD);\n }\n if (regH === \"hh\") {\n fStr = fStr.replace(regH, nH);\n }\n if (regMI === \"mm\") {\n fStr = fStr.replace(regMI, nMM);\n }\n if (regS === \"ss\") {\n fStr = fStr.replace(regS, nS);\n }\n if (regDW == \"dw\") {\n fStr = fStr.replace(regDW, info.weekNames[nDW].label);\n }\n return fStr;\n }();\n } else {\n return d;\n }\n }\n }\n\n /**\n * 인자인 날짜가 오늘부터 몇일전인지 반환합니다. 또는 인자인 날짜가 가까운 미래에 몇일 후인지 반환합니다.\n * @method ax5.util.dday\n * @param {String|Data} d\n * @param {Object} cond\n * @returns {Number}\n * @example\n * ```js\n * ax5.util.dday('2016-01-29');\n * // 1\n * ax5.util.dday('2016-01-29', {today:'2016-01-28'});\n * // 1\n * ax5.util.dday('1977-03-29', {today:'2016-01-28', age:true});\n * // 39\n * ```\n */\n function dday(d, cond) {\n var memoryDay = date(d),\n DyMilli = 1000 * 60 * 60 * 24,\n today = new Date(),\n diffnum,\n thisYearMemoryDay;\n\n function getDayTime(_d) {\n return Math.floor(_d.getTime() / DyMilli) * DyMilli;\n }\n\n if (typeof cond === \"undefined\") {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n return diffnum;\n } else {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (cond[\"today\"]) {\n today = date(cond.today);\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n if (cond[\"thisYear\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (diffnum < 0) {\n thisYearMemoryDay = new Date(today.getFullYear() + 1, memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n }\n if (cond[\"age\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = thisYearMemoryDay.getFullYear() - memoryDay.getFullYear();\n }\n\n return diffnum;\n }\n }\n\n /**\n * 인자인 날짜가 몇년 몇월의 몇번째 주차인지 반환합니다.\n * @method ax5.util.weeksOfMonth\n * @param {String|Data} d\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.weeksOfMonth(\"2015-10-01\"); // {year: 2015, month: 10, count: 1}\n * ax5.util.weeksOfMonth(\"2015-09-19\"); // {year: 2015, month: 9, count: 3}\n * ```\n */\n function weeksOfMonth(d) {\n var myDate = date(d);\n return {\n year: myDate.getFullYear(),\n month: myDate.getMonth() + 1,\n count: parseInt(myDate.getDate() / 7 + 1)\n };\n }\n\n /**\n * 년월에 맞는 날자수를 반환합니다.\n * (new Date()).getMonth() 기준으로 월값을 보냅니다. \"2월\" 인경우 \"1\" 을 넘기게 됩니다.\n * @method ax5.util.daysOfMonth\n * @param {Number} y\n * @param {Number} m\n * @returns {Number}\n * @examples\n * ```js\n * ax5.util.daysOfMonth(2015, 11); // 31\n * ax5.util.daysOfMonth(2015, 1); // 28\n * ```\n */\n function daysOfMonth(y, m) {\n if (m == 3 || m == 5 || m == 8 || m == 10) {\n return 30;\n } else if (m == 1) {\n return y % 4 == 0 && y % 100 != 0 || y % 400 == 0 ? 29 : 28;\n } else {\n return 31;\n }\n }\n\n /**\n * 원하는 횟수 만큼 자릿수 맞춤 문자열을 포함한 문자열을 반환합니다.\n * 문자열 길이보다 작은값을 보내면 무시됩니다.\n * @method ax5.util.setDigit\n * @param {String|Number} num\n * @param {Number} length\n * @param {String} [padder=0]\n * @param {Number} [radix]\n * @returns {String}\n * @example\n * ```\n * ax5.util.setDigit(2016, 6)\n * // \"002016\"\n * ax5.util.setDigit(2016, 2)\n * // \"2016\"\n * ```\n */\n function setDigit(num, length, padder, radix) {\n var s = num.toString(radix || 10);\n return times(padder || '0', length - s.length) + s;\n }\n\n /**\n * 문자열을 지정된 수만큼 반복 합니다.\n * @param {String} s\n * @param {Number} count\n * @returns {string}\n * @example\n * ```\n * ax5.util.times(2016, 2)\n * //\"20162016\"\n * ```\n */\n function times(s, count) {\n return count < 1 ? '' : new Array(count + 1).join(s);\n }\n\n /**\n * 타겟엘리먼트의 부모 엘리멘트 트리에서 원하는 조건의 엘리먼트를 얻습니다.\n * @method ax5.util.findParentNode\n * @param {Element} _target - target element\n * @param {Object|Function} cond - 원하는 element를 찾을 조건\n * @returns {Element}\n * @example\n * ```\n * // cond 속성정의\n * var cond = {\n * \ttagname: {String} - 태그명 (ex. a, div, span..),\n * \tclazz: {String} - 클래스명\n * \t[, 그 외 찾고 싶은 attribute명들]\n * };\n * console.log(\n * console.log(\n * ax5.util.findParentNode(e.target, {tagname:\"a\", clazz:\"ax-menu-handel\", \"data-custom-attr\":\"attr_value\"})\n * );\n * // cond 함수로 처리하기\n * jQuery('#id').bind(\"click.app_expand\", function(e){\n * \tvar target = ax5.util.findParentNode(e.target, function(target){\n * \t\tif($(target).hasClass(\"aside\")){\n * \t\t\treturn true;\n * \t\t}\n * \t\telse{\n * \t\t\treturn true;\n * \t\t}\n * \t});\n * \t//client-aside\n * \tif(target.id !== \"client-aside\"){\n * \t\t// some action\n * \t}\n * });\n * ```\n */\n\n function findParentNode(_target, cond) {\n if (_target) {\n while (function () {\n var result = true;\n if (typeof cond === \"undefined\") {\n _target = _target.parentNode ? _target.parentNode : false;\n } else if (isFunction(cond)) {\n result = cond(_target);\n } else if (isObject(cond)) {\n for (var k in cond) {\n if (k === \"tagname\") {\n if (_target.tagName.toLocaleLowerCase() != cond[k]) {\n result = false;\n break;\n }\n } else if (k === \"clazz\" || k === \"class_name\") {\n if (\"className\" in _target) {\n var klasss = _target.className.split(reClassNameSplit);\n var hasClass = false;\n for (var a = 0; a < klasss.length; a++) {\n if (klasss[a] == cond[k]) {\n hasClass = true;\n break;\n }\n }\n result = hasClass;\n } else {\n result = false;\n break;\n }\n } else {\n // 그외 속성값들.\n if (_target.getAttribute) {\n if (_target.getAttribute(k) != cond[k]) {\n result = false;\n break;\n }\n } else {\n result = false;\n break;\n }\n }\n }\n }\n return !result;\n }()) {\n if (_target.parentNode && _target.parentNode.parentNode) {\n _target = _target.parentNode;\n } else {\n _target = false;\n break;\n }\n }\n }\n return _target;\n }\n\n /**\n * @method ax5.util.cssNumber\n * @param {String|Number} val\n * @returns {String}\n * @example\n * ```\n * console.log(ax5.util.cssNumber(\"100px\"))\n * console.log(ax5.util.cssNumber(\"100%\"))\n * console.log(ax5.util.cssNumber(\"100\"))\n * console.log(ax5.util.cssNumber(100))\n * console.log(ax5.util.cssNumber(\"!!100@#\"))\n * ```\n */\n function cssNumber(val) {\n var re = /\\D?(\\d+)([a-zA-Z%]*)/i,\n found = ('' + val).match(re),\n unit = found[2] || \"px\";\n\n return found[1] + unit;\n }\n\n /**\n * css string 및 object 를 넘기면 object 및 string 으로 변환되어 리턴됩니다.\n * @method ax5.util.css\n * @param {Object|String} val - CSS String or CSS Object\n * @returns {String|Object}\n * @example\n * ```\n * console.log(ax5.util.css({background: \"#ccc\", padding: \"50px\", width: \"100px\"}));\n * //\"background:#ccc;padding:50px;width:100px;\"\n * console.log(ax5.util.css('width:100px;padding: 50px; background: #ccc'));\n * // object {width: \"100px\", padding: \"50px\", background: \"#ccc\"}\n * ```\n */\n function css(val) {\n var returns;\n if (isObject(val)) {\n returns = '';\n for (var k in val) {\n returns += k + ':' + val[k] + ';';\n }\n return returns;\n } else if (isString(val)) {\n returns = {};\n var valSplited = val.split(/[ ]*;[ ]*/g);\n valSplited.forEach(function (v) {\n if ((v = v.trim()) !== \"\") {\n var vSplited = v.split(/[ ]*:[ ]*/g);\n returns[vSplited[0]] = vSplited[1];\n }\n });\n return returns;\n }\n }\n\n /**\n * @method ax5.util.stopEvent\n * @param {Event} e\n * @example\n * ```\n * ax5.util.stopEvent(e);\n * ```\n */\n function stopEvent(e) {\n // 이벤트 중지 구문\n if (!e) var e = window.event;\n\n //e.cancelBubble is supported by IE -\n // this will kill the bubbling process.\n e.cancelBubble = true;\n e.returnValue = false;\n\n //e.stopPropagation works only in Firefox.\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n\n return false;\n // 이벤트 중지 구문 끝\n }\n\n /**\n * @method ax5.util.selectRange\n * @param {Element} el\n * @param {Element} offset\n * @example\n * ```\n * ax5.util.selectRange($(\"#select-test-0\")); // selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"selectAll\"); //selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"start\"); // focus on start\n * ax5.util.selectRange($(\"#select-test-0\"), \"end\"); // focus on end\n * ax5.util.selectRange($(\"#select-test-0\"), [1, 5]); // select 1~5\n * ```\n */\n var selectRange = function () {\n var processor = {\n 'textRange': {\n 'selectAll': function selectAll(el, range, offset) {},\n 'arr': function arr(el, range, offset) {\n range.moveStart(\"character\", offset[0]); // todo ie node select 체크필요\n range.collapse();\n range.moveEnd(\"character\", offset[1]);\n },\n 'start': function start(el, range, offset) {\n range.moveStart(\"character\", 0);\n range.collapse();\n },\n 'end': function end(el, range, offset) {\n range.moveStart(\"character\", range.text.length);\n range.collapse();\n }\n },\n 'range': {\n 'selectAll': function selectAll(el, range, offset) {\n range.selectNodeContents(el);\n },\n 'arr': function arr(el, range, offset) {\n if (isObject(offset[0])) {\n range.setStart(offset[0].node, offset[0].offset);\n range.setEnd(offset[1].node, offset[1].offset);\n } else {\n range.setStart(el.firstChild, offset[0]);\n range.setEnd(el.firstChild, offset[1]);\n }\n },\n 'start': function start(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(true);\n },\n 'end': function end(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(false);\n }\n }\n };\n return function (el, offset) {\n var range, rangeType, selection;\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n if (!el) return;\n\n // 레인지 타입 선택\n if (doc.body.createTextRange) {\n range = document.body.createTextRange();\n range.moveToElementText(el);\n rangeType = \"textRange\";\n } else if (window.getSelection) {\n selection = window.getSelection();\n range = document.createRange();\n rangeType = \"range\";\n }\n\n // range 적용\n if (typeof offset == \"undefined\") {\n processor[rangeType].selectAll.call(this, el, range, offset);\n } else if (isArray(offset)) {\n processor[rangeType].arr.call(this, el, range, offset);\n } else {\n for (var key in processor[rangeType]) {\n if (offset == key) {\n processor[rangeType][key].call(this, el, range, offset);\n break;\n }\n }\n }\n\n // 포커스 및 셀렉트\n if (doc.body.createTextRange) {\n range.select();\n el.focus();\n } else if (window.getSelection) {\n el.focus();\n selection.removeAllRanges();\n selection.addRange(range);\n }\n };\n }();\n\n /**\n * 지정한 시간을 지연시켜 함수를 실행합니다.\n * @method ax5.util.debounce\n * @param {Function} func\n * @param {Number} wait\n * @param {Object} options\n * @returns {debounced}\n * @example\n * ```js\n * var debounceFn = ax5.util.debounce(function( val ) { console.log(val); }, 300);\n * $(document.body).click(function(){\n * debounceFn(new Date());\n * });\n * ```\n */\n // https://github.com/lodash/lodash/blob/master/debounce.js\n function debounce(func, wait, options) {\n var lastArgs = void 0,\n lastThis = void 0,\n maxWait = void 0,\n result = void 0,\n timerId = void 0,\n lastCallTime = void 0;\n\n var lastInvokeTime = 0;\n var leading = false;\n var maxing = false;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs;\n var thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n var result = wait - timeSinceLastCall;\n\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function debounced() {\n var time = Date.now();\n var isInvoking = shouldInvoke(time);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * @method ax5.util.throttle\n * @param func\n * @param wait\n * @param options\n * @return {debounced}\n */\n //https://github.com/lodash/lodash/blob/master/throttle.js\n function throttle(func, wait, options) {\n var leading = true;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * @method ax5.util.deepCopy\n * @param {Object} obj\n * @returns {Object}\n * @example\n * ```js\n * var obj = [\n * {name:\"A\", child:[{name:\"a-1\"}]},\n * {name:\"B\", child:[{name:\"b-1\"}], callBack: function(){ console.log('callBack'); }}\n * ];\n * var copiedObj = ax5.util.deepCopy(obj)\n * ```\n */\n function deepCopy(obj) {\n var r, l;\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object') {\n if (U.isArray(obj)) {\n l = obj.length;\n r = new Array(l);\n for (var i = 0; i < l; i++) {\n r[i] = deepCopy(obj[i]);\n }\n return r;\n } else {\n return jQuery.extend({}, obj);\n }\n }\n return obj;\n }\n\n /**\n * HTML 문자열을 escape 처리합니다.\n * \"<\" represents the < sign.\n * \">\" represents the > sign.\n * \"&\" represents the & sign.\n * \"" represents the \" mark.\n * [Character entity references](https://www.w3.org/TR/html401/charset.html#h-5.3)\n * @method ax5.util.escapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.escapeHtml('HTML string & \"escape\"')\n * //\"HTML <span>string</span> & "escape"\"\n * ```\n */\n function escapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/[\\<\\>\\&\\\"]/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \"\\\"\":\n return \""\";\n default:\n return match;\n }\n });\n }\n\n /**\n * HTML 문자열을 unescape 처리합니다.\n * escapeHtml를 참고하세요.\n * @method ax5.util.unescapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.unescapeHtml('HTML <span>string</span> & "escape"')\n * //\"HTML string & \"escape\"\"\n * ```\n */\n function unescapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/(<)|(>)|(&)|(")/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \""\":\n return \"\\\"\";\n default:\n return match;\n }\n });\n }\n\n /**\n * @method ax5.util.string\n * @param {String} tmpl\n * @param {*} args\n * @return {ax5string}\n * @example\n * ```js\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format(\"ASP\", \"ASP.NET\");\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format([\"ASP\", \"ASP.NET\"]);\n * ax5.util.stinrg(\"{0} counts\").format(100);\n * ```\n */\n function string(_string) {\n return new function (_string) {\n this.value = _string;\n this.toString = function () {\n return this.value;\n };\n /**\n * @method ax5.util.string.format\n * @returns {*}\n */\n this.format = function () {\n var args = [];\n for (var i = 0, l = arguments.length; i < l; i++) {\n args = args.concat(arguments[i]);\n }\n return this.value.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n /**\n * @method ax5.util.string.escape\n * @returns {*}\n */\n this.escape = function () {\n return escapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.unescape\n * @returns {*}\n */\n this.unescape = function () {\n return unescapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.encode\n * @returns {*}\n */\n this.encode = function () {\n return encode(this.value);\n };\n /**\n * @method ax5.util.string.decode\n * @returns {*}\n */\n this.decode = function () {\n return decode(this.value);\n };\n /**\n * @method ax5.util.string.left\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.left = function (_pos) {\n return left(this.value, _pos);\n };\n /**\n * @method ax5.util.string.right\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.right = function (_pos) {\n return right(this.value, _pos);\n };\n /**\n * @method ax5.util.string.camelCase\n * @returns {*}\n */\n this.camelCase = function () {\n return camelCase(this.value);\n };\n /**\n * @method ax5.util.string.snakeCase\n * @returns {*}\n */\n this.snakeCase = function () {\n return snakeCase(this.value);\n };\n }(_string);\n }\n\n /**\n * @method ax5.util.color\n * @param _hexColor\n * @return {ax5color}\n * @example\n * ```js\n * ax5.util.color(\"#ff3300\").lighten(10).getHexValue()\n * console.log(ax5.util.color(\"#ff3300\").darken(10).getHexValue());\n * ```\n */\n function color(_hexColor) {\n\n var matchers = function () {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n var convertObject = function convertObject(_color) {\n var match = void 0;\n if (match = matchers.rgb.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if (match = matchers.rgba.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if (match = matchers.hsl.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if (match = matchers.hsla.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if (match = matchers.hsv.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if (match = matchers.hsva.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if (match = matchers.hex8.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: parseInt(match[4] / 255, 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n format: \"hex\"\n };\n }\n if (match = matchers.hex4.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n a: parseInt(match[4] + '' + match[4], 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n format: \"hex\"\n };\n }\n\n return false;\n };\n\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n }\n\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n }\n\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n\n return n;\n }\n\n function convertTo255(n) {\n return ax5.util.number(Math.min(255, Math.max(n, 0)), { 'round': 2 });\n }\n\n function convertToHex(n) {\n return setDigit(Math.round(n).toString(16), 2);\n }\n\n function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n }\n\n function hslToRgb(h, s, l) {\n var r = void 0,\n g = void 0,\n b = void 0;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n }\n\n return new function (_color) {\n this._originalValue = _color;\n _color = convertObject(_color);\n this.r = _color.r;\n this.g = _color.g;\n this.b = _color.b;\n this.a = _color.a || 1;\n this._format = _color.format;\n this._hex = convertToHex(this.r) + convertToHex(this.g) + convertToHex(this.b);\n\n this.getHexValue = function () {\n return this._hex;\n };\n\n this.lighten = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l += amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.darken = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l -= amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.getBrightness = function () {\n return (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n };\n\n this.isDark = function () {\n return this.getBrightness() < 128;\n };\n\n this.isLight = function () {\n return !this.isDark();\n };\n\n this.getHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l\n };\n };\n }(_hexColor);\n }\n\n return {\n alert: alert,\n each: each,\n map: map,\n search: search,\n reduce: reduce,\n reduceRight: reduceRight,\n filter: filter,\n sum: sum,\n avg: avg,\n toJson: toJson,\n parseJson: parseJson,\n first: first,\n last: last,\n deepCopy: deepCopy,\n\n left: left,\n right: right,\n getType: getType,\n isWindow: isWindow,\n isElement: isElement,\n isObject: isObject,\n isArray: isArray,\n isFunction: isFunction,\n isString: isString,\n isNumber: isNumber,\n isNodelist: isNodelist,\n isUndefined: isUndefined,\n isNothing: isNothing,\n setCookie: setCookie,\n getCookie: getCookie,\n camelCase: camelCase,\n snakeCase: snakeCase,\n number: number,\n toArray: toArray,\n merge: merge,\n param: param,\n error: error,\n date: date,\n dday: dday,\n daysOfMonth: daysOfMonth,\n weeksOfMonth: weeksOfMonth,\n setDigit: setDigit,\n times: times,\n findParentNode: findParentNode,\n cssNumber: cssNumber,\n css: css,\n isDate: isDate,\n isDateFormat: isDateFormat,\n stopEvent: stopEvent,\n selectRange: selectRange,\n debounce: debounce,\n throttle: throttle,\n escapeHtml: escapeHtml,\n unescapeHtml: unescapeHtml,\n\n string: string,\n color: color\n };\n }();\n\n if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n module.exports = ax5;\n } else {\n root.ax5 = function () {\n return ax5;\n }(); // ax5.ui에 연결\n }\n}).call(typeof window !== \"undefined\" ? window : undefined);\n\nax5.def = {};\nax5.info.errorMsg[\"ax5dialog\"] = {\n \"501\": \"Duplicate call error\"\n};\n\nax5.info.errorMsg[\"ax5picker\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find content key\"\n};\n\nax5.info.errorMsg[\"single-uploader\"] = {\n \"460\": \"There are no files to be uploaded.\",\n \"461\": \"There is no uploaded files.\"\n};\n\nax5.info.errorMsg[\"ax5calendar\"] = {\n \"401\": \"Can not find target element\"\n};\n\nax5.info.errorMsg[\"ax5formatter\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find pattern\"\n};\n\nax5.info.errorMsg[\"ax5menu\"] = {\n \"501\": \"Can not find menu item\"\n};\n\nax5.info.errorMsg[\"ax5select\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n\nax5.info.errorMsg[\"ax5combobox\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n// 필수 Ployfill 확장 구문\n(function () {\n 'use strict';\n\n var root = this,\n re_trim = /^\\s*|\\s*$/g;\n\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n if (!Object.keys) {\n Object.keys = function () {\n var hwp = Object.prototype.hasOwnProperty,\n hdeb = !{ toString: null }.propertyIsEnumerable('toString'),\n de = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n del = de.length;\n\n return function (obj) {\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' && (typeof obj !== 'function' || obj === null)) throw new TypeError('type err');\n var r = [],\n prop,\n i;\n for (prop in obj) {\n if (hwp.call(obj, prop)) r.push(prop);\n }if (hdeb) {\n for (i = 0; i < del; i++) {\n if (hwp.call(obj, de[i])) r.push(de[i]);\n }\n }\n return r;\n };\n }();\n }\n\n // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function (fun /*, thisp */) {\n if (this === void 0 || this === null) {\n throw TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof fun !== \"function\") {\n throw TypeError();\n }\n var thisp = arguments[1],\n i;\n for (i = 0; i < len; i++) {\n if (i in t) {\n fun.call(thisp, t[i], i, t);\n }\n }\n };\n }\n\n // ES5 15.3.4.5 Function.prototype.bind ( thisArg [, arg1 [, arg2, ... ]] )\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n if (!Function.prototype.bind) {\n Function.prototype.bind = function (o) {\n if (typeof this !== 'function') {\n throw TypeError(\"function\");\n }\n var slice = [].slice,\n args = slice.call(arguments, 1),\n self = this,\n bound = function bound() {\n return self.apply(this instanceof nop ? this : o, args.concat(slice.call(arguments)));\n };\n\n function nop() {}\n\n nop.prototype = self.prototype;\n bound.prototype = new nop();\n return bound;\n };\n }\n\n /*global document */\n /**\n * define document.querySelector & document.querySelectorAll for IE7\n *\n * A not very fast but small hack. The approach is taken from\n * http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx\n *\n */\n (function () {\n if (document.querySelectorAll || document.querySelector) {\n return;\n }\n if (!document.createStyleSheet) return;\n var style = document.createStyleSheet(),\n select = function select(selector, maxCount) {\n var all = document.all,\n l = all.length,\n i,\n resultSet = [];\n\n style.addRule(selector, \"foo:bar\");\n for (i = 0; i < l; i += 1) {\n if (all[i].currentStyle.foo === \"bar\") {\n resultSet.push(all[i]);\n if (resultSet.length > maxCount) {\n break;\n }\n }\n }\n style.removeRule(0);\n return resultSet;\n };\n\n document.querySelectorAll = function (selector) {\n return select(selector, Infinity);\n };\n document.querySelector = function (selector) {\n return select(selector, 1)[0] || null;\n };\n })();\n\n if (!String.prototype.trim) {\n (function () {\n String.prototype.trim = function () {\n return this.replace(re_trim, '');\n };\n })();\n }\n\n if (!window.JSON) {\n window.JSON = {\n parse: function parse(sJSON) {\n return new Function('', 'return ' + sJSON)();\n },\n stringify: function () {\n var r = /[\"]/g,\n _f;\n return _f = function f(vContent) {\n var result, i, j;\n switch (result = typeof vContent === 'undefined' ? 'undefined' : _typeof(vContent)) {\n case 'string':\n return '\"' + vContent.replace(r, '\\\\\"') + '\"';\n case 'number':\n case 'boolean':\n return vContent.toString();\n case 'undefined':\n return 'undefined';\n case 'function':\n return '\"\"';\n case 'object':\n if (!vContent) return 'null';\n result = '';\n if (vContent.splice) {\n for (i = 0, j = vContent.length; i < j; i++) {\n result += ',' + _f(vContent[i]);\n }return '[' + result.substr(1) + ']';\n } else {\n for (i in vContent) {\n if (vContent.hasOwnProperty(i) && vContent[i] !== undefined && typeof vContent[i] != 'function') result += ',\"' + i + '\":' + _f(vContent[i]);\n }return '{' + result.substr(1) + '}';\n }\n }\n };\n }()\n };\n }\n\n // splice ie8 <= polyfill\n (function () {\n if (!document.documentMode || document.documentMode >= 9) return false;\n var _splice = Array.prototype.splice;\n Array.prototype.splice = function () {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[1] === \"undefined\") args[1] = this.length - args[0];\n return _splice.apply(this, args);\n };\n })();\n\n /**\n * Shim for \"fixing\" IE's lack of support (IE < 9) for applying slice\n * on host objects like NamedNodeMap, NodeList, and HTMLCollection\n * (technically, since host objects have been implementation-dependent,\n * at least before ES6, IE hasn't needed to work this way).\n * Also works on strings, fixes IE < 9 to allow an explicit undefined\n * for the 2nd argument (as in Firefox), and prevents errors when\n * called on other DOM objects.\n */\n (function () {\n 'use strict';\n\n var _slice = Array.prototype.slice;\n\n try {\n // Can't be used with DOM elements in IE < 9\n _slice.call(document.documentElement);\n } catch (e) {\n // Fails in IE < 9\n // This will work for genuine arrays, array-like objects,\n // NamedNodeMap (attributes, entities, notations),\n // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),\n // and will not fail on other DOM objects (as do DOM elements in IE < 9)\n Array.prototype.slice = function (begin, end) {\n // IE < 9 gets unhappy with an undefined end argument\n end = typeof end !== 'undefined' ? end : this.length;\n\n // For native Array objects, we use the native slice function\n if (Object.prototype.toString.call(this) === '[object Array]') {\n return _slice.call(this, begin, end);\n }\n\n // For array like object we handle it ourselves.\n var i,\n cloned = [],\n size,\n len = this.length;\n\n // Handle negative value for \"begin\"\n var start = begin || 0;\n start = start >= 0 ? start : Math.max(0, len + start);\n\n // Handle negative value for \"end\"\n var upTo = typeof end == 'number' ? Math.min(end, len) : len;\n if (end < 0) {\n upTo = len + end;\n }\n\n // Actual expected size of the slice\n size = upTo - start;\n\n if (size > 0) {\n cloned = new Array(size);\n if (this.charAt) {\n for (i = 0; i < size; i++) {\n cloned[i] = this.charAt(start + i);\n }\n } else {\n for (i = 0; i < size; i++) {\n cloned[i] = this[start + i];\n }\n }\n }\n\n return cloned;\n };\n }\n })();\n\n // Console-polyfill. MIT license. https://github.com/paulmillr/console-polyfill\n // Make it safe to do console.log() always.\n (function (con) {\n var prop, method;\n var empty = {};\n var dummy = function dummy() {};\n var properties = 'memory'.split(',');\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) {\n con[prop] = con[prop] || empty;\n }while (method = methods.pop()) {\n con[method] = con[method] || dummy;\n }\n })(window.console || {}); // Using `this` for web workers.\n\n\n // Modernizr style test\n if (!(window.webkitMatchMedia || window.mozMatchMedia || window.oMatchMedia || window.msMatchMedia || window.matchMedia)) {\n var root = document.getElementsByTagName('html')[0];\n root.className += ' no-matchmedia';\n }\n\n /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n window.matchMedia || (window.matchMedia = function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n\n var styleMedia = window.styleMedia || window.media;\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n script.parentNode.insertBefore(style, script);\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function matchMedium(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function (media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n }());\n\n /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n (function () {\n // Bail out for browsers that have addListener support\n if (window.matchMedia && window.matchMedia('all').addListener) {\n return false;\n }\n\n var localMatchMedia = window.matchMedia,\n hasMediaQueries = localMatchMedia('only all').matches,\n isListening = false,\n timeoutID = 0,\n // setTimeout for debouncing 'handleChange'\n queries = [],\n // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n handleChange = function handleChange(evt) {\n // Debounce\n clearTimeout(timeoutID);\n\n timeoutID = setTimeout(function () {\n for (var i = 0, il = queries.length; i < il; i++) {\n var mql = queries[i].mql,\n listeners = queries[i].listeners || [],\n matches = localMatchMedia(mql.media).matches;\n\n // Update mql.matches value and call listeners\n // Fire listeners only if transitioning to or from matched state\n if (matches !== mql.matches) {\n mql.matches = matches;\n\n for (var j = 0, jl = listeners.length; j < jl; j++) {\n listeners[j].call(window, mql);\n }\n }\n }\n }, 30);\n };\n\n window.matchMedia = function (media) {\n var mql = localMatchMedia(media),\n listeners = [],\n index = 0;\n\n mql.addListener = function (listener) {\n // Changes would not occur to css media type so return now (Affects IE <= 8)\n if (!hasMediaQueries) {\n return;\n }\n\n // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n // There should only ever be 1 resize listener running for performance\n if (!isListening) {\n isListening = true;\n window.addEventListener('resize', handleChange, true);\n }\n\n // Push object only if it has not been pushed already\n if (index === 0) {\n index = queries.push({\n mql: mql,\n listeners: listeners\n });\n }\n\n listeners.push(listener);\n };\n\n mql.removeListener = function (listener) {\n for (var i = 0, il = listeners.length; i < il; i++) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n }\n }\n };\n\n return mql;\n };\n })();\n\n // extend innerWidth ..\n var html = document.getElementsByTagName('html')[0];\n var body = document.getElementsByTagName('body')[0];\n\n /*\n if (!window.innerWidth) window.innerWidth = html.clientWidth;\n if (!window.innerHeight) window.innerHeight = html.clientHeight;\n if (!window.scrollX) window.scrollX = window.pageXOffset || html.scrollLeft;\n if (!window.scrollY) window.scrollY = window.pageYOffset || html.scrollTop;\n */\n}).call(window);\n/**\n * Refer to this by {@link ax5}.\n * @namespace ax5.ui\n */\n\n/**\n * @class ax5.ui.root\n * @classdesc ax5 ui class\n * @author tom@axisj.com\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * ```\n */\nax5.ui = function () {\n\n function axUi() {\n this.config = {};\n this.name = \"root\";\n\n /**\n * 클래스의 속성 정의 메소드 속성 확장후에 내부에 init 함수를 호출합니다.\n * @method ax5.ui.root.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Boolean} [callInit=true] - init 함수 호출 여부\n * @returns {ax5.ui.axUi}\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * myui.setConfig({\n * \tid:\"abcd\"\n * });\n * ```\n */\n this.setConfig = function (cfg, callInit) {\n jQuery.extend(true, this.config, cfg);\n if (typeof callInit == \"undefined\" || callInit === true) {\n this.init();\n }\n return this;\n };\n this.init = function () {\n console.log(this.config);\n };\n\n this.bindWindowResize = function (callBack) {\n setTimeout(function () {\n jQuery(window).resize(function () {\n if (this.bindWindowResize__) clearTimeout(this.bindWindowResize__);\n this.bindWindowResize__ = setTimeout(function () {\n callBack.call(this);\n }.bind(this), 10);\n }.bind(this));\n }.bind(this), 100);\n };\n\n this.stopEvent = function (e) {\n if (e.preventDefault) e.preventDefault();\n if (e.stopPropagation) e.stopPropagation();\n e.cancelBubble = true;\n return false;\n };\n\n this.toString = function () {\n return this.name + '@' + this.version;\n };\n\n // instance init\n this.main = function () {}.apply(this, arguments);\n }\n\n /**\n * @method ax5.ui.addClass\n * @param {Object} config\n * @param {String} config.className - name of Class\n * @param {Object} [config.classStore=ax5.ui] - 클래스가 저장될 경로\n * @param {Function} [config.superClass=ax5.ui.root]\n * @param {Function} cls - Class Function\n */\n function addClass(config, cls) {\n if (!config || !config.className) throw 'invalid call';\n var classStore = config.classStore ? config.classStore : ax5.ui;\n if (!classStore) throw 'invalid classStore';\n\n // make ui definition variable\n ax5.def[config.className] = {\n version: ax5.info.version\n };\n\n var factory = function factory(cls, arg) {\n switch (arg.length) {\n case 0:\n return new cls();\n break;\n case 1:\n return new cls(arg[0]);\n break;\n case 2:\n return new cls(arg[0], arg[1]);\n break;\n case 3:\n return new cls(arg[0], arg[1], arg[2]);\n break;\n }\n };\n var initInstance = function initInstance(name, version, instance) {\n instance.name = name;\n instance.version = version;\n instance.instanceId = ax5.getGuid();\n return instance;\n };\n var initPrototype = function initPrototype(cls) {\n var superClass = config.superClass ? config.superClass : ax5.ui.root;\n if (!ax5.util.isFunction(superClass)) throw 'invalid superClass';\n superClass.call(this); // 부모호출\n cls.prototype = new superClass(); // 상속\n };\n var wrapper = function wrapper() {\n if (!this || !(this instanceof wrapper)) throw 'invalid call';\n var instance = factory(cls, arguments);\n return initInstance(config.className, config.version || \"\", instance);\n };\n initPrototype.call(this, cls);\n classStore[config.className] = wrapper;\n }\n\n return {\n root: axUi,\n addClass: addClass\n };\n}();\n\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n * https://github.com/thomasJang/mustache.js -- imporove some variables\n */\n\n(function defineMustache(global, factory) {\n\n factory(global.mustache = {});\n})(window.ax5, function mustacheFactory(mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill(object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction(object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr(obj) {\n return isArray(obj) ? 'array' : typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty(obj, propName) {\n return obj != null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && propName in obj;\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''', '/': '/'\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate(template, tags) {\n if (!template) return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length) {\n delete tokens[spaces.pop()];\n }\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === 'string') tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push(['text', chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe)) break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe)) throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection) throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos() {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0) return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re),\n match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context(view, parentContext) {\n this.view = view;\n this.cache = {\n '.': this.view,\n '@each': function each() {\n var returns = [];\n for (var k in this) {\n returns.push({ '@key': k, '@value': this[k] });\n }\n return returns;\n }\n };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup(name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this,\n names,\n index,\n lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1) lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value)) value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer() {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache() {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse(template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null) tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render(template, view, partials) {\n var tokens = this.parse(template);\n var context = view instanceof Context ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate) {\n var buffer = '';\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);else if (symbol === '&') value = this.unescapedValue(token, context);else if (symbol === 'name') value = this.escapedValue(token, context);else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined) buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n if (value[j]) {\n if (_typeof(value[j]) === 'object') {\n value[j]['@i'] = j;\n value[j]['@first'] = j === 0;\n }\n\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n }\n } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string') throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null) buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || isArray(value) && value.length === 0) return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial(token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.1.3';\n mustache.tags = ['{{', '}}'];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render(template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' + 'but \"' + typeStr(template) + '\" was given as the first ' + 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html(template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n});","\"use strict\";\n\n// ax5.ui.formatter\n(function () {\n var UI = ax5.ui;\n var U = ax5.util;\n var FORMATTER = void 0;\n\n UI.addClass({\n className: \"formatter\"\n }, function () {\n var TODAY = new Date();\n var setSelectionRange = function setSelectionRange(input, pos) {\n if (typeof pos == \"undefined\") {\n pos = input.value.length;\n }\n if (input.setSelectionRange) {\n input.focus();\n input.setSelectionRange(pos, pos);\n } else if (input.createTextRange) {\n var range = input.createTextRange();\n range.collapse(true);\n range.moveEnd('character', pos);\n range.moveStart('character', pos);\n range.select();\n } else if (input.selectionStart) {\n input.focus();\n input.selectionStart = pos;\n input.selectionEnd = pos;\n }\n };\n\n /**\n * @class ax5formatter\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * $('#idInputTime').attr('data-ax5formatter', 'time').ax5formatter();\n * $('#idInputMoney').attr('data-ax5formatter', 'money').ax5formatter();\n * $('#idInputPhone').attr('data-ax5formatter', 'phone').ax5formatter();\n * $('#idInputDate').attr('data-ax5formatter', 'date').ax5formatter();\n *\n * $('#ax5formatter-custom').ax5formatter({\n * pattern: \"custom\",\n * getEnterableKeyCodes: function(){\n * return {\n * '65':'a',\n * '66':'b',\n * '67':'c',\n * '68':'d',\n * '69':'e',\n * '70':'f'\n * };\n * },\n * getPatternValue: function(obj){\n * return obj.value.replace(/./g, \"*\");\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n animateTime: 250\n };\n\n this.queue = [];\n this.openTimer = null;\n this.closeTimer = null;\n\n cfg = this.config;\n\n var formatterEvent = {\n 'focus': function focus(opts, optIdx, e) {\n if (!opts.$input.data(\"__originValue__\")) opts.$input.data(\"__originValue__\", opts.$input.val());\n },\n /* 키 다운 이벤트에서 입력할 수 없는 키 입력을 방어 */\n 'keydown': function keydown(opts, optIdx, e) {\n var isStop = false;\n if (!opts.enterableKeyCodes) {} else if (e.which && opts.enterableKeyCodes[e.which]) {} else if (!e.metaKey && !e.ctrlKey && !e.shiftKey) {\n //console.log(e.which, opts.enterableKeyCodes);\n isStop = true;\n }\n if (isStop) ax5.util.stopEvent(e);\n },\n /* 키 업 이벤트에서 패턴을 적용 */\n 'keyup': function keyup(opts, optIdx, e) {\n var elem = opts.$input.get(0),\n elemFocusPosition,\n beforeValue,\n newValue,\n selection,\n selectionLength;\n\n if ('selectionStart' in elem) {\n // Standard-compliant browsers\n elemFocusPosition = elem.selectionStart;\n } else if (document.selection) {\n // IE\n //elem.focus();\n selection = document.selection.createRange();\n selectionLength = document.selection.createRange().text.length;\n selection.moveStart('character', -elem.value.length);\n elemFocusPosition = selection.text.length - selectionLength;\n }\n\n beforeValue = elem.value;\n if (opts.pattern in FORMATTER.formatter) {\n newValue = FORMATTER.formatter[opts.pattern].getPatternValue.call(this, opts, optIdx, e, elem.value);\n } else {\n newValue = beforeValue;\n }\n\n if (newValue != beforeValue) {\n opts.$input.val(newValue).trigger(\"change\");\n setSelectionRange(elem, elemFocusPosition + newValue.length - beforeValue.length);\n }\n },\n 'blur': function blur(opts, optIdx, e, _force) {\n var elem = opts.$input.get(0),\n beforeValue,\n newValue;\n\n opts.$input.removeData(\"__originValue__\");\n\n beforeValue = elem.value;\n if (opts.pattern in FORMATTER.formatter) {\n newValue = FORMATTER.formatter[opts.pattern].getPatternValue.call(this, opts, optIdx, e, elem.value, 'blur');\n } else {\n newValue = beforeValue;\n }\n\n if (_force) {\n opts.$input.val(newValue);\n } else {\n if (newValue != beforeValue) {\n opts.$input.val(newValue).trigger(\"change\");\n }\n }\n }\n };\n\n var bindFormatterTarget = function bindFormatterTarget(opts, optIdx) {\n\n if (!opts.pattern) {\n if (opts.$target.get(0).tagName == \"INPUT\") {\n opts.pattern = opts.$target.attr('data-ax5formatter');\n } else {\n opts.pattern = opts.$target.find('input[type=\"text\"]').attr('data-ax5formatter');\n }\n if (!opts.pattern) {\n console.log(ax5.info.getError(\"ax5formatter\", \"501\", \"bind\"));\n console.log(opts.target);\n return this;\n }\n }\n\n var re = /[^\\(^\\))]+/gi,\n matched = opts.pattern.match(re);\n\n opts.pattern = matched[0];\n opts.patternArgument = matched[1] || \"\";\n\n // 함수타입\n if (opts.pattern in FORMATTER.formatter) {\n opts.enterableKeyCodes = FORMATTER.formatter[opts.pattern].getEnterableKeyCodes.call(this, opts, optIdx);\n }\n\n opts.$input.unbind('focus.ax5formatter').bind('focus.ax5formatter', formatterEvent.focus.bind(this, this.queue[optIdx], optIdx));\n\n opts.$input.unbind('keydown.ax5formatter').bind('keydown.ax5formatter', formatterEvent.keydown.bind(this, this.queue[optIdx], optIdx));\n\n opts.$input.unbind('keyup.ax5formatter').bind('keyup.ax5formatter', formatterEvent.keyup.bind(this, this.queue[optIdx], optIdx));\n\n opts.$input.unbind('blur.ax5formatter').bind('blur.ax5formatter', formatterEvent.blur.bind(this, this.queue[optIdx], optIdx));\n\n formatterEvent.blur.call(this, this.queue[optIdx], optIdx);\n\n return this;\n };\n\n var getQueIdx = function getQueIdx(boundID) {\n if (!U.isString(boundID)) {\n boundID = jQuery(boundID).data(\"data-formatter\");\n }\n /*\n if (!U.isString(boundID)) {\n console.log(ax5.info.getError(\"ax5formatter\", \"402\", \"getQueIdx\"));\n return;\n }\n */\n return U.search(this.queue, function () {\n return this.id == boundID;\n });\n };\n\n /**\n * Preferences of formatter UI\n * @method ax5formatter.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5.ui.formatter}\n * @example\n * ```\n * ```\n */\n this.init = function () {};\n\n this.bind = function (opts) {\n var formatterConfig = {},\n optIdx = void 0;\n\n jQuery.extend(true, formatterConfig, cfg);\n if (opts) jQuery.extend(true, formatterConfig, opts);\n opts = formatterConfig;\n\n if (!opts.target) {\n console.log(ax5.info.getError(\"ax5formatter\", \"401\", \"bind\"));\n return this;\n }\n opts.$target = jQuery(opts.target);\n\n if (opts.$target.get(0).tagName == \"INPUT\") {\n opts.$input = opts.$target;\n } else {\n opts.$input = opts.$target.find('input[type=\"text\"]');\n if (opts.$input.length > 1) {\n opts.$input.each(function () {\n opts.target = this;\n self.bind(opts);\n });\n return this;\n }\n }\n\n opts.$input = opts.$target.get(0).tagName == \"INPUT\" ? opts.$target : opts.$target.find('input[type=\"text\"]');\n if (!opts.id) opts.id = opts.$input.data(\"ax5-formatter\");\n\n if (!opts.id) {\n opts.id = 'ax5-formatter-' + ax5.getGuid();\n opts.$input.data(\"ax5-formatter\", opts.id);\n }\n optIdx = U.search(this.queue, function () {\n return this.id == opts.id;\n });\n\n if (optIdx === -1) {\n this.queue.push(opts);\n bindFormatterTarget.call(this, this.queue[this.queue.length - 1], this.queue.length - 1);\n } else {\n this.queue[optIdx] = opts;\n bindFormatterTarget.call(this, this.queue[optIdx], optIdx);\n }\n\n return this;\n };\n\n /**\n * formatter value 를 다시 적용합니다.\n * @method ax5formatter.formatting\n * @returns {ax5formatter}\n * @example\n * ```js\n * $('[data-ax5formatter=\"time\"]').ax5formatter(\"formatting\"); // 하나만\n * $('[data-ax5formatter]').ax5formatter(\"formatting\"); // 모두\n * ```\n */\n this.formatting = function (boundID) {\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID);\n if (queIdx === -1) {\n var i = this.queue.length;\n while (i--) {\n formatterEvent.blur.call(this, this.queue[i], i, null, true);\n }\n } else {\n formatterEvent.blur.call(this, this.queue[queIdx], queIdx, null, true);\n }\n return this;\n };\n\n this.unbind = function () {\n // 구현해야함.\n };\n\n // 클래스 생성자\n this.main = function () {\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n FORMATTER = ax5.ui.formatter;\n})();\n// ax5.ui.formatter.formatter\n(function () {\n\n var FORMATTER = ax5.ui.formatter;\n var U = ax5.util;\n var TODAY = new Date();\n\n var ctrlKeys = {\n \"18\": \"KEY_ALT\",\n \"8\": \"KEY_BACKSPACE\",\n \"17\": \"KEY_CONTROL\",\n \"46\": \"KEY_DELETE\",\n \"40\": \"KEY_DOWN\",\n \"35\": \"KEY_END\",\n \"187\": \"KEY_EQUAL\",\n \"27\": \"KEY_ESC\",\n \"36\": \"KEY_HOME\",\n \"45\": \"KEY_INSERT\",\n \"37\": \"KEY_LEFT\",\n \"189\": \"KEY_MINUS\",\n \"34\": \"KEY_PAGEDOWN\",\n \"33\": \"KEY_PAGEUP\",\n // \"190\": \"KEY_PERIOD\",\n \"13\": \"KEY_RETURN\",\n \"39\": \"KEY_RIGHT\",\n \"16\": \"KEY_SHIFT\",\n // \"32\": \"KEY_SPACE\",\n \"9\": \"KEY_TAB\",\n \"38\": \"KEY_UP\",\n \"91\": \"KEY_WINDOW\"\n //\"107\" : \"NUMPAD_ADD\",\n //\"194\" : \"NUMPAD_COMMA\",\n //\"110\" : \"NUMPAD_DECIMAL\",\n //\"111\" : \"NUMPAD_DIVIDE\",\n //\"12\" : \"NUMPAD_EQUAL\",\n //\"106\" : \"NUMPAD_MULTIPLY\",\n //\"109\" : \"NUMPAD_SUBTRACT\"\n };\n var numKeys = {\n '48': 1, '49': 1, '50': 1, '51': 1, '52': 1, '53': 1, '54': 1, '55': 1, '56': 1, '57': 1,\n '96': 1, '97': 1, '98': 1, '99': 1, '100': 1, '101': 1, '102': 1, '103': 1, '104': 1, '105': 1\n };\n var pattern_money = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '188': ','\n };\n if (_opts.patternArgument == \"int\") {\n // 소수점 입력 안됨\n } else {\n enterableKeyCodes['190'] = \".\"; // 소수점 입력 허용\n }\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/[^0-9^\\.^\\-]/g, \"\");\n var regExpPattern = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n arrNumber = val.split('.'),\n returnValue;\n\n arrNumber[0] += '.';\n\n do {\n arrNumber[0] = arrNumber[0].replace(regExpPattern, '$1,$2');\n } while (regExpPattern.test(arrNumber[0]));\n\n if (arrNumber.length > 1) {\n if (U.isNumber(_opts.maxRound)) {\n returnValue = arrNumber[0] + U.left(arrNumber[1], _opts.maxRound);\n } else {\n returnValue = arrNumber.join('');\n }\n } else {\n returnValue = arrNumber[0].split('.')[0];\n }\n\n return returnValue;\n }\n };\n\n var pattern_number = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '190': '.',\n '110': '.'\n\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/[^0-9^\\.^\\-]/g, \"\");\n var arrNumber = val.split('.'),\n returnValue;\n\n arrNumber[0] += \".\";\n\n if (arrNumber.length > 1) {\n if (U.isNumber(_opts.maxRound)) {\n returnValue = arrNumber[0] + U.left(arrNumber[1], _opts.maxRound);\n } else {\n returnValue = arrNumber.join('');\n }\n } else {\n returnValue = arrNumber[0].split('.')[0];\n }\n\n return returnValue;\n }\n };\n\n var pattern_date = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-', '191': '/'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n if (val == \"\") return val;\n var regExpPattern = /^([0-9]{4})\\-?([0-9]{1,2})?\\-?([0-9]{1,2})?.*$/;\n\n if (_opts.patternArgument == \"time\") {\n regExpPattern = /^([0-9]{4})\\-?([0-9]{1,2})?\\-?([0-9]{1,2})? ?([0-9]{1,2})?:?([0-9]{1,2})?:?([0-9]{1,2})?.*$/;\n } else if (_opts.patternArgument == \"year\") {\n regExpPattern = /^([0-9]{0,4})?.*$/;\n } else if (_opts.patternArgument == \"month\") {\n regExpPattern = /^([0-9]{4})\\-?([0-9]{1,2})?.*$/;\n }\n\n var matchedPattern = val.match(regExpPattern),\n returnValue = \"\",\n inspectValue = function inspectValue(val, format, inspect, data) {\n var _val = {\n 'Y': function Y(v) {\n if (typeof v == \"undefined\") v = TODAY.getFullYear();\n if (v == '' || v == '0000') v = TODAY.getFullYear();\n return v.length < 4 ? U.setDigit(v, 4) : v;\n },\n 'M': function M(v) {\n if (typeof v == \"undefined\") v = TODAY.getMonth() + 1;\n return v > 12 ? 12 : v == 0 ? '01' : U.setDigit(v, 2);\n },\n 'D': function D(v) {\n if (typeof v == \"undefined\") v = TODAY.getDate() + 1;\n var dLen = U.daysOfMonth(data[1], data[2] - 1);\n return v > dLen ? dLen : v == 0 ? '01' : U.setDigit(v, 2);\n },\n 'h': function h(v) {\n if (!v) v = 0;\n return v > 23 ? 23 : U.setDigit(v, 2);\n },\n 'm': function m(v) {\n if (!v) v = 0;\n return v > 59 ? 59 : U.setDigit(v, 2);\n },\n 's': function s(v) {\n if (!v) v = 0;\n return v > 59 ? 59 : U.setDigit(v, 2);\n }\n };\n return inspect ? _val[format](val) : val;\n };\n\n returnValue = val.replace(regExpPattern, function (a, b) {\n var nval = [];\n\n if (_opts.patternArgument == \"year\") {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n } else if (_opts.patternArgument == \"month\") {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n if (arguments[2] || eType) nval.push('-' + inspectValue(arguments[2], \"M\", eType));\n } else if (_opts.patternArgument == \"time\") {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n if (arguments[2] || eType) nval.push('-' + inspectValue(arguments[2], \"M\", eType));\n if (arguments[3] || eType) nval.push('-' + inspectValue(arguments[3], \"D\", eType, arguments));\n if (arguments[4] || eType) nval.push(' ' + inspectValue(arguments[4], \"h\", eType));\n if (arguments[5] || eType) nval.push(':' + inspectValue(arguments[5], \"m\", eType));\n if (arguments[6] || eType) nval.push(':' + inspectValue(arguments[6], \"s\", eType));\n } else {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n if (arguments[2] || eType) nval.push('-' + inspectValue(arguments[2], \"M\", eType));\n if (arguments[3] || eType) nval.push('-' + inspectValue(arguments[3], \"D\", eType, arguments));\n }\n return nval.join('');\n });\n\n if (eType == 'blur' && !matchedPattern) {\n returnValue = function () {\n var nval = [];\n\n if (_opts.patternArgument == \"year\") {\n nval.push(inspectValue(0, \"Y\", eType));\n } else if (_opts.patternArgument == \"month\") {\n nval.push(inspectValue(0, \"Y\", eType));\n nval.push('-' + inspectValue(0, \"M\", eType));\n } else if (_opts.patternArgument == \"time\") {\n nval.push(inspectValue(0, \"Y\", eType));\n nval.push('-' + inspectValue(0, \"M\", eType));\n nval.push('-' + inspectValue(0, \"D\", eType, arguments));\n nval.push(' ' + inspectValue(0, \"h\", eType));\n nval.push(':' + inspectValue(0, \"m\", eType));\n nval.push(':' + inspectValue(0, \"s\", eType));\n } else {\n nval.push(inspectValue(0, \"Y\", eType));\n nval.push('-' + inspectValue(0, \"M\", eType));\n nval.push('-' + inspectValue(0, \"D\", eType, arguments));\n }\n return nval.join('');\n }();\n } else if (!matchedPattern) returnValue = returnValue.length > 4 ? U.left(returnValue, 4) : returnValue;\n\n return returnValue;\n }\n };\n\n var pattern_time = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '186': ':'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n var regExpPattern = /^([0-9]{1,2})?:?([0-9]{1,2})?:?([0-9]{1,2})?.*$/;\n\n var matchedPattern = val.match(regExpPattern),\n returnValue = val.replace(regExpPattern, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(':' + arguments[2]);\n if (arguments[3]) nval.push(':' + arguments[3]);\n return nval.join('');\n });\n\n if (!matchedPattern) returnValue = returnValue.length > 2 ? U.left(returnValue, 2) : returnValue;\n\n return returnValue;\n }\n };\n\n var pattern_bizno = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n var regExpPattern = /^([0-9]{3})\\-?([0-9]{1,2})?\\-?([0-9]{1,5})?.*$/,\n returnValue = val.replace(regExpPattern, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(arguments[2]);\n if (arguments[3]) nval.push(arguments[3]);\n return nval.join(\"-\");\n });\n\n return returnValue;\n }\n };\n\n var pattern_phone = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-', '188': ','\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n var regExpPattern3 = /^([0-9]{3})\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?/;\n if (val.substr(0, 2) == \"02\") {\n regExpPattern3 = /^([0-9]{2})\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?/;\n }\n\n var returnValue = val.replace(regExpPattern3, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(arguments[2]);\n if (arguments[3]) nval.push(arguments[3]);\n if (arguments[4]) nval.push(arguments[4]);\n if (arguments[5]) nval.push(arguments[5]);\n return nval.join(\"-\");\n });\n return returnValue;\n }\n };\n\n var pattern_credit = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\").substring(0, 16);\n\n var regExpPattern3 = /^([0-9]{4})\\-?([0-9]{4})?\\-?([0-9]{4})?\\-?([0-9]{4})?/,\n returnValue = val.replace(regExpPattern3, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(arguments[2]);\n if (arguments[3]) nval.push(arguments[3]);\n if (arguments[4]) nval.push(arguments[4]);\n return nval.join(\"-\");\n });\n return returnValue;\n }\n };\n\n var pattern_custom = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n if (_opts.getEnterableKeyCodes) {\n return _opts.getEnterableKeyCodes.call(_opts, { $input: _opts.$input });\n } else {\n return null;\n }\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n if (_opts.getPatternValue) {\n return _opts.getPatternValue.call(_opts, { event: e, $input: _opts.$input, value: val });\n }\n }\n };\n\n FORMATTER.formatter = {\n ctrlKeys: ctrlKeys,\n numKeys: numKeys,\n money: pattern_money,\n number: pattern_number,\n date: pattern_date,\n time: pattern_time,\n bizno: pattern_bizno,\n phone: pattern_phone,\n credit: pattern_credit,\n custom: pattern_custom\n };\n})();\n\n/*\n * Copyright (c) 2017. tom@axisj.com\n * - github.com/thomasjang\n * - www.axisj.com\n */\n\nax5.ui.formatter_instance = new ax5.ui.formatter();\n\njQuery.fn.ax5formatter = function () {\n return function (config) {\n if (ax5.util.isString(arguments[0])) {\n var methodName = arguments[0];\n\n switch (methodName) {\n case \"formatting\":\n return ax5.ui.formatter_instance.formatting(this);\n break;\n\n case \"unbind\":\n return ax5.ui.formatter_instance.unbind(this);\n break;\n\n default:\n return this;\n }\n } else {\n if (typeof config == \"undefined\") config = {};\n jQuery.each(this, function () {\n var defaultConfig = {\n target: this\n };\n config = jQuery.extend({}, config, defaultConfig);\n ax5.ui.formatter_instance.bind(config);\n });\n }\n return this;\n };\n}();","'use strict';\n\n// ax5.ui.mask\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var MASK = void 0;\n\n UI.addClass({\n className: \"mask\"\n }, function () {\n /**\n * @class ax5mask\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '
    ' +\n * '
    ' +\n * '
    ' +\n * ' {{{body}}}' +\n * '
    ' +\n * '
    ';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * var mask = new ax5.ui.mask();\n *\n * mask.open({\n * templateName: 'customMask',\n * content: 'custom MASK on target',\n * target: $(\"#user-content\").get(0),\n * onClick: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n theme: '',\n target: jQuery(document.body).get(0),\n animateTime: 250\n };\n this.maskContent = '';\n this.status = \"off\";\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n };\n var getBodyTmpl = function getBodyTmpl(data) {\n if (typeof data.templateName === \"undefined\") data.templateName = \"defaultMask\";\n return MASK.tmpl.get.call(this, data.templateName, data);\n };\n var setBody = function setBody(content) {\n this.maskContent = content;\n };\n\n /**\n * Preferences of Mask UI\n * @method ax5mask.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5mask}\n * @example\n * ```\n * setConfig({\n * target : {Element|AX5 nodelist}, // 마스크 처리할 대상\n * content : {String}, // 마스크안에 들어가는 내용물\n * onStateChanged: function(){} // 마스크 상태변경 시 호출되는 함수 this.type으로 예외처리 가능\n * }\n * ```\n */\n this.init = function () {\n // after setConfig();\n this.onStateChanged = cfg.onStateChanged;\n this.onClick = cfg.onClick;\n if (this.config.content) setBody.call(this, this.config.content);\n };\n\n /**\n * open mask\n * target 을 주지 않으면 기본적으로 body 에 마스크가 적용되고 원하는 타겟을 지정해서 마스크를 씌울 수 있습니다.\n * 기본 정의된 마스크 외에 사용자가 템플릿을 정의해서 마스크를 사용 가능합니다.\n * @method ax5mask.open\n * @param {Object} config\n * @param {String} config\n * @returns {ax5mask}\n * @example\n * ```js\n * my_mask.open({\n * target: document.body,\n * content: \"

    Loading..

    \",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"

    Loading..

    \",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n *\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '
    ' +\n * '
    ' +\n * '
    ' +\n * ' {{{body}}}' +\n * '
    ' +\n * '
    ';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"

    Loading..

    \",\n * \n * onStateChanged: function () {\n *\n * }\n * });\n * ```\n */\n this.open = function (options) {\n\n if (this.status === \"on\") this.close();\n if (options && options.content) setBody.call(this, options.content);\n if (options && typeof options.templateName === \"undefined\") options.templateName = \"defaultMask\";\n self.maskConfig = jQuery.extend(true, {}, this.config, options);\n\n var _cfg = self.maskConfig,\n target = _cfg.target,\n $target = jQuery(target),\n maskId = 'ax-mask-' + ax5.getGuid(),\n $mask = void 0,\n css = {},\n that = {},\n templateName = _cfg.templateName,\n body = getBodyTmpl({\n theme: _cfg.theme,\n maskId: maskId,\n body: this.maskContent,\n templateName: templateName\n });\n\n jQuery(document.body).append(body);\n\n // 마스크의 타겟이 html body 가 아니라면\n if (target && target !== jQuery(document.body).get(0)) {\n css = {\n position: _cfg.position || \"absolute\",\n left: $target.offset().left,\n top: $target.offset().top,\n width: $target.outerWidth(),\n height: $target.outerHeight()\n };\n\n $target.addClass(\"ax-masking\");\n\n // 마스크의 타겟이 html body가 아닌경우 window resize 이벤트를 추적하여 엘리먼트 마스크의 CSS 속성 변경\n jQuery(window).on(\"resize.ax5mask-\" + this.instanceId, function (_$target) {\n this.align();\n }.bind(this));\n }\n\n if (typeof self.maskConfig.zIndex !== \"undefined\") {\n css[\"z-index\"] = self.maskConfig.zIndex;\n }\n\n this.$mask = $mask = jQuery(\"#\" + maskId);\n this.$target = $target;\n this.status = \"on\";\n $mask.css(css);\n\n if (_cfg.onClick) {\n $mask.on(\"click\", function (e) {\n that = {\n self: self,\n state: \"open\",\n type: \"click\"\n };\n self.maskConfig.onClick.call(that, that);\n });\n }\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"open\"\n });\n\n options = null;\n _cfg = null;\n target = null;\n $target = null;\n maskId = null;\n $mask = null;\n css = null;\n that = null;\n templateName = null;\n body = null;\n\n return this;\n };\n\n /**\n * close mask\n * @method ax5mask.close\n * @param {Number} [_delay=0]\n * @returns {ax5mask}\n * @example\n * ```\n * my_mask.close();\n * ```\n */\n this.close = function (_delay) {\n if (this.$mask) {\n var _close = function _close() {\n this.status = \"off\";\n this.$mask.remove();\n this.$target.removeClass(\"ax-masking\");\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"close\"\n });\n\n jQuery(window).off(\"resize.ax5mask-\" + this.instanceId);\n };\n\n if (_delay) {\n setTimeout(function () {\n _close.call(this);\n }.bind(this), _delay);\n } else {\n _close.call(this);\n }\n }\n return this;\n };\n\n /**\n * @method ax5mask.fadeOut\n * @returns {ax5mask}\n */\n this.fadeOut = function () {\n if (this.$mask) {\n var _close = function _close() {\n this.status = \"off\";\n this.$mask.remove();\n this.$target.removeClass(\"ax-masking\");\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"close\"\n });\n\n jQuery(window).off(\"resize.ax5mask-\" + this.instanceId);\n };\n\n this.$mask.addClass(\"fade-out\");\n setTimeout(function () {\n _close.call(this);\n }.bind(this), cfg.animateTime);\n }\n return this;\n };\n\n /**\n * @method ax5mask.align\n * @returns {ax5mask}\n */\n this.align = function () {\n if (this.maskConfig && this.maskConfig.target && this.maskConfig.target !== jQuery(document.body).get(0)) {\n try {\n var css = {\n position: this.maskConfig.position || \"absolute\",\n left: this.$target.offset().left,\n top: this.$target.offset().top,\n width: this.$target.outerWidth(),\n height: this.$target.outerHeight()\n };\n this.$mask.css(css);\n } catch (e) {}\n }\n return this;\n };\n\n this.pullRequest = function () {\n console.log(\"test pullRequest01\");\n console.log(\"test pullRequest02\");\n };\n\n // 클래스 생성자\n this.main = function () {\n\n UI.mask_instance = UI.mask_instance || [];\n UI.mask_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n MASK = ax5.ui.mask;\n})();\n// ax5.ui.mask.tmpl\n(function () {\n\n var MASK = ax5.ui.mask;\n\n var defaultMask = function defaultMask(columnKeys) {\n return '\\n
    \\n
    \\n
    \\n
    \\n {{{body}}}\\n
    \\n
    \\n
    \\n ';\n };\n\n MASK.tmpl = {\n \"defaultMask\": defaultMask,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(MASK.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n/*\n * Copyright (c) 2016. tom@axisj.com\n * - github.com/thomasjang\n * - www.axisj.com\n */\n\n// ax5.ui.modal\n(function () {\n var UI = ax5.ui;\n var U = ax5.util;\n var MODAL = void 0;\n\n UI.addClass({\n className: \"modal\"\n }, function () {\n /**\n * @class ax5modal\n * @alias ax5.ui.modal\n * @author tom@axisj.com\n */\n return function () {\n var self = this,\n cfg = void 0,\n ENM = {\n mousedown: ax5.info.supportTouch ? \"touchstart\" : \"mousedown\",\n mousemove: ax5.info.supportTouch ? \"touchmove\" : \"mousemove\",\n mouseup: ax5.info.supportTouch ? \"touchend\" : \"mouseup\"\n },\n getMousePosition = function getMousePosition(e) {\n var mouseObj = e;\n if (\"changedTouches\" in e && e.changedTouches) {\n mouseObj = e.changedTouches[0];\n }\n return {\n clientX: mouseObj.clientX,\n clientY: mouseObj.clientY\n };\n };\n\n this.instanceId = ax5.getGuid();\n this.config = {\n id: \"ax5-modal-\" + this.instanceId,\n position: {\n left: \"center\",\n top: \"middle\",\n margin: 10\n },\n minimizePosition: \"bottom-right\",\n clickEventName: \"ontouchstart\" in document.documentElement ? \"touchstart\" : \"click\",\n theme: \"default\",\n width: 300,\n height: 400,\n closeToEsc: true,\n disableDrag: false,\n disableResize: false,\n animateTime: 250,\n iframe: false\n };\n this.activeModal = null;\n this.watingModal = false;\n this.$ = {}; // UI inside of the jQuery object store\n\n cfg = this.config; // extended config copy cfg\n\n var onStateChanged = function onStateChanged(opts, that) {\n var eventProcessor = {\n resize: function resize(that) {\n if (opts && opts.onResize) {\n opts.onResize.call(that, that);\n } else if (this.onResize) {\n this.onResize.call(that, that);\n }\n },\n move: function move() {}\n };\n if (that.state in eventProcessor) {\n eventProcessor[that.state].call(this, that);\n }\n\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n return true;\n },\n getContent = function getContent(modalId, opts) {\n var data = {\n modalId: modalId,\n theme: opts.theme,\n header: opts.header,\n fullScreen: opts.fullScreen ? \"fullscreen\" : \"\",\n styles: \"\",\n iframe: opts.iframe,\n iframeLoadingMsg: opts.iframeLoadingMsg,\n disableResize: opts.disableResize\n };\n\n if (opts.zIndex) {\n data.styles += \"z-index:\" + opts.zIndex + \";\";\n }\n if (opts.absolute) {\n data.styles += \"position:absolute;\";\n }\n\n if (data.iframe && typeof data.iframe.param === \"string\") {\n data.iframe.param = ax5.util.param(data.iframe.param);\n }\n\n return MODAL.tmpl.get.call(this, \"content\", data, {});\n },\n open = function open(opts, callback) {\n var that = void 0;\n jQuery(document.body).append(getContent.call(this, opts.id, opts));\n\n this.activeModal = jQuery(\"#\" + opts.id);\n // 파트수집\n this.$ = {\n root: this.activeModal,\n header: this.activeModal.find('[data-modal-els=\"header\"]'),\n body: this.activeModal.find('[data-modal-els=\"body\"]')\n };\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"] = this.activeModal.find('[data-modal-els=\"iframe-wrap\"]');\n this.$[\"iframe\"] = this.activeModal.find('[data-modal-els=\"iframe\"]');\n this.$[\"iframe-form\"] = this.activeModal.find('[data-modal-els=\"iframe-form\"]');\n this.$[\"iframe-loading\"] = this.activeModal.find('[data-modal-els=\"iframe-loading\"]');\n } else {\n this.$[\"body-frame\"] = this.activeModal.find('[data-modal-els=\"body-frame\"]');\n }\n\n //- position 정렬\n this.align();\n\n that = {\n self: this,\n id: opts.id,\n theme: opts.theme,\n width: opts.width,\n height: opts.height,\n state: \"open\",\n $: this.$\n };\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"].css({ height: opts.height });\n this.$[\"iframe\"].css({ height: opts.height });\n\n // iframe content load\n this.$[\"iframe-form\"].attr({ method: opts.iframe.method });\n this.$[\"iframe-form\"].attr({ target: opts.id + \"-frame\" });\n this.$[\"iframe-form\"].attr({ action: opts.iframe.url });\n this.$[\"iframe\"].on(\"load\", function () {\n that.state = \"load\";\n if (opts.iframeLoadingMsg) {\n this.$[\"iframe-loading\"].hide();\n }\n onStateChanged.call(this, opts, that);\n }.bind(this));\n if (!opts.iframeLoadingMsg) {\n this.$[\"iframe\"].show();\n }\n this.$[\"iframe-form\"].submit();\n }\n\n if (callback) callback.call(that, that);\n\n if (!this.watingModal) {\n onStateChanged.call(this, opts, that);\n }\n\n // bind key event\n if (opts.closeToEsc) {\n jQuery(window).bind(\"keydown.ax-modal\", function (e) {\n onkeyup.call(this, e || window.event);\n }.bind(this));\n }\n\n jQuery(window).bind(\"resize.ax-modal\", function (e) {\n this.align(null, e || window.event);\n }.bind(this));\n\n this.$.header.off(ENM[\"mousedown\"]).off(\"dragstart\").on(ENM[\"mousedown\"], function (e) {\n /// 이벤트 필터링 추가 : 버튼엘리먼트로 부터 발생된 이벤트이면 moveModal 시작하지 않도록 필터링\n var isButton = U.findParentNode(e.target, function (_target) {\n if (_target.getAttribute(\"data-modal-header-btn\")) {\n return true;\n }\n });\n\n if (!opts.isFullScreen && !isButton && opts.disableDrag != true) {\n self.mousePosition = getMousePosition(e);\n moveModal.on.call(self);\n }\n if (isButton) {\n btnOnClick.call(self, e || window.event, opts);\n }\n }).on(\"dragstart\", function (e) {\n U.stopEvent(e.originalEvent);\n return false;\n });\n\n this.activeModal.off(ENM[\"mousedown\"]).off(\"dragstart\").on(ENM[\"mousedown\"], \"[data-ax5modal-resizer]\", function (e) {\n if (opts.disableDrag || opts.isFullScreen) return false;\n self.mousePosition = getMousePosition(e);\n resizeModal.on.call(self, this.getAttribute(\"data-ax5modal-resizer\"));\n }).on(\"dragstart\", function (e) {\n U.stopEvent(e.originalEvent);\n return false;\n });\n },\n btnOnClick = function btnOnClick(e, opts, callback, target, k) {\n var that = void 0;\n if (e.srcElement) e.target = e.srcElement;\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-modal-header-btn\")) {\n return true;\n }\n });\n\n if (target) {\n k = target.getAttribute(\"data-modal-header-btn\");\n\n that = {\n self: this,\n key: k,\n value: opts.header.btns[k],\n dialogId: opts.id,\n btnTarget: target\n };\n\n if (opts.header.btns[k].onClick) {\n opts.header.btns[k].onClick.call(that, k);\n }\n }\n\n that = null;\n opts = null;\n callback = null;\n target = null;\n k = null;\n },\n onkeyup = function onkeyup(e) {\n if (e.keyCode == ax5.info.eventKeys.ESC) {\n this.close();\n }\n },\n alignProcessor = {\n \"top-left\": function topLeft() {\n this.align({ left: \"left\", top: \"top\" });\n },\n \"top-right\": function topRight() {\n this.align({ left: \"right\", top: \"top\" });\n },\n \"bottom-left\": function bottomLeft() {\n this.align({ left: \"left\", top: \"bottom\" });\n },\n \"bottom-right\": function bottomRight() {\n this.align({ left: \"right\", top: \"bottom\" });\n },\n \"center-middle\": function centerMiddle() {\n this.align({ left: \"center\", top: \"middle\" });\n }\n },\n moveModal = {\n on: function on() {\n var modalZIndex = this.activeModal.css(\"z-index\"),\n modalOffset = this.activeModal.offset(),\n modalBox = {\n width: this.activeModal.outerWidth(),\n height: this.activeModal.outerHeight()\n },\n windowBox = {\n width: jQuery(window).width(),\n height: jQuery(window).height(),\n scrollLeft: jQuery(document).scrollLeft(),\n scrollTop: jQuery(document).scrollTop()\n },\n getResizerPosition = function getResizerPosition(e) {\n self.__dx = e.clientX - self.mousePosition.clientX;\n self.__dy = e.clientY - self.mousePosition.clientY;\n\n /*\n if (minX > modalOffset.left + self.__dx) {\n self.__dx = -modalOffset.left;\n } else if (maxX < modalOffset.left + self.__dx) {\n self.__dx = maxX - modalOffset.left;\n }\n if (minY > modalOffset.top + self.__dy) {\n self.__dy = -modalOffset.top;\n } else if (maxY < modalOffset.top + self.__dy) {\n self.__dy = maxY - modalOffset.top;\n }\n */\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy\n };\n };\n\n var minX = 0,\n maxX = windowBox.width - modalBox.width,\n minY = 0,\n maxY = windowBox.height - modalBox.height;\n\n self.__dx = 0; // 변화량 X\n self.__dy = 0; // 변화량 Y\n\n // self.resizerBg : body 가 window보다 작을 때 문제 해결을 위한 DIV\n self.resizerBg = jQuery('
    ');\n self.resizer = jQuery('
    ');\n self.resizerBg.css({ zIndex: modalZIndex });\n self.resizer.css({\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height,\n zIndex: modalZIndex + 1\n });\n\n jQuery(document.body).append(self.resizerBg).append(self.resizer);\n\n self.activeModal.addClass(\"draged\");\n\n jQuery(document.body).on(ENM[\"mousemove\"] + \".ax5modal-move-\" + this.instanceId, function (e) {\n self.resizer.css(getResizerPosition(e));\n }).on(ENM[\"mouseup\"] + \".ax5modal-move-\" + this.instanceId, function (e) {\n moveModal.off.call(self);\n }).on(\"mouseleave.ax5modal-move-\" + this.instanceId, function (e) {\n moveModal.off.call(self);\n });\n\n jQuery(document.body).attr(\"unselectable\", \"on\").css(\"user-select\", \"none\").on(\"selectstart\", false);\n },\n off: function off() {\n var setModalPosition = function setModalPosition() {\n var box = this.resizer.offset();\n if (!this.modalConfig.absolute) {\n box.left -= jQuery(document).scrollLeft();\n box.top -= jQuery(document).scrollTop();\n }\n this.activeModal.css(box);\n this.modalConfig.left = box.left;\n this.modalConfig.top = box.top;\n\n box = null;\n };\n\n this.activeModal.removeClass(\"draged\");\n setModalPosition.call(this);\n\n this.resizer.remove();\n this.resizer = null;\n this.resizerBg.remove();\n this.resizerBg = null;\n //this.align();\n\n jQuery(document.body).off(ENM[\"mousemove\"] + \".ax5modal-move-\" + this.instanceId).off(ENM[\"mouseup\"] + \".ax5modal-move-\" + this.instanceId).off(\"mouseleave.ax5modal-move-\" + this.instanceId);\n\n jQuery(document.body).removeAttr(\"unselectable\").css(\"user-select\", \"auto\").off(\"selectstart\");\n\n onStateChanged.call(this, self.modalConfig, {\n self: this,\n state: \"move\"\n });\n }\n },\n resizeModal = {\n on: function on(resizerType) {\n var modalZIndex = this.activeModal.css(\"z-index\"),\n modalOffset = this.activeModal.offset(),\n modalBox = {\n width: this.activeModal.outerWidth(),\n height: this.activeModal.outerHeight()\n },\n windowBox = {\n width: jQuery(window).width(),\n height: jQuery(window).height(),\n scrollLeft: jQuery(document).scrollLeft(),\n scrollTop: jQuery(document).scrollTop()\n },\n resizerProcessor = {\n top: function top(e) {\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width,\n height: modalBox.height - self.__dy * 2\n };\n } else if (e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dy,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dy * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width,\n height: modalBox.height - self.__dy\n };\n }\n },\n bottom: function bottom(e) {\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey) {\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n\n return {\n left: modalOffset.left,\n top: modalOffset.top - self.__dy,\n width: modalBox.width,\n height: modalBox.height + self.__dy * 2\n };\n } else if (e.altKey) {\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dy,\n top: modalOffset.top - self.__dy,\n width: modalBox.width + self.__dy * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height + self.__dy\n };\n }\n },\n left: function left(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (e.shiftKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height\n };\n } else if (e.altKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dx,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height - self.__dx * 2\n };\n } else {\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx,\n height: modalBox.height\n };\n }\n },\n right: function right(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (e.shiftKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height\n };\n } else if (e.altKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top - self.__dx,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height + self.__dx * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width + self.__dx,\n height: modalBox.height\n };\n }\n },\n \"top-left\": function topLeft(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dx,\n height: modalBox.height - self.__dy\n };\n }\n },\n \"top-right\": function topRight(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width + self.__dx,\n height: modalBox.height - self.__dy\n };\n }\n },\n \"bottom-left\": function bottomLeft(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top - self.__dy,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx,\n height: modalBox.height + self.__dy\n };\n }\n },\n \"bottom-right\": function bottomRight(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top - self.__dy,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width + self.__dx,\n height: modalBox.height + self.__dy\n };\n }\n }\n },\n getResizerPosition = function getResizerPosition(e) {\n self.__dx = e.clientX - self.mousePosition.clientX;\n self.__dy = e.clientY - self.mousePosition.clientY;\n\n return resizerProcessor[resizerType](e);\n };\n\n var minWidth = 100,\n minHeight = 100;\n\n var cursorType = {\n top: \"row-resize\",\n bottom: \"row-resize\",\n left: \"col-resize\",\n right: \"col-resize\",\n \"top-left\": \"nwse-resize\",\n \"top-right\": \"nesw-resize\",\n \"bottom-left\": \"nesw-resize\",\n \"bottom-right\": \"nwse-resize\"\n };\n\n self.__dx = 0; // 변화량 X\n self.__dy = 0; // 변화량 Y\n\n // self.resizerBg : body 가 window보다 작을 때 문제 해결을 위한 DIV\n self.resizerBg = jQuery('
    ');\n self.resizer = jQuery('
    ');\n self.resizerBg.css({\n zIndex: modalZIndex,\n cursor: cursorType[resizerType]\n });\n self.resizer.css({\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height,\n zIndex: modalZIndex + 1,\n cursor: cursorType[resizerType]\n });\n jQuery(document.body).append(self.resizerBg).append(self.resizer);\n self.activeModal.addClass(\"draged\");\n\n jQuery(document.body).bind(ENM[\"mousemove\"] + \".ax5modal-resize-\" + this.instanceId, function (e) {\n self.resizer.css(getResizerPosition(e));\n }).bind(ENM[\"mouseup\"] + \".ax5modal-resize-\" + this.instanceId, function (e) {\n resizeModal.off.call(self);\n }).bind(\"mouseleave.ax5modal-resize-\" + this.instanceId, function (e) {\n resizeModal.off.call(self);\n });\n\n jQuery(document.body).attr(\"unselectable\", \"on\").css(\"user-select\", \"none\").bind(\"selectstart\", false);\n },\n off: function off() {\n var setModalPosition = function setModalPosition() {\n var box = this.resizer.offset();\n jQuery.extend(box, {\n width: this.resizer.width(),\n height: this.resizer.height()\n });\n if (!this.modalConfig.absolute) {\n box.left -= jQuery(document).scrollLeft();\n box.top -= jQuery(document).scrollTop();\n }\n this.activeModal.css(box);\n\n this.modalConfig.left = box.left;\n this.modalConfig.top = box.top;\n this.modalConfig.width = box.width;\n this.modalConfig.height = box.height;\n this.$[\"body\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n if (this.modalConfig.iframe) {\n this.$[\"iframe-wrap\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n this.$[\"iframe\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n }\n\n box = null;\n };\n\n this.activeModal.removeClass(\"draged\");\n setModalPosition.call(this);\n\n this.resizer.remove();\n this.resizer = null;\n this.resizerBg.remove();\n this.resizerBg = null;\n\n onStateChanged.call(this, self.modalConfig, {\n self: this,\n state: \"resize\"\n });\n\n jQuery(document.body).unbind(ENM[\"mousemove\"] + \".ax5modal-resize-\" + this.instanceId).unbind(ENM[\"mouseup\"] + \".ax5modal-resize-\" + this.instanceId).unbind(\"mouseleave.ax5modal-resize-\" + this.instanceId);\n\n jQuery(document.body).removeAttr(\"unselectable\").css(\"user-select\", \"auto\").unbind(\"selectstart\");\n }\n };\n\n /// private end\n\n /**\n * Preferences of modal UI\n * @method ax5modal.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Number} [config.zIndex]\n * @param {Object} [config.position]\n * @param {String} [config.position.left=\"center\"]\n * @param {String} [config.position.top=\"middle\"]\n * @param {Number} [config.position.margin=10]\n * @param {String} [config.minimizePosition=\"bottom-right\"]\n * @param {Number} [config.width=300]\n * @param {Number} [config.height=400]\n * @param {Boolean} [config.closeToEsc=true]\n * @param {Boolean} [config.absolute=false]\n * @param {Boolean} [config.disableDrag=false]\n * @param {Boolean} [config.disableResize=false]\n * @param {Number} [config.animateTime=250]\n * @param {Function} [config.fullScreen]\n * @param {Function} [config.onStateChanged] - `onStateChanged` function can be defined in setConfig method or new ax5.ui.modal initialization method. However, you can us to define an event function after initialization, if necessary\n * @param {Function} [config.onResize]\n * @returns {ax5modal}\n * @example\n * ```js\n * var modal = new ax5.ui.modal({\n * iframeLoadingMsg: '',\n * header: {\n * title: \"MODAL TITLE\",\n * btns: {\n * minimize: {\n * label: '', onClick: function () {\n * modal.minimize();\n * }\n * },\n * maximize: {\n * label: '', onClick: function () {\n * modal.maximize();\n * }\n * },\n * close: {\n * label: '', onClick: function () {\n * modal.close();\n * }\n * }\n * }\n * }\n * });\n *\n * modal.open({\n * width: 800,\n * height: 600,\n * fullScreen: function(){\n * return ($(window).width() < 600);\n * },\n * iframe: {\n * method: \"get\",\n * url: \"http://chequer-app:2017/html/login.html\",\n * param: \"callback=modalCallback\"\n * },\n * onStateChanged: function(){\n * console.log(this);\n * },\n * onResize: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n //== class body start\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n this.onResize = cfg.onResize;\n };\n\n /**\n * open the modal\n * @method ax5modal.open\n * @returns {ax5modal}\n * @example\n * ```\n * modal.open();\n * modal.open({\n * width: 500,\n * height: 500\n * });\n * moaal.open({}, function(){\n * console.log(this);\n * });\n * ```\n */\n this.open = function (opts, callback, tryCount) {\n if (typeof tryCount === \"undefined\") tryCount = 0;\n if (!this.activeModal) {\n opts = self.modalConfig = jQuery.extend(true, {}, cfg, opts);\n open.call(this, opts, callback);\n this.watingModal = false;\n } else if (tryCount < 3) {\n // 3번까지 재 시도\n this.watingModal = true;\n setTimeout(function () {\n this.open(opts, callback, tryCount + 1);\n }.bind(this), cfg.animateTime);\n } else {\n // 열기 시도 종료\n this.watingModal = false;\n }\n return this;\n };\n\n /**\n * close the modal\n * @method ax5modal.close\n * @param _option\n * @returns {ax5modal}\n * @example\n * ```\n * my_modal.close();\n * my_modal.close({callback: function(){\n * // on close event\n * });\n * // close 함수에 callback을 전달하면 정확한 close 타이밍을 캐치할 수 있습니다\n * ```\n */\n\n this.close = function (_option) {\n var opts = void 0,\n that = void 0;\n\n if (this.activeModal) {\n opts = self.modalConfig;\n this.activeModal.addClass(\"destroy\");\n jQuery(window).unbind(\"keydown.ax-modal\");\n jQuery(window).unbind(\"resize.ax-modal\");\n\n setTimeout(function () {\n // 프레임 제거\n if (opts.iframe) {\n var $iframe = this.$[\"iframe\"]; // iframe jQuery Object\n if ($iframe) {\n var iframeObject = $iframe.get(0),\n idoc = iframeObject.contentDocument ? iframeObject.contentDocument : iframeObject.contentWindow.document;\n\n try {\n $(idoc.body).children().each(function () {\n $(this).remove();\n });\n } catch (e) {}\n idoc.innerHTML = \"\";\n $iframe.attr(\"src\", \"about:blank\").remove();\n\n // force garbarge collection for IE only\n window.CollectGarbage && window.CollectGarbage();\n }\n }\n\n this.activeModal.remove();\n this.activeModal = null;\n\n // 모달 오픈 대기중이면 닫기 상태 전달 안함.\n if (!this.watingModal) {\n onStateChanged.call(this, opts, {\n self: this,\n state: \"close\"\n });\n }\n\n if (_option && U.isFunction(_option.callback)) {\n that = {\n self: this,\n id: opts.id,\n theme: opts.theme,\n width: opts.width,\n height: opts.height,\n state: \"close\",\n $: this.$\n };\n _option.callback.call(that, that);\n }\n }.bind(this), cfg.animateTime);\n }\n\n this.minimized = false; // hoksi\n\n return this;\n };\n\n /**\n * @method ax5modal.minimize\n * @returns {ax5modal}\n */\n this.minimize = function () {\n return function (minimizePosition) {\n if (this.minimized !== true) {\n var opts = self.modalConfig;\n if (typeof minimizePosition === \"undefined\") minimizePosition = cfg.minimizePosition;\n\n this.minimized = true;\n this.$.body.hide();\n self.modalConfig.originalHeight = opts.height;\n self.modalConfig.height = 0;\n alignProcessor[minimizePosition].call(this);\n\n onStateChanged.call(this, opts, {\n self: this,\n state: \"minimize\"\n });\n }\n\n return this;\n };\n }();\n\n /**\n * @method ax5modal.restore\n * @returns {ax5modal}\n */\n this.restore = function () {\n var opts = self.modalConfig;\n if (this.minimized) {\n this.minimized = false;\n this.$.body.show();\n self.modalConfig.height = self.modalConfig.originalHeight;\n self.modalConfig.originalHeight = undefined;\n\n this.align({ left: \"center\", top: \"middle\" });\n onStateChanged.call(this, opts, {\n self: this,\n state: \"restore\"\n });\n }\n return this;\n };\n\n /**\n * setCSS\n * @method ax5modal.css\n * @param {Object} css -\n * @returns {ax5modal}\n */\n this.css = function (css) {\n if (this.activeModal && !self.fullScreen) {\n this.activeModal.css(css);\n if (typeof css.width !== \"undefined\") {\n self.modalConfig.width = css.width;\n }\n if (typeof css.height !== \"undefined\") {\n self.modalConfig.height = css.height;\n }\n\n this.align();\n }\n return this;\n };\n\n /**\n * @method ax5modal.setModalConfig\n * @param _config\n * @returns {ax5.ui.ax5modal}\n */\n this.setModalConfig = function (_config) {\n self.modalConfig = jQuery.extend({}, self.modalConfig, _config);\n this.align();\n return this;\n };\n\n /**\n * @method ax5modal.align\n * @param position\n * @param e\n * @returns {ax5modal}\n * @example\n * ```js\n * modal.align({left:\"center\", top:\"middle\"});\n * modal.align({left:\"left\", top:\"top\", margin: 20});\n * ```\n */\n this.align = function () {\n return function (position, e) {\n if (!this.activeModal) return this;\n\n var opts = self.modalConfig,\n box = {\n width: opts.width,\n height: opts.height\n };\n\n var fullScreen = opts.isFullScreen = function (_fullScreen) {\n if (typeof _fullScreen === \"undefined\") {\n return false;\n } else if (U.isFunction(_fullScreen)) {\n return _fullScreen();\n }\n }(opts.fullScreen);\n\n if (fullScreen) {\n if (opts.header) this.$.header.show();\n if (opts.header) {\n opts.headerHeight = this.$.header.outerHeight();\n box.height += opts.headerHeight;\n } else {\n opts.headerHeight = 0;\n }\n box.width = jQuery(window).width();\n box.height = opts.height;\n box.left = 0;\n box.top = 0;\n } else {\n if (opts.header) this.$.header.show();\n if (position) {\n jQuery.extend(true, opts.position, position);\n }\n\n if (opts.header) {\n opts.headerHeight = this.$.header.outerHeight();\n box.height += opts.headerHeight;\n } else {\n opts.headerHeight = 0;\n }\n\n //- position 정렬\n if (opts.position.left == \"left\") {\n box.left = opts.position.margin || 0;\n } else if (opts.position.left == \"right\") {\n // window.innerWidth;\n box.left = jQuery(window).width() - box.width - (opts.position.margin || 0);\n } else if (opts.position.left == \"center\") {\n box.left = jQuery(window).width() / 2 - box.width / 2;\n } else {\n box.left = opts.position.left || 0;\n }\n\n if (opts.position.top == \"top\") {\n box.top = opts.position.margin || 0;\n } else if (opts.position.top == \"bottom\") {\n box.top = jQuery(window).height() - box.height - (opts.position.margin || 0);\n } else if (opts.position.top == \"middle\") {\n box.top = jQuery(window).height() / 2 - box.height / 2;\n } else {\n box.top = opts.position.top || 0;\n }\n if (box.left < 0) box.left = 0;\n if (box.top < 0) box.top = 0;\n\n if (opts.absolute) {\n box.top += jQuery(window).scrollTop();\n box.left += jQuery(window).scrollLeft();\n }\n }\n\n this.activeModal.css(box);\n\n this.$[\"body\"].css({\n height: box.height - (opts.headerHeight || 0)\n });\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"].css({\n height: box.height - opts.headerHeight\n });\n this.$[\"iframe\"].css({ height: box.height - opts.headerHeight });\n } else {}\n return this;\n };\n }();\n\n // 클래스 생성자\n this.main = function () {\n UI.modal_instance = UI.modal_instance || [];\n UI.modal_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n MODAL = ax5.ui.modal;\n})();\n\n// ax5.ui.modal.tmpl\n(function () {\n var MODAL = ax5.ui.modal;\n\n var content = function content() {\n return \" \\n
    \\n {{#header}}\\n
    \\n {{{title}}}\\n {{#btns}}\\n
    \\n {{#@each}}\\n \\n {{/@each}}\\n
    \\n {{/btns}}\\n
    \\n {{/header}}\\n
    \\n {{#iframe}}\\n
    \\n
    {{{iframeLoadingMsg}}}
    \\n \\n
    \\n
    \\n \\n {{#param}}\\n {{#@each}}\\n \\n {{/@each}}\\n {{/param}}\\n
    \\n {{/iframe}}\\n {{^iframe}}\\n
    \\n {{/iframe}}\\n
    \\n {{^disableResize}}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{/disableResize}}\\n
    \\n \";\n };\n\n MODAL.tmpl = {\n \"content\": content,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(MODAL.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.toast\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var TOAST;\n\n UI.addClass({\n className: \"toast\"\n }, function () {\n /**\n * @class ax5toast\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```\n * ```js\n * var toast = new ax5.ui.toast();\n * toast.setConfig({\n * icon: '',\n * containerPosition: \"bottom-right\",\n * closeIcon: ''\n * });\n *\n * toast.onStateChanged = function(){\n * console.log(this);\n * };\n *\n * toast.push({\n * icon: '',\n * msg:\"999999\"\n * });\n *\n * toast.push({\n * theme: theme,\n * msg: 'toast message'\n * });\n * ```\n */\n var ax5toast = function ax5toast() {\n var self = this,\n cfg,\n toastSeq = 0,\n toastSeqClear = null;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n clickEventName: \"click\", //(('ontouchstart' in document.documentElement) ? \"touchstart\" : \"click\"),\n theme: 'default',\n width: 300,\n icon: '',\n closeIcon: '',\n msg: '',\n lang: {\n \"ok\": \"ok\", \"cancel\": \"cancel\"\n },\n displayTime: 3000,\n animateTime: 250,\n containerPosition: \"bottom-left\"\n };\n this.toastContainer = null;\n this.queue = [];\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n },\n\n /**\n * @method ax5toast.getContent\n * @param {String} toastId\n * @param {Object} opts\n * @returns toastDisplay\n * @example\n * ```js\n * ax5toast.getContent('ax5-toast-3-1', opts);\n * ```\n */\n getContent = function getContent(toastId, opts) {\n\n var data = {\n toastId: toastId,\n theme: opts.theme,\n icon: opts.icon,\n msg: (opts.msg || \"\").replace(/\\n/g, \"
    \"),\n btns: opts.btns,\n closeIcon: opts.closeIcon\n };\n\n try {\n return TOAST.tmpl.get.call(this, \"toastDisplay\", data);\n } finally {\n toastId = null;\n data = null;\n }\n },\n\n /**\n * @method ax5toast.open\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n open = function open(opts, callBack) {\n if (toastSeqClear) clearTimeout(toastSeqClear);\n\n var toastBox,\n box = {\n width: opts.width\n };\n\n opts.id = 'ax5-toast-' + self.containerId + '-' + ++toastSeq;\n if (jQuery('#' + opts.id).get(0)) return this;\n\n if (U.left(cfg.containerPosition, '-') == 'bottom') {\n this.toastContainer.append(getContent(opts.id, opts));\n } else {\n this.toastContainer.prepend(getContent(opts.id, opts));\n }\n\n toastBox = jQuery('#' + opts.id);\n toastBox.css({ width: box.width });\n opts.toastBox = toastBox;\n this.queue.push(opts);\n\n onStateChanged.call(this, opts, {\n self: this,\n state: \"open\",\n toastId: opts.id\n });\n\n if (opts.toastType === \"push\") {\n // 자동 제거 타이머 시작\n setTimeout(function () {\n this.close(opts, callBack);\n }.bind(this), cfg.displayTime);\n\n toastBox.find(\"[data-ax-toast-btn]\").on(cfg.clickEventName, function (e) {\n btnOnClick.call(this, e || window.event, opts, toastBox, callBack);\n }.bind(this));\n } else if (opts.toastType === \"confirm\") {\n toastBox.find(\"[data-ax-toast-btn]\").on(cfg.clickEventName, function (e) {\n btnOnClick.call(this, e || window.event, opts, toastBox, callBack);\n }.bind(this));\n }\n\n box = null;\n },\n btnOnClick = function btnOnClick(e, opts, toastBox, callBack, target, k) {\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-ax-toast-btn\")) {\n return true;\n }\n });\n\n if (target) {\n k = target.getAttribute(\"data-ax-toast-btn\");\n\n var that = {\n key: k, value: opts.btns ? opts.btns[k] : k,\n toastId: opts.id,\n btn_target: target\n };\n\n if (opts.btns && opts.btns[k].onClick) {\n opts.btns[k].onClick.call(that, k);\n } else if (opts.toastType === \"push\") {\n if (callBack) callBack.call(that, k);\n this.close(opts, callBack);\n } else if (opts.toastType === \"confirm\") {\n if (callBack) callBack.call(that, k);\n this.close(opts, callBack);\n }\n }\n\n e = null;\n opts = null;\n toastBox = null;\n callBack = null;\n target = null;\n k = null;\n };\n\n /**\n * Preferences of toast UI\n * @method ax5toast.set_config\n * @param {Object} config - 클래스 속성값\n * @returns {ax5toast}\n * @example\n * ```\n * ```\n */\n //== class body start\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n // after set_config();\n self.containerId = ax5.getGuid();\n var styles = [];\n if (cfg.zIndex) {\n styles.push(\"z-index:\" + cfg.zIndex);\n }\n jQuery(document.body).append('
    ');\n this.toastContainer = jQuery('[data-toast-container=\"' + self.containerId + '\"]');\n };\n\n /**\n * @method ax5toast.push\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n this.push = function (opts, callBack) {\n if (!self.containerId) {\n this.init();\n }\n if (U.isString(opts)) {\n opts = {\n title: cfg.title,\n msg: opts\n };\n }\n opts.toastType = \"push\";\n\n self.dialogConfig = {};\n jQuery.extend(true, self.dialogConfig, cfg, opts);\n opts = self.dialogConfig;\n\n open.call(this, opts, callBack);\n\n opts = null;\n callBack = null;\n return this;\n };\n\n /**\n * @method ax5toast.confirm\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n this.confirm = function (opts, callBack) {\n if (!self.containerId) {\n this.init();\n }\n if (U.isString(opts)) {\n opts = {\n title: cfg.title,\n msg: opts\n };\n }\n opts.toastType = \"confirm\";\n\n self.dialogConfig = {};\n jQuery.extend(true, self.dialogConfig, cfg, opts);\n opts = self.dialogConfig;\n\n if (typeof opts.btns === \"undefined\") {\n opts.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: opts.theme }\n };\n }\n open.call(this, opts, callBack);\n\n opts = null;\n callBack = null;\n return this;\n };\n\n /**\n * close the toast\n * @method ax5toast.close\n * @returns {ax5toast}\n * @example\n * ```\n * my_toast.close();\n * ```\n */\n this.close = function (opts, callBack) {\n if (typeof opts === \"undefined\") {\n opts = U.last(this.queue);\n }\n\n var toastBox = opts.toastBox;\n toastBox.addClass(opts.toastType == \"push\" ? \"removed\" : \"destroy\");\n this.queue = U.filter(this.queue, function () {\n return opts.id != this.id;\n });\n setTimeout(function () {\n var that = {\n toastId: opts.id\n };\n\n toastBox.remove();\n if (callBack) callBack.call(that);\n\n that = {\n self: this,\n state: \"close\",\n toastId: opts.id\n };\n onStateChanged.call(this, opts, that);\n\n // 3초후에도 아무 일이 없다면 완전히 제거\n if (this.queue.length === 0) {\n if (toastSeqClear) clearTimeout(toastSeqClear);\n toastSeqClear = setTimeout(function () {\n /// console.log(\"try clear seq\");\n if (this.queue.length === 0) toastSeq = 0;\n }.bind(this), 3000);\n }\n\n that = null;\n opts = null;\n callBack = null;\n toastBox = null;\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n // 클래스 생성자\n this.main = function () {\n\n UI.toast_instance = UI.toast_instance || [];\n UI.toast_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n return ax5toast;\n }());\n TOAST = ax5.ui.toast;\n})();\n// ax5.ui.toast.tmpl\n(function () {\n\n var TOAST = ax5.ui.toast;\n\n var toastDisplay = function toastDisplay(columnKeys) {\n return \"\\n
    \\n {{#icon}}\\n
    {{{.}}}
    \\n {{/icon}}\\n
    {{{msg}}}
    \\n {{#btns}}\\n
    \\n
    \\n {{#@each}}\\n \\n {{/@each}}\\n
    \\n
    \\n {{/btns}}\\n {{^btns}}\\n {{{closeIcon}}}\\n {{/btns}}\\n
    \\n
    \";\n };\n\n TOAST.tmpl = {\n \"toastDisplay\": toastDisplay,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(TOAST.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.calendar\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var CALENDAR = void 0;\n\n UI.addClass({\n className: \"calendar\"\n }, function () {\n\n /**\n * @class ax5calendar\n * @classdesc\n * @author tom@axisj.com\n * @logs\n * 2014-06-21 tom : 시작\n * @example\n * ```js\n * ax5.info.months = [\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\"];\n * ax5.info.weekNames = [\n * {label: \"일\"},\n * {label: \"월\"},\n * {label: \"화\"},\n * {label: \"수\"},\n * {label: \"목\"},\n * {label: \"금\"},\n * {label: \"토\"}\n * ];\n *\n * var myCalendar = new ax5.ui.calendar({\n * control: {\n * left: '≪',\n * yearTmpl: '%s',\n * monthTmpl: '%s',\n * right: '≫',\n * yearFirst: true\n * },\n *\n * dimensions: {\n * itemPadding: 1,\n * height: 200\n * },\n *\n * target: document.getElementById(\"calendar-target\"),\n * displayDate: (new Date()),\n * mode: \"day\",\n * selectMode: \"day\",\n *\n * marker: (function () {\n * var marker = {};\n * marker[_c_date(today, {'return': 'yyyy-MM-dd', 'add': {d: -1}})] = true;\n * marker[_c_date(today, {'return': 'yyyy-MM-dd', 'add': {d: 0}})] = true;\n * marker[_c_date(today, {'return': 'yyyy-MM-dd', 'add': {d: 1}})] = true;\n *\n * return marker;\n * })(),\n * onClick: function () {\n * console.log(myCalendar.getSelection());\n * },\n * onStateChanged: function () {\n * console.log(this);\n * }\n * , multipleSelect: 2\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0,\n selectableCount = 1;\n\n this.instanceId = ax5.getGuid();\n this.target = null;\n this.selection = [];\n this.selectionMap = {};\n this.selectableMap = {};\n this.markerMap = {};\n this.printedDay = {\n start: \"\", end: \"\"\n };\n this.config = {\n clickEventName: \"click\",\n theme: 'default',\n startOfWeek: 0,\n mode: 'day', // day|month|year,\n dateFormat: 'yyyy-MM-dd',\n displayDate: new Date(),\n animateTime: 100,\n dimensions: {\n controlHeight: '40',\n controlButtonWidth: '40',\n colHeadHeight: '30',\n itemPadding: 2\n },\n lang: {\n yearHeading: \"Choose the year\",\n monthHeading: \"Choose the month\",\n yearTmpl: \"%s\",\n months: ax5.info.months || ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],\n dayTmpl: \"%s\"\n },\n multipleSelect: false,\n selectMode: 'day',\n defaultMarkerTheme: 'holiday',\n defaultPeriodTheme: 'period'\n };\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n that = null;\n };\n var getFrame = function getFrame() {\n var data = jQuery.extend(true, {}, cfg, {\n controlCSS: {},\n controlButtonCSS: {}\n });\n\n data.controlButtonCSS[\"height\"] = data.controlCSS[\"height\"] = U.cssNumber(cfg.dimensions.controlHeight);\n data.controlButtonCSS[\"line-height\"] = data.controlCSS[\"line-height\"] = U.cssNumber(cfg.dimensions.controlHeight);\n data.controlButtonCSS[\"width\"] = U.cssNumber(cfg.dimensions.controlHeight);\n\n data.controlCSS = U.css(data.controlCSS);\n data.controlButtonCSS = U.css(data.controlButtonCSS);\n\n try {\n return CALENDAR.tmpl.get.call(this, \"frameTmpl\", data);\n } finally {\n data = null;\n }\n };\n var setDisplay = function setDisplay() {\n var myDate = U.date(cfg.displayDate),\n yy = \"\",\n mm = \"\",\n yy1,\n yy2;\n\n if (cfg.control) {\n if (cfg.mode == \"day\" || cfg.mode == \"d\") {\n yy = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', myDate.getFullYear()) : myDate.getFullYear();\n mm = cfg.control.monthTmpl ? cfg.control.monthTmpl.replace('%s', cfg.lang.months[myDate.getMonth()]) : cfg.lang.months[myDate.getMonth()];\n\n this.$[\"control-display\"].html(function () {\n if (cfg.control.yearFirst) {\n return '' + yy + '' + '' + mm + '';\n } else {\n return '' + mm + '' + '' + yy + '';\n }\n }());\n } else if (cfg.mode == \"month\" || cfg.mode == \"m\") {\n yy = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', myDate.getFullYear()) : myDate.getFullYear();\n this.$[\"control-display\"].html('' + yy + '');\n } else if (cfg.mode == \"year\" || cfg.mode == \"y\") {\n yy1 = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', myDate.getFullYear() - 10) : myDate.getFullYear() - 10;\n yy2 = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', Number(myDate.getFullYear()) + 9) : Number(myDate.getFullYear()) + 9;\n this.$[\"control-display\"].html(yy1 + ' ~ ' + yy2);\n }\n\n this.$[\"control-display\"].find('[data-calendar-display]').on(cfg.clickEventName, function (e) {\n var target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-calendar-display\")) {\n return true;\n }\n }),\n mode;\n if (target) {\n mode = target.getAttribute(\"data-calendar-display\");\n this.changeMode(mode);\n }\n target = null;\n mode = null;\n }.bind(this));\n }\n\n myDate = null;\n yy = null;\n mm = null;\n yy1 = null;\n yy2 = null;\n return this;\n };\n var printDay = function printDay(nowDate) {\n var dotDate = U.date(nowDate),\n monthStratDate = new Date(dotDate.getFullYear(), dotDate.getMonth(), 1, 12),\n _today = cfg.displayDate,\n tableStartDate = function () {\n var day = monthStratDate.getDay();\n if (day == 0) day = 7;\n day -= cfg.startOfWeek;\n\n try {\n return U.date(monthStratDate, { add: { d: -day } });\n } finally {\n day = null;\n }\n }(),\n loopDate,\n thisMonth = dotDate.getMonth(),\n itemStyles = {},\n i,\n k,\n _k,\n frameWidth = this.$[\"body\"].width(),\n frameHeight = Math.floor(frameWidth * (6 / 7)),\n // 1week = 7days, 1month = 6weeks\n data,\n tmpl;\n\n if (cfg.dimensions.height) {\n frameHeight = U.number(cfg.dimensions.height) - U.number(cfg.dimensions.colHeadHeight);\n }\n\n itemStyles['height'] = Math.floor(frameHeight / 6) - U.number(cfg.dimensions.itemPadding) * 2 + 'px';\n itemStyles['line-height'] = itemStyles['height'];\n itemStyles['padding'] = U.cssNumber(cfg.dimensions.itemPadding);\n\n data = {\n weekNames: [].concat(ax5.info.weekNames),\n list: []\n };\n\n if (cfg.startOfWeek) {\n data.weekNames = data.weekNames.concat(data.weekNames.slice(0, cfg.startOfWeek)).splice(cfg.startOfWeek);\n }\n\n data.weekNames.forEach(function (n) {\n n.colHeadHeight = U.cssNumber(cfg.dimensions.colHeadHeight);\n });\n\n loopDate = tableStartDate;\n i = 0;\n while (i < 6) {\n k = 0;\n while (k < 7) {\n _k = (7 + (k - cfg.startOfWeek)) % 7;\n var thisDate = '' + U.date(loopDate, { \"return\": cfg.dateFormat }),\n _date = {\n 'row': i,\n 'col': k,\n isStartOfWeek: k == 0,\n thisDate: '' + thisDate,\n thisDataLabel: cfg.lang.dayTmpl.replace('%s', loopDate.getDate()),\n itemStyles: U.css(itemStyles),\n addClass: function () {\n\n var classNames = \"\";\n\n if (cfg.selectable) {\n if (self.selectableMap[thisDate]) {\n classNames += loopDate.getMonth() == thisMonth ? \" live\" : \"\";\n } else {\n classNames += \" disable\";\n }\n } else {\n if (loopDate.getMonth() == thisMonth) {\n if (thisDate == U.date(_today, { \"return\": \"yyyyMMdd\" })) {\n classNames += \" focus\";\n } else {\n classNames += \" live\";\n }\n\n if (loopDate.getDay() == 0) {\n classNames += \" sunday\";\n }\n if (loopDate.getDay() == 6) {\n classNames += \" saturday\";\n }\n }\n }\n\n return classNames;\n }() + ' ' + function () {\n return self.markerMap[thisDate] ? self.markerMap[thisDate].theme || cfg.defaultMarkerTheme : '';\n }() + ' ' + function () {\n return self.selectionMap[thisDate] ? \"selected-day\" : '';\n }()\n };\n data.list.push(_date);\n\n k++;\n loopDate = U.date(loopDate, { add: { d: 1 } });\n\n thisDate = null;\n _date = null;\n }\n i++;\n }\n tmpl = CALENDAR.tmpl.get.call(this, \"dayTmpl\", data);\n this.$[\"body\"].html(tmpl);\n this.$[\"body\"].find('[data-calendar-item-date]').on(cfg.clickEventName, function (e) {\n e = e || window.event;\n onclick.call(self, e, 'date');\n U.stopEvent(e);\n });\n\n this.printedDay = {\n start: tableStartDate, end: loopDate\n };\n\n onStateChanged.call(this, null, {\n self: this,\n action: \"printDay\",\n printedDay: this.printedDay\n });\n setDisplay.call(this);\n\n dotDate = null;\n monthStratDate = null;\n _today = null;\n tableStartDate = null;\n loopDate = null;\n thisMonth = null;\n itemStyles = null;\n i = null;\n k = null;\n frameWidth = null;\n frameHeight = null;\n data = null;\n tmpl = null;\n };\n var printMonth = function printMonth(nowDate) {\n var dotDate = U.date(nowDate),\n nMonth = dotDate.getMonth(),\n itemStyles = {},\n i,\n k,\n m,\n tableStartMonth,\n frameWidth = this.$[\"body\"].width(),\n frameHeight = Math.floor(frameWidth * (6 / 7)),\n data,\n tmpl;\n\n if (cfg.dimensions.height) {\n frameHeight = U.number(cfg.dimensions.height) - U.number(cfg.dimensions.colHeadHeight);\n }\n\n itemStyles['height'] = Math.floor(frameHeight / 4) - U.number(cfg.dimensions.itemPadding) * 2 + 'px';\n itemStyles['line-height'] = itemStyles['height'];\n itemStyles['padding'] = U.cssNumber(cfg.dimensions.itemPadding);\n\n data = {\n colHeadHeight: U.cssNumber(cfg.dimensions.colHeadHeight),\n colHeadLabel: cfg.lang.monthHeading,\n list: []\n };\n\n tableStartMonth = 0;\n m = 0;\n i = 0;\n while (i < 4) {\n k = 0;\n while (k < 3) {\n var _month = {\n row: i,\n col: k,\n isStartOfRow: k == 0,\n thisMonth: dotDate.getFullYear() + '-' + U.setDigit(m + 1, 2) + '-01', // + U.setDigit(dotDate.getDate(), 2),\n thisMonthLabel: cfg.lang.months[m],\n itemStyles: U.css(itemStyles),\n addClass: function () {\n if (cfg.selectable) {\n return self.selectableMap[m] ? 'live' : 'disable';\n } else {\n return 'live';\n }\n }() + ' ' + function () {\n return m == nMonth ? \"focus\" : \"\";\n }() + ' ' + function () {\n return self.markerMap[m] ? self.markerMap[m].theme || cfg.defaultMarkerTheme : '';\n }()\n };\n data.list.push(_month);\n m++;\n k++;\n _month = null;\n }\n i++;\n }\n tmpl = CALENDAR.tmpl.get.call(this, \"monthTmpl\", data);\n this.$[\"body\"].html(tmpl);\n this.$[\"body\"].find('[data-calendar-item-month]').on(cfg.clickEventName, function (e) {\n e = e || window.event;\n onclick.call(self, e, 'month');\n U.stopEvent(e);\n });\n\n this.printedDay = {\n start: dotDate.getFullYear() + '-' + U.setDigit(tableStartMonth + 1, 2),\n end: dotDate.getFullYear() + '-' + U.setDigit(m, 2)\n };\n\n onStateChanged.call(this, null, {\n self: this,\n action: \"printMonth\",\n printedDay: this.printedDay\n });\n setDisplay.call(this);\n\n dotDate = null;\n nMonth = null;\n itemStyles = null;\n i = null;\n k = null;\n m = null;\n tableStartMonth = null;\n frameWidth = null;\n frameHeight = null;\n data = null;\n tmpl = null;\n };\n var printYear = function printYear(nowDate) {\n var dotDate = U.date(nowDate),\n nYear = dotDate.getFullYear(),\n itemStyles = {},\n i,\n k,\n y,\n tableStartYear,\n frameWidth = this.$[\"body\"].width(),\n frameHeight = Math.floor(frameWidth * (6 / 7)),\n data,\n tmpl;\n\n if (cfg.dimensions.height) {\n frameHeight = U.number(cfg.dimensions.height) - U.number(cfg.dimensions.colHeadHeight);\n }\n\n itemStyles['height'] = Math.floor(frameHeight / 5) - U.number(cfg.dimensions.itemPadding) * 2 + 'px';\n itemStyles['line-height'] = itemStyles['height'];\n itemStyles['padding'] = U.cssNumber(cfg.dimensions.itemPadding);\n\n data = {\n colHeadHeight: U.cssNumber(cfg.dimensions.colHeadHeight),\n colHeadLabel: cfg.lang.yearHeading,\n list: []\n };\n\n tableStartYear = nYear - 10;\n y = nYear - 10;\n i = 0;\n while (i < 5) {\n k = 0;\n while (k < 4) {\n var _year = {\n row: i,\n col: k,\n isStartOfRow: k == 0,\n thisYear: y + '-' + U.setDigit(dotDate.getMonth() + 1, 2) + '-01', // + U.setDigit(dotDate.getDate(), 2),\n thisYearLabel: cfg.lang.yearTmpl.replace('%s', y),\n itemStyles: U.css(itemStyles),\n addClass: function () {\n if (cfg.selectable) {\n return self.selectableMap[y] ? 'live' : 'disable';\n } else {\n return 'live';\n }\n }() + ' ' + function () {\n return y == nYear ? \"focus\" : \"\";\n }() + ' ' + function () {\n return self.selectableMap[y] ? self.selectableMap[y].theme || cfg.defaultMarkerTheme : '';\n }()\n };\n data.list.push(_year);\n y++;\n k++;\n _year = null;\n }\n i++;\n }\n tmpl = CALENDAR.tmpl.get.call(this, \"yearTmpl\", data);\n this.$[\"body\"].html(tmpl);\n this.$[\"body\"].find('[data-calendar-item-year]').on(cfg.clickEventName, function (e) {\n e = e || window.event;\n onclick.call(this, e, 'year');\n U.stopEvent(e);\n });\n\n this.printedDay = {\n start: tableStartYear, end: y - 1\n };\n\n onStateChanged.call(this, null, {\n self: this,\n action: \"printYear\",\n printedDay: this.printedDay\n });\n setDisplay.call(this);\n\n dotDate = null;\n nYear = null;\n itemStyles = null;\n i = null;\n k = null;\n y = null;\n tableStartYear = null;\n frameWidth = null;\n frameHeight = null;\n data = null;\n tmpl = null;\n };\n var onclick = function onclick(e, mode, target, value) {\n var removed, dt, selectable;\n\n mode = mode || \"date\";\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-calendar-item-\" + mode)) {\n return true;\n }\n });\n if (target) {\n value = target.getAttribute(\"data-calendar-item-\" + mode);\n\n dt = U.date(value, { \"return\": cfg.dateFormat });\n selectable = true;\n selectableCount = cfg.multipleSelect ? U.isNumber(cfg.multipleSelect) ? cfg.multipleSelect : 2 : 1;\n\n if (cfg.selectable) {\n if (!self.selectableMap[dt]) selectable = false;\n }\n\n if (mode == \"date\") {\n if (selectable) {\n\n if (self.selection.length >= selectableCount) {\n removed = self.selection.splice(0, self.selection.length - (selectableCount - 1));\n removed.forEach(function (d) {\n self.$[\"body\"].find('[data-calendar-item-date=\"' + U.date(d, { \"return\": cfg.dateFormat }) + '\"]').removeClass(\"selected-day\");\n });\n }\n\n jQuery(target).addClass(\"selected-day\");\n self.selection.push(value);\n\n if (self.onClick) {\n self.onClick.call({\n self: this, date: value, target: this.target, dateElement: target\n });\n }\n }\n } else if (mode == \"month\") {\n if (cfg.selectMode == \"month\") {\n if (selectable) {\n if (self.selection.length >= selectableCount) {\n removed = self.selection.splice(0, self.selection.length - (selectableCount - 1));\n removed.forEach(function (d) {\n self.$[\"body\"].find('[data-calendar-item-month=\"' + U.date(d, { \"return\": 'yyyy-MM-dd' }) + '\"]').removeClass(\"selected-month\");\n });\n }\n\n jQuery(target).addClass(\"selected-month\");\n self.selection.push(value);\n\n if (self.onClick) {\n self.onClick.call({\n self: this, date: value, target: this.target, dateElement: target\n });\n }\n }\n } else {\n self.changeMode(\"day\", value);\n }\n } else if (mode == \"year\") {\n if (cfg.selectMode == \"year\") {\n if (selectable) {\n if (self.selection.length >= selectableCount) {\n removed = self.selection.splice(0, self.selection.length - (selectableCount - 1));\n removed.forEach(function (d) {\n self.$[\"body\"].find('[data-calendar-item-year=\"' + U.date(d, { \"return\": 'yyyy-MM-dd' }) + '\"]').removeClass(\"selected-year\");\n });\n }\n\n jQuery(target).addClass(\"selected-year\");\n self.selection.push(value);\n\n if (self.onClick) {\n self.onClick.call({\n self: this, date: value, target: this.target, dateElement: target\n });\n }\n }\n } else {\n self.changeMode(\"month\", value);\n }\n }\n }\n\n mode = null;\n target = null;\n value = null;\n removed = null;\n dt = null;\n selectable = null;\n };\n var move = function move(e, target, value) {\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-calendar-move\")) {\n return true;\n }\n });\n if (target) {\n value = target.getAttribute(\"data-calendar-move\");\n if (cfg.mode == \"day\" || cfg.mode == \"d\") {\n if (value == \"left\") {\n cfg.displayDate = U.date(cfg.displayDate, { add: { m: -1 } });\n } else {\n cfg.displayDate = U.date(cfg.displayDate, { add: { m: 1 } });\n }\n printDay.call(this, cfg.displayDate);\n } else if (cfg.mode == \"month\" || cfg.mode == \"m\") {\n if (value == \"left\") {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: -1 } });\n } else {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: 1 } });\n }\n printMonth.call(this, cfg.displayDate);\n } else if (cfg.mode == \"year\" || cfg.mode == \"y\") {\n if (value == \"left\") {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: -10 } });\n } else {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: 10 } });\n }\n printYear.call(this, cfg.displayDate);\n }\n }\n\n target = null;\n value = null;\n };\n var applyMarkerMap = function applyMarkerMap() {\n setTimeout(function () {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n for (var k in this.markerMap) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').addClass(this.markerMap[k].theme || cfg.defaultMarkerTheme);\n }\n }\n }.bind(this));\n };\n var applySelectionMap = function applySelectionMap() {\n setTimeout(function () {\n for (var k in this.selectionMap) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').addClass(\"selected-day\");\n }\n }.bind(this));\n };\n var applyPeriodMap = function applyPeriodMap() {\n setTimeout(function () {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n for (var k in this.periodMap) {\n if (this.periodMap[k].label) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').find(\".addon-footer\").html(this.periodMap[k].label);\n }\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').addClass(this.periodMap[k].theme);\n }\n }\n }.bind(this));\n };\n var clearPeriodMap = function clearPeriodMap() {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n for (var k in this.periodMap) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').find(\".addon-footer\").empty();\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').removeClass(this.periodMap[k].theme);\n }\n }\n };\n\n /**\n * Preferences of calendar UI\n * @method ax5calendar.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Element|nodelist} config.target\n * @param {String} [config.mode=day|month|year]\n * @param {Function} [config.onClick}\n * @returns {ax5calendar}\n * @example\n * ```js\n * var myCalendar = new ax5.ui.calendar();\n * myCalendar.setConfig({\n * target: $(\"#target\"),\n * mode: \"day\"\n * });\n * ```\n */\n //== class body start\n this.init = function () {\n // after setConfig();\n\n this.onStateChanged = cfg.onStateChanged;\n this.onClick = cfg.onClick;\n\n if (!cfg.target) {\n console.log(ax5.info.getError(\"ax5calendar\", \"401\", \"setConfig\"));\n }\n this.target = jQuery(cfg.target);\n\n cfg.displayDate = U.date(cfg.displayDate);\n this.target.html(getFrame.call(this));\n\n // 파트수집\n this.$ = {\n \"root\": this.target.find('[data-calendar-els=\"root\"]'),\n \"control\": this.target.find('[data-calendar-els=\"control\"]'),\n \"control-display\": this.target.find('[data-calendar-els=\"control-display\"]'),\n \"body\": this.target.find('[data-calendar-els=\"body\"]')\n };\n\n if (cfg.control) {\n this.$[\"root\"].on(cfg.clickEventName, '[data-calendar-move]', function (e) {\n move.call(this, e || window.event);\n }.bind(this));\n }\n\n // collect selectableMap\n if (cfg.selection) {\n this.setSelection(cfg.selection, false);\n }\n // collect selectableMap\n if (cfg.selectable) {\n this.setSelectable(cfg.selectable, false);\n }\n // collect markerMap\n if (cfg.marker) {\n this.setMarker(cfg.marker, false);\n }\n\n setTimeout(function () {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n printDay.call(this, cfg.displayDate);\n } else if (cfg.mode === \"month\" || cfg.mode === \"m\") {\n printMonth.call(this, cfg.displayDate);\n } else if (cfg.mode === \"year\" || cfg.mode === \"y\") {\n printYear.call(this, cfg.displayDate);\n }\n }.bind(this));\n };\n\n /**\n * @method ax5calendar.changeMode\n * @param {String} mode\n * @param {String} changeDate\n * @returns {ax5calendar}\n */\n this.changeMode = function (mode, changeDate) {\n if (typeof changeDate != \"undefined\") cfg.displayDate = changeDate;\n if (mode) cfg.mode = mode;\n\n this.$[\"body\"].removeClass(\"fadein\").addClass(\"fadeout\");\n setTimeout(function () {\n if (cfg.mode == \"day\" || cfg.mode == \"d\") {\n printDay.call(this, cfg.displayDate);\n } else if (cfg.mode == \"month\" || cfg.mode == \"m\") {\n printMonth.call(this, cfg.displayDate);\n } else if (cfg.mode == \"year\" || cfg.mode == \"y\") {\n printYear.call(this, cfg.displayDate);\n }\n this.$[\"body\"].removeClass(\"fadeout\").addClass(\"fadein\");\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n /**\n * @method ax5calendar.setSelection\n * @param {Array} selection\n * @returns {ax5calendar}\n * @example\n * ```\n *\n * ```\n */\n this.setSelection = function () {\n self.selectionMap = {};\n var processor = {\n 'arr': function arr(v, map, count) {\n map = {};\n if (!U.isArray(v)) return map;\n self.selection = v = v.splice(0, count);\n v.forEach(function (n) {\n if (U.isDate(n)) n = U.date(n, { 'return': cfg.dateFormat });\n map[n] = true;\n });\n return map;\n }\n };\n\n return function (selection, isPrint) {\n var result = {};\n selectableCount = cfg.multipleSelect ? U.isNumber(cfg.multipleSelect) ? cfg.multipleSelect : 2 : 1;\n\n if (cfg.selection = selection) {\n if (U.isArray(selection)) {\n result = processor.arr(selection, {}, selectableCount);\n } else {\n return this;\n }\n }\n\n this.selectionMap = jQuery.extend({}, result);\n // 변경내용 적용하여 출력\n\n if (isPrint !== false) applySelectionMap.call(this);\n\n result = null;\n\n return this;\n };\n }();\n\n /**\n * @method ax5calendar.getSelection\n */\n this.getSelection = function () {\n return this.selection;\n };\n\n /**\n * @method ax5calendar.setSelectable\n */\n this.setSelectable = function () {\n self.selectableMap = {};\n var processor = {\n 'arr': function arr(v, map) {\n map = {};\n if (!U.isArray(v)) return map;\n v.forEach(function (n) {\n if (U.isDate(n)) n = U.date(n, { 'return': cfg.dateFormat });\n map[n] = true;\n });\n return map;\n },\n 'obj': function obj(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (v.range) return map;\n for (var k in v) {\n map[k] = v[k];\n }\n return map;\n },\n 'range': function range(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (!v.range) return map;\n\n v.range.forEach(function (n) {\n if (U.isDateFormat(n.from) && U.isDateFormat(n.to)) {\n for (var d = U.date(n.from); d <= U.date(n.to); d.setDate(d.getDate() + 1)) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = true;\n }\n } else {\n for (var i = n.from; i <= n.to; i++) {\n map[i] = true;\n }\n }\n });\n\n return map;\n }\n };\n\n return function (selectable, isPrint) {\n\n var key,\n result = {};\n\n if (cfg.selectable = selectable) {\n if (U.isArray(selectable)) {\n result = processor.arr(selectable);\n } else {\n for (key in processor) {\n if (selectable[key]) {\n result = processor[key](selectable);\n break;\n }\n }\n if (Object.keys(result).length === 0) {\n result = processor.obj(selectable);\n }\n }\n }\n\n this.selectableMap = result;\n // 변경내용 적용하여 출력\n if (isPrint !== false) this.changeMode();\n\n return this;\n };\n }();\n\n /**\n * @method ax5calendar.setMarker\n */\n this.setMarker = function () {\n self.markerMap = {};\n var processor = {\n 'obj': function obj(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (v.range) return map;\n for (var k in v) {\n map[k] = v[k];\n }\n\n v = null;\n return map;\n },\n 'range': function range(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (!v.range) return map;\n\n v.range.forEach(function (n) {\n if (U.isDateFormat(n.from) && U.isDateFormat(n.to)) {\n for (var d = U.date(n.from); d <= U.date(n.to); d.setDate(d.getDate() + 1)) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme, label: n.label };\n }\n } else {\n for (var i = n.from; i <= n.to; i++) {\n map[i] = { theme: n.theme, label: n.label };\n }\n }\n });\n\n v = null;\n return map;\n }\n };\n\n return function (marker, isApply) {\n\n var key,\n result = {};\n\n if (cfg.marker = marker) {\n for (key in processor) {\n if (marker[key]) {\n result = processor[key](marker);\n break;\n }\n }\n if (Object.keys(result).length === 0) {\n result = processor.obj(marker);\n }\n }\n\n this.markerMap = result;\n // 변경내용 적용하여 출력\n if (isApply !== false) applyMarkerMap.call(this);\n return this;\n };\n }();\n\n /**\n * @method ax5calendar.setPeriod\n */\n this.setPeriod = function () {\n self.periodMap = {};\n\n var processor = {\n 'range': function range(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (!v.range) return map;\n\n v.range.forEach(function (n) {\n if (U.isDateFormat(n.from) && U.isDateFormat(n.to)) {\n for (var d = new Date(U.date(n.from)); d <= U.date(n.to); d.setDate(d.getDate() + 1)) {\n if (d.getTime() == U.date(n.from).getTime()) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme || cfg.defaultPeriodTheme, label: n.fromLabel };\n } else if (d.getTime() == U.date(n.to).getTime()) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme || cfg.defaultPeriodTheme, label: n.toLabel };\n } else {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme || cfg.defaultPeriodTheme };\n }\n }\n }\n });\n\n v = null;\n return map;\n }\n };\n\n return function (period, isApply) {\n\n var key,\n result = {};\n\n // 변경내용 적용하여 출력\n if (isApply !== false) {\n clearPeriodMap.call(this);\n }\n\n if (cfg.period = period) {\n result = processor.range(period);\n }\n\n this.periodMap = result;\n\n //console.log(this.periodMap);\n\n // 변경내용 적용하여 출력\n if (isApply !== false) {\n applyPeriodMap.call(this);\n }\n return this;\n };\n }();\n\n // 클래스 생성자\n this.main = function () {\n\n UI.calendar_instance = UI.calendar_instance || [];\n UI.calendar_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n CALENDAR = ax5.ui.calendar;\n})();\n// ax5.ui.calendar.tmpl\n(function () {\n\n var CALENDAR = ax5.ui.calendar;\n\n var frameTmpl = function frameTmpl(columnKeys) {\n return \"\\n
    \\n {{#control}}\\n
    \\n {{{left}}}\\n
    \\n {{{right}}}\\n
    \\n {{/control}}\\n
    \\n
    \\n \";\n };\n var dayTmpl = function dayTmpl(columnKeys) {\n return \"\\n \\n \\n \\n {{#weekNames}}\\n \\n {{/weekNames}}\\n \\n \\n \\n \\n {{#list}} \\n {{#isStartOfWeek}}\\n {{^@first}}\\n \\n \\n {{/@first}}\\n {{/isStartOfWeek}}\\n \\n {{/list}}\\n \\n \\n
    \\n {{label}}\\n
    \\n \\n \\n {{thisDataLabel}}\\n \\n \\n
    \\n \";\n };\n var monthTmpl = function monthTmpl(columnKeys) {\n return \"\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#list}} \\n {{#isStartOfRow}}\\n {{^@first}}\\n \\n \\n {{/@first}}\\n {{/isStartOfRow}}\\n \\n {{/list}}\\n \\n \\n
    \\n {{colHeadLabel}}\\n
    \\n \\n \\n {{thisMonthLabel}}\\n \\n \\n
    \\n \";\n };\n var yearTmpl = function yearTmpl(columnKeys) {\n return \"\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#list}} \\n {{#isStartOfRow}}\\n {{^@first}}\\n \\n \\n {{/@first}}\\n {{/isStartOfRow}}\\n \\n {{/list}}\\n \\n \\n
    \\n {{colHeadLabel}}\\n
    \\n \\n \\n {{thisYearLabel}}\\n \\n \\n
    \\n \";\n };\n\n CALENDAR.tmpl = {\n \"frameTmpl\": frameTmpl,\n \"dayTmpl\": dayTmpl,\n \"monthTmpl\": monthTmpl,\n \"yearTmpl\": yearTmpl,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(CALENDAR.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.picker\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var PICKER = void 0;\n\n UI.addClass({\n className: \"picker\"\n }, function () {\n /**\n * @class ax5picker\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * ax5.def.picker.date_leftArrow = '';\n * ax5.def.picker.date_yearTmpl = '%s';\n * ax5.def.picker.date_monthTmpl = '%s';\n * def.picker.date_rightArrow = '';\n *\n * var picker = new ax5.ui.picker({\n * onStateChanged: function () {\n * console.log(this);\n * }\n * });\n *\n * picker.bind({\n * target: $('[data-picker-date]'),\n * direction: \"auto\",\n * content: {\n * type: 'date',\n * formatter: {\n * pattern: 'date'\n * }\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n clickEventName: \"click\", //(('ontouchstart' in document.documentElement) ? \"touchend\" : \"click\"),\n theme: 'default',\n title: '',\n lang: {\n \"ok\": \"ok\",\n \"cancel\": \"cancel\"\n },\n animateTime: 100,\n calendar: {\n multipleSelect: false,\n control: {\n left: ax5.def.picker.date_leftArrow || '←',\n yearTmpl: ax5.def.picker.date_yearTmpl || '%s',\n monthTmpl: ax5.def.picker.date_monthTmpl || '%s',\n right: ax5.def.picker.date_rightArrow || '→',\n yearFirst: true\n }\n },\n palette: {}\n };\n this.queue = [];\n this.activePicker = null;\n this.activePickerQueueIndex = -1;\n this.openTimer = null;\n this.closeTimer = null;\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(item, that) {\n if (item && item.onStateChanged) {\n item.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n return true;\n };\n var bindPickerTarget = function () {\n\n var pickerEvent = {\n 'focus': function focus(queIdx, e) {\n this.open(queIdx);\n },\n 'click': function click(queIdx, e) {\n this.open(queIdx);\n }\n };\n\n var pickerType = {\n '@fn': function fn(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n if (inputLength > 1) {\n config.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: cfg.theme }\n };\n }\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'date': function date(queIdx, _input) {\n var item = this.queue[queIdx],\n contentWidth = item.content ? item.content.width || 270 : 270,\n contentMargin = item.content ? item.content.margin || 5 : 5,\n inputLength = _input.length,\n config = {\n contentWidth: contentWidth * inputLength + (inputLength - 1) * contentMargin,\n content: { width: contentWidth, margin: contentMargin },\n inputLength: inputLength || 1\n };\n\n if (inputLength > 1 && !item.btns) {\n config.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: cfg.theme }\n };\n }\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n contentWidth = null;\n contentMargin = null;\n config = null;\n inputLength = null;\n },\n 'secure-num': function secureNum(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'keyboard': function keyboard(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'numpad': function numpad(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'color': function color(queIdx, _input) {\n var item = this.queue[queIdx],\n contentWidth = item.content ? item.content.width || 270 : 270,\n contentMargin = item.content ? item.content.margin || 5 : 5,\n inputLength = _input.length,\n config = {\n contentWidth: contentWidth * inputLength + (inputLength - 1) * contentMargin,\n content: { width: contentWidth, margin: contentMargin },\n inputLength: inputLength || 1\n },\n $colorPreview = item.$target.find('[data-ax5picker-color=\"preview\"]');\n\n if ($colorPreview.get(0)) {\n $colorPreview.css({ \"background-color\": \"#\" + U.color(_input.val() || \"#000000\").getHexValue() });\n // 컬러 피커인 경우 input의 값이 변경되면 preview를 수정\n _input.on(\"change\", function () {\n $colorPreview.css({ \"background-color\": \"#\" + U.color(this.value || \"#000000\").getHexValue() });\n });\n }\n\n if (inputLength > 1 && !item.btns) {\n config.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: cfg.theme }\n };\n }\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n contentWidth = null;\n contentMargin = null;\n config = null;\n inputLength = null;\n }\n };\n\n return function (queIdx) {\n var item = this.queue[queIdx],\n input = void 0;\n\n if (!item.content) {\n console.log(ax5.info.getError(\"ax5picker\", \"501\", \"bind\"));\n return this;\n }\n\n input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : item.$target.find('input[type]');\n\n // 함수타입\n if (U.isFunction(item.content)) {\n pickerType[\"@fn\"].call(this, queIdx, input);\n } else {\n for (var key in pickerType) {\n if (item.content.type == key) {\n pickerType[key].call(this, queIdx, input);\n break;\n }\n }\n }\n\n input.unbind('focus.ax5picker').unbind('click.ax5picker').bind('focus.ax5picker', pickerEvent.focus.bind(this, queIdx)).bind('click.ax5picker', pickerEvent.click.bind(this, queIdx));\n\n item.$target.find('.input-group-addon').unbind('click.ax5picker').bind('click.ax5picker', pickerEvent.click.bind(this, queIdx));\n\n if (item.content.formatter && ax5.ui.formatter) {\n input.ax5formatter(item.content.formatter);\n }\n\n input = null;\n item = null;\n queIdx = null;\n return this;\n };\n }();\n\n var alignPicker = function alignPicker(append) {\n if (!this.activePicker) return this;\n\n var _alignPicker = function _alignPicker(item) {\n var $window = jQuery(window),\n $body = jQuery(document.body);\n var pos = {},\n positionMargin = 12,\n dim = {},\n pickerDim = {},\n pickerDirection;\n\n pos = item.$target.offset();\n dim = {\n width: item.$target.outerWidth(),\n height: item.$target.outerHeight()\n };\n pickerDim = {\n winWidth: Math.max($window.width(), $body.width()),\n winHeight: Math.max($window.height(), $body.height()),\n width: this.activePicker.outerWidth(),\n height: this.activePicker.outerHeight()\n };\n\n // picker css(width, left, top) & direction 결정\n\n if (!item.direction || item.direction === \"\" || item.direction === \"auto\") {\n // set direction\n pickerDirection = \"top\";\n if (pos.top - pickerDim.height - positionMargin < 0) {\n pickerDirection = \"top\";\n } else if (pos.top + dim.height + pickerDim.height + positionMargin > pickerDim.winHeight) {\n pickerDirection = \"bottom\";\n }\n } else {\n pickerDirection = item.direction;\n }\n\n if (append) {\n this.activePicker.addClass(\"direction-\" + pickerDirection);\n }\n\n var positionCSS = function () {\n var css = { left: 0, top: 0 };\n switch (pickerDirection) {\n case \"top\":\n css.left = pos.left + dim.width / 2 - pickerDim.width / 2;\n css.top = pos.top + dim.height + positionMargin;\n break;\n case \"bottom\":\n css.left = pos.left + dim.width / 2 - pickerDim.width / 2;\n css.top = pos.top - pickerDim.height - positionMargin;\n break;\n case \"left\":\n css.left = pos.left + dim.width + positionMargin;\n css.top = pos.top - pickerDim.height / 2 + dim.height / 2;\n break;\n case \"right\":\n css.left = pos.left - pickerDim.width - positionMargin;\n css.top = pos.top - pickerDim.height / 2 + dim.height / 2;\n break;\n }\n return css;\n }();\n\n (function () {\n if (pickerDirection == \"top\" || pickerDirection == \"bottom\") {\n if (positionCSS.left < 0) {\n positionCSS.left = positionMargin;\n this.activePickerArrow.css({ left: pos.left + dim.width / 2 - positionCSS.left });\n } else if (positionCSS.left + pickerDim.width > pickerDim.winWidth) {\n positionCSS.left = pickerDim.winWidth - pickerDim.width - positionMargin;\n this.activePickerArrow.css({ left: pos.left + dim.width / 2 - positionCSS.left });\n }\n }\n }).call(this);\n\n this.activePicker.css(positionCSS);\n };\n var item = this.queue[this.activePickerQueueIndex];\n\n if (append) {\n this.activePicker.css({ top: -999 });\n jQuery(document.body).append(this.activePicker);\n }\n\n setTimeout(function () {\n _alignPicker.call(this, item);\n }.bind(this));\n };\n\n var onBodyClick = function onBodyClick(e, target) {\n if (!this.activePicker) return this;\n\n var item = this.queue[this.activePickerQueueIndex];\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-picker-els\")) {\n return true;\n } else if (item.$target.get(0) == target) {\n return true;\n }\n });\n if (!target) {\n this.close();\n return this;\n }\n //console.log(\"i'm picker\");\n return this;\n };\n\n var onBtnClick = function onBtnClick(e, target) {\n // console.log('btn click');\n if (e.srcElement) e.target = e.srcElement;\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-picker-btn\")) {\n return true;\n }\n });\n\n if (target) {\n var item = this.queue[this.activePickerQueueIndex],\n k = target.getAttribute(\"data-picker-btn\");\n\n if (item.btns && item.btns[k].onClick) {\n var that = {\n key: k,\n value: item.btns[k],\n self: this,\n item: item\n };\n item.btns[k].onClick.call(that, k);\n } else {\n this.close();\n }\n }\n };\n\n var onBodyKeyup = function onBodyKeyup(e) {\n if (e.keyCode == ax5.info.eventKeys.ESC) {\n this.close();\n }\n };\n\n var getQueIdx = function getQueIdx(boundID) {\n if (!U.isString(boundID)) {\n boundID = jQuery(boundID).data(\"data-axpicker-id\");\n }\n if (!U.isString(boundID)) {\n console.log(ax5.info.getError(\"ax5picker\", \"402\", \"getQueIdx\"));\n return;\n }\n return U.search(this.queue, function () {\n return this.id == boundID;\n });\n };\n /// private end\n\n /**\n * Preferences of picker UI\n * @method ax5picker.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5picker}\n * @example\n * ```\n * ```\n */\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n };\n\n /**\n * bind picker UI\n * @method ax5picker.bind\n * @param {Object} item\n * @param {Element} item.target\n * @param {String} item.direction - top|left|right|bottom|auto\n * @param {Number} item.contentWidth\n * @param {Boolean} item.disableChangeTrigger\n * @param {Function} item.onStateChanged\n * @param {Object} item.btns\n * @param {Object} item.content\n * @param {Number} item.content.width\n * @param {Number} item.content.margin\n * @param {String} item.content.type\n * @param {Object} item.content.config - binded UI config\n * @param {Object} item.content.formatter\n * @param {String} item.content.formatter.pattern\n * @returns {ax5picker}\n * @example\n * ```js\n * var picker = new ax5.ui.picker();\n * $(document.body).ready(function () {\n * picker.bind({\n * target: $('[data-ax5picker=\"basic\"]'),\n * direction: \"top\",\n * content: {\n * width: 270,\n * margin: 10,\n * type: 'date',\n * config: {\n * control: {\n * left: '',\n * yearTmpl: '%s',\n * monthTmpl: '%s',\n * right: ''\n * },\n * lang: {\n * yearTmpl: \"%s년\",\n * months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n * dayTmpl: \"%s\"\n * }\n * },\n * formatter: {\n * pattern: 'date'\n * }\n * },\n * onStateChanged: function () {\n *\n * }\n * });\n * });\n * ```\n */\n this.bind = function (item) {\n var pickerConfig = {},\n queIdx = void 0;\n\n item = jQuery.extend(true, pickerConfig, cfg, item);\n\n if (!item.target) {\n console.log(ax5.info.getError(\"ax5picker\", \"401\", \"bind\"));\n return this;\n }\n item.$target = jQuery(item.target);\n\n if (!item.$target.get(0)) {\n console.log(ax5.info.getError(\"ax5picker\", \"401\", \"bind\"));\n return this;\n }\n\n if (!item.id) item.id = item.$target.data(\"data-axpicker-id\");\n\n if (!item.id) {\n item.id = 'ax5-picker-' + ax5.getGuid();\n item.$target.data(\"data-axpicker-id\", item.id);\n }\n queIdx = U.search(this.queue, function () {\n return this.id == item.id;\n });\n\n if (queIdx === -1) {\n this.queue.push(item);\n bindPickerTarget.call(this, this.queue.length - 1);\n } else {\n this.queue[queIdx] = jQuery.extend(true, {}, this.queue[queIdx], item);\n bindPickerTarget.call(this, queIdx);\n }\n\n pickerConfig = null;\n queIdx = null;\n return this;\n };\n\n /**\n * @method ax5picker.setContentValue\n * @param {String} boundID\n * @param {Number} inputIndex\n * @param {String} val\n * @returns {ax5picker} this\n */\n this.setContentValue = function () {\n\n var multipleInputProcessor = {\n \"date\": function date(_item, _inputIndex, _val) {\n var values = [],\n diffDay,\n prevInputValue,\n nextInputValue;\n\n if (_item.$target.get(0).tagName.toUpperCase() !== \"INPUT\") {\n _item.$target.find('input[type]').each(function () {\n values.push(this.value);\n });\n }\n\n if (_inputIndex == 0) {\n if (values.length > 1 && values[1] !== \"\") {\n // 값 검증\n diffDay = ax5.util.dday(values[1], { today: values[0] });\n if (diffDay < 0) {\n // 다음날짜 달력을 변경합니다.\n nextInputValue = _val;\n } else {}\n } else {\n nextInputValue = _val;\n }\n\n if (nextInputValue) {\n _item.pickerCalendar[1].ax5uiInstance.setSelection([nextInputValue], false).changeMode(\"d\", nextInputValue);\n this.setContentValue(_item.id, 1, nextInputValue);\n }\n\n return _val;\n } else if (_inputIndex == 1) {\n\n if (values.length > 1) {\n // 값 검증\n diffDay = ax5.util.dday(values[1], { today: values[0] });\n if (diffDay < 0) {\n // 다음날짜 달력을 변경합니다.\n prevInputValue = values[1];\n }\n }\n\n if (prevInputValue) {\n _item.pickerCalendar[0].ax5uiInstance.setSelection([prevInputValue], false).changeMode(\"d\", prevInputValue);\n this.setContentValue(_item.id, 0, prevInputValue);\n }\n\n return _val;\n }\n }\n };\n\n return function (boundID, inputIndex, val, _option) {\n\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID),\n item = this.queue[queIdx],\n _input = void 0;\n\n if (!_option) _option = {};\n\n if (item) {\n\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(inputIndex));\n _input.val(val);\n\n if (!item.disableChangeTrigger) {\n _input.trigger(\"change\");\n } else {\n var $colorPreview = item.$target.find('[data-ax5picker-color=\"preview\"]');\n if ($colorPreview.get(0)) {\n $colorPreview.css({ \"background-color\": val });\n }\n }\n\n // picker의 입력이 2개이상인 경우\n //console.log(item.inputLength);\n if (item.inputLength > 1) {\n // 경우에 따라 첫번 선택에 따라 해야할 일들 처리\n if (multipleInputProcessor[item.content.type]) {\n val = multipleInputProcessor[item.content.type].call(this, item, inputIndex, val);\n }\n }\n\n var that = {\n self: self,\n state: \"changeValue\",\n item: item,\n inputIndex: inputIndex,\n value: val,\n values: [val]\n };\n if (item.$target.get(0).tagName.toUpperCase() !== \"INPUT\") {\n that.values = [];\n item.$target.find('input[type]').each(function () {\n that.values.push(this.value);\n });\n }\n\n onStateChanged.call(this, item, that);\n\n if (item.inputLength == 1 && !_option.doNotClose) {\n this.close();\n }\n }\n\n item = null;\n boundID = null;\n inputIndex = null;\n val = null;\n return this;\n };\n }();\n\n /**\n * @method ax5picker.getContentValue\n * @param {String} boundID\n * @param {Number} inputIndex\n * @returns {ax5picker} this\n */\n this.getContentValue = function () {\n return function (boundID, inputIndex) {\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID),\n item = this.queue[queIdx],\n _input = void 0;\n\n if (item) {\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(inputIndex));\n return _input.val();\n }\n\n item = null;\n boundID = null;\n inputIndex = null;\n return this;\n };\n }();\n\n /**\n * @method ax5picker.open\n * @param {String} boundObjectId\n * @returns {ax5picker} this\n */\n this.open = function () {\n\n var pickerContent = {\n '@fn': function fn(queIdx, callback) {\n var item = this.queue[queIdx];\n item.content.call(item, function (html) {\n callback(html);\n });\n return true;\n },\n 'date': function date(queIdx) {\n var item = this.queue[queIdx],\n html = [],\n calendarConfig = jQuery.extend({}, cfg.calendar, { displayDate: new Date() }),\n input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : item.$target.find('input[type]');\n\n for (var i = 0; i < item.inputLength; i++) {\n html.push('
    ');\n if (i < item.inputLength - 1) html.push('
    ');\n }\n html.push('
    ');\n item.pickerContent.html(html.join(''));\n\n // calendar bind\n item.pickerCalendar = [];\n item.pickerContent.find('[data-calendar-target]').each(function () {\n\n // calendarConfig extend ~\n var idx = this.getAttribute(\"data-calendar-target\"),\n dValue = input.get(idx).value,\n d = ax5.util.date(dValue),\n dateConvert = {\n \"year\": function year(_d) {\n return ax5.util.date(_d, { \"return\": \"yyyy\" });\n },\n \"month\": function month(_d) {\n return ax5.util.date(_d, { \"return\": \"yyyy-MM\" });\n },\n \"day\": function day(_d) {\n return _d;\n }\n };\n\n calendarConfig.displayDate = d;\n\n if (dValue) calendarConfig.selection = [d];\n\n calendarConfig = jQuery.extend(true, calendarConfig, item.content.config || {});\n calendarConfig.target = this;\n calendarConfig.onClick = function () {\n self.setContentValue(item.id, idx, dateConvert[calendarConfig.selectMode || \"day\"](this.date));\n };\n\n item.pickerCalendar.push({\n itemId: item.id,\n inputIndex: idx,\n ax5uiInstance: new ax5.ui.calendar(calendarConfig)\n });\n });\n },\n 'secure-num': function secureNum(queIdx) {\n var item = this.queue[queIdx],\n html = [];\n for (var i = 0; i < item.inputLength; i++) {\n html.push('
    ');\n if (i < item.inputLength - 1) html.push('
    ');\n }\n html.push('
    ');\n item.pickerContent.html(html.join(''));\n\n // secure-num bind\n item.pickerContent.find('[data-secure-num-target]').each(function () {\n var idx = this.getAttribute(\"data-secure-num-target\"),\n po = [];\n\n var numArray = function (a) {\n var j, x, i;\n for (i = a.length; i; i -= 1) {\n j = Math.floor(Math.random() * i);\n x = a[i - 1];\n a[i - 1] = a[j];\n a[j] = x;\n }\n return a;\n }([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\n var specialArray = [{ label: \"←\", fn: \"back\" }, { label: \"C\", fn: \"clear\" }];\n\n numArray.forEach(function (n) {\n po.push('
    ');\n po.push('');\n po.push('
    ');\n });\n specialArray.forEach(function (n) {\n po.push('
    ');\n po.push('');\n po.push('
    ');\n });\n\n po.push('
    ');\n\n $(this).html(po.join('')).on(\"click\", '[data-secure-num-value]', function () {\n var act = this.getAttribute(\"data-secure-num-value\");\n var _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(idx));\n var val = _input.val();\n\n if (act == \"back\") {\n _input.val(val.substring(0, val.length - 1));\n } else if (act == \"clear\") {\n _input.val('');\n } else {\n _input.val(val + act);\n }\n\n onStateChanged.call(this, item, {\n self: self,\n state: \"changeValue\",\n item: item,\n value: _input.val()\n });\n });\n });\n },\n 'keyboard': function keyboard(queIdx) {\n var item = this.queue[queIdx];\n var html = [];\n for (var i = 0; i < item.inputLength; i++) {\n html.push('
    ');\n if (i < item.inputLength - 1) html.push('
    ');\n }\n html.push('
    ');\n item.pickerContent.html(html.join(''));\n\n var keyArray = [[{ value: \"`\", shiftValue: \"~\" }, { value: \"1\", shiftValue: \"!\" }, { value: \"2\", shiftValue: \"@\" }, { value: \"3\", shiftValue: \"#\" }, { value: \"4\", shiftValue: \"$\" }, { value: \"5\", shiftValue: \"%\" }, { value: \"6\", shiftValue: \"^\" }, { value: \"7\", shiftValue: \"&\" }, { value: \"8\", shiftValue: \"*\" }, { value: \"9\", shiftValue: \"(\" }, { value: \"0\", shiftValue: \")\" }, { value: \"-\", shiftValue: \"_\" }, { value: \"=\", shiftValue: \"+\" }, { label: \"←\", fn: \"back\" }], [{ value: \"q\", shiftValue: \"Q\" }, { value: \"w\", shiftValue: \"W\" }, { value: \"e\", shiftValue: \"E\" }, { value: \"r\", shiftValue: \"R\" }, { value: \"t\", shiftValue: \"T\" }, { value: \"y\", shiftValue: \"Y\" }, { value: \"u\", shiftValue: \"U\" }, { value: \"i\", shiftValue: \"I\" }, { value: \"o\", shiftValue: \"O\" }, { value: \"p\", shiftValue: \"P\" }, { value: \"[\", shiftValue: \"{\" }, { value: \"]\", shiftValue: \"}\" }, { value: \"\\\\\", shiftValue: \"|\" }], [{ label: \"Clear\", fn: \"clear\" }, { value: \"a\", shiftValue: \"A\" }, { value: \"s\", shiftValue: \"S\" }, { value: \"d\", shiftValue: \"D\" }, { value: \"f\", shiftValue: \"F\" }, { value: \"g\", shiftValue: \"G\" }, { value: \"h\", shiftValue: \"H\" }, { value: \"j\", shiftValue: \"J\" }, { value: \"k\", shiftValue: \"K\" }, { value: \"l\", shiftValue: \"L\" }, { value: \";\", shiftValue: \":\" }, { value: \"'\", shiftValue: \"\\\"\" }], [{ label: \"Shift\", fn: \"shift\" }, { value: \"z\", shiftValue: \"Z\" }, { value: \"x\", shiftValue: \"X\" }, { value: \"c\", shiftValue: \"C\" }, { value: \"v\", shiftValue: \"V\" }, { value: \"b\", shiftValue: \"B\" }, { value: \"n\", shiftValue: \"N\" }, { value: \"m\", shiftValue: \"M\" }, { value: \",\", shiftValue: \"<\" }, { value: \".\", shiftValue: \">\" }, { value: \"/\", shiftValue: \"?\" }, { label: \"Close\", fn: \"close\" }]];\n var specialArray = [{ label: \"←\", fn: \"back\" }, { label: \"C\", fn: \"clear\" }];\n\n var getKeyBoard = function getKeyBoard(isShiftKey) {\n var po = [];\n keyArray.forEach(function (row) {\n po.push('
    ');\n row.forEach(function (n) {\n\n var keyValue, keyLabel, btnWrapStyle, btnTheme, btnStyle;\n if (n.fn) {\n keyValue = n.fn;\n keyLabel = n.label;\n btnWrapStyle = item.content.config.specialBtnWrapStyle;\n btnTheme = item.content.config.specialBtnTheme;\n btnStyle = item.content.config.specialBtnStyle;\n } else {\n keyLabel = keyValue = isShiftKey ? n.shiftValue : n.value;\n btnWrapStyle = item.content.config.btnWrapStyle;\n btnTheme = item.content.config.btnTheme;\n btnStyle = item.content.config.btnStyle;\n }\n\n po.push('
    ');\n po.push('');\n po.push('
    ');\n });\n po.push('
    ');\n });\n return po.join('');\n };\n\n // secure-num bind\n item.pickerContent.find('[data-keyboard-target]').each(function () {\n var idx = this.getAttribute(\"data-keyboard-target\"),\n $this = $(this),\n isShiftKey = false,\n toggleShift = function toggleShift() {\n isShiftKey = !isShiftKey;\n $this.html(getKeyBoard(isShiftKey));\n };\n\n $this.html(getKeyBoard(isShiftKey)).on(\"mousedown\", '[data-keyboard-value]', function () {\n var act = this.getAttribute(\"data-keyboard-value\"),\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(idx)),\n val = _input.val();\n\n switch (act) {\n case \"back\":\n _input.val(val.substring(0, val.length - 1));\n break;\n case \"clear\":\n _input.val('');\n break;\n case \"shift\":\n toggleShift();\n return false;\n break;\n case \"close\":\n self.close();\n return false;\n break;\n default:\n _input.val(val + act);\n }\n\n onStateChanged.call(this, item, {\n self: self,\n state: \"changeValue\",\n item: item,\n value: _input.val()\n });\n });\n });\n },\n 'numpad': function numpad(queIdx) {\n var item = this.queue[queIdx],\n html = [];\n for (var i = 0; i < item.inputLength; i++) {\n html.push('
    ');\n if (i < item.inputLength - 1) html.push('
    ');\n }\n html.push('
    ');\n item.pickerContent.html(html.join(''));\n\n // secure-num bind\n item.pickerContent.find('[data-numpad-target]').each(function () {\n var idx = this.getAttribute(\"data-numpad-target\"),\n po = [],\n keyArray = item.content.config.keyArray || [{ value: \"7\" }, { value: \"8\" }, { value: \"9\" }, { label: \"BS\", fn: \"back\" }, { value: \"4\" }, { value: \"5\" }, { value: \"6\" }, { label: \"CLS\", fn: \"clear\" }, { value: \"1\" }, { value: \"2\" }, { value: \"3\" }, { value: \"\" }, { value: \".\" }, { value: \"0\" }, { value: \"\" }, { label: \"OK\", fn: \"enter\" }];\n\n keyArray.forEach(function (n) {\n var keyValue = void 0,\n keyLabel = void 0,\n btnWrapStyle = void 0,\n btnTheme = void 0,\n btnStyle = void 0;\n\n if (n.fn) {\n keyValue = n.fn;\n keyLabel = n.label;\n btnTheme = item.content.config.specialBtnTheme;\n btnWrapStyle = item.content.config.specialBtnWrapStyle;\n btnStyle = item.content.config.specialBtnStyle;\n } else {\n keyLabel = keyValue = n.value;\n btnTheme = keyValue ? item.content.config.btnTheme : \"\";\n btnWrapStyle = item.content.config.btnWrapStyle;\n btnStyle = item.content.config.btnStyle;\n }\n\n po.push('
    ');\n po.push('');\n po.push('
    ');\n });\n\n po.push('
    ');\n\n $(this).html(po.join('')).on(\"mousedown\", '[data-numpad-value]', function () {\n var act = this.getAttribute(\"data-numpad-value\"),\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(idx)),\n val = _input.val(),\n state = \"\";\n\n switch (act) {\n case \"back\":\n state = \"changeValue\";\n _input.val(val.substring(0, val.length - 1));\n break;\n case \"clear\":\n state = \"changeValue\";\n _input.val('');\n break;\n case \"enter\":\n self.close(item, \"enter\");\n return false;\n break;\n case \"close\":\n self.close();\n return false;\n break;\n default:\n state = \"changeValue\";\n _input.val(val + act);\n }\n\n onStateChanged.call(this, item, {\n self: self,\n state: state,\n item: item,\n value: _input.val()\n });\n });\n });\n },\n 'color': function color(queIdx) {\n var item = this.queue[queIdx],\n html = [],\n paletteConfig = jQuery.extend({}, cfg.palette),\n input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : item.$target.find('input[type]');\n\n for (var i = 0; i < item.inputLength; i++) {\n html.push('
    ');\n if (i < item.inputLength - 1) html.push('
    ');\n }\n html.push('
    ');\n item.pickerContent.html(html.join(''));\n\n // calendar bind\n item.pickerPalette = [];\n\n item.pickerContent.find('[data-palette-target]').each(function () {\n // calendarConfig extend ~\n var idx = this.getAttribute(\"data-palette-target\"),\n dColor = input.get(idx).value;\n\n paletteConfig.selectedColor = dColor;\n paletteConfig = jQuery.extend(true, paletteConfig, item.content.config || {});\n paletteConfig.target = this;\n paletteConfig.onClick = function (color) {\n self.setContentValue(item.id, idx, color);\n };\n paletteConfig.onUpdateColor = function (color) {\n self.setContentValue(item.id, idx, color, { doNotClose: true });\n };\n\n item.pickerPalette.push({\n itemId: item.id,\n inputIndex: idx,\n ax5uiInstance: new ax5.ui.palette(paletteConfig)\n });\n });\n }\n };\n\n return function (boundID, tryCount) {\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID),\n item = this.queue[queIdx];\n\n /**\n 다른 피커가 있는 경우와 다른 피커를 닫고 다시 오픈 명령이 내려진 경우에 대한 예외 처리 구문\n */\n if (this.openTimer) clearTimeout(this.openTimer);\n if (this.activePicker) {\n if (this.activePickerQueueIndex == queIdx) {\n return this;\n }\n\n if (tryCount > 2) return this;\n this.close();\n this.openTimer = setTimeout(function () {\n this.open(queIdx, (tryCount || 0) + 1);\n }.bind(this), cfg.animateTime);\n return this;\n }\n\n this.activePicker = jQuery(PICKER.tmpl.get.call(this, \"pickerTmpl\", item));\n this.activePickerArrow = this.activePicker.find(\".ax-picker-arrow\");\n this.activePickerQueueIndex = queIdx;\n item.pickerContent = this.activePicker.find('[data-picker-els=\"content\"]');\n\n if (U.isFunction(item.content)) {\n // 함수타입\n item.pickerContent.html(\"Loading..\");\n pickerContent[\"@fn\"].call(this, queIdx, function (html) {\n item.pickerContent.html(html);\n });\n } else {\n if (item.content.type in pickerContent) {\n pickerContent[item.content.type].call(this, queIdx);\n }\n }\n\n // bind event picker btns\n this.activePicker.find(\"[data-picker-btn]\").on(cfg.clickEventName, function (e) {\n onBtnClick.call(this, e || window.event, queIdx);\n }.bind(this));\n\n alignPicker.call(this, \"append\");\n\n jQuery(window).bind(\"resize.ax5picker\", function () {\n alignPicker.call(this);\n }.bind(this));\n\n // bind key event\n jQuery(window).bind(\"keyup.ax5picker\", function (e) {\n e = e || window.event;\n onBodyKeyup.call(this, e);\n U.stopEvent(e);\n }.bind(this));\n\n jQuery(window).bind(\"click.ax5picker\", function (e) {\n e = e || window.event;\n onBodyClick.call(this, e);\n U.stopEvent(e);\n }.bind(this));\n\n onStateChanged.call(this, item, {\n self: this,\n state: \"open\",\n item: item\n });\n\n return this;\n };\n }();\n\n /**\n * @method ax5picker.close\n * @returns {ax5picker} this\n */\n this.close = function (item, state) {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n if (!this.activePicker) return this;\n\n item = this.queue[this.activePickerQueueIndex];\n\n this.activePicker.addClass(\"destroy\");\n jQuery(window).unbind(\"resize.ax5picker\");\n jQuery(window).unbind(\"click.ax5picker\");\n jQuery(window).unbind(\"keyup.ax5picker\");\n\n this.closeTimer = setTimeout(function () {\n if (this.activePicker) this.activePicker.remove();\n this.activePicker = null;\n this.activePickerQueueIndex = -1;\n\n onStateChanged.call(this, item, {\n self: this,\n state: state || \"close\"\n });\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n // 클래스 생성자\n this.main = function () {\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n PICKER = ax5.ui.picker;\n})();\n\n// ax5.ui.picker.tmpl\n(function () {\n\n var PICKER = ax5.ui.picker;\n var U = ax5.util;\n\n var pickerTmpl = function pickerTmpl() {\n return \"\\n
    \\n {{#title}}\\n
    {{title}}
    \\n {{/title}}\\n
    \\n
    \\n {{#btns}}\\n
    \\n {{#btns}}\\n {{#@each}}\\n \\n {{/@each}}\\n {{/btns}}\\n
    \\n {{/btns}}\\n
    \\n
    \\n
    \\n\";\n };\n\n PICKER.tmpl = {\n \"pickerTmpl\": pickerTmpl,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(PICKER.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();\n/**\n * ax5.ui.picker_instance\n * @type {ax5picker}\n * @example\n * ```js\n * // picker 기본 속성을 변경해야 한다면\n * ax5.ui.picker_instance.setConfig({\n * });\n *\n * ```\n */\nif (ax5 && ax5.ui && ax5.ui.picker) {\n ax5.ui.picker_instance = new ax5.ui.picker();\n\n jQuery.fn.ax5picker = function () {\n return function (config) {\n if (ax5.util.isString(arguments[0])) {\n var methodName = arguments[0];\n\n switch (methodName) {\n case \"open\":\n return ax5.ui.picker_instance.open(this);\n break;\n case \"close\":\n return ax5.ui.picker_instance.close(this);\n break;\n case \"setValue\":\n return ax5.ui.picker_instance.setContentValue(this, arguments[1], arguments[2]);\n break;\n default:\n return this;\n }\n } else {\n if (typeof config == \"undefined\") config = {};\n jQuery.each(this, function () {\n var defaultConfig = {\n target: this\n };\n config = jQuery.extend(true, config, defaultConfig);\n ax5.ui.picker_instance.bind(config);\n });\n }\n return this;\n };\n }();\n}","/*!\r\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2016\r\n * @version 1.3.4\r\n *\r\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\r\n * @see http://php.net/manual/en/function.date.php\r\n *\r\n * For more JQuery plugins visit http://plugins.krajee.com\r\n * For more Yii related demos visit http://demos.krajee.com\r\n */var DateFormatter;!function(){\"use strict\";var t,e,r,n,a,u,i;u=864e5,i=3600,t=function(t,e){return\"string\"==typeof t&&\"string\"==typeof e&&t.toLowerCase()===e.toLowerCase()},e=function(t,r,n){var a=n||\"0\",u=t.toString();return u.lengths?\"20\":\"19\")+i):s,g=!0;break;case\"m\":case\"n\":case\"M\":case\"F\":if(isNaN(s)){if(o=d.getMonth(i),!(o>0))return null;y.month=o}else{if(!(s>=1&&12>=s))return null;y.month=s}g=!0;break;case\"d\":case\"j\":if(!(s>=1&&31>=s))return null;y.day=s,g=!0;break;case\"g\":case\"h\":if(c=n.indexOf(\"a\")>-1?n.indexOf(\"a\"):n.indexOf(\"A\")>-1?n.indexOf(\"A\"):-1,h=a[c],c>-1)f=t(h,p.meridiem[0])?0:t(h,p.meridiem[1])?12:-1,s>=1&&12>=s&&f>-1?y.hour=s+f-1:s>=0&&23>=s&&(y.hour=s);else{if(!(s>=0&&23>=s))return null;y.hour=s}m=!0;break;case\"G\":case\"H\":if(!(s>=0&&23>=s))return null;y.hour=s,m=!0;break;case\"i\":if(!(s>=0&&59>=s))return null;y.min=s,m=!0;break;case\"s\":if(!(s>=0&&59>=s))return null;y.sec=s,m=!0}if(g===!0&&y.year&&y.month&&y.day)y.date=new Date(y.year,y.month-1,y.day,y.hour,y.min,y.sec,0);else{if(m!==!0)return null;y.date=new Date(0,0,0,y.hour,y.min,y.sec,0)}return y.date},guessDate:function(t,e){if(\"string\"!=typeof t)return t;var r,n,a,u,i,s,o=this,c=t.replace(o.separators,\"\\x00\").split(\"\\x00\"),f=/^[djmn]/g,l=e.match(o.validParts),h=new Date,d=0;if(!f.test(l[0]))return t;for(a=0;ar?r:4,n=parseInt(4>r?n.toString().substr(0,4-r)+i:i.substr(0,4)),!n)return null;h.setFullYear(n);break;case 3:h.setHours(s);break;case 4:h.setMinutes(s);break;case 5:h.setSeconds(s)}u=i.substr(d),u.length>0&&c.splice(a+1,0,u)}return h},parseFormat:function(t,r){var n,a=this,s=a.dateSettings,o=/\\\\?(.?)/gi,c=function(t,e){return n[t]?n[t]():e};return n={d:function(){return e(n.j(),2)},D:function(){return s.daysShort[n.w()]},j:function(){return r.getDate()},l:function(){return s.days[n.w()]},N:function(){return n.w()||7},w:function(){return r.getDay()},z:function(){var t=new Date(n.Y(),n.n()-1,n.j()),e=new Date(n.Y(),0,1);return Math.round((t-e)/u)},W:function(){var t=new Date(n.Y(),n.n()-1,n.j()-n.N()+3),r=new Date(t.getFullYear(),0,4);return e(1+Math.round((t-r)/u/7),2)},F:function(){return s.months[r.getMonth()]},m:function(){return e(n.n(),2)},M:function(){return s.monthsShort[r.getMonth()]},n:function(){return r.getMonth()+1},t:function(){return new Date(n.Y(),n.n(),0).getDate()},L:function(){var t=n.Y();return t%4===0&&t%100!==0||t%400===0?1:0},o:function(){var t=n.n(),e=n.W(),r=n.Y();return r+(12===t&&9>e?1:1===t&&e>9?-1:0)},Y:function(){return r.getFullYear()},y:function(){return n.Y().toString().slice(-2)},a:function(){return n.A().toLowerCase()},A:function(){var t=n.G()<12?0:1;return s.meridiem[t]},B:function(){var t=r.getUTCHours()*i,n=60*r.getUTCMinutes(),a=r.getUTCSeconds();return e(Math.floor((t+n+a+i)/86.4)%1e3,3)},g:function(){return n.G()%12||12},G:function(){return r.getHours()},h:function(){return e(n.g(),2)},H:function(){return e(n.G(),2)},i:function(){return e(r.getMinutes(),2)},s:function(){return e(r.getSeconds(),2)},u:function(){return e(1e3*r.getMilliseconds(),6)},e:function(){var t=/\\((.*)\\)/.exec(String(r))[1];return t||\"Coordinated Universal Time\"},I:function(){var t=new Date(n.Y(),0),e=Date.UTC(n.Y(),0),r=new Date(n.Y(),6),a=Date.UTC(n.Y(),6);return t-e!==r-a?1:0},O:function(){var t=r.getTimezoneOffset(),n=Math.abs(t);return(t>0?\"-\":\"+\")+e(100*Math.floor(n/60)+n%60,4)},P:function(){var t=n.O();return t.substr(0,3)+\":\"+t.substr(3,2)},T:function(){var t=(String(r).match(a.tzParts)||[\"\"]).pop().replace(a.tzClip,\"\");return t||\"UTC\"},Z:function(){return 60*-r.getTimezoneOffset()},c:function(){return\"Y-m-d\\\\TH:i:sP\".replace(o,c)},r:function(){return\"D, d M Y H:i:s O\".replace(o,c)},U:function(){return r.getTime()/1e3||0}},c(t,t)},formatDate:function(t,e){var r,n,a,u,i,s=this,o=\"\",c=\"\\\\\";if(\"string\"==typeof t&&(t=s.parseDate(t,e),!t))return null;if(t instanceof Date){for(a=e.length,r=0;a>r;r++)i=e.charAt(r),\"S\"!==i&&i!==c&&(r>0&&e.charAt(r-1)===c?o+=i:(u=s.parseFormat(i,t),r!==a-1&&s.intParts.test(i)&&\"S\"===e.charAt(r+1)&&(n=parseInt(u)||0,u+=s.dateSettings.ordinal(n)),o+=u));return o}return\"\"}}}();/**\r\n * @preserve jQuery DateTimePicker\r\n * @homepage http://xdsoft.net/jqplugins/datetimepicker/\r\n * @author Chupurnov Valeriy ()\r\n */\r\n\r\n/**\r\n * @param {jQuery} $\r\n */\r\nvar datetimepickerFactory = function ($) {\r\n\t'use strict';\r\n\r\n\tvar default_options = {\r\n\t\ti18n: {\r\n\t\t\tar: { // Arabic\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"الأحد\", \"الاثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\", \"الأحد\"]\r\n\t\t\t},\r\n\t\t\tro: { // Romanian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"Noiembrie\", \"Decembrie\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sâ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Duminică\", \"Luni\", \"Marţi\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sâmbătă\"]\r\n\t\t\t},\r\n\t\t\tid: { // Indonesian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Min\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"]\r\n\t\t\t},\r\n\t\t\tis: { // Icelandic\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janúar\", \"Febrúar\", \"Mars\", \"Apríl\", \"Maí\", \"Júní\", \"Júlí\", \"Ágúst\", \"September\", \"Október\", \"Nóvember\", \"Desember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sun\", \"Mán\", \"Þrið\", \"Mið\", \"Fim\", \"Fös\", \"Lau\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sunnudagur\", \"Mánudagur\", \"Þriðjudagur\", \"Miðvikudagur\", \"Fimmtudagur\", \"Föstudagur\", \"Laugardagur\"]\r\n\t\t\t},\r\n\t\t\tbg: { // Bulgarian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Неделя\", \"Понеделник\", \"Вторник\", \"Сряда\", \"Четвъртък\", \"Петък\", \"Събота\"]\r\n\t\t\t},\r\n\t\t\tfa: { // Persian/Farsi\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"یک‌شنبه\", \"دوشنبه\", \"سه‌شنبه\", \"چهارشنبه\", \"پنج‌شنبه\", \"جمعه\", \"شنبه\", \"یک‌شنبه\"]\r\n\t\t\t},\r\n\t\t\tru: { // Russian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"]\r\n\t\t\t},\r\n\t\t\tuk: { // Ukrainian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"]\r\n\t\t\t},\r\n\t\t\ten: { // English\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\r\n\t\t\t},\r\n\t\t\tel: { // Ελληνικά\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Σάββατο\"]\r\n\t\t\t},\r\n\t\t\tde: { // German\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"]\r\n\t\t\t},\r\n\t\t\tnl: { // Dutch\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"]\r\n\t\t\t},\r\n\t\t\ttr: { // Turkish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"]\r\n\t\t\t},\r\n\t\t\tfr: { //French\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"]\r\n\t\t\t},\r\n\t\t\tes: { // Spanish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\tth: { // Thai\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"อาทิตย์\", \"จันทร์\", \"อังคาร\", \"พุธ\", \"พฤหัส\", \"ศุกร์\", \"เสาร์\", \"อาทิตย์\"]\r\n\t\t\t},\r\n\t\t\tpl: { // Polish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"niedziela\", \"poniedziałek\", \"wtorek\", \"środa\", \"czwartek\", \"piątek\", \"sobota\"]\r\n\t\t\t},\r\n\t\t\tpt: { // Portuguese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\tch: { // Simplified Chinese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tse: { // Swedish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tkm: { // Khmer (ភាសាខ្មែរ)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"មករា​\", \"កុម្ភៈ\", \"មិនា​\", \"មេសា​\", \"ឧសភា​\", \"មិថុនា​\", \"កក្កដា​\", \"សីហា​\", \"កញ្ញា​\", \"តុលា​\", \"វិច្ឆិកា\", \"ធ្នូ​\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\"អាទិ​\", \"ច័ន្ទ​\", \"អង្គារ​\", \"ពុធ​\", \"ព្រហ​​\", \"សុក្រ​\", \"សៅរ៍\"],\r\n\t\t\t\tdayOfWeek: [\"អាទិត្យ​\", \"ច័ន្ទ​\", \"អង្គារ​\", \"ពុធ​\", \"ព្រហស្បតិ៍​\", \"សុក្រ​\", \"សៅរ៍\"]\r\n\t\t\t},\r\n\t\t\tkr: { // Korean\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\r\n\t\t\t},\r\n\t\t\tit: { // Italian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"]\r\n\t\t\t},\r\n\t\t\tda: { // Dansk\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"]\r\n\t\t\t},\r\n\t\t\tno: { // Norwegian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']\r\n\t\t\t},\r\n\t\t\tja: { // Japanese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"日曜\", \"月曜\", \"火曜\", \"水曜\", \"木曜\", \"金曜\", \"土曜\"]\r\n\t\t\t},\r\n\t\t\tvi: { // Vietnamese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Chủ nhật\", \"Thứ hai\", \"Thứ ba\", \"Thứ tư\", \"Thứ năm\", \"Thứ sáu\", \"Thứ bảy\"]\r\n\t\t\t},\r\n\t\t\tsl: { // Slovenščina\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"]\r\n\t\t\t},\r\n\t\t\tcs: { // Čeština\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\thu: { // Hungarian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"vasárnap\", \"hétfő\", \"kedd\", \"szerda\", \"csütörtök\", \"péntek\", \"szombat\"]\r\n\t\t\t},\r\n\t\t\taz: { //Azerbaijanian (Azeri)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Bazar\", \"Bazar ertəsi\", \"Çərşənbə axşamı\", \"Çərşənbə\", \"Cümə axşamı\", \"Cümə\", \"Şənbə\"]\r\n\t\t\t},\r\n\t\t\tbs: { //Bosanski\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedjelja\",\"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"]\r\n\t\t\t},\r\n\t\t\tca: { //Català\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"]\r\n\t\t\t},\r\n\t\t\t'en-GB': { //English (British)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\r\n\t\t\t},\r\n\t\t\tet: { //\"Eesti\"\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Pühapäev\", \"Esmaspäev\", \"Teisipäev\", \"Kolmapäev\", \"Neljapäev\", \"Reede\", \"Laupäev\"]\r\n\t\t\t},\r\n\t\t\teu: { //Euskara\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']\r\n\t\t\t},\r\n\t\t\tfi: { //Finnish (Suomi)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"]\r\n\t\t\t},\r\n\t\t\tgl: { //Galego\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Luns\", \"Martes\", \"Mércores\", \"Xoves\", \"Venres\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\thr: { //Hrvatski\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"]\r\n\t\t\t},\r\n\t\t\tko: { //Korean (한국어)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\r\n\t\t\t},\r\n\t\t\tlt: { //Lithuanian (lietuvių)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sekmadienis\", \"Pirmadienis\", \"Antradienis\", \"Trečiadienis\", \"Ketvirtadienis\", \"Penktadienis\", \"Šeštadienis\"]\r\n\t\t\t},\r\n\t\t\tlv: { //Latvian (Latviešu)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Svētdiena\", \"Pirmdiena\", \"Otrdiena\", \"Trešdiena\", \"Ceturtdiena\", \"Piektdiena\", \"Sestdiena\"]\r\n\t\t\t},\r\n\t\t\tmk: { //Macedonian (Македонски)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Недела\", \"Понеделник\", \"Вторник\", \"Среда\", \"Четврток\", \"Петок\", \"Сабота\"]\r\n\t\t\t},\r\n\t\t\tmn: { //Mongolian (Монгол)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Даваа\", \"Мягмар\", \"Лхагва\", \"Пүрэв\", \"Баасан\", \"Бямба\", \"Ням\"]\r\n\t\t\t},\r\n\t\t\t'pt-BR': { //Português(Brasil)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\tsk: { //Slovenčina\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\"]\r\n\t\t\t},\r\n\t\t\tsq: { //Albanian (Shqip)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janar\", \"Shkurt\", \"Mars\", \"Prill\", \"Maj\", \"Qershor\", \"Korrik\", \"Gusht\", \"Shtator\", \"Tetor\", \"Nëntor\", \"Dhjetor\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Die\", \"Hën\", \"Mar\", \"Mër\", \"Enj\", \"Pre\", \"Shtu\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"E Diel\", \"E Hënë\", \"E Martē\", \"E Mërkurë\", \"E Enjte\", \"E Premte\", \"E Shtunë\"]\r\n\t\t\t},\r\n\t\t\t'sr-YU': { //Serbian (Srpski)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedelja\",\"Ponedeljak\", \"Utorak\", \"Sreda\", \"Četvrtak\", \"Petak\", \"Subota\"]\r\n\t\t\t},\r\n\t\t\tsr: { //Serbian Cyrillic (Српски)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Недеља\",\"Понедељак\", \"Уторак\", \"Среда\", \"Четвртак\", \"Петак\", \"Субота\"]\r\n\t\t\t},\r\n\t\t\tsv: { //Svenska\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"]\r\n\t\t\t},\r\n\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"]\r\n\t\t\t},\r\n\t\t\tzh: { //Simplified Chinese (简体中文)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"]\r\n\t\t\t},\r\n\t\t\tug:{ // Uyghur(ئۇيغۇرچە)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1-ئاي\",\"2-ئاي\",\"3-ئاي\",\"4-ئاي\",\"5-ئاي\",\"6-ئاي\",\"7-ئاي\",\"8-ئاي\",\"9-ئاي\",\"10-ئاي\",\"11-ئاي\",\"12-ئاي\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\r\n\t\t\t\t\t\"يەكشەنبە\", \"دۈشەنبە\",\"سەيشەنبە\",\"چارشەنبە\",\"پەيشەنبە\",\"جۈمە\",\"شەنبە\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\the: { //Hebrew (עברית)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\", \"ראשון\"]\r\n\t\t\t},\r\n\t\t\thy: { // Armenian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Հունվար\", \"Փետրվար\", \"Մարտ\", \"Ապրիլ\", \"Մայիս\", \"Հունիս\", \"Հուլիս\", \"Օգոստոս\", \"Սեպտեմբեր\", \"Հոկտեմբեր\", \"Նոյեմբեր\", \"Դեկտեմբեր\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Կի\", \"Երկ\", \"Երք\", \"Չոր\", \"Հնգ\", \"Ուրբ\", \"Շբթ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Կիրակի\", \"Երկուշաբթի\", \"Երեքշաբթի\", \"Չորեքշաբթի\", \"Հինգշաբթի\", \"Ուրբաթ\", \"Շաբաթ\"]\r\n\t\t\t},\r\n\t\t\tkg: { // Kyrgyz\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Жек\", \"Дүй\", \"Шей\", \"Шар\", \"Бей\", \"Жум\", \"Ише\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\r\n\t\t\t\t\t\"Жекшемб\", \"Дүйшөмб\", \"Шейшемб\", \"Шаршемб\", \"Бейшемби\", \"Жума\", \"Ишенб\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\trm: { // Romansh\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Schaner\", \"Favrer\", \"Mars\", \"Avrigl\", \"Matg\", \"Zercladur\", \"Fanadur\", \"Avust\", \"Settember\", \"October\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Du\", \"Gli\", \"Ma\", \"Me\", \"Gie\", \"Ve\", \"So\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\r\n\t\t\t\t\t\"Dumengia\", \"Glindesdi\", \"Mardi\", \"Mesemna\", \"Gievgia\", \"Venderdi\", \"Sonda\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tka: { // Georgian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"კვ\", \"ორშ\", \"სამშ\", \"ოთხ\", \"ხუთ\", \"პარ\", \"შაბ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"კვირა\", \"ორშაბათი\", \"სამშაბათი\", \"ოთხშაბათი\", \"ხუთშაბათი\", \"პარასკევი\", \"შაბათი\"]\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\townerDocument: document,\r\n\t\tcontentWindow: window,\r\n\r\n\t\tvalue: '',\r\n\t\trtl: false,\r\n\r\n\t\tformat:\t'Y/m/d H:i',\r\n\t\tformatTime:\t'H:i',\r\n\t\tformatDate:\t'Y/m/d',\r\n\r\n\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\r\n\t\tstep: 60,\r\n\t\tmonthChangeSpinner: true,\r\n\r\n\t\tcloseOnDateSelect: false,\r\n\t\tcloseOnTimeSelect: true,\r\n\t\tcloseOnWithoutClick: true,\r\n\t\tcloseOnInputClick: true,\r\n\t\topenOnFocus: true,\r\n\r\n\t\ttimepicker: true,\r\n\t\tdatepicker: true,\r\n\t\tweeks: false,\r\n\r\n\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\r\n\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\r\n\r\n\t\tminDate: false,\r\n\t\tmaxDate: false,\r\n\t\tminTime: false,\r\n\t\tmaxTime: false,\r\n\t\tminDateTime: false,\r\n\t\tmaxDateTime: false,\r\n\r\n\t\tallowTimes: [],\r\n\t\topened: false,\r\n\t\tinitTime: true,\r\n\t\tinline: false,\r\n\t\ttheme: '',\r\n\t\ttouchMovedThreshold: 5,\r\n\r\n\t\tonSelectDate: function () {},\r\n\t\tonSelectTime: function () {},\r\n\t\tonChangeMonth: function () {},\r\n\t\tonGetWeekOfYear: function () {},\r\n\t\tonChangeYear: function () {},\r\n\t\tonChangeDateTime: function () {},\r\n\t\tonShow: function () {},\r\n\t\tonClose: function () {},\r\n\t\tonGenerate: function () {},\r\n\r\n\t\twithoutCopyright: true,\r\n\t\tinverseButton: false,\r\n\t\thours12: false,\r\n\t\tnext: 'xdsoft_next',\r\n\t\tprev : 'xdsoft_prev',\r\n\t\tdayOfWeekStart: 0,\r\n\t\tparentID: 'body',\r\n\t\ttimeHeightInTimePicker: 25,\r\n\t\ttimepickerScrollbar: true,\r\n\t\ttodayButton: true,\r\n\t\tprevButton: true,\r\n\t\tnextButton: true,\r\n\t\tdefaultSelect: true,\r\n\r\n\t\tscrollMonth: true,\r\n\t\tscrollTime: true,\r\n\t\tscrollInput: true,\r\n\r\n\t\tlazyInit: false,\r\n\t\tmask: false,\r\n\t\tvalidateOnBlur: true,\r\n\t\tallowBlank: true,\r\n\t\tyearStart: 1950,\r\n\t\tyearEnd: 2050,\r\n\t\tmonthStart: 0,\r\n\t\tmonthEnd: 11,\r\n\t\tstyle: '',\r\n\t\tid: '',\r\n\t\tfixed: false,\r\n\t\troundTime: 'round', // ceil, floor\r\n\t\tclassName: '',\r\n\t\tweekends: [],\r\n\t\thighlightedDates: [],\r\n\t\thighlightedPeriods: [],\r\n\t\tallowDates : [],\r\n\t\tallowDateRe : null,\r\n\t\tdisabledDates : [],\r\n\t\tdisabledWeekDays: [],\r\n\t\tyearOffset: 0,\r\n\t\tbeforeShowDay: null,\r\n\r\n\t\tenterLikeTab: true,\r\n\t\tshowApplyButton: false\r\n\t};\r\n\r\n\tvar dateHelper = null,\r\n\t\tdefaultDateHelper = null,\r\n\t\tglobalLocaleDefault = 'en',\r\n\t\tglobalLocale = 'en';\r\n\r\n\tvar dateFormatterOptionsDefault = {\r\n\t\tmeridiem: ['AM', 'PM']\r\n\t};\r\n\r\n\tvar initDateFormatter = function(){\r\n\t\tvar locale = default_options.i18n[globalLocale],\r\n\t\t\topts = {\r\n\t\t\t\tdays: locale.dayOfWeek,\r\n\t\t\t\tdaysShort: locale.dayOfWeekShort,\r\n\t\t\t\tmonths: locale.months,\r\n\t\t\t\tmonthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) })\r\n\t\t\t};\r\n\r\n\t\tif (typeof DateFormatter === 'function') {\r\n\t\t\tdateHelper = defaultDateHelper = new DateFormatter({\r\n\t\t\t\tdateSettings: $.extend({}, dateFormatterOptionsDefault, opts)\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tvar dateFormatters = {\r\n\t\tmoment: {\r\n\t\t\tdefault_options:{\r\n\t\t\t\tformat: 'YYYY/MM/DD HH:mm',\r\n\t\t\t\tformatDate: 'YYYY/MM/DD',\r\n\t\t\t\tformatTime: 'HH:mm',\r\n\t\t\t},\r\n\t\t\tformatter: {\r\n\t\t\t\tparseDate: function (date, format) {\r\n\t\t\t\t\tif(isFormatStandard(format)){\r\n\t\t\t\t\t\treturn defaultDateHelper.parseDate(date, format);\r\n\t\t\t\t\t} \r\n\t\t\t\t\tvar d = moment(date, format);\r\n\t\t\t\t\treturn d.isValid() ? d.toDate() : false;\r\n\t\t\t\t},\r\n\r\n\t\t\t\tformatDate: function (date, format) {\r\n\t\t\t\t\tif(isFormatStandard(format)){\r\n\t\t\t\t\t\treturn defaultDateHelper.formatDate(date, format);\r\n\t\t\t\t\t} \r\n\t\t\t\t\treturn moment(date).format(format);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tformatMask: function(format){\r\n\t\t\t\t\treturn format\r\n\t\t\t\t\t\t.replace(/Y{4}/g, '9999')\r\n\t\t\t\t\t\t.replace(/Y{2}/g, '99')\r\n\t\t\t\t\t\t.replace(/M{2}/g, '19')\r\n\t\t\t\t\t\t.replace(/D{2}/g, '39')\r\n\t\t\t\t\t\t.replace(/H{2}/g, '29')\r\n\t\t\t\t\t\t.replace(/m{2}/g, '59')\r\n\t\t\t\t\t\t.replace(/s{2}/g, '59');\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// for locale settings\r\n\t$.datetimepicker = {\r\n\t\tsetLocale: function(locale){\r\n\t\t\tvar newLocale = default_options.i18n[locale] ? locale : globalLocaleDefault;\r\n\t\t\tif (globalLocale !== newLocale) {\r\n\t\t\t\tglobalLocale = newLocale;\r\n\t\t\t\t// reinit date formatter\r\n\t\t\t\tinitDateFormatter();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tsetDateFormatter: function(dateFormatter) {\r\n\t\t\tif(typeof dateFormatter === 'string' && dateFormatters.hasOwnProperty(dateFormatter)){\r\n\t\t\t\tvar df = dateFormatters[dateFormatter];\r\n\t\t\t\t$.extend(default_options, df.default_options);\r\n\t\t\t\tdateHelper = df.formatter; \r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdateHelper = dateFormatter;\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\tvar standardFormats = {\r\n\t\tRFC_2822: 'D, d M Y H:i:s O',\r\n\t\tATOM: 'Y-m-d\\TH:i:sP',\r\n\t\tISO_8601: 'Y-m-d\\TH:i:sO',\r\n\t\tRFC_822: 'D, d M y H:i:s O',\r\n\t\tRFC_850: 'l, d-M-y H:i:s T',\r\n\t\tRFC_1036: 'D, d M y H:i:s O',\r\n\t\tRFC_1123: 'D, d M Y H:i:s O',\r\n\t\tRSS: 'D, d M Y H:i:s O',\r\n\t\tW3C: 'Y-m-d\\TH:i:sP'\r\n\t}\r\n\r\n\tvar isFormatStandard = function(format){\r\n\t\treturn Object.values(standardFormats).indexOf(format) === -1 ? false : true;\r\n\t}\r\n\r\n\t$.extend($.datetimepicker, standardFormats);\r\n\r\n\t// first init date formatter\r\n\tinitDateFormatter();\r\n\r\n\t// fix for ie8\r\n\tif (!window.getComputedStyle) {\r\n\t\twindow.getComputedStyle = function (el) {\r\n\t\t\tthis.el = el;\r\n\t\t\tthis.getPropertyValue = function (prop) {\r\n\t\t\t\tvar re = /(-([a-z]))/g;\r\n\t\t\t\tif (prop === 'float') {\r\n\t\t\t\t\tprop = 'styleFloat';\r\n\t\t\t\t}\r\n\t\t\t\tif (re.test(prop)) {\r\n\t\t\t\t\tprop = prop.replace(re, function (a, b, c) {\r\n\t\t\t\t\t\treturn c.toUpperCase();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn el.currentStyle[prop] || null;\r\n\t\t\t};\r\n\t\t\treturn this;\r\n\t\t};\r\n\t}\r\n\tif (!Array.prototype.indexOf) {\r\n\t\tArray.prototype.indexOf = function (obj, start) {\r\n\t\t\tvar i, j;\r\n\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\r\n\t\t\t\tif (this[i] === obj) { return i; }\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\t}\r\n\r\n\tDate.prototype.countDaysInMonth = function () {\r\n\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\r\n\t};\r\n\r\n\t$.fn.xdsoftScroller = function (options, percent) {\r\n\t\treturn this.each(function () {\r\n\t\t\tvar timeboxparent = $(this),\r\n\t\t\t\tpointerEventToXY = function (e) {\r\n\t\t\t\t\tvar out = {x: 0, y: 0},\r\n\t\t\t\t\t\ttouch;\r\n\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\r\n\t\t\t\t\t\ttouch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\r\n\t\t\t\t\t\tout.x = touch.clientX;\r\n\t\t\t\t\t\tout.y = touch.clientY;\r\n\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\r\n\t\t\t\t\t\tout.x = e.clientX;\r\n\t\t\t\t\t\tout.y = e.clientY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn out;\r\n\t\t\t\t},\r\n\t\t\t\ttimebox,\r\n\t\t\t\tparentHeight,\r\n\t\t\t\theight,\r\n\t\t\t\tscrollbar,\r\n\t\t\t\tscroller,\r\n\t\t\t\tmaximumOffset = 100,\r\n\t\t\t\tstart = false,\r\n\t\t\t\tstartY = 0,\r\n\t\t\t\tstartTop = 0,\r\n\t\t\t\th1 = 0,\r\n\t\t\t\ttouchStart = false,\r\n\t\t\t\tstartTopScroll = 0,\r\n\t\t\t\tcalcOffset = function () {};\r\n\r\n\t\t\tif (percent === 'hide') {\r\n\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\r\n\t\t\t\ttimebox = timeboxparent.children().eq(0);\r\n\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\r\n\t\t\t\theight = timebox[0].offsetHeight;\r\n\t\t\t\tscrollbar = $('
    ');\r\n\t\t\t\tscroller = $('
    ');\r\n\t\t\t\tscrollbar.append(scroller);\r\n\r\n\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\r\n\t\t\t\tcalcOffset = function calcOffset(event) {\r\n\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\r\n\t\t\t\t\tif (offset < 0) {\r\n\t\t\t\t\t\toffset = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\r\n\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscroller\r\n\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\r\n\t\t\t\t\t\tif (!parentHeight) {\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\r\n\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\r\n\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\r\n\r\n\t\t\t\t\t\tif (event.type === 'mousedown' || event.type === 'touchstart') {\r\n\t\t\t\t\t\t\tif (options.ownerDocument) {\r\n\t\t\t\t\t\t\t\t$(options.ownerDocument.body).addClass('xdsoft_noselect');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {\r\n\t\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchend mouseup.xdsoft_scroller', arguments_callee)\r\n\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\r\n\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t$(options.ownerDocument.body).on('mousemove.xdsoft_scroller', calcOffset);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttouchStart = true;\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.on('touchmove', function (event) {\r\n\t\t\t\t\t\tif (touchStart) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tcalcOffset(event);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.on('touchend touchcancel', function () {\r\n\t\t\t\t\t\ttouchStart = false;\r\n\t\t\t\t\t\tstartTopScroll = 0;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent\r\n\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\r\n\t\t\t\t\t\tif (!parentHeight) {\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\r\n\r\n\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\r\n\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\r\n\t\t\t\t\t\t}, 10);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\r\n\t\t\t\t\t\tvar percent, sh;\r\n\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\r\n\t\t\t\t\t\theight = timebox[0].offsetHeight;\r\n\t\t\t\t\t\tpercent = parentHeight / height;\r\n\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\r\n\t\t\t\t\t\tif (percent > 1) {\r\n\t\t\t\t\t\t\tscroller.hide();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscroller.show();\r\n\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\r\n\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\r\n\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\r\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\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\r\n\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\r\n\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\r\n\r\n\t\t\t\t\ttop = top - (event.deltaY * 20);\r\n\t\t\t\t\tif (top < 0) {\r\n\t\t\t\t\t\ttop = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('touchstart', function (event) {\r\n\t\t\t\t\tstart = pointerEventToXY(event);\r\n\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('touchmove', function (event) {\r\n\t\t\t\t\tif (start) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tvar coord = pointerEventToXY(event);\r\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('touchend touchcancel', function () {\r\n\t\t\t\t\tstart = false;\r\n\t\t\t\t\tstartTop = 0;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\r\n\t\t});\r\n\t};\r\n\r\n\t$.fn.datetimepicker = function (opt, opt2) {\r\n\t\tvar result = this,\r\n\t\t\tKEY0 = 48,\r\n\t\t\tKEY9 = 57,\r\n\t\t\t_KEY0 = 96,\r\n\t\t\t_KEY9 = 105,\r\n\t\t\tCTRLKEY = 17,\r\n\t\t\tDEL = 46,\r\n\t\t\tENTER = 13,\r\n\t\t\tESC = 27,\r\n\t\t\tBACKSPACE = 8,\r\n\t\t\tARROWLEFT = 37,\r\n\t\t\tARROWUP = 38,\r\n\t\t\tARROWRIGHT = 39,\r\n\t\t\tARROWDOWN = 40,\r\n\t\t\tTAB = 9,\r\n\t\t\tF5 = 116,\r\n\t\t\tAKEY = 65,\r\n\t\t\tCKEY = 67,\r\n\t\t\tVKEY = 86,\r\n\t\t\tZKEY = 90,\r\n\t\t\tYKEY = 89,\r\n\t\t\tctrlDown\t=\tfalse,\r\n\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\r\n\r\n\t\t\tlazyInitTimer = 0,\r\n\t\t\tcreateDateTimePicker,\r\n\t\t\tdestroyDateTimePicker,\r\n\r\n\t\t\tlazyInit = function (input) {\r\n\t\t\t\tinput\r\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback() {\r\n\t\t\t\t\t\tif (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tclearTimeout(lazyInitTimer);\r\n\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\r\n\r\n\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\r\n\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tinput\r\n\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)\r\n\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\r\n\t\t\t\t\t\t}, 100);\r\n\t\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\tcreateDateTimePicker = function (input) {\r\n\t\t\tvar datetimepicker = $('
    '),\r\n\t\t\t\txdsoft_copyright = $(''),\r\n\t\t\t\tdatepicker = $('
    '),\r\n\t\t\t\tmonth_picker = $('
    ' +\r\n\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t'
    '),\r\n\t\t\t\tcalendar = $('
    '),\r\n\t\t\t\ttimepicker = $('
    '),\r\n\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\r\n\t\t\t\ttimebox = $('
    '),\r\n\t\t\t\tapplyButton = $(''),\r\n\r\n\t\t\t\tmonthselect = $('
    '),\r\n\t\t\t\tyearselect = $('
    '),\r\n\t\t\t\ttriggerAfterOpen = false,\r\n\t\t\t\tXDSoft_datetime,\r\n\r\n\t\t\t\txchangeTimer,\r\n\t\t\t\ttimerclick,\r\n\t\t\t\tcurrent_time_index,\r\n\t\t\t\tsetPos,\r\n\t\t\t\ttimer = 0,\r\n\t\t\t\t_xdsoft_datetime,\r\n\t\t\t\tforEachAncestorOf;\r\n\r\n\t\t\tif (options.id) {\r\n\t\t\t\tdatetimepicker.attr('id', options.id);\r\n\t\t\t}\r\n\t\t\tif (options.style) {\r\n\t\t\t\tdatetimepicker.attr('style', options.style);\r\n\t\t\t}\r\n\t\t\tif (options.weeks) {\r\n\t\t\t\tdatetimepicker.addClass('xdsoft_showweeks');\r\n\t\t\t}\r\n\t\t\tif (options.rtl) {\r\n\t\t\t\tdatetimepicker.addClass('xdsoft_rtl');\r\n\t\t\t}\r\n\r\n\t\t\tdatetimepicker.addClass('xdsoft_' + options.theme);\r\n\t\t\tdatetimepicker.addClass(options.className);\r\n\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_month span')\r\n\t\t\t\t.after(monthselect);\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_year span')\r\n\t\t\t\t.after(yearselect);\r\n\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\r\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\r\n\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\r\n\t\t\t\t\t\tval = 0,\r\n\t\t\t\t\t\ttop = 0,\r\n\t\t\t\t\t\tvisible = select.is(':visible'),\r\n\t\t\t\t\t\titems,\r\n\t\t\t\t\t\ti;\r\n\r\n\t\t\t\t\tmonth_picker\r\n\t\t\t\t\t\t.find('.xdsoft_select')\r\n\t\t\t\t\t\t.hide();\r\n\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\r\n\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tselect[visible ? 'hide' : 'show']();\r\n\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\r\n\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttop += items[0].offsetHeight;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tselect.xdsoftScroller(options, top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\tvar handleTouchMoved = function (event) {\r\n\t\t\t\tvar evt = event.originalEvent;\r\n\t\t\t\tvar touchPosition = evt.touches ? evt.touches[0] : evt;\r\n\t\t\t\tthis.touchStartPosition = this.touchStartPosition || touchPosition;\r\n\t\t\t\tvar xMovement = Math.abs(this.touchStartPosition.clientX - touchPosition.clientX);\r\n\t\t\t\tvar yMovement = Math.abs(this.touchStartPosition.clientY - touchPosition.clientY);\r\n\t\t\t\tvar distance = Math.sqrt(xMovement * xMovement + yMovement * yMovement);\r\n\t\t\t\tif(distance > options.touchMovedThreshold) {\r\n\t\t\t\t\tthis.touchMoved = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_select')\r\n\t\t\t\t.xdsoftScroller(options)\r\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\r\n\t\t\t\t\tvar evt = event.originalEvent;\r\n\t\t\t\t\tthis.touchMoved = false;\r\n\t\t\t\t\tthis.touchStartPosition = evt.touches ? evt.touches[0] : evt;\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t})\r\n\t\t\t\t.on('touchmove', '.xdsoft_option', handleTouchMoved)\r\n\t\t\t\t.on('touchend mousedown.xdsoft', '.xdsoft_option', function () {\r\n\t\t\t\t\tif (!this.touchMoved) {\r\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\r\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$(this).parent().parent().hide();\r\n\r\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\r\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\r\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tdatetimepicker.getValue = function () {\r\n\t\t\t\treturn _xdsoft_datetime.getCurrentTime();\r\n\t\t\t};\r\n\r\n\t\t\tdatetimepicker.setOptions = function (_options) {\r\n\t\t\t\tvar highlightedDates = {};\r\n\r\n\t\t\t\toptions = $.extend(true, {}, options, _options);\r\n\r\n\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\r\n\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\r\n\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.allowDates && $.isArray(_options.allowDates) && _options.allowDates.length) {\r\n\t\t\t\t\toptions.allowDates = $.extend(true, [], _options.allowDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)===\"[object String]\") {\r\n\t\t\t\t\toptions.allowDateRe = new RegExp(_options.allowDateRe);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {\r\n\t\t\t\t\t$.each(_options.highlightedDates, function (index, value) {\r\n\t\t\t\t\t\tvar splitData = $.map(value.split(','), $.trim),\r\n\t\t\t\t\t\t\texDesc,\r\n\t\t\t\t\t\t\thDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style\r\n\t\t\t\t\t\t\tkeyDate = dateHelper.formatDate(hDate.date, options.formatDate);\r\n\t\t\t\t\t\tif (highlightedDates[keyDate] !== undefined) {\r\n\t\t\t\t\t\t\texDesc = highlightedDates[keyDate].desc;\r\n\t\t\t\t\t\t\tif (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {\r\n\t\t\t\t\t\t\t\thighlightedDates[keyDate].desc = exDesc + \"\\n\" + hDate.desc;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\thighlightedDates[keyDate] = hDate;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\toptions.highlightedDates = $.extend(true, [], highlightedDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {\r\n\t\t\t\t\thighlightedDates = $.extend(true, [], options.highlightedDates);\r\n\t\t\t\t\t$.each(_options.highlightedPeriods, function (index, value) {\r\n\t\t\t\t\t\tvar dateTest, // start date\r\n\t\t\t\t\t\t\tdateEnd,\r\n\t\t\t\t\t\t\tdesc,\r\n\t\t\t\t\t\t\thDate,\r\n\t\t\t\t\t\t\tkeyDate,\r\n\t\t\t\t\t\t\texDesc,\r\n\t\t\t\t\t\t\tstyle;\r\n\t\t\t\t\t\tif ($.isArray(value)) {\r\n\t\t\t\t\t\t\tdateTest = value[0];\r\n\t\t\t\t\t\t\tdateEnd = value[1];\r\n\t\t\t\t\t\t\tdesc = value[2];\r\n\t\t\t\t\t\t\tstyle = value[3];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tvar splitData = $.map(value.split(','), $.trim);\r\n\t\t\t\t\t\t\tdateTest = dateHelper.parseDate(splitData[0], options.formatDate);\r\n\t\t\t\t\t\t\tdateEnd = dateHelper.parseDate(splitData[1], options.formatDate);\r\n\t\t\t\t\t\t\tdesc = splitData[2];\r\n\t\t\t\t\t\t\tstyle = splitData[3];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twhile (dateTest <= dateEnd) {\r\n\t\t\t\t\t\t\thDate = new HighlightedDate(dateTest, desc, style);\r\n\t\t\t\t\t\t\tkeyDate = dateHelper.formatDate(dateTest, options.formatDate);\r\n\t\t\t\t\t\t\tdateTest.setDate(dateTest.getDate() + 1);\r\n\t\t\t\t\t\t\tif (highlightedDates[keyDate] !== undefined) {\r\n\t\t\t\t\t\t\t\texDesc = highlightedDates[keyDate].desc;\r\n\t\t\t\t\t\t\t\tif (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {\r\n\t\t\t\t\t\t\t\t\thighlightedDates[keyDate].desc = exDesc + \"\\n\" + hDate.desc;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\thighlightedDates[keyDate] = hDate;\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\r\n\t\t\t\t\toptions.highlightedDates = $.extend(true, [], highlightedDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\r\n\t\t\t\t\toptions.disabledDates = $.extend(true, [], _options.disabledDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {\r\n\t\t\t\t\toptions.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\r\n\t\t\t\t\tinput.trigger('open.xdsoft');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.inline) {\r\n\t\t\t\t\ttriggerAfterOpen = true;\r\n\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\r\n\t\t\t\t\tinput.after(datetimepicker).hide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.inverseButton) {\r\n\t\t\t\t\toptions.next = 'xdsoft_prev';\r\n\t\t\t\t\toptions.prev = 'xdsoft_next';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.datepicker) {\r\n\t\t\t\t\tdatepicker.addClass('active');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatepicker.removeClass('active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.timepicker) {\r\n\t\t\t\t\ttimepicker.addClass('active');\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttimepicker.removeClass('active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.value) {\r\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\r\n\t\t\t\t\tif (input && input.val) {\r\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\r\n\t\t\t\t\toptions.dayOfWeekStart = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!options.timepickerScrollbar) {\r\n\t\t\t\t\ttimeboxparent.xdsoftScroller(options, 'hide');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.minDate && /^[\\+\\-](.*)$/.test(options.minDate)) {\r\n\t\t\t\t\toptions.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.maxDate && /^[\\+\\-](.*)$/.test(options.maxDate)) {\r\n\t\t\t\t\toptions.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);\r\n\t\t\t\t}\r\n\r\n if (options.minDateTime && /^\\+(.*)$/.test(options.minDateTime)) {\r\n \toptions.minDateTime = _xdsoft_datetime.strToDateTime(options.minDateTime).dateFormat(options.formatDate);\r\n }\r\n\r\n if (options.maxDateTime && /^\\+(.*)$/.test(options.maxDateTime)) {\r\n \toptions.maxDateTime = _xdsoft_datetime.strToDateTime(options.maxDateTime).dateFormat(options.formatDate);\r\n }\r\n\r\n\t\t\t\tapplyButton.toggle(options.showApplyButton);\r\n\r\n\t\t\t\tmonth_picker\r\n\t\t\t\t\t.find('.xdsoft_today_button')\r\n\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\r\n\r\n\t\t\t\tmonth_picker\r\n\t\t\t\t\t.find('.' + options.prev)\r\n\t\t\t\t\t.css('visibility', !options.prevButton ? 'hidden' : 'visible');\r\n\r\n\t\t\t\tmonth_picker\r\n\t\t\t\t\t.find('.' + options.next)\r\n\t\t\t\t\t.css('visibility', !options.nextButton ? 'hidden' : 'visible');\r\n\r\n\t\t\t\tsetMask(options);\r\n\r\n\t\t\t\tif (options.validateOnBlur) {\r\n\t\t\t\t\tinput\r\n\t\t\t\t\t\t.off('blur.xdsoft')\r\n\t\t\t\t\t\t.on('blur.xdsoft', function () {\r\n\t\t\t\t\t\t\tif (options.allowBlank && (!$.trim($(this).val()).length ||\r\n\t\t\t\t\t\t\t\t\t(typeof options.mask === \"string\" && $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_')))) {\r\n\t\t\t\t\t\t\t\t$(this).val(null);\r\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar d = dateHelper.parseDate($(this).val(), options.format);\r\n\t\t\t\t\t\t\t\tif (d) { // parseDate() may skip some invalid parts like date or time, so make it clear for user: show parsed date/time\r\n\t\t\t\t\t\t\t\t\t$(this).val(dateHelper.formatDate(d, options.format));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tvar splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')),\r\n\t\t\t\t\t\t\t\t\t\tsplittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));\r\n\r\n\t\t\t\t\t\t\t\t\t// parse the numbers as 0312 => 03:12\r\n\t\t\t\t\t\t\t\t\tif (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {\r\n\t\t\t\t\t\t\t\t\t\t$(this).val([splittedHours, splittedMinutes].map(function (item) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn item > 9 ? item : '0' + item;\r\n\t\t\t\t\t\t\t\t\t\t}).join(':'));\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t$(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\r\n\r\n\t\t\t\tdatetimepicker\r\n\t\t\t\t\t.trigger('xchange.xdsoft')\r\n\t\t\t\t\t.trigger('afterOpen.xdsoft');\r\n\t\t\t};\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.data('options', options)\r\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tyearselect.hide();\r\n\t\t\t\t\tmonthselect.hide();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\r\n\t\t\ttimeboxparent.append(timebox);\r\n\t\t\ttimeboxparent.xdsoftScroller(options);\r\n\r\n\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\r\n\t\t\t\ttimeboxparent.xdsoftScroller(options);\r\n\t\t\t});\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.append(datepicker)\r\n\t\t\t\t.append(timepicker);\r\n\r\n\t\t\tif (options.withoutCopyright !== true) {\r\n\t\t\t\tdatetimepicker\r\n\t\t\t\t\t.append(xdsoft_copyright);\r\n\t\t\t}\r\n\r\n\t\t\tdatepicker\r\n\t\t\t\t.append(month_picker)\r\n\t\t\t\t.append(calendar)\r\n\t\t\t\t.append(applyButton);\r\n\r\n\t\t\t$(options.parentID)\r\n\t\t\t\t.append(datetimepicker);\r\n\r\n\t\t\tXDSoft_datetime = function () {\r\n\t\t\t\tvar _this = this;\r\n\t\t\t\t_this.now = function (norecursion) {\r\n\t\t\t\t\tvar d = new Date(),\r\n\t\t\t\t\t\tdate,\r\n\t\t\t\t\t\ttime;\r\n\r\n\t\t\t\t\tif (!norecursion && options.defaultDate) {\r\n\t\t\t\t\t\tdate = _this.strToDateTime(options.defaultDate);\r\n\t\t\t\t\t\td.setFullYear(date.getFullYear());\r\n\t\t\t\t\t\td.setMonth(date.getMonth());\r\n\t\t\t\t\t\td.setDate(date.getDate());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\td.setFullYear(d.getFullYear());\r\n\r\n\t\t\t\t\tif (!norecursion && options.defaultTime) {\r\n\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\r\n\t\t\t\t\t\td.setHours(time.getHours());\r\n\t\t\t\t\t\td.setMinutes(time.getMinutes());\r\n\t\t\t\t\t\td.setSeconds(time.getSeconds());\r\n\t\t\t\t\t\td.setMilliseconds(time.getMilliseconds());\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn d;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.isValidDate = function (d) {\r\n\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn !isNaN(d.getTime());\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.setCurrentTime = function (dTime, requireValidDate) {\r\n\t\t\t\t\tif (typeof dTime === 'string') {\r\n\t\t\t\t\t\t_this.currentTime = _this.strToDateTime(dTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (_this.isValidDate(dTime)) {\r\n\t\t\t\t\t\t_this.currentTime = dTime;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!dTime && !requireValidDate && options.allowBlank && !options.inline) {\r\n\t\t\t\t\t\t_this.currentTime = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t_this.currentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.empty = function () {\r\n\t\t\t\t\t_this.currentTime = null;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.getCurrentTime = function () {\r\n\t\t\t\t\treturn _this.currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.nextMonth = function () {\r\n\r\n\t\t\t\t\tif (_this.currentTime === undefined || _this.currentTime === null) {\r\n\t\t\t\t\t\t_this.currentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\r\n\t\t\t\t\t\tyear;\r\n\t\t\t\t\tif (month === 12) {\r\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\r\n\t\t\t\t\t\tmonth = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tyear = _this.currentTime.getFullYear();\r\n\r\n\t\t\t\t\t_this.currentTime.setDate(\r\n\t\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\r\n\t\t\t\t\t\t\t_this.currentTime.getDate()\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t\t\t_this.currentTime.setMonth(month);\r\n\r\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\r\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\r\n\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\treturn month;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.prevMonth = function () {\r\n\r\n\t\t\t\t\tif (_this.currentTime === undefined || _this.currentTime === null) {\r\n\t\t\t\t\t\t_this.currentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\r\n\t\t\t\t\tif (month === -1) {\r\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\r\n\t\t\t\t\t\tmonth = 11;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_this.currentTime.setDate(\r\n\t\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\r\n\t\t\t\t\t\t\t_this.currentTime.getDate()\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t\t\t_this.currentTime.setMonth(month);\r\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\r\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\treturn month;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.getWeekOfYear = function (datetime) {\r\n\t\t\t\t\tif (options.onGetWeekOfYear && $.isFunction(options.onGetWeekOfYear)) {\r\n\t\t\t\t\t\tvar week = options.onGetWeekOfYear.call(datetimepicker, datetime);\r\n\t\t\t\t\t\tif (typeof week !== 'undefined') {\r\n\t\t\t\t\t\t\treturn week;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\r\n\r\n\t\t\t\t\t//First week of the year is th one with the first Thursday according to ISO8601\r\n\t\t\t\t\tif (onejan.getDay() !== 4) {\r\n\t\t\t\t\t\tonejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.strToDateTime = function (sDateTime) {\r\n\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\r\n\r\n\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\r\n\t\t\t\t\t\treturn sDateTime;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttmpDate = /^([+-]{1})(.*)$/.exec(sDateTime);\r\n\r\n\t\t\t\t\tif (tmpDate) {\r\n\t\t\t\t\t\ttmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (tmpDate && tmpDate[2]) {\r\n\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\r\n\t\t\t\t\t\tcurrentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcurrentTime = sDateTime ? dateHelper.parseDate(sDateTime, options.format) : _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\r\n\t\t\t\t\t\tcurrentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.strToDate = function (sDate) {\r\n\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\r\n\t\t\t\t\t\treturn sDate;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar currentTime = sDate ? dateHelper.parseDate(sDate, options.formatDate) : _this.now(true);\r\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\r\n\t\t\t\t\t\tcurrentTime = _this.now(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.strtotime = function (sTime) {\r\n\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\r\n\t\t\t\t\t\treturn sTime;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar currentTime = sTime ? dateHelper.parseDate(sTime, options.formatTime) : _this.now(true);\r\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\r\n\t\t\t\t\t\tcurrentTime = _this.now(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.str = function () {\r\n\t\t\t\t\tvar format = options.format;\r\n\t\t\t\t\tif (options.yearOffset) {\r\n\t\t\t\t\t\tformat = format.replace('Y', _this.currentTime.getFullYear() + options.yearOffset);\r\n\t\t\t\t\t\tformat = format.replace('y', String(_this.currentTime.getFullYear() + options.yearOffset).substring(2, 4));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn dateHelper.formatDate(_this.currentTime, format);\r\n\t\t\t\t};\r\n\t\t\t\t_this.currentTime = this.now();\r\n\t\t\t};\r\n\r\n\t\t\t_xdsoft_datetime = new XDSoft_datetime();\r\n\r\n\t\t\tapplyButton.on('touchend click', function (e) {//pathbrite\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\r\n\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t});\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_today_button')\r\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\r\n\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0, true);\r\n\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\r\n\t\t\t\t}).on('dblclick.xdsoft', function () {\r\n\t\t\t\tvar currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;\r\n\t\t\t\tcurrentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\r\n\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\r\n\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\r\n\t\t\t\tif (currentDate < minDate) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\r\n\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());\r\n\t\t\t\tif (currentDate > maxDate) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\t\t\t\tinput.trigger('change');\r\n\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t});\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\r\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\ttimer = 0,\r\n\t\t\t\t\t\tstop = false;\r\n\r\n\t\t\t\t\t(function arguments_callee1(v) {\r\n\t\t\t\t\t\tif ($this.hasClass(options.next)) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\r\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (options.monthChangeSpinner) {\r\n\t\t\t\t\t\t\tif (!stop) {\r\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}(500));\r\n\r\n\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft', function arguments_callee2() {\r\n\t\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\t\tstop = true;\r\n\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchend mouseup.xdsoft', arguments_callee2);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\ttimepicker\r\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\r\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\ttimer = 0,\r\n\t\t\t\t\t\tstop = false,\r\n\t\t\t\t\t\tperiod = 110;\r\n\t\t\t\t\t(function arguments_callee4(v) {\r\n\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\r\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\r\n\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\r\n\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\r\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\r\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\r\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/**\r\n\t\t\t\t\t\t * Fixed bug:\r\n\t\t\t\t\t\t * When using css3 transition, it will cause a bug that you cannot scroll the timepicker list.\r\n\t\t\t\t\t\t * The reason is that the transition-duration time, if you set it to 0, all things fine, otherwise, this\r\n\t\t\t\t\t\t * would cause a bug when you use jquery.css method.\r\n\t\t\t\t\t\t * Let's say: * { transition: all .5s ease; }\r\n\t\t\t\t\t\t * jquery timebox.css('marginTop') will return the original value which is before you clicking the next/prev button,\r\n\t\t\t\t\t\t * meanwhile the timebox[0].style.marginTop will return the right value which is after you clicking the\r\n\t\t\t\t\t\t * next/prev button.\r\n\t\t\t\t\t\t *\r\n\t\t\t\t\t\t * What we should do:\r\n\t\t\t\t\t\t * Replace timebox.css('marginTop') with timebox[0].style.marginTop.\r\n\t\t\t\t\t\t */\r\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox[0].style.marginTop, 10) / (height - pheight))]);\r\n\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\r\n\t\t\t\t\t\tif (!stop) {\r\n\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}(500));\r\n\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft', function arguments_callee5() {\r\n\t\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\t\tstop = true;\r\n\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow])\r\n\t\t\t\t\t\t\t.off('touchend mouseup.xdsoft', arguments_callee5);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\txchangeTimer = 0;\r\n\t\t\t// base handler - generating a calendar and timepicker\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.on('xchange.xdsoft', function (event) {\r\n\t\t\t\t\tclearTimeout(xchangeTimer);\r\n\t\t\t\t\txchangeTimer = setTimeout(function () {\r\n\r\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar table =\t'',\r\n\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\r\n\t\t\t\t\t\t\ti = 0,\r\n\t\t\t\t\t\t\tj,\r\n\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\r\n\t\t\t\t\t\t\tmaxDate = false,\r\n\t\t\t\t\t\t\tminDate = false,\r\n\t\t\t\t\t\t\tminDateTime = false,\r\n\t\t\t\t\t\t\tmaxDateTime = false,\r\n\t\t\t\t\t\t\thDate,\r\n\t\t\t\t\t\t\tday,\r\n\t\t\t\t\t\t\td,\r\n\t\t\t\t\t\t\ty,\r\n\t\t\t\t\t\t\tm,\r\n\t\t\t\t\t\t\tw,\r\n\t\t\t\t\t\t\tclasses = [],\r\n\t\t\t\t\t\t\tcustomDateSettings,\r\n\t\t\t\t\t\t\tnewRow = true,\r\n\t\t\t\t\t\t\ttime = '',\r\n\t\t\t\t\t\t\th,\r\n\t\t\t\t\t\t\tline_time,\r\n\t\t\t\t\t\t\tdescription;\r\n\r\n\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\r\n\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable += '';\r\n\r\n\t\t\t\t\t\tif (options.weeks) {\r\n\t\t\t\t\t\t\ttable += '';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\r\n\t\t\t\t\t\t\ttable += '';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable += '';\r\n\t\t\t\t\t\ttable += '';\r\n\r\n\t\t\t\t\t\tif (options.maxDate !== false) {\r\n\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\r\n\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.minDate !== false) {\r\n\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\r\n\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\r\n\t\t\t\t\t\t}\r\n\r\n if (options.minDateTime !== false) {\r\n\t\t\t\t\t\t\tminDateTime = _xdsoft_datetime.strToDate(options.minDateTime);\r\n\t\t\t\t\t\t\tminDateTime = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), minDateTime.getHours(), minDateTime.getMinutes(), minDateTime.getSeconds());\r\n\t\t\t\t\t\t}\r\n\r\n if (options.maxDateTime !== false) {\r\n\t\t\t\t\t\t\tmaxDateTime = _xdsoft_datetime.strToDate(options.maxDateTime);\r\n\t\t\t\t\t\t\tmaxDateTime = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), maxDateTime.getHours(), maxDateTime.getMinutes(), maxDateTime.getSeconds());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar maxDateTimeDay;\r\n\t\t\t\t\t\tif (maxDateTime !== false) {\r\n\t\t\t\t\t\t\tmaxDateTimeDay = ((maxDateTime.getFullYear() * 12) + maxDateTime.getMonth()) * 31 + maxDateTime.getDate();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\r\n\t\t\t\t\t\t\tclasses = [];\r\n\t\t\t\t\t\t\ti += 1;\r\n\r\n\t\t\t\t\t\t\tday = start.getDay();\r\n\t\t\t\t\t\t\td = start.getDate();\r\n\t\t\t\t\t\t\ty = start.getFullYear();\r\n\t\t\t\t\t\t\tm = start.getMonth();\r\n\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\r\n\t\t\t\t\t\t\tdescription = '';\r\n\r\n\t\t\t\t\t\t\tclasses.push('xdsoft_date');\r\n\r\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\r\n\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tcustomDateSettings = null;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === \"[object RegExp]\"){\r\n\t\t\t\t\t\t\t\tif(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(options.allowDates && options.allowDates.length>0){\r\n\t\t\t\t\t\t\t\tif(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar currentDay = ((start.getFullYear() * 12) + start.getMonth()) * 31 + start.getDate();\r\n\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDateTime !== false && start < minDateTime) || (minDate !== false && start < minDate) || (maxDateTime !== false && currentDay > maxDateTimeDay) || (customDateSettings && customDateSettings[0] === false)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (options.disabledWeekDays.indexOf(day) !== -1) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (input.is('[disabled]')) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\r\n\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (dateHelper.formatDate(today, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (options.highlightedDates[dateHelper.formatDate(start, options.formatDate)] !== undefined) {\r\n\t\t\t\t\t\t\t\thDate = options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];\r\n\t\t\t\t\t\t\t\tclasses.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);\r\n\t\t\t\t\t\t\t\tdescription = hDate.desc === undefined ? '' : hDate.desc;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\r\n\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (newRow) {\r\n\t\t\t\t\t\t\t\ttable += '';\r\n\t\t\t\t\t\t\t\tnewRow = false;\r\n\t\t\t\t\t\t\t\tif (options.weeks) {\r\n\t\t\t\t\t\t\t\t\ttable += '';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable += '';\r\n\r\n\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\r\n\t\t\t\t\t\t\t\ttable += '';\r\n\t\t\t\t\t\t\t\tnewRow = true;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tstart.setDate(d + 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttable += '
    ' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '
    ' + w + '' +\r\n\t\t\t\t\t\t\t\t'
    ' + d + '
    ' +\r\n\t\t\t\t\t\t\t\t'
    ';\r\n\r\n\t\t\t\t\t\tcalendar.html(table);\r\n\r\n\t\t\t\t\t\tmonth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);\r\n\t\t\t\t\t\tmonth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear() + options.yearOffset);\r\n\r\n\t\t\t\t\t\t// generate timebox\r\n\t\t\t\t\t\ttime = '';\r\n\t\t\t\t\t\th = '';\r\n\t\t\t\t\t\tm = '';\r\n\r\n\t\t\t\t\t\tvar minTimeMinutesOfDay = 0;\r\n\t\t\t\t\t\tif (options.minTime !== false) {\r\n\t\t\t\t\t\t var t = _xdsoft_datetime.strtotime(options.minTime);\r\n\t\t\t\t\t\t minTimeMinutesOfDay = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar maxTimeMinutesOfDay = 24 * 60;\r\n\t\t\t\t\t\tif (options.maxTime !== false) {\r\n\t\t\t\t\t\t var t = _xdsoft_datetime.strtotime(options.maxTime);\r\n\t\t\t\t\t\t maxTimeMinutesOfDay = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.minDateTime !== false) {\r\n\t\t\t\t\t\t\tvar t = _xdsoft_datetime.strToDateTime(options.minDateTime);\r\n\t\t\t\t\t\t var currentDayIsMinDateTimeDay = dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(t, options.formatDate);\r\n\t\t\t\t\t\t\tif (currentDayIsMinDateTimeDay) {\r\n\t\t\t\t\t\t\t\tvar m = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t\t\tif (m > minTimeMinutesOfDay) minTimeMinutesOfDay = m;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.maxDateTime !== false) {\r\n\t\t\t\t\t\t\tvar t = _xdsoft_datetime.strToDateTime(options.maxDateTime);\r\n\t\t\t\t\t\t var currentDayIsMaxDateTimeDay = dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(t, options.formatDate);\r\n\t\t\t\t\t\t\tif (currentDayIsMaxDateTimeDay) {\r\n\t\t\t\t\t\t\t\tvar m = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t\t\tif (m < maxTimeMinutesOfDay) maxTimeMinutesOfDay = m;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tline_time = function line_time(h, m) {\r\n\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now(), current_time,\r\n\t\t\t\t\t\t\t\tisALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;\r\n\t\t\t\t\t\t\tnow.setHours(h);\r\n\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\r\n\t\t\t\t\t\t\tnow.setMinutes(m);\r\n\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\r\n\t\t\t\t\t\t\tclasses = [];\r\n\t\t\t\t\t\t\tvar currentMinutesOfDay = 60 * h + m;\r\n\t\t\t\t\t\t\tif (input.is('[disabled]') || (currentMinutesOfDay >= maxTimeMinutesOfDay) || (currentMinutesOfDay < minTimeMinutesOfDay)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcurrent_time = new Date(_xdsoft_datetime.currentTime);\r\n\t\t\t\t\t\t\tcurrent_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));\r\n\r\n\t\t\t\t\t\t\tif (!isALlowTimesInit) {\r\n\t\t\t\t\t\t\t\tcurrent_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {\r\n\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\r\n\t\t\t\t\t\t\t\t} else if (options.initTime) {\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttime += '
    ' + dateHelper.formatDate(now, options.formatTime) + '
    ';\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\r\n\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\r\n\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\r\n\t\t\t\t\t\t\t\t var currentMinutesOfDay = i * 60 + j;\r\n\t\t\t\t\t\t\t\t if (currentMinutesOfDay < minTimeMinutesOfDay) continue;\r\n\t\t\t\t\t\t\t\t if (currentMinutesOfDay >= maxTimeMinutesOfDay) continue;\r\n\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\r\n\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\r\n\t\t\t\t\t\t\t\t\tline_time(h, m);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\r\n\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\r\n\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\r\n\t\t\t\t\t\t\t\tline_time(h, m);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimebox.html(time);\r\n\r\n\t\t\t\t\t\topt = '';\r\n\r\n\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10); i <= parseInt(options.yearEnd, 10); i += 1) {\r\n\t\t\t\t\t\t\topt += '
    ' + (i + options.yearOffset) + '
    ';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tyearselect.children().eq(0)\r\n\t\t\t\t\t\t\t.html(opt);\r\n\r\n\t\t\t\t\t\tfor (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {\r\n\t\t\t\t\t\t\topt += '
    ' + options.i18n[globalLocale].months[i] + '
    ';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\r\n\t\t\t\t\t\t$(datetimepicker)\r\n\t\t\t\t\t\t\t.trigger('generate.xdsoft');\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t})\r\n\t\t\t\t.on('afterOpen.xdsoft', function () {\r\n\t\t\t\t\tif (options.timepicker) {\r\n\t\t\t\t\t\tvar classType, pheight, height, top;\r\n\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\r\n\t\t\t\t\t\t\tclassType = '.xdsoft_current';\r\n\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\r\n\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (classType) {\r\n\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\r\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\r\n\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\r\n\t\t\t\t\t\t\tif ((height - pheight) < top) {\r\n\t\t\t\t\t\t\t\ttop = height - pheight;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\ttimerclick = 0;\r\n\t\t\tcalendar\r\n\t\t\t\t.on('touchend click.xdsoft', 'td', function (xdevent) {\r\n\t\t\t\t\txdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\r\n\t\t\t\t\ttimerclick += 1;\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\r\n\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\r\n\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcurrentTime.setDate(1);\r\n\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\r\n\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\r\n\t\t\t\t\tcurrentTime.setDate($this.data('date'));\r\n\r\n\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\r\n\r\n\t\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\r\n\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\r\n\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\ttimerclick = 0;\r\n\t\t\t\t\t}, 200);\r\n\t\t\t\t});\r\n\r\n\t\t\ttimebox\r\n\t\t\t\t.on('touchstart', 'div', function (xdevent) {\r\n\t\t\t\t\tthis.touchMoved = false;\r\n\t\t\t\t})\r\n\t\t\t\t.on('touchmove', 'div', handleTouchMoved)\r\n\t\t\t\t.on('touchend click.xdsoft', 'div', function (xdevent) {\r\n\t\t\t\t\tif (!this.touchMoved) {\r\n\t\t\t\t\t\txdevent.stopPropagation();\r\n\t\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\r\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\r\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\r\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\r\n\r\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\r\n\r\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\r\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\t\tif (options.inline !== true && options.closeOnTimeSelect === true) {\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tdatepicker\r\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\r\n\t\t\t\t\tif (!options.scrollMonth) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (event.deltaY < 0) {\r\n\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\tinput\r\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\r\n\t\t\t\t\tif (!options.scrollInput) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!options.datepicker && options.timepicker) {\r\n\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\r\n\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\r\n\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\r\n\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (options.datepicker && !options.timepicker) {\r\n\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\r\n\t\t\t\t\t\tif (input.val) {\r\n\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.on('changedatetime.xdsoft', function (event) {\r\n\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\r\n\t\t\t\t\t\tvar $input = datetimepicker.data('input');\r\n\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\r\n\t\t\t\t\t\tdelete options.value;\r\n\t\t\t\t\t\t$input.trigger('change');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('generate.xdsoft', function () {\r\n\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\r\n\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (triggerAfterOpen) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\r\n\t\t\t\t\t\ttriggerAfterOpen = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('click.xdsoft', function (xdevent) {\r\n\t\t\t\t\txdevent.stopPropagation();\r\n\t\t\t\t});\r\n\r\n\t\t\tcurrent_time_index = 0;\r\n\r\n\t\t\t/**\r\n\t\t\t * Runs the callback for each of the specified node's ancestors.\r\n\t\t\t *\r\n\t\t\t * Return FALSE from the callback to stop ascending.\r\n\t\t\t *\r\n\t\t\t * @param {DOMNode} node\r\n\t\t\t * @param {Function} callback\r\n\t\t\t * @returns {undefined}\r\n\t\t\t */\r\n\t\t\tforEachAncestorOf = function (node, callback) {\r\n\t\t\t\tdo {\r\n\t\t\t\t\tnode = node.parentNode;\r\n\r\n\t\t\t\t\tif (!node || callback(node) === false) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while (node.nodeName !== 'HTML');\r\n\t\t\t};\r\n\r\n\t\t\t/**\r\n\t\t\t * Sets the position of the picker.\r\n\t\t\t *\r\n\t\t\t * @returns {undefined}\r\n\t\t\t */\r\n\t\t\tsetPos = function () {\r\n\t\t\t\tvar dateInputOffset,\r\n\t\t\t\t\tdateInputElem,\r\n\t\t\t\t\tverticalPosition,\r\n\t\t\t\t\tleft,\r\n\t\t\t\t\tposition,\r\n\t\t\t\t\tdatetimepickerElem,\r\n\t\t\t\t\tdateInputHasFixedAncestor,\r\n\t\t\t\t\t$dateInput,\r\n\t\t\t\t\twindowWidth,\r\n\t\t\t\t\tverticalAnchorEdge,\r\n\t\t\t\t\tdatetimepickerCss,\r\n\t\t\t\t\twindowHeight,\r\n\t\t\t\t\twindowScrollTop;\r\n\r\n\t\t\t\t$dateInput = datetimepicker.data('input');\r\n\t\t\t\tdateInputOffset = $dateInput.offset();\r\n\t\t\t\tdateInputElem = $dateInput[0];\r\n\r\n\t\t\t\tverticalAnchorEdge = 'top';\r\n\t\t\t\tverticalPosition = (dateInputOffset.top + dateInputElem.offsetHeight) - 1;\r\n\t\t\t\tleft = dateInputOffset.left;\r\n\t\t\t\tposition = \"absolute\";\r\n\r\n\t\t\t\twindowWidth = $(options.contentWindow).width();\r\n\t\t\t\twindowHeight = $(options.contentWindow).height();\r\n\t\t\t\twindowScrollTop = $(options.contentWindow).scrollTop();\r\n\r\n\t\t\t\tif ((options.ownerDocument.documentElement.clientWidth - dateInputOffset.left) < datepicker.parent().outerWidth(true)) {\r\n\t\t\t\t\tvar diff = datepicker.parent().outerWidth(true) - dateInputElem.offsetWidth;\r\n\t\t\t\t\tleft = left - diff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($dateInput.parent().css('direction') === 'rtl') {\r\n\t\t\t\t\tleft -= (datetimepicker.outerWidth() - $dateInput.outerWidth());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.fixed) {\r\n\t\t\t\t\tverticalPosition -= windowScrollTop;\r\n\t\t\t\t\tleft -= $(options.contentWindow).scrollLeft();\r\n\t\t\t\t\tposition = \"fixed\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdateInputHasFixedAncestor = false;\r\n\r\n\t\t\t\t\tforEachAncestorOf(dateInputElem, function (ancestorNode) {\r\n\t\t\t\t\t\tif (ancestorNode === null) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.contentWindow.getComputedStyle(ancestorNode).getPropertyValue('position') === 'fixed') {\r\n\t\t\t\t\t\t\tdateInputHasFixedAncestor = true;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (dateInputHasFixedAncestor) {\r\n\t\t\t\t\t\tposition = 'fixed';\r\n\r\n\t\t\t\t\t\t//If the picker won't fit entirely within the viewport then display it above the date input.\r\n\t\t\t\t\t\tif (verticalPosition + datetimepicker.outerHeight() > windowHeight + windowScrollTop) {\r\n\t\t\t\t\t\t\tverticalAnchorEdge = 'bottom';\r\n\t\t\t\t\t\t\tverticalPosition = (windowHeight + windowScrollTop) - dateInputOffset.top;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tverticalPosition -= windowScrollTop;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (verticalPosition + datetimepicker[0].offsetHeight > windowHeight + windowScrollTop) {\r\n\t\t\t\t\t\t\tverticalPosition = dateInputOffset.top - datetimepicker[0].offsetHeight + 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (verticalPosition < 0) {\r\n\t\t\t\t\t\tverticalPosition = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (left + dateInputElem.offsetWidth > windowWidth) {\r\n\t\t\t\t\t\tleft = windowWidth - dateInputElem.offsetWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdatetimepickerElem = datetimepicker[0];\r\n\r\n\t\t\t\tforEachAncestorOf(datetimepickerElem, function (ancestorNode) {\r\n\t\t\t\t\tvar ancestorNodePosition;\r\n\r\n\t\t\t\t\tancestorNodePosition = options.contentWindow.getComputedStyle(ancestorNode).getPropertyValue('position');\r\n\r\n\t\t\t\t\tif (ancestorNodePosition === 'relative' && windowWidth >= ancestorNode.offsetWidth) {\r\n\t\t\t\t\t\tleft = left - ((windowWidth - ancestorNode.offsetWidth) / 2);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdatetimepickerCss = {\r\n\t\t\t\t\tposition: position,\r\n\t\t\t\t\tleft: left,\r\n\t\t\t\t\ttop: '', //Initialize to prevent previous values interfering with new ones.\r\n\t\t\t\t\tbottom: '' //Initialize to prevent previous values interfering with new ones.\r\n\t\t\t\t};\r\n\r\n\t\t\t\tdatetimepickerCss[verticalAnchorEdge] = verticalPosition;\r\n\r\n\t\t\t\tdatetimepicker.css(datetimepickerCss);\r\n\t\t\t};\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.on('open.xdsoft', function (event) {\r\n\t\t\t\t\tvar onShow = true;\r\n\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\r\n\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (onShow !== false) {\r\n\t\t\t\t\t\tdatetimepicker.show();\r\n\t\t\t\t\t\tsetPos();\r\n\t\t\t\t\t\t$(options.contentWindow)\r\n\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\r\n\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\r\n\r\n\t\t\t\t\t\tif (options.closeOnWithoutClick) {\r\n\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchstart mousedown.xdsoft', function arguments_callee6() {\r\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchstart mousedown.xdsoft', arguments_callee6);\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\t.on('close.xdsoft', function (event) {\r\n\t\t\t\t\tvar onClose = true;\r\n\t\t\t\t\tmonth_picker\r\n\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\r\n\t\t\t\t\t\t.find('.xdsoft_select')\r\n\t\t\t\t\t\t.hide();\r\n\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\r\n\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\r\n\t\t\t\t\t\tdatetimepicker.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t})\r\n\t\t\t\t.on('toggle.xdsoft', function () {\r\n\t\t\t\t\tif (datetimepicker.is(':visible')) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.data('input', input);\r\n\r\n\t\t\ttimer = 0;\r\n\r\n\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\r\n\t\t\tdatetimepicker.setOptions(options);\r\n\r\n\t\t\tfunction getCurrentValue() {\r\n\t\t\t\tvar ct = false, time;\r\n\r\n\t\t\t\tif (options.startDate) {\r\n\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\r\n\t\t\t\t\tif (ct) {\r\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\r\n\t\t\t\t\t\tif (options.yearOffset) {\r\n\t\t\t\t\t\t\tct = new Date(ct.getFullYear() - options.yearOffset, ct.getMonth(), ct.getDate(), ct.getHours(), ct.getMinutes(), ct.getSeconds(), ct.getMilliseconds());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (options.defaultDate) {\r\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(options.defaultDate);\r\n\t\t\t\t\t\tif (options.defaultTime) {\r\n\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\r\n\t\t\t\t\t\t\tct.setHours(time.getHours());\r\n\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\r\n\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tct = '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ct || 0;\r\n\t\t\t}\r\n\r\n\t\t\tfunction setMask(options) {\r\n\r\n\t\t\t\tvar isValidValue = function (mask, value) {\r\n\t\t\t\t\t\tvar reg = mask\r\n\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\r\n\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\r\n\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\r\n\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\r\n\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\r\n\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetCaretPos = function (input) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tif (options.ownerDocument.selection && options.ownerDocument.selection.createRange) {\r\n\t\t\t\t\t\t\t\tvar range = options.ownerDocument.selection.createRange();\r\n\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (input.setSelectionRange) {\r\n\t\t\t\t\t\t\t\treturn input.selectionStart;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetCaretPos = function (node, pos) {\r\n\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? options.ownerDocument.getElementById(node) : node;\r\n\t\t\t\t\t\tif (!node) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (node.createTextRange) {\r\n\t\t\t\t\t\t\tvar textRange = node.createTextRange();\r\n\t\t\t\t\t\t\ttextRange.collapse(true);\r\n\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\r\n\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\r\n\t\t\t\t\t\t\ttextRange.select();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (node.setSelectionRange) {\r\n\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\tif(options.mask) {\r\n\t\t\t\t\tinput.off('keydown.xdsoft');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.mask === true) {\r\n\t\t\t\t\tif (dateHelper.formatMask) {\r\n\t\t\t\t\t\toptions.mask = dateHelper.formatMask(options.format)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toptions.mask = options.format\r\n\t\t\t\t\t\t\t.replace(/Y/g, '9999')\r\n\t\t\t\t\t\t\t.replace(/F/g, '9999')\r\n\t\t\t\t\t\t\t.replace(/m/g, '19')\r\n\t\t\t\t\t\t\t.replace(/d/g, '39')\r\n\t\t\t\t\t\t\t.replace(/H/g, '29')\r\n\t\t\t\t\t\t\t.replace(/i/g, '59')\r\n\t\t\t\t\t\t\t.replace(/s/g, '59');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($.type(options.mask) === 'string') {\r\n\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\r\n\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\r\n\t\t\t\t\t\tsetCaretPos(input[0], 0);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinput.on('paste.xdsoft', function (event) {\r\n\t\t\t\t\t // couple options here\r\n\t\t\t\t\t // 1. return false - tell them they can't paste\r\n\t\t\t\t\t // 2. insert over current characters - minimal validation\r\n\t\t\t\t\t // 3. full fledged parsing and validation\r\n\t\t\t\t\t // let's go option 2 for now\r\n\r\n\t\t\t\t\t // fires multiple times for some reason\r\n\r\n\t\t\t\t\t // https://stackoverflow.com/a/30496488/1366033\r\n\t\t\t\t\t var clipboardData = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData,\r\n\t\t\t\t\t\tpastedData = clipboardData.getData('text'),\r\n\t\t\t\t\t\tval = this.value,\r\n\t\t\t\t\t\tpos = this.selectionStart\r\n\r\n\t\t\t\t\t var valueBeforeCursor = val.substr(0, pos);\r\n\t\t\t\t\t var valueAfterPaste = val.substr(pos + pastedData.length);\r\n\r\n\t\t\t\t\t val = valueBeforeCursor + pastedData + valueAfterPaste; \r\n\t\t\t\t\t pos += pastedData.length;\r\n\r\n\t\t\t\t\t if (isValidValue(options.mask, val)) {\r\n\t\t\t\t\t\tthis.value = val;\r\n\t\t\t\t\t\tsetCaretPos(this, pos);\r\n\t\t\t\t\t } else if ($.trim(val) === '') {\r\n\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\r\n\t\t\t\t\t } else {\r\n\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t\t event.preventDefault();\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t });\r\n\r\n\t\t\t\t\t input.on('keydown.xdsoft', function (event) {\r\n\t\t\t\t\t var val = this.value,\r\n\t\t\t\t\t\tkey = event.which,\r\n\t\t\t\t\t\tpos = this.selectionStart,\r\n\t\t\t\t\t\tselEnd = this.selectionEnd,\r\n\t\t\t\t\t\thasSel = pos !== selEnd,\r\n\t\t\t\t\t\tdigit;\r\n\r\n\t\t\t\t\t // only alow these characters\r\n\t\t\t\t\t if (((key >= KEY0 && key <= KEY9) ||\r\n\t\t\t\t\t\t (key >= _KEY0 && key <= _KEY9)) || \r\n\t\t\t\t\t\t (key === BACKSPACE || key === DEL)) {\r\n\r\n\t\t\t\t\t // get char to insert which is new character or placeholder ('_')\r\n\t\t\t\t\t digit = (key === BACKSPACE || key === DEL) ? '_' :\r\n\t\t\t\t\t\t\t String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key);\r\n\r\n\t\t\t\t\t\t// we're deleting something, we're not at the start, and have normal cursor, move back one\r\n\t\t\t\t\t\t// if we have a selection length, cursor actually sits behind deletable char, not in front\r\n\t\t\t\t\t\tif (key === BACKSPACE && pos && !hasSel) {\r\n\t\t\t\t\t\t pos -= 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// don't stop on a separator, continue whatever direction you were going\r\n\t\t\t\t\t\t// value char - keep incrementing position while on separator char and we still have room\r\n\t\t\t\t\t\t// del char - keep decrementing position while on separator char and we still have room\r\n\t\t\t\t\t\twhile (true) {\r\n\t\t\t\t\t\t var maskValueAtCurPos = options.mask.substr(pos, 1);\r\n\t\t\t\t\t\t var posShorterThanMaskLength = pos < options.mask.length;\r\n\t\t\t\t\t\t var posGreaterThanZero = pos > 0;\r\n\t\t\t\t\t\t var notNumberOrPlaceholder = /[^0-9_]/;\r\n\t\t\t\t\t\t var curPosOnSep = notNumberOrPlaceholder.test(maskValueAtCurPos);\r\n\t\t\t\t\t\t var continueMovingPosition = curPosOnSep && posShorterThanMaskLength && posGreaterThanZero\r\n\r\n\t\t\t\t\t\t // if we hit a real char, stay where we are\r\n\t\t\t\t\t\t if (!continueMovingPosition) break;\r\n\r\n\t\t\t\t\t\t // hitting backspace in a selection, you can possibly go back any further - go forward\r\n\t\t\t\t\t\t pos += (key === BACKSPACE && !hasSel) ? -1 : 1;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tif (hasSel) {\r\n\t\t\t\t\t\t // pos might have moved so re-calc length\r\n\t\t\t\t\t\t var selLength = selEnd - pos\r\n\r\n\t\t\t\t\t\t // if we have a selection length we will wipe out entire selection and replace with default template for that range\r\n\t\t\t\t\t\t var defaultBlank = options.mask.replace(/[0-9]/g, '_');\r\n\t\t\t\t\t\t var defaultBlankSelectionReplacement = defaultBlank.substr(pos, selLength); \r\n\t\t\t\t\t\t var selReplacementRemainder = defaultBlankSelectionReplacement.substr(1) // might be empty\r\n\r\n\t\t\t\t\t\t var valueBeforeSel = val.substr(0, pos);\r\n\t\t\t\t\t\t var insertChars = digit + selReplacementRemainder;\r\n\t\t\t\t\t\t var charsAfterSelection = val.substr(pos + selLength);\r\n\r\n\t\t\t\t\t\t val = valueBeforeSel + insertChars + charsAfterSelection\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t var valueBeforeCursor = val.substr(0, pos);\r\n\t\t\t\t\t\t var insertChar = digit;\r\n\t\t\t\t\t\t var valueAfterNextChar = val.substr(pos + 1);\r\n\r\n\t\t\t\t\t\t val = valueBeforeCursor + insertChar + valueAfterNextChar\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ($.trim(val) === '') {\r\n\t\t\t\t\t\t // if empty, set to default\r\n\t\t\t\t\t\t val = defaultBlank\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t // if at the last character don't need to do anything\r\n\t\t\t\t\t\t if (pos === options.mask.length) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// resume cursor location\r\n\t\t\t\t\t\tpos += (key === BACKSPACE) ? 0 : 1;\r\n\t\t\t\t\t\t// don't stop on a separator, continue whatever direction you were going\r\n\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\r\n\t\t\t\t\t\t pos += (key === BACKSPACE) ? 0 : 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\r\n\t\t\t\t\t\t this.value = val;\r\n\t\t\t\t\t\t setCaretPos(this, pos);\r\n\t\t\t\t\t\t} else if ($.trim(val) === '') {\r\n\t\t\t\t\t\t this.value = options.mask.replace(/[0-9]/g, '_');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t input.trigger('error_input.xdsoft');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t } else {\r\n\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\r\n\t\t\t\t\t\t return true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t\t event.preventDefault();\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\r\n\r\n\t\t\tinput\r\n\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\r\n\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function () {\r\n\t\t\t\t\tif (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!options.openOnFocus) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\ttimer = setTimeout(function () {\r\n\t\t\t\t\t\tif (input.is(':disabled')) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttriggerAfterOpen = true;\r\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue(), true);\r\n\t\t\t\t\t\tif(options.mask) {\r\n\t\t\t\t\t\t\tsetMask(options);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\r\n\t\t\t\t\t}, 100);\r\n\t\t\t\t})\r\n\t\t\t\t.on('keydown.xdsoft', function (event) {\r\n\t\t\t\t\tvar elementSelector,\r\n\t\t\t\t\t\tkey = event.which;\r\n\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\r\n\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible,button:visible,a:visible\");\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('blur.xdsoft', function () {\r\n\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t});\r\n\t\t};\r\n\t\tdestroyDateTimePicker = function (input) {\r\n\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\r\n\t\t\tif (datetimepicker) {\r\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\r\n\t\t\t\tdatetimepicker.remove();\r\n\t\t\t\tinput\r\n\t\t\t\t\t.data('xdsoft_datetimepicker', null)\r\n\t\t\t\t\t.off('.xdsoft');\r\n\t\t\t\t$(options.contentWindow).off('resize.xdsoft');\r\n\t\t\t\t$([options.contentWindow, options.ownerDocument.body]).off('mousedown.xdsoft touchstart');\r\n\t\t\t\tif (input.unmousewheel) {\r\n\t\t\t\t\tinput.unmousewheel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\t$(options.ownerDocument)\r\n\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\r\n\t\t\t.on('keydown.xdsoftctrl', function (e) {\r\n\t\t\t\tif (e.keyCode === CTRLKEY) {\r\n\t\t\t\t\tctrlDown = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('keyup.xdsoftctrl', function (e) {\r\n\t\t\t\tif (e.keyCode === CTRLKEY) {\r\n\t\t\t\t\tctrlDown = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.each(function () {\r\n\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;\r\n\t\t\tif (datetimepicker) {\r\n\t\t\t\tif ($.type(opt) === 'string') {\r\n\t\t\t\t\tswitch (opt) {\r\n\t\t\t\t\t\tcase 'show':\r\n\t\t\t\t\t\t\t$(this).select().focus();\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'hide':\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'toggle':\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'destroy':\r\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'reset':\r\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\r\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))) {\r\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'validate':\r\n\t\t\t\t\t\t\t$input = datetimepicker.data('input');\r\n\t\t\t\t\t\t\t$input.trigger('blur.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tif (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {\r\n\t\t\t\t\t\t\t\tresult = datetimepicker[opt](opt2);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatetimepicker\r\n\t\t\t\t\t\t.setOptions(opt);\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tif ($.type(opt) !== 'string') {\r\n\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\r\n\t\t\t\t\tcreateDateTimePicker($(this));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlazyInit($(this));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\t$.fn.datetimepicker.defaults = default_options;\r\n\r\n\tfunction HighlightedDate(date, desc, style) {\r\n\t\t\"use strict\";\r\n\t\tthis.date = date;\r\n\t\tthis.desc = desc;\r\n\t\tthis.style = style;\r\n\t}\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', 'jquery-mousewheel'], factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\t// Node/CommonJS style for Browserify\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}(datetimepickerFactory));\r\n\r\n\r\n/*!\r\n * jQuery Mousewheel 3.1.13\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n */\r\n\r\n(function (factory) {\r\n if ( typeof define === 'function' && define.amd ) {\r\n // AMD. Register as an anonymous module.\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS style for Browserify\r\n module.exports = factory;\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n\r\n var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\r\n toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\r\n ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\r\n slice = Array.prototype.slice,\r\n nullLowestDeltaTimeout, lowestDelta;\r\n\r\n if ( $.event.fixHooks ) {\r\n for ( var i = toFix.length; i; ) {\r\n $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\r\n }\r\n }\r\n\r\n var special = $.event.special.mousewheel = {\r\n version: '3.1.12',\r\n\r\n setup: function() {\r\n if ( this.addEventListener ) {\r\n for ( var i = toBind.length; i; ) {\r\n this.addEventListener( toBind[--i], handler, false );\r\n }\r\n } else {\r\n this.onmousewheel = handler;\r\n }\r\n // Store the line height and page height for this particular element\r\n $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\r\n $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\r\n },\r\n\r\n teardown: function() {\r\n if ( this.removeEventListener ) {\r\n for ( var i = toBind.length; i; ) {\r\n this.removeEventListener( toBind[--i], handler, false );\r\n }\r\n } else {\r\n this.onmousewheel = null;\r\n }\r\n // Clean up the data we added to the element\r\n $.removeData(this, 'mousewheel-line-height');\r\n $.removeData(this, 'mousewheel-page-height');\r\n },\r\n\r\n getLineHeight: function(elem) {\r\n var $elem = $(elem),\r\n $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\r\n if (!$parent.length) {\r\n $parent = $('body');\r\n }\r\n return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\r\n },\r\n\r\n getPageHeight: function(elem) {\r\n return $(elem).height();\r\n },\r\n\r\n settings: {\r\n adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\r\n normalizeOffset: true // calls getBoundingClientRect for each event\r\n }\r\n };\r\n\r\n $.fn.extend({\r\n mousewheel: function(fn) {\r\n return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\r\n },\r\n\r\n unmousewheel: function(fn) {\r\n return this.unbind('mousewheel', fn);\r\n }\r\n });\r\n\r\n\r\n function handler(event) {\r\n var orgEvent = event || window.event,\r\n args = slice.call(arguments, 1),\r\n delta = 0,\r\n deltaX = 0,\r\n deltaY = 0,\r\n absDelta = 0,\r\n offsetX = 0,\r\n offsetY = 0;\r\n event = $.event.fix(orgEvent);\r\n event.type = 'mousewheel';\r\n\r\n // Old school scrollwheel delta\r\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\r\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\r\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\r\n if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\r\n\r\n // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\r\n if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\r\n deltaX = deltaY * -1;\r\n deltaY = 0;\r\n }\r\n\r\n // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\r\n delta = deltaY === 0 ? deltaX : deltaY;\r\n\r\n // New school wheel delta (wheel event)\r\n if ( 'deltaY' in orgEvent ) {\r\n deltaY = orgEvent.deltaY * -1;\r\n delta = deltaY;\r\n }\r\n if ( 'deltaX' in orgEvent ) {\r\n deltaX = orgEvent.deltaX;\r\n if ( deltaY === 0 ) { delta = deltaX * -1; }\r\n }\r\n\r\n // No change actually happened, no reason to go any further\r\n if ( deltaY === 0 && deltaX === 0 ) { return; }\r\n\r\n // Need to convert lines and pages to pixels if we aren't already in pixels\r\n // There are three delta modes:\r\n // * deltaMode 0 is by pixels, nothing to do\r\n // * deltaMode 1 is by lines\r\n // * deltaMode 2 is by pages\r\n if ( orgEvent.deltaMode === 1 ) {\r\n var lineHeight = $.data(this, 'mousewheel-line-height');\r\n delta *= lineHeight;\r\n deltaY *= lineHeight;\r\n deltaX *= lineHeight;\r\n } else if ( orgEvent.deltaMode === 2 ) {\r\n var pageHeight = $.data(this, 'mousewheel-page-height');\r\n delta *= pageHeight;\r\n deltaY *= pageHeight;\r\n deltaX *= pageHeight;\r\n }\r\n\r\n // Store lowest absolute delta to normalize the delta values\r\n absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\r\n\r\n if ( !lowestDelta || absDelta < lowestDelta ) {\r\n lowestDelta = absDelta;\r\n\r\n // Adjust older deltas if necessary\r\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\r\n lowestDelta /= 40;\r\n }\r\n }\r\n\r\n // Adjust older deltas if necessary\r\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\r\n // Divide all the things by 40!\r\n delta /= 40;\r\n deltaX /= 40;\r\n deltaY /= 40;\r\n }\r\n\r\n // Get a whole, normalized value for the deltas\r\n delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);\r\n deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\r\n deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\r\n\r\n // Normalise offsetX and offsetY properties\r\n if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\r\n var boundingRect = this.getBoundingClientRect();\r\n offsetX = event.clientX - boundingRect.left;\r\n offsetY = event.clientY - boundingRect.top;\r\n }\r\n\r\n // Add information to the event object\r\n event.deltaX = deltaX;\r\n event.deltaY = deltaY;\r\n event.deltaFactor = lowestDelta;\r\n event.offsetX = offsetX;\r\n event.offsetY = offsetY;\r\n // Go ahead and set deltaMode to 0 since we converted to pixels\r\n // Although this is a little odd since we overwrite the deltaX/Y\r\n // properties with normalized deltas.\r\n event.deltaMode = 0;\r\n\r\n // Add event and delta to the front of the arguments\r\n args.unshift(event, delta, deltaX, deltaY);\r\n\r\n // Clearout lowestDelta after sometime to better\r\n // handle multiple device types that give different\r\n // a different lowestDelta\r\n // Ex: trackpad = 3 and mouse wheel = 120\r\n if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\r\n nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\r\n\r\n return ($.event.dispatch || $.event.handle).apply(this, args);\r\n }\r\n\r\n function nullLowestDelta() {\r\n lowestDelta = null;\r\n }\r\n\r\n function shouldAdjustOldDeltas(orgEvent, absDelta) {\r\n // If this is an older event and the delta is divisable by 120,\r\n // then we are assuming that the browser is treating this as an\r\n // older mouse wheel event and that we should divide the deltas\r\n // by 40 to try and get a more usable deltaFactor.\r\n // Side note, this actually impacts the reported scroll distance\r\n // in older browsers and can cause scrolling to be slower than native.\r\n // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\r\n return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\r\n }\r\n\r\n}));\r\n","/*!\r\n * jQuery blockUI plugin\r\n * Version 2.70.0-2014.11.23\r\n * Requires jQuery v1.7 or later\r\n *\r\n * Examples at: http://malsup.com/jquery/block/\r\n * Copyright (c) 2007-2013 M. Alsup\r\n * Dual licensed under the MIT and GPL licenses:\r\n * http://www.opensource.org/licenses/mit-license.php\r\n * http://www.gnu.org/licenses/gpl.html\r\n *\r\n * Thanks to Amir-Hossein Sobhi for some excellent contributions!\r\n */\r\n\r\n;(function() {\r\n /*jshint eqeqeq:false curly:false latedef:false */\r\n \"use strict\";\r\n\r\n function setup($) {\r\n $.fn._fadeIn = $.fn.fadeIn;\r\n\r\n var noOp = $.noop || function() {};\r\n\r\n // this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\r\n // confusing userAgent strings on Vista)\r\n var msie = /MSIE/.test(navigator.userAgent);\r\n var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);\r\n var mode = document.documentMode || 0;\r\n var setExpr = $.isFunction( document.createElement('div').style.setExpression );\r\n\r\n // global $ methods for blocking/unblocking the entire page\r\n $.blockUI = function(opts) { install(window, opts); };\r\n $.unblockUI = function(opts) { remove(window, opts); };\r\n\r\n // convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)\r\n $.growlUI = function(title, message, timeout, onClose) {\r\n var $m = $('
    ');\r\n if (title) $m.append('

    '+title+'

    ');\r\n if (message) $m.append('

    '+message+'

    ');\r\n if (timeout === undefined) timeout = 3000;\r\n\r\n // Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications\r\n var callBlock = function(opts) {\r\n opts = opts || {};\r\n\r\n $.blockUI({\r\n message: $m,\r\n fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,\r\n fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,\r\n timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,\r\n centerY: false,\r\n showOverlay: false,\r\n onUnblock: onClose,\r\n css: $.blockUI.defaults.growlCSS\r\n });\r\n };\r\n\r\n callBlock();\r\n var nonmousedOpacity = $m.css('opacity');\r\n $m.mouseover(function() {\r\n callBlock({\r\n fadeIn: 0,\r\n timeout: 30000\r\n });\r\n\r\n var displayBlock = $('.blockMsg');\r\n displayBlock.stop(); // cancel fadeout if it has started\r\n displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency\r\n }).mouseout(function() {\r\n $('.blockMsg').fadeOut(1000);\r\n });\r\n // End konapun additions\r\n };\r\n\r\n // plugin method for blocking element content\r\n $.fn.block = function(opts) {\r\n if ( this[0] === window ) {\r\n $.blockUI( opts );\r\n return this;\r\n }\r\n var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\r\n this.each(function() {\r\n var $el = $(this);\r\n if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\r\n return;\r\n $el.unblock({ fadeOut: 0 });\r\n });\r\n\r\n return this.each(function() {\r\n if ($.css(this,'position') == 'static') {\r\n this.style.position = 'relative';\r\n $(this).data('blockUI.static', true);\r\n }\r\n this.style.zoom = 1; // force 'hasLayout' in ie\r\n install(this, opts);\r\n });\r\n };\r\n\r\n // plugin method for unblocking element content\r\n $.fn.unblock = function(opts) {\r\n if ( this[0] === window ) {\r\n $.unblockUI( opts );\r\n return this;\r\n }\r\n return this.each(function() {\r\n remove(this, opts);\r\n });\r\n };\r\n\r\n $.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!\r\n\r\n // override these in your code to change the default behavior and style\r\n $.blockUI.defaults = {\r\n // message displayed when blocking (use null for no message)\r\n message: '

    Please wait...

    ',\r\n\r\n title: null,\t\t// title string; only used when theme == true\r\n draggable: true,\t// only used when theme == true (requires jquery-ui.js to be loaded)\r\n\r\n theme: false, // set to true to use with jQuery UI themes\r\n\r\n // styles for the message when blocking; if you wish to disable\r\n // these and use an external stylesheet then do this in your code:\r\n // $.blockUI.defaults.css = {};\r\n css: {\r\n padding:\t0,\r\n margin:\t\t0,\r\n width:\t\t'30%',\r\n top:\t\t'40%',\r\n left:\t\t'35%',\r\n textAlign:\t'center',\r\n color:\t\t'#000',\r\n border:\t\t'3px solid #aaa',\r\n backgroundColor:'#fff',\r\n cursor:\t\t'wait'\r\n },\r\n\r\n // minimal style set used when themes are used\r\n themedCSS: {\r\n width:\t'30%',\r\n top:\t'40%',\r\n left:\t'35%'\r\n },\r\n\r\n // styles for the overlay\r\n overlayCSS: {\r\n backgroundColor:\t'#000',\r\n opacity:\t\t\t0.6,\r\n cursor:\t\t\t\t'wait'\r\n },\r\n\r\n // style to replace wait cursor before unblocking to correct issue\r\n // of lingering wait cursor\r\n cursorReset: 'default',\r\n\r\n // styles applied when using $.growlUI\r\n growlCSS: {\r\n width:\t\t'350px',\r\n top:\t\t'10px',\r\n left:\t\t'',\r\n right:\t\t'10px',\r\n border:\t\t'none',\r\n padding:\t'5px',\r\n opacity:\t0.6,\r\n cursor:\t\t'default',\r\n color:\t\t'#fff',\r\n backgroundColor: '#000',\r\n '-webkit-border-radius':'10px',\r\n '-moz-border-radius':\t'10px',\r\n 'border-radius':\t\t'10px'\r\n },\r\n\r\n // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\r\n // (hat tip to Jorge H. N. de Vasconcelos)\r\n /*jshint scripturl:true */\r\n iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\r\n\r\n // force usage of iframe in non-IE browsers (handy for blocking applets)\r\n forceIframe: false,\r\n\r\n // z-index for the blocking overlay\r\n baseZ: 1000,\r\n\r\n // set these to true to have the message automatically centered\r\n centerX: true, // <-- only effects element blocking (page block controlled via css above)\r\n centerY: true,\r\n\r\n // allow body element to be stetched in ie6; this makes blocking look better\r\n // on \"short\" pages. disable if you wish to prevent changes to the body height\r\n allowBodyStretch: true,\r\n\r\n // enable if you want key and mouse events to be disabled for content that is blocked\r\n bindEvents: true,\r\n\r\n // be default blockUI will supress tab navigation from leaving blocking content\r\n // (if bindEvents is true)\r\n constrainTabKey: true,\r\n\r\n // fadeIn time in millis; set to 0 to disable fadeIn on block\r\n fadeIn: 200,\r\n\r\n // fadeOut time in millis; set to 0 to disable fadeOut on unblock\r\n fadeOut: 400,\r\n\r\n // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\r\n timeout: 0,\r\n\r\n // disable if you don't want to show the overlay\r\n showOverlay: true,\r\n\r\n // if true, focus will be placed in the first available input field when\r\n // page blocking\r\n focusInput: true,\r\n\r\n // elements that can receive focus\r\n focusableElements: ':input:enabled:visible',\r\n\r\n // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\r\n // no longer needed in 2012\r\n // applyPlatformOpacityRules: true,\r\n\r\n // callback method invoked when fadeIn has completed and blocking message is visible\r\n onBlock: null,\r\n\r\n // callback method invoked when unblocking has completed; the callback is\r\n // passed the element that has been unblocked (which is the window object for page\r\n // blocks) and the options that were passed to the unblock call:\r\n //\tonUnblock(element, options)\r\n onUnblock: null,\r\n\r\n // callback method invoked when the overlay area is clicked.\r\n // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\r\n onOverlayClick: null,\r\n\r\n // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\r\n quirksmodeOffsetHack: 4,\r\n\r\n // class name of the message block\r\n blockMsgClass: 'blockMsg',\r\n\r\n // if it is already blocked, then ignore it (don't unblock and reblock)\r\n ignoreIfBlocked: false\r\n };\r\n\r\n // private data and functions follow...\r\n\r\n var pageBlock = null;\r\n var pageBlockEls = [];\r\n\r\n function install(el, opts) {\r\n var css, themedCSS;\r\n var full = (el == window);\r\n var msg = (opts && opts.message !== undefined ? opts.message : undefined);\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n\r\n if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\r\n return;\r\n\r\n opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\r\n css = $.extend({}, $.blockUI.defaults.css, opts.css || {});\r\n if (opts.onOverlayClick)\r\n opts.overlayCSS.cursor = 'pointer';\r\n\r\n themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\r\n msg = msg === undefined ? opts.message : msg;\r\n\r\n // remove the current block (if there is one)\r\n if (full && pageBlock)\r\n remove(window, {fadeOut:0});\r\n\r\n // if an existing element is being used as the blocking content then we capture\r\n // its current place in the DOM (and current display style) so we can restore\r\n // it when we unblock\r\n if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\r\n var node = msg.jquery ? msg[0] : msg;\r\n var data = {};\r\n $(el).data('blockUI.history', data);\r\n data.el = node;\r\n data.parent = node.parentNode;\r\n data.display = node.style.display;\r\n data.position = node.style.position;\r\n if (data.parent)\r\n data.parent.removeChild(node);\r\n }\r\n\r\n $(el).data('blockUI.onUnblock', opts.onUnblock);\r\n var z = opts.baseZ;\r\n\r\n // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\r\n // layer1 is the iframe layer which is used to supress bleed through of underlying content\r\n // layer2 is the overlay layer which has opacity and a wait cursor (by default)\r\n // layer3 is the message content that is displayed while blocking\r\n var lyr1, lyr2, lyr3, s;\r\n if (msie || opts.forceIframe)\r\n lyr1 = $('');\r\n else\r\n lyr1 = $('
    ');\r\n\r\n if (opts.theme)\r\n lyr2 = $('
    ');\r\n else\r\n lyr2 = $('
    ');\r\n\r\n if (opts.theme && full) {\r\n s = '';\r\n }\r\n else if (opts.theme) {\r\n s = '';\r\n }\r\n else if (full) {\r\n s = '';\r\n }\r\n else {\r\n s = '';\r\n }\r\n lyr3 = $(s);\r\n\r\n // if we have a message, style it\r\n if (msg) {\r\n if (opts.theme) {\r\n lyr3.css(themedCSS);\r\n lyr3.addClass('ui-widget-content');\r\n }\r\n else\r\n lyr3.css(css);\r\n }\r\n\r\n // style the overlay\r\n if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\r\n lyr2.css(opts.overlayCSS);\r\n lyr2.css('position', full ? 'fixed' : 'absolute');\r\n\r\n // make iframe layer transparent in IE\r\n if (msie || opts.forceIframe)\r\n lyr1.css('opacity',0.0);\r\n\r\n //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\r\n var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\r\n $.each(layers, function() {\r\n this.appendTo($par);\r\n });\r\n\r\n if (opts.theme && opts.draggable && $.fn.draggable) {\r\n lyr3.draggable({\r\n handle: '.ui-dialog-titlebar',\r\n cancel: 'li'\r\n });\r\n }\r\n\r\n // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\r\n var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\r\n if (ie6 || expr) {\r\n // give body 100% height\r\n if (full && opts.allowBodyStretch && $.support.boxModel)\r\n $('html,body').css('height','100%');\r\n\r\n // fix ie6 issue when blocked element has a border width\r\n if ((ie6 || !$.support.boxModel) && !full) {\r\n var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\r\n var fixT = t ? '(0 - '+t+')' : 0;\r\n var fixL = l ? '(0 - '+l+')' : 0;\r\n }\r\n\r\n // simulate fixed position\r\n $.each(layers, function(i,o) {\r\n var s = o[0].style;\r\n s.position = 'absolute';\r\n if (i < 2) {\r\n if (full)\r\n s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\r\n else\r\n s.setExpression('height','this.parentNode.offsetHeight + \"px\"');\r\n if (full)\r\n s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\r\n else\r\n s.setExpression('width','this.parentNode.offsetWidth + \"px\"');\r\n if (fixL) s.setExpression('left', fixL);\r\n if (fixT) s.setExpression('top', fixT);\r\n }\r\n else if (opts.centerY) {\r\n if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\r\n s.marginTop = 0;\r\n }\r\n else if (!opts.centerY && full) {\r\n var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\r\n var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\r\n s.setExpression('top',expression);\r\n }\r\n });\r\n }\r\n\r\n // show the message\r\n if (msg) {\r\n if (opts.theme)\r\n lyr3.find('.ui-widget-content').append(msg);\r\n else\r\n lyr3.append(msg);\r\n if (msg.jquery || msg.nodeType)\r\n $(msg).show();\r\n }\r\n\r\n if ((msie || opts.forceIframe) && opts.showOverlay)\r\n lyr1.show(); // opacity is zero\r\n if (opts.fadeIn) {\r\n var cb = opts.onBlock ? opts.onBlock : noOp;\r\n var cb1 = (opts.showOverlay && !msg) ? cb : noOp;\r\n var cb2 = msg ? cb : noOp;\r\n if (opts.showOverlay)\r\n lyr2._fadeIn(opts.fadeIn, cb1);\r\n if (msg)\r\n lyr3._fadeIn(opts.fadeIn, cb2);\r\n }\r\n else {\r\n if (opts.showOverlay)\r\n lyr2.show();\r\n if (msg)\r\n lyr3.show();\r\n if (opts.onBlock)\r\n opts.onBlock.bind(lyr3)();\r\n }\r\n\r\n // bind key and mouse events\r\n bind(1, el, opts);\r\n\r\n if (full) {\r\n pageBlock = lyr3[0];\r\n pageBlockEls = $(opts.focusableElements,pageBlock);\r\n if (opts.focusInput)\r\n setTimeout(focus, 20);\r\n }\r\n else\r\n center(lyr3[0], opts.centerX, opts.centerY);\r\n\r\n if (opts.timeout) {\r\n // auto-unblock\r\n var to = setTimeout(function() {\r\n if (full)\r\n $.unblockUI(opts);\r\n else\r\n $(el).unblock(opts);\r\n }, opts.timeout);\r\n $(el).data('blockUI.timeout', to);\r\n }\r\n }\r\n\r\n // remove the block\r\n function remove(el, opts) {\r\n var count;\r\n var full = (el == window);\r\n var $el = $(el);\r\n var data = $el.data('blockUI.history');\r\n var to = $el.data('blockUI.timeout');\r\n if (to) {\r\n clearTimeout(to);\r\n $el.removeData('blockUI.timeout');\r\n }\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n bind(0, el, opts); // unbind events\r\n\r\n if (opts.onUnblock === null) {\r\n opts.onUnblock = $el.data('blockUI.onUnblock');\r\n $el.removeData('blockUI.onUnblock');\r\n }\r\n\r\n var els;\r\n if (full) // crazy selector to handle odd field errors in ie6/7\r\n els = $('body').children().filter('.blockUI').add('body > .blockUI');\r\n else\r\n els = $el.find('>.blockUI');\r\n\r\n // fix cursor issue\r\n if ( opts.cursorReset ) {\r\n if ( els.length > 1 )\r\n els[1].style.cursor = opts.cursorReset;\r\n if ( els.length > 2 )\r\n els[2].style.cursor = opts.cursorReset;\r\n }\r\n\r\n if (full)\r\n pageBlock = pageBlockEls = null;\r\n\r\n if (opts.fadeOut) {\r\n count = els.length;\r\n els.stop().fadeOut(opts.fadeOut, function() {\r\n if ( --count === 0)\r\n reset(els,data,opts,el);\r\n });\r\n }\r\n else\r\n reset(els, data, opts, el);\r\n }\r\n\r\n // move blocking element back into the DOM where it started\r\n function reset(els,data,opts,el) {\r\n var $el = $(el);\r\n if ( $el.data('blockUI.isBlocked') )\r\n return;\r\n\r\n els.each(function(i,o) {\r\n // remove via DOM calls so we don't lose event handlers\r\n if (this.parentNode)\r\n this.parentNode.removeChild(this);\r\n });\r\n\r\n if (data && data.el) {\r\n data.el.style.display = data.display;\r\n data.el.style.position = data.position;\r\n data.el.style.cursor = 'default'; // #59\r\n if (data.parent)\r\n data.parent.appendChild(data.el);\r\n $el.removeData('blockUI.history');\r\n }\r\n\r\n if ($el.data('blockUI.static')) {\r\n $el.css('position', 'static'); // #22\r\n }\r\n\r\n if (typeof opts.onUnblock == 'function')\r\n opts.onUnblock(el,opts);\r\n\r\n // fix issue in Safari 6 where block artifacts remain until reflow\r\n var body = $(document.body), w = body.width(), cssW = body[0].style.width;\r\n body.width(w-1).width(w);\r\n body[0].style.width = cssW;\r\n }\r\n\r\n // bind/unbind the handler\r\n function bind(b, el, opts) {\r\n var full = el == window, $el = $(el);\r\n\r\n // don't bother unbinding if there is nothing to unbind\r\n if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\r\n return;\r\n\r\n $el.data('blockUI.isBlocked', b);\r\n\r\n // don't bind events when overlay is not in use or if bindEvents is false\r\n if (!full || !opts.bindEvents || (b && !opts.showOverlay))\r\n return;\r\n\r\n // bind anchors and inputs for mouse and key events\r\n var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\r\n if (b)\r\n $(document).bind(events, opts, handler);\r\n else\r\n $(document).unbind(events, handler);\r\n\r\n // former impl...\r\n //\t\tvar $e = $('a,:input');\r\n //\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\r\n }\r\n\r\n // event handler to suppress keyboard/mouse events when blocking\r\n function handler(e) {\r\n // allow tab navigation (conditionally)\r\n if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\r\n if (pageBlock && e.data.constrainTabKey) {\r\n var els = pageBlockEls;\r\n var fwd = !e.shiftKey && e.target === els[els.length-1];\r\n var back = e.shiftKey && e.target === els[0];\r\n if (fwd || back) {\r\n setTimeout(function(){focus(back);},10);\r\n return false;\r\n }\r\n }\r\n }\r\n var opts = e.data;\r\n var target = $(e.target);\r\n if (target.hasClass('blockOverlay') && opts.onOverlayClick)\r\n opts.onOverlayClick(e);\r\n\r\n // allow events within the message content\r\n if (target.parents('div.' + opts.blockMsgClass).length > 0)\r\n return true;\r\n\r\n // allow events for content that is not being blocked\r\n return target.parents().children().filter('div.blockUI').length === 0;\r\n }\r\n\r\n function focus(back) {\r\n if (!pageBlockEls)\r\n return;\r\n var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\r\n if (e)\r\n e.focus();\r\n }\r\n\r\n function center(el, x, y) {\r\n var p = el.parentNode, s = el.style;\r\n var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\r\n var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\r\n if (x) s.left = l > 0 ? (l+'px') : '0';\r\n if (y) s.top = t > 0 ? (t+'px') : '0';\r\n }\r\n\r\n function sz(el, p) {\r\n return parseInt($.css(el,p),10)||0;\r\n }\r\n\r\n }\r\n\r\n\r\n /*global define:true */\r\n if (typeof define === 'function' && define.amd && define.amd.jQuery) {\r\n define(['jquery'], setup);\r\n } else {\r\n setup(jQuery);\r\n }\r\n\r\n})();","/*!\r\n * v0.1.5\r\n * Copyright (c) 2014 First Opinion\r\n * formatter.js is open sourced under the MIT license.\r\n *\r\n * thanks to digitalBush/jquery.maskedinput for some of the trickier\r\n * keycode handling\r\n */ \r\n\r\n//\r\n// Uses CommonJS, AMD or browser globals to create a jQuery plugin.\r\n//\r\n// Similar to jqueryPlugin.js but also tries to\r\n// work in a CommonJS environment.\r\n// It is unlikely jQuery will run in a CommonJS\r\n// environment. See jqueryPlugin.js if you do\r\n// not want to add the extra CommonJS detection.\r\n//\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(['jQuery'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jQuery'));\r\n } else {\r\n // Browser globals\r\n factory(root.jQuery);\r\n }\r\n}(this, function (jQuery) {\r\n\r\n\r\n/*\r\n * pattern.js\r\n *\r\n * Utilities to parse str pattern and return info\r\n *\r\n */\r\nvar pattern = function () {\r\n // Define module\r\n var pattern = {};\r\n // Match information\r\n var DELIM_SIZE = 4;\r\n // Our regex used to parse\r\n var regexp = new RegExp('{{([^}]+)}}', 'g');\r\n //\r\n // Helper method to parse pattern str\r\n //\r\n var getMatches = function (pattern) {\r\n // Populate array of matches\r\n var matches = [], match;\r\n while (match = regexp.exec(pattern)) {\r\n matches.push(match);\r\n }\r\n return matches;\r\n };\r\n //\r\n // Create an object holding all formatted characters\r\n // with corresponding positions\r\n //\r\n pattern.parse = function (pattern) {\r\n // Our obj to populate\r\n var info = {\r\n inpts: {},\r\n chars: {}\r\n };\r\n // Pattern information\r\n var matches = getMatches(pattern), pLength = pattern.length;\r\n // Counters\r\n var mCount = 0, iCount = 0, i = 0;\r\n // Add inpts, move to end of match, and process\r\n var processMatch = function (val) {\r\n var valLength = val.length;\r\n for (var j = 0; j < valLength; j++) {\r\n info.inpts[iCount] = val.charAt(j);\r\n iCount++;\r\n }\r\n mCount++;\r\n i += val.length + DELIM_SIZE - 1;\r\n };\r\n // Process match or add chars\r\n for (i; i < pLength; i++) {\r\n if (mCount < matches.length && i === matches[mCount].index) {\r\n processMatch(matches[mCount][1]);\r\n } else {\r\n info.chars[i - mCount * DELIM_SIZE] = pattern.charAt(i);\r\n }\r\n }\r\n // Set mLength and return\r\n info.mLength = i - mCount * DELIM_SIZE;\r\n return info;\r\n };\r\n // Expose\r\n return pattern;\r\n }();\r\n/*\r\n * utils.js\r\n *\r\n * Independent helper methods (cross browser, etc..)\r\n *\r\n */\r\nvar utils = function () {\r\n // Define module\r\n var utils = {};\r\n // Useragent info for keycode handling\r\n var uAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;\r\n //\r\n // Shallow copy properties from n objects to destObj\r\n //\r\n utils.extend = function (destObj) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n for (var key in arguments[i]) {\r\n destObj[key] = arguments[i][key];\r\n }\r\n }\r\n return destObj;\r\n };\r\n //\r\n // Add a given character to a string at a defined pos\r\n //\r\n utils.addChars = function (str, chars, pos) {\r\n return str.substr(0, pos) + chars + str.substr(pos, str.length);\r\n };\r\n //\r\n // Remove a span of characters\r\n //\r\n utils.removeChars = function (str, start, end) {\r\n return str.substr(0, start) + str.substr(end, str.length);\r\n };\r\n //\r\n // Return true/false is num false between bounds\r\n //\r\n utils.isBetween = function (num, bounds) {\r\n bounds.sort(function (a, b) {\r\n return a - b;\r\n });\r\n return num > bounds[0] && num < bounds[1];\r\n };\r\n //\r\n // Helper method for cross browser event listeners\r\n //\r\n utils.addListener = function (el, evt, handler) {\r\n return typeof el.addEventListener !== 'undefined' ? el.addEventListener(evt, handler, false) : el.attachEvent('on' + evt, handler);\r\n };\r\n //\r\n // Helper method for cross browser implementation of preventDefault\r\n //\r\n utils.preventDefault = function (evt) {\r\n return evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;\r\n };\r\n //\r\n // Helper method for cross browser implementation for grabbing\r\n // clipboard data\r\n //\r\n utils.getClip = function (evt) {\r\n if (evt.clipboardData) {\r\n return evt.clipboardData.getData('Text');\r\n }\r\n if (window.clipboardData) {\r\n return window.clipboardData.getData('Text');\r\n }\r\n };\r\n //\r\n // Loop over object and checking for matching properties\r\n //\r\n utils.getMatchingKey = function (which, keyCode, keys) {\r\n // Loop over and return if matched.\r\n for (var k in keys) {\r\n var key = keys[k];\r\n if (which === key.which && keyCode === key.keyCode) {\r\n return k;\r\n }\r\n }\r\n };\r\n //\r\n // Returns true/false if k is a del keyDown\r\n //\r\n utils.isDelKeyDown = function (which, keyCode) {\r\n var keys = {\r\n 'backspace': {\r\n 'which': 8,\r\n 'keyCode': 8\r\n },\r\n 'delete': {\r\n 'which': 46,\r\n 'keyCode': 46\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n //\r\n // Returns true/false if k is a del keyPress\r\n //\r\n utils.isDelKeyPress = function (which, keyCode) {\r\n var keys = {\r\n 'backspace': {\r\n 'which': 8,\r\n 'keyCode': 8,\r\n 'shiftKey': false\r\n },\r\n 'delete': {\r\n 'which': 0,\r\n 'keyCode': 46\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n // //\r\n // // Determine if keydown relates to specialKey\r\n // //\r\n // utils.isSpecialKeyDown = function (which, keyCode) {\r\n // var keys = {\r\n // 'tab': { 'which': 9, 'keyCode': 9 },\r\n // 'enter': { 'which': 13, 'keyCode': 13 },\r\n // 'end': { 'which': 35, 'keyCode': 35 },\r\n // 'home': { 'which': 36, 'keyCode': 36 },\r\n // 'leftarrow': { 'which': 37, 'keyCode': 37 },\r\n // 'uparrow': { 'which': 38, 'keyCode': 38 },\r\n // 'rightarrow': { 'which': 39, 'keyCode': 39 },\r\n // 'downarrow': { 'which': 40, 'keyCode': 40 },\r\n // 'F5': { 'which': 116, 'keyCode': 116 }\r\n // };\r\n // return utils.getMatchingKey(which, keyCode, keys);\r\n // };\r\n //\r\n // Determine if keypress relates to specialKey\r\n //\r\n utils.isSpecialKeyPress = function (which, keyCode) {\r\n var keys = {\r\n 'tab': {\r\n 'which': 0,\r\n 'keyCode': 9\r\n },\r\n 'enter': {\r\n 'which': 13,\r\n 'keyCode': 13\r\n },\r\n 'end': {\r\n 'which': 0,\r\n 'keyCode': 35\r\n },\r\n 'home': {\r\n 'which': 0,\r\n 'keyCode': 36\r\n },\r\n 'leftarrow': {\r\n 'which': 0,\r\n 'keyCode': 37\r\n },\r\n 'uparrow': {\r\n 'which': 0,\r\n 'keyCode': 38\r\n },\r\n 'rightarrow': {\r\n 'which': 0,\r\n 'keyCode': 39\r\n },\r\n 'downarrow': {\r\n 'which': 0,\r\n 'keyCode': 40\r\n },\r\n 'F5': {\r\n 'which': 116,\r\n 'keyCode': 116\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n //\r\n // Returns true/false if modifier key is held down\r\n //\r\n utils.isModifier = function (evt) {\r\n return evt.ctrlKey || evt.altKey || evt.metaKey;\r\n };\r\n //\r\n // Iterates over each property of object or array.\r\n //\r\n utils.forEach = function (collection, callback, thisArg) {\r\n if (collection.hasOwnProperty('length')) {\r\n for (var index = 0, len = collection.length; index < len; index++) {\r\n if (callback.call(thisArg, collection[index], index, collection) === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n for (var key in collection) {\r\n if (collection.hasOwnProperty(key)) {\r\n if (callback.call(thisArg, collection[key], key, collection) === false) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n // Expose\r\n return utils;\r\n }();\r\n/*\r\n* pattern-matcher.js\r\n*\r\n* Parses a pattern specification and determines appropriate pattern for an\r\n* input string\r\n*\r\n*/\r\nvar patternMatcher = function (pattern, utils) {\r\n //\r\n // Parse a matcher string into a RegExp. Accepts valid regular\r\n // expressions and the catchall '*'.\r\n // @private\r\n //\r\n var parseMatcher = function (matcher) {\r\n if (matcher === '*') {\r\n return /.*/;\r\n }\r\n return new RegExp(matcher);\r\n };\r\n //\r\n // Parse a pattern spec and return a function that returns a pattern\r\n // based on user input. The first matching pattern will be chosen.\r\n // Pattern spec format:\r\n // Array [\r\n // Object: { Matcher(RegExp String) : Pattern(Pattern String) },\r\n // ...\r\n // ]\r\n function patternMatcher(patternSpec) {\r\n var matchers = [], patterns = [];\r\n // Iterate over each pattern in order.\r\n utils.forEach(patternSpec, function (patternMatcher) {\r\n // Process single property object to obtain pattern and matcher.\r\n utils.forEach(patternMatcher, function (patternStr, matcherStr) {\r\n var parsedPattern = pattern.parse(patternStr), regExpMatcher = parseMatcher(matcherStr);\r\n matchers.push(regExpMatcher);\r\n patterns.push(parsedPattern);\r\n // Stop after one iteration.\r\n return false;\r\n });\r\n });\r\n var getPattern = function (input) {\r\n var matchedIndex;\r\n utils.forEach(matchers, function (matcher, index) {\r\n if (matcher.test(input)) {\r\n matchedIndex = index;\r\n return false;\r\n }\r\n });\r\n return matchedIndex === undefined ? null : patterns[matchedIndex];\r\n };\r\n return {\r\n getPattern: getPattern,\r\n patterns: patterns,\r\n matchers: matchers\r\n };\r\n }\r\n // Expose\r\n return patternMatcher;\r\n }(pattern, utils);\r\n/*\r\n * inpt-sel.js\r\n *\r\n * Cross browser implementation to get and set input selections\r\n *\r\n */\r\nvar inptSel = function () {\r\n // Define module\r\n var inptSel = {};\r\n //\r\n // Get begin and end positions of selected input. Return 0's\r\n // if there is no selectiion data\r\n //\r\n inptSel.get = function (el) {\r\n // If normal browser return with result\r\n if (typeof el.selectionStart === 'number') {\r\n return {\r\n begin: el.selectionStart,\r\n end: el.selectionEnd\r\n };\r\n }\r\n // Uh-Oh. We must be IE. Fun with TextRange!!\r\n var range = document.selection.createRange();\r\n // Determine if there is a selection\r\n if (range && range.parentElement() === el) {\r\n var inputRange = el.createTextRange(), endRange = el.createTextRange(), length = el.value.length;\r\n // Create a working TextRange for the input selection\r\n inputRange.moveToBookmark(range.getBookmark());\r\n // Move endRange begin pos to end pos (hence endRange)\r\n endRange.collapse(false);\r\n // If we are at the very end of the input, begin and end\r\n // must both be the length of the el.value\r\n if (inputRange.compareEndPoints('StartToEnd', endRange) > -1) {\r\n return {\r\n begin: length,\r\n end: length\r\n };\r\n }\r\n // Note: moveStart usually returns the units moved, which \r\n // one may think is -length, however, it will stop when it\r\n // gets to the begin of the range, thus giving us the\r\n // negative value of the pos.\r\n return {\r\n begin: -inputRange.moveStart('character', -length),\r\n end: -inputRange.moveEnd('character', -length)\r\n };\r\n }\r\n //Return 0's on no selection data\r\n return {\r\n begin: 0,\r\n end: 0\r\n };\r\n };\r\n //\r\n // Set the caret position at a specified location\r\n //\r\n inptSel.set = function (el, pos) {\r\n // Normalize pos\r\n if (typeof pos !== 'object') {\r\n pos = {\r\n begin: pos,\r\n end: pos\r\n };\r\n }\r\n // If normal browser\r\n if (el.setSelectionRange) {\r\n el.focus();\r\n el.setSelectionRange(pos.begin, pos.end);\r\n } else if (el.createTextRange) {\r\n var range = el.createTextRange();\r\n range.collapse(true);\r\n range.moveEnd('character', pos.end);\r\n range.moveStart('character', pos.begin);\r\n range.select();\r\n }\r\n };\r\n // Expose\r\n return inptSel;\r\n }();\r\n/*\r\n * formatter.js\r\n *\r\n * Class used to format input based on passed pattern\r\n *\r\n */\r\nvar formatter = function (patternMatcher, inptSel, utils) {\r\n // Defaults\r\n var defaults = {\r\n persistent: false,\r\n repeat: false,\r\n placeholder: ' '\r\n };\r\n // Regexs for input validation\r\n var inptRegs = {\r\n '9': /[0-9]/,\r\n 'a': /[A-Za-z]/,\r\n '*': /[A-Za-z0-9]/\r\n };\r\n //\r\n // Class Constructor - Called with new Formatter(el, opts)\r\n // Responsible for setting up required instance variables, and\r\n // attaching the event listener to the element.\r\n //\r\n function Formatter(el, opts) {\r\n // Cache this\r\n var self = this;\r\n // Make sure we have an element. Make accesible to instance\r\n self.el = el;\r\n if (!self.el) {\r\n throw new TypeError('Must provide an existing element');\r\n }\r\n // Merge opts with defaults\r\n self.opts = utils.extend({}, defaults, opts);\r\n // 1 pattern is special case\r\n if (typeof self.opts.pattern !== 'undefined') {\r\n self.opts.patterns = self._specFromSinglePattern(self.opts.pattern);\r\n delete self.opts.pattern;\r\n }\r\n // Make sure we have valid opts\r\n if (typeof self.opts.patterns === 'undefined') {\r\n throw new TypeError('Must provide a pattern or array of patterns');\r\n }\r\n self.patternMatcher = patternMatcher(self.opts.patterns);\r\n // Upate pattern with initial value\r\n self._updatePattern();\r\n // Init values\r\n self.hldrs = {};\r\n self.focus = 0;\r\n // Add Listeners\r\n utils.addListener(self.el, 'keydown', function (evt) {\r\n self._keyDown(evt);\r\n });\r\n utils.addListener(self.el, 'keypress', function (evt) {\r\n self._keyPress(evt);\r\n });\r\n utils.addListener(self.el, 'paste', function (evt) {\r\n self._paste(evt);\r\n });\r\n // Persistence\r\n if (self.opts.persistent) {\r\n // Format on start\r\n self._processKey('', false);\r\n self.el.blur();\r\n // Add Listeners\r\n utils.addListener(self.el, 'focus', function (evt) {\r\n self._focus(evt);\r\n });\r\n utils.addListener(self.el, 'click', function (evt) {\r\n self._focus(evt);\r\n });\r\n utils.addListener(self.el, 'touchstart', function (evt) {\r\n self._focus(evt);\r\n });\r\n }\r\n }\r\n //\r\n // @public\r\n // Add new char\r\n //\r\n Formatter.addInptType = function (chr, reg) {\r\n inptRegs[chr] = reg;\r\n };\r\n //\r\n // @public\r\n // Apply the given pattern to the current input without moving caret.\r\n //\r\n Formatter.prototype.resetPattern = function (str) {\r\n // Update opts to hold new pattern\r\n this.opts.patterns = str ? this._specFromSinglePattern(str) : this.opts.patterns;\r\n // Get current state\r\n this.sel = inptSel.get(this.el);\r\n this.val = this.el.value;\r\n // Init values\r\n this.delta = 0;\r\n // Remove all formatted chars from val\r\n this._removeChars();\r\n this.patternMatcher = patternMatcher(this.opts.patterns);\r\n // Update pattern\r\n var newPattern = this.patternMatcher.getPattern(this.val);\r\n this.mLength = newPattern.mLength;\r\n this.chars = newPattern.chars;\r\n this.inpts = newPattern.inpts;\r\n // Format on start\r\n this._processKey('', false, true);\r\n };\r\n //\r\n // @private\r\n // Determine correct format pattern based on input val\r\n //\r\n Formatter.prototype._updatePattern = function () {\r\n // Determine appropriate pattern\r\n var newPattern = this.patternMatcher.getPattern(this.val);\r\n // Only update the pattern if there is an appropriate pattern for the value.\r\n // Otherwise, leave the current pattern (and likely delete the latest character.)\r\n if (newPattern) {\r\n // Get info about the given pattern\r\n this.mLength = newPattern.mLength;\r\n this.chars = newPattern.chars;\r\n this.inpts = newPattern.inpts;\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on all keyDown strokes. All keys trigger\r\n // this handler. Only process delete keys.\r\n //\r\n Formatter.prototype._keyDown = function (evt) {\r\n // The first thing we need is the character code\r\n var k = evt.which || evt.keyCode;\r\n // If delete key\r\n if (k && utils.isDelKeyDown(evt.which, evt.keyCode)) {\r\n // Process the keyCode and prevent default\r\n this._processKey(null, k);\r\n return utils.preventDefault(evt);\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on all keyPress strokes. Only processes\r\n // character keys (as long as no modifier key is in use).\r\n //\r\n Formatter.prototype._keyPress = function (evt) {\r\n // The first thing we need is the character code\r\n var k, isSpecial;\r\n // Mozilla will trigger on special keys and assign the the value 0\r\n // We want to use that 0 rather than the keyCode it assigns.\r\n k = evt.which || evt.keyCode;\r\n isSpecial = utils.isSpecialKeyPress(evt.which, evt.keyCode);\r\n // Process the keyCode and prevent default\r\n if (!utils.isDelKeyPress(evt.which, evt.keyCode) && !isSpecial && !utils.isModifier(evt)) {\r\n this._processKey(String.fromCharCode(k), false);\r\n return utils.preventDefault(evt);\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on paste event.\r\n //\r\n Formatter.prototype._paste = function (evt) {\r\n // Process the clipboard paste and prevent default\r\n this._processKey(utils.getClip(evt), false);\r\n return utils.preventDefault(evt);\r\n };\r\n //\r\n // @private\r\n // Handle called on focus event.\r\n //\r\n Formatter.prototype._focus = function () {\r\n // Wrapped in timeout so that we can grab input selection\r\n var self = this;\r\n setTimeout(function () {\r\n // Grab selection\r\n var selection = inptSel.get(self.el);\r\n // Char check\r\n var isAfterStart = selection.end > self.focus, isFirstChar = selection.end === 0;\r\n // If clicked in front of start, refocus to start\r\n if (isAfterStart || isFirstChar) {\r\n inptSel.set(self.el, self.focus);\r\n }\r\n }, 0);\r\n };\r\n //\r\n // @private\r\n // Using the provided key information, alter el value.\r\n //\r\n Formatter.prototype._processKey = function (chars, delKey, ignoreCaret) {\r\n // Get current state\r\n this.sel = inptSel.get(this.el);\r\n this.val = this.el.value;\r\n // Init values\r\n this.delta = 0;\r\n // If chars were highlighted, we need to remove them\r\n if (this.sel.begin !== this.sel.end) {\r\n this.delta = -1 * Math.abs(this.sel.begin - this.sel.end);\r\n this.val = utils.removeChars(this.val, this.sel.begin, this.sel.end);\r\n } else if (delKey && delKey === 46) {\r\n this._delete();\r\n } else if (delKey && this.sel.begin - 1 >= 0) {\r\n // Always have a delta of at least -1 for the character being deleted.\r\n this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);\r\n this.delta -= 1;\r\n } else if (delKey) {\r\n return true;\r\n }\r\n // If the key is not a del key, it should convert to a str\r\n if (!delKey) {\r\n // Add char at position and increment delta\r\n this.val = utils.addChars(this.val, chars, this.sel.begin);\r\n this.delta += chars.length;\r\n }\r\n // Format el.value (also handles updating caret position)\r\n this._formatValue(ignoreCaret);\r\n };\r\n //\r\n // @private\r\n // Deletes the character in front of it\r\n //\r\n Formatter.prototype._delete = function () {\r\n // Adjust focus to make sure its not on a formatted char\r\n while (this.chars[this.sel.begin]) {\r\n this._nextPos();\r\n }\r\n // As long as we are not at the end\r\n if (this.sel.begin < this.val.length) {\r\n // We will simulate a delete by moving the caret to the next char\r\n // and then deleting\r\n this._nextPos();\r\n this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);\r\n this.delta = -1;\r\n }\r\n };\r\n //\r\n // @private\r\n // Quick helper method to move the caret to the next pos\r\n //\r\n Formatter.prototype._nextPos = function () {\r\n this.sel.end++;\r\n this.sel.begin++;\r\n };\r\n //\r\n // @private\r\n // Alter element value to display characters matching the provided\r\n // instance pattern. Also responsible for updating\r\n //\r\n Formatter.prototype._formatValue = function (ignoreCaret) {\r\n // Set caret pos\r\n this.newPos = this.sel.end + this.delta;\r\n // Remove all formatted chars from val\r\n this._removeChars();\r\n // Switch to first matching pattern based on val\r\n this._updatePattern();\r\n // Validate inputs\r\n this._validateInpts();\r\n // Add formatted characters\r\n this._addChars();\r\n // Set value and adhere to maxLength\r\n this.el.value = this.val.substr(0, this.mLength);\r\n // Set new caret position\r\n if (typeof ignoreCaret === 'undefined' || ignoreCaret === false) {\r\n inptSel.set(this.el, this.newPos);\r\n }\r\n };\r\n //\r\n // @private\r\n // Remove all formatted before and after a specified pos\r\n //\r\n Formatter.prototype._removeChars = function () {\r\n // Delta shouldn't include placeholders\r\n if (this.sel.end > this.focus) {\r\n this.delta += this.sel.end - this.focus;\r\n }\r\n // Account for shifts during removal\r\n var shift = 0;\r\n // Loop through all possible char positions\r\n for (var i = 0; i <= this.mLength; i++) {\r\n // Get transformed position\r\n var curChar = this.chars[i], curHldr = this.hldrs[i], pos = i + shift, val;\r\n // If after selection we need to account for delta\r\n pos = i >= this.sel.begin ? pos + this.delta : pos;\r\n val = this.val.charAt(pos);\r\n // Remove char and account for shift\r\n if (curChar && curChar === val || curHldr && curHldr === val) {\r\n this.val = utils.removeChars(this.val, pos, pos + 1);\r\n shift--;\r\n }\r\n }\r\n // All hldrs should be removed now\r\n this.hldrs = {};\r\n // Set focus to last character\r\n this.focus = this.val.length;\r\n };\r\n //\r\n // @private\r\n // Make sure all inpts are valid, else remove and update delta\r\n //\r\n Formatter.prototype._validateInpts = function () {\r\n // Loop over each char and validate\r\n for (var i = 0; i < this.val.length; i++) {\r\n // Get char inpt type\r\n var inptType = this.inpts[i];\r\n // Checks\r\n var isBadType = !inptRegs[inptType], isInvalid = !isBadType && !inptRegs[inptType].test(this.val.charAt(i)), inBounds = this.inpts[i];\r\n // Remove if incorrect and inbounds\r\n if ((isBadType || isInvalid) && inBounds) {\r\n this.val = utils.removeChars(this.val, i, i + 1);\r\n this.focusStart--;\r\n this.newPos--;\r\n this.delta--;\r\n i--;\r\n }\r\n }\r\n };\r\n //\r\n // @private\r\n // Loop over val and add formatted chars as necessary\r\n //\r\n Formatter.prototype._addChars = function () {\r\n if (this.opts.persistent) {\r\n // Loop over all possible characters\r\n for (var i = 0; i <= this.mLength; i++) {\r\n if (!this.val.charAt(i)) {\r\n // Add placeholder at pos\r\n this.val = utils.addChars(this.val, this.opts.placeholder, i);\r\n this.hldrs[i] = this.opts.placeholder;\r\n }\r\n this._addChar(i);\r\n }\r\n // Adjust focus to make sure its not on a formatted char\r\n while (this.chars[this.focus]) {\r\n this.focus++;\r\n }\r\n } else {\r\n // Avoid caching val.length, as they may change in _addChar.\r\n for (var j = 0; j <= this.val.length; j++) {\r\n // When moving backwards there are some race conditions where we\r\n // dont want to add the character\r\n if (this.delta <= 0 && j === this.focus) {\r\n return true;\r\n }\r\n // Place character in current position of the formatted string.\r\n this._addChar(j);\r\n }\r\n }\r\n };\r\n //\r\n // @private\r\n // Add formattted char at position\r\n //\r\n Formatter.prototype._addChar = function (i) {\r\n // If char exists at position\r\n var chr = this.chars[i];\r\n if (!chr) {\r\n return true;\r\n }\r\n // If chars are added in between the old pos and new pos\r\n // we need to increment pos and delta\r\n if (utils.isBetween(i, [\r\n this.sel.begin - 1,\r\n this.newPos + 1\r\n ])) {\r\n this.newPos++;\r\n this.delta++;\r\n }\r\n // If character added before focus, incr\r\n if (i <= this.focus) {\r\n this.focus++;\r\n }\r\n // Updateholder\r\n if (this.hldrs[i]) {\r\n delete this.hldrs[i];\r\n this.hldrs[i + 1] = this.opts.placeholder;\r\n }\r\n // Update value\r\n this.val = utils.addChars(this.val, chr, i);\r\n };\r\n //\r\n // @private\r\n // Create a patternSpec for passing into patternMatcher that\r\n // has exactly one catch all pattern.\r\n //\r\n Formatter.prototype._specFromSinglePattern = function (patternStr) {\r\n return [{ '*': patternStr }];\r\n };\r\n // Expose\r\n return Formatter;\r\n }(patternMatcher, inptSel, utils);\r\n\r\n\r\n\r\n// A really lightweight plugin wrapper around the constructor,\r\n// preventing against multiple instantiations\r\nvar pluginName = 'formatter';\r\n\r\n$.fn[pluginName] = function (options) {\r\n\r\n // Initiate plugin if options passed\r\n if (typeof options == 'object') {\r\n this.each(function () {\r\n if (!$.data(this, 'plugin_' + pluginName)) {\r\n $.data(this, 'plugin_' + pluginName,\r\n new formatter(this, options));\r\n }\r\n });\r\n }\r\n\r\n // Add resetPattern method to plugin\r\n this.resetPattern = function (str) {\r\n this.each(function () {\r\n var formatted = $.data(this, 'plugin_' + pluginName);\r\n // resetPattern for instance\r\n if (formatted) { formatted.resetPattern(str); }\r\n });\r\n // Chainable please\r\n return this;\r\n };\r\n\r\n // Chainable please\r\n return this;\r\n};\r\n\r\n$.fn[pluginName].addInptType = function (chr, regexp) {\r\n formatter.addInptType(chr, regexp);\r\n};\r\n\r\n\r\n}));","/*!\r\n * jQuery Templates Plugin 1.0.0pre\r\n * http://github.com/jquery/jquery-tmpl\r\n * Requires jQuery 1.4.2\r\n *\r\n * Copyright 2011, Software Freedom Conservancy, Inc.\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n * http://jquery.org/license\r\n */\r\n(function( jQuery, undefined ){\r\n\tvar oldManip = jQuery.fn.domManip, tmplItmAtt = \"_tmplitem\", htmlExpr = /^[^<]*(<[\\w\\W]+>)[^>]*$|\\{\\{\\! /,\r\n\t\tnewTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];\r\n\r\n\tfunction newTmplItem( options, parentItem, fn, data ) {\r\n\t\t// Returns a template item data structure for a new rendered instance of a template (a 'template item').\r\n\t\t// The content field is a hierarchical array of strings and nested items (to be\r\n\t\t// removed and replaced by nodes field of dom elements, once inserted in DOM).\r\n\t\tvar newItem = {\r\n\t\t\tdata: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),\r\n\t\t\t_wrap: parentItem ? parentItem._wrap : null,\r\n\t\t\ttmpl: null,\r\n\t\t\tparent: parentItem || null,\r\n\t\t\tnodes: [],\r\n\t\t\tcalls: tiCalls,\r\n\t\t\tnest: tiNest,\r\n\t\t\twrap: tiWrap,\r\n\t\t\thtml: tiHtml,\r\n\t\t\tupdate: tiUpdate\r\n\t\t};\r\n\t\tif ( options ) {\r\n\t\t\tjQuery.extend( newItem, options, { nodes: [], parent: parentItem });\r\n\t\t}\r\n\t\tif ( fn ) {\r\n\t\t\t// Build the hierarchical content to be used during insertion into DOM\r\n\t\t\tnewItem.tmpl = fn;\r\n\t\t\tnewItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );\r\n\t\t\tnewItem.key = ++itemKey;\r\n\t\t\t// Keep track of new template item, until it is stored as jQuery Data on DOM element\r\n\t\t\t(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;\r\n\t\t}\r\n\t\treturn newItem;\r\n\t}\r\n\r\n\t// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).\r\n\tjQuery.each({\r\n\t\tappendTo: \"append\",\r\n\t\tprependTo: \"prepend\",\r\n\t\tinsertBefore: \"before\",\r\n\t\tinsertAfter: \"after\",\r\n\t\treplaceAll: \"replaceWith\"\r\n\t}, function( name, original ) {\r\n\t\tjQuery.fn[ name ] = function( selector ) {\r\n\t\t\tvar ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,\r\n\t\t\t\tparent = this.length === 1 && this[0].parentNode;\r\n\r\n\t\t\tappendToTmplItems = newTmplItems || {};\r\n\t\t\tif ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\r\n\t\t\t\tinsert[ original ]( this[0] );\r\n\t\t\t\tret = this;\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i = 0, l = insert.length; i < l; i++ ) {\r\n\t\t\t\t\tcloneIndex = i;\r\n\t\t\t\t\telems = (i > 0 ? this.clone(true) : this).get();\r\n\t\t\t\t\tjQuery( insert[i] )[ original ]( elems );\r\n\t\t\t\t\tret = ret.concat( elems );\r\n\t\t\t\t}\r\n\t\t\t\tcloneIndex = 0;\r\n\t\t\t\tret = this.pushStack( ret, name, insert.selector );\r\n\t\t\t}\r\n\t\t\ttmplItems = appendToTmplItems;\r\n\t\t\tappendToTmplItems = null;\r\n\t\t\tjQuery.tmpl.complete( tmplItems );\r\n\t\t\treturn ret;\r\n\t\t};\r\n\t});\r\n\r\n\tjQuery.fn.extend({\r\n\t\t// Use first wrapped element as template markup.\r\n\t\t// Return wrapped set of template items, obtained by rendering template against data.\r\n\t\ttmpl: function( data, options, parentItem ) {\r\n\t\t\treturn jQuery.tmpl( this[0], data, options, parentItem );\r\n\t\t},\r\n\r\n\t\t// Find which rendered template item the first wrapped DOM element belongs to\r\n\t\ttmplItem: function() {\r\n\t\t\treturn jQuery.tmplItem( this[0] );\r\n\t\t},\r\n\r\n\t\t// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.\r\n\t\ttemplate: function( name ) {\r\n\t\t\treturn jQuery.template( name, this[0] );\r\n\t\t},\r\n\r\n\t\tdomManip: function( args, table, callback, options ) {\r\n\t\t\tif ( args[0] && jQuery.isArray( args[0] )) {\r\n\t\t\t\tvar dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;\r\n\t\t\t\twhile ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], \"tmplItem\" ))) {}\r\n\t\t\t\tif ( tmplItem && cloneIndex ) {\r\n\t\t\t\t\tdmArgs[2] = function( fragClone ) {\r\n\t\t\t\t\t\t// Handler called by oldManip when rendered template has been inserted into DOM.\r\n\t\t\t\t\t\tjQuery.tmpl.afterManip( this, fragClone, callback );\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\toldManip.apply( this, dmArgs );\r\n\t\t\t} else {\r\n\t\t\t\toldManip.apply( this, arguments );\r\n\t\t\t}\r\n\t\t\tcloneIndex = 0;\r\n\t\t\tif ( !appendToTmplItems ) {\r\n\t\t\t\tjQuery.tmpl.complete( newTmplItems );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t});\r\n\r\n\tjQuery.extend({\r\n\t\t// Return wrapped set of template items, obtained by rendering template against data.\r\n\t\ttmpl: function( tmpl, data, options, parentItem ) {\r\n\t\t\tvar ret, topLevel = !parentItem;\r\n\t\t\tif ( topLevel ) {\r\n\t\t\t\t// This is a top-level tmpl call (not from a nested template using {{tmpl}})\r\n\t\t\t\tparentItem = topTmplItem;\r\n\t\t\t\ttmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );\r\n\t\t\t\twrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level\r\n\t\t\t} else if ( !tmpl ) {\r\n\t\t\t\t// The template item is already associated with DOM - this is a refresh.\r\n\t\t\t\t// Re-evaluate rendered template for the parentItem\r\n\t\t\t\ttmpl = parentItem.tmpl;\r\n\t\t\t\tnewTmplItems[parentItem.key] = parentItem;\r\n\t\t\t\tparentItem.nodes = [];\r\n\t\t\t\tif ( parentItem.wrapped ) {\r\n\t\t\t\t\tupdateWrapped( parentItem, parentItem.wrapped );\r\n\t\t\t\t}\r\n\t\t\t\t// Rebuild, without creating a new template item\r\n\t\t\t\treturn jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));\r\n\t\t\t}\r\n\t\t\tif ( !tmpl ) {\r\n\t\t\t\treturn []; // Could throw...\r\n\t\t\t}\r\n\t\t\tif ( typeof data === \"function\" ) {\r\n\t\t\t\tdata = data.call( parentItem || {} );\r\n\t\t\t}\r\n\t\t\tif ( options && options.wrapped ) {\r\n\t\t\t\tupdateWrapped( options, options.wrapped );\r\n\t\t\t}\r\n\t\t\tret = jQuery.isArray( data ) ?\r\n\t\t\t\tjQuery.map( data, function( dataItem ) {\r\n\t\t\t\t\treturn dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;\r\n\t\t\t\t}) :\r\n\t\t\t\t[ newTmplItem( options, parentItem, tmpl, data ) ];\r\n\t\t\treturn topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;\r\n\t\t},\r\n\r\n\t\t// Return rendered template item for an element.\r\n\t\ttmplItem: function( elem ) {\r\n\t\t\tvar tmplItem;\r\n\t\t\tif ( elem instanceof jQuery ) {\r\n\t\t\t\telem = elem[0];\r\n\t\t\t}\r\n\t\t\twhile ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, \"tmplItem\" )) && (elem = elem.parentNode) ) {}\r\n\t\t\treturn tmplItem || topTmplItem;\r\n\t\t},\r\n\r\n\t\t// Set:\r\n\t\t// Use $.template( name, tmpl ) to cache a named template,\r\n\t\t// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.\r\n\t\t// Use $( \"selector\" ).template( name ) to provide access by name to a script block template declaration.\r\n\r\n\t\t// Get:\r\n\t\t// Use $.template( name ) to access a cached template.\r\n\t\t// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )\r\n\t\t// will return the compiled template, without adding a name reference.\r\n\t\t// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent\r\n\t\t// to $.template( null, templateString )\r\n\t\ttemplate: function( name, tmpl ) {\r\n\t\t\tif (tmpl) {\r\n\t\t\t\t// Compile template and associate with name\r\n\t\t\t\tif ( typeof tmpl === \"string\" ) {\r\n\t\t\t\t\t// This is an HTML string being passed directly in.\r\n\t\t\t\t\ttmpl = buildTmplFn( tmpl );\r\n\t\t\t\t} else if ( tmpl instanceof jQuery ) {\r\n\t\t\t\t\ttmpl = tmpl[0] || {};\r\n\t\t\t\t}\r\n\t\t\t\tif ( tmpl.nodeType ) {\r\n\t\t\t\t\t// If this is a template block, use cached copy, or generate tmpl function and cache.\r\n\t\t\t\t\ttmpl = jQuery.data( tmpl, \"tmpl\" ) || jQuery.data( tmpl, \"tmpl\", buildTmplFn( tmpl.innerHTML ));\r\n\t\t\t\t\t// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.\r\n\t\t\t\t\t// This means that foo=\"${x}\" will not work if the value of x includes white space: foo=\"${x}\" -> foo=value of x.\r\n\t\t\t\t\t// To correct this, include space in tag: foo=\"${ x }\" -> foo=\"value of x\"\r\n\t\t\t\t}\r\n\t\t\t\treturn typeof name === \"string\" ? (jQuery.template[name] = tmpl) : tmpl;\r\n\t\t\t}\r\n\t\t\t// Return named compiled template\r\n\t\t\treturn name ? (typeof name !== \"string\" ? jQuery.template( null, name ):\r\n\t\t\t\t(jQuery.template[name] ||\r\n\t\t\t\t\t// If not in map, and not containing at least on HTML tag, treat as a selector.\r\n\t\t\t\t\t// (If integrated with core, use quickExpr.exec)\r\n\t\t\t\t\tjQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;\r\n\t\t},\r\n\r\n\t\tencode: function( text ) {\r\n\t\t\t// Do HTML encoding replacing < > & and ' and \" by corresponding entities.\r\n\t\t\treturn (\"\" + text).split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\").split(\"'\").join(\"'\");\r\n\t\t}\r\n\t});\r\n\r\n\tjQuery.extend( jQuery.tmpl, {\r\n\t\ttag: {\r\n\t\t\t\"tmpl\": {\r\n\t\t\t\t_default: { $2: \"null\" },\r\n\t\t\t\topen: \"if($notnull_1){__=__.concat($item.nest($1,$2));}\"\r\n\t\t\t\t// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)\r\n\t\t\t\t// This means that {{tmpl foo}} treats foo as a template (which IS a function).\r\n\t\t\t\t// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.\r\n\t\t\t},\r\n\t\t\t\"wrap\": {\r\n\t\t\t\t_default: { $2: \"null\" },\r\n\t\t\t\topen: \"$item.calls(__,$1,$2);__=[];\",\r\n\t\t\t\tclose: \"call=$item.calls();__=call._.concat($item.wrap(call,__));\"\r\n\t\t\t},\r\n\t\t\t\"each\": {\r\n\t\t\t\t_default: { $2: \"$index, $value\" },\r\n\t\t\t\topen: \"if($notnull_1){$.each($1a,function($2){with(this){\",\r\n\t\t\t\tclose: \"}});}\"\r\n\t\t\t},\r\n\t\t\t\"if\": {\r\n\t\t\t\topen: \"if(($notnull_1) && $1a){\",\r\n\t\t\t\tclose: \"}\"\r\n\t\t\t},\r\n\t\t\t\"else\": {\r\n\t\t\t\t_default: { $1: \"true\" },\r\n\t\t\t\topen: \"}else if(($notnull_1) && $1a){\"\r\n\t\t\t},\r\n\t\t\t\"html\": {\r\n\t\t\t\t// Unecoded expression evaluation.\r\n\t\t\t\topen: \"if($notnull_1){__.push($1a);}\"\r\n\t\t\t},\r\n\t\t\t\"=\": {\r\n\t\t\t\t// Encoded expression evaluation. Abbreviated form is ${}.\r\n\t\t\t\t_default: { $1: \"$data\" },\r\n\t\t\t\topen: \"if($notnull_1){__.push($.encode($1a));}\"\r\n\t\t\t},\r\n\t\t\t\"!\": {\r\n\t\t\t\t// Comment tag. Skipped by parser\r\n\t\t\t\topen: \"\"\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events\r\n\t\tcomplete: function( items ) {\r\n\t\t\tnewTmplItems = {};\r\n\t\t},\r\n\r\n\t\t// Call this from code which overrides domManip, or equivalent\r\n\t\t// Manage cloning/storing template items etc.\r\n\t\tafterManip: function afterManip( elem, fragClone, callback ) {\r\n\t\t\t// Provides cloned fragment ready for fixup prior to and after insertion into DOM\r\n\t\t\tvar content = fragClone.nodeType === 11 ?\r\n\t\t\t\tjQuery.makeArray(fragClone.childNodes) :\r\n\t\t\t\tfragClone.nodeType === 1 ? [fragClone] : [];\r\n\r\n\t\t\t// Return fragment to original caller (e.g. append) for DOM insertion\r\n\t\t\tcallback.call( elem, fragClone );\r\n\r\n\t\t\t// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.\r\n\t\t\tstoreTmplItems( content );\r\n\t\t\tcloneIndex++;\r\n\t\t}\r\n\t});\r\n\r\n\t//========================== Private helper functions, used by code above ==========================\r\n\r\n\tfunction build( tmplItem, nested, content ) {\r\n\t\t// Convert hierarchical content into flat string array\r\n\t\t// and finally return array of fragments ready for DOM insertion\r\n\t\tvar frag, ret = content ? jQuery.map( content, function( item ) {\r\n\t\t\treturn (typeof item === \"string\") ?\r\n\t\t\t\t// Insert template item annotations, to be converted to jQuery.data( \"tmplItem\" ) when elems are inserted into DOM.\r\n\t\t\t\t(tmplItem.key ? item.replace( /(<\\w+)(?=[\\s>])(?![^>]*_tmplitem)([^>]*)/g, \"$1 \" + tmplItmAtt + \"=\\\"\" + tmplItem.key + \"\\\" $2\" ) : item) :\r\n\t\t\t\t// This is a child template item. Build nested template.\r\n\t\t\t\tbuild( item, tmplItem, item._ctnt );\r\n\t\t}) :\r\n\t\t// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.\r\n\t\ttmplItem;\r\n\t\tif ( nested ) {\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t// top-level template\r\n\t\tret = ret.join(\"\");\r\n\r\n\t\t// Support templates which have initial or final text nodes, or consist only of text\r\n\t\t// Also support HTML entities within the HTML markup.\r\n\t\tret.replace( /^\\s*([^<\\s][^<]*)?(<[\\w\\W]+>)([^>]*[^>\\s])?\\s*$/, function( all, before, middle, after) {\r\n\t\t\tfrag = jQuery( middle ).get();\r\n\r\n\t\t\tstoreTmplItems( frag );\r\n\t\t\tif ( before ) {\r\n\t\t\t\tfrag = unencode( before ).concat(frag);\r\n\t\t\t}\r\n\t\t\tif ( after ) {\r\n\t\t\t\tfrag = frag.concat(unencode( after ));\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn frag ? frag : unencode( ret );\r\n\t}\r\n\r\n\tfunction unencode( text ) {\r\n\t\t// Use createElement, since createTextNode will not render HTML entities correctly\r\n\t\tvar el = document.createElement( \"div\" );\r\n\t\tel.innerHTML = text;\r\n\t\treturn jQuery.makeArray(el.childNodes);\r\n\t}\r\n\r\n\t// Generate a reusable function that will serve to render a template against data\r\n\tfunction buildTmplFn( markup ) {\r\n\t\treturn new Function(\"jQuery\",\"$item\",\r\n\t\t\t// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).\r\n\t\t\t\"var $=jQuery,call,__=[],$data=$item.data;\" +\r\n\r\n\t\t\t// Introduce the data as local variables using with(){}\r\n\t\t\t\"with($data){__.push('\" +\r\n\r\n\t\t\t// Convert the template into pure JavaScript\r\n\t\t\tjQuery.trim(markup)\r\n\t\t\t\t.replace( /([\\\\'])/g, \"\\\\$1\" )\r\n\t\t\t\t.replace( /[\\r\\t\\n]/g, \" \" )\r\n\t\t\t\t.replace( /\\$\\{([^\\}]*)\\}/g, \"{{= $1}}\" )\r\n\t\t\t\t.replace( /\\{\\{(\\/?)(\\w+|.)(?:\\(((?:[^\\}]|\\}(?!\\}))*?)?\\))?(?:\\s+(.*?)?)?(\\(((?:[^\\}]|\\}(?!\\}))*?)\\))?\\s*\\}\\}/g,\r\n\t\t\t\tfunction( all, slash, type, fnargs, target, parens, args ) {\r\n\t\t\t\t\tvar tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;\r\n\t\t\t\t\tif ( !tag ) {\r\n\t\t\t\t\t\tthrow \"Unknown template tag: \" + type;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdef = tag._default || [];\r\n\t\t\t\t\tif ( parens && !/\\w$/.test(target)) {\r\n\t\t\t\t\t\ttarget += parens;\r\n\t\t\t\t\t\tparens = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( target ) {\r\n\t\t\t\t\t\ttarget = unescape( target );\r\n\t\t\t\t\t\targs = args ? (\",\" + unescape( args ) + \")\") : (parens ? \")\" : \"\");\r\n\t\t\t\t\t\t// Support for target being things like a.toLowerCase();\r\n\t\t\t\t\t\t// In that case don't call with template item as 'this' pointer. Just evaluate...\r\n\t\t\t\t\t\texpr = parens ? (target.indexOf(\".\") > -1 ? target + unescape( parens ) : (\"(\" + target + \").call($item\" + args)) : target;\r\n\t\t\t\t\t\texprAutoFnDetect = parens ? expr : \"(typeof(\" + target + \")==='function'?(\" + target + \").call($item):(\" + target + \"))\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texprAutoFnDetect = expr = def.$1 || \"null\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfnargs = unescape( fnargs );\r\n\t\t\t\t\treturn \"');\" +\r\n\t\t\t\t\t\ttag[ slash ? \"close\" : \"open\" ]\r\n\t\t\t\t\t\t\t.split( \"$notnull_1\" ).join( target ? \"typeof(\" + target + \")!=='undefined' && (\" + target + \")!=null\" : \"true\" )\r\n\t\t\t\t\t\t\t.split( \"$1a\" ).join( exprAutoFnDetect )\r\n\t\t\t\t\t\t\t.split( \"$1\" ).join( expr )\r\n\t\t\t\t\t\t\t.split( \"$2\" ).join( fnargs || def.$2 || \"\" ) +\r\n\t\t\t\t\t\t\"__.push('\";\r\n\t\t\t\t}) +\r\n\t\t\t\"');}return __;\"\r\n\t\t);\r\n\t}\r\n\tfunction updateWrapped( options, wrapped ) {\r\n\t\t// Build the wrapped content.\r\n\t\toptions._wrap = build( options, true,\r\n\t\t\t// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.\r\n\t\t\tjQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]\r\n\t\t).join(\"\");\r\n\t}\r\n\r\n\tfunction unescape( args ) {\r\n\t\treturn args ? args.replace( /\\\\'/g, \"'\").replace(/\\\\\\\\/g, \"\\\\\" ) : null;\r\n\t}\r\n\tfunction outerHtml( elem ) {\r\n\t\tvar div = document.createElement(\"div\");\r\n\t\tdiv.appendChild( elem.cloneNode(true) );\r\n\t\treturn div.innerHTML;\r\n\t}\r\n\r\n\t// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.\r\n\tfunction storeTmplItems( content ) {\r\n\t\tvar keySuffix = \"_\" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;\r\n\t\tfor ( i = 0, l = content.length; i < l; i++ ) {\r\n\t\t\tif ( (elem = content[i]).nodeType !== 1 ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\telems = elem.getElementsByTagName(\"*\");\r\n\t\t\tfor ( m = elems.length - 1; m >= 0; m-- ) {\r\n\t\t\t\tprocessItemKey( elems[m] );\r\n\t\t\t}\r\n\t\t\tprocessItemKey( elem );\r\n\t\t}\r\n\t\tfunction processItemKey( el ) {\r\n\t\t\tvar pntKey, pntNode = el, pntItem, tmplItem, key;\r\n\t\t\t// Ensure that each rendered template inserted into the DOM has its own template item,\r\n\t\t\tif ( (key = el.getAttribute( tmplItmAtt ))) {\r\n\t\t\t\twhile ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }\r\n\t\t\t\tif ( pntKey !== key ) {\r\n\t\t\t\t\t// The next ancestor with a _tmplitem expando is on a different key than this one.\r\n\t\t\t\t\t// So this is a top-level element within this template item\r\n\t\t\t\t\t// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.\r\n\t\t\t\t\tpntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;\r\n\t\t\t\t\tif ( !(tmplItem = newTmplItems[key]) ) {\r\n\t\t\t\t\t\t// The item is for wrapped content, and was copied from the temporary parent wrappedItem.\r\n\t\t\t\t\t\ttmplItem = wrappedItems[key];\r\n\t\t\t\t\t\ttmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );\r\n\t\t\t\t\t\ttmplItem.key = ++itemKey;\r\n\t\t\t\t\t\tnewTmplItems[itemKey] = tmplItem;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( cloneIndex ) {\r\n\t\t\t\t\t\tcloneTmplItem( key );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.removeAttribute( tmplItmAtt );\r\n\t\t\t} else if ( cloneIndex && (tmplItem = jQuery.data( el, \"tmplItem\" )) ) {\r\n\t\t\t\t// This was a rendered element, cloned during append or appendTo etc.\r\n\t\t\t\t// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.\r\n\t\t\t\tcloneTmplItem( tmplItem.key );\r\n\t\t\t\tnewTmplItems[tmplItem.key] = tmplItem;\r\n\t\t\t\tpntNode = jQuery.data( el.parentNode, \"tmplItem\" );\r\n\t\t\t\tpntNode = pntNode ? pntNode.key : 0;\r\n\t\t\t}\r\n\t\t\tif ( tmplItem ) {\r\n\t\t\t\tpntItem = tmplItem;\r\n\t\t\t\t// Find the template item of the parent element.\r\n\t\t\t\t// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)\r\n\t\t\t\twhile ( pntItem && pntItem.key != pntNode ) {\r\n\t\t\t\t\t// Add this element as a top-level node for this rendered template item, as well as for any\r\n\t\t\t\t\t// ancestor items between this item and the item of its parent element\r\n\t\t\t\t\tpntItem.nodes.push( el );\r\n\t\t\t\t\tpntItem = pntItem.parent;\r\n\t\t\t\t}\r\n\t\t\t\t// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...\r\n\t\t\t\tdelete tmplItem._ctnt;\r\n\t\t\t\tdelete tmplItem._wrap;\r\n\t\t\t\t// Store template item as jQuery data on the element\r\n\t\t\t\tjQuery.data( el, \"tmplItem\", tmplItem );\r\n\t\t\t}\r\n\t\t\tfunction cloneTmplItem( key ) {\r\n\t\t\t\tkey = key + keySuffix;\r\n\t\t\t\ttmplItem = newClonedItems[key] =\r\n\t\t\t\t\t(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//---- Helper functions for template item ----\r\n\r\n\tfunction tiCalls( content, tmpl, data, options ) {\r\n\t\tif ( !content ) {\r\n\t\t\treturn stack.pop();\r\n\t\t}\r\n\t\tstack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });\r\n\t}\r\n\r\n\tfunction tiNest( tmpl, data, options ) {\r\n\t\t// nested template, using {{tmpl}} tag\r\n\t\treturn jQuery.tmpl( jQuery.template( tmpl ), data, options, this );\r\n\t}\r\n\r\n\tfunction tiWrap( call, wrapped ) {\r\n\t\t// nested template, using {{wrap}} tag\r\n\t\tvar options = call.options || {};\r\n\t\toptions.wrapped = wrapped;\r\n\t\t// Apply the template, which may incorporate wrapped content,\r\n\t\treturn jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );\r\n\t}\r\n\r\n\tfunction tiHtml( filter, textOnly ) {\r\n\t\tvar wrapped = this._wrap;\r\n\t\treturn jQuery.map(\r\n\t\t\tjQuery( jQuery.isArray( wrapped ) ? wrapped.join(\"\") : wrapped ).filter( filter || \"*\" ),\r\n\t\t\tfunction(e) {\r\n\t\t\t\treturn textOnly ?\r\n\t\t\t\t\te.innerText || e.textContent :\r\n\t\t\t\t\te.outerHTML || outerHtml(e);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction tiUpdate() {\r\n\t\tvar coll = this.nodes;\r\n\t\tjQuery.tmpl( null, null, null, this).insertBefore( coll[0] );\r\n\t\tjQuery( coll ).remove();\r\n\t}\r\n})( jQuery );\r\n","/***********************************************************************************\r\n * 관리자 페이지 초기화\r\n ***********************************************************************************/\r\nAPP.init = function(){\r\n APP.initAjaxDefaultSetting();\r\n APP.initMenu();\r\n APP.initAx5();\r\n APP.initPlugins();\r\n APP.initCheckboxAll();\r\n};\r\n\r\n/***********************************************************************************\r\n * AJAX Error 및 BlockUI 처리\r\n ***********************************************************************************/\r\nAPP.initAjaxDefaultSetting = function() {\r\n $(document).ajaxError(function(event, request, settings){\r\n var message = '알수없는 오류가 발생하였습니다.';\r\n if( typeof request.responseJSON != 'undefined' && typeof request.responseJSON.message != 'undefined' ) {\r\n message = request.responseJSON.message;\r\n }\r\n else {\r\n if( request.status == 500 ) message = '서버 코드 오류가 발생하였습니다.\\n관리자에게 문의하세요';\r\n else if ( request.status == 401 ) message = '해당 명령을 실행할 권한이 없습니다.';\r\n }\r\n toastr.error(message, '오류 발생');\r\n }).ajaxStart(function(){\r\n $.blockUI({\r\n css: {width:'25px',top:'49%',left:'49%',border:'0px none',backgroundColor:'transparent',cursor:'wait'},\r\n message : '\"로딩중\"',\r\n baseZ : 10000,\r\n overlayCSS : {opacity : 0}\r\n });\r\n }).ajaxComplete(function(){\r\n $.unblockUI();\r\n });\r\n};\r\n\r\n/***********************************************************************************\r\n * 메뉴관련 초기화\r\n ***********************************************************************************/\r\nAPP.initMenu = function(){\r\n $('#nav .main-navigation li').each(function(){\r\n var $this = $(this);\r\n var menuCode = $this.data('active');\r\n\r\n if(menuCode == menuActive)\r\n {\r\n $(this).addClass('active');\r\n $(this).parents('li').addClass('active');\r\n }\r\n });\r\n};\r\n\r\nAPP.initPlugins = function() {\r\n /*\r\n $('[data-toggle=\"datepicker\"]').datepicker();\r\n\r\n $(\"body\").on(\"click\", '[data-toggle=\"datepicker\"]', function(){\r\n if (!$(this).hasClass(\"hasDatepicker\"))\r\n {\r\n $(this).datepicker();\r\n $(this).datepicker(\"show\");\r\n }\r\n });\r\n\r\n $('[data-toggle=\"formatter\"]').each(function(){\r\n if( $(this).data('pattern') )\r\n {\r\n $(this).formatter({\r\n pattern : $(this).data('pattern'),\r\n persistent: true\r\n });\r\n }\r\n });\r\n\r\n $.datetimepicker.setLocale('kr');\r\n $('[data-toggle=\"datetimepicker\"]').datetimepicker({\r\n format:'Y-m-d H:i'\r\n });\r\n */\r\n};\r\n\r\nAPP.initCheckboxAll = function(){\r\n $('[data-checkbox]').click(function(){\r\n var $check = $(this);\r\n var is_all = ($check.data('checkbox-all') && $check.data('checkbox-all').toString() == 'true');\r\n var name = $check.data('checkbox');\r\n var checked = $check.prop('checked');\r\n var $allCheck = is_all ? $check : $('[data-checkbox=\"'+name+'\"][data-checkbox-all=\"true\"]');\r\n\r\n if( is_all ) {\r\n $('[data-checkbox=\"'+name+'\"]').prop('checked', checked );\r\n }\r\n else {\r\n $allCheck.prop('checked', $('[data-checkbox=\"'+name+'\"]').not('[data-checkbox-all=\"true\"]').length == $('[data-checkbox=\"'+name+'\"]:checked').not('[data-checkbox-all=\"true\"]').length);\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * MODAL 관련\r\n *********************************************************************************************************************/\r\nAPP.initAx5 = function(){\r\n APP.MASK = new ax5.ui.mask({\r\n zIndex: 1000}\r\n );\r\n APP.MASK2 = new ax5.ui.mask({\r\n zIndex: 2000\r\n });\r\n APP.modal = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: ''\r\n });\r\n APP.modal2 = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: ''\r\n });\r\n APP.toast = new ax5.ui.toast({\r\n containerPosition: \"top-right\",\r\n closeIcon: ''\r\n });\r\n};\r\n\r\n\r\n$(function(){\r\n APP.init();\r\n});","/* ========================================================================\r\n * Bootstrap: dropdown.js v3.3.7\r\n * http://getbootstrap.com/javascript/#dropdowns\r\n * ========================================================================\r\n * Copyright 2011-2016 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n+function ($) {\r\n 'use strict';\r\n\r\n // DROPDOWN CLASS DEFINITION\r\n // =========================\r\n\r\n var backdrop = '.dropdown-backdrop'\r\n var toggle = '[data-toggle=\"dropdown\"]'\r\n var Dropdown = function (element) {\r\n $(element).on('click.bs.dropdown', this.toggle)\r\n }\r\n\r\n Dropdown.VERSION = '3.3.7'\r\n\r\n function getParent($this) {\r\n var selector = $this.attr('data-target')\r\n\r\n if (!selector) {\r\n selector = $this.attr('href')\r\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n }\r\n\r\n var $parent = selector && $(selector)\r\n\r\n return $parent && $parent.length ? $parent : $this.parent()\r\n }\r\n\r\n function clearMenus(e) {\r\n if (e && e.which === 3) return\r\n $(backdrop).remove()\r\n $(toggle).each(function () {\r\n var $this = $(this)\r\n var $parent = getParent($this)\r\n var relatedTarget = { relatedTarget: this }\r\n\r\n if (!$parent.hasClass('open')) return\r\n\r\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\r\n\r\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this.attr('aria-expanded', 'false')\r\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\r\n })\r\n }\r\n\r\n Dropdown.prototype.toggle = function (e) {\r\n var $this = $(this)\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n clearMenus()\r\n\r\n if (!isActive) {\r\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\r\n // if mobile we use a backdrop because click events don't delegate\r\n $(document.createElement('div'))\r\n .addClass('dropdown-backdrop')\r\n .insertAfter($(this))\r\n .on('click', clearMenus)\r\n }\r\n\r\n var relatedTarget = { relatedTarget: this }\r\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this\r\n .trigger('focus')\r\n .attr('aria-expanded', 'true')\r\n\r\n $parent\r\n .toggleClass('open')\r\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\r\n }\r\n\r\n return false\r\n }\r\n\r\n Dropdown.prototype.keydown = function (e) {\r\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\r\n\r\n var $this = $(this)\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\r\n if (e.which == 27) $parent.find(toggle).trigger('focus')\r\n return $this.trigger('click')\r\n }\r\n\r\n var desc = ' li:not(.disabled):visible a'\r\n var $items = $parent.find('.dropdown-menu' + desc)\r\n\r\n if (!$items.length) return\r\n\r\n var index = $items.index(e.target)\r\n\r\n if (e.which == 38 && index > 0) index-- // up\r\n if (e.which == 40 && index < $items.length - 1) index++ // down\r\n if (!~index) index = 0\r\n\r\n $items.eq(index).trigger('focus')\r\n }\r\n\r\n\r\n // DROPDOWN PLUGIN DEFINITION\r\n // ==========================\r\n\r\n function Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this)\r\n var data = $this.data('bs.dropdown')\r\n\r\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\r\n if (typeof option == 'string') data[option].call($this)\r\n })\r\n }\r\n\r\n var old = $.fn.dropdown\r\n\r\n $.fn.dropdown = Plugin\r\n $.fn.dropdown.Constructor = Dropdown\r\n\r\n\r\n // DROPDOWN NO CONFLICT\r\n // ====================\r\n\r\n $.fn.dropdown.noConflict = function () {\r\n $.fn.dropdown = old\r\n return this\r\n }\r\n\r\n\r\n // APPLY TO STANDARD DROPDOWN ELEMENTS\r\n // ===================================\r\n\r\n $(document)\r\n .on('click.bs.dropdown.data-api', clearMenus)\r\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\r\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\r\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\r\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\r\n\r\n}(jQuery);","APP.MODAL = function() {\r\n var modalCallback = {};\r\n\r\n var defaultCss = {\r\n width: 400,\r\n height: 400,\r\n position: {\r\n left: \"center\",\r\n top: \"middle\"\r\n }\r\n };\r\n\r\n var defaultOption = $.extend(true, {}, defaultCss, {\r\n iframeLoadingMsg: \"\",\r\n iframe: {\r\n method: \"get\",\r\n url: \"#\"\r\n },\r\n closeToEsc: true,\r\n onStateChanged: function onStateChanged() {\r\n // mask\r\n if (this.state === \"open\") {\r\n APP.MASK.open();\r\n } else if (this.state === \"close\") {\r\n APP.MASK.close();\r\n }\r\n },\r\n animateTime: 100,\r\n zIndex: 1001,\r\n absolute: true,\r\n fullScreen: false,\r\n header: {\r\n title: \"새로운 윈도우\",\r\n btns: {\r\n close: {\r\n label: '', onClick: function onClick() {\r\n APP.MODAL.callback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var open = function(modalConfig) {\r\n\r\n modalConfig = $.extend(true, {}, defaultOption, modalConfig);\r\n $(document.body).addClass(\"modalOpened\");\r\n\r\n this.modalCallback = modalConfig.callback;\r\n this.modalSendData = modalConfig.sendData;\r\n\r\n APP.modal.open(modalConfig);\r\n };\r\n\r\n var css = function css(modalCss) {\r\n modalCss = $.extend(true, {}, defaultCss, modalCss);\r\n APP.modal.css(modalCss);\r\n };\r\n var align = function align(modalAlign) {\r\n APP.modal.align(modalAlign);\r\n };\r\n var close = function close(data) {\r\n APP.modal.close();\r\n setTimeout(function () {\r\n $(document.body).removeClass(\"modalOpened\");\r\n }, 500);\r\n };\r\n var minimize = function minimize() {\r\n APP.modal.minimize();\r\n };\r\n var maximize = function maximize() {\r\n APP.modal.maximize();\r\n };\r\n var callback = function callback(data) {\r\n if (this.modalCallback) {\r\n this.modalCallback(data);\r\n }\r\n this.close(data);\r\n };\r\n var getData = function getData() {\r\n if (this.modalSendData) {\r\n return this.modalSendData();\r\n }\r\n };\r\n\r\n return {\r\n \"open\": open,\r\n \"css\": css,\r\n \"align\": align,\r\n \"close\": close,\r\n \"minimize\": minimize,\r\n \"maximize\": maximize,\r\n \"callback\": callback,\r\n \"modalCallback\": modalCallback,\r\n \"getData\": getData\r\n };\r\n}();\r\nAPP.MODAL2 = function() {\r\n var modalCallback = {};\r\n\r\n var defaultCss = {\r\n width: 400,\r\n height: 400,\r\n position: {\r\n left: \"center\",\r\n top: \"middle\"\r\n }\r\n };\r\n\r\n var defaultOption = $.extend(true, {}, defaultCss, {\r\n iframeLoadingMsg: \"\",\r\n iframe: {\r\n method: \"get\",\r\n url: \"#\"\r\n },\r\n closeToEsc: true,\r\n onStateChanged: function onStateChanged() {\r\n // mask\r\n if (this.state === \"open\") {\r\n APP.MASK2.open();\r\n } else if (this.state === \"close\") {\r\n APP.MASK2.close();\r\n }\r\n },\r\n animateTime: 100,\r\n zIndex: 2001,\r\n absolute: true,\r\n fullScreen: false,\r\n header: {\r\n title: \"새로운 윈도우\",\r\n btns: {\r\n close: {\r\n label: '', onClick: function onClick() {\r\n APP.MODAL2.callback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var open = function(modalConfig) {\r\n\r\n modalConfig = $.extend(true, {}, defaultOption, modalConfig);\r\n $(document.body).addClass(\"modalOpened\");\r\n\r\n this.modalCallback = modalConfig.callback;\r\n this.modalSendData = modalConfig.sendData;\r\n\r\n APP.modal2.open(modalConfig);\r\n };\r\n\r\n var css = function css(modalCss) {\r\n modalCss = $.extend(true, {}, defaultCss, modalCss);\r\n APP.modal2.css(modalCss);\r\n };\r\n var align = function align(modalAlign) {\r\n APP.modal2.align(modalAlign);\r\n };\r\n var close = function close(data) {\r\n APP.modal2.close();\r\n setTimeout(function () {\r\n $(document.body).removeClass(\"modalOpened\");\r\n }, 500);\r\n };\r\n var minimize = function minimize() {\r\n APP.modal2.minimize();\r\n };\r\n var maximize = function maximize() {\r\n APP.modal2.maximize();\r\n };\r\n var callback = function callback(data) {\r\n if (this.modalCallback) {\r\n this.modalCallback(data);\r\n }\r\n this.close(data);\r\n };\r\n var getData = function getData() {\r\n if (this.modalSendData) {\r\n return this.modalSendData();\r\n }\r\n };\r\n\r\n return {\r\n \"open\": open,\r\n \"css\": css,\r\n \"align\": align,\r\n \"close\": close,\r\n \"minimize\": minimize,\r\n \"maximize\": maximize,\r\n \"callback\": callback,\r\n \"modalCallback\": modalCallback,\r\n \"getData\": getData\r\n };\r\n}();","APP.TOAST = {\r\n confirm : function(msg) {\r\n APP.toast.push({\r\n theme : 'default',\r\n icon : '',\r\n msg : msg\r\n });\r\n },\r\n error : function(msg) {\r\n APP.toast.push({\r\n theme : 'danger',\r\n icon : '',\r\n msg : msg\r\n });\r\n },\r\n success: function(msg) {\r\n APP.toast.push({\r\n theme : 'success',\r\n icon : '',\r\n msg : msg\r\n })\r\n }\r\n};","var faq = {};\r\nfaq.form = function(fac_idx, faq_idx)\r\n{\r\n var faq_idx = (typeof faq_idx == 'string' || typeof faq_idx == 'number' ) ? faq_idx : null;\r\n var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;\r\n if(! fac_idx) {\r\n alert('FAQ 분류 정보가 없습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :650,\r\n header : {\r\n title : faq_idx ? 'FAQ 정보 수정' : 'FAQ 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/management/faq_form',\r\n param : {\r\n fac_idx : fac_idx,\r\n faq_idx : faq_idx\r\n }\r\n }\r\n });\r\n};\r\nfaq.remove = function(faq_idx) {\r\n if(typeof faq_idx == 'undefined' || ! faq_idx || faq_idx.trim() == '') {\r\n alert('잘못된 접근입니다.');\r\n }\r\n\r\n if(! confirm('해당 FAQ를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : '/ajax/faq/info',\r\n type : 'delete',\r\n async:false,\r\n cache:false,\r\n data:{faq_idx:faq_idx},\r\n success:function(res){\r\n alert('FAQ가 삭제되었습니다.');\r\n location.reload();\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * FAQ 분류\r\n * @type {{}}\r\n */\r\nfaq.category = {};\r\nfaq.category.form = function(fac_idx)\r\n{\r\n var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;\r\n APP.MODAL.open({\r\n width: $(window).width() > 600 ? 600 : $(window).width(),\r\n height :250,\r\n header : {\r\n title : fac_idx ? 'FAQ 분류 정보 수정' : 'FAQ 분류 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/management/faq_category_form',\r\n param : {\r\n fac_idx : fac_idx\r\n }\r\n }\r\n });\r\n};\r\nfaq.category.exist = function(fac_idx) {\r\n if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') return false;\r\n var result = false;\r\n $.ajax({\r\n url : '/ajax/faq/category',\r\n type:'get',\r\n async:false,\r\n cache:false,\r\n data:{fac_idx:fac_idx},\r\n success:function (res) {\r\n result = !(res && typeof res.fac_idx != 'undefined' && res.fac_idx);\r\n }\r\n });\r\n return result;\r\n};\r\nfaq.category.remove = function(fac_idx) {\r\n if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') {\r\n alert('잘못된 접근입니다.');\r\n }\r\n var count = 0;\r\n $.ajax({\r\n url : '/ajax/faq/lists',\r\n type : 'get',\r\n async:false,\r\n cache: false,\r\n data : {fac_idx:fac_idx},\r\n success:function(res){\r\n count = res.total_count;\r\n }\r\n });\r\n\r\n var msg = ( count > 0 ) ? '해당 FAQ 분류에 ' + count + '개의 FAQ 목록이 등록되어 있습니다.\\nFAQ 분류을 삭제할시 등록된 FAQ 목록도 같이 삭제됩니다.\\n\\n계속 하시겠습니까?' : 'FAQ 분류을 삭제하시겠습니까?';\r\n if(! confirm(msg)) return false;\r\n\r\n $.ajax({\r\n url : '/ajax/faq/category',\r\n type : 'delete',\r\n async:false,\r\n cache:false,\r\n data:{fac_idx:fac_idx},\r\n success:function(res){\r\n alert('FAQ 분류가 삭제되었습니다.');\r\n location.href= base_url + \"/admin/management/faq\";\r\n }\r\n });\r\n};\r\n\r\n\r\n"],"file":"admin.min.js"} \ No newline at end of file +{"version":3,"sources":["clipboard.js","jquery.cookie.js","global.js","member.js","board.js","ax5core.js","ax5mask.js","ax5modal.js","ax5toast.js","jquery-ui.js","jquery.datetimepicker.full.js","jquery.blockUI.js","jquery.formatter.js","jquery.tmpl.js","admin.js","components.js","modal.js","toast.js","faq.js"],"names":["root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_select","obj","_select2","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","length","descriptor","writable","key","Constructor","protoProps","staticProps","ClipboardAction","options","instance","TypeError","_classCallCheck","resolveOptions","initSelection","arguments","undefined","action","container","emitter","text","trigger","selectedText","selectFake","selectTarget","_this","isRTL","document","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","window","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","err","handleResult","emit","clearSelection","bind","focus","getSelection","removeAllRanges","set","_action","Error","nodeType","hasAttribute","_target","apply","is","delegate","type","callback","string","fn","node","destroy","listenNode","nodeList","Array","forEach","listenNodeList","selector","body","listenSelector","E","on","ctx","e","push","once","self","listener","off","_","data","slice","evtArr","len","evts","liveEvents","_clipboardAction","_tinyEmitter","_goodListener","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","listenClick","subClass","superClass","create","setPrototypeOf","_inherits","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","currentTarget","clipboardAction","getAttributeValue","querySelector","actions","support","queryCommandSupported","suffix","element","attribute","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","map","HTMLElement","toString","String","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","require","jQuery","$","pluses","encode","config","raw","encodeURIComponent","read","converter","indexOf","replace","decodeURIComponent","json","JSON","parse","parseCookieValue","isFunction","cookie","extend","defaults","expires","days","t","Date","setMilliseconds","getMilliseconds","stringify","stringifyCookieValue","toUTCString","path","domain","secure","join","result","cookies","split","parts","shift","removeCookie","console","log","APP","POPUP","REGEX","uniqueID","option","title","width","height","url","cw","screen","availWidth","ch","availHeight","sw","sh","ml","mt","win","open","outerWidth","outerHeight","alert","SET_LANG","lang","location","reload","click","idx","close","remove","not","preventDefault","sns_type","href","loc","img","attr","ClipboardJS","MEMBER","init","InitLoginForm","initCheckExist","InitRegisterForm","InitMemberModifyForm","submit","$form","ajax","serialize","base_url","success","res","LANG","member_join_success","message","elementLoginID","find","elementLoginPass","val","trim","member_login_userid_required","member_login_password_required","reurl","error","each","$btn","$target","member_join_user_id_required","wordCheck","denyWordCheck","member_join_no_valid_email_address","getInfo","member_join_user_id_already_exists","member_join_user_id_available","member_join_user_id_contains_deny_word","info","async","cache","POP_CHANGE_PHOTO","ready","BOARD","CATEGORY","EXTRA","COMMENT","count","bca_idx","postCount","modify","cmt_idx","reply","cmt_num","$form_post","blockUI","css","left","backgroundColor","cursor","baseZ","overlayCSS","opacity","DateFormatter","doc","reIsJson","reMs","reSnakeCase","reCamelCase","reDot","reInt","reNotNum","reMoneySplit","RegExp","reAmp","reEq","reClassNameSplit","ax5","U","guid","getGuid","_arguments","browser","ua","mobile","browserName","match","browserVersion","navigator","userAgent","toLowerCase","search","version","exec","isBrowser","wheelEnm","test","errorMsg","baseUrl","onerror","toArray","eventKeys","BACKSPACE","TAB","RETURN","ESC","LEFT","UP","RIGHT","DOWN","DELETE","HOME","END","PAGEUP","PAGEDOWN","INSERT","SPACE","weekNames","label","supportTouch","maxTouchPoints","msMaxTouchPoints","supportFileApi","FileReader","File","FileList","Blob","urlUtil","urls","param","referrer","pathname","hostname","port","hashdata","last","getError","className","errorCode","methodName","msg","_toString","O","_fn","isNothing","toJson","jsonString","util","isArray","isObject","jsonObjectBody","isString","isNumber","isUndefined","str","pos","substr","right","lastIndexOf","camelCase","all","letter","toUpperCase","snakeCase","number","cond","isMinus","returnValue","pair","Number","k","nUnit","myByte","Math","round","abs","floor","ceil","txtNumber","isNaN","arrNumber","localDate","yy","mm","dd","hh","mi","ss","utcD","UTC","getUTCHours","getTimezoneOffset","setUTCHours","date","nY","nH","nMM","nS","nDW","regY","regM","regD","regH","regMI","regS","regDW","fStr","nM","nD","aDateTime","aTimes","aTime","aDate","va","parseFloat","substring","_d","opts","mxdd","setTime","getTime","getFullYear","getMonth","getDate","daysOfMonth","parseInt","processor","firstDayOfMonth","lastDayOfMonth","getUTCFullYear","setDigit","getHours","getMinutes","getSeconds","getDay","$1","y","num","padder","radix","times","selectRange","textRange","selectAll","el","offset","arr","moveStart","collapse","moveEnd","start","end","setStart","setEnd","firstChild","rangeType","createTextRange","moveToElementText","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","now","trailingEdge","setTimeout","timeSinceLastInvoke","min","remainingWait","debounced","isInvoking","_len","_key","leadingEdge","max","cancel","clearTimeout","flush","escapeHtml","unescapeHtml","results","fnResult","reduce","tokenItem","reduceRight","filter","sum","defaultValue","tokenValue","avg","parseJson","force","Function","first","keys","item","deepCopy","r","getType","typeName","isWindow","isElement","isNodelist","setCookie","cn","cv","exdays","expire","setDate","escape","getCookie","cname","ca","charAt","unescape","merge","second","j","v","dday","diffnum","memoryDay","DyMilli","today","getDayTime","weeksOfMonth","myDate","year","month","findParentNode","tagName","toLocaleLowerCase","klasss","hasClass","a","cssNumber","found","unit","returns","vSplited","isDate","valueOf","isDateFormat","stopEvent","event","cancelBubble","stopPropagation","throttle","_string","format","concat","decode","_pos","color","_hexColor","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","rgb","rgba","hsl","hsla","hsv","hsva","hex3","hex6","hex4","hex8","convertToPercentage","convertTo255","convertToHex","bound01","isOnePointZero","processPercent","isPercentage","rgbToHsl","g","b","h","hslToRgb","hue2rgb","q","_color","_originalValue","convertObject","_format","_hex","getHexValue","lighten","amount","darken","getBrightness","isDark","isLight","getHsl","def","501","401","402","460","461","hwp","hdeb","de","del","_f","re_trim","propertyIsEnumerable","prop","fun","thisp","bound","nop","createStyleSheet","maxCount","resultSet","addRule","currentStyle","foo","removeRule","Infinity","sJSON","vContent","splice","documentMode","_splice","_slice","begin","size","cloned","upTo","con","method","empty","dummy","properties","methods","pop","webkitMatchMedia","mozMatchMedia","oMatchMedia","msMatchMedia","matchMedia","getElementsByTagName","styleMedia","media","script","id","insertBefore","getComputedStyle","matchMedium","styleSheet","cssText","textContent","addListener","localMatchMedia","hasMediaQueries","isListening","timeoutID","queries","handleChange","evt","il","mql","listeners","jl","index","removeListener","ui","setConfig","cfg","callInit","bindWindowResize","callBack","resize","bindWindowResize__","main","addClass","cls","classStore","wrapper","arg","instanceId","initInstance","global","mustache","objectToString","escapeRegExp","hasProperty","propName","regExpTest","nonSpaceRe","isWhitespace","re","testRegExp","entityMap","&","<",">","\"","'","/","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","tail","Context","view","parentContext",".","@each","@key","@value","parent","Writer","eos","scan","scanUntil","lookup","names","context","lookupHit","clearCache","template","tags","tokens","openingTagRe","closingTagRe","closingCurlyRe","sections","spaces","hasTag","nonSpace","stripSpace","compileTags","tagsToCompile","chr","token","openSection","scanner","valueLength","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","parseTemplate","render","partials","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","defaultWriter","to_html","send","UI","MASK","theme","animateTime","maskContent","status","onStateChanged","that","setBody","content","templateName","maskConfig","_cfg","maskId","$mask","tmpl","getBodyTmpl","append","_$target","align","zIndex","state","_delay","_close","removeClass","fadeOut","pullRequest","mask_instance","mask","defaultMask","columnKeys","tmplName","MODAL","ENM","mousedown","mousemove","mouseup","getMousePosition","mouseObj","changedTouches","clientX","clientY","minimizePosition","clickEventName","closeToEsc","disableDrag","disableResize","iframe","activeModal","watingModal","eventProcessor","onResize","move","modalId","header","fullScreen","styles","iframeLoadingMsg","absolute","hide","show","onkeyup","isButton","isFullScreen","mousePosition","moveModal","btnOnClick","originalEvent","resizeModal","srcElement","btns","dialogId","btnTarget","keyCode","alignProcessor","top-left","top-right","bottom-left","bottom-right","center-middle","modalZIndex","modalOffset","modalBox","scrollLeft","__dx","__dy","resizerBg","resizer","getResizerPosition","box","modalConfig","removeAttr","resizerType","resizerProcessor","minHeight","shiftKey","altKey","bottom","minWidth","cursorType","headerHeight","unbind","tryCount","_option","$iframe","iframeObject","idoc","contentDocument","contentWindow","children","innerHTML","CollectGarbage","minimized","minimize","originalHeight","restore","setModalConfig","_config","_fullScreen","modal_instance","modal","TOAST","toastSeq","toastSeqClear","icon","closeIcon","ok","displayTime","containerPosition","toastContainer","queue","getContent","toastId","toastBox","containerId","prepend","toastType","btn_target","dialogConfig","confirm","toast_instance","toast","toastDisplay","orig","widgetUuid","widgetSlice","cleanData","elems","events","elem","_data","triggerHandler","widget","base","existingConstructor","basePrototype","proxiedPrototype","namespace","fullName","Widget","expr","_createWidget","_proto","_childConstructors","_super","_superApply","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","bridge","input","inputIndex","inputLength","isPlainObject","isMethodCall","methodValue","jquery","pushStack","_init","defaultElement","classes","disabled","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","ownerDocument","defaultView","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","noop","_destroy","_removeClass","removeData","curOption","_setOptions","_setOption","_setOptionClasses","classKey","currentElements","_classes","add","_toggleClass","enable","disable","full","processClassString","checkOption","current","unique","extra","_untrackClassesElement","inArray","_addClass","toggleClass","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","eventName","_off","delay","_hoverable","mouseenter","mouseleave","_focusable","focusin","focusout","Event","isDefaultPrevented","defaultEffect","hasOptions","effect","effectName","duration","isEmptyObject","complete","effects","easing","next","cachedScrollbarWidth","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","offsets","parseCss","scrollbarWidth","w1","w2","div","innerDiv","offsetWidth","clientWidth","getScrollInfo","within","overflowX","isDocument","overflowY","hasOverflowX","scrollWidth","scrollHeight","getWithinInfo","withinElement","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","scrollInfo","collision","pageY","pageX","at","horizontalOffset","verticalOffset","collisionPosition","using","elemWidth","elemHeight","marginLeft","marginTop","collisionWidth","collisionHeight","myOffset","my","dir","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","offsetLeft","newOverTop","offsetTop","flipfit","createPseudo","dataName","COMMA","ENTER","ESCAPE","PAGE_DOWN","PAGE_UP","PERIOD","scrollParent","includeHidden","excludeStaticParent","overflowRegex","parents","eq","uniqueId","removeUniqueId","ie","mouseHandled","distance","_mouseInit","_mouseDown","stopImmediatePropagation","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","which","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","button","ctrlKey","metaKey","ignoreMissingWhich","_mouseDrag","_mouseStop","mouse","appendTo","axis","connectWith","containment","cursorAt","dropOnEmpty","forcePlaceholderSize","forceHelperSize","grid","handle","helper","items","placeholder","revert","scroll","scrollSensitivity","scrollSpeed","scope","tolerance","activate","beforeStop","change","deactivate","out","over","receive","sort","stop","update","_isOverAxis","x","reference","_isFloating","containerCache","refresh","_setHandleClassName","overrideHandle","currentItem","validHandle","reverting","_refreshItems","addBack","_removeCurrentsFromItems","noActivation","currentContainer","refreshPositions","_createHelper","_cacheHelperProportions","_cacheMargins","margins","_getParentOffset","relative","_getRelativeOffset","cssPosition","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","domPosition","prev","_createPlaceholder","_setContainment","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","overflowOffset","_uiHash","_preserveHelperProportions","containers","ddmanager","dropBehaviour","prepareOffsets","dragging","itemElement","intersection","scrolled","positionAbs","_convertPositionTo","lastPositionAbs","offsetHeight","_intersectsWithPointer","contains","direction","_intersectsWithSides","_rearrange","_contactContainers","drag","noPropagation","drop","cur","animation","offsetParent","animate","_clear","_storedCSS","_noFinalSort","after","_getItemsAsjQuery","connected","expression","ret","_intersectsWith","x1","x2","helperProportions","y1","y2","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","_getDragVerticalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","delta","_connectWith","inst","addItems","list","grep","targetData","_queries","queriesLength","fast","toleranceElement","custom","refreshContainers","_createTrPlaceholder","innerHeight","innerWidth","sourceTr","targetTr","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","clone","po","ce","co","mod","scrollIsRootNode","hardRefresh","nextSibling","counter","delayedTriggers","before","delayEvent","fromOutside","cancelHelperRemoval","_inst","sender","safeActiveElement","activeElement","icons","submenu","menus","role","blur","activeMenu","tabIndex","mousedown .ui-menu-item","click .ui-menu-item","active","isPropagationStopped","has","expand","timer","mouseenter .ui-menu-item","previousFilter","actualTarget","siblings","mouseleave .ui-menu","keepActiveItem","collapseAll","keydown","_closeOnDocumentClick","submenus","_keydown","character","skip","previousPage","nextPage","_move","previous","_activate","fromCharCode","filterTimer","_filterMenuItems","nextAll","newSubmenus","newItems","newWrappers","aria-hidden","aria-expanded","menu","submenuCaret","_isDivider","_itemRole","listbox","nested","focused","activeParent","_scrollIntoView","_startOpening","borderTop","paddingTop","elementHeight","itemHeight","_hasScroll","fromFocus","_open","currentMenu","startMenu","newItem","isFirstItem","prevAll","isLastItem","escapedCharacter","regex","autoFocus","minLength","source","response","requestIndex","pending","suppressKeyPress","suppressKeyPressRepeat","suppressInput","isTextarea","isInput","isMultiLine","_isContentEditable","valueMethod","isNewMenu","_keyEvent","_value","term","_searchTimeout","keypress","selectedItem","cancelBlur","searching","_change","_initSource","_appendTo","menufocus","one","liveRegion","menuselect","aria-live","aria-relevant","beforeunload","xhr","abort","_isEventTargetInWidget","menuElement","_closeOnClickOutside","array","request","autocomplete","dataType","equalValues","menuVisible","modifierKey","_search","cancelSearch","_response","proxy","__response","_normalize","_suggest","ul","_renderMenu","_resizeMenu","_renderItemData","_renderItem","keyEvent","editable","escapeRegex","matcher","messages","noResults","datepicker_instActive","Datepicker","_curInst","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","dateFormat","firstDay","showMonthAfterYear","yearSuffix","_defaults","showOn","showAnim","showOptions","defaultDate","appendText","buttonText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","changeMonth","changeYear","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","minDate","maxDate","beforeShowDay","beforeShow","onSelect","onChangeMonthYear","onClose","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","en","dpDiv","datepicker_bindHover","datepicker_handleMouseover","datepicker","_isDisabledDatepicker","inline","datepicker_extendRemove","markerClassName","maxRows","_widgetDatepicker","setDefaults","settings","_attachDatepicker","_newInst","_connectDatepicker","_inlineDatepicker","selectedDay","selectedMonth","selectedYear","drawMonth","drawYear","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","src","alt","html","_lastInput","_hideDatepicker","findMax","maxI","setMonth","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","browserWidth","browserHeight","scrollX","scrollY","_dialogInst","_dialogInput","clientHeight","_destroyDatepicker","_enableDatepicker","_getInst","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","sel","handled","_selectDay","_adjustDate","_clearDate","_gotoToday","chars","_possibleChars","charCode","lastVal","parseDate","_getFormatConfig","beforeShowSettings","isFixed","_findPos","display","_checkOffset","datepicker_getZindex","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","cols","activeCell","yearshtml","replaceWith","dpWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","filters","hidden","postProcess","_tidyDialog","unblockUI","_checkExternalClick","period","_adjustInstDate","currentDay","currentMonth","currentYear","_notifyChange","_selectMonthYear","selectedIndex","td","_selectDate","formatDate","noWeekends","day","checkDate","iFormat","dim","iValue","shortYearCutoffTemp","doy","literal","lookAhead","getNumber","isDoubled","digits","getName","shortNames","longNames","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","formatNumber","formatName","output","dates","_restrictMinMax","_determineDate","newDate","pattern","offsetString","offsetNumeric","setHours","setMinutes","setSeconds","noChange","clear","origMonth","origYear","selectDay","selectMonth","selectYear","maxDraw","gotoDate","controls","buttonPanel","dow","row","group","col","selectedDate","cornerClass","calender","thead","daysInMonth","leadDays","curRows","numRows","printDate","dRow","tbody","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","currentDate","_canAdjustMonth","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","secondary","inMinYear","inMaxYear","years","thisYear","determineYear","endYear","monthHtml","onChange","minMax","curYear","curMonth","yearSplit","minYear","maxYear","initialized","otherArgs","u","dateSettings","daysShort","months","monthsShort","meridiem","ordinal","1","2","3","separators","validParts","intParts","tzParts","tzClip","f","hour","sec","guessDate","setFullYear","parseFormat","D","w","N","z","Y","W","F","M","L","A","G","B","getUTCMinutes","getUTCSeconds","H","I","P","T","Z","datetimepickerFactory","default_options","i18n","ar","dayOfWeekShort","dayOfWeek","ro","bg","fa","ru","uk","nl","tr","fr","es","th","pl","pt","se","km","kr","it","da","no","ja","vi","sl","cs","hu","az","bs","en-GB","et","eu","fi","gl","hr","ko","lt","lv","mk","mn","pt-BR","sk","sq","sr-YU","sr","sv","zh-TW","zh","ug","he","hy","kg","rm","ka","rtl","formatTime","startDate","step","monthChangeSpinner","closeOnDateSelect","closeOnTimeSelect","closeOnWithoutClick","closeOnInputClick","openOnFocus","timepicker","weeks","defaultTime","minTime","maxTime","minDateTime","maxDateTime","allowTimes","opened","initTime","touchMovedThreshold","onSelectDate","onSelectTime","onChangeMonth","onGetWeekOfYear","onChangeYear","onChangeDateTime","onShow","onGenerate","withoutCopyright","inverseButton","hours12","dayOfWeekStart","parentID","timeHeightInTimePicker","timepickerScrollbar","todayButton","prevButton","nextButton","defaultSelect","scrollMonth","scrollTime","scrollInput","lazyInit","validateOnBlur","allowBlank","yearStart","yearEnd","monthStart","monthEnd","fixed","roundTime","weekends","highlightedDates","highlightedPeriods","allowDates","allowDateRe","disabledDates","disabledWeekDays","yearOffset","enterLikeTab","showApplyButton","dateHelper","defaultDateHelper","globalLocale","dateFormatterOptionsDefault","initDateFormatter","locale","dateFormatters","moment","formatter","isFormatStandard","isValid","toDate","formatMask","datetimepicker","setLocale","newLocale","setDateFormatter","dateFormatter","df","standardFormats","values","HighlightedDate","desc","getPropertyValue","countDaysInMonth","xdsoftScroller","percent","timebox","parentHeight","scrollbar","scroller","timeboxparent","pointerEventToXY","touch","touches","maximumOffset","startY","startTop","h1","touchStart","startTopScroll","calcOffset","arguments_callee","percentage","noTriggerScroll","deltaY","coord","opt","opt2","createDateTimePicker","destroyDateTimePicker","KEY0","KEY9","_KEY0","_KEY9","CTRLKEY","DEL","ARROWLEFT","ARROWUP","ARROWRIGHT","ARROWDOWN","F5","AKEY","CKEY","VKEY","ZKEY","YKEY","ctrlDown","lazyInitTimer","xchangeTimer","timerclick","current_time_index","setPos","_xdsoft_datetime","forEachAncestorOf","xdsoft_copyright","month_picker","calendar","applyButton","monthselect","yearselect","triggerAfterOpen","visible","currentTime","handleTouchMoved","touchPosition","touchStartPosition","xMovement","yMovement","sqrt","touchMoved","getCurrentValue","ct","strToDate","strToDateTime","strtotime","isValidDate","setMask","isValidValue","reg","setCaretPos","getElementById","pastedData","clipboardData","getData","selectionStart","valueBeforeCursor","valueAfterPaste","digit","selEnd","selectionEnd","hasSel","maskValueAtCurPos","posShorterThanMaskLength","posGreaterThanZero","selLength","defaultBlank","selReplacementRemainder","valueBeforeSel","insertChars","charsAfterSelection","insertChar","valueAfterNextChar","getValue","getCurrentTime","setOptions","_options","exDesc","splitData","hDate","keyDate","dateTest","dateEnd","setCurrentTime","toggle","splittedHours","splittedMinutes","dayOfWeekStartPrev","norecursion","dTime","requireValidDate","nextMonth","prevMonth","getWeekOfYear","datetime","week","onejan","sDateTime","timeOffset","tmpDate","sDate","sTime","$this","arguments_callee1","arguments_callee2","arguments_callee4","pheight","arguments_callee5","customDateSettings","line_time","description","maxDateTimeDay","table","newRow","minTimeMinutesOfDay","maxTimeMinutesOfDay","current_time","isALlowTimesInit","currentMinutesOfDay","classType","xdevent","deltaX","$input","dateInputOffset","dateInputElem","verticalPosition","datetimepickerElem","dateInputHasFixedAncestor","$dateInput","windowWidth","verticalAnchorEdge","datetimepickerCss","windowHeight","windowScrollTop","diff","ancestorNode","arguments_callee6","elementSelector","unmousewheel","initOnActionCallback","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","special","mousewheel","setup","onmousewheel","getLineHeight","getPageHeight","teardown","$elem","$parent","adjustOldDeltas","normalizeOffset","absDelta","orgEvent","offsetX","offsetY","fix","detail","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","getBoundingClientRect","boundingRect","deltaFactor","unshift","nullLowestDelta","dispatch","_fadeIn","fadeIn","noOp","msie","ie6","setExpr","setExpression","install","growlUI","timeout","$m","callBlock","centerY","showOverlay","onUnblock","growlCSS","mouseover","displayBlock","fadeTo","mouseout","block","fullOpts","$el","ignoreIfBlocked","unblock","zoom","draggable","textAlign","themedCSS","cursorReset","-webkit-border-radius","-moz-border-radius","border-radius","iframeSrc","forceIframe","centerX","allowBodyStretch","bindEvents","constrainTabKey","focusInput","focusableElements","onBlock","onOverlayClick","quirksmodeOffsetHack","blockMsgClass","pageBlock","pageBlockEls","lyr1","lyr2","lyr3","layers","$par","boxModel","sz","fixT","fixL","cb","cb1","cb2","center","to","els","reset","cssW","fwd","back","regexp","inpts","getMatches","pLength","mCount","iCount","processMatch","valLength","mLength","utils","destObj","addChars","removeChars","isBetween","bounds","attachEvent","getClip","getMatchingKey","isDelKeyDown","backspace","delete","isDelKeyPress","isSpecialKeyPress","tab","enter","home","leftarrow","uparrow","rightarrow","downarrow","isModifier","collection","patternMatcher","inptSel","persistent","repeat","inptRegs","9","*","Formatter","patterns","_specFromSinglePattern","_updatePattern","hldrs","_keyDown","_keyPress","_paste","_processKey","_focus","addInptType","resetPattern","_removeChars","newPattern","getPattern","isSpecial","isAfterStart","isFirstChar","delKey","ignoreCaret","_delete","_formatValue","_nextPos","newPos","_validateInpts","_addChars","curChar","curHldr","inptType","isBadType","isInvalid","inBounds","focusStart","_addChar","patternStr","parseMatcher","patternSpec","matcherStr","parsedPattern","regExpMatcher","matchedIndex","parentElement","inputRange","endRange","moveToBookmark","getBookmark","compareEndPoints","formatted","appendToTmplItems","oldManip","domManip","tmplItmAtt","htmlExpr","newTmplItems","wrappedItems","topTmplItem","itemKey","cloneIndex","stack","newTmplItem","parentItem","_wrap","nodes","calls","tiCalls","nest","tiNest","wrap","tiWrap","tiHtml","tiUpdate","_ctnt","build","tmplItem","frag","middle","storeTmplItems","unencode","makeArray","childNodes","buildTmplFn","markup","slash","fnargs","parens","exprAutoFnDetect","tag","_default","$2","updateWrapped","wrapped","keySuffix","newClonedItems","processItemKey","pntKey","pntItem","pntNode","cloneTmplItem","textOnly","innerText","outerHTML","cloneNode","coll","prependTo","insertAfter","replaceAll","original","tmplItems","insert","dmArgs","elemsLength","fragClone","afterManip","topLevel","dataItem","if","else","=","!","initAjaxDefaultSetting","initMenu","initAx5","initPlugins","initCheckboxAll","ajaxError","responseJSON","toastr","ajaxStart","ajaxComplete","menuActive","_updateDatepicker_original","afterShow","$check","is_all","checked","$allCheck","MASK2","modal2","backdrop","Dropdown","getParent","clearMenus","relatedTarget","VERSION","isActive","$items","old","dropdown","noConflict","defaultCss","defaultOption","modalCallback","modalSendData","sendData","modalCss","modalAlign","maximize","MODAL2","keyCheck","existCheck","brd_key","is_raw","form","bca_parent","post_count","bmt_idx","faq","fac_idx","faq_idx","category","exist","total_count","POP_INFO_ADMIN","mem_idx","POP_PASSWORD_ADMIN","POP_MODIFY_ADMIN","POP_POINT_ADMIN","POP_POINT_FORM_ADMIN","STATUS_CHANGE","current_status","change_status","common_msg_invalid_access","change_status_msg","member_status_y","member_status_n","member_status_d","member_status_h"],"mappings":"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","sourcesContent":["/*!\n * clipboard.js v2.0.1\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(6);\nvar delegate = __webpack_require__(5);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(4);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ })\n/******/ ]);\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 if (typeof define === 'function' && define.amd) {\r\n // AMD (Register as an anonymous module)\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n\r\n var pluses = /\\+/g;\r\n\r\n function encode(s) {\r\n return config.raw ? s : encodeURIComponent(s);\r\n }\r\n\r\n function decode(s) {\r\n return config.raw ? s : decodeURIComponent(s);\r\n }\r\n\r\n function stringifyCookieValue(value) {\r\n return encode(config.json ? JSON.stringify(value) : String(value));\r\n }\r\n\r\n function parseCookieValue(s) {\r\n if (s.indexOf('\"') === 0) {\r\n // This is a quoted cookie as according to RFC2068, unescape...\r\n s = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\r\n }\r\n\r\n try {\r\n // Replace server-side written pluses with spaces.\r\n // If we can't decode the cookie, ignore it, it's unusable.\r\n // If we can't parse the cookie, ignore it, it's unusable.\r\n s = decodeURIComponent(s.replace(pluses, ' '));\r\n return config.json ? JSON.parse(s) : s;\r\n } catch(e) {}\r\n }\r\n\r\n function read(s, converter) {\r\n var value = config.raw ? s : parseCookieValue(s);\r\n return $.isFunction(converter) ? converter(value) : value;\r\n }\r\n\r\n var config = $.cookie = function (key, value, options) {\r\n\r\n // Write\r\n\r\n if (arguments.length > 1 && !$.isFunction(value)) {\r\n options = $.extend({}, config.defaults, options);\r\n\r\n if (typeof options.expires === 'number') {\r\n var days = options.expires, t = options.expires = new Date();\r\n t.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n }\r\n\r\n return (document.cookie = [\r\n encode(key), '=', stringifyCookieValue(value),\r\n options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n options.path ? '; path=' + options.path : '',\r\n options.domain ? '; domain=' + options.domain : '',\r\n options.secure ? '; secure' : ''\r\n ].join(''));\r\n }\r\n\r\n // Read\r\n\r\n var result = key ? undefined : {},\r\n // To prevent the for loop in the first place assign an empty array\r\n // in case there are no cookies at all. Also prevents odd result when\r\n // calling $.cookie().\r\n cookies = document.cookie ? document.cookie.split('; ') : [],\r\n i = 0,\r\n l = cookies.length;\r\n\r\n for (; i < l; i++) {\r\n var parts = cookies[i].split('='),\r\n name = decode(parts.shift()),\r\n cookie = parts.join('=');\r\n\r\n if (key === name) {\r\n // If second argument (value) is a function it's a converter...\r\n result = read(cookie, value);\r\n break;\r\n }\r\n\r\n // Prevent storing a cookie that we couldn't decode.\r\n if (!key && (cookie = read(cookie)) !== undefined) {\r\n result[name] = cookie;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n config.defaults = {};\r\n\r\n $.removeCookie = function (key, options) {\r\n // Must not alter options, thus extending a fresh object...\r\n $.cookie(key, '', $.extend({}, options, { expires: -1 }));\r\n return !$.cookie(key);\r\n };\r\n\r\n}));","/***********************************************************************************\r\n * IE 8 이하 브라우져 console.log 에러처리\r\n ***********************************************************************************/\r\nif(!window.console || !window.console.log) {window.console = {log : function(){}};}\r\n\r\nvar APP = {};\r\nAPP.POPUP = null;\r\nAPP.REGEX = {};\r\nAPP.REGEX.uniqueID = /^[a-z][a-z0-9_]{2,19}$/g;\r\n(function($) {\r\n APP.POPUP = function(option) {\r\n var defaults={\r\n title : '_blank',\r\n width : 800,\r\n height : 600,\r\n url : ''\r\n };\r\n\r\n var options = $.extend({}, defaults, option);\r\n\r\n cw = screen.availWidth;\r\n ch = screen.availHeight;\r\n sw = options.width;\r\n sh = options.height;\r\n\r\n ml = (cw - sw) / 2;\r\n mt = (ch - sh) / 2;\r\n var option = 'width='+sw+',height='+sh+',top='+mt+',left='+ml+',scrollbars=yes,resizable=no';\r\n var win = window.open(options.url, options.title, option);\r\n if (win == null || typeof(win) == \"undefined\" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0))\r\n {\r\n alert(\"팝업 차단 기능이 설정되어있습니다\\n\\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오.\");\r\n return;\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * 언어셋 변경\r\n * @param lang\r\n * @constructor\r\n */\r\nAPP.SET_LANG = function(lang)\r\n{\r\n $.cookie('site_lang', lang, {expires:30, path:'/'});\r\n location.reload();\r\n};\r\n\r\n/**\r\n * 팝업창 닫기버튼 init\r\n */\r\n$('[data-toggle=\"btn-popup-close\"]').click(function(e){\r\n var type = $(this).data('type');\r\n var idx = $(this).data('idx');\r\n var cookie = $(this).data('cookie');\r\n\r\n if( type == 'Y')\r\n {\r\n window.close();\r\n }\r\n else if( type == 'N' )\r\n {\r\n $(\"#popup-\" + idx ).remove();\r\n }\r\n\r\n if( cookie == 1 )\r\n {\r\n $.cookie('popup_'+idx, 1, {expires:1, path:'/'});\r\n }\r\n});\r\n\r\n/**\r\n * SNS 공유\r\n */\r\n$(\"a[data-toggle='sns-share']\").not('[data-service=\"link\"]').click(function(e){\r\n e.preventDefault();\r\n\r\n var _this = $(this);\r\n var sns_type = _this.data('service');\r\n var href = _this.data('url');\r\n var title = _this.data('title');\r\n var loc = \"\";\r\n var img = $(\"meta[name='og:image']\").attr('content');\r\n\r\n if( ! sns_type || !href || !title) return;\r\n\r\n if( sns_type == 'facebook' ) {\r\n loc = '//www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'twitter' ) {\r\n loc = '//twitter.com/home?status='+encodeURIComponent(title)+' '+href;\r\n }\r\n else if ( sns_type == 'google' ) {\r\n loc = '//plus.google.com/share?url='+href;\r\n }\r\n else if ( sns_type == 'pinterest' ) {\r\n\r\n loc = '//www.pinterest.com/pin/create/button/?url='+href+'&media='+img+'&description='+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'kakaostory') {\r\n loc = 'https://story.kakao.com/share?url='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'band' ) {\r\n loc = 'http://www.band.us/plugin/share?body='+encodeURIComponent(title)+'%0A'+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'naver' ) {\r\n loc = \"http://share.naver.com/web/shareView.nhn?url=\"+encodeURIComponent(href)+\"&title=\"+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'line') {\r\n loc = \"http://line.me/R/msg/text/?\" + encodeURIComponent(title + \"\\n\" + href);\r\n }\r\n else {\r\n return false;\r\n }\r\n APP.POPUP({ url : loc});\r\n return false;\r\n});\r\n\r\n$(function(){\r\n var clipboard = new ClipboardJS('a[data-toggle=\"sns-share\"][data-service=\"link\"]', {\r\n text: function(trigger) {\r\n return trigger.getAttribute('data-url');\r\n }\r\n });\r\n clipboard.on('success', function(){\r\n alert('현재 URL이 복사되었습니다.');\r\n });\r\n});","/**********************************************************************************************************************\r\n * 회원정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_INFO_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/info/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 비밀번호 변경 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_PASSWORD_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '비밀번호 변경'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/password/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 정보수정 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_MODIFY_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보 수정'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/modify/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 포인트 관리'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 추가 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_FORM_ADMIN = function(mem_idx) {\r\n var mem_idx = typeof mem_idx != 'undefined' && mem_idx ? mem_idx : null;\r\n if(! mem_idx) {\r\n alert('잘못된 접근입니다.');\r\n return;\r\n }\r\n\r\n APP.MODAL2.callback = function(){\r\n location.reload();\r\n };\r\n APP.MODAL2.open({\r\n width: 410,\r\n height :200,\r\n header : {\r\n title : '회원 포인트 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point_form/' + mem_idx\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 STATUS 변경\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.STATUS_CHANGE = function(mem_idx, current_status, change_status) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx || typeof current_status == 'undefined' || ! current_status || typeof change_status == 'undefined' || ! change_status ) {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n var change_status_msg = '';\r\n if( change_status == 'Y' ) change_status_msg = LANG.member_status_y;\r\n else if (change_status == 'N') change_status_msg = LANG.member_status_n;\r\n else if (change_status == 'D') change_status_msg = LANG.member_status_d;\r\n else if (change_status == 'H') change_status_msg = LANG.member_status_h;\r\n else {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n\r\n if( ! confirm('해당 회원의 상태를 [' + change_status_msg + '] 상태로 변경합니까?') ) return;\r\n $.ajax({\r\n url : '/ajax/members/status',\r\n type : 'POST',\r\n async : false,\r\n cache : false,\r\n data : {\r\n mem_idx : mem_idx,\r\n current_status : current_status,\r\n change_status : change_status\r\n },\r\n success:function(){\r\n alert('지정한 회원의 상태를 [' + change_status_msg + '] 상태로 변경하였습니다.');\r\n location.reload();\r\n }\r\n })\r\n};\r\n\r\n$(function(){\r\n\r\n});\r\n","APP.BOARD.keyCheck = function(value) {\r\n if (value == '') return \"게시판 고유키를 입력하세요\";\r\n if (!APP.REGEX.uniqueID.test(value)) return \"게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다.\";\r\n if (APP.BOARD.existCheck(value)) return \"이미 존재하는 키 입니다.\";\r\n\r\n return true;\r\n};\r\n\r\nAPP.BOARD.existCheck = function(brd_key) {\r\n var info = null;\r\n $.ajax({\r\n url : base_url + '/ajax/board/info',\r\n type : 'get',\r\n async : false,\r\n cache : false,\r\n data : {\r\n brd_key : brd_key,\r\n is_raw : true\r\n },\r\n success:function(res){\r\n info = res;\r\n }\r\n });\r\n return info;\r\n};\r\n\r\nAPP.BOARD.CATEGORY.form = function(brd_key, bca_parent, bca_idx) {\r\n var brd_key = typeof brd_key != 'undefined' && brd_key ? brd_key : null;\r\n var bca_parent = typeof bca_parent != 'undefined' && bca_parent >= 0 ? bca_parent : null;\r\n var bca_idx = typeof bca_idx != 'undefined' && bca_idx ? bca_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n if(parseInt(bca_parent) < 0)\r\n {\r\n alert('부모 카테고리가 선택되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bca_idx ? '카테고리 정보 수정' : '카테고리 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/category_form',\r\n param : {\r\n brd_key : brd_key,\r\n bca_parent : bca_parent,\r\n bca_idx : bca_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.CATEGORY.remove = function(bca_idx) {\r\n \r\n if( APP.BOARD.CATEGORY.count(bca_idx) > 0 )\r\n {\r\n alert('해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요');\r\n return false;\r\n }\r\n\r\n var post_count = APP.BOARD.CATEGORY.postCount(bca_idx);\r\n if( post_count > 0 )\r\n {\r\n if(! confirm('해당 카테고리에 등록된 글이 '+post_count+'건이 있습니다. 삭제를 진행하시겠습니까?' )) {\r\n return false;\r\n }\r\n }\r\n\r\n if(! confirm('해당 카테고리를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/category\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n bca_idx : bca_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('카테고리 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('카테고리 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\nAPP.BOARD.EXTRA.form = function(brd_key, bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bmt_idx ? '입력필드 수정' : '입력필드 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/extra_form',\r\n param : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.EXTRA.remove = function(brd_key,bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! bmt_idx )\r\n {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n if(! confirm('해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/extra\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('입력필드 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('입력필드 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\n\r\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function () {\n 'use strict';\n\n // root of function\n\n var root = this,\n win = this,\n doc = win ? win.document : null,\n docElem = win ? win.document.documentElement : null,\n reIsJson = /^([\"'](\\\\.|[^\"\\\\\\n\\r])*?[\"']|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$/,\n reMs = /^-ms-/,\n reSnakeCase = /[\\-_]([\\da-z])/gi,\n reCamelCase = /([A-Z])/g,\n reDot = /\\./,\n reInt = /[-|+]?[\\D]/gi,\n reNotNum = /\\D/gi,\n reMoneySplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n reAmp = /&/g,\n reEq = /=/,\n reClassNameSplit = /[ ]+/g,\n\n\n /** @namespace {Object} ax5 */\n ax5 = {},\n info = void 0,\n U = void 0,\n dom = void 0;\n\n /**\n * guid\n * @member {Number} ax5.guid\n */\n ax5.guid = 1;\n /**\n * ax5.guid를 구하고 증가시킵니다.\n * @method ax5.getGuid\n * @returns {Number} guid\n */\n ax5.getGuid = function () {\n return ax5.guid++;\n };\n\n /**\n * 상수모음\n * @namespace ax5.info\n */\n ax5.info = info = function () {\n var _arguments = arguments;\n\n /**\n * ax5 version\n * @member {String} ax5.info.version\n */\n var version = \"1.4.126\";\n\n /**\n * ax5 library path\n * @member {String} ax5.info.baseUrl\n */\n var baseUrl = \"\";\n\n /**\n * ax5 에러 출력메세지 사용자 재 정의\n * @member {Object} ax5.info.onerror\n * @examples\n * ```\n * ax5.info.onerror = function(){\n * console.log(arguments);\n * }\n * ```\n */\n var onerror = function onerror() {\n console.error(U.toArray(_arguments).join(\":\"));\n };\n\n /**\n * event keyCodes\n * @member {Object} ax5.info.eventKeys\n * @example\n * ```\n * {\n * \tBACKSPACE: 8, TAB: 9,\n * \tRETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n * \tHOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n * }\n * ```\n */\n var eventKeys = {\n BACKSPACE: 8, TAB: 9,\n RETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n HOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n };\n\n /**\n * week names\n * @member {Object[]} weekNames\n * @member {string} weekNames[].label\n *\n * @example\n * ```\n * [\n * {label: \"SUN\"},{label: \"MON\"},{label: \"TUE\"},{label: \"WED\"},{label: \"THU\"},{label: \"FRI\"},{label: \"SAT\"}\n * ]\n * console.log( weekNames[0] );\n * console.log( ax5.info.weekNames[(new Date()).getDay()].label )\n * ```\n */\n var weekNames = [{ label: \"SUN\" }, { label: \"MON\" }, { label: \"TUE\" }, { label: \"WED\" }, { label: \"THU\" }, { label: \"FRI\" }, { label: \"SAT\" }];\n\n /**\n * 사용자 브라우저 식별용 오브젝트\n * @member {Object} ax5.info.browser\n * @example\n * ```\n * console.log( ax5.info.browser );\n * //Object {name: \"chrome\", version: \"39.0.2171.71\", mobile: false}\n * ```\n */\n var browser = function (ua, mobile, browserName, match, browser, browserVersion) {\n if (!win || !win.navigator) return {};\n\n ua = navigator.userAgent.toLowerCase(), mobile = ua.search(/mobile/g) != -1, browserName, match, browser, browserVersion;\n\n if (ua.search(/iphone/g) != -1) {\n return { name: \"iphone\", version: 0, mobile: true };\n } else if (ua.search(/ipad/g) != -1) {\n return { name: \"ipad\", version: 0, mobile: true };\n } else if (ua.search(/android/g) != -1) {\n match = /(android)[ \\/]([\\w.]+)/.exec(ua) || [];\n browserVersion = match[2] || \"0\";\n return { name: \"android\", version: browserVersion, mobile: mobile };\n } else {\n browserName = \"\";\n match = /(opr)[ \\/]([\\w.]+)/.exec(ua) || /(chrome)[ \\/]([\\w.]+)/.exec(ua) || /(webkit)[ \\/]([\\w.]+)/.exec(ua) || /(msie) ([\\w.]+)/.exec(ua) || ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) || [];\n browser = match[1] || \"\";\n browserVersion = match[2] || \"0\";\n\n if (browser == \"msie\") browser = \"ie\";\n return {\n name: browser,\n version: browserVersion,\n mobile: mobile\n };\n }\n ua = null, mobile = null, browserName = null, match = null, browser = null, browserVersion = null;\n }();\n\n /**\n * 브라우저 여부\n * @member {Boolean} ax5.info.isBrowser\n */\n var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && win.document);\n\n /**\n * 브라우저에 따른 마우스 휠 이벤트이름\n * @member {Object} ax5.info.wheelEnm\n */\n var wheelEnm = win && /Firefox/i.test(navigator.userAgent) ? \"DOMMouseScroll\" : \"mousewheel\";\n\n /**\n * 첫번째 자리수 동사 - (필요한것이 없을때 : 4, 실행오류 : 5)\n * 두번째 자리수 목적어 - 문자열 0, 숫자 1, 배열 2, 오브젝트 3, 함수 4, DOM 5, 파일 6, 기타 7\n * 세번째 자리수 옵션\n * @member {Object} ax5.info.errorMsg\n */\n var errorMsg = {};\n\n /**\n * 현재 페이지의 Url 정보를 리턴합니다.\n * @method ax5.info.urlUtil\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.util.toJson( ax5.info.urlUtil() ) );\n * {\n *\t\"baseUrl\": \"http://ax5:2018\",\n *\t\"href\": \"http://ax5:2018/samples/index.html?a=1&b=1#abc\",\n *\t\"param\": \"a=1&b=1\",\n *\t\"referrer\": \"\",\n *\t\"pathname\": \"/samples/index.html\",\n *\t\"hostname\": \"ax5\",\n *\t\"port\": \"2018\",\n *\t\"url\": \"http://ax5:2018/samples/index.html\",\n *\t\"hashdata\": \"abc\"\n * }\n * ```\n */\n function urlUtil(url, urls) {\n url = {\n href: win.location.href,\n param: win.location.search,\n referrer: doc.referrer,\n pathname: win.location.pathname,\n hostname: win.location.hostname,\n port: win.location.port\n }, urls = url.href.split(/[\\?#]/);\n url.param = url.param.replace(\"?\", \"\");\n url.url = urls[0];\n if (url.href.search(\"#\") > -1) {\n url.hashdata = U.last(urls);\n }\n urls = null;\n url.baseUrl = U.left(url.href, \"?\").replace(url.pathname, \"\");\n return url;\n }\n\n /**\n * ax5-error-msg.js 에 정의된 ax5 error를 반환합니다.\n * @method ax5.info.getError\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.info.getError(\"single-uploader\", \"460\", \"upload\") );\n *\n * if(!this.selectedFile){\n * if (cfg.onEvent) {\n * \tvar that = {\n * \t\taction: \"error\",\n * \t\terror: ax5.info.getError(\"single-uploader\", \"460\", \"upload\")\n * \t};\n * \tcfg.onEvent.call(that, that);\n * }\n * return this;\n * }\n * ```\n */\n function getError(className, errorCode, methodName) {\n if (info.errorMsg && info.errorMsg[className]) {\n return {\n className: className,\n errorCode: errorCode,\n methodName: methodName,\n msg: info.errorMsg[className][errorCode]\n };\n } else {\n return { className: className, errorCode: errorCode, methodName: methodName };\n }\n }\n\n /**\n * 브라우져의 터치 기능 유무를 확인합니다.\n * @method ax5.info.supportTouch\n * @returns {boolean}\n * @example\n * ```\n * var chkFlag = ax5.info.supportTouch;\n */\n var supportTouch = win ? 'ontouchstart' in win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 : false;\n\n var supportFileApi = win ? win.FileReader && win.File && win.FileList && win.Blob : false;\n\n return {\n errorMsg: errorMsg,\n version: version,\n baseUrl: baseUrl,\n onerror: onerror,\n eventKeys: eventKeys,\n weekNames: weekNames,\n browser: browser,\n isBrowser: isBrowser,\n supportTouch: supportTouch,\n supportFileApi: supportFileApi,\n wheelEnm: wheelEnm,\n urlUtil: urlUtil,\n getError: getError\n };\n }();\n\n /**\n * Refer to this by {@link ax5}.\n * @namespace ax5.util\n */\n ax5['util'] = U = function () {\n var _toString = Object.prototype.toString;\n\n /**\n * Object나 Array의 아이템으로 사용자 함수를 호출합니다.\n * @method ax5.util.each\n * @param {Object|Array} O\n * @param {Function} _fn\n * @example\n * ```js\n * var axf = ax5.util;\n * axf.each([0,1,2], function(){\n * \t// with this\n * });\n * axf.each({a:1, b:2}, function(){\n * \t// with this\n * });\n * ```\n */\n function each(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n isObj = l === undefined || typeof O === \"function\";\n if (isObj) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") if (_fn.call(O[key], key, O[key]) === false) break;\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") if (_fn.call(O[i], i, O[i++]) === false) break;\n }\n }\n return O;\n }\n\n // In addition to using the http://underscorejs.org : map, reduce, reduceRight, find\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값으로 이루어진 새로운 배열을 만듭니다.\n * @method ax5.util.map\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4];\n * var myObject = {a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n *\n * var _arr = ax5.util.map( myArray, function(index, I){\n * return index+1;\n * });\n * console.log(_arr);\n * // [1, 2, 3, 4, 5]\n *\n * var _arr = ax5.util.map( myObject, function(k, v){\n * return v * 2;\n * });\n * console.log(_arr);\n * // [2, 4, NaN, NaN]\n * ```\n */\n function map(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n results = [],\n fnResult = void 0;\n if (isObject(O)) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[key], key, O[key])) === false) break;else results.push(fnResult);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[i], i, O[i++])) === false) break;else results.push(fnResult);\n }\n }\n }\n return results;\n }\n\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값이 참인 아이템의 위치나 키값을 반환합니다.\n * @method ax5.util.search\n * @param {Object|Array} O\n * @param {Function|String|Number} _fn - 함수 또는 값\n * @returns {Number|String}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4,5,6];\n * var myObject = {a:\"123\",\"b\":\"123\",c:123};\n *\n * ax5.util.search(myArray, function(){\n * return this > 3;\n * });\n * // 4\n * ax5.util.search(myObject, function(k, v){\n * return v === 123;\n * });\n * // \"c\"\n * ax5.util.search([1,2,3,4], 3);\n * // 2\n * ax5.util.search([1,2], 4);\n * // -1\n * ax5.util.search([\"name\",\"value\"], \"value\");\n * // 1\n * ax5.util.search([\"name\",\"value\"], \"values\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value2\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value\");\n * // \"k2\"\n * ```\n */\n function search(O, _fn) {\n if (isNothing(O)) return -1;\n if (isObject(O)) {\n for (var key in O) {\n if (typeof O[key] != \"undefined\" && isFunction(_fn) && _fn.call(O[key], key, O[key])) {\n return key;\n break;\n } else if (O[key] == _fn) {\n return key;\n break;\n }\n }\n } else {\n for (var i = 0, l = O.length; i < l; i++) {\n if (typeof O[i] != \"undefined\" && isFunction(_fn) && _fn.call(O[i], i, O[i])) {\n return i;\n break;\n } else if (O[i] == _fn) {\n return i;\n break;\n }\n }\n }\n return -1;\n }\n\n /**\n * @method ax5.util.sum\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.sum(arr, function () {\n * if(this.name == \"122\") {\n * return this.value;\n * }\n * });\n * console.log(rs); // 19\n *\n * console.log(ax5.util.sum(arr, 10, function () {\n * return this.value;\n * }));\n * // 40\n * ```\n */\n function sum(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * @method ax5.util.avg\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.avg(arr, function () {\n * return this.value;\n * });\n *\n * console.log(rs); // 10\n * ```\n */\n function avg(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue / l;\n } else if (isObject(O)) {\n l = 0;\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;++l;\n }\n }\n return defaultValue / l;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * 배열의 왼쪽에서 오른쪽으로 연산을 진행하는데 수행한 결과가 왼쪽 값으로 반영되어 최종 왼쪽 값을 반환합니다.\n * @method ax5.util.reduce\n * @param {Array|Object} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduce( aarray, function(p, n){\n * return p * n;\n * });\n * console.log(result, aarray);\n * // 120 [5, 4, 3, 2, 1]\n *\n * ax5.util.reduce({a:1, b:2}, function(p, n){\n * return parseInt(p|0) + parseInt(n);\n * });\n * // 3\n * ```\n */\n function reduce(O, _fn) {\n var i, l, tokenItem;\n if (isArray(O)) {\n i = 0, l = O.length, tokenItem = O[i];\n for (; i < l - 1;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[++i])) === false) break;\n }\n }\n return tokenItem;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[i])) === false) break;\n }\n }\n return tokenItem;\n } else {\n console.error(\"argument error : ax5.util.reduce - use Array or Object\");\n return null;\n }\n }\n\n /**\n * 배열의 오른쪽에서 왼쪽으로 연산을 진행하는데 수행한 결과가 오른쪽 값으로 반영되어 최종 오른쪽 값을 반환합니다.\n * @method ax5.util.reduceRight\n * @param {Array} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduceRight( aarray, function(p, n){\n * console.log( n );\n * return p * n;\n * });\n * console.log(result, aarray);\n * 120 [5, 4, 3, 2, 1]\n * ```\n */\n function reduceRight(O, _fn) {\n var i = O.length - 1,\n tokenItem = O[i];\n for (; i > 0;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[--i])) === false) break;\n }\n }\n return tokenItem;\n }\n\n /**\n * 배열또는 오브젝트의 각 아이템을 인자로 하는 사용자 함수의 결과가 참인 아이템들의 배열을 반환합니다.\n * @method ax5.util.filter\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.filter( aarray, function(){\n * return this % 2;\n * });\n * console.log(result);\n * // [5, 3, 1]\n *\n * var filObject = {a:1, s:\"string\", oa:{pickup:true, name:\"AXISJ\"}, os:{pickup:true, name:\"AX5\"}};\n * result = ax5.util.filter( filObject, function(){\n * \treturn this.pickup;\n * });\n * console.log( ax5.util.toJson(result) );\n * // [{\"pickup\": , \"name\": \"AXISJ\"}, {\"pickup\": , \"name\": \"AX5\"}]\n * ```\n */\n function filter(O, _fn) {\n if (isNothing(O)) return [];\n var k,\n i = 0,\n l = O.length,\n results = [],\n fnResult;\n if (isObject(O)) {\n for (k in O) {\n if (typeof O[k] != \"undefined\") {\n if (fnResult = _fn.call(O[k], k, O[k])) results.push(O[k]);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n if (fnResult = _fn.call(O[i], i, O[i])) results.push(O[i]);\n i++;\n }\n }\n }\n return results;\n }\n\n /**\n * Object를 JSONString 으로 반환합니다.\n * @method ax5.util.toJson\n * @param {Object|Array} O\n * @returns {String} JSON\n * @example\n * ```js\n * var ax = ax5.util;\n * var myObject = {\n * a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n * console.log( ax.toJson(myObject) );\n * ```\n */\n function toJson(O) {\n var jsonString = \"\";\n if (ax5.util.isArray(O)) {\n var i = 0,\n l = O.length;\n jsonString += \"[\";\n for (; i < l; i++) {\n if (i > 0) jsonString += \",\";\n jsonString += toJson(O[i]);\n }\n jsonString += \"]\";\n } else if (ax5.util.isObject(O)) {\n jsonString += \"{\";\n var jsonObjectBody = [];\n each(O, function (key, value) {\n jsonObjectBody.push('\"' + key + '\": ' + toJson(value));\n });\n jsonString += jsonObjectBody.join(\", \");\n jsonString += \"}\";\n } else if (ax5.util.isString(O)) {\n jsonString = '\"' + O + '\"';\n } else if (ax5.util.isNumber(O)) {\n jsonString = O;\n } else if (ax5.util.isUndefined(O)) {\n jsonString = \"undefined\";\n } else if (ax5.util.isFunction(O)) {\n jsonString = '\"{Function}\"';\n } else {\n jsonString = O;\n }\n return jsonString;\n }\n\n /**\n * 관용의 JSON Parser\n * @method ax5.util.parseJson\n * @param {String} JSONString\n * @param {Boolean} [force] - 강제 적용 여부 (json 문자열 검사를 무시하고 오브젝트 변환을 시도합니다.)\n * @returns {Object}\n * @example\n * ```\n * console.log(ax5.util.parseJson('{\"a\":1}'));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':'b'}\"));\n * // Object {a: 1, b: \"b\"}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':function(){return 1;}}\", true));\n * // Object {a: 1, b: function}\n * console.log(ax5.util.parseJson(\"{a:1}\"));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"[1,2,3]\"));\n * // [1, 2, 3]\n * console.log(ax5.util.parseJson(\"['1','2','3']\"));\n * // [\"1\", \"2\", \"3\"]\n * console.log(ax5.util.parseJson(\"[{'a':'99'},'2','3']\"));\n * // [Object, \"2\", \"3\"]\n * ```\n */\n function parseJson(str, force) {\n if (force || reIsJson.test(str)) {\n try {\n return new Function('', 'return ' + str)();\n } catch (e) {\n return { error: 500, msg: 'syntax error' };\n }\n } else {\n return { error: 500, msg: 'syntax error' };\n }\n }\n\n /**\n * 인자의 타입을 반환합니다.\n * @method ax5.util.getType\n * @param {Object|Array|String|Number|Element|Etc} O\n * @returns {String} window|element|object|array|function|string|number|undefined|nodelist\n * @example\n * ```js\n * var axf = ax5.util;\n * var a = 11;\n * var b = \"11\";\n * console.log( axf.getType(a) );\n * console.log( axf.getType(b) );\n * ```\n */\n function getType(O) {\n var typeName;\n if (O != null && O == O.window) {\n typeName = \"window\";\n } else if (!!(O && O.nodeType == 1)) {\n typeName = \"element\";\n } else if (!!(O && O.nodeType == 11)) {\n typeName = \"fragment\";\n } else if (O === null) {\n typeName = \"null\";\n } else if (typeof O === \"undefined\") {\n typeName = \"undefined\";\n } else if (_toString.call(O) == \"[object Object]\") {\n typeName = \"object\";\n } else if (_toString.call(O) == \"[object Array]\") {\n typeName = \"array\";\n } else if (_toString.call(O) == \"[object String]\") {\n typeName = \"string\";\n } else if (_toString.call(O) == \"[object Number]\") {\n typeName = \"number\";\n } else if (_toString.call(O) == \"[object NodeList]\") {\n typeName = \"nodelist\";\n } else if (typeof O === \"function\") {\n typeName = \"function\";\n }\n return typeName;\n }\n\n /**\n * 오브젝트가 window 인지 판단합니다.\n * @method ax5.util.isWindow\n * @param {Object} O\n * @returns {Boolean}\n */\n function isWindow(O) {\n return O != null && O == O.window;\n }\n\n /**\n * 오브젝트가 HTML 엘리먼트여부인지 판단합니다.\n * @method ax5.util.isElement\n * @param {Object} O\n * @returns {Boolean}\n */\n function isElement(O) {\n return !!(O && (O.nodeType == 1 || O.nodeType == 11));\n }\n\n /**\n * 오브젝트가 Object인지 판단합니다.\n * @method ax5.util.isObject\n * @param {Object} O\n * @returns {Boolean}\n */\n function isObject(O) {\n return _toString.call(O) == \"[object Object]\";\n }\n\n /**\n * 오브젝트가 Array인지 판단합니다.\n * @method ax5.util.isArray\n * @param {Object} O\n * @returns {Boolean}\n */\n function isArray(O) {\n return _toString.call(O) == \"[object Array]\";\n }\n\n /**\n * 오브젝트가 Function인지 판단합니다.\n * @method ax5.util.isFunction\n * @param {Object} O\n * @returns {Boolean}\n */\n function isFunction(O) {\n return typeof O === \"function\";\n }\n\n /**\n * 오브젝트가 String인지 판단합니다.\n * @method ax5.util.isString\n * @param {Object} O\n * @returns {Boolean}\n */\n function isString(O) {\n return _toString.call(O) == \"[object String]\";\n }\n\n /**\n * 오브젝트가 Number인지 판단합니다.\n * @method ax5.util.isNumber\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNumber(O) {\n return _toString.call(O) == \"[object Number]\";\n }\n\n /**\n * 오브젝트가 NodeList인지 판단합니다.\n * @method ax5.util.isNodelist\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNodelist(O) {\n return !!(_toString.call(O) == \"[object NodeList]\" || typeof O !== \"undefined\" && O && O[0] && O[0].nodeType == 1);\n }\n\n /**\n * 오브젝트가 undefined인지 판단합니다.\n * @method ax5.util.isUndefined\n * @param {Object} O\n * @returns {Boolean}\n */\n function isUndefined(O) {\n return typeof O === \"undefined\";\n }\n\n /**\n * 오브젝트가 undefined이거나 null이거나 빈값인지 판단합니다.\n * @method ax5.util.isNothing\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNothing(O) {\n return typeof O === \"undefined\" || O === null || O === \"\";\n }\n\n /**\n * 오브젝트가 날자값인지 판단합니다.\n * @method ax5.util.isDate\n * @param {Date} O\n * @returns {Boolean}\n * @example\n * ```js\n * ax5.util.isDate('2016-09-30');\n * // false\n * ax5.util.isDate( new Date('2016-09-30') );\n * // true\n * ```\n */\n function isDate(O) {\n return O instanceof Date && !isNaN(O.valueOf());\n }\n\n function isDateFormat(O) {\n var result = false;\n if (!O) {} else if (O instanceof Date && !isNaN(O.valueOf())) {\n result = true;\n } else {\n if (O.length > 7) {\n if (date(O) instanceof Date) {\n return true;\n }\n }\n O = O.replace(/\\D/g, '');\n if (O.length > 7) {\n var mm = O.substr(4, 2),\n dd = O.substr(6, 2);\n O = date(O);\n if (O.getMonth() == mm - 1 && O.getDate() == dd) {\n result = true;\n }\n }\n }\n return result;\n }\n\n /**\n * 오브젝트의 첫번째 아이템을 반환합니다.\n * @method ax5.util.first\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.first({a:1, b:2});\n * // Object {a: 1}\n * ax5.util.first([1,2,3,4]);\n * // 1\n * ```\n */\n function first(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[0]] = O[keys[0]];\n return item;\n } else if (isArray(O)) {\n return O[0];\n } else {\n console.error(\"ax5.util.object.first\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 오브젝트의 마지막 아이템을 반환합니다.\n * @method ax5.util.last\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.last({a:1, b:2});\n * // Object {b: 2}\n * ax5.util.last([1,2,3,4]);\n * // 4\n * ```\n */\n function last(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[keys.length - 1]] = O[keys[keys.length - 1]];\n return item;\n } else if (isArray(O)) {\n return O[O.length - 1];\n } else {\n console.error(\"ax5.util.object.last\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 쿠키를 설정합니다.\n * @method ax5.util.setCookie\n * @param {String} cname - 쿠키이름\n * @param {String} cvalue - 쿠키값\n * @param {Number} [exdays] - 쿠키 유지일수\n * @param {Object} [opts] - path, domain 설정 옵션\n * @example\n * ```js\n * ax5.util.setCookie(\"jslib\", \"AX5\");\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3);\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3, {path:\"/\", domain:\".axisj.com\"});\n * ```\n */\n function setCookie(cn, cv, exdays, opts) {\n var expire;\n if (typeof exdays === \"number\") {\n expire = new Date();\n expire.setDate(expire.getDate() + exdays);\n }\n opts = opts || {};\n return doc.cookie = [escape(cn), '=', escape(cv), expire ? \"; expires=\" + expire.toUTCString() : \"\", // use expires attribute, max-age is not supported by IE\n opts.path ? \"; path=\" + opts.path : \"\", opts.domain ? \"; domain=\" + opts.domain : \"\", opts.secure ? \"; secure\" : \"\"].join(\"\");\n }\n\n /**\n * 쿠키를 가져옵니다.\n * @method ax5.util.getCookie\n * @param {String} cname\n * @returns {String} cookie value\n * @example\n * ```js\n * ax5.util.getCookie(\"jslib\");\n * ```\n */\n function getCookie(cname) {\n var name = cname + \"=\";\n var ca = doc.cookie.split(';'),\n i = 0,\n l = ca.length;\n for (; i < l; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }if (c.indexOf(name) != -1) return unescape(c.substring(name.length, c.length));\n }\n return \"\";\n }\n\n /**\n * jsonString 으로 alert 합니다.\n * @method ax5.util.alert\n * @param {Object|Array|String|Number} O\n * @returns {Object|Array|String|Number} O\n * @example ```js\n * ax5.util.alert({a:1,b:2});\n * ax5.util.alert(\"정말?\");\n * ```\n */\n function alert(O) {\n win.alert(toJson(O));\n return O;\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.left\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.left(\"abcd.efd\", 3);\n * // abc\n * ax5.util.left(\"abcd.efd\", \".\");\n * // abcd\n * ```\n */\n function left(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n if (isString(pos)) {\n return str.indexOf(pos) > -1 ? str.substr(0, str.indexOf(pos)) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(0, pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.right\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.right(\"abcd.efd\", 3);\n * // efd\n * ax5.util.right(\"abcd.efd\", \".\");\n * // efd\n * ```\n */\n function right(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n str = '' + str;\n if (isString(pos)) {\n return str.lastIndexOf(pos) > -1 ? str.substr(str.lastIndexOf(pos) + 1) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(str.length - pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * css형 문자열이나 특수문자가 포함된 문자열을 카멜케이스로 바꾸어 반환합니다.\n * @method ax5.util.camelCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.camelCase(\"inner-width\");\n * ax5.util.camelCase(\"innerWidth\");\n * // innerWidth\n * ```\n */\n function camelCase(str) {\n return str.replace(reMs, \"ms-\").replace(reSnakeCase, function (all, letter) {\n return letter.toUpperCase();\n });\n }\n\n /**\n * css형 문자열이나 카멜케이스문자열을 스네이크 케이스 문자열로 바꾸어 반환합니다.\n * @method ax5.util.snakeCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.snakeCase(\"innerWidth\");\n * ax5.util.snakeCase(\"inner-Width\");\n * ax5.util.snakeCase(\"innerWidth\");\n * // inner-width\n * ```\n */\n function snakeCase(str) {\n return camelCase(str).replace(reCamelCase, function (all, letter) {\n return \"-\" + letter.toLowerCase();\n });\n }\n\n /**\n * 문자열에서 -. 을 제외한 모든 문자열을 제거하고 숫자로 반환합니다. 옵션에 따라 원하는 형식의 숫자로 변환 할 수 도 있습니다.\n * @method ax5.util.number\n * @param {String|Number} str\n * @param {Object} cond - 옵션\n * @returns {String|Number}\n * @example\n * ```js\n * var cond = {\n * \tround: {Number|Boolean} - 반올림할 자릿수,\n * \tmoney: {Boolean} - 통화,\n * \tabs: {Boolean} - 절대값,\n * \tbyte: {Boolean} - 바이트\n * }\n *\n * console.log(ax5.util.number(123456789.678, {round:1}));\n * console.log(ax5.util.number(123456789.678, {round:1, money:true}));\n * console.log(ax5.util.number(123456789.678, {round:2, byte:true}));\n * console.log(ax5.util.number(-123456789.8888, {abs:true, round:2, money:true}));\n * console.log(ax5.util.number(\"A-1234~~56789.8~888PX\", {abs:true, round:2, money:true}));\n *\n * //123456789.7\n * //123,456,789.7\n * //117.7MB\n * //123,456,789.89\n * //123,456,789.89\n * ```\n */\n function number(str, cond) {\n var result,\n pair = ('' + str).split(reDot),\n isMinus,\n returnValue;\n\n isMinus = Number(pair[0].replace(/,/g, \"\")) < 0 || pair[0] == \"-0\";\n returnValue = 0.0;\n pair[0] = pair[0].replace(reInt, \"\");\n\n if (pair[1]) {\n pair[1] = pair[1].replace(reNotNum, \"\");\n returnValue = Number(pair[0] + \".\" + pair[1]) || 0;\n } else {\n returnValue = Number(pair[0]) || 0;\n }\n result = isMinus ? -returnValue : returnValue;\n\n each(cond, function (k, c) {\n if (k == \"round\") {\n if (isNumber(c)) {\n if (c < 0) {\n result = +(Math.round(result + \"e-\" + Math.abs(c)) + \"e+\" + Math.abs(c));\n } else {\n result = +(Math.round(result + \"e+\" + c) + \"e-\" + c);\n }\n } else {\n result = Math.round(result);\n }\n }\n if (k == \"floor\") {\n result = Math.floor(result);\n }\n if (k == \"ceil\") {\n result = Math.ceil(result);\n } else if (k == \"money\") {\n result = function (val) {\n var txtNumber = '' + val;\n if (isNaN(txtNumber) || txtNumber == \"\") {\n return \"\";\n } else {\n var arrNumber = txtNumber.split('.');\n arrNumber[0] += '.';\n do {\n arrNumber[0] = arrNumber[0].replace(reMoneySplit, '$1,$2');\n } while (reMoneySplit.test(arrNumber[0]));\n if (arrNumber.length > 1) {\n return arrNumber.join('');\n } else {\n return arrNumber[0].split('.')[0];\n }\n }\n }(result);\n } else if (k == \"abs\") {\n result = Math.abs(Number(result));\n } else if (k == \"byte\") {\n result = function (val) {\n val = Number(result);\n var nUnit = \"KB\";\n var myByte = val / 1024;\n if (myByte / 1024 > 1) {\n nUnit = \"MB\";\n myByte = myByte / 1024;\n }\n if (myByte / 1024 > 1) {\n nUnit = \"GB\";\n myByte = myByte / 1024;\n }\n return number(myByte, { round: 1 }) + nUnit;\n }(result);\n }\n });\n\n return result;\n }\n\n /**\n * 배열 비슷한 오브젝트를 배열로 변환해줍니다.\n * @method ax5.util.toArray\n * @param {Object|Elements|Arguments} O\n * @returns {Array}\n * @example\n * ```js\n * ax5.util.toArray(arguments);\n * //\n * ```\n */\n function toArray(O) {\n if (typeof O.length != \"undefined\") return Array.prototype.slice.call(O);\n return [];\n }\n\n /**\n * 첫번째 인자에 두번째 인자 아이템을 합쳐줍니다. concat과 같은 역할을 하지만. 인자가 Array타입이 아니어도 됩니다.\n * @method ax5.util.merge\n * @param {Array|ArrayLike} first\n * @param {Array|ArrayLike} second\n * @returns {Array} first\n * @example\n * ```\n *\n * ```\n */\n function merge(first, second) {\n var l = second.length,\n i = first.length,\n j = 0;\n\n if (typeof l === \"number\") {\n for (; j < l; j++) {\n first[i++] = second[j];\n }\n } else {\n while (second[j] !== undefined) {\n first[i++] = second[j++];\n }\n }\n\n first.length = i;\n\n return first;\n }\n\n /**\n * 오브젝트를 파라미터형식으로 또는 파라미터를 오브젝트 형식으로 변환합니다.\n * @method ax5.util.param\n * @param {Object|Array|String} O\n * @param {String} [cond] - param|object\n * @returns {Object|String}\n * @example\n * ```\n * ax5.util.param({a:1,b:'1232'}, \"param\");\n * ax5.util.param(\"a=1&b=1232\", \"param\");\n * // \"a=1&b=1232\"\n * ax5.util.param(\"a=1&b=1232\");\n * // {a: \"1\", b: \"1232\"}\n * ```\n */\n function param(O, cond) {\n var p;\n if (isString(O) && typeof cond !== \"undefined\" && cond == \"param\") {\n return O;\n } else if (isString(O) && typeof cond !== \"undefined\" && cond == \"object\" || isString(O) && typeof cond === \"undefined\") {\n p = {};\n each(O.split(reAmp), function () {\n var item = this.split(reEq);\n if (!p[item[0]]) p[item[0]] = item[1];else {\n if (isString(p[item[0]])) p[item[0]] = [p[item[0]]];\n p[item[0]].push(item[1]);\n }\n });\n return p;\n } else {\n p = [];\n each(O, function (k, v) {\n p.push(k + \"=\" + escape(v));\n });\n return p.join('&');\n }\n }\n\n function encode(s) {\n return encodeURIComponent(s);\n }\n\n function decode(s) {\n return decodeURIComponent(s);\n }\n\n function error() {\n ax5.info.onerror.apply(this, arguments);\n }\n\n function localDate(yy, mm, dd, hh, mi, ss) {\n var utcD, localD;\n localD = new Date();\n if (mm < 0) mm = 0;\n if (typeof hh === \"undefined\") hh = 12;\n if (typeof mi === \"undefined\") mi = 0;\n utcD = new Date(Date.UTC(yy, mm, dd || 1, hh, mi, ss || 0));\n\n if (mm == 0 && dd == 1 && utcD.getUTCHours() + utcD.getTimezoneOffset() / 60 < 0) {\n utcD.setUTCHours(0);\n } else {\n utcD.setUTCHours(utcD.getUTCHours() + utcD.getTimezoneOffset() / 60);\n }\n return utcD;\n }\n\n /**\n * 날짜 형식의 문자열이나 Date객체를 조건에 맞게 처리 한 후 원하는 return 값으로 반환합니다.\n * @method ax5.util.date\n * @param {String|Date} d\n * @param {Object} cond\n * @returns {Date|String}\n * @example\n * ```js\n * ax5.util.date('2013-01-01'); // Tue Jan 01 2013 23:59:00 GMT+0900 (KST)\n * ax5.util.date((new Date()), {add:{d:10}, return:'yyyy/MM/dd'}); // \"2015/07/01\"\n * ax5.util.date('1919-03-01', {add:{d:10}, return:'yyyy/MM/dd hh:mm:ss'}); // \"1919/03/11 23:59:00\"\n * ```\n */\n function date(d, cond) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n hh = void 0,\n mi = void 0,\n aDateTime = void 0,\n aTimes = void 0,\n aTime = void 0,\n aDate = void 0,\n va = void 0,\n ISO_8601 = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i,\n ISO_8601_FULL = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n\n if (isString(d)) {\n if (d.length == 0) {\n d = new Date();\n } else if (d.length > 15) {\n if (ISO_8601_FULL.test(d) || ISO_8601.test(d)) {\n d = new Date(d);\n } else {\n aDateTime = d.split(/ /g), aTimes, aTime, aDate = aDateTime[0].split(/\\D/g), yy = aDate[0];\n mm = parseFloat(aDate[1]);\n dd = parseFloat(aDate[2]);\n aTime = aDateTime[1] || \"09:00\";\n aTimes = aTime.substring(0, 5).split(\":\");\n hh = parseFloat(aTimes[0]);\n mi = parseFloat(aTimes[1]);\n if (right(aTime, 2) === \"AM\" || right(aTime, 2) === \"PM\") hh += 12;\n d = localDate(yy, mm - 1, dd, hh, mi);\n }\n } else if (d.length == 14) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)), number(va.substr(8, 2)), number(va.substr(10, 2)), number(va.substr(12, 2)));\n } else if (d.length > 7) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)));\n } else if (d.length > 4) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else if (d.length > 2) {\n va = d.replace(/\\D/g, \"\");\n return localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else {\n d = new Date();\n }\n }\n if (typeof cond === \"undefined\" || typeof d === \"undefined\") {\n return d;\n } else {\n if (\"add\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n mxdd = void 0,\n DyMilli = 1000 * 60 * 60 * 24;\n\n if (typeof opts[\"d\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"d\"] * DyMilli);\n } else if (typeof opts[\"m\"] !== \"undefined\") {\n yy = _d.getFullYear();\n mm = _d.getMonth();\n dd = _d.getDate();\n yy = yy + parseInt(opts[\"m\"] / 12);\n mm += opts[\"m\"] % 12;\n mxdd = daysOfMonth(yy, mm);\n if (mxdd < dd) dd = mxdd;\n _d = new Date(yy, mm, dd, 12);\n } else if (typeof opts[\"y\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"y\"] * 365 * DyMilli);\n } else if (typeof opts[\"h\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"h\"] * 1000 * 60 * 60);\n }\n\n return _d;\n }(new Date(d), cond[\"add\"]);\n }\n if (\"set\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n processor = {\n \"firstDayOfMonth\": function firstDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = 1;\n return new Date(yy, mm, dd, 12);\n },\n \"lastDayOfMonth\": function lastDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = daysOfMonth(yy, mm);\n return new Date(yy, mm, dd, 12);\n }\n };\n if (opts in processor) {\n return processor[opts](_d);\n } else {\n return _d;\n }\n }(new Date(d), cond[\"set\"]);\n }\n if (\"return\" in cond) {\n return function () {\n\n var fStr = cond[\"return\"],\n nY = void 0,\n nM = void 0,\n nD = void 0,\n nH = void 0,\n nMM = void 0,\n nS = void 0,\n nDW = void 0,\n yre = void 0,\n regY = void 0,\n mre = void 0,\n regM = void 0,\n dre = void 0,\n regD = void 0,\n hre = void 0,\n regH = void 0,\n mire = void 0,\n regMI = void 0,\n sre = void 0,\n regS = void 0,\n dwre = void 0,\n regDW = void 0;\n\n nY = d.getUTCFullYear();\n nM = setDigit(d.getMonth() + 1, 2);\n nD = setDigit(d.getDate(), 2);\n nH = setDigit(d.getHours(), 2);\n nMM = setDigit(d.getMinutes(), 2);\n nS = setDigit(d.getSeconds(), 2);\n nDW = d.getDay();\n\n yre = /[^y]*(yyyy)[^y]*/gi;\n yre.exec(fStr);\n regY = RegExp.$1;\n mre = /[^m]*(MM)[^m]*/g;\n mre.exec(fStr);\n regM = RegExp.$1;\n dre = /[^d]*(dd)[^d]*/gi;\n dre.exec(fStr);\n regD = RegExp.$1;\n hre = /[^h]*(hh)[^h]*/gi;\n hre.exec(fStr);\n regH = RegExp.$1;\n mire = /[^m]*(mm)[^i]*/g;\n mire.exec(fStr);\n regMI = RegExp.$1;\n sre = /[^s]*(ss)[^s]*/gi;\n sre.exec(fStr);\n regS = RegExp.$1;\n dwre = /[^d]*(dw)[^w]*/gi;\n dwre.exec(fStr);\n regDW = RegExp.$1;\n\n if (regY === \"yyyy\") {\n fStr = fStr.replace(regY, right(nY, regY.length));\n }\n if (regM === \"MM\") {\n if (regM.length == 1) nM = d.getMonth() + 1;\n fStr = fStr.replace(regM, nM);\n }\n if (regD === \"dd\") {\n if (regD.length == 1) nD = d.getDate();\n fStr = fStr.replace(regD, nD);\n }\n if (regH === \"hh\") {\n fStr = fStr.replace(regH, nH);\n }\n if (regMI === \"mm\") {\n fStr = fStr.replace(regMI, nMM);\n }\n if (regS === \"ss\") {\n fStr = fStr.replace(regS, nS);\n }\n if (regDW == \"dw\") {\n fStr = fStr.replace(regDW, info.weekNames[nDW].label);\n }\n return fStr;\n }();\n } else {\n return d;\n }\n }\n }\n\n /**\n * 인자인 날짜가 오늘부터 몇일전인지 반환합니다. 또는 인자인 날짜가 가까운 미래에 몇일 후인지 반환합니다.\n * @method ax5.util.dday\n * @param {String|Data} d\n * @param {Object} cond\n * @returns {Number}\n * @example\n * ```js\n * ax5.util.dday('2016-01-29');\n * // 1\n * ax5.util.dday('2016-01-29', {today:'2016-01-28'});\n * // 1\n * ax5.util.dday('1977-03-29', {today:'2016-01-28', age:true});\n * // 39\n * ```\n */\n function dday(d, cond) {\n var memoryDay = date(d),\n DyMilli = 1000 * 60 * 60 * 24,\n today = new Date(),\n diffnum,\n thisYearMemoryDay;\n\n function getDayTime(_d) {\n return Math.floor(_d.getTime() / DyMilli) * DyMilli;\n }\n\n if (typeof cond === \"undefined\") {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n return diffnum;\n } else {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (cond[\"today\"]) {\n today = date(cond.today);\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n if (cond[\"thisYear\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (diffnum < 0) {\n thisYearMemoryDay = new Date(today.getFullYear() + 1, memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n }\n if (cond[\"age\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = thisYearMemoryDay.getFullYear() - memoryDay.getFullYear();\n }\n\n return diffnum;\n }\n }\n\n /**\n * 인자인 날짜가 몇년 몇월의 몇번째 주차인지 반환합니다.\n * @method ax5.util.weeksOfMonth\n * @param {String|Data} d\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.weeksOfMonth(\"2015-10-01\"); // {year: 2015, month: 10, count: 1}\n * ax5.util.weeksOfMonth(\"2015-09-19\"); // {year: 2015, month: 9, count: 3}\n * ```\n */\n function weeksOfMonth(d) {\n var myDate = date(d);\n return {\n year: myDate.getFullYear(),\n month: myDate.getMonth() + 1,\n count: parseInt(myDate.getDate() / 7 + 1)\n };\n }\n\n /**\n * 년월에 맞는 날자수를 반환합니다.\n * (new Date()).getMonth() 기준으로 월값을 보냅니다. \"2월\" 인경우 \"1\" 을 넘기게 됩니다.\n * @method ax5.util.daysOfMonth\n * @param {Number} y\n * @param {Number} m\n * @returns {Number}\n * @examples\n * ```js\n * ax5.util.daysOfMonth(2015, 11); // 31\n * ax5.util.daysOfMonth(2015, 1); // 28\n * ```\n */\n function daysOfMonth(y, m) {\n if (m == 3 || m == 5 || m == 8 || m == 10) {\n return 30;\n } else if (m == 1) {\n return y % 4 == 0 && y % 100 != 0 || y % 400 == 0 ? 29 : 28;\n } else {\n return 31;\n }\n }\n\n /**\n * 원하는 횟수 만큼 자릿수 맞춤 문자열을 포함한 문자열을 반환합니다.\n * 문자열 길이보다 작은값을 보내면 무시됩니다.\n * @method ax5.util.setDigit\n * @param {String|Number} num\n * @param {Number} length\n * @param {String} [padder=0]\n * @param {Number} [radix]\n * @returns {String}\n * @example\n * ```\n * ax5.util.setDigit(2016, 6)\n * // \"002016\"\n * ax5.util.setDigit(2016, 2)\n * // \"2016\"\n * ```\n */\n function setDigit(num, length, padder, radix) {\n var s = num.toString(radix || 10);\n return times(padder || '0', length - s.length) + s;\n }\n\n /**\n * 문자열을 지정된 수만큼 반복 합니다.\n * @param {String} s\n * @param {Number} count\n * @returns {string}\n * @example\n * ```\n * ax5.util.times(2016, 2)\n * //\"20162016\"\n * ```\n */\n function times(s, count) {\n return count < 1 ? '' : new Array(count + 1).join(s);\n }\n\n /**\n * 타겟엘리먼트의 부모 엘리멘트 트리에서 원하는 조건의 엘리먼트를 얻습니다.\n * @method ax5.util.findParentNode\n * @param {Element} _target - target element\n * @param {Object|Function} cond - 원하는 element를 찾을 조건\n * @returns {Element}\n * @example\n * ```\n * // cond 속성정의\n * var cond = {\n * \ttagname: {String} - 태그명 (ex. a, div, span..),\n * \tclazz: {String} - 클래스명\n * \t[, 그 외 찾고 싶은 attribute명들]\n * };\n * console.log(\n * console.log(\n * ax5.util.findParentNode(e.target, {tagname:\"a\", clazz:\"ax-menu-handel\", \"data-custom-attr\":\"attr_value\"})\n * );\n * // cond 함수로 처리하기\n * jQuery('#id').bind(\"click.app_expand\", function(e){\n * \tvar target = ax5.util.findParentNode(e.target, function(target){\n * \t\tif($(target).hasClass(\"aside\")){\n * \t\t\treturn true;\n * \t\t}\n * \t\telse{\n * \t\t\treturn true;\n * \t\t}\n * \t});\n * \t//client-aside\n * \tif(target.id !== \"client-aside\"){\n * \t\t// some action\n * \t}\n * });\n * ```\n */\n\n function findParentNode(_target, cond) {\n if (_target) {\n while (function () {\n var result = true;\n if (typeof cond === \"undefined\") {\n _target = _target.parentNode ? _target.parentNode : false;\n } else if (isFunction(cond)) {\n result = cond(_target);\n } else if (isObject(cond)) {\n for (var k in cond) {\n if (k === \"tagname\") {\n if (_target.tagName.toLocaleLowerCase() != cond[k]) {\n result = false;\n break;\n }\n } else if (k === \"clazz\" || k === \"class_name\") {\n if (\"className\" in _target) {\n var klasss = _target.className.split(reClassNameSplit);\n var hasClass = false;\n for (var a = 0; a < klasss.length; a++) {\n if (klasss[a] == cond[k]) {\n hasClass = true;\n break;\n }\n }\n result = hasClass;\n } else {\n result = false;\n break;\n }\n } else {\n // 그외 속성값들.\n if (_target.getAttribute) {\n if (_target.getAttribute(k) != cond[k]) {\n result = false;\n break;\n }\n } else {\n result = false;\n break;\n }\n }\n }\n }\n return !result;\n }()) {\n if (_target.parentNode && _target.parentNode.parentNode) {\n _target = _target.parentNode;\n } else {\n _target = false;\n break;\n }\n }\n }\n return _target;\n }\n\n /**\n * @method ax5.util.cssNumber\n * @param {String|Number} val\n * @returns {String}\n * @example\n * ```\n * console.log(ax5.util.cssNumber(\"100px\"))\n * console.log(ax5.util.cssNumber(\"100%\"))\n * console.log(ax5.util.cssNumber(\"100\"))\n * console.log(ax5.util.cssNumber(100))\n * console.log(ax5.util.cssNumber(\"!!100@#\"))\n * ```\n */\n function cssNumber(val) {\n var re = /\\D?(\\d+)([a-zA-Z%]*)/i,\n found = ('' + val).match(re),\n unit = found[2] || \"px\";\n\n return found[1] + unit;\n }\n\n /**\n * css string 및 object 를 넘기면 object 및 string 으로 변환되어 리턴됩니다.\n * @method ax5.util.css\n * @param {Object|String} val - CSS String or CSS Object\n * @returns {String|Object}\n * @example\n * ```\n * console.log(ax5.util.css({background: \"#ccc\", padding: \"50px\", width: \"100px\"}));\n * //\"background:#ccc;padding:50px;width:100px;\"\n * console.log(ax5.util.css('width:100px;padding: 50px; background: #ccc'));\n * // object {width: \"100px\", padding: \"50px\", background: \"#ccc\"}\n * ```\n */\n function css(val) {\n var returns;\n if (isObject(val)) {\n returns = '';\n for (var k in val) {\n returns += k + ':' + val[k] + ';';\n }\n return returns;\n } else if (isString(val)) {\n returns = {};\n var valSplited = val.split(/[ ]*;[ ]*/g);\n valSplited.forEach(function (v) {\n if ((v = v.trim()) !== \"\") {\n var vSplited = v.split(/[ ]*:[ ]*/g);\n returns[vSplited[0]] = vSplited[1];\n }\n });\n return returns;\n }\n }\n\n /**\n * @method ax5.util.stopEvent\n * @param {Event} e\n * @example\n * ```\n * ax5.util.stopEvent(e);\n * ```\n */\n function stopEvent(e) {\n // 이벤트 중지 구문\n if (!e) var e = window.event;\n\n //e.cancelBubble is supported by IE -\n // this will kill the bubbling process.\n e.cancelBubble = true;\n e.returnValue = false;\n\n //e.stopPropagation works only in Firefox.\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n\n return false;\n // 이벤트 중지 구문 끝\n }\n\n /**\n * @method ax5.util.selectRange\n * @param {Element} el\n * @param {Element} offset\n * @example\n * ```\n * ax5.util.selectRange($(\"#select-test-0\")); // selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"selectAll\"); //selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"start\"); // focus on start\n * ax5.util.selectRange($(\"#select-test-0\"), \"end\"); // focus on end\n * ax5.util.selectRange($(\"#select-test-0\"), [1, 5]); // select 1~5\n * ```\n */\n var selectRange = function () {\n var processor = {\n 'textRange': {\n 'selectAll': function selectAll(el, range, offset) {},\n 'arr': function arr(el, range, offset) {\n range.moveStart(\"character\", offset[0]); // todo ie node select 체크필요\n range.collapse();\n range.moveEnd(\"character\", offset[1]);\n },\n 'start': function start(el, range, offset) {\n range.moveStart(\"character\", 0);\n range.collapse();\n },\n 'end': function end(el, range, offset) {\n range.moveStart(\"character\", range.text.length);\n range.collapse();\n }\n },\n 'range': {\n 'selectAll': function selectAll(el, range, offset) {\n range.selectNodeContents(el);\n },\n 'arr': function arr(el, range, offset) {\n if (isObject(offset[0])) {\n range.setStart(offset[0].node, offset[0].offset);\n range.setEnd(offset[1].node, offset[1].offset);\n } else {\n range.setStart(el.firstChild, offset[0]);\n range.setEnd(el.firstChild, offset[1]);\n }\n },\n 'start': function start(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(true);\n },\n 'end': function end(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(false);\n }\n }\n };\n return function (el, offset) {\n var range, rangeType, selection;\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n if (!el) return;\n\n // 레인지 타입 선택\n if (doc.body.createTextRange) {\n range = document.body.createTextRange();\n range.moveToElementText(el);\n rangeType = \"textRange\";\n } else if (window.getSelection) {\n selection = window.getSelection();\n range = document.createRange();\n rangeType = \"range\";\n }\n\n // range 적용\n if (typeof offset == \"undefined\") {\n processor[rangeType].selectAll.call(this, el, range, offset);\n } else if (isArray(offset)) {\n processor[rangeType].arr.call(this, el, range, offset);\n } else {\n for (var key in processor[rangeType]) {\n if (offset == key) {\n processor[rangeType][key].call(this, el, range, offset);\n break;\n }\n }\n }\n\n // 포커스 및 셀렉트\n if (doc.body.createTextRange) {\n range.select();\n el.focus();\n } else if (window.getSelection) {\n el.focus();\n selection.removeAllRanges();\n selection.addRange(range);\n }\n };\n }();\n\n /**\n * 지정한 시간을 지연시켜 함수를 실행합니다.\n * @method ax5.util.debounce\n * @param {Function} func\n * @param {Number} wait\n * @param {Object} options\n * @returns {debounced}\n * @example\n * ```js\n * var debounceFn = ax5.util.debounce(function( val ) { console.log(val); }, 300);\n * $(document.body).click(function(){\n * debounceFn(new Date());\n * });\n * ```\n */\n // https://github.com/lodash/lodash/blob/master/debounce.js\n function debounce(func, wait, options) {\n var lastArgs = void 0,\n lastThis = void 0,\n maxWait = void 0,\n result = void 0,\n timerId = void 0,\n lastCallTime = void 0;\n\n var lastInvokeTime = 0;\n var leading = false;\n var maxing = false;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs;\n var thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n var result = wait - timeSinceLastCall;\n\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function debounced() {\n var time = Date.now();\n var isInvoking = shouldInvoke(time);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * @method ax5.util.throttle\n * @param func\n * @param wait\n * @param options\n * @return {debounced}\n */\n //https://github.com/lodash/lodash/blob/master/throttle.js\n function throttle(func, wait, options) {\n var leading = true;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * @method ax5.util.deepCopy\n * @param {Object} obj\n * @returns {Object}\n * @example\n * ```js\n * var obj = [\n * {name:\"A\", child:[{name:\"a-1\"}]},\n * {name:\"B\", child:[{name:\"b-1\"}], callBack: function(){ console.log('callBack'); }}\n * ];\n * var copiedObj = ax5.util.deepCopy(obj)\n * ```\n */\n function deepCopy(obj) {\n var r, l;\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object') {\n if (U.isArray(obj)) {\n l = obj.length;\n r = new Array(l);\n for (var i = 0; i < l; i++) {\n r[i] = deepCopy(obj[i]);\n }\n return r;\n } else {\n return jQuery.extend({}, obj);\n }\n }\n return obj;\n }\n\n /**\n * HTML 문자열을 escape 처리합니다.\n * \"<\" represents the < sign.\n * \">\" represents the > sign.\n * \"&\" represents the & sign.\n * \"" represents the \" mark.\n * [Character entity references](https://www.w3.org/TR/html401/charset.html#h-5.3)\n * @method ax5.util.escapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.escapeHtml('HTML string & \"escape\"')\n * //\"HTML <span>string</span> & "escape"\"\n * ```\n */\n function escapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/[\\<\\>\\&\\\"]/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \"\\\"\":\n return \""\";\n default:\n return match;\n }\n });\n }\n\n /**\n * HTML 문자열을 unescape 처리합니다.\n * escapeHtml를 참고하세요.\n * @method ax5.util.unescapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.unescapeHtml('HTML <span>string</span> & "escape"')\n * //\"HTML string & \"escape\"\"\n * ```\n */\n function unescapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/(<)|(>)|(&)|(")/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \""\":\n return \"\\\"\";\n default:\n return match;\n }\n });\n }\n\n /**\n * @method ax5.util.string\n * @param {String} tmpl\n * @param {*} args\n * @return {ax5string}\n * @example\n * ```js\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format(\"ASP\", \"ASP.NET\");\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format([\"ASP\", \"ASP.NET\"]);\n * ax5.util.stinrg(\"{0} counts\").format(100);\n * ```\n */\n function string(_string) {\n return new function (_string) {\n this.value = _string;\n this.toString = function () {\n return this.value;\n };\n /**\n * @method ax5.util.string.format\n * @returns {*}\n */\n this.format = function () {\n var args = [];\n for (var i = 0, l = arguments.length; i < l; i++) {\n args = args.concat(arguments[i]);\n }\n return this.value.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n /**\n * @method ax5.util.string.escape\n * @returns {*}\n */\n this.escape = function () {\n return escapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.unescape\n * @returns {*}\n */\n this.unescape = function () {\n return unescapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.encode\n * @returns {*}\n */\n this.encode = function () {\n return encode(this.value);\n };\n /**\n * @method ax5.util.string.decode\n * @returns {*}\n */\n this.decode = function () {\n return decode(this.value);\n };\n /**\n * @method ax5.util.string.left\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.left = function (_pos) {\n return left(this.value, _pos);\n };\n /**\n * @method ax5.util.string.right\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.right = function (_pos) {\n return right(this.value, _pos);\n };\n /**\n * @method ax5.util.string.camelCase\n * @returns {*}\n */\n this.camelCase = function () {\n return camelCase(this.value);\n };\n /**\n * @method ax5.util.string.snakeCase\n * @returns {*}\n */\n this.snakeCase = function () {\n return snakeCase(this.value);\n };\n }(_string);\n }\n\n /**\n * @method ax5.util.color\n * @param _hexColor\n * @return {ax5color}\n * @example\n * ```js\n * ax5.util.color(\"#ff3300\").lighten(10).getHexValue()\n * console.log(ax5.util.color(\"#ff3300\").darken(10).getHexValue());\n * ```\n */\n function color(_hexColor) {\n\n var matchers = function () {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n var convertObject = function convertObject(_color) {\n var match = void 0;\n if (match = matchers.rgb.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if (match = matchers.rgba.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if (match = matchers.hsl.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if (match = matchers.hsla.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if (match = matchers.hsv.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if (match = matchers.hsva.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if (match = matchers.hex8.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: parseInt(match[4] / 255, 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n format: \"hex\"\n };\n }\n if (match = matchers.hex4.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n a: parseInt(match[4] + '' + match[4], 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n format: \"hex\"\n };\n }\n\n return false;\n };\n\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n }\n\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n }\n\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n\n return n;\n }\n\n function convertTo255(n) {\n return ax5.util.number(Math.min(255, Math.max(n, 0)), { 'round': 2 });\n }\n\n function convertToHex(n) {\n return setDigit(Math.round(n).toString(16), 2);\n }\n\n function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n }\n\n function hslToRgb(h, s, l) {\n var r = void 0,\n g = void 0,\n b = void 0;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n }\n\n return new function (_color) {\n this._originalValue = _color;\n _color = convertObject(_color);\n this.r = _color.r;\n this.g = _color.g;\n this.b = _color.b;\n this.a = _color.a || 1;\n this._format = _color.format;\n this._hex = convertToHex(this.r) + convertToHex(this.g) + convertToHex(this.b);\n\n this.getHexValue = function () {\n return this._hex;\n };\n\n this.lighten = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l += amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.darken = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l -= amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.getBrightness = function () {\n return (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n };\n\n this.isDark = function () {\n return this.getBrightness() < 128;\n };\n\n this.isLight = function () {\n return !this.isDark();\n };\n\n this.getHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l\n };\n };\n }(_hexColor);\n }\n\n return {\n alert: alert,\n each: each,\n map: map,\n search: search,\n reduce: reduce,\n reduceRight: reduceRight,\n filter: filter,\n sum: sum,\n avg: avg,\n toJson: toJson,\n parseJson: parseJson,\n first: first,\n last: last,\n deepCopy: deepCopy,\n\n left: left,\n right: right,\n getType: getType,\n isWindow: isWindow,\n isElement: isElement,\n isObject: isObject,\n isArray: isArray,\n isFunction: isFunction,\n isString: isString,\n isNumber: isNumber,\n isNodelist: isNodelist,\n isUndefined: isUndefined,\n isNothing: isNothing,\n setCookie: setCookie,\n getCookie: getCookie,\n camelCase: camelCase,\n snakeCase: snakeCase,\n number: number,\n toArray: toArray,\n merge: merge,\n param: param,\n error: error,\n date: date,\n dday: dday,\n daysOfMonth: daysOfMonth,\n weeksOfMonth: weeksOfMonth,\n setDigit: setDigit,\n times: times,\n findParentNode: findParentNode,\n cssNumber: cssNumber,\n css: css,\n isDate: isDate,\n isDateFormat: isDateFormat,\n stopEvent: stopEvent,\n selectRange: selectRange,\n debounce: debounce,\n throttle: throttle,\n escapeHtml: escapeHtml,\n unescapeHtml: unescapeHtml,\n\n string: string,\n color: color\n };\n }();\n\n if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n module.exports = ax5;\n } else {\n root.ax5 = function () {\n return ax5;\n }(); // ax5.ui에 연결\n }\n}).call(typeof window !== \"undefined\" ? window : undefined);\n\nax5.def = {};\nax5.info.errorMsg[\"ax5dialog\"] = {\n \"501\": \"Duplicate call error\"\n};\n\nax5.info.errorMsg[\"ax5picker\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find content key\"\n};\n\nax5.info.errorMsg[\"single-uploader\"] = {\n \"460\": \"There are no files to be uploaded.\",\n \"461\": \"There is no uploaded files.\"\n};\n\nax5.info.errorMsg[\"ax5calendar\"] = {\n \"401\": \"Can not find target element\"\n};\n\nax5.info.errorMsg[\"ax5formatter\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find pattern\"\n};\n\nax5.info.errorMsg[\"ax5menu\"] = {\n \"501\": \"Can not find menu item\"\n};\n\nax5.info.errorMsg[\"ax5select\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n\nax5.info.errorMsg[\"ax5combobox\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n// 필수 Ployfill 확장 구문\n(function () {\n 'use strict';\n\n var root = this,\n re_trim = /^\\s*|\\s*$/g;\n\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n if (!Object.keys) {\n Object.keys = function () {\n var hwp = Object.prototype.hasOwnProperty,\n hdeb = !{ toString: null }.propertyIsEnumerable('toString'),\n de = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n del = de.length;\n\n return function (obj) {\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' && (typeof obj !== 'function' || obj === null)) throw new TypeError('type err');\n var r = [],\n prop,\n i;\n for (prop in obj) {\n if (hwp.call(obj, prop)) r.push(prop);\n }if (hdeb) {\n for (i = 0; i < del; i++) {\n if (hwp.call(obj, de[i])) r.push(de[i]);\n }\n }\n return r;\n };\n }();\n }\n\n // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function (fun /*, thisp */) {\n if (this === void 0 || this === null) {\n throw TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof fun !== \"function\") {\n throw TypeError();\n }\n var thisp = arguments[1],\n i;\n for (i = 0; i < len; i++) {\n if (i in t) {\n fun.call(thisp, t[i], i, t);\n }\n }\n };\n }\n\n // ES5 15.3.4.5 Function.prototype.bind ( thisArg [, arg1 [, arg2, ... ]] )\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n if (!Function.prototype.bind) {\n Function.prototype.bind = function (o) {\n if (typeof this !== 'function') {\n throw TypeError(\"function\");\n }\n var slice = [].slice,\n args = slice.call(arguments, 1),\n self = this,\n bound = function bound() {\n return self.apply(this instanceof nop ? this : o, args.concat(slice.call(arguments)));\n };\n\n function nop() {}\n\n nop.prototype = self.prototype;\n bound.prototype = new nop();\n return bound;\n };\n }\n\n /*global document */\n /**\n * define document.querySelector & document.querySelectorAll for IE7\n *\n * A not very fast but small hack. The approach is taken from\n * http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx\n *\n */\n (function () {\n if (document.querySelectorAll || document.querySelector) {\n return;\n }\n if (!document.createStyleSheet) return;\n var style = document.createStyleSheet(),\n select = function select(selector, maxCount) {\n var all = document.all,\n l = all.length,\n i,\n resultSet = [];\n\n style.addRule(selector, \"foo:bar\");\n for (i = 0; i < l; i += 1) {\n if (all[i].currentStyle.foo === \"bar\") {\n resultSet.push(all[i]);\n if (resultSet.length > maxCount) {\n break;\n }\n }\n }\n style.removeRule(0);\n return resultSet;\n };\n\n document.querySelectorAll = function (selector) {\n return select(selector, Infinity);\n };\n document.querySelector = function (selector) {\n return select(selector, 1)[0] || null;\n };\n })();\n\n if (!String.prototype.trim) {\n (function () {\n String.prototype.trim = function () {\n return this.replace(re_trim, '');\n };\n })();\n }\n\n if (!window.JSON) {\n window.JSON = {\n parse: function parse(sJSON) {\n return new Function('', 'return ' + sJSON)();\n },\n stringify: function () {\n var r = /[\"]/g,\n _f;\n return _f = function f(vContent) {\n var result, i, j;\n switch (result = typeof vContent === 'undefined' ? 'undefined' : _typeof(vContent)) {\n case 'string':\n return '\"' + vContent.replace(r, '\\\\\"') + '\"';\n case 'number':\n case 'boolean':\n return vContent.toString();\n case 'undefined':\n return 'undefined';\n case 'function':\n return '\"\"';\n case 'object':\n if (!vContent) return 'null';\n result = '';\n if (vContent.splice) {\n for (i = 0, j = vContent.length; i < j; i++) {\n result += ',' + _f(vContent[i]);\n }return '[' + result.substr(1) + ']';\n } else {\n for (i in vContent) {\n if (vContent.hasOwnProperty(i) && vContent[i] !== undefined && typeof vContent[i] != 'function') result += ',\"' + i + '\":' + _f(vContent[i]);\n }return '{' + result.substr(1) + '}';\n }\n }\n };\n }()\n };\n }\n\n // splice ie8 <= polyfill\n (function () {\n if (!document.documentMode || document.documentMode >= 9) return false;\n var _splice = Array.prototype.splice;\n Array.prototype.splice = function () {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[1] === \"undefined\") args[1] = this.length - args[0];\n return _splice.apply(this, args);\n };\n })();\n\n /**\n * Shim for \"fixing\" IE's lack of support (IE < 9) for applying slice\n * on host objects like NamedNodeMap, NodeList, and HTMLCollection\n * (technically, since host objects have been implementation-dependent,\n * at least before ES6, IE hasn't needed to work this way).\n * Also works on strings, fixes IE < 9 to allow an explicit undefined\n * for the 2nd argument (as in Firefox), and prevents errors when\n * called on other DOM objects.\n */\n (function () {\n 'use strict';\n\n var _slice = Array.prototype.slice;\n\n try {\n // Can't be used with DOM elements in IE < 9\n _slice.call(document.documentElement);\n } catch (e) {\n // Fails in IE < 9\n // This will work for genuine arrays, array-like objects,\n // NamedNodeMap (attributes, entities, notations),\n // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),\n // and will not fail on other DOM objects (as do DOM elements in IE < 9)\n Array.prototype.slice = function (begin, end) {\n // IE < 9 gets unhappy with an undefined end argument\n end = typeof end !== 'undefined' ? end : this.length;\n\n // For native Array objects, we use the native slice function\n if (Object.prototype.toString.call(this) === '[object Array]') {\n return _slice.call(this, begin, end);\n }\n\n // For array like object we handle it ourselves.\n var i,\n cloned = [],\n size,\n len = this.length;\n\n // Handle negative value for \"begin\"\n var start = begin || 0;\n start = start >= 0 ? start : Math.max(0, len + start);\n\n // Handle negative value for \"end\"\n var upTo = typeof end == 'number' ? Math.min(end, len) : len;\n if (end < 0) {\n upTo = len + end;\n }\n\n // Actual expected size of the slice\n size = upTo - start;\n\n if (size > 0) {\n cloned = new Array(size);\n if (this.charAt) {\n for (i = 0; i < size; i++) {\n cloned[i] = this.charAt(start + i);\n }\n } else {\n for (i = 0; i < size; i++) {\n cloned[i] = this[start + i];\n }\n }\n }\n\n return cloned;\n };\n }\n })();\n\n // Console-polyfill. MIT license. https://github.com/paulmillr/console-polyfill\n // Make it safe to do console.log() always.\n (function (con) {\n var prop, method;\n var empty = {};\n var dummy = function dummy() {};\n var properties = 'memory'.split(',');\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) {\n con[prop] = con[prop] || empty;\n }while (method = methods.pop()) {\n con[method] = con[method] || dummy;\n }\n })(window.console || {}); // Using `this` for web workers.\n\n\n // Modernizr style test\n if (!(window.webkitMatchMedia || window.mozMatchMedia || window.oMatchMedia || window.msMatchMedia || window.matchMedia)) {\n var root = document.getElementsByTagName('html')[0];\n root.className += ' no-matchmedia';\n }\n\n /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n window.matchMedia || (window.matchMedia = function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n\n var styleMedia = window.styleMedia || window.media;\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n script.parentNode.insertBefore(style, script);\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function matchMedium(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function (media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n }());\n\n /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n (function () {\n // Bail out for browsers that have addListener support\n if (window.matchMedia && window.matchMedia('all').addListener) {\n return false;\n }\n\n var localMatchMedia = window.matchMedia,\n hasMediaQueries = localMatchMedia('only all').matches,\n isListening = false,\n timeoutID = 0,\n // setTimeout for debouncing 'handleChange'\n queries = [],\n // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n handleChange = function handleChange(evt) {\n // Debounce\n clearTimeout(timeoutID);\n\n timeoutID = setTimeout(function () {\n for (var i = 0, il = queries.length; i < il; i++) {\n var mql = queries[i].mql,\n listeners = queries[i].listeners || [],\n matches = localMatchMedia(mql.media).matches;\n\n // Update mql.matches value and call listeners\n // Fire listeners only if transitioning to or from matched state\n if (matches !== mql.matches) {\n mql.matches = matches;\n\n for (var j = 0, jl = listeners.length; j < jl; j++) {\n listeners[j].call(window, mql);\n }\n }\n }\n }, 30);\n };\n\n window.matchMedia = function (media) {\n var mql = localMatchMedia(media),\n listeners = [],\n index = 0;\n\n mql.addListener = function (listener) {\n // Changes would not occur to css media type so return now (Affects IE <= 8)\n if (!hasMediaQueries) {\n return;\n }\n\n // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n // There should only ever be 1 resize listener running for performance\n if (!isListening) {\n isListening = true;\n window.addEventListener('resize', handleChange, true);\n }\n\n // Push object only if it has not been pushed already\n if (index === 0) {\n index = queries.push({\n mql: mql,\n listeners: listeners\n });\n }\n\n listeners.push(listener);\n };\n\n mql.removeListener = function (listener) {\n for (var i = 0, il = listeners.length; i < il; i++) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n }\n }\n };\n\n return mql;\n };\n })();\n\n // extend innerWidth ..\n var html = document.getElementsByTagName('html')[0];\n var body = document.getElementsByTagName('body')[0];\n\n /*\n if (!window.innerWidth) window.innerWidth = html.clientWidth;\n if (!window.innerHeight) window.innerHeight = html.clientHeight;\n if (!window.scrollX) window.scrollX = window.pageXOffset || html.scrollLeft;\n if (!window.scrollY) window.scrollY = window.pageYOffset || html.scrollTop;\n */\n}).call(window);\n/**\n * Refer to this by {@link ax5}.\n * @namespace ax5.ui\n */\n\n/**\n * @class ax5.ui.root\n * @classdesc ax5 ui class\n * @author tom@axisj.com\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * ```\n */\nax5.ui = function () {\n\n function axUi() {\n this.config = {};\n this.name = \"root\";\n\n /**\n * 클래스의 속성 정의 메소드 속성 확장후에 내부에 init 함수를 호출합니다.\n * @method ax5.ui.root.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Boolean} [callInit=true] - init 함수 호출 여부\n * @returns {ax5.ui.axUi}\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * myui.setConfig({\n * \tid:\"abcd\"\n * });\n * ```\n */\n this.setConfig = function (cfg, callInit) {\n jQuery.extend(true, this.config, cfg);\n if (typeof callInit == \"undefined\" || callInit === true) {\n this.init();\n }\n return this;\n };\n this.init = function () {\n console.log(this.config);\n };\n\n this.bindWindowResize = function (callBack) {\n setTimeout(function () {\n jQuery(window).resize(function () {\n if (this.bindWindowResize__) clearTimeout(this.bindWindowResize__);\n this.bindWindowResize__ = setTimeout(function () {\n callBack.call(this);\n }.bind(this), 10);\n }.bind(this));\n }.bind(this), 100);\n };\n\n this.stopEvent = function (e) {\n if (e.preventDefault) e.preventDefault();\n if (e.stopPropagation) e.stopPropagation();\n e.cancelBubble = true;\n return false;\n };\n\n this.toString = function () {\n return this.name + '@' + this.version;\n };\n\n // instance init\n this.main = function () {}.apply(this, arguments);\n }\n\n /**\n * @method ax5.ui.addClass\n * @param {Object} config\n * @param {String} config.className - name of Class\n * @param {Object} [config.classStore=ax5.ui] - 클래스가 저장될 경로\n * @param {Function} [config.superClass=ax5.ui.root]\n * @param {Function} cls - Class Function\n */\n function addClass(config, cls) {\n if (!config || !config.className) throw 'invalid call';\n var classStore = config.classStore ? config.classStore : ax5.ui;\n if (!classStore) throw 'invalid classStore';\n\n // make ui definition variable\n ax5.def[config.className] = {\n version: ax5.info.version\n };\n\n var factory = function factory(cls, arg) {\n switch (arg.length) {\n case 0:\n return new cls();\n break;\n case 1:\n return new cls(arg[0]);\n break;\n case 2:\n return new cls(arg[0], arg[1]);\n break;\n case 3:\n return new cls(arg[0], arg[1], arg[2]);\n break;\n }\n };\n var initInstance = function initInstance(name, version, instance) {\n instance.name = name;\n instance.version = version;\n instance.instanceId = ax5.getGuid();\n return instance;\n };\n var initPrototype = function initPrototype(cls) {\n var superClass = config.superClass ? config.superClass : ax5.ui.root;\n if (!ax5.util.isFunction(superClass)) throw 'invalid superClass';\n superClass.call(this); // 부모호출\n cls.prototype = new superClass(); // 상속\n };\n var wrapper = function wrapper() {\n if (!this || !(this instanceof wrapper)) throw 'invalid call';\n var instance = factory(cls, arguments);\n return initInstance(config.className, config.version || \"\", instance);\n };\n initPrototype.call(this, cls);\n classStore[config.className] = wrapper;\n }\n\n return {\n root: axUi,\n addClass: addClass\n };\n}();\n\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n * https://github.com/thomasJang/mustache.js -- imporove some variables\n */\n\n(function defineMustache(global, factory) {\n\n factory(global.mustache = {});\n})(window.ax5, function mustacheFactory(mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill(object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction(object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr(obj) {\n return isArray(obj) ? 'array' : typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty(obj, propName) {\n return obj != null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && propName in obj;\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''', '/': '/'\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate(template, tags) {\n if (!template) return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length) {\n delete tokens[spaces.pop()];\n }\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === 'string') tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push(['text', chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe)) break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe)) throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection) throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos() {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0) return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re),\n match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context(view, parentContext) {\n this.view = view;\n this.cache = {\n '.': this.view,\n '@each': function each() {\n var returns = [];\n for (var k in this) {\n returns.push({ '@key': k, '@value': this[k] });\n }\n return returns;\n }\n };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup(name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this,\n names,\n index,\n lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1) lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value)) value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer() {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache() {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse(template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null) tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render(template, view, partials) {\n var tokens = this.parse(template);\n var context = view instanceof Context ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate) {\n var buffer = '';\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);else if (symbol === '&') value = this.unescapedValue(token, context);else if (symbol === 'name') value = this.escapedValue(token, context);else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined) buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n if (value[j]) {\n if (_typeof(value[j]) === 'object') {\n value[j]['@i'] = j;\n value[j]['@first'] = j === 0;\n }\n\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n }\n } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string') throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null) buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || isArray(value) && value.length === 0) return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial(token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.1.3';\n mustache.tags = ['{{', '}}'];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render(template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' + 'but \"' + typeStr(template) + '\" was given as the first ' + 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html(template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n});","'use strict';\n\n// ax5.ui.mask\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var MASK = void 0;\n\n UI.addClass({\n className: \"mask\"\n }, function () {\n /**\n * @class ax5mask\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '
    ' +\n * '
    ' +\n * '
    ' +\n * ' {{{body}}}' +\n * '
    ' +\n * '
    ';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * var mask = new ax5.ui.mask();\n *\n * mask.open({\n * templateName: 'customMask',\n * content: 'custom MASK on target',\n * target: $(\"#user-content\").get(0),\n * onClick: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n theme: '',\n target: jQuery(document.body).get(0),\n animateTime: 250\n };\n this.maskContent = '';\n this.status = \"off\";\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n };\n var getBodyTmpl = function getBodyTmpl(data) {\n if (typeof data.templateName === \"undefined\") data.templateName = \"defaultMask\";\n return MASK.tmpl.get.call(this, data.templateName, data);\n };\n var setBody = function setBody(content) {\n this.maskContent = content;\n };\n\n /**\n * Preferences of Mask UI\n * @method ax5mask.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5mask}\n * @example\n * ```\n * setConfig({\n * target : {Element|AX5 nodelist}, // 마스크 처리할 대상\n * content : {String}, // 마스크안에 들어가는 내용물\n * onStateChanged: function(){} // 마스크 상태변경 시 호출되는 함수 this.type으로 예외처리 가능\n * }\n * ```\n */\n this.init = function () {\n // after setConfig();\n this.onStateChanged = cfg.onStateChanged;\n this.onClick = cfg.onClick;\n if (this.config.content) setBody.call(this, this.config.content);\n };\n\n /**\n * open mask\n * target 을 주지 않으면 기본적으로 body 에 마스크가 적용되고 원하는 타겟을 지정해서 마스크를 씌울 수 있습니다.\n * 기본 정의된 마스크 외에 사용자가 템플릿을 정의해서 마스크를 사용 가능합니다.\n * @method ax5mask.open\n * @param {Object} config\n * @param {String} config\n * @returns {ax5mask}\n * @example\n * ```js\n * my_mask.open({\n * target: document.body,\n * content: \"

    Loading..

    \",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"

    Loading..

    \",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n *\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '
    ' +\n * '
    ' +\n * '
    ' +\n * ' {{{body}}}' +\n * '
    ' +\n * '
    ';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"

    Loading..

    \",\n * \n * onStateChanged: function () {\n *\n * }\n * });\n * ```\n */\n this.open = function (options) {\n\n if (this.status === \"on\") this.close();\n if (options && options.content) setBody.call(this, options.content);\n if (options && typeof options.templateName === \"undefined\") options.templateName = \"defaultMask\";\n self.maskConfig = jQuery.extend(true, {}, this.config, options);\n\n var _cfg = self.maskConfig,\n target = _cfg.target,\n $target = jQuery(target),\n maskId = 'ax-mask-' + ax5.getGuid(),\n $mask = void 0,\n css = {},\n that = {},\n templateName = _cfg.templateName,\n body = getBodyTmpl({\n theme: _cfg.theme,\n maskId: maskId,\n body: this.maskContent,\n templateName: templateName\n });\n\n jQuery(document.body).append(body);\n\n // 마스크의 타겟이 html body 가 아니라면\n if (target && target !== jQuery(document.body).get(0)) {\n css = {\n position: _cfg.position || \"absolute\",\n left: $target.offset().left,\n top: $target.offset().top,\n width: $target.outerWidth(),\n height: $target.outerHeight()\n };\n\n $target.addClass(\"ax-masking\");\n\n // 마스크의 타겟이 html body가 아닌경우 window resize 이벤트를 추적하여 엘리먼트 마스크의 CSS 속성 변경\n jQuery(window).on(\"resize.ax5mask-\" + this.instanceId, function (_$target) {\n this.align();\n }.bind(this));\n }\n\n if (typeof self.maskConfig.zIndex !== \"undefined\") {\n css[\"z-index\"] = self.maskConfig.zIndex;\n }\n\n this.$mask = $mask = jQuery(\"#\" + maskId);\n this.$target = $target;\n this.status = \"on\";\n $mask.css(css);\n\n if (_cfg.onClick) {\n $mask.on(\"click\", function (e) {\n that = {\n self: self,\n state: \"open\",\n type: \"click\"\n };\n self.maskConfig.onClick.call(that, that);\n });\n }\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"open\"\n });\n\n options = null;\n _cfg = null;\n target = null;\n $target = null;\n maskId = null;\n $mask = null;\n css = null;\n that = null;\n templateName = null;\n body = null;\n\n return this;\n };\n\n /**\n * close mask\n * @method ax5mask.close\n * @param {Number} [_delay=0]\n * @returns {ax5mask}\n * @example\n * ```\n * my_mask.close();\n * ```\n */\n this.close = function (_delay) {\n if (this.$mask) {\n var _close = function _close() {\n this.status = \"off\";\n this.$mask.remove();\n this.$target.removeClass(\"ax-masking\");\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"close\"\n });\n\n jQuery(window).off(\"resize.ax5mask-\" + this.instanceId);\n };\n\n if (_delay) {\n setTimeout(function () {\n _close.call(this);\n }.bind(this), _delay);\n } else {\n _close.call(this);\n }\n }\n return this;\n };\n\n /**\n * @method ax5mask.fadeOut\n * @returns {ax5mask}\n */\n this.fadeOut = function () {\n if (this.$mask) {\n var _close = function _close() {\n this.status = \"off\";\n this.$mask.remove();\n this.$target.removeClass(\"ax-masking\");\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"close\"\n });\n\n jQuery(window).off(\"resize.ax5mask-\" + this.instanceId);\n };\n\n this.$mask.addClass(\"fade-out\");\n setTimeout(function () {\n _close.call(this);\n }.bind(this), cfg.animateTime);\n }\n return this;\n };\n\n /**\n * @method ax5mask.align\n * @returns {ax5mask}\n */\n this.align = function () {\n if (this.maskConfig && this.maskConfig.target && this.maskConfig.target !== jQuery(document.body).get(0)) {\n try {\n var css = {\n position: this.maskConfig.position || \"absolute\",\n left: this.$target.offset().left,\n top: this.$target.offset().top,\n width: this.$target.outerWidth(),\n height: this.$target.outerHeight()\n };\n this.$mask.css(css);\n } catch (e) {}\n }\n return this;\n };\n\n this.pullRequest = function () {\n console.log(\"test pullRequest01\");\n console.log(\"test pullRequest02\");\n };\n\n // 클래스 생성자\n this.main = function () {\n\n UI.mask_instance = UI.mask_instance || [];\n UI.mask_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n MASK = ax5.ui.mask;\n})();\n// ax5.ui.mask.tmpl\n(function () {\n\n var MASK = ax5.ui.mask;\n\n var defaultMask = function defaultMask(columnKeys) {\n return '\\n
    \\n
    \\n
    \\n
    \\n {{{body}}}\\n
    \\n
    \\n
    \\n ';\n };\n\n MASK.tmpl = {\n \"defaultMask\": defaultMask,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(MASK.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n/*\n * Copyright (c) 2016. tom@axisj.com\n * - github.com/thomasjang\n * - www.axisj.com\n */\n\n// ax5.ui.modal\n(function () {\n var UI = ax5.ui;\n var U = ax5.util;\n var MODAL = void 0;\n\n UI.addClass({\n className: \"modal\"\n }, function () {\n /**\n * @class ax5modal\n * @alias ax5.ui.modal\n * @author tom@axisj.com\n */\n return function () {\n var self = this,\n cfg = void 0,\n ENM = {\n mousedown: ax5.info.supportTouch ? \"touchstart\" : \"mousedown\",\n mousemove: ax5.info.supportTouch ? \"touchmove\" : \"mousemove\",\n mouseup: ax5.info.supportTouch ? \"touchend\" : \"mouseup\"\n },\n getMousePosition = function getMousePosition(e) {\n var mouseObj = e;\n if (\"changedTouches\" in e && e.changedTouches) {\n mouseObj = e.changedTouches[0];\n }\n return {\n clientX: mouseObj.clientX,\n clientY: mouseObj.clientY\n };\n };\n\n this.instanceId = ax5.getGuid();\n this.config = {\n id: \"ax5-modal-\" + this.instanceId,\n position: {\n left: \"center\",\n top: \"middle\",\n margin: 10\n },\n minimizePosition: \"bottom-right\",\n clickEventName: \"ontouchstart\" in document.documentElement ? \"touchstart\" : \"click\",\n theme: \"default\",\n width: 300,\n height: 400,\n closeToEsc: true,\n disableDrag: false,\n disableResize: false,\n animateTime: 250,\n iframe: false\n };\n this.activeModal = null;\n this.watingModal = false;\n this.$ = {}; // UI inside of the jQuery object store\n\n cfg = this.config; // extended config copy cfg\n\n var onStateChanged = function onStateChanged(opts, that) {\n var eventProcessor = {\n resize: function resize(that) {\n if (opts && opts.onResize) {\n opts.onResize.call(that, that);\n } else if (this.onResize) {\n this.onResize.call(that, that);\n }\n },\n move: function move() {}\n };\n if (that.state in eventProcessor) {\n eventProcessor[that.state].call(this, that);\n }\n\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n return true;\n },\n getContent = function getContent(modalId, opts) {\n var data = {\n modalId: modalId,\n theme: opts.theme,\n header: opts.header,\n fullScreen: opts.fullScreen ? \"fullscreen\" : \"\",\n styles: \"\",\n iframe: opts.iframe,\n iframeLoadingMsg: opts.iframeLoadingMsg,\n disableResize: opts.disableResize\n };\n\n if (opts.zIndex) {\n data.styles += \"z-index:\" + opts.zIndex + \";\";\n }\n if (opts.absolute) {\n data.styles += \"position:absolute;\";\n }\n\n if (data.iframe && typeof data.iframe.param === \"string\") {\n data.iframe.param = ax5.util.param(data.iframe.param);\n }\n\n return MODAL.tmpl.get.call(this, \"content\", data, {});\n },\n open = function open(opts, callback) {\n var that = void 0;\n jQuery(document.body).append(getContent.call(this, opts.id, opts));\n\n this.activeModal = jQuery(\"#\" + opts.id);\n // 파트수집\n this.$ = {\n root: this.activeModal,\n header: this.activeModal.find('[data-modal-els=\"header\"]'),\n body: this.activeModal.find('[data-modal-els=\"body\"]')\n };\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"] = this.activeModal.find('[data-modal-els=\"iframe-wrap\"]');\n this.$[\"iframe\"] = this.activeModal.find('[data-modal-els=\"iframe\"]');\n this.$[\"iframe-form\"] = this.activeModal.find('[data-modal-els=\"iframe-form\"]');\n this.$[\"iframe-loading\"] = this.activeModal.find('[data-modal-els=\"iframe-loading\"]');\n } else {\n this.$[\"body-frame\"] = this.activeModal.find('[data-modal-els=\"body-frame\"]');\n }\n\n //- position 정렬\n this.align();\n\n that = {\n self: this,\n id: opts.id,\n theme: opts.theme,\n width: opts.width,\n height: opts.height,\n state: \"open\",\n $: this.$\n };\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"].css({ height: opts.height });\n this.$[\"iframe\"].css({ height: opts.height });\n\n // iframe content load\n this.$[\"iframe-form\"].attr({ method: opts.iframe.method });\n this.$[\"iframe-form\"].attr({ target: opts.id + \"-frame\" });\n this.$[\"iframe-form\"].attr({ action: opts.iframe.url });\n this.$[\"iframe\"].on(\"load\", function () {\n that.state = \"load\";\n if (opts.iframeLoadingMsg) {\n this.$[\"iframe-loading\"].hide();\n }\n onStateChanged.call(this, opts, that);\n }.bind(this));\n if (!opts.iframeLoadingMsg) {\n this.$[\"iframe\"].show();\n }\n this.$[\"iframe-form\"].submit();\n }\n\n if (callback) callback.call(that, that);\n\n if (!this.watingModal) {\n onStateChanged.call(this, opts, that);\n }\n\n // bind key event\n if (opts.closeToEsc) {\n jQuery(window).bind(\"keydown.ax-modal\", function (e) {\n onkeyup.call(this, e || window.event);\n }.bind(this));\n }\n\n jQuery(window).bind(\"resize.ax-modal\", function (e) {\n this.align(null, e || window.event);\n }.bind(this));\n\n this.$.header.off(ENM[\"mousedown\"]).off(\"dragstart\").on(ENM[\"mousedown\"], function (e) {\n /// 이벤트 필터링 추가 : 버튼엘리먼트로 부터 발생된 이벤트이면 moveModal 시작하지 않도록 필터링\n var isButton = U.findParentNode(e.target, function (_target) {\n if (_target.getAttribute(\"data-modal-header-btn\")) {\n return true;\n }\n });\n\n if (!opts.isFullScreen && !isButton && opts.disableDrag != true) {\n self.mousePosition = getMousePosition(e);\n moveModal.on.call(self);\n }\n if (isButton) {\n btnOnClick.call(self, e || window.event, opts);\n }\n }).on(\"dragstart\", function (e) {\n U.stopEvent(e.originalEvent);\n return false;\n });\n\n this.activeModal.off(ENM[\"mousedown\"]).off(\"dragstart\").on(ENM[\"mousedown\"], \"[data-ax5modal-resizer]\", function (e) {\n if (opts.disableDrag || opts.isFullScreen) return false;\n self.mousePosition = getMousePosition(e);\n resizeModal.on.call(self, this.getAttribute(\"data-ax5modal-resizer\"));\n }).on(\"dragstart\", function (e) {\n U.stopEvent(e.originalEvent);\n return false;\n });\n },\n btnOnClick = function btnOnClick(e, opts, callback, target, k) {\n var that = void 0;\n if (e.srcElement) e.target = e.srcElement;\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-modal-header-btn\")) {\n return true;\n }\n });\n\n if (target) {\n k = target.getAttribute(\"data-modal-header-btn\");\n\n that = {\n self: this,\n key: k,\n value: opts.header.btns[k],\n dialogId: opts.id,\n btnTarget: target\n };\n\n if (opts.header.btns[k].onClick) {\n opts.header.btns[k].onClick.call(that, k);\n }\n }\n\n that = null;\n opts = null;\n callback = null;\n target = null;\n k = null;\n },\n onkeyup = function onkeyup(e) {\n if (e.keyCode == ax5.info.eventKeys.ESC) {\n this.close();\n }\n },\n alignProcessor = {\n \"top-left\": function topLeft() {\n this.align({ left: \"left\", top: \"top\" });\n },\n \"top-right\": function topRight() {\n this.align({ left: \"right\", top: \"top\" });\n },\n \"bottom-left\": function bottomLeft() {\n this.align({ left: \"left\", top: \"bottom\" });\n },\n \"bottom-right\": function bottomRight() {\n this.align({ left: \"right\", top: \"bottom\" });\n },\n \"center-middle\": function centerMiddle() {\n this.align({ left: \"center\", top: \"middle\" });\n }\n },\n moveModal = {\n on: function on() {\n var modalZIndex = this.activeModal.css(\"z-index\"),\n modalOffset = this.activeModal.offset(),\n modalBox = {\n width: this.activeModal.outerWidth(),\n height: this.activeModal.outerHeight()\n },\n windowBox = {\n width: jQuery(window).width(),\n height: jQuery(window).height(),\n scrollLeft: jQuery(document).scrollLeft(),\n scrollTop: jQuery(document).scrollTop()\n },\n getResizerPosition = function getResizerPosition(e) {\n self.__dx = e.clientX - self.mousePosition.clientX;\n self.__dy = e.clientY - self.mousePosition.clientY;\n\n /*\n if (minX > modalOffset.left + self.__dx) {\n self.__dx = -modalOffset.left;\n } else if (maxX < modalOffset.left + self.__dx) {\n self.__dx = maxX - modalOffset.left;\n }\n if (minY > modalOffset.top + self.__dy) {\n self.__dy = -modalOffset.top;\n } else if (maxY < modalOffset.top + self.__dy) {\n self.__dy = maxY - modalOffset.top;\n }\n */\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy\n };\n };\n\n var minX = 0,\n maxX = windowBox.width - modalBox.width,\n minY = 0,\n maxY = windowBox.height - modalBox.height;\n\n self.__dx = 0; // 변화량 X\n self.__dy = 0; // 변화량 Y\n\n // self.resizerBg : body 가 window보다 작을 때 문제 해결을 위한 DIV\n self.resizerBg = jQuery('
    ');\n self.resizer = jQuery('
    ');\n self.resizerBg.css({ zIndex: modalZIndex });\n self.resizer.css({\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height,\n zIndex: modalZIndex + 1\n });\n\n jQuery(document.body).append(self.resizerBg).append(self.resizer);\n\n self.activeModal.addClass(\"draged\");\n\n jQuery(document.body).on(ENM[\"mousemove\"] + \".ax5modal-move-\" + this.instanceId, function (e) {\n self.resizer.css(getResizerPosition(e));\n }).on(ENM[\"mouseup\"] + \".ax5modal-move-\" + this.instanceId, function (e) {\n moveModal.off.call(self);\n }).on(\"mouseleave.ax5modal-move-\" + this.instanceId, function (e) {\n moveModal.off.call(self);\n });\n\n jQuery(document.body).attr(\"unselectable\", \"on\").css(\"user-select\", \"none\").on(\"selectstart\", false);\n },\n off: function off() {\n var setModalPosition = function setModalPosition() {\n var box = this.resizer.offset();\n if (!this.modalConfig.absolute) {\n box.left -= jQuery(document).scrollLeft();\n box.top -= jQuery(document).scrollTop();\n }\n this.activeModal.css(box);\n this.modalConfig.left = box.left;\n this.modalConfig.top = box.top;\n\n box = null;\n };\n\n this.activeModal.removeClass(\"draged\");\n setModalPosition.call(this);\n\n this.resizer.remove();\n this.resizer = null;\n this.resizerBg.remove();\n this.resizerBg = null;\n //this.align();\n\n jQuery(document.body).off(ENM[\"mousemove\"] + \".ax5modal-move-\" + this.instanceId).off(ENM[\"mouseup\"] + \".ax5modal-move-\" + this.instanceId).off(\"mouseleave.ax5modal-move-\" + this.instanceId);\n\n jQuery(document.body).removeAttr(\"unselectable\").css(\"user-select\", \"auto\").off(\"selectstart\");\n\n onStateChanged.call(this, self.modalConfig, {\n self: this,\n state: \"move\"\n });\n }\n },\n resizeModal = {\n on: function on(resizerType) {\n var modalZIndex = this.activeModal.css(\"z-index\"),\n modalOffset = this.activeModal.offset(),\n modalBox = {\n width: this.activeModal.outerWidth(),\n height: this.activeModal.outerHeight()\n },\n windowBox = {\n width: jQuery(window).width(),\n height: jQuery(window).height(),\n scrollLeft: jQuery(document).scrollLeft(),\n scrollTop: jQuery(document).scrollTop()\n },\n resizerProcessor = {\n top: function top(e) {\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width,\n height: modalBox.height - self.__dy * 2\n };\n } else if (e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dy,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dy * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width,\n height: modalBox.height - self.__dy\n };\n }\n },\n bottom: function bottom(e) {\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey) {\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n\n return {\n left: modalOffset.left,\n top: modalOffset.top - self.__dy,\n width: modalBox.width,\n height: modalBox.height + self.__dy * 2\n };\n } else if (e.altKey) {\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dy,\n top: modalOffset.top - self.__dy,\n width: modalBox.width + self.__dy * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height + self.__dy\n };\n }\n },\n left: function left(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (e.shiftKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height\n };\n } else if (e.altKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dx,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height - self.__dx * 2\n };\n } else {\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx,\n height: modalBox.height\n };\n }\n },\n right: function right(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (e.shiftKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height\n };\n } else if (e.altKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top - self.__dx,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height + self.__dx * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width + self.__dx,\n height: modalBox.height\n };\n }\n },\n \"top-left\": function topLeft(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dx,\n height: modalBox.height - self.__dy\n };\n }\n },\n \"top-right\": function topRight(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width + self.__dx,\n height: modalBox.height - self.__dy\n };\n }\n },\n \"bottom-left\": function bottomLeft(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top - self.__dy,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx,\n height: modalBox.height + self.__dy\n };\n }\n },\n \"bottom-right\": function bottomRight(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top - self.__dy,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width + self.__dx,\n height: modalBox.height + self.__dy\n };\n }\n }\n },\n getResizerPosition = function getResizerPosition(e) {\n self.__dx = e.clientX - self.mousePosition.clientX;\n self.__dy = e.clientY - self.mousePosition.clientY;\n\n return resizerProcessor[resizerType](e);\n };\n\n var minWidth = 100,\n minHeight = 100;\n\n var cursorType = {\n top: \"row-resize\",\n bottom: \"row-resize\",\n left: \"col-resize\",\n right: \"col-resize\",\n \"top-left\": \"nwse-resize\",\n \"top-right\": \"nesw-resize\",\n \"bottom-left\": \"nesw-resize\",\n \"bottom-right\": \"nwse-resize\"\n };\n\n self.__dx = 0; // 변화량 X\n self.__dy = 0; // 변화량 Y\n\n // self.resizerBg : body 가 window보다 작을 때 문제 해결을 위한 DIV\n self.resizerBg = jQuery('
    ');\n self.resizer = jQuery('
    ');\n self.resizerBg.css({\n zIndex: modalZIndex,\n cursor: cursorType[resizerType]\n });\n self.resizer.css({\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height,\n zIndex: modalZIndex + 1,\n cursor: cursorType[resizerType]\n });\n jQuery(document.body).append(self.resizerBg).append(self.resizer);\n self.activeModal.addClass(\"draged\");\n\n jQuery(document.body).bind(ENM[\"mousemove\"] + \".ax5modal-resize-\" + this.instanceId, function (e) {\n self.resizer.css(getResizerPosition(e));\n }).bind(ENM[\"mouseup\"] + \".ax5modal-resize-\" + this.instanceId, function (e) {\n resizeModal.off.call(self);\n }).bind(\"mouseleave.ax5modal-resize-\" + this.instanceId, function (e) {\n resizeModal.off.call(self);\n });\n\n jQuery(document.body).attr(\"unselectable\", \"on\").css(\"user-select\", \"none\").bind(\"selectstart\", false);\n },\n off: function off() {\n var setModalPosition = function setModalPosition() {\n var box = this.resizer.offset();\n jQuery.extend(box, {\n width: this.resizer.width(),\n height: this.resizer.height()\n });\n if (!this.modalConfig.absolute) {\n box.left -= jQuery(document).scrollLeft();\n box.top -= jQuery(document).scrollTop();\n }\n this.activeModal.css(box);\n\n this.modalConfig.left = box.left;\n this.modalConfig.top = box.top;\n this.modalConfig.width = box.width;\n this.modalConfig.height = box.height;\n this.$[\"body\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n if (this.modalConfig.iframe) {\n this.$[\"iframe-wrap\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n this.$[\"iframe\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n }\n\n box = null;\n };\n\n this.activeModal.removeClass(\"draged\");\n setModalPosition.call(this);\n\n this.resizer.remove();\n this.resizer = null;\n this.resizerBg.remove();\n this.resizerBg = null;\n\n onStateChanged.call(this, self.modalConfig, {\n self: this,\n state: \"resize\"\n });\n\n jQuery(document.body).unbind(ENM[\"mousemove\"] + \".ax5modal-resize-\" + this.instanceId).unbind(ENM[\"mouseup\"] + \".ax5modal-resize-\" + this.instanceId).unbind(\"mouseleave.ax5modal-resize-\" + this.instanceId);\n\n jQuery(document.body).removeAttr(\"unselectable\").css(\"user-select\", \"auto\").unbind(\"selectstart\");\n }\n };\n\n /// private end\n\n /**\n * Preferences of modal UI\n * @method ax5modal.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Number} [config.zIndex]\n * @param {Object} [config.position]\n * @param {String} [config.position.left=\"center\"]\n * @param {String} [config.position.top=\"middle\"]\n * @param {Number} [config.position.margin=10]\n * @param {String} [config.minimizePosition=\"bottom-right\"]\n * @param {Number} [config.width=300]\n * @param {Number} [config.height=400]\n * @param {Boolean} [config.closeToEsc=true]\n * @param {Boolean} [config.absolute=false]\n * @param {Boolean} [config.disableDrag=false]\n * @param {Boolean} [config.disableResize=false]\n * @param {Number} [config.animateTime=250]\n * @param {Function} [config.fullScreen]\n * @param {Function} [config.onStateChanged] - `onStateChanged` function can be defined in setConfig method or new ax5.ui.modal initialization method. However, you can us to define an event function after initialization, if necessary\n * @param {Function} [config.onResize]\n * @returns {ax5modal}\n * @example\n * ```js\n * var modal = new ax5.ui.modal({\n * iframeLoadingMsg: '',\n * header: {\n * title: \"MODAL TITLE\",\n * btns: {\n * minimize: {\n * label: '', onClick: function () {\n * modal.minimize();\n * }\n * },\n * maximize: {\n * label: '', onClick: function () {\n * modal.maximize();\n * }\n * },\n * close: {\n * label: '', onClick: function () {\n * modal.close();\n * }\n * }\n * }\n * }\n * });\n *\n * modal.open({\n * width: 800,\n * height: 600,\n * fullScreen: function(){\n * return ($(window).width() < 600);\n * },\n * iframe: {\n * method: \"get\",\n * url: \"http://chequer-app:2017/html/login.html\",\n * param: \"callback=modalCallback\"\n * },\n * onStateChanged: function(){\n * console.log(this);\n * },\n * onResize: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n //== class body start\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n this.onResize = cfg.onResize;\n };\n\n /**\n * open the modal\n * @method ax5modal.open\n * @returns {ax5modal}\n * @example\n * ```\n * modal.open();\n * modal.open({\n * width: 500,\n * height: 500\n * });\n * moaal.open({}, function(){\n * console.log(this);\n * });\n * ```\n */\n this.open = function (opts, callback, tryCount) {\n if (typeof tryCount === \"undefined\") tryCount = 0;\n if (!this.activeModal) {\n opts = self.modalConfig = jQuery.extend(true, {}, cfg, opts);\n open.call(this, opts, callback);\n this.watingModal = false;\n } else if (tryCount < 3) {\n // 3번까지 재 시도\n this.watingModal = true;\n setTimeout(function () {\n this.open(opts, callback, tryCount + 1);\n }.bind(this), cfg.animateTime);\n } else {\n // 열기 시도 종료\n this.watingModal = false;\n }\n return this;\n };\n\n /**\n * close the modal\n * @method ax5modal.close\n * @param _option\n * @returns {ax5modal}\n * @example\n * ```\n * my_modal.close();\n * my_modal.close({callback: function(){\n * // on close event\n * });\n * // close 함수에 callback을 전달하면 정확한 close 타이밍을 캐치할 수 있습니다\n * ```\n */\n\n this.close = function (_option) {\n var opts = void 0,\n that = void 0;\n\n if (this.activeModal) {\n opts = self.modalConfig;\n this.activeModal.addClass(\"destroy\");\n jQuery(window).unbind(\"keydown.ax-modal\");\n jQuery(window).unbind(\"resize.ax-modal\");\n\n setTimeout(function () {\n // 프레임 제거\n if (opts.iframe) {\n var $iframe = this.$[\"iframe\"]; // iframe jQuery Object\n if ($iframe) {\n var iframeObject = $iframe.get(0),\n idoc = iframeObject.contentDocument ? iframeObject.contentDocument : iframeObject.contentWindow.document;\n\n try {\n $(idoc.body).children().each(function () {\n $(this).remove();\n });\n } catch (e) {}\n idoc.innerHTML = \"\";\n $iframe.attr(\"src\", \"about:blank\").remove();\n\n // force garbarge collection for IE only\n window.CollectGarbage && window.CollectGarbage();\n }\n }\n\n this.activeModal.remove();\n this.activeModal = null;\n\n // 모달 오픈 대기중이면 닫기 상태 전달 안함.\n if (!this.watingModal) {\n onStateChanged.call(this, opts, {\n self: this,\n state: \"close\"\n });\n }\n\n if (_option && U.isFunction(_option.callback)) {\n that = {\n self: this,\n id: opts.id,\n theme: opts.theme,\n width: opts.width,\n height: opts.height,\n state: \"close\",\n $: this.$\n };\n _option.callback.call(that, that);\n }\n }.bind(this), cfg.animateTime);\n }\n\n this.minimized = false; // hoksi\n\n return this;\n };\n\n /**\n * @method ax5modal.minimize\n * @returns {ax5modal}\n */\n this.minimize = function () {\n return function (minimizePosition) {\n if (this.minimized !== true) {\n var opts = self.modalConfig;\n if (typeof minimizePosition === \"undefined\") minimizePosition = cfg.minimizePosition;\n\n this.minimized = true;\n this.$.body.hide();\n self.modalConfig.originalHeight = opts.height;\n self.modalConfig.height = 0;\n alignProcessor[minimizePosition].call(this);\n\n onStateChanged.call(this, opts, {\n self: this,\n state: \"minimize\"\n });\n }\n\n return this;\n };\n }();\n\n /**\n * @method ax5modal.restore\n * @returns {ax5modal}\n */\n this.restore = function () {\n var opts = self.modalConfig;\n if (this.minimized) {\n this.minimized = false;\n this.$.body.show();\n self.modalConfig.height = self.modalConfig.originalHeight;\n self.modalConfig.originalHeight = undefined;\n\n this.align({ left: \"center\", top: \"middle\" });\n onStateChanged.call(this, opts, {\n self: this,\n state: \"restore\"\n });\n }\n return this;\n };\n\n /**\n * setCSS\n * @method ax5modal.css\n * @param {Object} css -\n * @returns {ax5modal}\n */\n this.css = function (css) {\n if (this.activeModal && !self.fullScreen) {\n this.activeModal.css(css);\n if (typeof css.width !== \"undefined\") {\n self.modalConfig.width = css.width;\n }\n if (typeof css.height !== \"undefined\") {\n self.modalConfig.height = css.height;\n }\n\n this.align();\n }\n return this;\n };\n\n /**\n * @method ax5modal.setModalConfig\n * @param _config\n * @returns {ax5.ui.ax5modal}\n */\n this.setModalConfig = function (_config) {\n self.modalConfig = jQuery.extend({}, self.modalConfig, _config);\n this.align();\n return this;\n };\n\n /**\n * @method ax5modal.align\n * @param position\n * @param e\n * @returns {ax5modal}\n * @example\n * ```js\n * modal.align({left:\"center\", top:\"middle\"});\n * modal.align({left:\"left\", top:\"top\", margin: 20});\n * ```\n */\n this.align = function () {\n return function (position, e) {\n if (!this.activeModal) return this;\n\n var opts = self.modalConfig,\n box = {\n width: opts.width,\n height: opts.height\n };\n\n var fullScreen = opts.isFullScreen = function (_fullScreen) {\n if (typeof _fullScreen === \"undefined\") {\n return false;\n } else if (U.isFunction(_fullScreen)) {\n return _fullScreen();\n }\n }(opts.fullScreen);\n\n if (fullScreen) {\n if (opts.header) this.$.header.show();\n if (opts.header) {\n opts.headerHeight = this.$.header.outerHeight();\n box.height += opts.headerHeight;\n } else {\n opts.headerHeight = 0;\n }\n box.width = jQuery(window).width();\n box.height = opts.height;\n box.left = 0;\n box.top = 0;\n } else {\n if (opts.header) this.$.header.show();\n if (position) {\n jQuery.extend(true, opts.position, position);\n }\n\n if (opts.header) {\n opts.headerHeight = this.$.header.outerHeight();\n box.height += opts.headerHeight;\n } else {\n opts.headerHeight = 0;\n }\n\n //- position 정렬\n if (opts.position.left == \"left\") {\n box.left = opts.position.margin || 0;\n } else if (opts.position.left == \"right\") {\n // window.innerWidth;\n box.left = jQuery(window).width() - box.width - (opts.position.margin || 0);\n } else if (opts.position.left == \"center\") {\n box.left = jQuery(window).width() / 2 - box.width / 2;\n } else {\n box.left = opts.position.left || 0;\n }\n\n if (opts.position.top == \"top\") {\n box.top = opts.position.margin || 0;\n } else if (opts.position.top == \"bottom\") {\n box.top = jQuery(window).height() - box.height - (opts.position.margin || 0);\n } else if (opts.position.top == \"middle\") {\n box.top = jQuery(window).height() / 2 - box.height / 2;\n } else {\n box.top = opts.position.top || 0;\n }\n if (box.left < 0) box.left = 0;\n if (box.top < 0) box.top = 0;\n\n if (opts.absolute) {\n box.top += jQuery(window).scrollTop();\n box.left += jQuery(window).scrollLeft();\n }\n }\n\n this.activeModal.css(box);\n\n this.$[\"body\"].css({\n height: box.height - (opts.headerHeight || 0)\n });\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"].css({\n height: box.height - opts.headerHeight\n });\n this.$[\"iframe\"].css({ height: box.height - opts.headerHeight });\n } else {}\n return this;\n };\n }();\n\n // 클래스 생성자\n this.main = function () {\n UI.modal_instance = UI.modal_instance || [];\n UI.modal_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n MODAL = ax5.ui.modal;\n})();\n\n// ax5.ui.modal.tmpl\n(function () {\n var MODAL = ax5.ui.modal;\n\n var content = function content() {\n return \" \\n
    \\n {{#header}}\\n
    \\n {{{title}}}\\n {{#btns}}\\n
    \\n {{#@each}}\\n \\n {{/@each}}\\n
    \\n {{/btns}}\\n
    \\n {{/header}}\\n
    \\n {{#iframe}}\\n
    \\n
    {{{iframeLoadingMsg}}}
    \\n \\n
    \\n
    \\n \\n {{#param}}\\n {{#@each}}\\n \\n {{/@each}}\\n {{/param}}\\n
    \\n {{/iframe}}\\n {{^iframe}}\\n
    \\n {{/iframe}}\\n
    \\n {{^disableResize}}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{/disableResize}}\\n
    \\n \";\n };\n\n MODAL.tmpl = {\n \"content\": content,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(MODAL.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.toast\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var TOAST;\n\n UI.addClass({\n className: \"toast\"\n }, function () {\n /**\n * @class ax5toast\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```\n * ```js\n * var toast = new ax5.ui.toast();\n * toast.setConfig({\n * icon: '',\n * containerPosition: \"bottom-right\",\n * closeIcon: ''\n * });\n *\n * toast.onStateChanged = function(){\n * console.log(this);\n * };\n *\n * toast.push({\n * icon: '',\n * msg:\"999999\"\n * });\n *\n * toast.push({\n * theme: theme,\n * msg: 'toast message'\n * });\n * ```\n */\n var ax5toast = function ax5toast() {\n var self = this,\n cfg,\n toastSeq = 0,\n toastSeqClear = null;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n clickEventName: \"click\", //(('ontouchstart' in document.documentElement) ? \"touchstart\" : \"click\"),\n theme: 'default',\n width: 300,\n icon: '',\n closeIcon: '',\n msg: '',\n lang: {\n \"ok\": \"ok\", \"cancel\": \"cancel\"\n },\n displayTime: 3000,\n animateTime: 250,\n containerPosition: \"bottom-left\"\n };\n this.toastContainer = null;\n this.queue = [];\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n },\n\n /**\n * @method ax5toast.getContent\n * @param {String} toastId\n * @param {Object} opts\n * @returns toastDisplay\n * @example\n * ```js\n * ax5toast.getContent('ax5-toast-3-1', opts);\n * ```\n */\n getContent = function getContent(toastId, opts) {\n\n var data = {\n toastId: toastId,\n theme: opts.theme,\n icon: opts.icon,\n msg: (opts.msg || \"\").replace(/\\n/g, \"
    \"),\n btns: opts.btns,\n closeIcon: opts.closeIcon\n };\n\n try {\n return TOAST.tmpl.get.call(this, \"toastDisplay\", data);\n } finally {\n toastId = null;\n data = null;\n }\n },\n\n /**\n * @method ax5toast.open\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n open = function open(opts, callBack) {\n if (toastSeqClear) clearTimeout(toastSeqClear);\n\n var toastBox,\n box = {\n width: opts.width\n };\n\n opts.id = 'ax5-toast-' + self.containerId + '-' + ++toastSeq;\n if (jQuery('#' + opts.id).get(0)) return this;\n\n if (U.left(cfg.containerPosition, '-') == 'bottom') {\n this.toastContainer.append(getContent(opts.id, opts));\n } else {\n this.toastContainer.prepend(getContent(opts.id, opts));\n }\n\n toastBox = jQuery('#' + opts.id);\n toastBox.css({ width: box.width });\n opts.toastBox = toastBox;\n this.queue.push(opts);\n\n onStateChanged.call(this, opts, {\n self: this,\n state: \"open\",\n toastId: opts.id\n });\n\n if (opts.toastType === \"push\") {\n // 자동 제거 타이머 시작\n setTimeout(function () {\n this.close(opts, callBack);\n }.bind(this), cfg.displayTime);\n\n toastBox.find(\"[data-ax-toast-btn]\").on(cfg.clickEventName, function (e) {\n btnOnClick.call(this, e || window.event, opts, toastBox, callBack);\n }.bind(this));\n } else if (opts.toastType === \"confirm\") {\n toastBox.find(\"[data-ax-toast-btn]\").on(cfg.clickEventName, function (e) {\n btnOnClick.call(this, e || window.event, opts, toastBox, callBack);\n }.bind(this));\n }\n\n box = null;\n },\n btnOnClick = function btnOnClick(e, opts, toastBox, callBack, target, k) {\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-ax-toast-btn\")) {\n return true;\n }\n });\n\n if (target) {\n k = target.getAttribute(\"data-ax-toast-btn\");\n\n var that = {\n key: k, value: opts.btns ? opts.btns[k] : k,\n toastId: opts.id,\n btn_target: target\n };\n\n if (opts.btns && opts.btns[k].onClick) {\n opts.btns[k].onClick.call(that, k);\n } else if (opts.toastType === \"push\") {\n if (callBack) callBack.call(that, k);\n this.close(opts, callBack);\n } else if (opts.toastType === \"confirm\") {\n if (callBack) callBack.call(that, k);\n this.close(opts, callBack);\n }\n }\n\n e = null;\n opts = null;\n toastBox = null;\n callBack = null;\n target = null;\n k = null;\n };\n\n /**\n * Preferences of toast UI\n * @method ax5toast.set_config\n * @param {Object} config - 클래스 속성값\n * @returns {ax5toast}\n * @example\n * ```\n * ```\n */\n //== class body start\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n // after set_config();\n self.containerId = ax5.getGuid();\n var styles = [];\n if (cfg.zIndex) {\n styles.push(\"z-index:\" + cfg.zIndex);\n }\n jQuery(document.body).append('
    ');\n this.toastContainer = jQuery('[data-toast-container=\"' + self.containerId + '\"]');\n };\n\n /**\n * @method ax5toast.push\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n this.push = function (opts, callBack) {\n if (!self.containerId) {\n this.init();\n }\n if (U.isString(opts)) {\n opts = {\n title: cfg.title,\n msg: opts\n };\n }\n opts.toastType = \"push\";\n\n self.dialogConfig = {};\n jQuery.extend(true, self.dialogConfig, cfg, opts);\n opts = self.dialogConfig;\n\n open.call(this, opts, callBack);\n\n opts = null;\n callBack = null;\n return this;\n };\n\n /**\n * @method ax5toast.confirm\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n this.confirm = function (opts, callBack) {\n if (!self.containerId) {\n this.init();\n }\n if (U.isString(opts)) {\n opts = {\n title: cfg.title,\n msg: opts\n };\n }\n opts.toastType = \"confirm\";\n\n self.dialogConfig = {};\n jQuery.extend(true, self.dialogConfig, cfg, opts);\n opts = self.dialogConfig;\n\n if (typeof opts.btns === \"undefined\") {\n opts.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: opts.theme }\n };\n }\n open.call(this, opts, callBack);\n\n opts = null;\n callBack = null;\n return this;\n };\n\n /**\n * close the toast\n * @method ax5toast.close\n * @returns {ax5toast}\n * @example\n * ```\n * my_toast.close();\n * ```\n */\n this.close = function (opts, callBack) {\n if (typeof opts === \"undefined\") {\n opts = U.last(this.queue);\n }\n\n var toastBox = opts.toastBox;\n toastBox.addClass(opts.toastType == \"push\" ? \"removed\" : \"destroy\");\n this.queue = U.filter(this.queue, function () {\n return opts.id != this.id;\n });\n setTimeout(function () {\n var that = {\n toastId: opts.id\n };\n\n toastBox.remove();\n if (callBack) callBack.call(that);\n\n that = {\n self: this,\n state: \"close\",\n toastId: opts.id\n };\n onStateChanged.call(this, opts, that);\n\n // 3초후에도 아무 일이 없다면 완전히 제거\n if (this.queue.length === 0) {\n if (toastSeqClear) clearTimeout(toastSeqClear);\n toastSeqClear = setTimeout(function () {\n /// console.log(\"try clear seq\");\n if (this.queue.length === 0) toastSeq = 0;\n }.bind(this), 3000);\n }\n\n that = null;\n opts = null;\n callBack = null;\n toastBox = null;\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n // 클래스 생성자\n this.main = function () {\n\n UI.toast_instance = UI.toast_instance || [];\n UI.toast_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n return ax5toast;\n }());\n TOAST = ax5.ui.toast;\n})();\n// ax5.ui.toast.tmpl\n(function () {\n\n var TOAST = ax5.ui.toast;\n\n var toastDisplay = function toastDisplay(columnKeys) {\n return \"\\n
    \\n {{#icon}}\\n
    {{{.}}}
    \\n {{/icon}}\\n
    {{{msg}}}
    \\n {{#btns}}\\n
    \\n
    \\n {{#@each}}\\n \\n {{/@each}}\\n
    \\n
    \\n {{/btns}}\\n {{^btns}}\\n {{{closeIcon}}}\\n {{/btns}}\\n
    \\n
    \";\n };\n\n TOAST.tmpl = {\n \"toastDisplay\": toastDisplay,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(TOAST.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","/*! jQuery UI - v1.12.1 - 2018-10-29\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, keycode.js, scroll-parent.js, unique-id.js, widgets/sortable.js, widgets/autocomplete.js, widgets/datepicker.js, widgets/menu.js, widgets/mouse.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"
    \",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"
    \" +\n\t\t\t\t\"
    \" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n\n/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"\" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? \"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \" \", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\t$( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an ');\r\n else\r\n lyr1 = $('
    ');\r\n\r\n if (opts.theme)\r\n lyr2 = $('
    ');\r\n else\r\n lyr2 = $('
    ');\r\n\r\n if (opts.theme && full) {\r\n s = '';\r\n }\r\n else if (opts.theme) {\r\n s = '';\r\n }\r\n else if (full) {\r\n s = '';\r\n }\r\n else {\r\n s = '';\r\n }\r\n lyr3 = $(s);\r\n\r\n // if we have a message, style it\r\n if (msg) {\r\n if (opts.theme) {\r\n lyr3.css(themedCSS);\r\n lyr3.addClass('ui-widget-content');\r\n }\r\n else\r\n lyr3.css(css);\r\n }\r\n\r\n // style the overlay\r\n if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\r\n lyr2.css(opts.overlayCSS);\r\n lyr2.css('position', full ? 'fixed' : 'absolute');\r\n\r\n // make iframe layer transparent in IE\r\n if (msie || opts.forceIframe)\r\n lyr1.css('opacity',0.0);\r\n\r\n //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\r\n var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\r\n $.each(layers, function() {\r\n this.appendTo($par);\r\n });\r\n\r\n if (opts.theme && opts.draggable && $.fn.draggable) {\r\n lyr3.draggable({\r\n handle: '.ui-dialog-titlebar',\r\n cancel: 'li'\r\n });\r\n }\r\n\r\n // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\r\n var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\r\n if (ie6 || expr) {\r\n // give body 100% height\r\n if (full && opts.allowBodyStretch && $.support.boxModel)\r\n $('html,body').css('height','100%');\r\n\r\n // fix ie6 issue when blocked element has a border width\r\n if ((ie6 || !$.support.boxModel) && !full) {\r\n var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\r\n var fixT = t ? '(0 - '+t+')' : 0;\r\n var fixL = l ? '(0 - '+l+')' : 0;\r\n }\r\n\r\n // simulate fixed position\r\n $.each(layers, function(i,o) {\r\n var s = o[0].style;\r\n s.position = 'absolute';\r\n if (i < 2) {\r\n if (full)\r\n s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\r\n else\r\n s.setExpression('height','this.parentNode.offsetHeight + \"px\"');\r\n if (full)\r\n s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\r\n else\r\n s.setExpression('width','this.parentNode.offsetWidth + \"px\"');\r\n if (fixL) s.setExpression('left', fixL);\r\n if (fixT) s.setExpression('top', fixT);\r\n }\r\n else if (opts.centerY) {\r\n if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\r\n s.marginTop = 0;\r\n }\r\n else if (!opts.centerY && full) {\r\n var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\r\n var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\r\n s.setExpression('top',expression);\r\n }\r\n });\r\n }\r\n\r\n // show the message\r\n if (msg) {\r\n if (opts.theme)\r\n lyr3.find('.ui-widget-content').append(msg);\r\n else\r\n lyr3.append(msg);\r\n if (msg.jquery || msg.nodeType)\r\n $(msg).show();\r\n }\r\n\r\n if ((msie || opts.forceIframe) && opts.showOverlay)\r\n lyr1.show(); // opacity is zero\r\n if (opts.fadeIn) {\r\n var cb = opts.onBlock ? opts.onBlock : noOp;\r\n var cb1 = (opts.showOverlay && !msg) ? cb : noOp;\r\n var cb2 = msg ? cb : noOp;\r\n if (opts.showOverlay)\r\n lyr2._fadeIn(opts.fadeIn, cb1);\r\n if (msg)\r\n lyr3._fadeIn(opts.fadeIn, cb2);\r\n }\r\n else {\r\n if (opts.showOverlay)\r\n lyr2.show();\r\n if (msg)\r\n lyr3.show();\r\n if (opts.onBlock)\r\n opts.onBlock.bind(lyr3)();\r\n }\r\n\r\n // bind key and mouse events\r\n bind(1, el, opts);\r\n\r\n if (full) {\r\n pageBlock = lyr3[0];\r\n pageBlockEls = $(opts.focusableElements,pageBlock);\r\n if (opts.focusInput)\r\n setTimeout(focus, 20);\r\n }\r\n else\r\n center(lyr3[0], opts.centerX, opts.centerY);\r\n\r\n if (opts.timeout) {\r\n // auto-unblock\r\n var to = setTimeout(function() {\r\n if (full)\r\n $.unblockUI(opts);\r\n else\r\n $(el).unblock(opts);\r\n }, opts.timeout);\r\n $(el).data('blockUI.timeout', to);\r\n }\r\n }\r\n\r\n // remove the block\r\n function remove(el, opts) {\r\n var count;\r\n var full = (el == window);\r\n var $el = $(el);\r\n var data = $el.data('blockUI.history');\r\n var to = $el.data('blockUI.timeout');\r\n if (to) {\r\n clearTimeout(to);\r\n $el.removeData('blockUI.timeout');\r\n }\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n bind(0, el, opts); // unbind events\r\n\r\n if (opts.onUnblock === null) {\r\n opts.onUnblock = $el.data('blockUI.onUnblock');\r\n $el.removeData('blockUI.onUnblock');\r\n }\r\n\r\n var els;\r\n if (full) // crazy selector to handle odd field errors in ie6/7\r\n els = $('body').children().filter('.blockUI').add('body > .blockUI');\r\n else\r\n els = $el.find('>.blockUI');\r\n\r\n // fix cursor issue\r\n if ( opts.cursorReset ) {\r\n if ( els.length > 1 )\r\n els[1].style.cursor = opts.cursorReset;\r\n if ( els.length > 2 )\r\n els[2].style.cursor = opts.cursorReset;\r\n }\r\n\r\n if (full)\r\n pageBlock = pageBlockEls = null;\r\n\r\n if (opts.fadeOut) {\r\n count = els.length;\r\n els.stop().fadeOut(opts.fadeOut, function() {\r\n if ( --count === 0)\r\n reset(els,data,opts,el);\r\n });\r\n }\r\n else\r\n reset(els, data, opts, el);\r\n }\r\n\r\n // move blocking element back into the DOM where it started\r\n function reset(els,data,opts,el) {\r\n var $el = $(el);\r\n if ( $el.data('blockUI.isBlocked') )\r\n return;\r\n\r\n els.each(function(i,o) {\r\n // remove via DOM calls so we don't lose event handlers\r\n if (this.parentNode)\r\n this.parentNode.removeChild(this);\r\n });\r\n\r\n if (data && data.el) {\r\n data.el.style.display = data.display;\r\n data.el.style.position = data.position;\r\n data.el.style.cursor = 'default'; // #59\r\n if (data.parent)\r\n data.parent.appendChild(data.el);\r\n $el.removeData('blockUI.history');\r\n }\r\n\r\n if ($el.data('blockUI.static')) {\r\n $el.css('position', 'static'); // #22\r\n }\r\n\r\n if (typeof opts.onUnblock == 'function')\r\n opts.onUnblock(el,opts);\r\n\r\n // fix issue in Safari 6 where block artifacts remain until reflow\r\n var body = $(document.body), w = body.width(), cssW = body[0].style.width;\r\n body.width(w-1).width(w);\r\n body[0].style.width = cssW;\r\n }\r\n\r\n // bind/unbind the handler\r\n function bind(b, el, opts) {\r\n var full = el == window, $el = $(el);\r\n\r\n // don't bother unbinding if there is nothing to unbind\r\n if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\r\n return;\r\n\r\n $el.data('blockUI.isBlocked', b);\r\n\r\n // don't bind events when overlay is not in use or if bindEvents is false\r\n if (!full || !opts.bindEvents || (b && !opts.showOverlay))\r\n return;\r\n\r\n // bind anchors and inputs for mouse and key events\r\n var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\r\n if (b)\r\n $(document).bind(events, opts, handler);\r\n else\r\n $(document).unbind(events, handler);\r\n\r\n // former impl...\r\n //\t\tvar $e = $('a,:input');\r\n //\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\r\n }\r\n\r\n // event handler to suppress keyboard/mouse events when blocking\r\n function handler(e) {\r\n // allow tab navigation (conditionally)\r\n if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\r\n if (pageBlock && e.data.constrainTabKey) {\r\n var els = pageBlockEls;\r\n var fwd = !e.shiftKey && e.target === els[els.length-1];\r\n var back = e.shiftKey && e.target === els[0];\r\n if (fwd || back) {\r\n setTimeout(function(){focus(back);},10);\r\n return false;\r\n }\r\n }\r\n }\r\n var opts = e.data;\r\n var target = $(e.target);\r\n if (target.hasClass('blockOverlay') && opts.onOverlayClick)\r\n opts.onOverlayClick(e);\r\n\r\n // allow events within the message content\r\n if (target.parents('div.' + opts.blockMsgClass).length > 0)\r\n return true;\r\n\r\n // allow events for content that is not being blocked\r\n return target.parents().children().filter('div.blockUI').length === 0;\r\n }\r\n\r\n function focus(back) {\r\n if (!pageBlockEls)\r\n return;\r\n var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\r\n if (e)\r\n e.focus();\r\n }\r\n\r\n function center(el, x, y) {\r\n var p = el.parentNode, s = el.style;\r\n var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\r\n var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\r\n if (x) s.left = l > 0 ? (l+'px') : '0';\r\n if (y) s.top = t > 0 ? (t+'px') : '0';\r\n }\r\n\r\n function sz(el, p) {\r\n return parseInt($.css(el,p),10)||0;\r\n }\r\n\r\n }\r\n\r\n\r\n /*global define:true */\r\n if (typeof define === 'function' && define.amd && define.amd.jQuery) {\r\n define(['jquery'], setup);\r\n } else {\r\n setup(jQuery);\r\n }\r\n\r\n})();","/*!\r\n * v0.1.5\r\n * Copyright (c) 2014 First Opinion\r\n * formatter.js is open sourced under the MIT license.\r\n *\r\n * thanks to digitalBush/jquery.maskedinput for some of the trickier\r\n * keycode handling\r\n */ \r\n\r\n//\r\n// Uses CommonJS, AMD or browser globals to create a jQuery plugin.\r\n//\r\n// Similar to jqueryPlugin.js but also tries to\r\n// work in a CommonJS environment.\r\n// It is unlikely jQuery will run in a CommonJS\r\n// environment. See jqueryPlugin.js if you do\r\n// not want to add the extra CommonJS detection.\r\n//\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(['jQuery'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jQuery'));\r\n } else {\r\n // Browser globals\r\n factory(root.jQuery);\r\n }\r\n}(this, function (jQuery) {\r\n\r\n\r\n/*\r\n * pattern.js\r\n *\r\n * Utilities to parse str pattern and return info\r\n *\r\n */\r\nvar pattern = function () {\r\n // Define module\r\n var pattern = {};\r\n // Match information\r\n var DELIM_SIZE = 4;\r\n // Our regex used to parse\r\n var regexp = new RegExp('{{([^}]+)}}', 'g');\r\n //\r\n // Helper method to parse pattern str\r\n //\r\n var getMatches = function (pattern) {\r\n // Populate array of matches\r\n var matches = [], match;\r\n while (match = regexp.exec(pattern)) {\r\n matches.push(match);\r\n }\r\n return matches;\r\n };\r\n //\r\n // Create an object holding all formatted characters\r\n // with corresponding positions\r\n //\r\n pattern.parse = function (pattern) {\r\n // Our obj to populate\r\n var info = {\r\n inpts: {},\r\n chars: {}\r\n };\r\n // Pattern information\r\n var matches = getMatches(pattern), pLength = pattern.length;\r\n // Counters\r\n var mCount = 0, iCount = 0, i = 0;\r\n // Add inpts, move to end of match, and process\r\n var processMatch = function (val) {\r\n var valLength = val.length;\r\n for (var j = 0; j < valLength; j++) {\r\n info.inpts[iCount] = val.charAt(j);\r\n iCount++;\r\n }\r\n mCount++;\r\n i += val.length + DELIM_SIZE - 1;\r\n };\r\n // Process match or add chars\r\n for (i; i < pLength; i++) {\r\n if (mCount < matches.length && i === matches[mCount].index) {\r\n processMatch(matches[mCount][1]);\r\n } else {\r\n info.chars[i - mCount * DELIM_SIZE] = pattern.charAt(i);\r\n }\r\n }\r\n // Set mLength and return\r\n info.mLength = i - mCount * DELIM_SIZE;\r\n return info;\r\n };\r\n // Expose\r\n return pattern;\r\n }();\r\n/*\r\n * utils.js\r\n *\r\n * Independent helper methods (cross browser, etc..)\r\n *\r\n */\r\nvar utils = function () {\r\n // Define module\r\n var utils = {};\r\n // Useragent info for keycode handling\r\n var uAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;\r\n //\r\n // Shallow copy properties from n objects to destObj\r\n //\r\n utils.extend = function (destObj) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n for (var key in arguments[i]) {\r\n destObj[key] = arguments[i][key];\r\n }\r\n }\r\n return destObj;\r\n };\r\n //\r\n // Add a given character to a string at a defined pos\r\n //\r\n utils.addChars = function (str, chars, pos) {\r\n return str.substr(0, pos) + chars + str.substr(pos, str.length);\r\n };\r\n //\r\n // Remove a span of characters\r\n //\r\n utils.removeChars = function (str, start, end) {\r\n return str.substr(0, start) + str.substr(end, str.length);\r\n };\r\n //\r\n // Return true/false is num false between bounds\r\n //\r\n utils.isBetween = function (num, bounds) {\r\n bounds.sort(function (a, b) {\r\n return a - b;\r\n });\r\n return num > bounds[0] && num < bounds[1];\r\n };\r\n //\r\n // Helper method for cross browser event listeners\r\n //\r\n utils.addListener = function (el, evt, handler) {\r\n return typeof el.addEventListener !== 'undefined' ? el.addEventListener(evt, handler, false) : el.attachEvent('on' + evt, handler);\r\n };\r\n //\r\n // Helper method for cross browser implementation of preventDefault\r\n //\r\n utils.preventDefault = function (evt) {\r\n return evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;\r\n };\r\n //\r\n // Helper method for cross browser implementation for grabbing\r\n // clipboard data\r\n //\r\n utils.getClip = function (evt) {\r\n if (evt.clipboardData) {\r\n return evt.clipboardData.getData('Text');\r\n }\r\n if (window.clipboardData) {\r\n return window.clipboardData.getData('Text');\r\n }\r\n };\r\n //\r\n // Loop over object and checking for matching properties\r\n //\r\n utils.getMatchingKey = function (which, keyCode, keys) {\r\n // Loop over and return if matched.\r\n for (var k in keys) {\r\n var key = keys[k];\r\n if (which === key.which && keyCode === key.keyCode) {\r\n return k;\r\n }\r\n }\r\n };\r\n //\r\n // Returns true/false if k is a del keyDown\r\n //\r\n utils.isDelKeyDown = function (which, keyCode) {\r\n var keys = {\r\n 'backspace': {\r\n 'which': 8,\r\n 'keyCode': 8\r\n },\r\n 'delete': {\r\n 'which': 46,\r\n 'keyCode': 46\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n //\r\n // Returns true/false if k is a del keyPress\r\n //\r\n utils.isDelKeyPress = function (which, keyCode) {\r\n var keys = {\r\n 'backspace': {\r\n 'which': 8,\r\n 'keyCode': 8,\r\n 'shiftKey': false\r\n },\r\n 'delete': {\r\n 'which': 0,\r\n 'keyCode': 46\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n // //\r\n // // Determine if keydown relates to specialKey\r\n // //\r\n // utils.isSpecialKeyDown = function (which, keyCode) {\r\n // var keys = {\r\n // 'tab': { 'which': 9, 'keyCode': 9 },\r\n // 'enter': { 'which': 13, 'keyCode': 13 },\r\n // 'end': { 'which': 35, 'keyCode': 35 },\r\n // 'home': { 'which': 36, 'keyCode': 36 },\r\n // 'leftarrow': { 'which': 37, 'keyCode': 37 },\r\n // 'uparrow': { 'which': 38, 'keyCode': 38 },\r\n // 'rightarrow': { 'which': 39, 'keyCode': 39 },\r\n // 'downarrow': { 'which': 40, 'keyCode': 40 },\r\n // 'F5': { 'which': 116, 'keyCode': 116 }\r\n // };\r\n // return utils.getMatchingKey(which, keyCode, keys);\r\n // };\r\n //\r\n // Determine if keypress relates to specialKey\r\n //\r\n utils.isSpecialKeyPress = function (which, keyCode) {\r\n var keys = {\r\n 'tab': {\r\n 'which': 0,\r\n 'keyCode': 9\r\n },\r\n 'enter': {\r\n 'which': 13,\r\n 'keyCode': 13\r\n },\r\n 'end': {\r\n 'which': 0,\r\n 'keyCode': 35\r\n },\r\n 'home': {\r\n 'which': 0,\r\n 'keyCode': 36\r\n },\r\n 'leftarrow': {\r\n 'which': 0,\r\n 'keyCode': 37\r\n },\r\n 'uparrow': {\r\n 'which': 0,\r\n 'keyCode': 38\r\n },\r\n 'rightarrow': {\r\n 'which': 0,\r\n 'keyCode': 39\r\n },\r\n 'downarrow': {\r\n 'which': 0,\r\n 'keyCode': 40\r\n },\r\n 'F5': {\r\n 'which': 116,\r\n 'keyCode': 116\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n //\r\n // Returns true/false if modifier key is held down\r\n //\r\n utils.isModifier = function (evt) {\r\n return evt.ctrlKey || evt.altKey || evt.metaKey;\r\n };\r\n //\r\n // Iterates over each property of object or array.\r\n //\r\n utils.forEach = function (collection, callback, thisArg) {\r\n if (collection.hasOwnProperty('length')) {\r\n for (var index = 0, len = collection.length; index < len; index++) {\r\n if (callback.call(thisArg, collection[index], index, collection) === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n for (var key in collection) {\r\n if (collection.hasOwnProperty(key)) {\r\n if (callback.call(thisArg, collection[key], key, collection) === false) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n // Expose\r\n return utils;\r\n }();\r\n/*\r\n* pattern-matcher.js\r\n*\r\n* Parses a pattern specification and determines appropriate pattern for an\r\n* input string\r\n*\r\n*/\r\nvar patternMatcher = function (pattern, utils) {\r\n //\r\n // Parse a matcher string into a RegExp. Accepts valid regular\r\n // expressions and the catchall '*'.\r\n // @private\r\n //\r\n var parseMatcher = function (matcher) {\r\n if (matcher === '*') {\r\n return /.*/;\r\n }\r\n return new RegExp(matcher);\r\n };\r\n //\r\n // Parse a pattern spec and return a function that returns a pattern\r\n // based on user input. The first matching pattern will be chosen.\r\n // Pattern spec format:\r\n // Array [\r\n // Object: { Matcher(RegExp String) : Pattern(Pattern String) },\r\n // ...\r\n // ]\r\n function patternMatcher(patternSpec) {\r\n var matchers = [], patterns = [];\r\n // Iterate over each pattern in order.\r\n utils.forEach(patternSpec, function (patternMatcher) {\r\n // Process single property object to obtain pattern and matcher.\r\n utils.forEach(patternMatcher, function (patternStr, matcherStr) {\r\n var parsedPattern = pattern.parse(patternStr), regExpMatcher = parseMatcher(matcherStr);\r\n matchers.push(regExpMatcher);\r\n patterns.push(parsedPattern);\r\n // Stop after one iteration.\r\n return false;\r\n });\r\n });\r\n var getPattern = function (input) {\r\n var matchedIndex;\r\n utils.forEach(matchers, function (matcher, index) {\r\n if (matcher.test(input)) {\r\n matchedIndex = index;\r\n return false;\r\n }\r\n });\r\n return matchedIndex === undefined ? null : patterns[matchedIndex];\r\n };\r\n return {\r\n getPattern: getPattern,\r\n patterns: patterns,\r\n matchers: matchers\r\n };\r\n }\r\n // Expose\r\n return patternMatcher;\r\n }(pattern, utils);\r\n/*\r\n * inpt-sel.js\r\n *\r\n * Cross browser implementation to get and set input selections\r\n *\r\n */\r\nvar inptSel = function () {\r\n // Define module\r\n var inptSel = {};\r\n //\r\n // Get begin and end positions of selected input. Return 0's\r\n // if there is no selectiion data\r\n //\r\n inptSel.get = function (el) {\r\n // If normal browser return with result\r\n if (typeof el.selectionStart === 'number') {\r\n return {\r\n begin: el.selectionStart,\r\n end: el.selectionEnd\r\n };\r\n }\r\n // Uh-Oh. We must be IE. Fun with TextRange!!\r\n var range = document.selection.createRange();\r\n // Determine if there is a selection\r\n if (range && range.parentElement() === el) {\r\n var inputRange = el.createTextRange(), endRange = el.createTextRange(), length = el.value.length;\r\n // Create a working TextRange for the input selection\r\n inputRange.moveToBookmark(range.getBookmark());\r\n // Move endRange begin pos to end pos (hence endRange)\r\n endRange.collapse(false);\r\n // If we are at the very end of the input, begin and end\r\n // must both be the length of the el.value\r\n if (inputRange.compareEndPoints('StartToEnd', endRange) > -1) {\r\n return {\r\n begin: length,\r\n end: length\r\n };\r\n }\r\n // Note: moveStart usually returns the units moved, which \r\n // one may think is -length, however, it will stop when it\r\n // gets to the begin of the range, thus giving us the\r\n // negative value of the pos.\r\n return {\r\n begin: -inputRange.moveStart('character', -length),\r\n end: -inputRange.moveEnd('character', -length)\r\n };\r\n }\r\n //Return 0's on no selection data\r\n return {\r\n begin: 0,\r\n end: 0\r\n };\r\n };\r\n //\r\n // Set the caret position at a specified location\r\n //\r\n inptSel.set = function (el, pos) {\r\n // Normalize pos\r\n if (typeof pos !== 'object') {\r\n pos = {\r\n begin: pos,\r\n end: pos\r\n };\r\n }\r\n // If normal browser\r\n if (el.setSelectionRange) {\r\n el.focus();\r\n el.setSelectionRange(pos.begin, pos.end);\r\n } else if (el.createTextRange) {\r\n var range = el.createTextRange();\r\n range.collapse(true);\r\n range.moveEnd('character', pos.end);\r\n range.moveStart('character', pos.begin);\r\n range.select();\r\n }\r\n };\r\n // Expose\r\n return inptSel;\r\n }();\r\n/*\r\n * formatter.js\r\n *\r\n * Class used to format input based on passed pattern\r\n *\r\n */\r\nvar formatter = function (patternMatcher, inptSel, utils) {\r\n // Defaults\r\n var defaults = {\r\n persistent: false,\r\n repeat: false,\r\n placeholder: ' '\r\n };\r\n // Regexs for input validation\r\n var inptRegs = {\r\n '9': /[0-9]/,\r\n 'a': /[A-Za-z]/,\r\n '*': /[A-Za-z0-9]/\r\n };\r\n //\r\n // Class Constructor - Called with new Formatter(el, opts)\r\n // Responsible for setting up required instance variables, and\r\n // attaching the event listener to the element.\r\n //\r\n function Formatter(el, opts) {\r\n // Cache this\r\n var self = this;\r\n // Make sure we have an element. Make accesible to instance\r\n self.el = el;\r\n if (!self.el) {\r\n throw new TypeError('Must provide an existing element');\r\n }\r\n // Merge opts with defaults\r\n self.opts = utils.extend({}, defaults, opts);\r\n // 1 pattern is special case\r\n if (typeof self.opts.pattern !== 'undefined') {\r\n self.opts.patterns = self._specFromSinglePattern(self.opts.pattern);\r\n delete self.opts.pattern;\r\n }\r\n // Make sure we have valid opts\r\n if (typeof self.opts.patterns === 'undefined') {\r\n throw new TypeError('Must provide a pattern or array of patterns');\r\n }\r\n self.patternMatcher = patternMatcher(self.opts.patterns);\r\n // Upate pattern with initial value\r\n self._updatePattern();\r\n // Init values\r\n self.hldrs = {};\r\n self.focus = 0;\r\n // Add Listeners\r\n utils.addListener(self.el, 'keydown', function (evt) {\r\n self._keyDown(evt);\r\n });\r\n utils.addListener(self.el, 'keypress', function (evt) {\r\n self._keyPress(evt);\r\n });\r\n utils.addListener(self.el, 'paste', function (evt) {\r\n self._paste(evt);\r\n });\r\n // Persistence\r\n if (self.opts.persistent) {\r\n // Format on start\r\n self._processKey('', false);\r\n self.el.blur();\r\n // Add Listeners\r\n utils.addListener(self.el, 'focus', function (evt) {\r\n self._focus(evt);\r\n });\r\n utils.addListener(self.el, 'click', function (evt) {\r\n self._focus(evt);\r\n });\r\n utils.addListener(self.el, 'touchstart', function (evt) {\r\n self._focus(evt);\r\n });\r\n }\r\n }\r\n //\r\n // @public\r\n // Add new char\r\n //\r\n Formatter.addInptType = function (chr, reg) {\r\n inptRegs[chr] = reg;\r\n };\r\n //\r\n // @public\r\n // Apply the given pattern to the current input without moving caret.\r\n //\r\n Formatter.prototype.resetPattern = function (str) {\r\n // Update opts to hold new pattern\r\n this.opts.patterns = str ? this._specFromSinglePattern(str) : this.opts.patterns;\r\n // Get current state\r\n this.sel = inptSel.get(this.el);\r\n this.val = this.el.value;\r\n // Init values\r\n this.delta = 0;\r\n // Remove all formatted chars from val\r\n this._removeChars();\r\n this.patternMatcher = patternMatcher(this.opts.patterns);\r\n // Update pattern\r\n var newPattern = this.patternMatcher.getPattern(this.val);\r\n this.mLength = newPattern.mLength;\r\n this.chars = newPattern.chars;\r\n this.inpts = newPattern.inpts;\r\n // Format on start\r\n this._processKey('', false, true);\r\n };\r\n //\r\n // @private\r\n // Determine correct format pattern based on input val\r\n //\r\n Formatter.prototype._updatePattern = function () {\r\n // Determine appropriate pattern\r\n var newPattern = this.patternMatcher.getPattern(this.val);\r\n // Only update the pattern if there is an appropriate pattern for the value.\r\n // Otherwise, leave the current pattern (and likely delete the latest character.)\r\n if (newPattern) {\r\n // Get info about the given pattern\r\n this.mLength = newPattern.mLength;\r\n this.chars = newPattern.chars;\r\n this.inpts = newPattern.inpts;\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on all keyDown strokes. All keys trigger\r\n // this handler. Only process delete keys.\r\n //\r\n Formatter.prototype._keyDown = function (evt) {\r\n // The first thing we need is the character code\r\n var k = evt.which || evt.keyCode;\r\n // If delete key\r\n if (k && utils.isDelKeyDown(evt.which, evt.keyCode)) {\r\n // Process the keyCode and prevent default\r\n this._processKey(null, k);\r\n return utils.preventDefault(evt);\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on all keyPress strokes. Only processes\r\n // character keys (as long as no modifier key is in use).\r\n //\r\n Formatter.prototype._keyPress = function (evt) {\r\n // The first thing we need is the character code\r\n var k, isSpecial;\r\n // Mozilla will trigger on special keys and assign the the value 0\r\n // We want to use that 0 rather than the keyCode it assigns.\r\n k = evt.which || evt.keyCode;\r\n isSpecial = utils.isSpecialKeyPress(evt.which, evt.keyCode);\r\n // Process the keyCode and prevent default\r\n if (!utils.isDelKeyPress(evt.which, evt.keyCode) && !isSpecial && !utils.isModifier(evt)) {\r\n this._processKey(String.fromCharCode(k), false);\r\n return utils.preventDefault(evt);\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on paste event.\r\n //\r\n Formatter.prototype._paste = function (evt) {\r\n // Process the clipboard paste and prevent default\r\n this._processKey(utils.getClip(evt), false);\r\n return utils.preventDefault(evt);\r\n };\r\n //\r\n // @private\r\n // Handle called on focus event.\r\n //\r\n Formatter.prototype._focus = function () {\r\n // Wrapped in timeout so that we can grab input selection\r\n var self = this;\r\n setTimeout(function () {\r\n // Grab selection\r\n var selection = inptSel.get(self.el);\r\n // Char check\r\n var isAfterStart = selection.end > self.focus, isFirstChar = selection.end === 0;\r\n // If clicked in front of start, refocus to start\r\n if (isAfterStart || isFirstChar) {\r\n inptSel.set(self.el, self.focus);\r\n }\r\n }, 0);\r\n };\r\n //\r\n // @private\r\n // Using the provided key information, alter el value.\r\n //\r\n Formatter.prototype._processKey = function (chars, delKey, ignoreCaret) {\r\n // Get current state\r\n this.sel = inptSel.get(this.el);\r\n this.val = this.el.value;\r\n // Init values\r\n this.delta = 0;\r\n // If chars were highlighted, we need to remove them\r\n if (this.sel.begin !== this.sel.end) {\r\n this.delta = -1 * Math.abs(this.sel.begin - this.sel.end);\r\n this.val = utils.removeChars(this.val, this.sel.begin, this.sel.end);\r\n } else if (delKey && delKey === 46) {\r\n this._delete();\r\n } else if (delKey && this.sel.begin - 1 >= 0) {\r\n // Always have a delta of at least -1 for the character being deleted.\r\n this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);\r\n this.delta -= 1;\r\n } else if (delKey) {\r\n return true;\r\n }\r\n // If the key is not a del key, it should convert to a str\r\n if (!delKey) {\r\n // Add char at position and increment delta\r\n this.val = utils.addChars(this.val, chars, this.sel.begin);\r\n this.delta += chars.length;\r\n }\r\n // Format el.value (also handles updating caret position)\r\n this._formatValue(ignoreCaret);\r\n };\r\n //\r\n // @private\r\n // Deletes the character in front of it\r\n //\r\n Formatter.prototype._delete = function () {\r\n // Adjust focus to make sure its not on a formatted char\r\n while (this.chars[this.sel.begin]) {\r\n this._nextPos();\r\n }\r\n // As long as we are not at the end\r\n if (this.sel.begin < this.val.length) {\r\n // We will simulate a delete by moving the caret to the next char\r\n // and then deleting\r\n this._nextPos();\r\n this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);\r\n this.delta = -1;\r\n }\r\n };\r\n //\r\n // @private\r\n // Quick helper method to move the caret to the next pos\r\n //\r\n Formatter.prototype._nextPos = function () {\r\n this.sel.end++;\r\n this.sel.begin++;\r\n };\r\n //\r\n // @private\r\n // Alter element value to display characters matching the provided\r\n // instance pattern. Also responsible for updating\r\n //\r\n Formatter.prototype._formatValue = function (ignoreCaret) {\r\n // Set caret pos\r\n this.newPos = this.sel.end + this.delta;\r\n // Remove all formatted chars from val\r\n this._removeChars();\r\n // Switch to first matching pattern based on val\r\n this._updatePattern();\r\n // Validate inputs\r\n this._validateInpts();\r\n // Add formatted characters\r\n this._addChars();\r\n // Set value and adhere to maxLength\r\n this.el.value = this.val.substr(0, this.mLength);\r\n // Set new caret position\r\n if (typeof ignoreCaret === 'undefined' || ignoreCaret === false) {\r\n inptSel.set(this.el, this.newPos);\r\n }\r\n };\r\n //\r\n // @private\r\n // Remove all formatted before and after a specified pos\r\n //\r\n Formatter.prototype._removeChars = function () {\r\n // Delta shouldn't include placeholders\r\n if (this.sel.end > this.focus) {\r\n this.delta += this.sel.end - this.focus;\r\n }\r\n // Account for shifts during removal\r\n var shift = 0;\r\n // Loop through all possible char positions\r\n for (var i = 0; i <= this.mLength; i++) {\r\n // Get transformed position\r\n var curChar = this.chars[i], curHldr = this.hldrs[i], pos = i + shift, val;\r\n // If after selection we need to account for delta\r\n pos = i >= this.sel.begin ? pos + this.delta : pos;\r\n val = this.val.charAt(pos);\r\n // Remove char and account for shift\r\n if (curChar && curChar === val || curHldr && curHldr === val) {\r\n this.val = utils.removeChars(this.val, pos, pos + 1);\r\n shift--;\r\n }\r\n }\r\n // All hldrs should be removed now\r\n this.hldrs = {};\r\n // Set focus to last character\r\n this.focus = this.val.length;\r\n };\r\n //\r\n // @private\r\n // Make sure all inpts are valid, else remove and update delta\r\n //\r\n Formatter.prototype._validateInpts = function () {\r\n // Loop over each char and validate\r\n for (var i = 0; i < this.val.length; i++) {\r\n // Get char inpt type\r\n var inptType = this.inpts[i];\r\n // Checks\r\n var isBadType = !inptRegs[inptType], isInvalid = !isBadType && !inptRegs[inptType].test(this.val.charAt(i)), inBounds = this.inpts[i];\r\n // Remove if incorrect and inbounds\r\n if ((isBadType || isInvalid) && inBounds) {\r\n this.val = utils.removeChars(this.val, i, i + 1);\r\n this.focusStart--;\r\n this.newPos--;\r\n this.delta--;\r\n i--;\r\n }\r\n }\r\n };\r\n //\r\n // @private\r\n // Loop over val and add formatted chars as necessary\r\n //\r\n Formatter.prototype._addChars = function () {\r\n if (this.opts.persistent) {\r\n // Loop over all possible characters\r\n for (var i = 0; i <= this.mLength; i++) {\r\n if (!this.val.charAt(i)) {\r\n // Add placeholder at pos\r\n this.val = utils.addChars(this.val, this.opts.placeholder, i);\r\n this.hldrs[i] = this.opts.placeholder;\r\n }\r\n this._addChar(i);\r\n }\r\n // Adjust focus to make sure its not on a formatted char\r\n while (this.chars[this.focus]) {\r\n this.focus++;\r\n }\r\n } else {\r\n // Avoid caching val.length, as they may change in _addChar.\r\n for (var j = 0; j <= this.val.length; j++) {\r\n // When moving backwards there are some race conditions where we\r\n // dont want to add the character\r\n if (this.delta <= 0 && j === this.focus) {\r\n return true;\r\n }\r\n // Place character in current position of the formatted string.\r\n this._addChar(j);\r\n }\r\n }\r\n };\r\n //\r\n // @private\r\n // Add formattted char at position\r\n //\r\n Formatter.prototype._addChar = function (i) {\r\n // If char exists at position\r\n var chr = this.chars[i];\r\n if (!chr) {\r\n return true;\r\n }\r\n // If chars are added in between the old pos and new pos\r\n // we need to increment pos and delta\r\n if (utils.isBetween(i, [\r\n this.sel.begin - 1,\r\n this.newPos + 1\r\n ])) {\r\n this.newPos++;\r\n this.delta++;\r\n }\r\n // If character added before focus, incr\r\n if (i <= this.focus) {\r\n this.focus++;\r\n }\r\n // Updateholder\r\n if (this.hldrs[i]) {\r\n delete this.hldrs[i];\r\n this.hldrs[i + 1] = this.opts.placeholder;\r\n }\r\n // Update value\r\n this.val = utils.addChars(this.val, chr, i);\r\n };\r\n //\r\n // @private\r\n // Create a patternSpec for passing into patternMatcher that\r\n // has exactly one catch all pattern.\r\n //\r\n Formatter.prototype._specFromSinglePattern = function (patternStr) {\r\n return [{ '*': patternStr }];\r\n };\r\n // Expose\r\n return Formatter;\r\n }(patternMatcher, inptSel, utils);\r\n\r\n\r\n\r\n// A really lightweight plugin wrapper around the constructor,\r\n// preventing against multiple instantiations\r\nvar pluginName = 'formatter';\r\n\r\n$.fn[pluginName] = function (options) {\r\n\r\n // Initiate plugin if options passed\r\n if (typeof options == 'object') {\r\n this.each(function () {\r\n if (!$.data(this, 'plugin_' + pluginName)) {\r\n $.data(this, 'plugin_' + pluginName,\r\n new formatter(this, options));\r\n }\r\n });\r\n }\r\n\r\n // Add resetPattern method to plugin\r\n this.resetPattern = function (str) {\r\n this.each(function () {\r\n var formatted = $.data(this, 'plugin_' + pluginName);\r\n // resetPattern for instance\r\n if (formatted) { formatted.resetPattern(str); }\r\n });\r\n // Chainable please\r\n return this;\r\n };\r\n\r\n // Chainable please\r\n return this;\r\n};\r\n\r\n$.fn[pluginName].addInptType = function (chr, regexp) {\r\n formatter.addInptType(chr, regexp);\r\n};\r\n\r\n\r\n}));","/*!\r\n * jQuery Templates Plugin 1.0.0pre\r\n * http://github.com/jquery/jquery-tmpl\r\n * Requires jQuery 1.4.2\r\n *\r\n * Copyright 2011, Software Freedom Conservancy, Inc.\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n * http://jquery.org/license\r\n */\r\n(function( jQuery, undefined ){\r\n\tvar oldManip = jQuery.fn.domManip, tmplItmAtt = \"_tmplitem\", htmlExpr = /^[^<]*(<[\\w\\W]+>)[^>]*$|\\{\\{\\! /,\r\n\t\tnewTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];\r\n\r\n\tfunction newTmplItem( options, parentItem, fn, data ) {\r\n\t\t// Returns a template item data structure for a new rendered instance of a template (a 'template item').\r\n\t\t// The content field is a hierarchical array of strings and nested items (to be\r\n\t\t// removed and replaced by nodes field of dom elements, once inserted in DOM).\r\n\t\tvar newItem = {\r\n\t\t\tdata: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),\r\n\t\t\t_wrap: parentItem ? parentItem._wrap : null,\r\n\t\t\ttmpl: null,\r\n\t\t\tparent: parentItem || null,\r\n\t\t\tnodes: [],\r\n\t\t\tcalls: tiCalls,\r\n\t\t\tnest: tiNest,\r\n\t\t\twrap: tiWrap,\r\n\t\t\thtml: tiHtml,\r\n\t\t\tupdate: tiUpdate\r\n\t\t};\r\n\t\tif ( options ) {\r\n\t\t\tjQuery.extend( newItem, options, { nodes: [], parent: parentItem });\r\n\t\t}\r\n\t\tif ( fn ) {\r\n\t\t\t// Build the hierarchical content to be used during insertion into DOM\r\n\t\t\tnewItem.tmpl = fn;\r\n\t\t\tnewItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );\r\n\t\t\tnewItem.key = ++itemKey;\r\n\t\t\t// Keep track of new template item, until it is stored as jQuery Data on DOM element\r\n\t\t\t(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;\r\n\t\t}\r\n\t\treturn newItem;\r\n\t}\r\n\r\n\t// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).\r\n\tjQuery.each({\r\n\t\tappendTo: \"append\",\r\n\t\tprependTo: \"prepend\",\r\n\t\tinsertBefore: \"before\",\r\n\t\tinsertAfter: \"after\",\r\n\t\treplaceAll: \"replaceWith\"\r\n\t}, function( name, original ) {\r\n\t\tjQuery.fn[ name ] = function( selector ) {\r\n\t\t\tvar ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,\r\n\t\t\t\tparent = this.length === 1 && this[0].parentNode;\r\n\r\n\t\t\tappendToTmplItems = newTmplItems || {};\r\n\t\t\tif ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\r\n\t\t\t\tinsert[ original ]( this[0] );\r\n\t\t\t\tret = this;\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i = 0, l = insert.length; i < l; i++ ) {\r\n\t\t\t\t\tcloneIndex = i;\r\n\t\t\t\t\telems = (i > 0 ? this.clone(true) : this).get();\r\n\t\t\t\t\tjQuery( insert[i] )[ original ]( elems );\r\n\t\t\t\t\tret = ret.concat( elems );\r\n\t\t\t\t}\r\n\t\t\t\tcloneIndex = 0;\r\n\t\t\t\tret = this.pushStack( ret, name, insert.selector );\r\n\t\t\t}\r\n\t\t\ttmplItems = appendToTmplItems;\r\n\t\t\tappendToTmplItems = null;\r\n\t\t\tjQuery.tmpl.complete( tmplItems );\r\n\t\t\treturn ret;\r\n\t\t};\r\n\t});\r\n\r\n\tjQuery.fn.extend({\r\n\t\t// Use first wrapped element as template markup.\r\n\t\t// Return wrapped set of template items, obtained by rendering template against data.\r\n\t\ttmpl: function( data, options, parentItem ) {\r\n\t\t\treturn jQuery.tmpl( this[0], data, options, parentItem );\r\n\t\t},\r\n\r\n\t\t// Find which rendered template item the first wrapped DOM element belongs to\r\n\t\ttmplItem: function() {\r\n\t\t\treturn jQuery.tmplItem( this[0] );\r\n\t\t},\r\n\r\n\t\t// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.\r\n\t\ttemplate: function( name ) {\r\n\t\t\treturn jQuery.template( name, this[0] );\r\n\t\t},\r\n\r\n\t\tdomManip: function( args, table, callback, options ) {\r\n\t\t\tif ( args[0] && jQuery.isArray( args[0] )) {\r\n\t\t\t\tvar dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;\r\n\t\t\t\twhile ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], \"tmplItem\" ))) {}\r\n\t\t\t\tif ( tmplItem && cloneIndex ) {\r\n\t\t\t\t\tdmArgs[2] = function( fragClone ) {\r\n\t\t\t\t\t\t// Handler called by oldManip when rendered template has been inserted into DOM.\r\n\t\t\t\t\t\tjQuery.tmpl.afterManip( this, fragClone, callback );\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\toldManip.apply( this, dmArgs );\r\n\t\t\t} else {\r\n\t\t\t\toldManip.apply( this, arguments );\r\n\t\t\t}\r\n\t\t\tcloneIndex = 0;\r\n\t\t\tif ( !appendToTmplItems ) {\r\n\t\t\t\tjQuery.tmpl.complete( newTmplItems );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t});\r\n\r\n\tjQuery.extend({\r\n\t\t// Return wrapped set of template items, obtained by rendering template against data.\r\n\t\ttmpl: function( tmpl, data, options, parentItem ) {\r\n\t\t\tvar ret, topLevel = !parentItem;\r\n\t\t\tif ( topLevel ) {\r\n\t\t\t\t// This is a top-level tmpl call (not from a nested template using {{tmpl}})\r\n\t\t\t\tparentItem = topTmplItem;\r\n\t\t\t\ttmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );\r\n\t\t\t\twrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level\r\n\t\t\t} else if ( !tmpl ) {\r\n\t\t\t\t// The template item is already associated with DOM - this is a refresh.\r\n\t\t\t\t// Re-evaluate rendered template for the parentItem\r\n\t\t\t\ttmpl = parentItem.tmpl;\r\n\t\t\t\tnewTmplItems[parentItem.key] = parentItem;\r\n\t\t\t\tparentItem.nodes = [];\r\n\t\t\t\tif ( parentItem.wrapped ) {\r\n\t\t\t\t\tupdateWrapped( parentItem, parentItem.wrapped );\r\n\t\t\t\t}\r\n\t\t\t\t// Rebuild, without creating a new template item\r\n\t\t\t\treturn jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));\r\n\t\t\t}\r\n\t\t\tif ( !tmpl ) {\r\n\t\t\t\treturn []; // Could throw...\r\n\t\t\t}\r\n\t\t\tif ( typeof data === \"function\" ) {\r\n\t\t\t\tdata = data.call( parentItem || {} );\r\n\t\t\t}\r\n\t\t\tif ( options && options.wrapped ) {\r\n\t\t\t\tupdateWrapped( options, options.wrapped );\r\n\t\t\t}\r\n\t\t\tret = jQuery.isArray( data ) ?\r\n\t\t\t\tjQuery.map( data, function( dataItem ) {\r\n\t\t\t\t\treturn dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;\r\n\t\t\t\t}) :\r\n\t\t\t\t[ newTmplItem( options, parentItem, tmpl, data ) ];\r\n\t\t\treturn topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;\r\n\t\t},\r\n\r\n\t\t// Return rendered template item for an element.\r\n\t\ttmplItem: function( elem ) {\r\n\t\t\tvar tmplItem;\r\n\t\t\tif ( elem instanceof jQuery ) {\r\n\t\t\t\telem = elem[0];\r\n\t\t\t}\r\n\t\t\twhile ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, \"tmplItem\" )) && (elem = elem.parentNode) ) {}\r\n\t\t\treturn tmplItem || topTmplItem;\r\n\t\t},\r\n\r\n\t\t// Set:\r\n\t\t// Use $.template( name, tmpl ) to cache a named template,\r\n\t\t// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.\r\n\t\t// Use $( \"selector\" ).template( name ) to provide access by name to a script block template declaration.\r\n\r\n\t\t// Get:\r\n\t\t// Use $.template( name ) to access a cached template.\r\n\t\t// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )\r\n\t\t// will return the compiled template, without adding a name reference.\r\n\t\t// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent\r\n\t\t// to $.template( null, templateString )\r\n\t\ttemplate: function( name, tmpl ) {\r\n\t\t\tif (tmpl) {\r\n\t\t\t\t// Compile template and associate with name\r\n\t\t\t\tif ( typeof tmpl === \"string\" ) {\r\n\t\t\t\t\t// This is an HTML string being passed directly in.\r\n\t\t\t\t\ttmpl = buildTmplFn( tmpl );\r\n\t\t\t\t} else if ( tmpl instanceof jQuery ) {\r\n\t\t\t\t\ttmpl = tmpl[0] || {};\r\n\t\t\t\t}\r\n\t\t\t\tif ( tmpl.nodeType ) {\r\n\t\t\t\t\t// If this is a template block, use cached copy, or generate tmpl function and cache.\r\n\t\t\t\t\ttmpl = jQuery.data( tmpl, \"tmpl\" ) || jQuery.data( tmpl, \"tmpl\", buildTmplFn( tmpl.innerHTML ));\r\n\t\t\t\t\t// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.\r\n\t\t\t\t\t// This means that foo=\"${x}\" will not work if the value of x includes white space: foo=\"${x}\" -> foo=value of x.\r\n\t\t\t\t\t// To correct this, include space in tag: foo=\"${ x }\" -> foo=\"value of x\"\r\n\t\t\t\t}\r\n\t\t\t\treturn typeof name === \"string\" ? (jQuery.template[name] = tmpl) : tmpl;\r\n\t\t\t}\r\n\t\t\t// Return named compiled template\r\n\t\t\treturn name ? (typeof name !== \"string\" ? jQuery.template( null, name ):\r\n\t\t\t\t(jQuery.template[name] ||\r\n\t\t\t\t\t// If not in map, and not containing at least on HTML tag, treat as a selector.\r\n\t\t\t\t\t// (If integrated with core, use quickExpr.exec)\r\n\t\t\t\t\tjQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;\r\n\t\t},\r\n\r\n\t\tencode: function( text ) {\r\n\t\t\t// Do HTML encoding replacing < > & and ' and \" by corresponding entities.\r\n\t\t\treturn (\"\" + text).split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\").split(\"'\").join(\"'\");\r\n\t\t}\r\n\t});\r\n\r\n\tjQuery.extend( jQuery.tmpl, {\r\n\t\ttag: {\r\n\t\t\t\"tmpl\": {\r\n\t\t\t\t_default: { $2: \"null\" },\r\n\t\t\t\topen: \"if($notnull_1){__=__.concat($item.nest($1,$2));}\"\r\n\t\t\t\t// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)\r\n\t\t\t\t// This means that {{tmpl foo}} treats foo as a template (which IS a function).\r\n\t\t\t\t// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.\r\n\t\t\t},\r\n\t\t\t\"wrap\": {\r\n\t\t\t\t_default: { $2: \"null\" },\r\n\t\t\t\topen: \"$item.calls(__,$1,$2);__=[];\",\r\n\t\t\t\tclose: \"call=$item.calls();__=call._.concat($item.wrap(call,__));\"\r\n\t\t\t},\r\n\t\t\t\"each\": {\r\n\t\t\t\t_default: { $2: \"$index, $value\" },\r\n\t\t\t\topen: \"if($notnull_1){$.each($1a,function($2){with(this){\",\r\n\t\t\t\tclose: \"}});}\"\r\n\t\t\t},\r\n\t\t\t\"if\": {\r\n\t\t\t\topen: \"if(($notnull_1) && $1a){\",\r\n\t\t\t\tclose: \"}\"\r\n\t\t\t},\r\n\t\t\t\"else\": {\r\n\t\t\t\t_default: { $1: \"true\" },\r\n\t\t\t\topen: \"}else if(($notnull_1) && $1a){\"\r\n\t\t\t},\r\n\t\t\t\"html\": {\r\n\t\t\t\t// Unecoded expression evaluation.\r\n\t\t\t\topen: \"if($notnull_1){__.push($1a);}\"\r\n\t\t\t},\r\n\t\t\t\"=\": {\r\n\t\t\t\t// Encoded expression evaluation. Abbreviated form is ${}.\r\n\t\t\t\t_default: { $1: \"$data\" },\r\n\t\t\t\topen: \"if($notnull_1){__.push($.encode($1a));}\"\r\n\t\t\t},\r\n\t\t\t\"!\": {\r\n\t\t\t\t// Comment tag. Skipped by parser\r\n\t\t\t\topen: \"\"\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events\r\n\t\tcomplete: function( items ) {\r\n\t\t\tnewTmplItems = {};\r\n\t\t},\r\n\r\n\t\t// Call this from code which overrides domManip, or equivalent\r\n\t\t// Manage cloning/storing template items etc.\r\n\t\tafterManip: function afterManip( elem, fragClone, callback ) {\r\n\t\t\t// Provides cloned fragment ready for fixup prior to and after insertion into DOM\r\n\t\t\tvar content = fragClone.nodeType === 11 ?\r\n\t\t\t\tjQuery.makeArray(fragClone.childNodes) :\r\n\t\t\t\tfragClone.nodeType === 1 ? [fragClone] : [];\r\n\r\n\t\t\t// Return fragment to original caller (e.g. append) for DOM insertion\r\n\t\t\tcallback.call( elem, fragClone );\r\n\r\n\t\t\t// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.\r\n\t\t\tstoreTmplItems( content );\r\n\t\t\tcloneIndex++;\r\n\t\t}\r\n\t});\r\n\r\n\t//========================== Private helper functions, used by code above ==========================\r\n\r\n\tfunction build( tmplItem, nested, content ) {\r\n\t\t// Convert hierarchical content into flat string array\r\n\t\t// and finally return array of fragments ready for DOM insertion\r\n\t\tvar frag, ret = content ? jQuery.map( content, function( item ) {\r\n\t\t\treturn (typeof item === \"string\") ?\r\n\t\t\t\t// Insert template item annotations, to be converted to jQuery.data( \"tmplItem\" ) when elems are inserted into DOM.\r\n\t\t\t\t(tmplItem.key ? item.replace( /(<\\w+)(?=[\\s>])(?![^>]*_tmplitem)([^>]*)/g, \"$1 \" + tmplItmAtt + \"=\\\"\" + tmplItem.key + \"\\\" $2\" ) : item) :\r\n\t\t\t\t// This is a child template item. Build nested template.\r\n\t\t\t\tbuild( item, tmplItem, item._ctnt );\r\n\t\t}) :\r\n\t\t// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.\r\n\t\ttmplItem;\r\n\t\tif ( nested ) {\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t// top-level template\r\n\t\tret = ret.join(\"\");\r\n\r\n\t\t// Support templates which have initial or final text nodes, or consist only of text\r\n\t\t// Also support HTML entities within the HTML markup.\r\n\t\tret.replace( /^\\s*([^<\\s][^<]*)?(<[\\w\\W]+>)([^>]*[^>\\s])?\\s*$/, function( all, before, middle, after) {\r\n\t\t\tfrag = jQuery( middle ).get();\r\n\r\n\t\t\tstoreTmplItems( frag );\r\n\t\t\tif ( before ) {\r\n\t\t\t\tfrag = unencode( before ).concat(frag);\r\n\t\t\t}\r\n\t\t\tif ( after ) {\r\n\t\t\t\tfrag = frag.concat(unencode( after ));\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn frag ? frag : unencode( ret );\r\n\t}\r\n\r\n\tfunction unencode( text ) {\r\n\t\t// Use createElement, since createTextNode will not render HTML entities correctly\r\n\t\tvar el = document.createElement( \"div\" );\r\n\t\tel.innerHTML = text;\r\n\t\treturn jQuery.makeArray(el.childNodes);\r\n\t}\r\n\r\n\t// Generate a reusable function that will serve to render a template against data\r\n\tfunction buildTmplFn( markup ) {\r\n\t\treturn new Function(\"jQuery\",\"$item\",\r\n\t\t\t// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).\r\n\t\t\t\"var $=jQuery,call,__=[],$data=$item.data;\" +\r\n\r\n\t\t\t// Introduce the data as local variables using with(){}\r\n\t\t\t\"with($data){__.push('\" +\r\n\r\n\t\t\t// Convert the template into pure JavaScript\r\n\t\t\tjQuery.trim(markup)\r\n\t\t\t\t.replace( /([\\\\'])/g, \"\\\\$1\" )\r\n\t\t\t\t.replace( /[\\r\\t\\n]/g, \" \" )\r\n\t\t\t\t.replace( /\\$\\{([^\\}]*)\\}/g, \"{{= $1}}\" )\r\n\t\t\t\t.replace( /\\{\\{(\\/?)(\\w+|.)(?:\\(((?:[^\\}]|\\}(?!\\}))*?)?\\))?(?:\\s+(.*?)?)?(\\(((?:[^\\}]|\\}(?!\\}))*?)\\))?\\s*\\}\\}/g,\r\n\t\t\t\tfunction( all, slash, type, fnargs, target, parens, args ) {\r\n\t\t\t\t\tvar tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;\r\n\t\t\t\t\tif ( !tag ) {\r\n\t\t\t\t\t\tthrow \"Unknown template tag: \" + type;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdef = tag._default || [];\r\n\t\t\t\t\tif ( parens && !/\\w$/.test(target)) {\r\n\t\t\t\t\t\ttarget += parens;\r\n\t\t\t\t\t\tparens = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( target ) {\r\n\t\t\t\t\t\ttarget = unescape( target );\r\n\t\t\t\t\t\targs = args ? (\",\" + unescape( args ) + \")\") : (parens ? \")\" : \"\");\r\n\t\t\t\t\t\t// Support for target being things like a.toLowerCase();\r\n\t\t\t\t\t\t// In that case don't call with template item as 'this' pointer. Just evaluate...\r\n\t\t\t\t\t\texpr = parens ? (target.indexOf(\".\") > -1 ? target + unescape( parens ) : (\"(\" + target + \").call($item\" + args)) : target;\r\n\t\t\t\t\t\texprAutoFnDetect = parens ? expr : \"(typeof(\" + target + \")==='function'?(\" + target + \").call($item):(\" + target + \"))\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texprAutoFnDetect = expr = def.$1 || \"null\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfnargs = unescape( fnargs );\r\n\t\t\t\t\treturn \"');\" +\r\n\t\t\t\t\t\ttag[ slash ? \"close\" : \"open\" ]\r\n\t\t\t\t\t\t\t.split( \"$notnull_1\" ).join( target ? \"typeof(\" + target + \")!=='undefined' && (\" + target + \")!=null\" : \"true\" )\r\n\t\t\t\t\t\t\t.split( \"$1a\" ).join( exprAutoFnDetect )\r\n\t\t\t\t\t\t\t.split( \"$1\" ).join( expr )\r\n\t\t\t\t\t\t\t.split( \"$2\" ).join( fnargs || def.$2 || \"\" ) +\r\n\t\t\t\t\t\t\"__.push('\";\r\n\t\t\t\t}) +\r\n\t\t\t\"');}return __;\"\r\n\t\t);\r\n\t}\r\n\tfunction updateWrapped( options, wrapped ) {\r\n\t\t// Build the wrapped content.\r\n\t\toptions._wrap = build( options, true,\r\n\t\t\t// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.\r\n\t\t\tjQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]\r\n\t\t).join(\"\");\r\n\t}\r\n\r\n\tfunction unescape( args ) {\r\n\t\treturn args ? args.replace( /\\\\'/g, \"'\").replace(/\\\\\\\\/g, \"\\\\\" ) : null;\r\n\t}\r\n\tfunction outerHtml( elem ) {\r\n\t\tvar div = document.createElement(\"div\");\r\n\t\tdiv.appendChild( elem.cloneNode(true) );\r\n\t\treturn div.innerHTML;\r\n\t}\r\n\r\n\t// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.\r\n\tfunction storeTmplItems( content ) {\r\n\t\tvar keySuffix = \"_\" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;\r\n\t\tfor ( i = 0, l = content.length; i < l; i++ ) {\r\n\t\t\tif ( (elem = content[i]).nodeType !== 1 ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\telems = elem.getElementsByTagName(\"*\");\r\n\t\t\tfor ( m = elems.length - 1; m >= 0; m-- ) {\r\n\t\t\t\tprocessItemKey( elems[m] );\r\n\t\t\t}\r\n\t\t\tprocessItemKey( elem );\r\n\t\t}\r\n\t\tfunction processItemKey( el ) {\r\n\t\t\tvar pntKey, pntNode = el, pntItem, tmplItem, key;\r\n\t\t\t// Ensure that each rendered template inserted into the DOM has its own template item,\r\n\t\t\tif ( (key = el.getAttribute( tmplItmAtt ))) {\r\n\t\t\t\twhile ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }\r\n\t\t\t\tif ( pntKey !== key ) {\r\n\t\t\t\t\t// The next ancestor with a _tmplitem expando is on a different key than this one.\r\n\t\t\t\t\t// So this is a top-level element within this template item\r\n\t\t\t\t\t// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.\r\n\t\t\t\t\tpntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;\r\n\t\t\t\t\tif ( !(tmplItem = newTmplItems[key]) ) {\r\n\t\t\t\t\t\t// The item is for wrapped content, and was copied from the temporary parent wrappedItem.\r\n\t\t\t\t\t\ttmplItem = wrappedItems[key];\r\n\t\t\t\t\t\ttmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );\r\n\t\t\t\t\t\ttmplItem.key = ++itemKey;\r\n\t\t\t\t\t\tnewTmplItems[itemKey] = tmplItem;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( cloneIndex ) {\r\n\t\t\t\t\t\tcloneTmplItem( key );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.removeAttribute( tmplItmAtt );\r\n\t\t\t} else if ( cloneIndex && (tmplItem = jQuery.data( el, \"tmplItem\" )) ) {\r\n\t\t\t\t// This was a rendered element, cloned during append or appendTo etc.\r\n\t\t\t\t// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.\r\n\t\t\t\tcloneTmplItem( tmplItem.key );\r\n\t\t\t\tnewTmplItems[tmplItem.key] = tmplItem;\r\n\t\t\t\tpntNode = jQuery.data( el.parentNode, \"tmplItem\" );\r\n\t\t\t\tpntNode = pntNode ? pntNode.key : 0;\r\n\t\t\t}\r\n\t\t\tif ( tmplItem ) {\r\n\t\t\t\tpntItem = tmplItem;\r\n\t\t\t\t// Find the template item of the parent element.\r\n\t\t\t\t// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)\r\n\t\t\t\twhile ( pntItem && pntItem.key != pntNode ) {\r\n\t\t\t\t\t// Add this element as a top-level node for this rendered template item, as well as for any\r\n\t\t\t\t\t// ancestor items between this item and the item of its parent element\r\n\t\t\t\t\tpntItem.nodes.push( el );\r\n\t\t\t\t\tpntItem = pntItem.parent;\r\n\t\t\t\t}\r\n\t\t\t\t// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...\r\n\t\t\t\tdelete tmplItem._ctnt;\r\n\t\t\t\tdelete tmplItem._wrap;\r\n\t\t\t\t// Store template item as jQuery data on the element\r\n\t\t\t\tjQuery.data( el, \"tmplItem\", tmplItem );\r\n\t\t\t}\r\n\t\t\tfunction cloneTmplItem( key ) {\r\n\t\t\t\tkey = key + keySuffix;\r\n\t\t\t\ttmplItem = newClonedItems[key] =\r\n\t\t\t\t\t(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//---- Helper functions for template item ----\r\n\r\n\tfunction tiCalls( content, tmpl, data, options ) {\r\n\t\tif ( !content ) {\r\n\t\t\treturn stack.pop();\r\n\t\t}\r\n\t\tstack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });\r\n\t}\r\n\r\n\tfunction tiNest( tmpl, data, options ) {\r\n\t\t// nested template, using {{tmpl}} tag\r\n\t\treturn jQuery.tmpl( jQuery.template( tmpl ), data, options, this );\r\n\t}\r\n\r\n\tfunction tiWrap( call, wrapped ) {\r\n\t\t// nested template, using {{wrap}} tag\r\n\t\tvar options = call.options || {};\r\n\t\toptions.wrapped = wrapped;\r\n\t\t// Apply the template, which may incorporate wrapped content,\r\n\t\treturn jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );\r\n\t}\r\n\r\n\tfunction tiHtml( filter, textOnly ) {\r\n\t\tvar wrapped = this._wrap;\r\n\t\treturn jQuery.map(\r\n\t\t\tjQuery( jQuery.isArray( wrapped ) ? wrapped.join(\"\") : wrapped ).filter( filter || \"*\" ),\r\n\t\t\tfunction(e) {\r\n\t\t\t\treturn textOnly ?\r\n\t\t\t\t\te.innerText || e.textContent :\r\n\t\t\t\t\te.outerHTML || outerHtml(e);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction tiUpdate() {\r\n\t\tvar coll = this.nodes;\r\n\t\tjQuery.tmpl( null, null, null, this).insertBefore( coll[0] );\r\n\t\tjQuery( coll ).remove();\r\n\t}\r\n})( jQuery );\r\n","/***********************************************************************************\r\n * 관리자 페이지 초기화\r\n ***********************************************************************************/\r\nAPP.init = function(){\r\n APP.initAjaxDefaultSetting();\r\n APP.initMenu();\r\n APP.initAx5();\r\n APP.initPlugins();\r\n APP.initCheckboxAll();\r\n};\r\n\r\n/***********************************************************************************\r\n * AJAX Error 및 BlockUI 처리\r\n ***********************************************************************************/\r\nAPP.initAjaxDefaultSetting = function() {\r\n $(document).ajaxError(function(event, request, settings){\r\n var message = '알수없는 오류가 발생하였습니다.';\r\n if( typeof request.responseJSON != 'undefined' && typeof request.responseJSON.message != 'undefined' ) {\r\n message = request.responseJSON.message;\r\n }\r\n else {\r\n if( request.status == 500 ) message = '서버 코드 오류가 발생하였습니다.\\n관리자에게 문의하세요';\r\n else if ( request.status == 401 ) message = '해당 명령을 실행할 권한이 없습니다.';\r\n }\r\n toastr.error(message, '오류 발생');\r\n }).ajaxStart(function(){\r\n $.blockUI({\r\n css: {width:'25px',top:'49%',left:'49%',border:'0px none',backgroundColor:'transparent',cursor:'wait'},\r\n message : '\"로딩중\"',\r\n baseZ : 10000,\r\n overlayCSS : {opacity : 0}\r\n });\r\n }).ajaxComplete(function(){\r\n $.unblockUI();\r\n });\r\n};\r\n\r\n/***********************************************************************************\r\n * 메뉴관련 초기화\r\n ***********************************************************************************/\r\nAPP.initMenu = function(){\r\n $('#nav .main-navigation li').each(function(){\r\n var $this = $(this);\r\n var menuCode = $this.data('active');\r\n\r\n if(menuCode == menuActive)\r\n {\r\n $(this).addClass('active');\r\n $(this).parents('li').addClass('active');\r\n }\r\n });\r\n};\r\n\r\nAPP.initPlugins = function() {\r\n $.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker;\r\n $.datepicker._updateDatepicker = function(inst) {\r\n $.datepicker._updateDatepicker_original(inst);\r\n var afterShow = this._get(inst, 'afterShow');\r\n if (afterShow)\r\n afterShow.apply((inst.input ? inst.input[0] : null));\r\n }\r\n $.datepicker.regional['ko'] = {\r\n closeText: '닫기',\r\n prevText: '이전달',\r\n nextText: '다음달',\r\n currentText: '오늘',\r\n monthNames: ['1월','2월','3월','4월','5월','6월', '7월','8월','9월','10월','11월','12월'],\r\n monthNamesShort: ['1월','2월','3월','4월','5월','6월', '7월','8월','9월','10월','11월','12월'],\r\n dayNames: ['일','월','화','수','목','금','토'],\r\n dayNamesShort: ['일','월','화','수','목','금','토'],\r\n dayNamesMin: ['일','월','화','수','목','금','토'],\r\n weekHeader: 'Wk',\r\n dateFormat: 'yy-mm-dd',\r\n firstDay: 0,\r\n isRTL: false,\r\n showMonthAfterYear: true,\r\n changeMonth: true,\r\n changeYear: true,\r\n yearSuffix: '',\r\n afterShow: function() {\r\n $('.ui-datepicker-prev').empty().append( '' );\r\n $('.ui-datepicker-next').empty().append( '' );\r\n }\r\n };\r\n\r\n $.datepicker.setDefaults($.datepicker.regional['ko']);\r\n\r\n $('[data-toggle=\"datepicker\"]').datepicker();\r\n\r\n $(\"body\").on(\"click\", '[data-toggle=\"datepicker\"]', function(){\r\n if (!$(this).hasClass(\"hasDatepicker\"))\r\n {\r\n $(this).datepicker();\r\n $(this).datepicker(\"show\");\r\n }\r\n });\r\n\r\n /*\r\n $('[data-toggle=\"formatter\"]').each(function(){\r\n if( $(this).data('pattern') )\r\n {\r\n $(this).formatter({\r\n pattern : $(this).data('pattern'),\r\n persistent: true\r\n });\r\n }\r\n });\r\n\r\n $.datetimepicker.setLocale('kr');\r\n $('[data-toggle=\"datetimepicker\"]').datetimepicker({\r\n format:'Y-m-d H:i'\r\n });\r\n */\r\n};\r\n\r\nAPP.initCheckboxAll = function(){\r\n $('[data-checkbox]').click(function(){\r\n var $check = $(this);\r\n var is_all = ($check.data('checkbox-all') && $check.data('checkbox-all').toString() == 'true');\r\n var name = $check.data('checkbox');\r\n var checked = $check.prop('checked');\r\n var $allCheck = is_all ? $check : $('[data-checkbox=\"'+name+'\"][data-checkbox-all=\"true\"]');\r\n\r\n if( is_all ) {\r\n $('[data-checkbox=\"'+name+'\"]').prop('checked', checked );\r\n }\r\n else {\r\n $allCheck.prop('checked', $('[data-checkbox=\"'+name+'\"]').not('[data-checkbox-all=\"true\"]').length == $('[data-checkbox=\"'+name+'\"]:checked').not('[data-checkbox-all=\"true\"]').length);\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * MODAL 관련\r\n *********************************************************************************************************************/\r\nAPP.initAx5 = function(){\r\n APP.MASK = new ax5.ui.mask({\r\n zIndex: 1000}\r\n );\r\n APP.MASK2 = new ax5.ui.mask({\r\n zIndex: 2000\r\n });\r\n APP.modal = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: ''\r\n });\r\n APP.modal2 = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: ''\r\n });\r\n APP.toast = new ax5.ui.toast({\r\n containerPosition: \"top-right\",\r\n closeIcon: ''\r\n });\r\n};\r\n\r\n\r\n$(function(){\r\n APP.init();\r\n});","/* ========================================================================\r\n * Bootstrap: dropdown.js v3.3.7\r\n * http://getbootstrap.com/javascript/#dropdowns\r\n * ========================================================================\r\n * Copyright 2011-2016 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n+function ($) {\r\n 'use strict';\r\n\r\n // DROPDOWN CLASS DEFINITION\r\n // =========================\r\n\r\n var backdrop = '.dropdown-backdrop'\r\n var toggle = '[data-toggle=\"dropdown\"]'\r\n var Dropdown = function (element) {\r\n $(element).on('click.bs.dropdown', this.toggle)\r\n }\r\n\r\n Dropdown.VERSION = '3.3.7'\r\n\r\n function getParent($this) {\r\n var selector = $this.attr('data-target')\r\n\r\n if (!selector) {\r\n selector = $this.attr('href')\r\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n }\r\n\r\n var $parent = selector && $(selector)\r\n\r\n return $parent && $parent.length ? $parent : $this.parent()\r\n }\r\n\r\n function clearMenus(e) {\r\n if (e && e.which === 3) return\r\n $(backdrop).remove()\r\n $(toggle).each(function () {\r\n var $this = $(this)\r\n var $parent = getParent($this)\r\n var relatedTarget = { relatedTarget: this }\r\n\r\n if (!$parent.hasClass('open')) return\r\n\r\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\r\n\r\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this.attr('aria-expanded', 'false')\r\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\r\n })\r\n }\r\n\r\n Dropdown.prototype.toggle = function (e) {\r\n var $this = $(this)\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n clearMenus()\r\n\r\n if (!isActive) {\r\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\r\n // if mobile we use a backdrop because click events don't delegate\r\n $(document.createElement('div'))\r\n .addClass('dropdown-backdrop')\r\n .insertAfter($(this))\r\n .on('click', clearMenus)\r\n }\r\n\r\n var relatedTarget = { relatedTarget: this }\r\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this\r\n .trigger('focus')\r\n .attr('aria-expanded', 'true')\r\n\r\n $parent\r\n .toggleClass('open')\r\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\r\n }\r\n\r\n return false\r\n }\r\n\r\n Dropdown.prototype.keydown = function (e) {\r\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\r\n\r\n var $this = $(this)\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\r\n if (e.which == 27) $parent.find(toggle).trigger('focus')\r\n return $this.trigger('click')\r\n }\r\n\r\n var desc = ' li:not(.disabled):visible a'\r\n var $items = $parent.find('.dropdown-menu' + desc)\r\n\r\n if (!$items.length) return\r\n\r\n var index = $items.index(e.target)\r\n\r\n if (e.which == 38 && index > 0) index-- // up\r\n if (e.which == 40 && index < $items.length - 1) index++ // down\r\n if (!~index) index = 0\r\n\r\n $items.eq(index).trigger('focus')\r\n }\r\n\r\n\r\n // DROPDOWN PLUGIN DEFINITION\r\n // ==========================\r\n\r\n function Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this)\r\n var data = $this.data('bs.dropdown')\r\n\r\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\r\n if (typeof option == 'string') data[option].call($this)\r\n })\r\n }\r\n\r\n var old = $.fn.dropdown\r\n\r\n $.fn.dropdown = Plugin\r\n $.fn.dropdown.Constructor = Dropdown\r\n\r\n\r\n // DROPDOWN NO CONFLICT\r\n // ====================\r\n\r\n $.fn.dropdown.noConflict = function () {\r\n $.fn.dropdown = old\r\n return this\r\n }\r\n\r\n\r\n // APPLY TO STANDARD DROPDOWN ELEMENTS\r\n // ===================================\r\n\r\n $(document)\r\n .on('click.bs.dropdown.data-api', clearMenus)\r\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\r\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\r\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\r\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\r\n\r\n}(jQuery);","APP.MODAL = function() {\r\n var modalCallback = {};\r\n\r\n var defaultCss = {\r\n width: 400,\r\n height: 400,\r\n position: {\r\n left: \"center\",\r\n top: \"middle\"\r\n }\r\n };\r\n\r\n var defaultOption = $.extend(true, {}, defaultCss, {\r\n iframeLoadingMsg: \"\",\r\n iframe: {\r\n method: \"get\",\r\n url: \"#\"\r\n },\r\n closeToEsc: true,\r\n onStateChanged: function onStateChanged() {\r\n // mask\r\n if (this.state === \"open\") {\r\n APP.MASK.open();\r\n } else if (this.state === \"close\") {\r\n APP.MASK.close();\r\n }\r\n },\r\n animateTime: 100,\r\n zIndex: 1001,\r\n absolute: true,\r\n fullScreen: false,\r\n header: {\r\n title: \"새로운 윈도우\",\r\n btns: {\r\n close: {\r\n label: '', onClick: function onClick() {\r\n APP.MODAL.callback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var open = function(modalConfig) {\r\n\r\n modalConfig = $.extend(true, {}, defaultOption, modalConfig);\r\n $(document.body).addClass(\"modalOpened\");\r\n\r\n this.modalCallback = modalConfig.callback;\r\n this.modalSendData = modalConfig.sendData;\r\n\r\n APP.modal.open(modalConfig);\r\n };\r\n\r\n var css = function css(modalCss) {\r\n modalCss = $.extend(true, {}, defaultCss, modalCss);\r\n APP.modal.css(modalCss);\r\n };\r\n var align = function align(modalAlign) {\r\n APP.modal.align(modalAlign);\r\n };\r\n var close = function close(data) {\r\n APP.modal.close();\r\n setTimeout(function () {\r\n $(document.body).removeClass(\"modalOpened\");\r\n }, 500);\r\n };\r\n var minimize = function minimize() {\r\n APP.modal.minimize();\r\n };\r\n var maximize = function maximize() {\r\n APP.modal.maximize();\r\n };\r\n var callback = function callback(data) {\r\n if (this.modalCallback) {\r\n this.modalCallback(data);\r\n }\r\n this.close(data);\r\n };\r\n var getData = function getData() {\r\n if (this.modalSendData) {\r\n return this.modalSendData();\r\n }\r\n };\r\n\r\n return {\r\n \"open\": open,\r\n \"css\": css,\r\n \"align\": align,\r\n \"close\": close,\r\n \"minimize\": minimize,\r\n \"maximize\": maximize,\r\n \"callback\": callback,\r\n \"modalCallback\": modalCallback,\r\n \"getData\": getData\r\n };\r\n}();\r\nAPP.MODAL2 = function() {\r\n var modalCallback = {};\r\n\r\n var defaultCss = {\r\n width: 400,\r\n height: 400,\r\n position: {\r\n left: \"center\",\r\n top: \"middle\"\r\n }\r\n };\r\n\r\n var defaultOption = $.extend(true, {}, defaultCss, {\r\n iframeLoadingMsg: \"\",\r\n iframe: {\r\n method: \"get\",\r\n url: \"#\"\r\n },\r\n closeToEsc: true,\r\n onStateChanged: function onStateChanged() {\r\n // mask\r\n if (this.state === \"open\") {\r\n APP.MASK2.open();\r\n } else if (this.state === \"close\") {\r\n APP.MASK2.close();\r\n }\r\n },\r\n animateTime: 100,\r\n zIndex: 2001,\r\n absolute: true,\r\n fullScreen: false,\r\n header: {\r\n title: \"새로운 윈도우\",\r\n btns: {\r\n close: {\r\n label: '', onClick: function onClick() {\r\n APP.MODAL2.callback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var open = function(modalConfig) {\r\n\r\n modalConfig = $.extend(true, {}, defaultOption, modalConfig);\r\n $(document.body).addClass(\"modalOpened\");\r\n\r\n this.modalCallback = modalConfig.callback;\r\n this.modalSendData = modalConfig.sendData;\r\n\r\n APP.modal2.open(modalConfig);\r\n };\r\n\r\n var css = function css(modalCss) {\r\n modalCss = $.extend(true, {}, defaultCss, modalCss);\r\n APP.modal2.css(modalCss);\r\n };\r\n var align = function align(modalAlign) {\r\n APP.modal2.align(modalAlign);\r\n };\r\n var close = function close(data) {\r\n APP.modal2.close();\r\n setTimeout(function () {\r\n $(document.body).removeClass(\"modalOpened\");\r\n }, 500);\r\n };\r\n var minimize = function minimize() {\r\n APP.modal2.minimize();\r\n };\r\n var maximize = function maximize() {\r\n APP.modal2.maximize();\r\n };\r\n var callback = function callback(data) {\r\n if (this.modalCallback) {\r\n this.modalCallback(data);\r\n }\r\n this.close(data);\r\n };\r\n var getData = function getData() {\r\n if (this.modalSendData) {\r\n return this.modalSendData();\r\n }\r\n };\r\n\r\n return {\r\n \"open\": open,\r\n \"css\": css,\r\n \"align\": align,\r\n \"close\": close,\r\n \"minimize\": minimize,\r\n \"maximize\": maximize,\r\n \"callback\": callback,\r\n \"modalCallback\": modalCallback,\r\n \"getData\": getData\r\n };\r\n}();","APP.TOAST = {\r\n confirm : function(msg) {\r\n APP.toast.push({\r\n theme : 'default',\r\n icon : '',\r\n msg : msg\r\n });\r\n },\r\n error : function(msg) {\r\n APP.toast.push({\r\n theme : 'danger',\r\n icon : '',\r\n msg : msg\r\n });\r\n },\r\n success: function(msg) {\r\n APP.toast.push({\r\n theme : 'success',\r\n icon : '',\r\n msg : msg\r\n })\r\n }\r\n};","var faq = {};\r\nfaq.form = function(fac_idx, faq_idx)\r\n{\r\n var faq_idx = (typeof faq_idx == 'string' || typeof faq_idx == 'number' ) ? faq_idx : null;\r\n var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;\r\n if(! fac_idx) {\r\n alert('FAQ 분류 정보가 없습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :650,\r\n header : {\r\n title : faq_idx ? 'FAQ 정보 수정' : 'FAQ 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/management/faq_form',\r\n param : {\r\n fac_idx : fac_idx,\r\n faq_idx : faq_idx\r\n }\r\n }\r\n });\r\n};\r\nfaq.remove = function(faq_idx) {\r\n if(typeof faq_idx == 'undefined' || ! faq_idx || faq_idx.trim() == '') {\r\n alert('잘못된 접근입니다.');\r\n }\r\n\r\n if(! confirm('해당 FAQ를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : '/ajax/faq/info',\r\n type : 'delete',\r\n async:false,\r\n cache:false,\r\n data:{faq_idx:faq_idx},\r\n success:function(res){\r\n alert('FAQ가 삭제되었습니다.');\r\n location.reload();\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * FAQ 분류\r\n * @type {{}}\r\n */\r\nfaq.category = {};\r\nfaq.category.form = function(fac_idx)\r\n{\r\n var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;\r\n APP.MODAL.open({\r\n width: $(window).width() > 600 ? 600 : $(window).width(),\r\n height :250,\r\n header : {\r\n title : fac_idx ? 'FAQ 분류 정보 수정' : 'FAQ 분류 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/management/faq_category_form',\r\n param : {\r\n fac_idx : fac_idx\r\n }\r\n }\r\n });\r\n};\r\nfaq.category.exist = function(fac_idx) {\r\n if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') return false;\r\n var result = false;\r\n $.ajax({\r\n url : '/ajax/faq/category',\r\n type:'get',\r\n async:false,\r\n cache:false,\r\n data:{fac_idx:fac_idx},\r\n success:function (res) {\r\n result = !(res && typeof res.fac_idx != 'undefined' && res.fac_idx);\r\n }\r\n });\r\n return result;\r\n};\r\nfaq.category.remove = function(fac_idx) {\r\n if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') {\r\n alert('잘못된 접근입니다.');\r\n }\r\n var count = 0;\r\n $.ajax({\r\n url : '/ajax/faq/lists',\r\n type : 'get',\r\n async:false,\r\n cache: false,\r\n data : {fac_idx:fac_idx},\r\n success:function(res){\r\n count = res.total_count;\r\n }\r\n });\r\n\r\n var msg = ( count > 0 ) ? '해당 FAQ 분류에 ' + count + '개의 FAQ 목록이 등록되어 있습니다.\\nFAQ 분류을 삭제할시 등록된 FAQ 목록도 같이 삭제됩니다.\\n\\n계속 하시겠습니까?' : 'FAQ 분류을 삭제하시겠습니까?';\r\n if(! confirm(msg)) return false;\r\n\r\n $.ajax({\r\n url : '/ajax/faq/category',\r\n type : 'delete',\r\n async:false,\r\n cache:false,\r\n data:{fac_idx:fac_idx},\r\n success:function(res){\r\n alert('FAQ 분류가 삭제되었습니다.');\r\n location.href= base_url + \"/admin/management/faq\";\r\n }\r\n });\r\n};\r\n\r\n\r\n"],"file":"admin.min.js"} \ No newline at end of file diff --git a/public_html/plugins/ckeditor/config.js b/public_html/plugins/ckeditor/config.js index 90234c3..c5647fe 100644 --- a/public_html/plugins/ckeditor/config.js +++ b/public_html/plugins/ckeditor/config.js @@ -7,7 +7,7 @@ CKEDITOR.editorConfig = function( config ) { config.language = "ko"; config.height = 350; - config.skin = typeof is_admin && is_admin ? 'moono-dark': "moono-lisa"; + config.skin = "moono-lisa"; config.allowedContent = true; config.extraPlugins= 'autoembed,image2,uploadimage,uploadfile,youtube'; config.removePlugins= 'image'; diff --git a/source.info.json b/source.info.json index 44bac5e..9f41a4f 100644 --- a/source.info.json +++ b/source.info.json @@ -33,12 +33,10 @@ "css": ["_src/admin/scss/admin.scss"], "js": [ "node_modules/ax5core/dist/ax5core.js", - "node_modules/ax5ui-formatter/dist/ax5formatter.js", "node_modules/ax5ui-mask/dist/ax5mask.js", "node_modules/ax5ui-modal/dist/ax5modal.js", "node_modules/ax5ui-toast/dist/ax5toast.js", - "node_modules/ax5ui-calendar/dist/ax5calendar.js", - "node_modules/ax5ui-picker/dist/ax5picker.js", + "_src/admin/js/jquery-ui.js", "_src/plugins/jquery-datetimepicker/jquery.datetimepicker.full.js", "_src/plugins/jquery-blockUI/jquery.blockUI.js", "_src/admin/js/jquery.formatter.js", diff --git a/wheeparam/application/controllers/admin/Statics.php b/wheeparam/application/controllers/admin/Statics.php index e7a2c2a..4cf3c39 100644 --- a/wheeparam/application/controllers/admin/Statics.php +++ b/wheeparam/application/controllers/admin/Statics.php @@ -23,13 +23,17 @@ class Statics extends WB_Controller { // 넘어온 검색값 정리 $this->data['startdate'] = $this->input->get('startdate', TRUE, date('Y-m-d', strtotime("-1 month", time()))); $this->data['enddate'] = $this->input->get('enddate', TRUE, date('Y-m-d')); + $this->data['is_mobile'] = $this->input->get('is_mobile', TRUE, array('Y','N')); + $this->data['ip'] = $this->input->get('ip', TRUE, ''); // 값 가져오기 $param['page'] = $this->input->get('page', TRUE, 1); - $param['page_rows'] = 20; + $param['page_rows'] = 15; $param['limit'] = TRUE; $param['where']['sta_regtime >='] = $this->data['startdate'] ." 00:00:00"; $param['where']['sta_regtime <='] = $this->data['enddate'] ." 23:59:59"; + if(! empty($this->data['ip'])) $param['where']['INET_NTOA(sta_ip)'] = $this->data['ip']; + $param['where_in']['sta_is_mobile'] = $this->data['is_mobile']; $this->data['visit_list'] = $this->statics_model->visit_list($param); // 페이지네이션 세팅 diff --git a/wheeparam/application/helpers/admin_helper.php b/wheeparam/application/helpers/admin_helper.php index fb5c36e..ae6e857 100644 --- a/wheeparam/application/helpers/admin_helper.php +++ b/wheeparam/application/helpers/admin_helper.php @@ -4,7 +4,7 @@ function display_member_menu($mem_idx, $mem_name, $mem_status='Y') $CI =& get_instance(); $str = '
    '; - $str .= ''; + $str .= ''; $str .= '
    +
    +

    검색 필터

    +
    'get','class'=>'form-flex','autocomplete'=>'off'))?>
    @@ -61,13 +64,13 @@
    +
    -
    -
    -

    회원 검색결과 ( 명)

    -
    +
    +
    +

    회원 검색결과 ( 명)

    diff --git a/wheeparam/views/themes/admin/statics/keyword.php b/wheeparam/views/themes/admin/statics/keyword.php index 43b6e28..006c120 100644 --- a/wheeparam/views/themes/admin/statics/keyword.php +++ b/wheeparam/views/themes/admin/statics/keyword.php @@ -4,54 +4,77 @@

    키워드별 접속 통계

    -'get','class'=>'form-flex','autocomplete'=>'off'))?> -
    - -
    - - - +
    +
    +

    검색 필터

    + 'get','class'=>'form-flex','autocomplete'=>'off'))?> +
    +
    +
    +
    일자 검색
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    - - +
    -
    -

    키워드별 접속 통계

    +
    +
    +

    키워드별 접속 통계

    +
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    키워드접속수
    (0? round($row['count']/$statics['total']*100,2):0?>%)
    키워드로 접속한 기록이 없습니다.
    TOTAL
    +
    +
    +

    키워드

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    키워드접속수
    (0? round($row['count']/$statics['total']*100,2):0?>%)
    키워드로 접속한 기록이 없습니다.
    TOTAL
    +
    +
    @@ -77,7 +100,7 @@ }, legend: { labels : { - fontColor : '#fff' + fontColor : '#282828' } } } diff --git a/wheeparam/views/themes/admin/statics/visit.php b/wheeparam/views/themes/admin/statics/visit.php index 5cf0134..10c7d6d 100644 --- a/wheeparam/views/themes/admin/statics/visit.php +++ b/wheeparam/views/themes/admin/statics/visit.php @@ -1,70 +1,120 @@ -'get','class'=>'form-flex','autocomplete'=>'off'))?> -
    - -
    - - - +
    +
    +

    검색 필터

    + 'get','class'=>'form-flex','autocomplete'=>'off'))?> +
    +
    +
    +
    일자 검색
    +
    + +
    +
    + +
    +
    +
    +
    접속 기기
    +
    + + +
    +
    +
    +
    IP 검색
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    -
    -
    - - - - - - - - - - - - - - - - - +
    +
    +

    사용자 접속 로그

    +
    + +
    +
    + +
    +
    접속일자국가지역조직브라우져접속기기모바일리퍼러접속 검색어접속 IP
    + - - - - - - - - - - - - - - + + + + + + + + + + - - -
    - - - - - - 접속일자접속 IP국가지역조직브라우져접속기기모바일리퍼러접속 검색어
    + + + + + + + + + + + + + + + + + + + + ':''?> + + + + + + + + + + +
    + +
    +
    + +
    +
    -
    -
    - -