You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1 lines
1.0 MiB

{"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 * \"&lt;\" represents the < sign.\n * \"&gt;\" represents the > sign.\n * \"&amp;\" represents the & sign.\n * \"&quot; 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 <span>string</span> & \"escape\"')\n * //\"HTML &lt;span&gt;string&lt;/span&gt; &amp; &quot;escape&quot;\"\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 \"&lt;\";\n case \">\":\n return \"&gt;\";\n case \"&\":\n return \"&amp;\";\n case \"\\\"\":\n return \"&quot;\";\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 &lt;span&gt;string&lt;/span&gt; &amp; &quot;escape&quot;')\n * //\"HTML <span>string</span> & \"escape\"\"\n * ```\n */\n function unescapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/(&lt;)|(&gt;)|(&amp;)|(&quot;)/gm, function (match) {\n switch (match) {\n case \"&lt;\":\n return \"<\";\n case \"&gt;\":\n return \">\";\n case \"&amp;\":\n return \"&\";\n case \"&quot;\":\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 // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\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 '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;', '/': '&#x2F;'\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 * '<div class=\"ax-mask\" id=\"{{maskId}}\" >' +\n * ' <div class=\"ax-mask-bg\" style=\"background-color:red !important;\"></div>' +\n * ' <div class=\"ax-mask-content\">' +\n * ' {{{body}}}' +\n * ' </div>' +\n * '</div>';\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: \"<h1>Loading..</h1>\",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"<h1>Loading..</h1>\",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n *\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '<div class=\"ax-mask\" id=\"{{maskId}}\" >' +\n * ' <div class=\"ax-mask-bg\" style=\"background-color:red !important;\"></div>' +\n * ' <div class=\"ax-mask-content\">' +\n * ' {{{body}}}' +\n * ' </div>' +\n * '</div>';\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: \"<h1>Loading..</h1>\",\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 <div class=\"ax-mask {{theme}}\" id=\"{{maskId}}\">\\n <div class=\"ax-mask-bg\"></div>\\n <div class=\"ax-mask-content\">\\n <div class=\"ax-mask-body\">\\n {{{body}}}\\n </div>\\n </div>\\n </div>\\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('<div class=\"ax5modal-resizer-background\" ondragstart=\"return false;\"></div>');\n self.resizer = jQuery('<div class=\"ax5modal-resizer\" ondragstart=\"return false;\"></div>');\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('<div class=\"ax5modal-resizer-background\" ondragstart=\"return false;\"></div>');\n self.resizer = jQuery('<div class=\"ax5modal-resizer\" ondragstart=\"return false;\"></div>');\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: '<i class=\"fa fa-spinner fa-5x fa-spin\" aria-hidden=\"true\"></i>',\n * header: {\n * title: \"MODAL TITLE\",\n * btns: {\n * minimize: {\n * label: '<i class=\"fa fa-minus-circle\" aria-hidden=\"true\"></i>', onClick: function () {\n * modal.minimize();\n * }\n * },\n * maximize: {\n * label: '<i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>', onClick: function () {\n * modal.maximize();\n * }\n * },\n * close: {\n * label: '<i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>', 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 <div id=\\\"{{modalId}}\\\" data-modal-els=\\\"root\\\" class=\\\"ax5modal {{theme}} {{fullscreen}}\\\" style=\\\"{{styles}}\\\">\\n {{#header}}\\n <div class=\\\"ax-modal-header\\\" data-modal-els=\\\"header\\\">\\n {{{title}}}\\n {{#btns}}\\n <div class=\\\"ax-modal-header-addon\\\">\\n {{#@each}}\\n <button tabindex=\\\"-1\\\" data-modal-header-btn=\\\"{{@key}}\\\" class=\\\"{{@value.theme}}\\\">{{{@value.label}}}</button>\\n {{/@each}}\\n </div>\\n {{/btns}}\\n </div>\\n {{/header}}\\n <div class=\\\"ax-modal-body\\\" data-modal-els=\\\"body\\\">\\n {{#iframe}}\\n <div data-modal-els=\\\"iframe-wrap\\\" style=\\\"-webkit-overflow-scrolling: touch; overflow: auto;position: relative;\\\">\\n <table data-modal-els=\\\"iframe-loading\\\" style=\\\"width:100%;height:100%;\\\"><tr><td style=\\\"text-align: center;vertical-align: middle\\\">{{{iframeLoadingMsg}}}</td></tr></table>\\n <iframe name=\\\"{{modalId}}-frame\\\" src=\\\"\\\" width=\\\"100%\\\" height=\\\"100%\\\" frameborder=\\\"0\\\" data-modal-els=\\\"iframe\\\" style=\\\"position: absolute;left:0;top:0;\\\"></iframe>\\n </div>\\n <form name=\\\"{{modalId}}-form\\\" data-modal-els=\\\"iframe-form\\\">\\n <input type=\\\"hidden\\\" name=\\\"modalId\\\" value=\\\"{{modalId}}\\\" />\\n {{#param}}\\n {{#@each}}\\n <input type=\\\"hidden\\\" name=\\\"{{@key}}\\\" value=\\\"{{@value}}\\\" />\\n {{/@each}}\\n {{/param}}\\n </form>\\n {{/iframe}}\\n {{^iframe}}\\n <div data-modal-els=\\\"body-frame\\\" style=\\\"position: absolute;left:0;top:0;width:100%;height:100%;\\\"></div>\\n {{/iframe}}\\n </div>\\n {{^disableResize}}\\n <div data-ax5modal-resizer=\\\"top\\\"></div>\\n <div data-ax5modal-resizer=\\\"right\\\"></div>\\n <div data-ax5modal-resizer=\\\"bottom\\\"></div>\\n <div data-ax5modal-resizer=\\\"left\\\"></div>\\n <div data-ax5modal-resizer=\\\"top-left\\\"></div>\\n <div data-ax5modal-resizer=\\\"top-right\\\"></div>\\n <div data-ax5modal-resizer=\\\"bottom-left\\\"></div>\\n <div data-ax5modal-resizer=\\\"bottom-right\\\"></div>\\n {{/disableResize}}\\n </div>\\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: '<i class=\"fa fa-bug\"></i>',\n * containerPosition: \"bottom-right\",\n * closeIcon: '<i class=\"fa fa-times\"></i>'\n * });\n *\n * toast.onStateChanged = function(){\n * console.log(this);\n * };\n *\n * toast.push({\n * icon: '<i class=\"fa fa-book\"></i>',\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, \"<br/>\"),\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('<div class=\"ax5-ui-toast-container ' + cfg.containerPosition + '\" data-toast-container=\"' + '' + self.containerId + '\" style=\"' + styles.join(\";\") + '\"></div>');\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 <div id=\\\"{{toastId}}\\\" data-ax5-ui=\\\"toast\\\" class=\\\"ax5-ui-toast {{theme}}\\\">\\n {{#icon}}\\n <div class=\\\"ax-toast-icon\\\">{{{.}}}</div>\\n {{/icon}}\\n <div class=\\\"ax-toast-body\\\">{{{msg}}}</div>\\n {{#btns}}\\n <div class=\\\"ax-toast-buttons\\\">\\n <div class=\\\"ax-button-wrap\\\">\\n {{#@each}}\\n <button type=\\\"button\\\" data-ax-toast-btn=\\\"{{@key}}\\\" class=\\\"btn btn-{{@value.theme}}\\\">{{{@value.label}}}</button>\\n {{/@each}}\\n </div>\\n </div>\\n {{/btns}}\\n {{^btns}}\\n <a class=\\\"ax-toast-close\\\" data-ax-toast-btn=\\\"ok\\\">{{{closeIcon}}}</a>\\n {{/btns}}\\n <div style=\\\"clear:both;\\\"></div>\\n </div>\";\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: \"<div>\",\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 = $( \"<div \" +\n\t\t\t\t\"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:100px;width:auto;'></div></div>\" ),\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$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).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$( \"<tr>\", 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$( \"<td>&#160;</td>\", 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 <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n/*!\n * jQuery UI Menu 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: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: http://api.jqueryui.com/menu/\n//>>demos: http://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\n\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\t\t\ttarget = $( event.currentTarget );\n\n\t\t\t\t// Ignore bubbled events on parent items, see #11641\n\t\t\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\t\t\tnull, \"ui-state-active\" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus. If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( \".ui-menu \" )\n\t\t\t\t\t.find( this.options.items )\n\t\t\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\t$.trim( $( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 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: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: http://api.jqueryui.com/autocomplete/\n//>>demos: http://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they're contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\n\t\t\t\t\t// Support: IE 8 only\n\t\t\t\t\t// Right clicking a menu item or selecting text from the menu items will\n\t\t\t\t\t// result in focus moving out of the input. However, we've already received\n\t\t\t\t\t// and ignored the blur event because of the cancelBlur flag set above. So\n\t\t\t\t\t// we restore focus to ensure that the menu closes properly based on the user's\n\t\t\t\t\t// next actions.\n\t\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy( function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( \"isContentEditable\" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( \"contentEditable\" );\n\n\t\tif ( editable === \"inherit\" ) {\n\t\t return this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === \"true\";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n// jscs:disable maximumLineLength\n/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */\n/*!\n * jQuery UI Datepicker 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: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.extend( $.ui, { datepicker: { version: \"1.12.1\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n Settings for (groups of) date pickers are maintained in an instance object,\n allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param settings object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t * @param settings object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\" );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\t\t\tinst.trigger = $( this._get( inst, \"buttonImageOnly\" ) ?\n\t\t\t\t$( \"<img/>\" ).addClass( this._triggerClass ).\n\t\t\t\t\tattr( { src: buttonImage, alt: buttonText, title: buttonText } ) :\n\t\t\t\t$( \"<button type='button'></button>\" ).addClass( this._triggerClass ).\n\t\t\t\t\thtml( !buttonImage ? buttonText : $( \"<img/>\" ).attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText } ) ) );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param input element - ignored\n\t * @param date\tstring or Date - the initial date to display\n\t * @param onSelect function - the function to call when a date is selected\n\t * @param settings object - update the dialog date picker instance's settings (anonymous object)\n\t * @param pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = false; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = true; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param target element - the target input field or division or span\n\t * @return object - the associated instance data\n\t * @throws error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t}\n\t\tcatch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t * @param name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param value any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param input element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year:first\" ).replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param input element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset +\n\t\t\t( period === \"M\" ? this._get( inst, \"showCurrentAtPos\" ) : 0 ), // undo positioning\n\t\t\tperiod );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = $( \"a\", td ).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param date Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param date Date - the date to get the week for\n\t * @return number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param format string - the expected format of the date\n\t * @param value string - the date in the above format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D - day name short\n\t * DD - day name long\n\t * m - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M - month name short\n\t * MM - month name long\n\t * y - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param format string - the desired format of the date\n\t * @param date Date - the date value to format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param date (Date) the date to check\n\t * @return (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers. These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tprev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" ) );\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tnext = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" ) );\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = ( !inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get( inst, \"closeText\" ) + \"</button>\" : \"\" );\n\n\t\tbuttonPanel = ( showButtonPanel ) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + ( isRTL ? controls : \"\" ) +\n\t\t\t( this._isInRange( inst, gotoDate ) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\" ) + ( isRTL ? \"\" : controls ) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) + // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n @param options string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n @return jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\t\tapply( $.datepicker, [ this ].concat( otherArgs ) ) :\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.12.1\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n\n\n}));","/*!\r\n * @copyright Copyright &copy; 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.length<r?e(a+u,r):u},r=function(t){var e,n;for(t=t||{},e=1;e<arguments.length;e++)if(n=arguments[e])for(var a in n)n.hasOwnProperty(a)&&(\"object\"==typeof n[a]?r(t[a],n[a]):t[a]=n[a]);return t},n=function(t,e){for(var r=0;r<e.length;r++)if(e[r].toLowerCase()===t.toLowerCase())return r;return-1},a={dateSettings:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],meridiem:[\"AM\",\"PM\"],ordinal:function(t){var e=t%10,r={1:\"st\",2:\"nd\",3:\"rd\"};return 1!==Math.floor(t%100/10)&&r[e]?r[e]:\"th\"}},separators:/[ \\-+\\/\\.T:@]/g,validParts:/[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,intParts:/[djwNzmnyYhHgGis]/g,tzParts:/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,tzClip:/[^-+\\dA-Z]/g},DateFormatter=function(t){var e=this,n=r(a,t);e.dateSettings=n.dateSettings,e.separators=n.separators,e.validParts=n.validParts,e.intParts=n.intParts,e.tzParts=n.tzParts,e.tzClip=n.tzClip},DateFormatter.prototype={constructor:DateFormatter,getMonth:function(t){var e,r=this;return e=n(t,r.dateSettings.monthsShort)+1,0===e&&(e=n(t,r.dateSettings.months)+1),e},parseDate:function(e,r){var n,a,u,i,s,o,c,f,l,h,d=this,g=!1,m=!1,p=d.dateSettings,y={date:null,year:null,month:null,day:null,hour:0,min:0,sec:0};if(!e)return null;if(e instanceof Date)return e;if(\"U\"===r)return u=parseInt(e),u?new Date(1e3*u):e;switch(typeof e){case\"number\":return new Date(e);case\"string\":break;default:return null}if(n=r.match(d.validParts),!n||0===n.length)throw new Error(\"Invalid date format definition.\");for(a=e.replace(d.separators,\"\\x00\").split(\"\\x00\"),u=0;u<a.length;u++)switch(i=a[u],s=parseInt(i),n[u]){case\"y\":case\"Y\":if(!s)return null;l=i.length,y.year=2===l?parseInt((70>s?\"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;a<c.length;a++){if(d=2,i=c[a],s=parseInt(i.substr(0,2)),isNaN(s))return null;switch(a){case 0:\"m\"===l[0]||\"n\"===l[0]?h.setMonth(s-1):h.setDate(s);break;case 1:\"m\"===l[0]||\"n\"===l[0]?h.setDate(s):h.setMonth(s-1);break;case 2:if(n=h.getFullYear(),r=i.length,d=4>r?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 (<chupurnov@gmail.com>)\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 = $('<div class=\"xdsoft_scrollbar\"></div>');\r\n\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\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 = $('<div class=\"xdsoft_datetimepicker xdsoft_noselect\"></div>'),\r\n\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\r\n\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\r\n\t\t\t\tmonth_picker = $('<div class=\"xdsoft_monthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\r\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\r\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\r\n\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\r\n\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\r\n\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\r\n\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\r\n\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\r\n\t\t\t\tapplyButton = $('<button type=\"button\" class=\"xdsoft_save_selected blue-gradient-button\">Save Selected</button>'),\r\n\r\n\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\r\n\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\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 += '<table><thead><tr>';\r\n\r\n\t\t\t\t\t\tif (options.weeks) {\r\n\t\t\t\t\t\t\ttable += '<th></th>';\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 += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable += '</tr></thead>';\r\n\t\t\t\t\t\ttable += '<tbody>';\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 += '<tr>';\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 += '<th>' + w + '</th>';\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 += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\" title=\"' + description + '\">' +\r\n\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\r\n\t\t\t\t\t\t\t\t'</td>';\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 += '</tr>';\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 += '</tbody></table>';\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 += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + dateHelper.formatDate(now, options.formatTime) + '</div>';\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 += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + (i + options.yearOffset) + '</div>';\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 += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[globalLocale].months[i] + '</div>';\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 = $('<div class=\"growlUI\"></div>');\r\n if (title) $m.append('<h1>'+title+'</h1>');\r\n if (message) $m.append('<h2>'+message+'</h2>');\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: '<h1>Please wait...</h1>',\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 = $('<iframe class=\"blockUI\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0\" src=\"'+opts.iframeSrc+'\"></iframe>');\r\n else\r\n lyr1 = $('<div class=\"blockUI\" style=\"display:none\"></div>');\r\n\r\n if (opts.theme)\r\n lyr2 = $('<div class=\"blockUI blockOverlay ui-widget-overlay\" style=\"z-index:'+ (z++) +';display:none\"></div>');\r\n else\r\n lyr2 = $('<div class=\"blockUI blockOverlay\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0\"></div>');\r\n\r\n if (opts.theme && full) {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:fixed\">';\r\n if ( opts.title ) {\r\n s += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || '&nbsp;')+'</div>';\r\n }\r\n s += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\r\n s += '</div>';\r\n }\r\n else if (opts.theme) {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:absolute\">';\r\n if ( opts.title ) {\r\n s += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || '&nbsp;')+'</div>';\r\n }\r\n s += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\r\n s += '</div>';\r\n }\r\n else if (full) {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage\" style=\"z-index:'+(z+10)+';display:none;position:fixed\"></div>';\r\n }\r\n else {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement\" style=\"z-index:'+(z+10)+';display:none;position:absolute\"></div>';\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(\"&lt;\").split(\">\").join(\"&gt;\").split('\"').join(\"&#34;\").split(\"'\").join(\"&#39;\");\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 : '<img src=\"/assets/images/common/ajax-loader.gif\" alt=\"로딩중\">',\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( '<i class=\"far fa-chevron-left\"></i>' );\r\n $('.ui-datepicker-next').empty().append( '<i class=\"far fa-chevron-right\"></i>' );\r\n }\r\n };\r\n\r\n $.datepicker.setDefaults($.datepicker.regional['ko']);\r\n\r\n $('[data-toggle=\"datepicker\"]').each(function(){\r\n $(this).formatter({\r\n pattern : '{{9999}}-{{99}}-{{99}}',\r\n persistent:true\r\n }).datepicker();\r\n });\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 /*\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: '<i class=\"far fa-spinner\"></i>'\r\n });\r\n APP.modal2 = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: '<i class=\"far fa-spinner\"></i>'\r\n });\r\n APP.toast = new ax5.ui.toast({\r\n containerPosition: \"top-right\",\r\n closeIcon: '<i class=\"far fa-times\"></i>'\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: '<i class=\"far fa-times\"></i>', 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: '<i class=\"far fa-times\"></i>', 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 : '<i class=\"far fa-bell\"></i>',\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 : '<i class=\"far fa-exclamation-circle\"></i>',\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 : '<i class=\"far fa-check-circle\"></i>',\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"}