{"version":3,"sources":["clipboard.js","jquery.cookie.js","global.js","member.js","board.js","ax5core.js","ax5mask.js","ax5modal.js","ax5toast.js","jquery-ui.js","jquery.datetimepicker.full.js","jquery.blockUI.js","jquery.formatter.js","jquery.tmpl.js","admin.js","components.js","modal.js","toast.js","faq.js"],"names":["root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_select","obj","_select2","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","length","descriptor","writable","key","Constructor","protoProps","staticProps","ClipboardAction","options","instance","TypeError","_classCallCheck","resolveOptions","initSelection","arguments","undefined","action","container","emitter","text","trigger","selectedText","selectFake","selectTarget","_this","isRTL","document","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","window","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","err","handleResult","emit","clearSelection","bind","focus","getSelection","removeAllRanges","set","_action","Error","nodeType","hasAttribute","_target","apply","is","delegate","type","callback","string","fn","node","destroy","listenNode","nodeList","Array","forEach","listenNodeList","selector","body","listenSelector","E","on","ctx","e","push","once","self","listener","off","_","data","slice","evtArr","len","evts","liveEvents","_clipboardAction","_tinyEmitter","_goodListener","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","listenClick","subClass","superClass","create","setPrototypeOf","_inherits","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","currentTarget","clipboardAction","getAttributeValue","querySelector","actions","support","queryCommandSupported","suffix","element","attribute","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","map","HTMLElement","toString","String","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","require","jQuery","$","pluses","encode","config","raw","encodeURIComponent","read","converter","indexOf","replace","decodeURIComponent","json","JSON","parse","parseCookieValue","isFunction","cookie","extend","defaults","expires","days","t","Date","setMilliseconds","getMilliseconds","stringify","stringifyCookieValue","toUTCString","path","domain","secure","join","result","cookies","split","parts","shift","removeCookie","console","log","APP","POPUP","REGEX","uniqueID","option","title","width","height","url","cw","screen","availWidth","ch","availHeight","sw","sh","ml","mt","win","open","outerWidth","outerHeight","alert","SET_LANG","lang","location","reload","click","idx","close","remove","not","preventDefault","sns_type","href","loc","img","attr","ClipboardJS","MEMBER","init","InitLoginForm","initCheckExist","InitRegisterForm","InitMemberModifyForm","submit","$form","ajax","serialize","base_url","success","res","LANG","member_join_success","message","elementLoginID","find","elementLoginPass","val","trim","member_login_userid_required","member_login_password_required","reurl","error","each","$btn","$target","member_join_user_id_required","wordCheck","denyWordCheck","member_join_no_valid_email_address","getInfo","member_join_user_id_already_exists","member_join_user_id_available","member_join_user_id_contains_deny_word","info","async","cache","POP_CHANGE_PHOTO","ready","BOARD","CATEGORY","EXTRA","COMMENT","count","bca_idx","postCount","modify","cmt_idx","reply","cmt_num","$form_post","blockUI","css","left","backgroundColor","cursor","baseZ","overlayCSS","opacity","DateFormatter","doc","reIsJson","reMs","reSnakeCase","reCamelCase","reDot","reInt","reNotNum","reMoneySplit","RegExp","reAmp","reEq","reClassNameSplit","ax5","U","guid","getGuid","_arguments","browser","ua","mobile","browserName","match","browserVersion","navigator","userAgent","toLowerCase","search","version","exec","isBrowser","wheelEnm","test","errorMsg","baseUrl","onerror","toArray","eventKeys","BACKSPACE","TAB","RETURN","ESC","LEFT","UP","RIGHT","DOWN","DELETE","HOME","END","PAGEUP","PAGEDOWN","INSERT","SPACE","weekNames","label","supportTouch","maxTouchPoints","msMaxTouchPoints","supportFileApi","FileReader","File","FileList","Blob","urlUtil","urls","param","referrer","pathname","hostname","port","hashdata","last","getError","className","errorCode","methodName","msg","_toString","O","_fn","isNothing","toJson","jsonString","util","isArray","isObject","jsonObjectBody","isString","isNumber","isUndefined","str","pos","substr","right","lastIndexOf","camelCase","all","letter","toUpperCase","snakeCase","number","cond","isMinus","returnValue","pair","Number","k","nUnit","myByte","Math","round","abs","floor","ceil","txtNumber","isNaN","arrNumber","localDate","yy","mm","dd","hh","mi","ss","utcD","UTC","getUTCHours","getTimezoneOffset","setUTCHours","date","nY","nH","nMM","nS","nDW","regY","regM","regD","regH","regMI","regS","regDW","fStr","nM","nD","aDateTime","aTimes","aTime","aDate","va","parseFloat","substring","_d","opts","mxdd","setTime","getTime","getFullYear","getMonth","getDate","daysOfMonth","parseInt","processor","firstDayOfMonth","lastDayOfMonth","getUTCFullYear","setDigit","getHours","getMinutes","getSeconds","getDay","$1","y","num","padder","radix","times","selectRange","textRange","selectAll","el","offset","arr","moveStart","collapse","moveEnd","start","end","setStart","setEnd","firstChild","rangeType","createTextRange","moveToElementText","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","now","trailingEdge","setTimeout","timeSinceLastInvoke","min","remainingWait","debounced","isInvoking","_len","_key","leadingEdge","max","cancel","clearTimeout","flush","escapeHtml","unescapeHtml","results","fnResult","reduce","tokenItem","reduceRight","filter","sum","defaultValue","tokenValue","avg","parseJson","force","Function","first","keys","item","deepCopy","r","getType","typeName","isWindow","isElement","isNodelist","setCookie","cn","cv","exdays","expire","setDate","escape","getCookie","cname","ca","charAt","unescape","merge","second","j","v","dday","diffnum","memoryDay","DyMilli","today","getDayTime","weeksOfMonth","myDate","year","month","findParentNode","tagName","toLocaleLowerCase","klasss","hasClass","a","cssNumber","found","unit","returns","vSplited","isDate","valueOf","isDateFormat","stopEvent","event","cancelBubble","stopPropagation","throttle","_string","format","concat","decode","_pos","color","_hexColor","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","rgb","rgba","hsl","hsla","hsv","hsva","hex3","hex6","hex4","hex8","convertToPercentage","convertTo255","convertToHex","bound01","isOnePointZero","processPercent","isPercentage","rgbToHsl","g","b","h","hslToRgb","hue2rgb","q","_color","_originalValue","convertObject","_format","_hex","getHexValue","lighten","amount","darken","getBrightness","isDark","isLight","getHsl","def","501","401","402","460","461","hwp","hdeb","de","del","_f","re_trim","propertyIsEnumerable","prop","fun","thisp","bound","nop","createStyleSheet","maxCount","resultSet","addRule","currentStyle","foo","removeRule","Infinity","sJSON","vContent","splice","documentMode","_splice","_slice","begin","size","cloned","upTo","con","method","empty","dummy","properties","methods","pop","webkitMatchMedia","mozMatchMedia","oMatchMedia","msMatchMedia","matchMedia","getElementsByTagName","styleMedia","media","script","id","insertBefore","getComputedStyle","matchMedium","styleSheet","cssText","textContent","addListener","localMatchMedia","hasMediaQueries","isListening","timeoutID","queries","handleChange","evt","il","mql","listeners","jl","index","removeListener","ui","setConfig","cfg","callInit","bindWindowResize","callBack","resize","bindWindowResize__","main","addClass","cls","classStore","wrapper","arg","instanceId","initInstance","global","mustache","objectToString","escapeRegExp","hasProperty","propName","regExpTest","nonSpaceRe","isWhitespace","re","testRegExp","entityMap","&","<",">","\"","'","/","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","tail","Context","view","parentContext",".","@each","@key","@value","parent","Writer","eos","scan","scanUntil","lookup","names","context","lookupHit","clearCache","template","tags","tokens","openingTagRe","closingTagRe","closingCurlyRe","sections","spaces","hasTag","nonSpace","stripSpace","compileTags","tagsToCompile","chr","token","openSection","scanner","valueLength","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","parseTemplate","render","partials","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","defaultWriter","to_html","send","UI","MASK","theme","animateTime","maskContent","status","onStateChanged","that","setBody","content","templateName","maskConfig","_cfg","maskId","$mask","tmpl","getBodyTmpl","append","_$target","align","zIndex","state","_delay","_close","removeClass","fadeOut","pullRequest","mask_instance","mask","defaultMask","columnKeys","tmplName","MODAL","ENM","mousedown","mousemove","mouseup","getMousePosition","mouseObj","changedTouches","clientX","clientY","minimizePosition","clickEventName","closeToEsc","disableDrag","disableResize","iframe","activeModal","watingModal","eventProcessor","onResize","move","modalId","header","fullScreen","styles","iframeLoadingMsg","absolute","hide","show","onkeyup","isButton","isFullScreen","mousePosition","moveModal","btnOnClick","originalEvent","resizeModal","srcElement","btns","dialogId","btnTarget","keyCode","alignProcessor","top-left","top-right","bottom-left","bottom-right","center-middle","modalZIndex","modalOffset","modalBox","scrollLeft","__dx","__dy","resizerBg","resizer","getResizerPosition","box","modalConfig","removeAttr","resizerType","resizerProcessor","minHeight","shiftKey","altKey","bottom","minWidth","cursorType","headerHeight","unbind","tryCount","_option","$iframe","iframeObject","idoc","contentDocument","contentWindow","children","innerHTML","CollectGarbage","minimized","minimize","originalHeight","restore","setModalConfig","_config","_fullScreen","modal_instance","modal","TOAST","toastSeq","toastSeqClear","icon","closeIcon","ok","displayTime","containerPosition","toastContainer","queue","getContent","toastId","toastBox","containerId","prepend","toastType","btn_target","dialogConfig","confirm","toast_instance","toast","toastDisplay","orig","widgetUuid","widgetSlice","cleanData","elems","events","elem","_data","triggerHandler","widget","base","existingConstructor","basePrototype","proxiedPrototype","namespace","fullName","Widget","expr","_createWidget","_proto","_childConstructors","_super","_superApply","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","bridge","input","inputIndex","inputLength","isPlainObject","isMethodCall","methodValue","jquery","pushStack","_init","defaultElement","classes","disabled","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","ownerDocument","defaultView","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","noop","_destroy","_removeClass","removeData","curOption","_setOptions","_setOption","_setOptionClasses","classKey","currentElements","_classes","add","_toggleClass","enable","disable","full","processClassString","checkOption","current","unique","extra","_untrackClassesElement","inArray","_addClass","toggleClass","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","eventName","_off","delay","_hoverable","mouseenter","mouseleave","_focusable","focusin","focusout","Event","isDefaultPrevented","defaultEffect","hasOptions","effect","effectName","duration","isEmptyObject","complete","effects","easing","next","cachedScrollbarWidth","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","offsets","parseCss","scrollbarWidth","w1","w2","div","innerDiv","offsetWidth","clientWidth","getScrollInfo","within","overflowX","isDocument","overflowY","hasOverflowX","scrollWidth","scrollHeight","getWithinInfo","withinElement","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","scrollInfo","collision","pageY","pageX","at","horizontalOffset","verticalOffset","collisionPosition","using","elemWidth","elemHeight","marginLeft","marginTop","collisionWidth","collisionHeight","myOffset","my","dir","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","offsetLeft","newOverTop","offsetTop","flipfit","createPseudo","dataName","COMMA","ENTER","ESCAPE","PAGE_DOWN","PAGE_UP","PERIOD","scrollParent","includeHidden","excludeStaticParent","overflowRegex","parents","eq","uniqueId","removeUniqueId","ie","mouseHandled","distance","_mouseInit","_mouseDown","stopImmediatePropagation","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","which","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","button","ctrlKey","metaKey","ignoreMissingWhich","_mouseDrag","_mouseStop","mouse","appendTo","axis","connectWith","containment","cursorAt","dropOnEmpty","forcePlaceholderSize","forceHelperSize","grid","handle","helper","items","placeholder","revert","scroll","scrollSensitivity","scrollSpeed","scope","tolerance","activate","beforeStop","change","deactivate","out","over","receive","sort","stop","update","_isOverAxis","x","reference","_isFloating","containerCache","refresh","_setHandleClassName","overrideHandle","currentItem","validHandle","reverting","_refreshItems","addBack","_removeCurrentsFromItems","noActivation","currentContainer","refreshPositions","_createHelper","_cacheHelperProportions","_cacheMargins","margins","_getParentOffset","relative","_getRelativeOffset","cssPosition","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","domPosition","prev","_createPlaceholder","_setContainment","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","overflowOffset","_uiHash","_preserveHelperProportions","containers","ddmanager","dropBehaviour","prepareOffsets","dragging","itemElement","intersection","scrolled","positionAbs","_convertPositionTo","lastPositionAbs","offsetHeight","_intersectsWithPointer","contains","direction","_intersectsWithSides","_rearrange","_contactContainers","drag","noPropagation","drop","cur","animation","offsetParent","animate","_clear","_storedCSS","_noFinalSort","after","_getItemsAsjQuery","connected","expression","ret","_intersectsWith","x1","x2","helperProportions","y1","y2","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","_getDragVerticalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","delta","_connectWith","inst","addItems","list","grep","targetData","_queries","queriesLength","fast","toleranceElement","custom","refreshContainers","_createTrPlaceholder","innerHeight","innerWidth","sourceTr","targetTr","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","clone","po","ce","co","mod","scrollIsRootNode","hardRefresh","nextSibling","counter","delayedTriggers","before","delayEvent","fromOutside","cancelHelperRemoval","_inst","sender","safeActiveElement","activeElement","icons","submenu","menus","role","blur","activeMenu","tabIndex","mousedown .ui-menu-item","click .ui-menu-item","active","isPropagationStopped","has","expand","timer","mouseenter .ui-menu-item","previousFilter","actualTarget","siblings","mouseleave .ui-menu","keepActiveItem","collapseAll","keydown","_closeOnDocumentClick","submenus","_keydown","character","skip","previousPage","nextPage","_move","previous","_activate","fromCharCode","filterTimer","_filterMenuItems","nextAll","newSubmenus","newItems","newWrappers","aria-hidden","aria-expanded","menu","submenuCaret","_isDivider","_itemRole","listbox","nested","focused","activeParent","_scrollIntoView","_startOpening","borderTop","paddingTop","elementHeight","itemHeight","_hasScroll","fromFocus","_open","currentMenu","startMenu","newItem","isFirstItem","prevAll","isLastItem","escapedCharacter","regex","autoFocus","minLength","source","response","requestIndex","pending","suppressKeyPress","suppressKeyPressRepeat","suppressInput","isTextarea","isInput","isMultiLine","_isContentEditable","valueMethod","isNewMenu","_keyEvent","_value","term","_searchTimeout","keypress","selectedItem","cancelBlur","searching","_change","_initSource","_appendTo","menufocus","one","liveRegion","menuselect","aria-live","aria-relevant","beforeunload","xhr","abort","_isEventTargetInWidget","menuElement","_closeOnClickOutside","array","request","autocomplete","dataType","equalValues","menuVisible","modifierKey","_search","cancelSearch","_response","proxy","__response","_normalize","_suggest","ul","_renderMenu","_resizeMenu","_renderItemData","_renderItem","keyEvent","editable","escapeRegex","matcher","messages","noResults","datepicker_instActive","Datepicker","_curInst","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","dateFormat","firstDay","showMonthAfterYear","yearSuffix","_defaults","showOn","showAnim","showOptions","defaultDate","appendText","buttonText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","changeMonth","changeYear","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","minDate","maxDate","beforeShowDay","beforeShow","onSelect","onChangeMonthYear","onClose","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","en","dpDiv","datepicker_bindHover","datepicker_handleMouseover","datepicker","_isDisabledDatepicker","inline","datepicker_extendRemove","markerClassName","maxRows","_widgetDatepicker","setDefaults","settings","_attachDatepicker","_newInst","_connectDatepicker","_inlineDatepicker","selectedDay","selectedMonth","selectedYear","drawMonth","drawYear","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","src","alt","html","_lastInput","_hideDatepicker","findMax","maxI","setMonth","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","browserWidth","browserHeight","scrollX","scrollY","_dialogInst","_dialogInput","clientHeight","_destroyDatepicker","_enableDatepicker","_getInst","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","sel","handled","_selectDay","_adjustDate","_clearDate","_gotoToday","chars","_possibleChars","charCode","lastVal","parseDate","_getFormatConfig","beforeShowSettings","isFixed","_findPos","display","_checkOffset","datepicker_getZindex","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","cols","activeCell","yearshtml","replaceWith","dpWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","filters","hidden","postProcess","_tidyDialog","unblockUI","_checkExternalClick","period","_adjustInstDate","currentDay","currentMonth","currentYear","_notifyChange","_selectMonthYear","selectedIndex","td","_selectDate","formatDate","noWeekends","day","checkDate","iFormat","dim","iValue","shortYearCutoffTemp","doy","literal","lookAhead","getNumber","isDoubled","digits","getName","shortNames","longNames","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","formatNumber","formatName","output","dates","_restrictMinMax","_determineDate","newDate","pattern","offsetString","offsetNumeric","setHours","setMinutes","setSeconds","noChange","clear","origMonth","origYear","selectDay","selectMonth","selectYear","maxDraw","gotoDate","controls","buttonPanel","dow","row","group","col","selectedDate","cornerClass","calender","thead","daysInMonth","leadDays","curRows","numRows","printDate","dRow","tbody","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","currentDate","_canAdjustMonth","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","secondary","inMinYear","inMaxYear","years","thisYear","determineYear","endYear","monthHtml","onChange","minMax","curYear","curMonth","yearSplit","minYear","maxYear","initialized","otherArgs","u","dateSettings","daysShort","months","monthsShort","meridiem","ordinal","1","2","3","separators","validParts","intParts","tzParts","tzClip","f","hour","sec","guessDate","setFullYear","parseFormat","D","w","N","z","Y","W","F","M","L","A","G","B","getUTCMinutes","getUTCSeconds","H","I","P","T","Z","datetimepickerFactory","default_options","i18n","ar","dayOfWeekShort","dayOfWeek","ro","bg","fa","ru","uk","nl","tr","fr","es","th","pl","pt","se","km","kr","it","da","no","ja","vi","sl","cs","hu","az","bs","en-GB","et","eu","fi","gl","hr","ko","lt","lv","mk","mn","pt-BR","sk","sq","sr-YU","sr","sv","zh-TW","zh","ug","he","hy","kg","rm","ka","rtl","formatTime","startDate","step","monthChangeSpinner","closeOnDateSelect","closeOnTimeSelect","closeOnWithoutClick","closeOnInputClick","openOnFocus","timepicker","weeks","defaultTime","minTime","maxTime","minDateTime","maxDateTime","allowTimes","opened","initTime","touchMovedThreshold","onSelectDate","onSelectTime","onChangeMonth","onGetWeekOfYear","onChangeYear","onChangeDateTime","onShow","onGenerate","withoutCopyright","inverseButton","hours12","dayOfWeekStart","parentID","timeHeightInTimePicker","timepickerScrollbar","todayButton","prevButton","nextButton","defaultSelect","scrollMonth","scrollTime","scrollInput","lazyInit","validateOnBlur","allowBlank","yearStart","yearEnd","monthStart","monthEnd","fixed","roundTime","weekends","highlightedDates","highlightedPeriods","allowDates","allowDateRe","disabledDates","disabledWeekDays","yearOffset","enterLikeTab","showApplyButton","dateHelper","defaultDateHelper","globalLocale","dateFormatterOptionsDefault","initDateFormatter","locale","dateFormatters","moment","formatter","isFormatStandard","isValid","toDate","formatMask","datetimepicker","setLocale","newLocale","setDateFormatter","dateFormatter","df","standardFormats","values","HighlightedDate","desc","getPropertyValue","countDaysInMonth","xdsoftScroller","percent","timebox","parentHeight","scrollbar","scroller","timeboxparent","pointerEventToXY","touch","touches","maximumOffset","startY","startTop","h1","touchStart","startTopScroll","calcOffset","arguments_callee","percentage","noTriggerScroll","deltaY","coord","opt","opt2","createDateTimePicker","destroyDateTimePicker","KEY0","KEY9","_KEY0","_KEY9","CTRLKEY","DEL","ARROWLEFT","ARROWUP","ARROWRIGHT","ARROWDOWN","F5","AKEY","CKEY","VKEY","ZKEY","YKEY","ctrlDown","lazyInitTimer","xchangeTimer","timerclick","current_time_index","setPos","_xdsoft_datetime","forEachAncestorOf","xdsoft_copyright","month_picker","calendar","applyButton","monthselect","yearselect","triggerAfterOpen","visible","currentTime","handleTouchMoved","touchPosition","touchStartPosition","xMovement","yMovement","sqrt","touchMoved","getCurrentValue","ct","strToDate","strToDateTime","strtotime","isValidDate","setMask","isValidValue","reg","setCaretPos","getElementById","pastedData","clipboardData","getData","selectionStart","valueBeforeCursor","valueAfterPaste","digit","selEnd","selectionEnd","hasSel","maskValueAtCurPos","posShorterThanMaskLength","posGreaterThanZero","selLength","defaultBlank","selReplacementRemainder","valueBeforeSel","insertChars","charsAfterSelection","insertChar","valueAfterNextChar","getValue","getCurrentTime","setOptions","_options","exDesc","splitData","hDate","keyDate","dateTest","dateEnd","setCurrentTime","toggle","splittedHours","splittedMinutes","dayOfWeekStartPrev","norecursion","dTime","requireValidDate","nextMonth","prevMonth","getWeekOfYear","datetime","week","onejan","sDateTime","timeOffset","tmpDate","sDate","sTime","$this","arguments_callee1","arguments_callee2","arguments_callee4","pheight","arguments_callee5","customDateSettings","line_time","description","maxDateTimeDay","table","newRow","minTimeMinutesOfDay","maxTimeMinutesOfDay","current_time","isALlowTimesInit","currentMinutesOfDay","classType","xdevent","deltaX","$input","dateInputOffset","dateInputElem","verticalPosition","datetimepickerElem","dateInputHasFixedAncestor","$dateInput","windowWidth","verticalAnchorEdge","datetimepickerCss","windowHeight","windowScrollTop","diff","ancestorNode","arguments_callee6","elementSelector","unmousewheel","initOnActionCallback","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","special","mousewheel","setup","onmousewheel","getLineHeight","getPageHeight","teardown","$elem","$parent","adjustOldDeltas","normalizeOffset","absDelta","orgEvent","offsetX","offsetY","fix","detail","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","getBoundingClientRect","boundingRect","deltaFactor","unshift","nullLowestDelta","dispatch","_fadeIn","fadeIn","noOp","msie","ie6","setExpr","setExpression","install","growlUI","timeout","$m","callBlock","centerY","showOverlay","onUnblock","growlCSS","mouseover","displayBlock","fadeTo","mouseout","block","fullOpts","$el","ignoreIfBlocked","unblock","zoom","draggable","textAlign","themedCSS","cursorReset","-webkit-border-radius","-moz-border-radius","border-radius","iframeSrc","forceIframe","centerX","allowBodyStretch","bindEvents","constrainTabKey","focusInput","focusableElements","onBlock","onOverlayClick","quirksmodeOffsetHack","blockMsgClass","pageBlock","pageBlockEls","lyr1","lyr2","lyr3","layers","$par","boxModel","sz","fixT","fixL","cb","cb1","cb2","center","to","els","reset","cssW","fwd","back","regexp","inpts","getMatches","pLength","mCount","iCount","processMatch","valLength","mLength","utils","destObj","addChars","removeChars","isBetween","bounds","attachEvent","getClip","getMatchingKey","isDelKeyDown","backspace","delete","isDelKeyPress","isSpecialKeyPress","tab","enter","home","leftarrow","uparrow","rightarrow","downarrow","isModifier","collection","patternMatcher","inptSel","persistent","repeat","inptRegs","9","*","Formatter","patterns","_specFromSinglePattern","_updatePattern","hldrs","_keyDown","_keyPress","_paste","_processKey","_focus","addInptType","resetPattern","_removeChars","newPattern","getPattern","isSpecial","isAfterStart","isFirstChar","delKey","ignoreCaret","_delete","_formatValue","_nextPos","newPos","_validateInpts","_addChars","curChar","curHldr","inptType","isBadType","isInvalid","inBounds","focusStart","_addChar","patternStr","parseMatcher","patternSpec","matcherStr","parsedPattern","regExpMatcher","matchedIndex","parentElement","inputRange","endRange","moveToBookmark","getBookmark","compareEndPoints","formatted","appendToTmplItems","oldManip","domManip","tmplItmAtt","htmlExpr","newTmplItems","wrappedItems","topTmplItem","itemKey","cloneIndex","stack","newTmplItem","parentItem","_wrap","nodes","calls","tiCalls","nest","tiNest","wrap","tiWrap","tiHtml","tiUpdate","_ctnt","build","tmplItem","frag","middle","storeTmplItems","unencode","makeArray","childNodes","buildTmplFn","markup","slash","fnargs","parens","exprAutoFnDetect","tag","_default","$2","updateWrapped","wrapped","keySuffix","newClonedItems","processItemKey","pntKey","pntItem","pntNode","cloneTmplItem","textOnly","innerText","outerHTML","cloneNode","coll","prependTo","insertAfter","replaceAll","original","tmplItems","insert","dmArgs","elemsLength","fragClone","afterManip","topLevel","dataItem","if","else","=","!","initAjaxDefaultSetting","initMenu","initAx5","initPlugins","initCheckboxAll","ajaxError","responseJSON","toastr","ajaxStart","ajaxComplete","menuActive","_updateDatepicker_original","afterShow","$check","is_all","checked","$allCheck","MASK2","modal2","backdrop","Dropdown","getParent","clearMenus","relatedTarget","VERSION","isActive","$items","old","dropdown","noConflict","defaultCss","defaultOption","modalCallback","modalSendData","sendData","modalCss","modalAlign","maximize","MODAL2","keyCheck","existCheck","brd_key","is_raw","form","bca_parent","post_count","bmt_idx","faq","fac_idx","faq_idx","category","exist","total_count","POP_INFO_ADMIN","mem_idx","POP_PASSWORD_ADMIN","POP_MODIFY_ADMIN","POP_POINT_ADMIN","POP_POINT_FORM_ADMIN","STATUS_CHANGE","current_status","change_status","common_msg_invalid_access","change_status_msg","member_status_y","member_status_n","member_status_d","member_status_h"],"mappings":"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","sourcesContent":["/*!\n * clipboard.js v2.0.1\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(6);\nvar delegate = __webpack_require__(5);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(4);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ })\n/******/ ]);\n});","/*!\r\n * jQuery Cookie Plugin v1.4.1\r\n * https://github.com/carhartl/jquery-cookie\r\n *\r\n * Copyright 2006, 2014 Klaus Hartl\r\n * Released under the MIT license\r\n */\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD (Register as an anonymous module)\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n\r\n var pluses = /\\+/g;\r\n\r\n function encode(s) {\r\n return config.raw ? s : encodeURIComponent(s);\r\n }\r\n\r\n function decode(s) {\r\n return config.raw ? s : decodeURIComponent(s);\r\n }\r\n\r\n function stringifyCookieValue(value) {\r\n return encode(config.json ? JSON.stringify(value) : String(value));\r\n }\r\n\r\n function parseCookieValue(s) {\r\n if (s.indexOf('\"') === 0) {\r\n // This is a quoted cookie as according to RFC2068, unescape...\r\n s = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\r\n }\r\n\r\n try {\r\n // Replace server-side written pluses with spaces.\r\n // If we can't decode the cookie, ignore it, it's unusable.\r\n // If we can't parse the cookie, ignore it, it's unusable.\r\n s = decodeURIComponent(s.replace(pluses, ' '));\r\n return config.json ? JSON.parse(s) : s;\r\n } catch(e) {}\r\n }\r\n\r\n function read(s, converter) {\r\n var value = config.raw ? s : parseCookieValue(s);\r\n return $.isFunction(converter) ? converter(value) : value;\r\n }\r\n\r\n var config = $.cookie = function (key, value, options) {\r\n\r\n // Write\r\n\r\n if (arguments.length > 1 && !$.isFunction(value)) {\r\n options = $.extend({}, config.defaults, options);\r\n\r\n if (typeof options.expires === 'number') {\r\n var days = options.expires, t = options.expires = new Date();\r\n t.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n }\r\n\r\n return (document.cookie = [\r\n encode(key), '=', stringifyCookieValue(value),\r\n options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n options.path ? '; path=' + options.path : '',\r\n options.domain ? '; domain=' + options.domain : '',\r\n options.secure ? '; secure' : ''\r\n ].join(''));\r\n }\r\n\r\n // Read\r\n\r\n var result = key ? undefined : {},\r\n // To prevent the for loop in the first place assign an empty array\r\n // in case there are no cookies at all. Also prevents odd result when\r\n // calling $.cookie().\r\n cookies = document.cookie ? document.cookie.split('; ') : [],\r\n i = 0,\r\n l = cookies.length;\r\n\r\n for (; i < l; i++) {\r\n var parts = cookies[i].split('='),\r\n name = decode(parts.shift()),\r\n cookie = parts.join('=');\r\n\r\n if (key === name) {\r\n // If second argument (value) is a function it's a converter...\r\n result = read(cookie, value);\r\n break;\r\n }\r\n\r\n // Prevent storing a cookie that we couldn't decode.\r\n if (!key && (cookie = read(cookie)) !== undefined) {\r\n result[name] = cookie;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n config.defaults = {};\r\n\r\n $.removeCookie = function (key, options) {\r\n // Must not alter options, thus extending a fresh object...\r\n $.cookie(key, '', $.extend({}, options, { expires: -1 }));\r\n return !$.cookie(key);\r\n };\r\n\r\n}));","/***********************************************************************************\r\n * IE 8 이하 브라우져 console.log 에러처리\r\n ***********************************************************************************/\r\nif(!window.console || !window.console.log) {window.console = {log : function(){}};}\r\n\r\nvar APP = {};\r\nAPP.POPUP = null;\r\nAPP.REGEX = {};\r\nAPP.REGEX.uniqueID = /^[a-z][a-z0-9_]{2,19}$/g;\r\n(function($) {\r\n APP.POPUP = function(option) {\r\n var defaults={\r\n title : '_blank',\r\n width : 800,\r\n height : 600,\r\n url : ''\r\n };\r\n\r\n var options = $.extend({}, defaults, option);\r\n\r\n cw = screen.availWidth;\r\n ch = screen.availHeight;\r\n sw = options.width;\r\n sh = options.height;\r\n\r\n ml = (cw - sw) / 2;\r\n mt = (ch - sh) / 2;\r\n var option = 'width='+sw+',height='+sh+',top='+mt+',left='+ml+',scrollbars=yes,resizable=no';\r\n var win = window.open(options.url, options.title, option);\r\n if (win == null || typeof(win) == \"undefined\" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0))\r\n {\r\n alert(\"팝업 차단 기능이 설정되어있습니다\\n\\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오.\");\r\n return;\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * 언어셋 변경\r\n * @param lang\r\n * @constructor\r\n */\r\nAPP.SET_LANG = function(lang)\r\n{\r\n $.cookie('site_lang', lang, {expires:30, path:'/'});\r\n location.reload();\r\n};\r\n\r\n/**\r\n * 팝업창 닫기버튼 init\r\n */\r\n$('[data-toggle=\"btn-popup-close\"]').click(function(e){\r\n var type = $(this).data('type');\r\n var idx = $(this).data('idx');\r\n var cookie = $(this).data('cookie');\r\n\r\n if( type == 'Y')\r\n {\r\n window.close();\r\n }\r\n else if( type == 'N' )\r\n {\r\n $(\"#popup-\" + idx ).remove();\r\n }\r\n\r\n if( cookie == 1 )\r\n {\r\n $.cookie('popup_'+idx, 1, {expires:1, path:'/'});\r\n }\r\n});\r\n\r\n/**\r\n * SNS 공유\r\n */\r\n$(\"a[data-toggle='sns-share']\").not('[data-service=\"link\"]').click(function(e){\r\n e.preventDefault();\r\n\r\n var _this = $(this);\r\n var sns_type = _this.data('service');\r\n var href = _this.data('url');\r\n var title = _this.data('title');\r\n var loc = \"\";\r\n var img = $(\"meta[name='og:image']\").attr('content');\r\n\r\n if( ! sns_type || !href || !title) return;\r\n\r\n if( sns_type == 'facebook' ) {\r\n loc = '//www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'twitter' ) {\r\n loc = '//twitter.com/home?status='+encodeURIComponent(title)+' '+href;\r\n }\r\n else if ( sns_type == 'google' ) {\r\n loc = '//plus.google.com/share?url='+href;\r\n }\r\n else if ( sns_type == 'pinterest' ) {\r\n\r\n loc = '//www.pinterest.com/pin/create/button/?url='+href+'&media='+img+'&description='+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'kakaostory') {\r\n loc = 'https://story.kakao.com/share?url='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'band' ) {\r\n loc = 'http://www.band.us/plugin/share?body='+encodeURIComponent(title)+'%0A'+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'naver' ) {\r\n loc = \"http://share.naver.com/web/shareView.nhn?url=\"+encodeURIComponent(href)+\"&title=\"+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'line') {\r\n loc = \"http://line.me/R/msg/text/?\" + encodeURIComponent(title + \"\\n\" + href);\r\n }\r\n else {\r\n return false;\r\n }\r\n APP.POPUP({ url : loc});\r\n return false;\r\n});\r\n\r\n$(function(){\r\n var clipboard = new ClipboardJS('a[data-toggle=\"sns-share\"][data-service=\"link\"]', {\r\n text: function(trigger) {\r\n return trigger.getAttribute('data-url');\r\n }\r\n });\r\n clipboard.on('success', function(){\r\n alert('현재 URL이 복사되었습니다.');\r\n });\r\n});","/**********************************************************************************************************************\r\n * 회원정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_INFO_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/info/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 비밀번호 변경 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_PASSWORD_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '비밀번호 변경'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/password/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 정보수정 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_MODIFY_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보 수정'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/modify/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 포인트 관리'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 추가 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_FORM_ADMIN = function(mem_idx) {\r\n var mem_idx = typeof mem_idx != 'undefined' && mem_idx ? mem_idx : null;\r\n if(! mem_idx) {\r\n alert('잘못된 접근입니다.');\r\n return;\r\n }\r\n\r\n APP.MODAL2.callback = function(){\r\n location.reload();\r\n };\r\n APP.MODAL2.open({\r\n width: 410,\r\n height :200,\r\n header : {\r\n title : '회원 포인트 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point_form/' + mem_idx\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 STATUS 변경\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.STATUS_CHANGE = function(mem_idx, current_status, change_status) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx || typeof current_status == 'undefined' || ! current_status || typeof change_status == 'undefined' || ! change_status ) {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n var change_status_msg = '';\r\n if( change_status == 'Y' ) change_status_msg = LANG.member_status_y;\r\n else if (change_status == 'N') change_status_msg = LANG.member_status_n;\r\n else if (change_status == 'D') change_status_msg = LANG.member_status_d;\r\n else if (change_status == 'H') change_status_msg = LANG.member_status_h;\r\n else {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n\r\n if( ! confirm('해당 회원의 상태를 [' + change_status_msg + '] 상태로 변경합니까?') ) return;\r\n $.ajax({\r\n url : '/ajax/members/status',\r\n type : 'POST',\r\n async : false,\r\n cache : false,\r\n data : {\r\n mem_idx : mem_idx,\r\n current_status : current_status,\r\n change_status : change_status\r\n },\r\n success:function(){\r\n alert('지정한 회원의 상태를 [' + change_status_msg + '] 상태로 변경하였습니다.');\r\n location.reload();\r\n }\r\n })\r\n};\r\n\r\n$(function(){\r\n\r\n});\r\n","APP.BOARD.keyCheck = function(value) {\r\n if (value == '') return \"게시판 고유키를 입력하세요\";\r\n if (!APP.REGEX.uniqueID.test(value)) return \"게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다.\";\r\n if (APP.BOARD.existCheck(value)) return \"이미 존재하는 키 입니다.\";\r\n\r\n return true;\r\n};\r\n\r\nAPP.BOARD.existCheck = function(brd_key) {\r\n var info = null;\r\n $.ajax({\r\n url : base_url + '/ajax/board/info',\r\n type : 'get',\r\n async : false,\r\n cache : false,\r\n data : {\r\n brd_key : brd_key,\r\n is_raw : true\r\n },\r\n success:function(res){\r\n info = res;\r\n }\r\n });\r\n return info;\r\n};\r\n\r\nAPP.BOARD.CATEGORY.form = function(brd_key, bca_parent, bca_idx) {\r\n var brd_key = typeof brd_key != 'undefined' && brd_key ? brd_key : null;\r\n var bca_parent = typeof bca_parent != 'undefined' && bca_parent >= 0 ? bca_parent : null;\r\n var bca_idx = typeof bca_idx != 'undefined' && bca_idx ? bca_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n if(parseInt(bca_parent) < 0)\r\n {\r\n alert('부모 카테고리가 선택되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bca_idx ? '카테고리 정보 수정' : '카테고리 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/category_form',\r\n param : {\r\n brd_key : brd_key,\r\n bca_parent : bca_parent,\r\n bca_idx : bca_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.CATEGORY.remove = function(bca_idx) {\r\n \r\n if( APP.BOARD.CATEGORY.count(bca_idx) > 0 )\r\n {\r\n alert('해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요');\r\n return false;\r\n }\r\n\r\n var post_count = APP.BOARD.CATEGORY.postCount(bca_idx);\r\n if( post_count > 0 )\r\n {\r\n if(! confirm('해당 카테고리에 등록된 글이 '+post_count+'건이 있습니다. 삭제를 진행하시겠습니까?' )) {\r\n return false;\r\n }\r\n }\r\n\r\n if(! confirm('해당 카테고리를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/category\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n bca_idx : bca_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('카테고리 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('카테고리 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\nAPP.BOARD.EXTRA.form = function(brd_key, bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bmt_idx ? '입력필드 수정' : '입력필드 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/extra_form',\r\n param : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.EXTRA.remove = function(brd_key,bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! bmt_idx )\r\n {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n if(! confirm('해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/extra\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('입력필드 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('입력필드 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\n\r\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function () {\n 'use strict';\n\n // root of function\n\n var root = this,\n win = this,\n doc = win ? win.document : null,\n docElem = win ? win.document.documentElement : null,\n reIsJson = /^([\"'](\\\\.|[^\"\\\\\\n\\r])*?[\"']|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$/,\n reMs = /^-ms-/,\n reSnakeCase = /[\\-_]([\\da-z])/gi,\n reCamelCase = /([A-Z])/g,\n reDot = /\\./,\n reInt = /[-|+]?[\\D]/gi,\n reNotNum = /\\D/gi,\n reMoneySplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n reAmp = /&/g,\n reEq = /=/,\n reClassNameSplit = /[ ]+/g,\n\n\n /** @namespace {Object} ax5 */\n ax5 = {},\n info = void 0,\n U = void 0,\n dom = void 0;\n\n /**\n * guid\n * @member {Number} ax5.guid\n */\n ax5.guid = 1;\n /**\n * ax5.guid를 구하고 증가시킵니다.\n * @method ax5.getGuid\n * @returns {Number} guid\n */\n ax5.getGuid = function () {\n return ax5.guid++;\n };\n\n /**\n * 상수모음\n * @namespace ax5.info\n */\n ax5.info = info = function () {\n var _arguments = arguments;\n\n /**\n * ax5 version\n * @member {String} ax5.info.version\n */\n var version = \"1.4.126\";\n\n /**\n * ax5 library path\n * @member {String} ax5.info.baseUrl\n */\n var baseUrl = \"\";\n\n /**\n * ax5 에러 출력메세지 사용자 재 정의\n * @member {Object} ax5.info.onerror\n * @examples\n * ```\n * ax5.info.onerror = function(){\n * console.log(arguments);\n * }\n * ```\n */\n var onerror = function onerror() {\n console.error(U.toArray(_arguments).join(\":\"));\n };\n\n /**\n * event keyCodes\n * @member {Object} ax5.info.eventKeys\n * @example\n * ```\n * {\n * \tBACKSPACE: 8, TAB: 9,\n * \tRETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n * \tHOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n * }\n * ```\n */\n var eventKeys = {\n BACKSPACE: 8, TAB: 9,\n RETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n HOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n };\n\n /**\n * week names\n * @member {Object[]} weekNames\n * @member {string} weekNames[].label\n *\n * @example\n * ```\n * [\n * {label: \"SUN\"},{label: \"MON\"},{label: \"TUE\"},{label: \"WED\"},{label: \"THU\"},{label: \"FRI\"},{label: \"SAT\"}\n * ]\n * console.log( weekNames[0] );\n * console.log( ax5.info.weekNames[(new Date()).getDay()].label )\n * ```\n */\n var weekNames = [{ label: \"SUN\" }, { label: \"MON\" }, { label: \"TUE\" }, { label: \"WED\" }, { label: \"THU\" }, { label: \"FRI\" }, { label: \"SAT\" }];\n\n /**\n * 사용자 브라우저 식별용 오브젝트\n * @member {Object} ax5.info.browser\n * @example\n * ```\n * console.log( ax5.info.browser );\n * //Object {name: \"chrome\", version: \"39.0.2171.71\", mobile: false}\n * ```\n */\n var browser = function (ua, mobile, browserName, match, browser, browserVersion) {\n if (!win || !win.navigator) return {};\n\n ua = navigator.userAgent.toLowerCase(), mobile = ua.search(/mobile/g) != -1, browserName, match, browser, browserVersion;\n\n if (ua.search(/iphone/g) != -1) {\n return { name: \"iphone\", version: 0, mobile: true };\n } else if (ua.search(/ipad/g) != -1) {\n return { name: \"ipad\", version: 0, mobile: true };\n } else if (ua.search(/android/g) != -1) {\n match = /(android)[ \\/]([\\w.]+)/.exec(ua) || [];\n browserVersion = match[2] || \"0\";\n return { name: \"android\", version: browserVersion, mobile: mobile };\n } else {\n browserName = \"\";\n match = /(opr)[ \\/]([\\w.]+)/.exec(ua) || /(chrome)[ \\/]([\\w.]+)/.exec(ua) || /(webkit)[ \\/]([\\w.]+)/.exec(ua) || /(msie) ([\\w.]+)/.exec(ua) || ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) || [];\n browser = match[1] || \"\";\n browserVersion = match[2] || \"0\";\n\n if (browser == \"msie\") browser = \"ie\";\n return {\n name: browser,\n version: browserVersion,\n mobile: mobile\n };\n }\n ua = null, mobile = null, browserName = null, match = null, browser = null, browserVersion = null;\n }();\n\n /**\n * 브라우저 여부\n * @member {Boolean} ax5.info.isBrowser\n */\n var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && win.document);\n\n /**\n * 브라우저에 따른 마우스 휠 이벤트이름\n * @member {Object} ax5.info.wheelEnm\n */\n var wheelEnm = win && /Firefox/i.test(navigator.userAgent) ? \"DOMMouseScroll\" : \"mousewheel\";\n\n /**\n * 첫번째 자리수 동사 - (필요한것이 없을때 : 4, 실행오류 : 5)\n * 두번째 자리수 목적어 - 문자열 0, 숫자 1, 배열 2, 오브젝트 3, 함수 4, DOM 5, 파일 6, 기타 7\n * 세번째 자리수 옵션\n * @member {Object} ax5.info.errorMsg\n */\n var errorMsg = {};\n\n /**\n * 현재 페이지의 Url 정보를 리턴합니다.\n * @method ax5.info.urlUtil\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.util.toJson( ax5.info.urlUtil() ) );\n * {\n *\t\"baseUrl\": \"http://ax5:2018\",\n *\t\"href\": \"http://ax5:2018/samples/index.html?a=1&b=1#abc\",\n *\t\"param\": \"a=1&b=1\",\n *\t\"referrer\": \"\",\n *\t\"pathname\": \"/samples/index.html\",\n *\t\"hostname\": \"ax5\",\n *\t\"port\": \"2018\",\n *\t\"url\": \"http://ax5:2018/samples/index.html\",\n *\t\"hashdata\": \"abc\"\n * }\n * ```\n */\n function urlUtil(url, urls) {\n url = {\n href: win.location.href,\n param: win.location.search,\n referrer: doc.referrer,\n pathname: win.location.pathname,\n hostname: win.location.hostname,\n port: win.location.port\n }, urls = url.href.split(/[\\?#]/);\n url.param = url.param.replace(\"?\", \"\");\n url.url = urls[0];\n if (url.href.search(\"#\") > -1) {\n url.hashdata = U.last(urls);\n }\n urls = null;\n url.baseUrl = U.left(url.href, \"?\").replace(url.pathname, \"\");\n return url;\n }\n\n /**\n * ax5-error-msg.js 에 정의된 ax5 error를 반환합니다.\n * @method ax5.info.getError\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.info.getError(\"single-uploader\", \"460\", \"upload\") );\n *\n * if(!this.selectedFile){\n * if (cfg.onEvent) {\n * \tvar that = {\n * \t\taction: \"error\",\n * \t\terror: ax5.info.getError(\"single-uploader\", \"460\", \"upload\")\n * \t};\n * \tcfg.onEvent.call(that, that);\n * }\n * return this;\n * }\n * ```\n */\n function getError(className, errorCode, methodName) {\n if (info.errorMsg && info.errorMsg[className]) {\n return {\n className: className,\n errorCode: errorCode,\n methodName: methodName,\n msg: info.errorMsg[className][errorCode]\n };\n } else {\n return { className: className, errorCode: errorCode, methodName: methodName };\n }\n }\n\n /**\n * 브라우져의 터치 기능 유무를 확인합니다.\n * @method ax5.info.supportTouch\n * @returns {boolean}\n * @example\n * ```\n * var chkFlag = ax5.info.supportTouch;\n */\n var supportTouch = win ? 'ontouchstart' in win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 : false;\n\n var supportFileApi = win ? win.FileReader && win.File && win.FileList && win.Blob : false;\n\n return {\n errorMsg: errorMsg,\n version: version,\n baseUrl: baseUrl,\n onerror: onerror,\n eventKeys: eventKeys,\n weekNames: weekNames,\n browser: browser,\n isBrowser: isBrowser,\n supportTouch: supportTouch,\n supportFileApi: supportFileApi,\n wheelEnm: wheelEnm,\n urlUtil: urlUtil,\n getError: getError\n };\n }();\n\n /**\n * Refer to this by {@link ax5}.\n * @namespace ax5.util\n */\n ax5['util'] = U = function () {\n var _toString = Object.prototype.toString;\n\n /**\n * Object나 Array의 아이템으로 사용자 함수를 호출합니다.\n * @method ax5.util.each\n * @param {Object|Array} O\n * @param {Function} _fn\n * @example\n * ```js\n * var axf = ax5.util;\n * axf.each([0,1,2], function(){\n * \t// with this\n * });\n * axf.each({a:1, b:2}, function(){\n * \t// with this\n * });\n * ```\n */\n function each(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n isObj = l === undefined || typeof O === \"function\";\n if (isObj) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") if (_fn.call(O[key], key, O[key]) === false) break;\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") if (_fn.call(O[i], i, O[i++]) === false) break;\n }\n }\n return O;\n }\n\n // In addition to using the http://underscorejs.org : map, reduce, reduceRight, find\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값으로 이루어진 새로운 배열을 만듭니다.\n * @method ax5.util.map\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4];\n * var myObject = {a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n *\n * var _arr = ax5.util.map( myArray, function(index, I){\n * return index+1;\n * });\n * console.log(_arr);\n * // [1, 2, 3, 4, 5]\n *\n * var _arr = ax5.util.map( myObject, function(k, v){\n * return v * 2;\n * });\n * console.log(_arr);\n * // [2, 4, NaN, NaN]\n * ```\n */\n function map(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n results = [],\n fnResult = void 0;\n if (isObject(O)) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[key], key, O[key])) === false) break;else results.push(fnResult);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[i], i, O[i++])) === false) break;else results.push(fnResult);\n }\n }\n }\n return results;\n }\n\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값이 참인 아이템의 위치나 키값을 반환합니다.\n * @method ax5.util.search\n * @param {Object|Array} O\n * @param {Function|String|Number} _fn - 함수 또는 값\n * @returns {Number|String}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4,5,6];\n * var myObject = {a:\"123\",\"b\":\"123\",c:123};\n *\n * ax5.util.search(myArray, function(){\n * return this > 3;\n * });\n * // 4\n * ax5.util.search(myObject, function(k, v){\n * return v === 123;\n * });\n * // \"c\"\n * ax5.util.search([1,2,3,4], 3);\n * // 2\n * ax5.util.search([1,2], 4);\n * // -1\n * ax5.util.search([\"name\",\"value\"], \"value\");\n * // 1\n * ax5.util.search([\"name\",\"value\"], \"values\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value2\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value\");\n * // \"k2\"\n * ```\n */\n function search(O, _fn) {\n if (isNothing(O)) return -1;\n if (isObject(O)) {\n for (var key in O) {\n if (typeof O[key] != \"undefined\" && isFunction(_fn) && _fn.call(O[key], key, O[key])) {\n return key;\n break;\n } else if (O[key] == _fn) {\n return key;\n break;\n }\n }\n } else {\n for (var i = 0, l = O.length; i < l; i++) {\n if (typeof O[i] != \"undefined\" && isFunction(_fn) && _fn.call(O[i], i, O[i])) {\n return i;\n break;\n } else if (O[i] == _fn) {\n return i;\n break;\n }\n }\n }\n return -1;\n }\n\n /**\n * @method ax5.util.sum\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.sum(arr, function () {\n * if(this.name == \"122\") {\n * return this.value;\n * }\n * });\n * console.log(rs); // 19\n *\n * console.log(ax5.util.sum(arr, 10, function () {\n * return this.value;\n * }));\n * // 40\n * ```\n */\n function sum(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * @method ax5.util.avg\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.avg(arr, function () {\n * return this.value;\n * });\n *\n * console.log(rs); // 10\n * ```\n */\n function avg(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue / l;\n } else if (isObject(O)) {\n l = 0;\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;++l;\n }\n }\n return defaultValue / l;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * 배열의 왼쪽에서 오른쪽으로 연산을 진행하는데 수행한 결과가 왼쪽 값으로 반영되어 최종 왼쪽 값을 반환합니다.\n * @method ax5.util.reduce\n * @param {Array|Object} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduce( aarray, function(p, n){\n * return p * n;\n * });\n * console.log(result, aarray);\n * // 120 [5, 4, 3, 2, 1]\n *\n * ax5.util.reduce({a:1, b:2}, function(p, n){\n * return parseInt(p|0) + parseInt(n);\n * });\n * // 3\n * ```\n */\n function reduce(O, _fn) {\n var i, l, tokenItem;\n if (isArray(O)) {\n i = 0, l = O.length, tokenItem = O[i];\n for (; i < l - 1;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[++i])) === false) break;\n }\n }\n return tokenItem;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[i])) === false) break;\n }\n }\n return tokenItem;\n } else {\n console.error(\"argument error : ax5.util.reduce - use Array or Object\");\n return null;\n }\n }\n\n /**\n * 배열의 오른쪽에서 왼쪽으로 연산을 진행하는데 수행한 결과가 오른쪽 값으로 반영되어 최종 오른쪽 값을 반환합니다.\n * @method ax5.util.reduceRight\n * @param {Array} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduceRight( aarray, function(p, n){\n * console.log( n );\n * return p * n;\n * });\n * console.log(result, aarray);\n * 120 [5, 4, 3, 2, 1]\n * ```\n */\n function reduceRight(O, _fn) {\n var i = O.length - 1,\n tokenItem = O[i];\n for (; i > 0;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[--i])) === false) break;\n }\n }\n return tokenItem;\n }\n\n /**\n * 배열또는 오브젝트의 각 아이템을 인자로 하는 사용자 함수의 결과가 참인 아이템들의 배열을 반환합니다.\n * @method ax5.util.filter\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.filter( aarray, function(){\n * return this % 2;\n * });\n * console.log(result);\n * // [5, 3, 1]\n *\n * var filObject = {a:1, s:\"string\", oa:{pickup:true, name:\"AXISJ\"}, os:{pickup:true, name:\"AX5\"}};\n * result = ax5.util.filter( filObject, function(){\n * \treturn this.pickup;\n * });\n * console.log( ax5.util.toJson(result) );\n * // [{\"pickup\": , \"name\": \"AXISJ\"}, {\"pickup\": , \"name\": \"AX5\"}]\n * ```\n */\n function filter(O, _fn) {\n if (isNothing(O)) return [];\n var k,\n i = 0,\n l = O.length,\n results = [],\n fnResult;\n if (isObject(O)) {\n for (k in O) {\n if (typeof O[k] != \"undefined\") {\n if (fnResult = _fn.call(O[k], k, O[k])) results.push(O[k]);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n if (fnResult = _fn.call(O[i], i, O[i])) results.push(O[i]);\n i++;\n }\n }\n }\n return results;\n }\n\n /**\n * Object를 JSONString 으로 반환합니다.\n * @method ax5.util.toJson\n * @param {Object|Array} O\n * @returns {String} JSON\n * @example\n * ```js\n * var ax = ax5.util;\n * var myObject = {\n * a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n * console.log( ax.toJson(myObject) );\n * ```\n */\n function toJson(O) {\n var jsonString = \"\";\n if (ax5.util.isArray(O)) {\n var i = 0,\n l = O.length;\n jsonString += \"[\";\n for (; i < l; i++) {\n if (i > 0) jsonString += \",\";\n jsonString += toJson(O[i]);\n }\n jsonString += \"]\";\n } else if (ax5.util.isObject(O)) {\n jsonString += \"{\";\n var jsonObjectBody = [];\n each(O, function (key, value) {\n jsonObjectBody.push('\"' + key + '\": ' + toJson(value));\n });\n jsonString += jsonObjectBody.join(\", \");\n jsonString += \"}\";\n } else if (ax5.util.isString(O)) {\n jsonString = '\"' + O + '\"';\n } else if (ax5.util.isNumber(O)) {\n jsonString = O;\n } else if (ax5.util.isUndefined(O)) {\n jsonString = \"undefined\";\n } else if (ax5.util.isFunction(O)) {\n jsonString = '\"{Function}\"';\n } else {\n jsonString = O;\n }\n return jsonString;\n }\n\n /**\n * 관용의 JSON Parser\n * @method ax5.util.parseJson\n * @param {String} JSONString\n * @param {Boolean} [force] - 강제 적용 여부 (json 문자열 검사를 무시하고 오브젝트 변환을 시도합니다.)\n * @returns {Object}\n * @example\n * ```\n * console.log(ax5.util.parseJson('{\"a\":1}'));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':'b'}\"));\n * // Object {a: 1, b: \"b\"}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':function(){return 1;}}\", true));\n * // Object {a: 1, b: function}\n * console.log(ax5.util.parseJson(\"{a:1}\"));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"[1,2,3]\"));\n * // [1, 2, 3]\n * console.log(ax5.util.parseJson(\"['1','2','3']\"));\n * // [\"1\", \"2\", \"3\"]\n * console.log(ax5.util.parseJson(\"[{'a':'99'},'2','3']\"));\n * // [Object, \"2\", \"3\"]\n * ```\n */\n function parseJson(str, force) {\n if (force || reIsJson.test(str)) {\n try {\n return new Function('', 'return ' + str)();\n } catch (e) {\n return { error: 500, msg: 'syntax error' };\n }\n } else {\n return { error: 500, msg: 'syntax error' };\n }\n }\n\n /**\n * 인자의 타입을 반환합니다.\n * @method ax5.util.getType\n * @param {Object|Array|String|Number|Element|Etc} O\n * @returns {String} window|element|object|array|function|string|number|undefined|nodelist\n * @example\n * ```js\n * var axf = ax5.util;\n * var a = 11;\n * var b = \"11\";\n * console.log( axf.getType(a) );\n * console.log( axf.getType(b) );\n * ```\n */\n function getType(O) {\n var typeName;\n if (O != null && O == O.window) {\n typeName = \"window\";\n } else if (!!(O && O.nodeType == 1)) {\n typeName = \"element\";\n } else if (!!(O && O.nodeType == 11)) {\n typeName = \"fragment\";\n } else if (O === null) {\n typeName = \"null\";\n } else if (typeof O === \"undefined\") {\n typeName = \"undefined\";\n } else if (_toString.call(O) == \"[object Object]\") {\n typeName = \"object\";\n } else if (_toString.call(O) == \"[object Array]\") {\n typeName = \"array\";\n } else if (_toString.call(O) == \"[object String]\") {\n typeName = \"string\";\n } else if (_toString.call(O) == \"[object Number]\") {\n typeName = \"number\";\n } else if (_toString.call(O) == \"[object NodeList]\") {\n typeName = \"nodelist\";\n } else if (typeof O === \"function\") {\n typeName = \"function\";\n }\n return typeName;\n }\n\n /**\n * 오브젝트가 window 인지 판단합니다.\n * @method ax5.util.isWindow\n * @param {Object} O\n * @returns {Boolean}\n */\n function isWindow(O) {\n return O != null && O == O.window;\n }\n\n /**\n * 오브젝트가 HTML 엘리먼트여부인지 판단합니다.\n * @method ax5.util.isElement\n * @param {Object} O\n * @returns {Boolean}\n */\n function isElement(O) {\n return !!(O && (O.nodeType == 1 || O.nodeType == 11));\n }\n\n /**\n * 오브젝트가 Object인지 판단합니다.\n * @method ax5.util.isObject\n * @param {Object} O\n * @returns {Boolean}\n */\n function isObject(O) {\n return _toString.call(O) == \"[object Object]\";\n }\n\n /**\n * 오브젝트가 Array인지 판단합니다.\n * @method ax5.util.isArray\n * @param {Object} O\n * @returns {Boolean}\n */\n function isArray(O) {\n return _toString.call(O) == \"[object Array]\";\n }\n\n /**\n * 오브젝트가 Function인지 판단합니다.\n * @method ax5.util.isFunction\n * @param {Object} O\n * @returns {Boolean}\n */\n function isFunction(O) {\n return typeof O === \"function\";\n }\n\n /**\n * 오브젝트가 String인지 판단합니다.\n * @method ax5.util.isString\n * @param {Object} O\n * @returns {Boolean}\n */\n function isString(O) {\n return _toString.call(O) == \"[object String]\";\n }\n\n /**\n * 오브젝트가 Number인지 판단합니다.\n * @method ax5.util.isNumber\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNumber(O) {\n return _toString.call(O) == \"[object Number]\";\n }\n\n /**\n * 오브젝트가 NodeList인지 판단합니다.\n * @method ax5.util.isNodelist\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNodelist(O) {\n return !!(_toString.call(O) == \"[object NodeList]\" || typeof O !== \"undefined\" && O && O[0] && O[0].nodeType == 1);\n }\n\n /**\n * 오브젝트가 undefined인지 판단합니다.\n * @method ax5.util.isUndefined\n * @param {Object} O\n * @returns {Boolean}\n */\n function isUndefined(O) {\n return typeof O === \"undefined\";\n }\n\n /**\n * 오브젝트가 undefined이거나 null이거나 빈값인지 판단합니다.\n * @method ax5.util.isNothing\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNothing(O) {\n return typeof O === \"undefined\" || O === null || O === \"\";\n }\n\n /**\n * 오브젝트가 날자값인지 판단합니다.\n * @method ax5.util.isDate\n * @param {Date} O\n * @returns {Boolean}\n * @example\n * ```js\n * ax5.util.isDate('2016-09-30');\n * // false\n * ax5.util.isDate( new Date('2016-09-30') );\n * // true\n * ```\n */\n function isDate(O) {\n return O instanceof Date && !isNaN(O.valueOf());\n }\n\n function isDateFormat(O) {\n var result = false;\n if (!O) {} else if (O instanceof Date && !isNaN(O.valueOf())) {\n result = true;\n } else {\n if (O.length > 7) {\n if (date(O) instanceof Date) {\n return true;\n }\n }\n O = O.replace(/\\D/g, '');\n if (O.length > 7) {\n var mm = O.substr(4, 2),\n dd = O.substr(6, 2);\n O = date(O);\n if (O.getMonth() == mm - 1 && O.getDate() == dd) {\n result = true;\n }\n }\n }\n return result;\n }\n\n /**\n * 오브젝트의 첫번째 아이템을 반환합니다.\n * @method ax5.util.first\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.first({a:1, b:2});\n * // Object {a: 1}\n * ax5.util.first([1,2,3,4]);\n * // 1\n * ```\n */\n function first(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[0]] = O[keys[0]];\n return item;\n } else if (isArray(O)) {\n return O[0];\n } else {\n console.error(\"ax5.util.object.first\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 오브젝트의 마지막 아이템을 반환합니다.\n * @method ax5.util.last\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.last({a:1, b:2});\n * // Object {b: 2}\n * ax5.util.last([1,2,3,4]);\n * // 4\n * ```\n */\n function last(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[keys.length - 1]] = O[keys[keys.length - 1]];\n return item;\n } else if (isArray(O)) {\n return O[O.length - 1];\n } else {\n console.error(\"ax5.util.object.last\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 쿠키를 설정합니다.\n * @method ax5.util.setCookie\n * @param {String} cname - 쿠키이름\n * @param {String} cvalue - 쿠키값\n * @param {Number} [exdays] - 쿠키 유지일수\n * @param {Object} [opts] - path, domain 설정 옵션\n * @example\n * ```js\n * ax5.util.setCookie(\"jslib\", \"AX5\");\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3);\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3, {path:\"/\", domain:\".axisj.com\"});\n * ```\n */\n function setCookie(cn, cv, exdays, opts) {\n var expire;\n if (typeof exdays === \"number\") {\n expire = new Date();\n expire.setDate(expire.getDate() + exdays);\n }\n opts = opts || {};\n return doc.cookie = [escape(cn), '=', escape(cv), expire ? \"; expires=\" + expire.toUTCString() : \"\", // use expires attribute, max-age is not supported by IE\n opts.path ? \"; path=\" + opts.path : \"\", opts.domain ? \"; domain=\" + opts.domain : \"\", opts.secure ? \"; secure\" : \"\"].join(\"\");\n }\n\n /**\n * 쿠키를 가져옵니다.\n * @method ax5.util.getCookie\n * @param {String} cname\n * @returns {String} cookie value\n * @example\n * ```js\n * ax5.util.getCookie(\"jslib\");\n * ```\n */\n function getCookie(cname) {\n var name = cname + \"=\";\n var ca = doc.cookie.split(';'),\n i = 0,\n l = ca.length;\n for (; i < l; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }if (c.indexOf(name) != -1) return unescape(c.substring(name.length, c.length));\n }\n return \"\";\n }\n\n /**\n * jsonString 으로 alert 합니다.\n * @method ax5.util.alert\n * @param {Object|Array|String|Number} O\n * @returns {Object|Array|String|Number} O\n * @example ```js\n * ax5.util.alert({a:1,b:2});\n * ax5.util.alert(\"정말?\");\n * ```\n */\n function alert(O) {\n win.alert(toJson(O));\n return O;\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.left\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.left(\"abcd.efd\", 3);\n * // abc\n * ax5.util.left(\"abcd.efd\", \".\");\n * // abcd\n * ```\n */\n function left(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n if (isString(pos)) {\n return str.indexOf(pos) > -1 ? str.substr(0, str.indexOf(pos)) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(0, pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.right\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.right(\"abcd.efd\", 3);\n * // efd\n * ax5.util.right(\"abcd.efd\", \".\");\n * // efd\n * ```\n */\n function right(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n str = '' + str;\n if (isString(pos)) {\n return str.lastIndexOf(pos) > -1 ? str.substr(str.lastIndexOf(pos) + 1) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(str.length - pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * css형 문자열이나 특수문자가 포함된 문자열을 카멜케이스로 바꾸어 반환합니다.\n * @method ax5.util.camelCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.camelCase(\"inner-width\");\n * ax5.util.camelCase(\"innerWidth\");\n * // innerWidth\n * ```\n */\n function camelCase(str) {\n return str.replace(reMs, \"ms-\").replace(reSnakeCase, function (all, letter) {\n return letter.toUpperCase();\n });\n }\n\n /**\n * css형 문자열이나 카멜케이스문자열을 스네이크 케이스 문자열로 바꾸어 반환합니다.\n * @method ax5.util.snakeCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.snakeCase(\"innerWidth\");\n * ax5.util.snakeCase(\"inner-Width\");\n * ax5.util.snakeCase(\"innerWidth\");\n * // inner-width\n * ```\n */\n function snakeCase(str) {\n return camelCase(str).replace(reCamelCase, function (all, letter) {\n return \"-\" + letter.toLowerCase();\n });\n }\n\n /**\n * 문자열에서 -. 을 제외한 모든 문자열을 제거하고 숫자로 반환합니다. 옵션에 따라 원하는 형식의 숫자로 변환 할 수 도 있습니다.\n * @method ax5.util.number\n * @param {String|Number} str\n * @param {Object} cond - 옵션\n * @returns {String|Number}\n * @example\n * ```js\n * var cond = {\n * \tround: {Number|Boolean} - 반올림할 자릿수,\n * \tmoney: {Boolean} - 통화,\n * \tabs: {Boolean} - 절대값,\n * \tbyte: {Boolean} - 바이트\n * }\n *\n * console.log(ax5.util.number(123456789.678, {round:1}));\n * console.log(ax5.util.number(123456789.678, {round:1, money:true}));\n * console.log(ax5.util.number(123456789.678, {round:2, byte:true}));\n * console.log(ax5.util.number(-123456789.8888, {abs:true, round:2, money:true}));\n * console.log(ax5.util.number(\"A-1234~~56789.8~888PX\", {abs:true, round:2, money:true}));\n *\n * //123456789.7\n * //123,456,789.7\n * //117.7MB\n * //123,456,789.89\n * //123,456,789.89\n * ```\n */\n function number(str, cond) {\n var result,\n pair = ('' + str).split(reDot),\n isMinus,\n returnValue;\n\n isMinus = Number(pair[0].replace(/,/g, \"\")) < 0 || pair[0] == \"-0\";\n returnValue = 0.0;\n pair[0] = pair[0].replace(reInt, \"\");\n\n if (pair[1]) {\n pair[1] = pair[1].replace(reNotNum, \"\");\n returnValue = Number(pair[0] + \".\" + pair[1]) || 0;\n } else {\n returnValue = Number(pair[0]) || 0;\n }\n result = isMinus ? -returnValue : returnValue;\n\n each(cond, function (k, c) {\n if (k == \"round\") {\n if (isNumber(c)) {\n if (c < 0) {\n result = +(Math.round(result + \"e-\" + Math.abs(c)) + \"e+\" + Math.abs(c));\n } else {\n result = +(Math.round(result + \"e+\" + c) + \"e-\" + c);\n }\n } else {\n result = Math.round(result);\n }\n }\n if (k == \"floor\") {\n result = Math.floor(result);\n }\n if (k == \"ceil\") {\n result = Math.ceil(result);\n } else if (k == \"money\") {\n result = function (val) {\n var txtNumber = '' + val;\n if (isNaN(txtNumber) || txtNumber == \"\") {\n return \"\";\n } else {\n var arrNumber = txtNumber.split('.');\n arrNumber[0] += '.';\n do {\n arrNumber[0] = arrNumber[0].replace(reMoneySplit, '$1,$2');\n } while (reMoneySplit.test(arrNumber[0]));\n if (arrNumber.length > 1) {\n return arrNumber.join('');\n } else {\n return arrNumber[0].split('.')[0];\n }\n }\n }(result);\n } else if (k == \"abs\") {\n result = Math.abs(Number(result));\n } else if (k == \"byte\") {\n result = function (val) {\n val = Number(result);\n var nUnit = \"KB\";\n var myByte = val / 1024;\n if (myByte / 1024 > 1) {\n nUnit = \"MB\";\n myByte = myByte / 1024;\n }\n if (myByte / 1024 > 1) {\n nUnit = \"GB\";\n myByte = myByte / 1024;\n }\n return number(myByte, { round: 1 }) + nUnit;\n }(result);\n }\n });\n\n return result;\n }\n\n /**\n * 배열 비슷한 오브젝트를 배열로 변환해줍니다.\n * @method ax5.util.toArray\n * @param {Object|Elements|Arguments} O\n * @returns {Array}\n * @example\n * ```js\n * ax5.util.toArray(arguments);\n * //\n * ```\n */\n function toArray(O) {\n if (typeof O.length != \"undefined\") return Array.prototype.slice.call(O);\n return [];\n }\n\n /**\n * 첫번째 인자에 두번째 인자 아이템을 합쳐줍니다. concat과 같은 역할을 하지만. 인자가 Array타입이 아니어도 됩니다.\n * @method ax5.util.merge\n * @param {Array|ArrayLike} first\n * @param {Array|ArrayLike} second\n * @returns {Array} first\n * @example\n * ```\n *\n * ```\n */\n function merge(first, second) {\n var l = second.length,\n i = first.length,\n j = 0;\n\n if (typeof l === \"number\") {\n for (; j < l; j++) {\n first[i++] = second[j];\n }\n } else {\n while (second[j] !== undefined) {\n first[i++] = second[j++];\n }\n }\n\n first.length = i;\n\n return first;\n }\n\n /**\n * 오브젝트를 파라미터형식으로 또는 파라미터를 오브젝트 형식으로 변환합니다.\n * @method ax5.util.param\n * @param {Object|Array|String} O\n * @param {String} [cond] - param|object\n * @returns {Object|String}\n * @example\n * ```\n * ax5.util.param({a:1,b:'1232'}, \"param\");\n * ax5.util.param(\"a=1&b=1232\", \"param\");\n * // \"a=1&b=1232\"\n * ax5.util.param(\"a=1&b=1232\");\n * // {a: \"1\", b: \"1232\"}\n * ```\n */\n function param(O, cond) {\n var p;\n if (isString(O) && typeof cond !== \"undefined\" && cond == \"param\") {\n return O;\n } else if (isString(O) && typeof cond !== \"undefined\" && cond == \"object\" || isString(O) && typeof cond === \"undefined\") {\n p = {};\n each(O.split(reAmp), function () {\n var item = this.split(reEq);\n if (!p[item[0]]) p[item[0]] = item[1];else {\n if (isString(p[item[0]])) p[item[0]] = [p[item[0]]];\n p[item[0]].push(item[1]);\n }\n });\n return p;\n } else {\n p = [];\n each(O, function (k, v) {\n p.push(k + \"=\" + escape(v));\n });\n return p.join('&');\n }\n }\n\n function encode(s) {\n return encodeURIComponent(s);\n }\n\n function decode(s) {\n return decodeURIComponent(s);\n }\n\n function error() {\n ax5.info.onerror.apply(this, arguments);\n }\n\n function localDate(yy, mm, dd, hh, mi, ss) {\n var utcD, localD;\n localD = new Date();\n if (mm < 0) mm = 0;\n if (typeof hh === \"undefined\") hh = 12;\n if (typeof mi === \"undefined\") mi = 0;\n utcD = new Date(Date.UTC(yy, mm, dd || 1, hh, mi, ss || 0));\n\n if (mm == 0 && dd == 1 && utcD.getUTCHours() + utcD.getTimezoneOffset() / 60 < 0) {\n utcD.setUTCHours(0);\n } else {\n utcD.setUTCHours(utcD.getUTCHours() + utcD.getTimezoneOffset() / 60);\n }\n return utcD;\n }\n\n /**\n * 날짜 형식의 문자열이나 Date객체를 조건에 맞게 처리 한 후 원하는 return 값으로 반환합니다.\n * @method ax5.util.date\n * @param {String|Date} d\n * @param {Object} cond\n * @returns {Date|String}\n * @example\n * ```js\n * ax5.util.date('2013-01-01'); // Tue Jan 01 2013 23:59:00 GMT+0900 (KST)\n * ax5.util.date((new Date()), {add:{d:10}, return:'yyyy/MM/dd'}); // \"2015/07/01\"\n * ax5.util.date('1919-03-01', {add:{d:10}, return:'yyyy/MM/dd hh:mm:ss'}); // \"1919/03/11 23:59:00\"\n * ```\n */\n function date(d, cond) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n hh = void 0,\n mi = void 0,\n aDateTime = void 0,\n aTimes = void 0,\n aTime = void 0,\n aDate = void 0,\n va = void 0,\n ISO_8601 = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i,\n ISO_8601_FULL = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n\n if (isString(d)) {\n if (d.length == 0) {\n d = new Date();\n } else if (d.length > 15) {\n if (ISO_8601_FULL.test(d) || ISO_8601.test(d)) {\n d = new Date(d);\n } else {\n aDateTime = d.split(/ /g), aTimes, aTime, aDate = aDateTime[0].split(/\\D/g), yy = aDate[0];\n mm = parseFloat(aDate[1]);\n dd = parseFloat(aDate[2]);\n aTime = aDateTime[1] || \"09:00\";\n aTimes = aTime.substring(0, 5).split(\":\");\n hh = parseFloat(aTimes[0]);\n mi = parseFloat(aTimes[1]);\n if (right(aTime, 2) === \"AM\" || right(aTime, 2) === \"PM\") hh += 12;\n d = localDate(yy, mm - 1, dd, hh, mi);\n }\n } else if (d.length == 14) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)), number(va.substr(8, 2)), number(va.substr(10, 2)), number(va.substr(12, 2)));\n } else if (d.length > 7) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)));\n } else if (d.length > 4) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else if (d.length > 2) {\n va = d.replace(/\\D/g, \"\");\n return localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else {\n d = new Date();\n }\n }\n if (typeof cond === \"undefined\" || typeof d === \"undefined\") {\n return d;\n } else {\n if (\"add\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n mxdd = void 0,\n DyMilli = 1000 * 60 * 60 * 24;\n\n if (typeof opts[\"d\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"d\"] * DyMilli);\n } else if (typeof opts[\"m\"] !== \"undefined\") {\n yy = _d.getFullYear();\n mm = _d.getMonth();\n dd = _d.getDate();\n yy = yy + parseInt(opts[\"m\"] / 12);\n mm += opts[\"m\"] % 12;\n mxdd = daysOfMonth(yy, mm);\n if (mxdd < dd) dd = mxdd;\n _d = new Date(yy, mm, dd, 12);\n } else if (typeof opts[\"y\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"y\"] * 365 * DyMilli);\n } else if (typeof opts[\"h\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"h\"] * 1000 * 60 * 60);\n }\n\n return _d;\n }(new Date(d), cond[\"add\"]);\n }\n if (\"set\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n processor = {\n \"firstDayOfMonth\": function firstDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = 1;\n return new Date(yy, mm, dd, 12);\n },\n \"lastDayOfMonth\": function lastDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = daysOfMonth(yy, mm);\n return new Date(yy, mm, dd, 12);\n }\n };\n if (opts in processor) {\n return processor[opts](_d);\n } else {\n return _d;\n }\n }(new Date(d), cond[\"set\"]);\n }\n if (\"return\" in cond) {\n return function () {\n\n var fStr = cond[\"return\"],\n nY = void 0,\n nM = void 0,\n nD = void 0,\n nH = void 0,\n nMM = void 0,\n nS = void 0,\n nDW = void 0,\n yre = void 0,\n regY = void 0,\n mre = void 0,\n regM = void 0,\n dre = void 0,\n regD = void 0,\n hre = void 0,\n regH = void 0,\n mire = void 0,\n regMI = void 0,\n sre = void 0,\n regS = void 0,\n dwre = void 0,\n regDW = void 0;\n\n nY = d.getUTCFullYear();\n nM = setDigit(d.getMonth() + 1, 2);\n nD = setDigit(d.getDate(), 2);\n nH = setDigit(d.getHours(), 2);\n nMM = setDigit(d.getMinutes(), 2);\n nS = setDigit(d.getSeconds(), 2);\n nDW = d.getDay();\n\n yre = /[^y]*(yyyy)[^y]*/gi;\n yre.exec(fStr);\n regY = RegExp.$1;\n mre = /[^m]*(MM)[^m]*/g;\n mre.exec(fStr);\n regM = RegExp.$1;\n dre = /[^d]*(dd)[^d]*/gi;\n dre.exec(fStr);\n regD = RegExp.$1;\n hre = /[^h]*(hh)[^h]*/gi;\n hre.exec(fStr);\n regH = RegExp.$1;\n mire = /[^m]*(mm)[^i]*/g;\n mire.exec(fStr);\n regMI = RegExp.$1;\n sre = /[^s]*(ss)[^s]*/gi;\n sre.exec(fStr);\n regS = RegExp.$1;\n dwre = /[^d]*(dw)[^w]*/gi;\n dwre.exec(fStr);\n regDW = RegExp.$1;\n\n if (regY === \"yyyy\") {\n fStr = fStr.replace(regY, right(nY, regY.length));\n }\n if (regM === \"MM\") {\n if (regM.length == 1) nM = d.getMonth() + 1;\n fStr = fStr.replace(regM, nM);\n }\n if (regD === \"dd\") {\n if (regD.length == 1) nD = d.getDate();\n fStr = fStr.replace(regD, nD);\n }\n if (regH === \"hh\") {\n fStr = fStr.replace(regH, nH);\n }\n if (regMI === \"mm\") {\n fStr = fStr.replace(regMI, nMM);\n }\n if (regS === \"ss\") {\n fStr = fStr.replace(regS, nS);\n }\n if (regDW == \"dw\") {\n fStr = fStr.replace(regDW, info.weekNames[nDW].label);\n }\n return fStr;\n }();\n } else {\n return d;\n }\n }\n }\n\n /**\n * 인자인 날짜가 오늘부터 몇일전인지 반환합니다. 또는 인자인 날짜가 가까운 미래에 몇일 후인지 반환합니다.\n * @method ax5.util.dday\n * @param {String|Data} d\n * @param {Object} cond\n * @returns {Number}\n * @example\n * ```js\n * ax5.util.dday('2016-01-29');\n * // 1\n * ax5.util.dday('2016-01-29', {today:'2016-01-28'});\n * // 1\n * ax5.util.dday('1977-03-29', {today:'2016-01-28', age:true});\n * // 39\n * ```\n */\n function dday(d, cond) {\n var memoryDay = date(d),\n DyMilli = 1000 * 60 * 60 * 24,\n today = new Date(),\n diffnum,\n thisYearMemoryDay;\n\n function getDayTime(_d) {\n return Math.floor(_d.getTime() / DyMilli) * DyMilli;\n }\n\n if (typeof cond === \"undefined\") {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n return diffnum;\n } else {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (cond[\"today\"]) {\n today = date(cond.today);\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n if (cond[\"thisYear\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (diffnum < 0) {\n thisYearMemoryDay = new Date(today.getFullYear() + 1, memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n }\n if (cond[\"age\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = thisYearMemoryDay.getFullYear() - memoryDay.getFullYear();\n }\n\n return diffnum;\n }\n }\n\n /**\n * 인자인 날짜가 몇년 몇월의 몇번째 주차인지 반환합니다.\n * @method ax5.util.weeksOfMonth\n * @param {String|Data} d\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.weeksOfMonth(\"2015-10-01\"); // {year: 2015, month: 10, count: 1}\n * ax5.util.weeksOfMonth(\"2015-09-19\"); // {year: 2015, month: 9, count: 3}\n * ```\n */\n function weeksOfMonth(d) {\n var myDate = date(d);\n return {\n year: myDate.getFullYear(),\n month: myDate.getMonth() + 1,\n count: parseInt(myDate.getDate() / 7 + 1)\n };\n }\n\n /**\n * 년월에 맞는 날자수를 반환합니다.\n * (new Date()).getMonth() 기준으로 월값을 보냅니다. \"2월\" 인경우 \"1\" 을 넘기게 됩니다.\n * @method ax5.util.daysOfMonth\n * @param {Number} y\n * @param {Number} m\n * @returns {Number}\n * @examples\n * ```js\n * ax5.util.daysOfMonth(2015, 11); // 31\n * ax5.util.daysOfMonth(2015, 1); // 28\n * ```\n */\n function daysOfMonth(y, m) {\n if (m == 3 || m == 5 || m == 8 || m == 10) {\n return 30;\n } else if (m == 1) {\n return y % 4 == 0 && y % 100 != 0 || y % 400 == 0 ? 29 : 28;\n } else {\n return 31;\n }\n }\n\n /**\n * 원하는 횟수 만큼 자릿수 맞춤 문자열을 포함한 문자열을 반환합니다.\n * 문자열 길이보다 작은값을 보내면 무시됩니다.\n * @method ax5.util.setDigit\n * @param {String|Number} num\n * @param {Number} length\n * @param {String} [padder=0]\n * @param {Number} [radix]\n * @returns {String}\n * @example\n * ```\n * ax5.util.setDigit(2016, 6)\n * // \"002016\"\n * ax5.util.setDigit(2016, 2)\n * // \"2016\"\n * ```\n */\n function setDigit(num, length, padder, radix) {\n var s = num.toString(radix || 10);\n return times(padder || '0', length - s.length) + s;\n }\n\n /**\n * 문자열을 지정된 수만큼 반복 합니다.\n * @param {String} s\n * @param {Number} count\n * @returns {string}\n * @example\n * ```\n * ax5.util.times(2016, 2)\n * //\"20162016\"\n * ```\n */\n function times(s, count) {\n return count < 1 ? '' : new Array(count + 1).join(s);\n }\n\n /**\n * 타겟엘리먼트의 부모 엘리멘트 트리에서 원하는 조건의 엘리먼트를 얻습니다.\n * @method ax5.util.findParentNode\n * @param {Element} _target - target element\n * @param {Object|Function} cond - 원하는 element를 찾을 조건\n * @returns {Element}\n * @example\n * ```\n * // cond 속성정의\n * var cond = {\n * \ttagname: {String} - 태그명 (ex. a, div, span..),\n * \tclazz: {String} - 클래스명\n * \t[, 그 외 찾고 싶은 attribute명들]\n * };\n * console.log(\n * console.log(\n * ax5.util.findParentNode(e.target, {tagname:\"a\", clazz:\"ax-menu-handel\", \"data-custom-attr\":\"attr_value\"})\n * );\n * // cond 함수로 처리하기\n * jQuery('#id').bind(\"click.app_expand\", function(e){\n * \tvar target = ax5.util.findParentNode(e.target, function(target){\n * \t\tif($(target).hasClass(\"aside\")){\n * \t\t\treturn true;\n * \t\t}\n * \t\telse{\n * \t\t\treturn true;\n * \t\t}\n * \t});\n * \t//client-aside\n * \tif(target.id !== \"client-aside\"){\n * \t\t// some action\n * \t}\n * });\n * ```\n */\n\n function findParentNode(_target, cond) {\n if (_target) {\n while (function () {\n var result = true;\n if (typeof cond === \"undefined\") {\n _target = _target.parentNode ? _target.parentNode : false;\n } else if (isFunction(cond)) {\n result = cond(_target);\n } else if (isObject(cond)) {\n for (var k in cond) {\n if (k === \"tagname\") {\n if (_target.tagName.toLocaleLowerCase() != cond[k]) {\n result = false;\n break;\n }\n } else if (k === \"clazz\" || k === \"class_name\") {\n if (\"className\" in _target) {\n var klasss = _target.className.split(reClassNameSplit);\n var hasClass = false;\n for (var a = 0; a < klasss.length; a++) {\n if (klasss[a] == cond[k]) {\n hasClass = true;\n break;\n }\n }\n result = hasClass;\n } else {\n result = false;\n break;\n }\n } else {\n // 그외 속성값들.\n if (_target.getAttribute) {\n if (_target.getAttribute(k) != cond[k]) {\n result = false;\n break;\n }\n } else {\n result = false;\n break;\n }\n }\n }\n }\n return !result;\n }()) {\n if (_target.parentNode && _target.parentNode.parentNode) {\n _target = _target.parentNode;\n } else {\n _target = false;\n break;\n }\n }\n }\n return _target;\n }\n\n /**\n * @method ax5.util.cssNumber\n * @param {String|Number} val\n * @returns {String}\n * @example\n * ```\n * console.log(ax5.util.cssNumber(\"100px\"))\n * console.log(ax5.util.cssNumber(\"100%\"))\n * console.log(ax5.util.cssNumber(\"100\"))\n * console.log(ax5.util.cssNumber(100))\n * console.log(ax5.util.cssNumber(\"!!100@#\"))\n * ```\n */\n function cssNumber(val) {\n var re = /\\D?(\\d+)([a-zA-Z%]*)/i,\n found = ('' + val).match(re),\n unit = found[2] || \"px\";\n\n return found[1] + unit;\n }\n\n /**\n * css string 및 object 를 넘기면 object 및 string 으로 변환되어 리턴됩니다.\n * @method ax5.util.css\n * @param {Object|String} val - CSS String or CSS Object\n * @returns {String|Object}\n * @example\n * ```\n * console.log(ax5.util.css({background: \"#ccc\", padding: \"50px\", width: \"100px\"}));\n * //\"background:#ccc;padding:50px;width:100px;\"\n * console.log(ax5.util.css('width:100px;padding: 50px; background: #ccc'));\n * // object {width: \"100px\", padding: \"50px\", background: \"#ccc\"}\n * ```\n */\n function css(val) {\n var returns;\n if (isObject(val)) {\n returns = '';\n for (var k in val) {\n returns += k + ':' + val[k] + ';';\n }\n return returns;\n } else if (isString(val)) {\n returns = {};\n var valSplited = val.split(/[ ]*;[ ]*/g);\n valSplited.forEach(function (v) {\n if ((v = v.trim()) !== \"\") {\n var vSplited = v.split(/[ ]*:[ ]*/g);\n returns[vSplited[0]] = vSplited[1];\n }\n });\n return returns;\n }\n }\n\n /**\n * @method ax5.util.stopEvent\n * @param {Event} e\n * @example\n * ```\n * ax5.util.stopEvent(e);\n * ```\n */\n function stopEvent(e) {\n // 이벤트 중지 구문\n if (!e) var e = window.event;\n\n //e.cancelBubble is supported by IE -\n // this will kill the bubbling process.\n e.cancelBubble = true;\n e.returnValue = false;\n\n //e.stopPropagation works only in Firefox.\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n\n return false;\n // 이벤트 중지 구문 끝\n }\n\n /**\n * @method ax5.util.selectRange\n * @param {Element} el\n * @param {Element} offset\n * @example\n * ```\n * ax5.util.selectRange($(\"#select-test-0\")); // selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"selectAll\"); //selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"start\"); // focus on start\n * ax5.util.selectRange($(\"#select-test-0\"), \"end\"); // focus on end\n * ax5.util.selectRange($(\"#select-test-0\"), [1, 5]); // select 1~5\n * ```\n */\n var selectRange = function () {\n var processor = {\n 'textRange': {\n 'selectAll': function selectAll(el, range, offset) {},\n 'arr': function arr(el, range, offset) {\n range.moveStart(\"character\", offset[0]); // todo ie node select 체크필요\n range.collapse();\n range.moveEnd(\"character\", offset[1]);\n },\n 'start': function start(el, range, offset) {\n range.moveStart(\"character\", 0);\n range.collapse();\n },\n 'end': function end(el, range, offset) {\n range.moveStart(\"character\", range.text.length);\n range.collapse();\n }\n },\n 'range': {\n 'selectAll': function selectAll(el, range, offset) {\n range.selectNodeContents(el);\n },\n 'arr': function arr(el, range, offset) {\n if (isObject(offset[0])) {\n range.setStart(offset[0].node, offset[0].offset);\n range.setEnd(offset[1].node, offset[1].offset);\n } else {\n range.setStart(el.firstChild, offset[0]);\n range.setEnd(el.firstChild, offset[1]);\n }\n },\n 'start': function start(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(true);\n },\n 'end': function end(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(false);\n }\n }\n };\n return function (el, offset) {\n var range, rangeType, selection;\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n if (!el) return;\n\n // 레인지 타입 선택\n if (doc.body.createTextRange) {\n range = document.body.createTextRange();\n range.moveToElementText(el);\n rangeType = \"textRange\";\n } else if (window.getSelection) {\n selection = window.getSelection();\n range = document.createRange();\n rangeType = \"range\";\n }\n\n // range 적용\n if (typeof offset == \"undefined\") {\n processor[rangeType].selectAll.call(this, el, range, offset);\n } else if (isArray(offset)) {\n processor[rangeType].arr.call(this, el, range, offset);\n } else {\n for (var key in processor[rangeType]) {\n if (offset == key) {\n processor[rangeType][key].call(this, el, range, offset);\n break;\n }\n }\n }\n\n // 포커스 및 셀렉트\n if (doc.body.createTextRange) {\n range.select();\n el.focus();\n } else if (window.getSelection) {\n el.focus();\n selection.removeAllRanges();\n selection.addRange(range);\n }\n };\n }();\n\n /**\n * 지정한 시간을 지연시켜 함수를 실행합니다.\n * @method ax5.util.debounce\n * @param {Function} func\n * @param {Number} wait\n * @param {Object} options\n * @returns {debounced}\n * @example\n * ```js\n * var debounceFn = ax5.util.debounce(function( val ) { console.log(val); }, 300);\n * $(document.body).click(function(){\n * debounceFn(new Date());\n * });\n * ```\n */\n // https://github.com/lodash/lodash/blob/master/debounce.js\n function debounce(func, wait, options) {\n var lastArgs = void 0,\n lastThis = void 0,\n maxWait = void 0,\n result = void 0,\n timerId = void 0,\n lastCallTime = void 0;\n\n var lastInvokeTime = 0;\n var leading = false;\n var maxing = false;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs;\n var thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n var result = wait - timeSinceLastCall;\n\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function debounced() {\n var time = Date.now();\n var isInvoking = shouldInvoke(time);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * @method ax5.util.throttle\n * @param func\n * @param wait\n * @param options\n * @return {debounced}\n */\n //https://github.com/lodash/lodash/blob/master/throttle.js\n function throttle(func, wait, options) {\n var leading = true;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * @method ax5.util.deepCopy\n * @param {Object} obj\n * @returns {Object}\n * @example\n * ```js\n * var obj = [\n * {name:\"A\", child:[{name:\"a-1\"}]},\n * {name:\"B\", child:[{name:\"b-1\"}], callBack: function(){ console.log('callBack'); }}\n * ];\n * var copiedObj = ax5.util.deepCopy(obj)\n * ```\n */\n function deepCopy(obj) {\n var r, l;\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object') {\n if (U.isArray(obj)) {\n l = obj.length;\n r = new Array(l);\n for (var i = 0; i < l; i++) {\n r[i] = deepCopy(obj[i]);\n }\n return r;\n } else {\n return jQuery.extend({}, obj);\n }\n }\n return obj;\n }\n\n /**\n * HTML 문자열을 escape 처리합니다.\n * \"<\" represents the < sign.\n * \">\" represents the > sign.\n * \"&\" represents the & sign.\n * \"" represents the \" mark.\n * [Character entity references](https://www.w3.org/TR/html401/charset.html#h-5.3)\n * @method ax5.util.escapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.escapeHtml('HTML string & \"escape\"')\n * //\"HTML <span>string</span> & "escape"\"\n * ```\n */\n function escapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/[\\<\\>\\&\\\"]/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \"\\\"\":\n return \""\";\n default:\n return match;\n }\n });\n }\n\n /**\n * HTML 문자열을 unescape 처리합니다.\n * escapeHtml를 참고하세요.\n * @method ax5.util.unescapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.unescapeHtml('HTML <span>string</span> & "escape"')\n * //\"HTML string & \"escape\"\"\n * ```\n */\n function unescapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/(<)|(>)|(&)|(")/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case \"&\":\n return \"&\";\n case \""\":\n return \"\\\"\";\n default:\n return match;\n }\n });\n }\n\n /**\n * @method ax5.util.string\n * @param {String} tmpl\n * @param {*} args\n * @return {ax5string}\n * @example\n * ```js\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format(\"ASP\", \"ASP.NET\");\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format([\"ASP\", \"ASP.NET\"]);\n * ax5.util.stinrg(\"{0} counts\").format(100);\n * ```\n */\n function string(_string) {\n return new function (_string) {\n this.value = _string;\n this.toString = function () {\n return this.value;\n };\n /**\n * @method ax5.util.string.format\n * @returns {*}\n */\n this.format = function () {\n var args = [];\n for (var i = 0, l = arguments.length; i < l; i++) {\n args = args.concat(arguments[i]);\n }\n return this.value.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n /**\n * @method ax5.util.string.escape\n * @returns {*}\n */\n this.escape = function () {\n return escapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.unescape\n * @returns {*}\n */\n this.unescape = function () {\n return unescapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.encode\n * @returns {*}\n */\n this.encode = function () {\n return encode(this.value);\n };\n /**\n * @method ax5.util.string.decode\n * @returns {*}\n */\n this.decode = function () {\n return decode(this.value);\n };\n /**\n * @method ax5.util.string.left\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.left = function (_pos) {\n return left(this.value, _pos);\n };\n /**\n * @method ax5.util.string.right\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.right = function (_pos) {\n return right(this.value, _pos);\n };\n /**\n * @method ax5.util.string.camelCase\n * @returns {*}\n */\n this.camelCase = function () {\n return camelCase(this.value);\n };\n /**\n * @method ax5.util.string.snakeCase\n * @returns {*}\n */\n this.snakeCase = function () {\n return snakeCase(this.value);\n };\n }(_string);\n }\n\n /**\n * @method ax5.util.color\n * @param _hexColor\n * @return {ax5color}\n * @example\n * ```js\n * ax5.util.color(\"#ff3300\").lighten(10).getHexValue()\n * console.log(ax5.util.color(\"#ff3300\").darken(10).getHexValue());\n * ```\n */\n function color(_hexColor) {\n\n var matchers = function () {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n var convertObject = function convertObject(_color) {\n var match = void 0;\n if (match = matchers.rgb.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if (match = matchers.rgba.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if (match = matchers.hsl.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if (match = matchers.hsla.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if (match = matchers.hsv.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if (match = matchers.hsva.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if (match = matchers.hex8.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: parseInt(match[4] / 255, 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n format: \"hex\"\n };\n }\n if (match = matchers.hex4.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n a: parseInt(match[4] + '' + match[4], 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n format: \"hex\"\n };\n }\n\n return false;\n };\n\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n }\n\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n }\n\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n\n return n;\n }\n\n function convertTo255(n) {\n return ax5.util.number(Math.min(255, Math.max(n, 0)), { 'round': 2 });\n }\n\n function convertToHex(n) {\n return setDigit(Math.round(n).toString(16), 2);\n }\n\n function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n }\n\n function hslToRgb(h, s, l) {\n var r = void 0,\n g = void 0,\n b = void 0;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n }\n\n return new function (_color) {\n this._originalValue = _color;\n _color = convertObject(_color);\n this.r = _color.r;\n this.g = _color.g;\n this.b = _color.b;\n this.a = _color.a || 1;\n this._format = _color.format;\n this._hex = convertToHex(this.r) + convertToHex(this.g) + convertToHex(this.b);\n\n this.getHexValue = function () {\n return this._hex;\n };\n\n this.lighten = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l += amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.darken = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l -= amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.getBrightness = function () {\n return (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n };\n\n this.isDark = function () {\n return this.getBrightness() < 128;\n };\n\n this.isLight = function () {\n return !this.isDark();\n };\n\n this.getHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l\n };\n };\n }(_hexColor);\n }\n\n return {\n alert: alert,\n each: each,\n map: map,\n search: search,\n reduce: reduce,\n reduceRight: reduceRight,\n filter: filter,\n sum: sum,\n avg: avg,\n toJson: toJson,\n parseJson: parseJson,\n first: first,\n last: last,\n deepCopy: deepCopy,\n\n left: left,\n right: right,\n getType: getType,\n isWindow: isWindow,\n isElement: isElement,\n isObject: isObject,\n isArray: isArray,\n isFunction: isFunction,\n isString: isString,\n isNumber: isNumber,\n isNodelist: isNodelist,\n isUndefined: isUndefined,\n isNothing: isNothing,\n setCookie: setCookie,\n getCookie: getCookie,\n camelCase: camelCase,\n snakeCase: snakeCase,\n number: number,\n toArray: toArray,\n merge: merge,\n param: param,\n error: error,\n date: date,\n dday: dday,\n daysOfMonth: daysOfMonth,\n weeksOfMonth: weeksOfMonth,\n setDigit: setDigit,\n times: times,\n findParentNode: findParentNode,\n cssNumber: cssNumber,\n css: css,\n isDate: isDate,\n isDateFormat: isDateFormat,\n stopEvent: stopEvent,\n selectRange: selectRange,\n debounce: debounce,\n throttle: throttle,\n escapeHtml: escapeHtml,\n unescapeHtml: unescapeHtml,\n\n string: string,\n color: color\n };\n }();\n\n if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n module.exports = ax5;\n } else {\n root.ax5 = function () {\n return ax5;\n }(); // ax5.ui에 연결\n }\n}).call(typeof window !== \"undefined\" ? window : undefined);\n\nax5.def = {};\nax5.info.errorMsg[\"ax5dialog\"] = {\n \"501\": \"Duplicate call error\"\n};\n\nax5.info.errorMsg[\"ax5picker\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find content key\"\n};\n\nax5.info.errorMsg[\"single-uploader\"] = {\n \"460\": \"There are no files to be uploaded.\",\n \"461\": \"There is no uploaded files.\"\n};\n\nax5.info.errorMsg[\"ax5calendar\"] = {\n \"401\": \"Can not find target element\"\n};\n\nax5.info.errorMsg[\"ax5formatter\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find pattern\"\n};\n\nax5.info.errorMsg[\"ax5menu\"] = {\n \"501\": \"Can not find menu item\"\n};\n\nax5.info.errorMsg[\"ax5select\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n\nax5.info.errorMsg[\"ax5combobox\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n// 필수 Ployfill 확장 구문\n(function () {\n 'use strict';\n\n var root = this,\n re_trim = /^\\s*|\\s*$/g;\n\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n if (!Object.keys) {\n Object.keys = function () {\n var hwp = Object.prototype.hasOwnProperty,\n hdeb = !{ toString: null }.propertyIsEnumerable('toString'),\n de = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n del = de.length;\n\n return function (obj) {\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' && (typeof obj !== 'function' || obj === null)) throw new TypeError('type err');\n var r = [],\n prop,\n i;\n for (prop in obj) {\n if (hwp.call(obj, prop)) r.push(prop);\n }if (hdeb) {\n for (i = 0; i < del; i++) {\n if (hwp.call(obj, de[i])) r.push(de[i]);\n }\n }\n return r;\n };\n }();\n }\n\n // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function (fun /*, thisp */) {\n if (this === void 0 || this === null) {\n throw TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof fun !== \"function\") {\n throw TypeError();\n }\n var thisp = arguments[1],\n i;\n for (i = 0; i < len; i++) {\n if (i in t) {\n fun.call(thisp, t[i], i, t);\n }\n }\n };\n }\n\n // ES5 15.3.4.5 Function.prototype.bind ( thisArg [, arg1 [, arg2, ... ]] )\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n if (!Function.prototype.bind) {\n Function.prototype.bind = function (o) {\n if (typeof this !== 'function') {\n throw TypeError(\"function\");\n }\n var slice = [].slice,\n args = slice.call(arguments, 1),\n self = this,\n bound = function bound() {\n return self.apply(this instanceof nop ? this : o, args.concat(slice.call(arguments)));\n };\n\n function nop() {}\n\n nop.prototype = self.prototype;\n bound.prototype = new nop();\n return bound;\n };\n }\n\n /*global document */\n /**\n * define document.querySelector & document.querySelectorAll for IE7\n *\n * A not very fast but small hack. The approach is taken from\n * http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx\n *\n */\n (function () {\n if (document.querySelectorAll || document.querySelector) {\n return;\n }\n if (!document.createStyleSheet) return;\n var style = document.createStyleSheet(),\n select = function select(selector, maxCount) {\n var all = document.all,\n l = all.length,\n i,\n resultSet = [];\n\n style.addRule(selector, \"foo:bar\");\n for (i = 0; i < l; i += 1) {\n if (all[i].currentStyle.foo === \"bar\") {\n resultSet.push(all[i]);\n if (resultSet.length > maxCount) {\n break;\n }\n }\n }\n style.removeRule(0);\n return resultSet;\n };\n\n document.querySelectorAll = function (selector) {\n return select(selector, Infinity);\n };\n document.querySelector = function (selector) {\n return select(selector, 1)[0] || null;\n };\n })();\n\n if (!String.prototype.trim) {\n (function () {\n String.prototype.trim = function () {\n return this.replace(re_trim, '');\n };\n })();\n }\n\n if (!window.JSON) {\n window.JSON = {\n parse: function parse(sJSON) {\n return new Function('', 'return ' + sJSON)();\n },\n stringify: function () {\n var r = /[\"]/g,\n _f;\n return _f = function f(vContent) {\n var result, i, j;\n switch (result = typeof vContent === 'undefined' ? 'undefined' : _typeof(vContent)) {\n case 'string':\n return '\"' + vContent.replace(r, '\\\\\"') + '\"';\n case 'number':\n case 'boolean':\n return vContent.toString();\n case 'undefined':\n return 'undefined';\n case 'function':\n return '\"\"';\n case 'object':\n if (!vContent) return 'null';\n result = '';\n if (vContent.splice) {\n for (i = 0, j = vContent.length; i < j; i++) {\n result += ',' + _f(vContent[i]);\n }return '[' + result.substr(1) + ']';\n } else {\n for (i in vContent) {\n if (vContent.hasOwnProperty(i) && vContent[i] !== undefined && typeof vContent[i] != 'function') result += ',\"' + i + '\":' + _f(vContent[i]);\n }return '{' + result.substr(1) + '}';\n }\n }\n };\n }()\n };\n }\n\n // splice ie8 <= polyfill\n (function () {\n if (!document.documentMode || document.documentMode >= 9) return false;\n var _splice = Array.prototype.splice;\n Array.prototype.splice = function () {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[1] === \"undefined\") args[1] = this.length - args[0];\n return _splice.apply(this, args);\n };\n })();\n\n /**\n * Shim for \"fixing\" IE's lack of support (IE < 9) for applying slice\n * on host objects like NamedNodeMap, NodeList, and HTMLCollection\n * (technically, since host objects have been implementation-dependent,\n * at least before ES6, IE hasn't needed to work this way).\n * Also works on strings, fixes IE < 9 to allow an explicit undefined\n * for the 2nd argument (as in Firefox), and prevents errors when\n * called on other DOM objects.\n */\n (function () {\n 'use strict';\n\n var _slice = Array.prototype.slice;\n\n try {\n // Can't be used with DOM elements in IE < 9\n _slice.call(document.documentElement);\n } catch (e) {\n // Fails in IE < 9\n // This will work for genuine arrays, array-like objects,\n // NamedNodeMap (attributes, entities, notations),\n // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),\n // and will not fail on other DOM objects (as do DOM elements in IE < 9)\n Array.prototype.slice = function (begin, end) {\n // IE < 9 gets unhappy with an undefined end argument\n end = typeof end !== 'undefined' ? end : this.length;\n\n // For native Array objects, we use the native slice function\n if (Object.prototype.toString.call(this) === '[object Array]') {\n return _slice.call(this, begin, end);\n }\n\n // For array like object we handle it ourselves.\n var i,\n cloned = [],\n size,\n len = this.length;\n\n // Handle negative value for \"begin\"\n var start = begin || 0;\n start = start >= 0 ? start : Math.max(0, len + start);\n\n // Handle negative value for \"end\"\n var upTo = typeof end == 'number' ? Math.min(end, len) : len;\n if (end < 0) {\n upTo = len + end;\n }\n\n // Actual expected size of the slice\n size = upTo - start;\n\n if (size > 0) {\n cloned = new Array(size);\n if (this.charAt) {\n for (i = 0; i < size; i++) {\n cloned[i] = this.charAt(start + i);\n }\n } else {\n for (i = 0; i < size; i++) {\n cloned[i] = this[start + i];\n }\n }\n }\n\n return cloned;\n };\n }\n })();\n\n // Console-polyfill. MIT license. https://github.com/paulmillr/console-polyfill\n // Make it safe to do console.log() always.\n (function (con) {\n var prop, method;\n var empty = {};\n var dummy = function dummy() {};\n var properties = 'memory'.split(',');\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) {\n con[prop] = con[prop] || empty;\n }while (method = methods.pop()) {\n con[method] = con[method] || dummy;\n }\n })(window.console || {}); // Using `this` for web workers.\n\n\n // Modernizr style test\n if (!(window.webkitMatchMedia || window.mozMatchMedia || window.oMatchMedia || window.msMatchMedia || window.matchMedia)) {\n var root = document.getElementsByTagName('html')[0];\n root.className += ' no-matchmedia';\n }\n\n /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n window.matchMedia || (window.matchMedia = function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n\n var styleMedia = window.styleMedia || window.media;\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n script.parentNode.insertBefore(style, script);\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function matchMedium(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function (media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n }());\n\n /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n (function () {\n // Bail out for browsers that have addListener support\n if (window.matchMedia && window.matchMedia('all').addListener) {\n return false;\n }\n\n var localMatchMedia = window.matchMedia,\n hasMediaQueries = localMatchMedia('only all').matches,\n isListening = false,\n timeoutID = 0,\n // setTimeout for debouncing 'handleChange'\n queries = [],\n // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n handleChange = function handleChange(evt) {\n // Debounce\n clearTimeout(timeoutID);\n\n timeoutID = setTimeout(function () {\n for (var i = 0, il = queries.length; i < il; i++) {\n var mql = queries[i].mql,\n listeners = queries[i].listeners || [],\n matches = localMatchMedia(mql.media).matches;\n\n // Update mql.matches value and call listeners\n // Fire listeners only if transitioning to or from matched state\n if (matches !== mql.matches) {\n mql.matches = matches;\n\n for (var j = 0, jl = listeners.length; j < jl; j++) {\n listeners[j].call(window, mql);\n }\n }\n }\n }, 30);\n };\n\n window.matchMedia = function (media) {\n var mql = localMatchMedia(media),\n listeners = [],\n index = 0;\n\n mql.addListener = function (listener) {\n // Changes would not occur to css media type so return now (Affects IE <= 8)\n if (!hasMediaQueries) {\n return;\n }\n\n // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n // There should only ever be 1 resize listener running for performance\n if (!isListening) {\n isListening = true;\n window.addEventListener('resize', handleChange, true);\n }\n\n // Push object only if it has not been pushed already\n if (index === 0) {\n index = queries.push({\n mql: mql,\n listeners: listeners\n });\n }\n\n listeners.push(listener);\n };\n\n mql.removeListener = function (listener) {\n for (var i = 0, il = listeners.length; i < il; i++) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n }\n }\n };\n\n return mql;\n };\n })();\n\n // extend innerWidth ..\n var html = document.getElementsByTagName('html')[0];\n var body = document.getElementsByTagName('body')[0];\n\n /*\n if (!window.innerWidth) window.innerWidth = html.clientWidth;\n if (!window.innerHeight) window.innerHeight = html.clientHeight;\n if (!window.scrollX) window.scrollX = window.pageXOffset || html.scrollLeft;\n if (!window.scrollY) window.scrollY = window.pageYOffset || html.scrollTop;\n */\n}).call(window);\n/**\n * Refer to this by {@link ax5}.\n * @namespace ax5.ui\n */\n\n/**\n * @class ax5.ui.root\n * @classdesc ax5 ui class\n * @author tom@axisj.com\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * ```\n */\nax5.ui = function () {\n\n function axUi() {\n this.config = {};\n this.name = \"root\";\n\n /**\n * 클래스의 속성 정의 메소드 속성 확장후에 내부에 init 함수를 호출합니다.\n * @method ax5.ui.root.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Boolean} [callInit=true] - init 함수 호출 여부\n * @returns {ax5.ui.axUi}\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * myui.setConfig({\n * \tid:\"abcd\"\n * });\n * ```\n */\n this.setConfig = function (cfg, callInit) {\n jQuery.extend(true, this.config, cfg);\n if (typeof callInit == \"undefined\" || callInit === true) {\n this.init();\n }\n return this;\n };\n this.init = function () {\n console.log(this.config);\n };\n\n this.bindWindowResize = function (callBack) {\n setTimeout(function () {\n jQuery(window).resize(function () {\n if (this.bindWindowResize__) clearTimeout(this.bindWindowResize__);\n this.bindWindowResize__ = setTimeout(function () {\n callBack.call(this);\n }.bind(this), 10);\n }.bind(this));\n }.bind(this), 100);\n };\n\n this.stopEvent = function (e) {\n if (e.preventDefault) e.preventDefault();\n if (e.stopPropagation) e.stopPropagation();\n e.cancelBubble = true;\n return false;\n };\n\n this.toString = function () {\n return this.name + '@' + this.version;\n };\n\n // instance init\n this.main = function () {}.apply(this, arguments);\n }\n\n /**\n * @method ax5.ui.addClass\n * @param {Object} config\n * @param {String} config.className - name of Class\n * @param {Object} [config.classStore=ax5.ui] - 클래스가 저장될 경로\n * @param {Function} [config.superClass=ax5.ui.root]\n * @param {Function} cls - Class Function\n */\n function addClass(config, cls) {\n if (!config || !config.className) throw 'invalid call';\n var classStore = config.classStore ? config.classStore : ax5.ui;\n if (!classStore) throw 'invalid classStore';\n\n // make ui definition variable\n ax5.def[config.className] = {\n version: ax5.info.version\n };\n\n var factory = function factory(cls, arg) {\n switch (arg.length) {\n case 0:\n return new cls();\n break;\n case 1:\n return new cls(arg[0]);\n break;\n case 2:\n return new cls(arg[0], arg[1]);\n break;\n case 3:\n return new cls(arg[0], arg[1], arg[2]);\n break;\n }\n };\n var initInstance = function initInstance(name, version, instance) {\n instance.name = name;\n instance.version = version;\n instance.instanceId = ax5.getGuid();\n return instance;\n };\n var initPrototype = function initPrototype(cls) {\n var superClass = config.superClass ? config.superClass : ax5.ui.root;\n if (!ax5.util.isFunction(superClass)) throw 'invalid superClass';\n superClass.call(this); // 부모호출\n cls.prototype = new superClass(); // 상속\n };\n var wrapper = function wrapper() {\n if (!this || !(this instanceof wrapper)) throw 'invalid call';\n var instance = factory(cls, arguments);\n return initInstance(config.className, config.version || \"\", instance);\n };\n initPrototype.call(this, cls);\n classStore[config.className] = wrapper;\n }\n\n return {\n root: axUi,\n addClass: addClass\n };\n}();\n\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n * https://github.com/thomasJang/mustache.js -- imporove some variables\n */\n\n(function defineMustache(global, factory) {\n\n factory(global.mustache = {});\n})(window.ax5, function mustacheFactory(mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill(object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction(object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr(obj) {\n return isArray(obj) ? 'array' : typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty(obj, propName) {\n return obj != null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && propName in obj;\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''', '/': '/'\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate(template, tags) {\n if (!template) return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length) {\n delete tokens[spaces.pop()];\n }\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === 'string') tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push(['text', chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe)) break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe)) throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection) throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos() {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0) return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re),\n match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context(view, parentContext) {\n this.view = view;\n this.cache = {\n '.': this.view,\n '@each': function each() {\n var returns = [];\n for (var k in this) {\n returns.push({ '@key': k, '@value': this[k] });\n }\n return returns;\n }\n };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup(name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this,\n names,\n index,\n lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1) lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value)) value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer() {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache() {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse(template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null) tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render(template, view, partials) {\n var tokens = this.parse(template);\n var context = view instanceof Context ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate) {\n var buffer = '';\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);else if (symbol === '&') value = this.unescapedValue(token, context);else if (symbol === 'name') value = this.escapedValue(token, context);else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined) buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n if (value[j]) {\n if (_typeof(value[j]) === 'object') {\n value[j]['@i'] = j;\n value[j]['@first'] = j === 0;\n }\n\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n }\n } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string') throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null) buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || isArray(value) && value.length === 0) return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial(token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.1.3';\n mustache.tags = ['{{', '}}'];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render(template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' + 'but \"' + typeStr(template) + '\" was given as the first ' + 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html(template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n});","'use strict';\n\n// ax5.ui.mask\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var MASK = void 0;\n\n UI.addClass({\n className: \"mask\"\n }, function () {\n /**\n * @class ax5mask\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '
' +\n * '
' +\n * '
' +\n * ' {{{body}}}' +\n * '
' +\n * '
';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * var mask = new ax5.ui.mask();\n *\n * mask.open({\n * templateName: 'customMask',\n * content: 'custom MASK on target',\n * target: $(\"#user-content\").get(0),\n * onClick: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n theme: '',\n target: jQuery(document.body).get(0),\n animateTime: 250\n };\n this.maskContent = '';\n this.status = \"off\";\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n };\n var getBodyTmpl = function getBodyTmpl(data) {\n if (typeof data.templateName === \"undefined\") data.templateName = \"defaultMask\";\n return MASK.tmpl.get.call(this, data.templateName, data);\n };\n var setBody = function setBody(content) {\n this.maskContent = content;\n };\n\n /**\n * Preferences of Mask UI\n * @method ax5mask.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5mask}\n * @example\n * ```\n * setConfig({\n * target : {Element|AX5 nodelist}, // 마스크 처리할 대상\n * content : {String}, // 마스크안에 들어가는 내용물\n * onStateChanged: function(){} // 마스크 상태변경 시 호출되는 함수 this.type으로 예외처리 가능\n * }\n * ```\n */\n this.init = function () {\n // after setConfig();\n this.onStateChanged = cfg.onStateChanged;\n this.onClick = cfg.onClick;\n if (this.config.content) setBody.call(this, this.config.content);\n };\n\n /**\n * open mask\n * target 을 주지 않으면 기본적으로 body 에 마스크가 적용되고 원하는 타겟을 지정해서 마스크를 씌울 수 있습니다.\n * 기본 정의된 마스크 외에 사용자가 템플릿을 정의해서 마스크를 사용 가능합니다.\n * @method ax5mask.open\n * @param {Object} config\n * @param {String} config\n * @returns {ax5mask}\n * @example\n * ```js\n * my_mask.open({\n * target: document.body,\n * content: \"

Loading..

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

Loading..

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

Loading..

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