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

1 lines
873 KiB

{"version":3,"sources":["clipboard.js","jquery.cookie.js","global.js","member.js","board.js","ax5core.js","ax5formatter.js","ax5mask.js","ax5modal.js","ax5toast.js","ax5calendar.js","ax5picker.js","jquery.datetimepicker.full.js","jquery.blockUI.js","jquery.formatter.js","jquery.tmpl.js","admin.js","components.js","modal.js","toast.js","faq.js"],"names":["root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_select","obj","_select2","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","length","descriptor","writable","key","Constructor","protoProps","staticProps","ClipboardAction","options","instance","TypeError","_classCallCheck","resolveOptions","initSelection","arguments","undefined","action","container","emitter","text","trigger","selectedText","selectFake","selectTarget","_this","isRTL","document","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","window","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","err","handleResult","emit","clearSelection","bind","focus","getSelection","removeAllRanges","set","_action","Error","nodeType","hasAttribute","_target","apply","is","delegate","type","callback","string","fn","node","destroy","listenNode","nodeList","Array","forEach","listenNodeList","selector","body","listenSelector","E","on","ctx","e","push","once","self","listener","off","_","data","slice","evtArr","len","evts","liveEvents","_clipboardAction","_tinyEmitter","_goodListener","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","listenClick","subClass","superClass","create","setPrototypeOf","_inherits","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","currentTarget","clipboardAction","getAttributeValue","querySelector","actions","support","queryCommandSupported","suffix","element","attribute","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","map","HTMLElement","toString","String","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","require","jQuery","$","pluses","encode","config","raw","encodeURIComponent","read","converter","indexOf","replace","decodeURIComponent","json","JSON","parse","parseCookieValue","isFunction","cookie","extend","defaults","expires","days","t","Date","setMilliseconds","getMilliseconds","stringify","stringifyCookieValue","toUTCString","path","domain","secure","join","result","cookies","split","parts","shift","removeCookie","console","log","APP","POPUP","REGEX","uniqueID","option","title","width","height","url","cw","screen","availWidth","ch","availHeight","sw","sh","ml","mt","win","open","outerWidth","outerHeight","alert","SET_LANG","lang","location","reload","click","idx","close","remove","not","preventDefault","sns_type","href","loc","img","attr","ClipboardJS","MEMBER","init","InitLoginForm","initCheckExist","InitRegisterForm","InitMemberModifyForm","submit","$form","ajax","serialize","base_url","success","res","LANG","member_join_success","message","elementLoginID","find","elementLoginPass","val","trim","member_login_userid_required","member_login_password_required","reurl","error","each","$btn","$target","member_join_user_id_required","wordCheck","denyWordCheck","member_join_no_valid_email_address","getInfo","member_join_user_id_already_exists","member_join_user_id_available","member_join_user_id_contains_deny_word","info","async","cache","POP_CHANGE_PHOTO","ready","BOARD","CATEGORY","EXTRA","COMMENT","count","bca_idx","postCount","modify","cmt_idx","reply","cmt_num","$form_post","blockUI","css","left","backgroundColor","cursor","baseZ","overlayCSS","opacity","DateFormatter","doc","reIsJson","reMs","reSnakeCase","reCamelCase","reDot","reInt","reNotNum","reMoneySplit","RegExp","reAmp","reEq","reClassNameSplit","ax5","U","guid","getGuid","_arguments","browser","ua","mobile","browserName","match","browserVersion","navigator","userAgent","toLowerCase","search","version","exec","isBrowser","wheelEnm","test","errorMsg","baseUrl","onerror","toArray","eventKeys","BACKSPACE","TAB","RETURN","ESC","LEFT","UP","RIGHT","DOWN","DELETE","HOME","END","PAGEUP","PAGEDOWN","INSERT","SPACE","weekNames","label","supportTouch","maxTouchPoints","msMaxTouchPoints","supportFileApi","FileReader","File","FileList","Blob","urlUtil","urls","param","referrer","pathname","hostname","port","hashdata","last","getError","className","errorCode","methodName","msg","_toString","O","_fn","isNothing","toJson","jsonString","util","isArray","isObject","jsonObjectBody","isString","isNumber","isUndefined","str","pos","substr","right","lastIndexOf","camelCase","all","letter","toUpperCase","snakeCase","number","cond","isMinus","returnValue","pair","Number","k","nUnit","myByte","Math","round","abs","floor","ceil","txtNumber","isNaN","arrNumber","localDate","yy","mm","dd","hh","mi","ss","utcD","UTC","getUTCHours","getTimezoneOffset","setUTCHours","date","nY","nH","nMM","nS","nDW","regY","regM","regD","regH","regMI","regS","regDW","fStr","nM","nD","aDateTime","aTimes","aTime","aDate","va","parseFloat","substring","_d","opts","mxdd","setTime","getTime","getFullYear","getMonth","getDate","daysOfMonth","parseInt","processor","firstDayOfMonth","lastDayOfMonth","getUTCFullYear","setDigit","getHours","getMinutes","getSeconds","getDay","$1","y","num","padder","radix","times","selectRange","textRange","selectAll","el","offset","arr","moveStart","collapse","moveEnd","start","end","setStart","setEnd","firstChild","rangeType","createTextRange","moveToElementText","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","now","trailingEdge","setTimeout","timeSinceLastInvoke","min","remainingWait","debounced","isInvoking","_len","_key","leadingEdge","max","cancel","clearTimeout","flush","escapeHtml","unescapeHtml","results","fnResult","reduce","tokenItem","reduceRight","filter","sum","defaultValue","tokenValue","avg","parseJson","force","Function","first","keys","item","deepCopy","r","getType","typeName","isWindow","isElement","isNodelist","setCookie","cn","cv","exdays","expire","setDate","escape","getCookie","cname","ca","charAt","unescape","merge","second","j","v","dday","diffnum","memoryDay","DyMilli","today","getDayTime","weeksOfMonth","myDate","year","month","findParentNode","tagName","toLocaleLowerCase","klasss","hasClass","a","cssNumber","found","unit","returns","vSplited","isDate","valueOf","isDateFormat","stopEvent","event","cancelBubble","stopPropagation","throttle","_string","format","concat","decode","_pos","color","_hexColor","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","rgb","rgba","hsl","hsla","hsv","hsva","hex3","hex6","hex4","hex8","convertToPercentage","convertTo255","convertToHex","bound01","isOnePointZero","processPercent","isPercentage","rgbToHsl","g","b","h","hslToRgb","hue2rgb","q","_color","_originalValue","convertObject","_format","_hex","getHexValue","lighten","amount","darken","getBrightness","isDark","isLight","getHsl","def","501","401","402","460","461","hwp","hdeb","de","del","_f","re_trim","propertyIsEnumerable","prop","fun","thisp","bound","nop","createStyleSheet","maxCount","resultSet","addRule","currentStyle","foo","removeRule","Infinity","sJSON","vContent","splice","documentMode","_splice","_slice","begin","size","cloned","upTo","con","method","empty","dummy","properties","methods","pop","webkitMatchMedia","mozMatchMedia","oMatchMedia","msMatchMedia","matchMedia","getElementsByTagName","styleMedia","media","script","id","insertBefore","getComputedStyle","matchMedium","styleSheet","cssText","textContent","addListener","localMatchMedia","hasMediaQueries","isListening","timeoutID","queries","handleChange","evt","il","mql","listeners","jl","index","removeListener","ui","setConfig","cfg","callInit","bindWindowResize","callBack","resize","bindWindowResize__","main","addClass","cls","classStore","wrapper","arg","instanceId","initInstance","global","mustache","objectToString","escapeRegExp","hasProperty","propName","regExpTest","nonSpaceRe","isWhitespace","re","testRegExp","entityMap","&","<",">","\"","'","/","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","tail","Context","view","parentContext",".","@each","@key","@value","parent","Writer","eos","scan","scanUntil","lookup","names","context","lookupHit","clearCache","template","tags","tokens","openingTagRe","closingTagRe","closingCurlyRe","sections","spaces","hasTag","nonSpace","stripSpace","compileTags","tagsToCompile","chr","token","openSection","scanner","valueLength","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","parseTemplate","render","partials","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","defaultWriter","to_html","send","UI","FORMATTER","animateTime","queue","openTimer","closeTimer","formatterEvent","optIdx","$input","keydown","isStop","enterableKeyCodes","which","metaKey","ctrlKey","shiftKey","keyup","elemFocusPosition","beforeValue","newValue","selectionLength","elem","selectionStart","pattern","formatter","getPatternValue","input","selectionEnd","blur","_force","removeData","bindFormatterTarget","matched","patternArgument","getEnterableKeyCodes","unbind","formatterConfig","formatting","boundID","queIdx","TODAY","pattern_money","_opts","188","ctrlKeys","numKeys","eType","regExpPattern","maxRound","pattern_number","190","110","pattern_date","189","191","matchedPattern","inspectValue","inspect","Y","M","D","dLen","nval","pattern_time","186","pattern_bizno","pattern_phone","regExpPattern3","pattern_credit","18","8","17","46","40","35","187","27","36","45","37","34","33","13","39","16","9","38","91","48","49","50","51","52","53","54","55","56","57","96","97","98","99","100","101","102","103","104","105","money","bizno","phone","credit","custom","formatter_instance","ax5formatter","defaultConfig","MASK","theme","maskContent","status","onStateChanged","that","setBody","content","templateName","maskConfig","_cfg","maskId","$mask","tmpl","getBodyTmpl","append","_$target","align","zIndex","state","_delay","_close","removeClass","fadeOut","pullRequest","mask_instance","mask","defaultMask","columnKeys","tmplName","MODAL","ENM","mousedown","mousemove","mouseup","getMousePosition","mouseObj","changedTouches","clientX","clientY","minimizePosition","clickEventName","closeToEsc","disableDrag","disableResize","iframe","activeModal","watingModal","eventProcessor","onResize","move","modalId","header","fullScreen","styles","iframeLoadingMsg","absolute","hide","show","onkeyup","isButton","isFullScreen","mousePosition","moveModal","btnOnClick","originalEvent","resizeModal","srcElement","btns","dialogId","btnTarget","keyCode","alignProcessor","top-left","top-right","bottom-left","bottom-right","center-middle","modalZIndex","modalOffset","modalBox","scrollLeft","__dx","__dy","resizerBg","resizer","getResizerPosition","box","modalConfig","removeAttr","resizerType","resizerProcessor","minHeight","altKey","bottom","minWidth","cursorType","headerHeight","tryCount","_option","$iframe","iframeObject","idoc","contentDocument","contentWindow","children","innerHTML","CollectGarbage","minimized","minimize","originalHeight","restore","setModalConfig","_config","_fullScreen","modal_instance","modal","TOAST","toastSeq","toastSeqClear","icon","closeIcon","ok","displayTime","containerPosition","toastContainer","getContent","toastId","toastBox","containerId","prepend","toastType","btn_target","dialogConfig","confirm","toast_instance","toast","toastDisplay","CALENDAR","selectableCount","selectionMap","selectableMap","markerMap","printedDay","startOfWeek","mode","dateFormat","displayDate","dimensions","controlHeight","controlButtonWidth","colHeadHeight","itemPadding","yearHeading","monthHeading","yearTmpl","months","dayTmpl","multipleSelect","selectMode","defaultMarkerTheme","defaultPeriodTheme","setDisplay","yy1","yy2","control","monthTmpl","html","yearFirst","changeMode","printDay","nowDate","loopDate","classNames","dotDate","monthStratDate","_today","tableStartDate","day","add","thisMonth","itemStyles","frameWidth","frameHeight","list","thisDate","return","_date","row","col","isStartOfWeek","thisDataLabel","selectable","onclick","printMonth","tableStartMonth","nMonth","colHeadLabel","_month","isStartOfRow","thisMonthLabel","printYear","tableStartYear","nYear","_year","thisYear","thisYearLabel","dt","dateElement","controlCSS","controlButtonCSS","control-display","setSelection","setSelectable","marker","setMarker","changeDate","isPrint","from","to","isApply","setPeriod","periodMap","fromLabel","toLabel","period","calendar_instance","calendar","frameTmpl","PICKER","picker","date_leftArrow","date_yearTmpl","date_monthTmpl","date_rightArrow","palette","activePicker","activePickerQueueIndex","pickerEvent","pickerType","multipleInputProcessor","pickerContent","bindPickerTarget","@fn","_input","inputLength","contentWidth","contentMargin","secure-num","keyboard","numpad","$colorPreview","background-color","alignPicker","dim","pickerDim","pickerDirection","$window","$body","winWidth","winHeight","direction","positionCSS","activePickerArrow","getQueIdx","pickerConfig","setContentValue","_item","_inputIndex","_val","prevInputValue","nextInputValue","values","pickerCalendar","ax5uiInstance","inputIndex","disableChangeTrigger","doNotClose","getContentValue","calendarConfig","dValue","dateConvert","itemId","po","x","random","btnWrapStyle","btnTheme","btnStyle","specialBtnTheme","act","keyArray","shiftValue","getKeyBoard","isShiftKey","keyValue","keyLabel","specialBtnWrapStyle","specialBtnStyle","$this","paletteConfig","pickerPalette","dColor","selectedColor","onUpdateColor","pickerTmpl","picker_instance","ax5picker","u","dateSettings","daysShort","monthsShort","meridiem","ordinal","1","2","3","separators","validParts","intParts","tzParts","tzClip","parseDate","f","hour","sec","guessDate","setMonth","setFullYear","setHours","setMinutes","setSeconds","parseFormat","w","N","z","W","F","L","A","G","B","getUTCMinutes","getUTCSeconds","H","I","P","T","Z","formatDate","datetimepickerFactory","default_options","i18n","ar","dayOfWeekShort","dayOfWeek","ro","bg","fa","ru","uk","en","nl","tr","fr","es","th","pl","pt","se","km","kr","it","da","no","ja","vi","sl","cs","hu","az","bs","en-GB","et","eu","fi","gl","hr","ko","lt","lv","mk","mn","pt-BR","sk","sq","sr-YU","sr","sv","zh-TW","zh","ug","he","hy","kg","rm","ka","ownerDocument","rtl","formatTime","startDate","step","monthChangeSpinner","closeOnDateSelect","closeOnTimeSelect","closeOnWithoutClick","closeOnInputClick","openOnFocus","timepicker","datepicker","weeks","defaultTime","defaultDate","minDate","maxDate","minTime","maxTime","minDateTime","maxDateTime","allowTimes","opened","initTime","inline","touchMovedThreshold","onSelectDate","onSelectTime","onChangeMonth","onGetWeekOfYear","onChangeYear","onChangeDateTime","onShow","onClose","onGenerate","withoutCopyright","inverseButton","hours12","next","prev","dayOfWeekStart","parentID","timeHeightInTimePicker","timepickerScrollbar","todayButton","prevButton","nextButton","defaultSelect","scrollMonth","scrollTime","scrollInput","lazyInit","validateOnBlur","allowBlank","yearStart","yearEnd","monthStart","monthEnd","fixed","roundTime","weekends","highlightedDates","highlightedPeriods","allowDates","allowDateRe","disabledDates","disabledWeekDays","yearOffset","beforeShowDay","enterLikeTab","showApplyButton","dateHelper","defaultDateHelper","globalLocale","dateFormatterOptionsDefault","initDateFormatter","locale","dateFormatters","moment","isFormatStandard","isValid","toDate","formatMask","datetimepicker","setLocale","newLocale","setDateFormatter","dateFormatter","df","standardFormats","RFC_2822","ATOM","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RSS","W3C","HighlightedDate","desc","getPropertyValue","countDaysInMonth","xdsoftScroller","percent","timebox","parentHeight","scrollbar","scroller","timeboxparent","pointerEventToXY","touch","out","touches","maximumOffset","startY","startTop","h1","touchStart","startTopScroll","calcOffset","eq","clientHeight","offsetHeight","arguments_callee","percentage","noTriggerScroll","deltaY","coord","opt","opt2","createDateTimePicker","destroyDateTimePicker","KEY0","KEY9","_KEY0","_KEY9","CTRLKEY","DEL","ENTER","ARROWLEFT","ARROWUP","ARROWRIGHT","ARROWDOWN","F5","AKEY","CKEY","VKEY","ZKEY","YKEY","ctrlDown","isPlainObject","lazyInitTimer","xchangeTimer","timerclick","current_time_index","setPos","_xdsoft_datetime","forEachAncestorOf","xdsoft_copyright","month_picker","applyButton","monthselect","yearselect","triggerAfterOpen","timer","after","items","visible","currentTime","handleTouchMoved","touchPosition","touchStartPosition","xMovement","yMovement","sqrt","touchMoved","getCurrentValue","ct","strToDate","strToDateTime","strtotime","isValidDate","setMask","isValidValue","reg","setCaretPos","getElementById","pastedData","clipboardData","getData","valueBeforeCursor","valueAfterPaste","digit","selEnd","hasSel","fromCharCode","maskValueAtCurPos","posShorterThanMaskLength","posGreaterThanZero","selLength","defaultBlank","selReplacementRemainder","valueBeforeSel","insertChars","charsAfterSelection","insertChar","valueAfterNextChar","getValue","getCurrentTime","setOptions","_options","exDesc","splitData","hDate","keyDate","dateTest","dateEnd","setCurrentTime","toggle","splittedHours","splittedMinutes","dayOfWeekStartPrev","norecursion","dTime","requireValidDate","nextMonth","prevMonth","getWeekOfYear","datetime","week","onejan","sDateTime","timeOffset","tmpDate","sDate","sTime","currentDate","stop","arguments_callee1","arguments_callee2","arguments_callee4","pheight","marginTop","arguments_callee5","customDateSettings","line_time","description","maxDateTimeDay","table","classes","newRow","currentDay","minTimeMinutesOfDay","maxTimeMinutesOfDay","current_time","isALlowTimesInit","currentMinutesOfDay","classType","xdevent","deltaX","dateInputOffset","dateInputElem","verticalPosition","datetimepickerElem","dateInputHasFixedAncestor","$dateInput","windowWidth","verticalAnchorEdge","datetimepickerCss","windowHeight","windowScrollTop","clientWidth","diff","offsetWidth","ancestorNode","arguments_callee6","elementSelector","unmousewheel","initOnActionCallback","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","special","mousewheel","setup","handler","onmousewheel","getLineHeight","getPageHeight","teardown","$elem","$parent","settings","adjustOldDeltas","normalizeOffset","absDelta","orgEvent","delta","offsetX","offsetY","fix","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","getBoundingClientRect","boundingRect","deltaFactor","unshift","nullLowestDelta","dispatch","handle","_fadeIn","fadeIn","noOp","noop","msie","ie6","setExpr","setExpression","install","unblockUI","growlUI","timeout","$m","callBlock","centerY","showOverlay","onUnblock","growlCSS","mouseover","displayBlock","fadeTo","mouseout","block","fullOpts","$el","ignoreIfBlocked","unblock","zoom","draggable","textAlign","themedCSS","cursorReset","-webkit-border-radius","-moz-border-radius","border-radius","iframeSrc","forceIframe","centerX","allowBodyStretch","bindEvents","constrainTabKey","focusInput","focusableElements","onBlock","onOverlayClick","quirksmodeOffsetHack","blockMsgClass","pageBlock","pageBlockEls","full","jquery","display","lyr1","lyr2","lyr3","layers","$par","appendTo","expr","boxModel","sz","fixT","fixL","expression","cb","cb1","cb2","center","els","reset","cssW","events","fwd","back","parents","regexp","inpts","chars","getMatches","pLength","mCount","iCount","processMatch","valLength","mLength","utils","destObj","addChars","removeChars","isBetween","bounds","sort","attachEvent","getClip","getMatchingKey","isDelKeyDown","backspace","delete","isDelKeyPress","isSpecialKeyPress","tab","enter","home","leftarrow","uparrow","rightarrow","downarrow","isModifier","collection","patternMatcher","inptSel","persistent","repeat","placeholder","inptRegs","*","Formatter","patterns","_specFromSinglePattern","_updatePattern","hldrs","_keyDown","_keyPress","_paste","_processKey","_focus","addInptType","resetPattern","sel","_removeChars","newPattern","getPattern","isSpecial","isAfterStart","isFirstChar","delKey","ignoreCaret","_delete","_formatValue","_nextPos","newPos","_validateInpts","_addChars","curChar","curHldr","inptType","isBadType","isInvalid","inBounds","focusStart","_addChar","patternStr","parseMatcher","matcher","patternSpec","matcherStr","parsedPattern","regExpMatcher","matchedIndex","parentElement","inputRange","endRange","moveToBookmark","getBookmark","compareEndPoints","formatted","appendToTmplItems","oldManip","domManip","tmplItmAtt","htmlExpr","newTmplItems","wrappedItems","topTmplItem","itemKey","cloneIndex","stack","newTmplItem","parentItem","newItem","_wrap","nodes","calls","tiCalls","nest","tiNest","wrap","tiWrap","tiHtml","update","tiUpdate","_ctnt","build","tmplItem","nested","frag","ret","before","middle","storeTmplItems","unencode","makeArray","childNodes","buildTmplFn","markup","slash","fnargs","parens","exprAutoFnDetect","tag","_default","$2","updateWrapped","wrapped","elems","keySuffix","newClonedItems","processItemKey","pntKey","pntItem","pntNode","cloneTmplItem","textOnly","innerText","outerHTML","div","cloneNode","coll","prependTo","insertAfter","replaceAll","original","tmplItems","insert","clone","pushStack","complete","dmArgs","elemsLength","fragClone","afterManip","topLevel","dataItem","if","else","=","!","initAjaxDefaultSetting","initMenu","initAx5","initPlugins","initCheckboxAll","ajaxError","request","responseJSON","toastr","ajaxStart","ajaxComplete","menuActive","$check","is_all","checked","$allCheck","MASK2","modal2","backdrop","Dropdown","getParent","clearMenus","relatedTarget","contains","Event","isDefaultPrevented","VERSION","isActive","toggleClass","$items","old","dropdown","noConflict","defaultCss","defaultOption","modalCallback","modalSendData","sendData","modalCss","modalAlign","maximize","MODAL2","keyCheck","existCheck","brd_key","is_raw","form","bca_parent","post_count","bmt_idx","faq","fac_idx","faq_idx","category","exist","total_count","POP_INFO_ADMIN","mem_idx","POP_PASSWORD_ADMIN","POP_MODIFY_ADMIN","POP_POINT_ADMIN","POP_POINT_FORM_ADMIN","STATUS_CHANGE","current_status","change_status","common_msg_invalid_access","change_status_msg","member_status_y","member_status_n","member_status_d","member_status_h"],"mappings":"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","sourcesContent":["/*!\n * clipboard.js v2.0.1\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(6);\nvar delegate = __webpack_require__(5);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(4);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ })\n/******/ ]);\n});","/*!\r\n * jQuery Cookie Plugin v1.4.1\r\n * https://github.com/carhartl/jquery-cookie\r\n *\r\n * Copyright 2006, 2014 Klaus Hartl\r\n * Released under the MIT license\r\n */\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD (Register as an anonymous module)\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n\r\n var pluses = /\\+/g;\r\n\r\n function encode(s) {\r\n return config.raw ? s : encodeURIComponent(s);\r\n }\r\n\r\n function decode(s) {\r\n return config.raw ? s : decodeURIComponent(s);\r\n }\r\n\r\n function stringifyCookieValue(value) {\r\n return encode(config.json ? JSON.stringify(value) : String(value));\r\n }\r\n\r\n function parseCookieValue(s) {\r\n if (s.indexOf('\"') === 0) {\r\n // This is a quoted cookie as according to RFC2068, unescape...\r\n s = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\r\n }\r\n\r\n try {\r\n // Replace server-side written pluses with spaces.\r\n // If we can't decode the cookie, ignore it, it's unusable.\r\n // If we can't parse the cookie, ignore it, it's unusable.\r\n s = decodeURIComponent(s.replace(pluses, ' '));\r\n return config.json ? JSON.parse(s) : s;\r\n } catch(e) {}\r\n }\r\n\r\n function read(s, converter) {\r\n var value = config.raw ? s : parseCookieValue(s);\r\n return $.isFunction(converter) ? converter(value) : value;\r\n }\r\n\r\n var config = $.cookie = function (key, value, options) {\r\n\r\n // Write\r\n\r\n if (arguments.length > 1 && !$.isFunction(value)) {\r\n options = $.extend({}, config.defaults, options);\r\n\r\n if (typeof options.expires === 'number') {\r\n var days = options.expires, t = options.expires = new Date();\r\n t.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n }\r\n\r\n return (document.cookie = [\r\n encode(key), '=', stringifyCookieValue(value),\r\n options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n options.path ? '; path=' + options.path : '',\r\n options.domain ? '; domain=' + options.domain : '',\r\n options.secure ? '; secure' : ''\r\n ].join(''));\r\n }\r\n\r\n // Read\r\n\r\n var result = key ? undefined : {},\r\n // To prevent the for loop in the first place assign an empty array\r\n // in case there are no cookies at all. Also prevents odd result when\r\n // calling $.cookie().\r\n cookies = document.cookie ? document.cookie.split('; ') : [],\r\n i = 0,\r\n l = cookies.length;\r\n\r\n for (; i < l; i++) {\r\n var parts = cookies[i].split('='),\r\n name = decode(parts.shift()),\r\n cookie = parts.join('=');\r\n\r\n if (key === name) {\r\n // If second argument (value) is a function it's a converter...\r\n result = read(cookie, value);\r\n break;\r\n }\r\n\r\n // Prevent storing a cookie that we couldn't decode.\r\n if (!key && (cookie = read(cookie)) !== undefined) {\r\n result[name] = cookie;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n config.defaults = {};\r\n\r\n $.removeCookie = function (key, options) {\r\n // Must not alter options, thus extending a fresh object...\r\n $.cookie(key, '', $.extend({}, options, { expires: -1 }));\r\n return !$.cookie(key);\r\n };\r\n\r\n}));","/***********************************************************************************\r\n * IE 8 이하 브라우져 console.log 에러처리\r\n ***********************************************************************************/\r\nif(!window.console || !window.console.log) {window.console = {log : function(){}};}\r\n\r\nvar APP = {};\r\nAPP.POPUP = null;\r\nAPP.REGEX = {};\r\nAPP.REGEX.uniqueID = /^[a-z][a-z0-9_]{2,19}$/g;\r\n(function($) {\r\n APP.POPUP = function(option) {\r\n var defaults={\r\n title : '_blank',\r\n width : 800,\r\n height : 600,\r\n url : ''\r\n };\r\n\r\n var options = $.extend({}, defaults, option);\r\n\r\n cw = screen.availWidth;\r\n ch = screen.availHeight;\r\n sw = options.width;\r\n sh = options.height;\r\n\r\n ml = (cw - sw) / 2;\r\n mt = (ch - sh) / 2;\r\n var option = 'width='+sw+',height='+sh+',top='+mt+',left='+ml+',scrollbars=yes,resizable=no';\r\n var win = window.open(options.url, options.title, option);\r\n if (win == null || typeof(win) == \"undefined\" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0))\r\n {\r\n alert(\"팝업 차단 기능이 설정되어있습니다\\n\\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오.\");\r\n return;\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * 언어셋 변경\r\n * @param lang\r\n * @constructor\r\n */\r\nAPP.SET_LANG = function(lang)\r\n{\r\n $.cookie('site_lang', lang, {expires:30, path:'/'});\r\n location.reload();\r\n};\r\n\r\n/**\r\n * 팝업창 닫기버튼 init\r\n */\r\n$('[data-toggle=\"btn-popup-close\"]').click(function(e){\r\n var type = $(this).data('type');\r\n var idx = $(this).data('idx');\r\n var cookie = $(this).data('cookie');\r\n\r\n if( type == 'Y')\r\n {\r\n window.close();\r\n }\r\n else if( type == 'N' )\r\n {\r\n $(\"#popup-\" + idx ).remove();\r\n }\r\n\r\n if( cookie == 1 )\r\n {\r\n $.cookie('popup_'+idx, 1, {expires:1, path:'/'});\r\n }\r\n});\r\n\r\n/**\r\n * SNS 공유\r\n */\r\n$(\"a[data-toggle='sns-share']\").not('[data-service=\"link\"]').click(function(e){\r\n e.preventDefault();\r\n\r\n var _this = $(this);\r\n var sns_type = _this.data('service');\r\n var href = _this.data('url');\r\n var title = _this.data('title');\r\n var loc = \"\";\r\n var img = $(\"meta[name='og:image']\").attr('content');\r\n\r\n if( ! sns_type || !href || !title) return;\r\n\r\n if( sns_type == 'facebook' ) {\r\n loc = '//www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'twitter' ) {\r\n loc = '//twitter.com/home?status='+encodeURIComponent(title)+' '+href;\r\n }\r\n else if ( sns_type == 'google' ) {\r\n loc = '//plus.google.com/share?url='+href;\r\n }\r\n else if ( sns_type == 'pinterest' ) {\r\n\r\n loc = '//www.pinterest.com/pin/create/button/?url='+href+'&media='+img+'&description='+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'kakaostory') {\r\n loc = 'https://story.kakao.com/share?url='+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'band' ) {\r\n loc = 'http://www.band.us/plugin/share?body='+encodeURIComponent(title)+'%0A'+encodeURIComponent(href);\r\n }\r\n else if ( sns_type == 'naver' ) {\r\n loc = \"http://share.naver.com/web/shareView.nhn?url=\"+encodeURIComponent(href)+\"&title=\"+encodeURIComponent(title);\r\n }\r\n else if ( sns_type == 'line') {\r\n loc = \"http://line.me/R/msg/text/?\" + encodeURIComponent(title + \"\\n\" + href);\r\n }\r\n else {\r\n return false;\r\n }\r\n APP.POPUP({ url : loc});\r\n return false;\r\n});\r\n\r\n$(function(){\r\n var clipboard = new ClipboardJS('a[data-toggle=\"sns-share\"][data-service=\"link\"]', {\r\n text: function(trigger) {\r\n return trigger.getAttribute('data-url');\r\n }\r\n });\r\n clipboard.on('success', function(){\r\n alert('현재 URL이 복사되었습니다.');\r\n });\r\n});","/**********************************************************************************************************************\r\n * 회원정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_INFO_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/info/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 비밀번호 변경 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_PASSWORD_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '비밀번호 변경'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/password/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 정보수정 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_MODIFY_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 정보 수정'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/modify/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 정보 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_ADMIN = function(mem_idx) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx ) {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :600,\r\n header : {\r\n title : '회원 포인트 관리'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point/' + mem_idx,\r\n param : {}\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 포인트 추가 팝업\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.POP_POINT_FORM_ADMIN = function(mem_idx) {\r\n var mem_idx = typeof mem_idx != 'undefined' && mem_idx ? mem_idx : null;\r\n if(! mem_idx) {\r\n alert('잘못된 접근입니다.');\r\n return;\r\n }\r\n\r\n APP.MODAL2.callback = function(){\r\n location.reload();\r\n };\r\n APP.MODAL2.open({\r\n width: 410,\r\n height :200,\r\n header : {\r\n title : '회원 포인트 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/members/point_form/' + mem_idx\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * 회원 STATUS 변경\r\n *********************************************************************************************************************/\r\nAPP.MEMBER.STATUS_CHANGE = function(mem_idx, current_status, change_status) {\r\n if( typeof mem_idx == 'undefined' || ! mem_idx || typeof current_status == 'undefined' || ! current_status || typeof change_status == 'undefined' || ! change_status ) {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n var change_status_msg = '';\r\n if( change_status == 'Y' ) change_status_msg = LANG.member_status_y;\r\n else if (change_status == 'N') change_status_msg = LANG.member_status_n;\r\n else if (change_status == 'D') change_status_msg = LANG.member_status_d;\r\n else if (change_status == 'H') change_status_msg = LANG.member_status_h;\r\n else {\r\n alert(LANG.common_msg_invalid_access);\r\n return false;\r\n }\r\n\r\n if( ! confirm('해당 회원의 상태를 [' + change_status_msg + '] 상태로 변경합니까?') ) return;\r\n $.ajax({\r\n url : '/ajax/members/status',\r\n type : 'POST',\r\n async : false,\r\n cache : false,\r\n data : {\r\n mem_idx : mem_idx,\r\n current_status : current_status,\r\n change_status : change_status\r\n },\r\n success:function(){\r\n alert('지정한 회원의 상태를 [' + change_status_msg + '] 상태로 변경하였습니다.');\r\n location.reload();\r\n }\r\n })\r\n};\r\n\r\n$(function(){\r\n\r\n});\r\n","APP.BOARD.keyCheck = function(value) {\r\n if (value == '') return \"게시판 고유키를 입력하세요\";\r\n if (!APP.REGEX.uniqueID.test(value)) return \"게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다.\";\r\n if (APP.BOARD.existCheck(value)) return \"이미 존재하는 키 입니다.\";\r\n\r\n return true;\r\n};\r\n\r\nAPP.BOARD.existCheck = function(brd_key) {\r\n var info = null;\r\n $.ajax({\r\n url : base_url + '/ajax/board/info',\r\n type : 'get',\r\n async : false,\r\n cache : false,\r\n data : {\r\n brd_key : brd_key,\r\n is_raw : true\r\n },\r\n success:function(res){\r\n info = res;\r\n }\r\n });\r\n return info;\r\n};\r\n\r\nAPP.BOARD.CATEGORY.form = function(brd_key, bca_parent, bca_idx) {\r\n var brd_key = typeof brd_key != 'undefined' && brd_key ? brd_key : null;\r\n var bca_parent = typeof bca_parent != 'undefined' && bca_parent >= 0 ? bca_parent : null;\r\n var bca_idx = typeof bca_idx != 'undefined' && bca_idx ? bca_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n if(parseInt(bca_parent) < 0)\r\n {\r\n alert('부모 카테고리가 선택되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bca_idx ? '카테고리 정보 수정' : '카테고리 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/category_form',\r\n param : {\r\n brd_key : brd_key,\r\n bca_parent : bca_parent,\r\n bca_idx : bca_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.CATEGORY.remove = function(bca_idx) {\r\n \r\n if( APP.BOARD.CATEGORY.count(bca_idx) > 0 )\r\n {\r\n alert('해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요');\r\n return false;\r\n }\r\n\r\n var post_count = APP.BOARD.CATEGORY.postCount(bca_idx);\r\n if( post_count > 0 )\r\n {\r\n if(! confirm('해당 카테고리에 등록된 글이 '+post_count+'건이 있습니다. 삭제를 진행하시겠습니까?' )) {\r\n return false;\r\n }\r\n }\r\n\r\n if(! confirm('해당 카테고리를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/category\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n bca_idx : bca_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('카테고리 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('카테고리 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\nAPP.BOARD.EXTRA.form = function(brd_key, bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! brd_key )\r\n {\r\n alert('게시판이 지정되지 않았습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 400,\r\n height :200,\r\n header : {\r\n title : bmt_idx ? '입력필드 수정' : '입력필드 추가'\r\n },\r\n callback : function(){\r\n parent.location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/board/extra_form',\r\n param : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n }\r\n }\r\n });\r\n};\r\n\r\nAPP.BOARD.EXTRA.remove = function(brd_key,bmt_idx)\r\n{\r\n brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;\r\n bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;\r\n\r\n if(! bmt_idx )\r\n {\r\n alert('잘못된 접근입니다.');\r\n return false;\r\n }\r\n\r\n if(! confirm('해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : base_url + \"/ajax/board/extra\",\r\n type : 'DELETE',\r\n cache : false,\r\n async: false,\r\n data : {\r\n brd_key : brd_key,\r\n bmt_idx : bmt_idx\r\n },\r\n success:function(res){\r\n if( res.result )\r\n {\r\n alert('입력필드 삭제에 성공하였습니다.');\r\n location.reload();\r\n }\r\n else {\r\n alert('입력필드 삭제에 실패하였습니다.');\r\n location.reload();\r\n }\r\n }\r\n })\r\n};\r\n\r\n\r\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function () {\n 'use strict';\n\n // root of function\n\n var root = this,\n win = this,\n doc = win ? win.document : null,\n docElem = win ? win.document.documentElement : null,\n reIsJson = /^([\"'](\\\\.|[^\"\\\\\\n\\r])*?[\"']|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$/,\n reMs = /^-ms-/,\n reSnakeCase = /[\\-_]([\\da-z])/gi,\n reCamelCase = /([A-Z])/g,\n reDot = /\\./,\n reInt = /[-|+]?[\\D]/gi,\n reNotNum = /\\D/gi,\n reMoneySplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n reAmp = /&/g,\n reEq = /=/,\n reClassNameSplit = /[ ]+/g,\n\n\n /** @namespace {Object} ax5 */\n ax5 = {},\n info = void 0,\n U = void 0,\n dom = void 0;\n\n /**\n * guid\n * @member {Number} ax5.guid\n */\n ax5.guid = 1;\n /**\n * ax5.guid를 구하고 증가시킵니다.\n * @method ax5.getGuid\n * @returns {Number} guid\n */\n ax5.getGuid = function () {\n return ax5.guid++;\n };\n\n /**\n * 상수모음\n * @namespace ax5.info\n */\n ax5.info = info = function () {\n var _arguments = arguments;\n\n /**\n * ax5 version\n * @member {String} ax5.info.version\n */\n var version = \"1.4.126\";\n\n /**\n * ax5 library path\n * @member {String} ax5.info.baseUrl\n */\n var baseUrl = \"\";\n\n /**\n * ax5 에러 출력메세지 사용자 재 정의\n * @member {Object} ax5.info.onerror\n * @examples\n * ```\n * ax5.info.onerror = function(){\n * console.log(arguments);\n * }\n * ```\n */\n var onerror = function onerror() {\n console.error(U.toArray(_arguments).join(\":\"));\n };\n\n /**\n * event keyCodes\n * @member {Object} ax5.info.eventKeys\n * @example\n * ```\n * {\n * \tBACKSPACE: 8, TAB: 9,\n * \tRETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n * \tHOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n * }\n * ```\n */\n var eventKeys = {\n BACKSPACE: 8, TAB: 9,\n RETURN: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46,\n HOME: 36, END: 35, PAGEUP: 33, PAGEDOWN: 34, INSERT: 45, SPACE: 32\n };\n\n /**\n * week names\n * @member {Object[]} weekNames\n * @member {string} weekNames[].label\n *\n * @example\n * ```\n * [\n * {label: \"SUN\"},{label: \"MON\"},{label: \"TUE\"},{label: \"WED\"},{label: \"THU\"},{label: \"FRI\"},{label: \"SAT\"}\n * ]\n * console.log( weekNames[0] );\n * console.log( ax5.info.weekNames[(new Date()).getDay()].label )\n * ```\n */\n var weekNames = [{ label: \"SUN\" }, { label: \"MON\" }, { label: \"TUE\" }, { label: \"WED\" }, { label: \"THU\" }, { label: \"FRI\" }, { label: \"SAT\" }];\n\n /**\n * 사용자 브라우저 식별용 오브젝트\n * @member {Object} ax5.info.browser\n * @example\n * ```\n * console.log( ax5.info.browser );\n * //Object {name: \"chrome\", version: \"39.0.2171.71\", mobile: false}\n * ```\n */\n var browser = function (ua, mobile, browserName, match, browser, browserVersion) {\n if (!win || !win.navigator) return {};\n\n ua = navigator.userAgent.toLowerCase(), mobile = ua.search(/mobile/g) != -1, browserName, match, browser, browserVersion;\n\n if (ua.search(/iphone/g) != -1) {\n return { name: \"iphone\", version: 0, mobile: true };\n } else if (ua.search(/ipad/g) != -1) {\n return { name: \"ipad\", version: 0, mobile: true };\n } else if (ua.search(/android/g) != -1) {\n match = /(android)[ \\/]([\\w.]+)/.exec(ua) || [];\n browserVersion = match[2] || \"0\";\n return { name: \"android\", version: browserVersion, mobile: mobile };\n } else {\n browserName = \"\";\n match = /(opr)[ \\/]([\\w.]+)/.exec(ua) || /(chrome)[ \\/]([\\w.]+)/.exec(ua) || /(webkit)[ \\/]([\\w.]+)/.exec(ua) || /(msie) ([\\w.]+)/.exec(ua) || ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) || [];\n browser = match[1] || \"\";\n browserVersion = match[2] || \"0\";\n\n if (browser == \"msie\") browser = \"ie\";\n return {\n name: browser,\n version: browserVersion,\n mobile: mobile\n };\n }\n ua = null, mobile = null, browserName = null, match = null, browser = null, browserVersion = null;\n }();\n\n /**\n * 브라우저 여부\n * @member {Boolean} ax5.info.isBrowser\n */\n var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && win.document);\n\n /**\n * 브라우저에 따른 마우스 휠 이벤트이름\n * @member {Object} ax5.info.wheelEnm\n */\n var wheelEnm = win && /Firefox/i.test(navigator.userAgent) ? \"DOMMouseScroll\" : \"mousewheel\";\n\n /**\n * 첫번째 자리수 동사 - (필요한것이 없을때 : 4, 실행오류 : 5)\n * 두번째 자리수 목적어 - 문자열 0, 숫자 1, 배열 2, 오브젝트 3, 함수 4, DOM 5, 파일 6, 기타 7\n * 세번째 자리수 옵션\n * @member {Object} ax5.info.errorMsg\n */\n var errorMsg = {};\n\n /**\n * 현재 페이지의 Url 정보를 리턴합니다.\n * @method ax5.info.urlUtil\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.util.toJson( ax5.info.urlUtil() ) );\n * {\n *\t\"baseUrl\": \"http://ax5:2018\",\n *\t\"href\": \"http://ax5:2018/samples/index.html?a=1&b=1#abc\",\n *\t\"param\": \"a=1&b=1\",\n *\t\"referrer\": \"\",\n *\t\"pathname\": \"/samples/index.html\",\n *\t\"hostname\": \"ax5\",\n *\t\"port\": \"2018\",\n *\t\"url\": \"http://ax5:2018/samples/index.html\",\n *\t\"hashdata\": \"abc\"\n * }\n * ```\n */\n function urlUtil(url, urls) {\n url = {\n href: win.location.href,\n param: win.location.search,\n referrer: doc.referrer,\n pathname: win.location.pathname,\n hostname: win.location.hostname,\n port: win.location.port\n }, urls = url.href.split(/[\\?#]/);\n url.param = url.param.replace(\"?\", \"\");\n url.url = urls[0];\n if (url.href.search(\"#\") > -1) {\n url.hashdata = U.last(urls);\n }\n urls = null;\n url.baseUrl = U.left(url.href, \"?\").replace(url.pathname, \"\");\n return url;\n }\n\n /**\n * ax5-error-msg.js 에 정의된 ax5 error를 반환합니다.\n * @method ax5.info.getError\n * @returns {Object}\n * @example\n * ```\n * console.log( ax5.info.getError(\"single-uploader\", \"460\", \"upload\") );\n *\n * if(!this.selectedFile){\n * if (cfg.onEvent) {\n * \tvar that = {\n * \t\taction: \"error\",\n * \t\terror: ax5.info.getError(\"single-uploader\", \"460\", \"upload\")\n * \t};\n * \tcfg.onEvent.call(that, that);\n * }\n * return this;\n * }\n * ```\n */\n function getError(className, errorCode, methodName) {\n if (info.errorMsg && info.errorMsg[className]) {\n return {\n className: className,\n errorCode: errorCode,\n methodName: methodName,\n msg: info.errorMsg[className][errorCode]\n };\n } else {\n return { className: className, errorCode: errorCode, methodName: methodName };\n }\n }\n\n /**\n * 브라우져의 터치 기능 유무를 확인합니다.\n * @method ax5.info.supportTouch\n * @returns {boolean}\n * @example\n * ```\n * var chkFlag = ax5.info.supportTouch;\n */\n var supportTouch = win ? 'ontouchstart' in win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 : false;\n\n var supportFileApi = win ? win.FileReader && win.File && win.FileList && win.Blob : false;\n\n return {\n errorMsg: errorMsg,\n version: version,\n baseUrl: baseUrl,\n onerror: onerror,\n eventKeys: eventKeys,\n weekNames: weekNames,\n browser: browser,\n isBrowser: isBrowser,\n supportTouch: supportTouch,\n supportFileApi: supportFileApi,\n wheelEnm: wheelEnm,\n urlUtil: urlUtil,\n getError: getError\n };\n }();\n\n /**\n * Refer to this by {@link ax5}.\n * @namespace ax5.util\n */\n ax5['util'] = U = function () {\n var _toString = Object.prototype.toString;\n\n /**\n * Object나 Array의 아이템으로 사용자 함수를 호출합니다.\n * @method ax5.util.each\n * @param {Object|Array} O\n * @param {Function} _fn\n * @example\n * ```js\n * var axf = ax5.util;\n * axf.each([0,1,2], function(){\n * \t// with this\n * });\n * axf.each({a:1, b:2}, function(){\n * \t// with this\n * });\n * ```\n */\n function each(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n isObj = l === undefined || typeof O === \"function\";\n if (isObj) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") if (_fn.call(O[key], key, O[key]) === false) break;\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") if (_fn.call(O[i], i, O[i++]) === false) break;\n }\n }\n return O;\n }\n\n // In addition to using the http://underscorejs.org : map, reduce, reduceRight, find\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값으로 이루어진 새로운 배열을 만듭니다.\n * @method ax5.util.map\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4];\n * var myObject = {a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n *\n * var _arr = ax5.util.map( myArray, function(index, I){\n * return index+1;\n * });\n * console.log(_arr);\n * // [1, 2, 3, 4, 5]\n *\n * var _arr = ax5.util.map( myObject, function(k, v){\n * return v * 2;\n * });\n * console.log(_arr);\n * // [2, 4, NaN, NaN]\n * ```\n */\n function map(O, _fn) {\n if (isNothing(O)) return [];\n var key = void 0,\n i = 0,\n l = O.length,\n results = [],\n fnResult = void 0;\n if (isObject(O)) {\n for (key in O) {\n if (typeof O[key] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[key], key, O[key])) === false) break;else results.push(fnResult);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n fnResult = undefined;\n if ((fnResult = _fn.call(O[i], i, O[i++])) === false) break;else results.push(fnResult);\n }\n }\n }\n return results;\n }\n\n /**\n * 원본 아이템들을 이용하여 사용자 함수의 리턴값이 참인 아이템의 위치나 키값을 반환합니다.\n * @method ax5.util.search\n * @param {Object|Array} O\n * @param {Function|String|Number} _fn - 함수 또는 값\n * @returns {Number|String}\n * @example\n * ```js\n * var myArray = [0,1,2,3,4,5,6];\n * var myObject = {a:\"123\",\"b\":\"123\",c:123};\n *\n * ax5.util.search(myArray, function(){\n * return this > 3;\n * });\n * // 4\n * ax5.util.search(myObject, function(k, v){\n * return v === 123;\n * });\n * // \"c\"\n * ax5.util.search([1,2,3,4], 3);\n * // 2\n * ax5.util.search([1,2], 4);\n * // -1\n * ax5.util.search([\"name\",\"value\"], \"value\");\n * // 1\n * ax5.util.search([\"name\",\"value\"], \"values\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value2\");\n * // -1\n * ax5.util.search({k1:\"name\",k2:\"value\"}, \"value\");\n * // \"k2\"\n * ```\n */\n function search(O, _fn) {\n if (isNothing(O)) return -1;\n if (isObject(O)) {\n for (var key in O) {\n if (typeof O[key] != \"undefined\" && isFunction(_fn) && _fn.call(O[key], key, O[key])) {\n return key;\n break;\n } else if (O[key] == _fn) {\n return key;\n break;\n }\n }\n } else {\n for (var i = 0, l = O.length; i < l; i++) {\n if (typeof O[i] != \"undefined\" && isFunction(_fn) && _fn.call(O[i], i, O[i])) {\n return i;\n break;\n } else if (O[i] == _fn) {\n return i;\n break;\n }\n }\n }\n return -1;\n }\n\n /**\n * @method ax5.util.sum\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.sum(arr, function () {\n * if(this.name == \"122\") {\n * return this.value;\n * }\n * });\n * console.log(rs); // 19\n *\n * console.log(ax5.util.sum(arr, 10, function () {\n * return this.value;\n * }));\n * // 40\n * ```\n */\n function sum(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * @method ax5.util.avg\n * @param {Array|Object} O\n * @param {Number} [defaultValue]\n * @param {Function} _fn\n * @returns {Number}\n * @example\n * ```js\n * var arr = [\n * {name: \"122\", value: 9},\n * {name: \"122\", value: 10},\n * {name: \"123\", value: 11}\n * ];\n *\n * var rs = ax5.util.avg(arr, function () {\n * return this.value;\n * });\n *\n * console.log(rs); // 10\n * ```\n */\n function avg(O, defaultValue, _fn) {\n var i = void 0,\n l = void 0,\n tokenValue = void 0;\n if (isFunction(defaultValue) && typeof _fn === \"undefined\") {\n _fn = defaultValue;\n defaultValue = 0;\n }\n if (typeof defaultValue === \"undefined\") defaultValue = 0;\n\n if (isArray(O)) {\n i = 0;\n l = O.length;\n for (; i < l; i++) {\n if (typeof O[i] !== \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;\n }\n }\n return defaultValue / l;\n } else if (isObject(O)) {\n l = 0;\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenValue = _fn.call(O[i], O[i])) === false) break;else if (typeof tokenValue !== \"undefined\") defaultValue += tokenValue;++l;\n }\n }\n return defaultValue / l;\n } else {\n console.error(\"argument error : ax5.util.sum - use Array or Object\");\n return defaultValue;\n }\n }\n\n /**\n * 배열의 왼쪽에서 오른쪽으로 연산을 진행하는데 수행한 결과가 왼쪽 값으로 반영되어 최종 왼쪽 값을 반환합니다.\n * @method ax5.util.reduce\n * @param {Array|Object} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduce( aarray, function(p, n){\n * return p * n;\n * });\n * console.log(result, aarray);\n * // 120 [5, 4, 3, 2, 1]\n *\n * ax5.util.reduce({a:1, b:2}, function(p, n){\n * return parseInt(p|0) + parseInt(n);\n * });\n * // 3\n * ```\n */\n function reduce(O, _fn) {\n var i, l, tokenItem;\n if (isArray(O)) {\n i = 0, l = O.length, tokenItem = O[i];\n for (; i < l - 1;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[++i])) === false) break;\n }\n }\n return tokenItem;\n } else if (isObject(O)) {\n for (i in O) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[i])) === false) break;\n }\n }\n return tokenItem;\n } else {\n console.error(\"argument error : ax5.util.reduce - use Array or Object\");\n return null;\n }\n }\n\n /**\n * 배열의 오른쪽에서 왼쪽으로 연산을 진행하는데 수행한 결과가 오른쪽 값으로 반영되어 최종 오른쪽 값을 반환합니다.\n * @method ax5.util.reduceRight\n * @param {Array} O\n * @param {Function} _fn\n * @returns {Alltypes}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.reduceRight( aarray, function(p, n){\n * console.log( n );\n * return p * n;\n * });\n * console.log(result, aarray);\n * 120 [5, 4, 3, 2, 1]\n * ```\n */\n function reduceRight(O, _fn) {\n var i = O.length - 1,\n tokenItem = O[i];\n for (; i > 0;) {\n if (typeof O[i] != \"undefined\") {\n if ((tokenItem = _fn.call(root, tokenItem, O[--i])) === false) break;\n }\n }\n return tokenItem;\n }\n\n /**\n * 배열또는 오브젝트의 각 아이템을 인자로 하는 사용자 함수의 결과가 참인 아이템들의 배열을 반환합니다.\n * @method ax5.util.filter\n * @param {Object|Array} O\n * @param {Function} _fn\n * @returns {Array}\n * @example\n * ```js\n * var aarray = [5,4,3,2,1];\n * result = ax5.util.filter( aarray, function(){\n * return this % 2;\n * });\n * console.log(result);\n * // [5, 3, 1]\n *\n * var filObject = {a:1, s:\"string\", oa:{pickup:true, name:\"AXISJ\"}, os:{pickup:true, name:\"AX5\"}};\n * result = ax5.util.filter( filObject, function(){\n * \treturn this.pickup;\n * });\n * console.log( ax5.util.toJson(result) );\n * // [{\"pickup\": , \"name\": \"AXISJ\"}, {\"pickup\": , \"name\": \"AX5\"}]\n * ```\n */\n function filter(O, _fn) {\n if (isNothing(O)) return [];\n var k,\n i = 0,\n l = O.length,\n results = [],\n fnResult;\n if (isObject(O)) {\n for (k in O) {\n if (typeof O[k] != \"undefined\") {\n if (fnResult = _fn.call(O[k], k, O[k])) results.push(O[k]);\n }\n }\n } else {\n for (; i < l;) {\n if (typeof O[i] != \"undefined\") {\n if (fnResult = _fn.call(O[i], i, O[i])) results.push(O[i]);\n i++;\n }\n }\n }\n return results;\n }\n\n /**\n * Object를 JSONString 으로 반환합니다.\n * @method ax5.util.toJson\n * @param {Object|Array} O\n * @returns {String} JSON\n * @example\n * ```js\n * var ax = ax5.util;\n * var myObject = {\n * a:1, b:\"2\", c:{axj:\"what\", arrs:[0,2,\"3\"]},\n * fn: function(abcdd){\n * return abcdd;\n * }\n * };\n * console.log( ax.toJson(myObject) );\n * ```\n */\n function toJson(O) {\n var jsonString = \"\";\n if (ax5.util.isArray(O)) {\n var i = 0,\n l = O.length;\n jsonString += \"[\";\n for (; i < l; i++) {\n if (i > 0) jsonString += \",\";\n jsonString += toJson(O[i]);\n }\n jsonString += \"]\";\n } else if (ax5.util.isObject(O)) {\n jsonString += \"{\";\n var jsonObjectBody = [];\n each(O, function (key, value) {\n jsonObjectBody.push('\"' + key + '\": ' + toJson(value));\n });\n jsonString += jsonObjectBody.join(\", \");\n jsonString += \"}\";\n } else if (ax5.util.isString(O)) {\n jsonString = '\"' + O + '\"';\n } else if (ax5.util.isNumber(O)) {\n jsonString = O;\n } else if (ax5.util.isUndefined(O)) {\n jsonString = \"undefined\";\n } else if (ax5.util.isFunction(O)) {\n jsonString = '\"{Function}\"';\n } else {\n jsonString = O;\n }\n return jsonString;\n }\n\n /**\n * 관용의 JSON Parser\n * @method ax5.util.parseJson\n * @param {String} JSONString\n * @param {Boolean} [force] - 강제 적용 여부 (json 문자열 검사를 무시하고 오브젝트 변환을 시도합니다.)\n * @returns {Object}\n * @example\n * ```\n * console.log(ax5.util.parseJson('{\"a\":1}'));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':'b'}\"));\n * // Object {a: 1, b: \"b\"}\n * console.log(ax5.util.parseJson(\"{'a':1, 'b':function(){return 1;}}\", true));\n * // Object {a: 1, b: function}\n * console.log(ax5.util.parseJson(\"{a:1}\"));\n * // Object {a: 1}\n * console.log(ax5.util.parseJson(\"[1,2,3]\"));\n * // [1, 2, 3]\n * console.log(ax5.util.parseJson(\"['1','2','3']\"));\n * // [\"1\", \"2\", \"3\"]\n * console.log(ax5.util.parseJson(\"[{'a':'99'},'2','3']\"));\n * // [Object, \"2\", \"3\"]\n * ```\n */\n function parseJson(str, force) {\n if (force || reIsJson.test(str)) {\n try {\n return new Function('', 'return ' + str)();\n } catch (e) {\n return { error: 500, msg: 'syntax error' };\n }\n } else {\n return { error: 500, msg: 'syntax error' };\n }\n }\n\n /**\n * 인자의 타입을 반환합니다.\n * @method ax5.util.getType\n * @param {Object|Array|String|Number|Element|Etc} O\n * @returns {String} window|element|object|array|function|string|number|undefined|nodelist\n * @example\n * ```js\n * var axf = ax5.util;\n * var a = 11;\n * var b = \"11\";\n * console.log( axf.getType(a) );\n * console.log( axf.getType(b) );\n * ```\n */\n function getType(O) {\n var typeName;\n if (O != null && O == O.window) {\n typeName = \"window\";\n } else if (!!(O && O.nodeType == 1)) {\n typeName = \"element\";\n } else if (!!(O && O.nodeType == 11)) {\n typeName = \"fragment\";\n } else if (O === null) {\n typeName = \"null\";\n } else if (typeof O === \"undefined\") {\n typeName = \"undefined\";\n } else if (_toString.call(O) == \"[object Object]\") {\n typeName = \"object\";\n } else if (_toString.call(O) == \"[object Array]\") {\n typeName = \"array\";\n } else if (_toString.call(O) == \"[object String]\") {\n typeName = \"string\";\n } else if (_toString.call(O) == \"[object Number]\") {\n typeName = \"number\";\n } else if (_toString.call(O) == \"[object NodeList]\") {\n typeName = \"nodelist\";\n } else if (typeof O === \"function\") {\n typeName = \"function\";\n }\n return typeName;\n }\n\n /**\n * 오브젝트가 window 인지 판단합니다.\n * @method ax5.util.isWindow\n * @param {Object} O\n * @returns {Boolean}\n */\n function isWindow(O) {\n return O != null && O == O.window;\n }\n\n /**\n * 오브젝트가 HTML 엘리먼트여부인지 판단합니다.\n * @method ax5.util.isElement\n * @param {Object} O\n * @returns {Boolean}\n */\n function isElement(O) {\n return !!(O && (O.nodeType == 1 || O.nodeType == 11));\n }\n\n /**\n * 오브젝트가 Object인지 판단합니다.\n * @method ax5.util.isObject\n * @param {Object} O\n * @returns {Boolean}\n */\n function isObject(O) {\n return _toString.call(O) == \"[object Object]\";\n }\n\n /**\n * 오브젝트가 Array인지 판단합니다.\n * @method ax5.util.isArray\n * @param {Object} O\n * @returns {Boolean}\n */\n function isArray(O) {\n return _toString.call(O) == \"[object Array]\";\n }\n\n /**\n * 오브젝트가 Function인지 판단합니다.\n * @method ax5.util.isFunction\n * @param {Object} O\n * @returns {Boolean}\n */\n function isFunction(O) {\n return typeof O === \"function\";\n }\n\n /**\n * 오브젝트가 String인지 판단합니다.\n * @method ax5.util.isString\n * @param {Object} O\n * @returns {Boolean}\n */\n function isString(O) {\n return _toString.call(O) == \"[object String]\";\n }\n\n /**\n * 오브젝트가 Number인지 판단합니다.\n * @method ax5.util.isNumber\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNumber(O) {\n return _toString.call(O) == \"[object Number]\";\n }\n\n /**\n * 오브젝트가 NodeList인지 판단합니다.\n * @method ax5.util.isNodelist\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNodelist(O) {\n return !!(_toString.call(O) == \"[object NodeList]\" || typeof O !== \"undefined\" && O && O[0] && O[0].nodeType == 1);\n }\n\n /**\n * 오브젝트가 undefined인지 판단합니다.\n * @method ax5.util.isUndefined\n * @param {Object} O\n * @returns {Boolean}\n */\n function isUndefined(O) {\n return typeof O === \"undefined\";\n }\n\n /**\n * 오브젝트가 undefined이거나 null이거나 빈값인지 판단합니다.\n * @method ax5.util.isNothing\n * @param {Object} O\n * @returns {Boolean}\n */\n function isNothing(O) {\n return typeof O === \"undefined\" || O === null || O === \"\";\n }\n\n /**\n * 오브젝트가 날자값인지 판단합니다.\n * @method ax5.util.isDate\n * @param {Date} O\n * @returns {Boolean}\n * @example\n * ```js\n * ax5.util.isDate('2016-09-30');\n * // false\n * ax5.util.isDate( new Date('2016-09-30') );\n * // true\n * ```\n */\n function isDate(O) {\n return O instanceof Date && !isNaN(O.valueOf());\n }\n\n function isDateFormat(O) {\n var result = false;\n if (!O) {} else if (O instanceof Date && !isNaN(O.valueOf())) {\n result = true;\n } else {\n if (O.length > 7) {\n if (date(O) instanceof Date) {\n return true;\n }\n }\n O = O.replace(/\\D/g, '');\n if (O.length > 7) {\n var mm = O.substr(4, 2),\n dd = O.substr(6, 2);\n O = date(O);\n if (O.getMonth() == mm - 1 && O.getDate() == dd) {\n result = true;\n }\n }\n }\n return result;\n }\n\n /**\n * 오브젝트의 첫번째 아이템을 반환합니다.\n * @method ax5.util.first\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.first({a:1, b:2});\n * // Object {a: 1}\n * ax5.util.first([1,2,3,4]);\n * // 1\n * ```\n */\n function first(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[0]] = O[keys[0]];\n return item;\n } else if (isArray(O)) {\n return O[0];\n } else {\n console.error(\"ax5.util.object.first\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 오브젝트의 마지막 아이템을 반환합니다.\n * @method ax5.util.last\n * @param {Object|Array} O\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.last({a:1, b:2});\n * // Object {b: 2}\n * ax5.util.last([1,2,3,4]);\n * // 4\n * ```\n */\n function last(O) {\n if (isObject(O)) {\n var keys = Object.keys(O);\n var item = {};\n item[keys[keys.length - 1]] = O[keys[keys.length - 1]];\n return item;\n } else if (isArray(O)) {\n return O[O.length - 1];\n } else {\n console.error(\"ax5.util.object.last\", \"argument type error\");\n return undefined;\n }\n }\n\n /**\n * 쿠키를 설정합니다.\n * @method ax5.util.setCookie\n * @param {String} cname - 쿠키이름\n * @param {String} cvalue - 쿠키값\n * @param {Number} [exdays] - 쿠키 유지일수\n * @param {Object} [opts] - path, domain 설정 옵션\n * @example\n * ```js\n * ax5.util.setCookie(\"jslib\", \"AX5\");\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3);\n * ax5.util.setCookie(\"jslib\", \"AX5\", 3, {path:\"/\", domain:\".axisj.com\"});\n * ```\n */\n function setCookie(cn, cv, exdays, opts) {\n var expire;\n if (typeof exdays === \"number\") {\n expire = new Date();\n expire.setDate(expire.getDate() + exdays);\n }\n opts = opts || {};\n return doc.cookie = [escape(cn), '=', escape(cv), expire ? \"; expires=\" + expire.toUTCString() : \"\", // use expires attribute, max-age is not supported by IE\n opts.path ? \"; path=\" + opts.path : \"\", opts.domain ? \"; domain=\" + opts.domain : \"\", opts.secure ? \"; secure\" : \"\"].join(\"\");\n }\n\n /**\n * 쿠키를 가져옵니다.\n * @method ax5.util.getCookie\n * @param {String} cname\n * @returns {String} cookie value\n * @example\n * ```js\n * ax5.util.getCookie(\"jslib\");\n * ```\n */\n function getCookie(cname) {\n var name = cname + \"=\";\n var ca = doc.cookie.split(';'),\n i = 0,\n l = ca.length;\n for (; i < l; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }if (c.indexOf(name) != -1) return unescape(c.substring(name.length, c.length));\n }\n return \"\";\n }\n\n /**\n * jsonString 으로 alert 합니다.\n * @method ax5.util.alert\n * @param {Object|Array|String|Number} O\n * @returns {Object|Array|String|Number} O\n * @example ```js\n * ax5.util.alert({a:1,b:2});\n * ax5.util.alert(\"정말?\");\n * ```\n */\n function alert(O) {\n win.alert(toJson(O));\n return O;\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.left\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.left(\"abcd.efd\", 3);\n * // abc\n * ax5.util.left(\"abcd.efd\", \".\");\n * // abcd\n * ```\n */\n function left(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n if (isString(pos)) {\n return str.indexOf(pos) > -1 ? str.substr(0, str.indexOf(pos)) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(0, pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * 문자열의 특정 문자열까지 잘라주거나 원하는 포지션까지 잘라줍니다.\n * @method ax5.util.right\n * @param {String} str - 문자열\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {String}\n * @example\n * ```js\n * ax5.util.right(\"abcd.efd\", 3);\n * // efd\n * ax5.util.right(\"abcd.efd\", \".\");\n * // efd\n * ```\n */\n function right(str, pos) {\n if (typeof str === \"undefined\" || typeof pos === \"undefined\") return \"\";\n str = '' + str;\n if (isString(pos)) {\n return str.lastIndexOf(pos) > -1 ? str.substr(str.lastIndexOf(pos) + 1) : \"\";\n } else if (isNumber(pos)) {\n return str.substr(str.length - pos);\n } else {\n return \"\";\n }\n }\n\n /**\n * css형 문자열이나 특수문자가 포함된 문자열을 카멜케이스로 바꾸어 반환합니다.\n * @method ax5.util.camelCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.camelCase(\"inner-width\");\n * ax5.util.camelCase(\"innerWidth\");\n * // innerWidth\n * ```\n */\n function camelCase(str) {\n return str.replace(reMs, \"ms-\").replace(reSnakeCase, function (all, letter) {\n return letter.toUpperCase();\n });\n }\n\n /**\n * css형 문자열이나 카멜케이스문자열을 스네이크 케이스 문자열로 바꾸어 반환합니다.\n * @method ax5.util.snakeCase\n * @param {String} str\n * @returns {String}\n * @example\n * ```js\n * ax5.util.snakeCase(\"innerWidth\");\n * ax5.util.snakeCase(\"inner-Width\");\n * ax5.util.snakeCase(\"innerWidth\");\n * // inner-width\n * ```\n */\n function snakeCase(str) {\n return camelCase(str).replace(reCamelCase, function (all, letter) {\n return \"-\" + letter.toLowerCase();\n });\n }\n\n /**\n * 문자열에서 -. 을 제외한 모든 문자열을 제거하고 숫자로 반환합니다. 옵션에 따라 원하는 형식의 숫자로 변환 할 수 도 있습니다.\n * @method ax5.util.number\n * @param {String|Number} str\n * @param {Object} cond - 옵션\n * @returns {String|Number}\n * @example\n * ```js\n * var cond = {\n * \tround: {Number|Boolean} - 반올림할 자릿수,\n * \tmoney: {Boolean} - 통화,\n * \tabs: {Boolean} - 절대값,\n * \tbyte: {Boolean} - 바이트\n * }\n *\n * console.log(ax5.util.number(123456789.678, {round:1}));\n * console.log(ax5.util.number(123456789.678, {round:1, money:true}));\n * console.log(ax5.util.number(123456789.678, {round:2, byte:true}));\n * console.log(ax5.util.number(-123456789.8888, {abs:true, round:2, money:true}));\n * console.log(ax5.util.number(\"A-1234~~56789.8~888PX\", {abs:true, round:2, money:true}));\n *\n * //123456789.7\n * //123,456,789.7\n * //117.7MB\n * //123,456,789.89\n * //123,456,789.89\n * ```\n */\n function number(str, cond) {\n var result,\n pair = ('' + str).split(reDot),\n isMinus,\n returnValue;\n\n isMinus = Number(pair[0].replace(/,/g, \"\")) < 0 || pair[0] == \"-0\";\n returnValue = 0.0;\n pair[0] = pair[0].replace(reInt, \"\");\n\n if (pair[1]) {\n pair[1] = pair[1].replace(reNotNum, \"\");\n returnValue = Number(pair[0] + \".\" + pair[1]) || 0;\n } else {\n returnValue = Number(pair[0]) || 0;\n }\n result = isMinus ? -returnValue : returnValue;\n\n each(cond, function (k, c) {\n if (k == \"round\") {\n if (isNumber(c)) {\n if (c < 0) {\n result = +(Math.round(result + \"e-\" + Math.abs(c)) + \"e+\" + Math.abs(c));\n } else {\n result = +(Math.round(result + \"e+\" + c) + \"e-\" + c);\n }\n } else {\n result = Math.round(result);\n }\n }\n if (k == \"floor\") {\n result = Math.floor(result);\n }\n if (k == \"ceil\") {\n result = Math.ceil(result);\n } else if (k == \"money\") {\n result = function (val) {\n var txtNumber = '' + val;\n if (isNaN(txtNumber) || txtNumber == \"\") {\n return \"\";\n } else {\n var arrNumber = txtNumber.split('.');\n arrNumber[0] += '.';\n do {\n arrNumber[0] = arrNumber[0].replace(reMoneySplit, '$1,$2');\n } while (reMoneySplit.test(arrNumber[0]));\n if (arrNumber.length > 1) {\n return arrNumber.join('');\n } else {\n return arrNumber[0].split('.')[0];\n }\n }\n }(result);\n } else if (k == \"abs\") {\n result = Math.abs(Number(result));\n } else if (k == \"byte\") {\n result = function (val) {\n val = Number(result);\n var nUnit = \"KB\";\n var myByte = val / 1024;\n if (myByte / 1024 > 1) {\n nUnit = \"MB\";\n myByte = myByte / 1024;\n }\n if (myByte / 1024 > 1) {\n nUnit = \"GB\";\n myByte = myByte / 1024;\n }\n return number(myByte, { round: 1 }) + nUnit;\n }(result);\n }\n });\n\n return result;\n }\n\n /**\n * 배열 비슷한 오브젝트를 배열로 변환해줍니다.\n * @method ax5.util.toArray\n * @param {Object|Elements|Arguments} O\n * @returns {Array}\n * @example\n * ```js\n * ax5.util.toArray(arguments);\n * //\n * ```\n */\n function toArray(O) {\n if (typeof O.length != \"undefined\") return Array.prototype.slice.call(O);\n return [];\n }\n\n /**\n * 첫번째 인자에 두번째 인자 아이템을 합쳐줍니다. concat과 같은 역할을 하지만. 인자가 Array타입이 아니어도 됩니다.\n * @method ax5.util.merge\n * @param {Array|ArrayLike} first\n * @param {Array|ArrayLike} second\n * @returns {Array} first\n * @example\n * ```\n *\n * ```\n */\n function merge(first, second) {\n var l = second.length,\n i = first.length,\n j = 0;\n\n if (typeof l === \"number\") {\n for (; j < l; j++) {\n first[i++] = second[j];\n }\n } else {\n while (second[j] !== undefined) {\n first[i++] = second[j++];\n }\n }\n\n first.length = i;\n\n return first;\n }\n\n /**\n * 오브젝트를 파라미터형식으로 또는 파라미터를 오브젝트 형식으로 변환합니다.\n * @method ax5.util.param\n * @param {Object|Array|String} O\n * @param {String} [cond] - param|object\n * @returns {Object|String}\n * @example\n * ```\n * ax5.util.param({a:1,b:'1232'}, \"param\");\n * ax5.util.param(\"a=1&b=1232\", \"param\");\n * // \"a=1&b=1232\"\n * ax5.util.param(\"a=1&b=1232\");\n * // {a: \"1\", b: \"1232\"}\n * ```\n */\n function param(O, cond) {\n var p;\n if (isString(O) && typeof cond !== \"undefined\" && cond == \"param\") {\n return O;\n } else if (isString(O) && typeof cond !== \"undefined\" && cond == \"object\" || isString(O) && typeof cond === \"undefined\") {\n p = {};\n each(O.split(reAmp), function () {\n var item = this.split(reEq);\n if (!p[item[0]]) p[item[0]] = item[1];else {\n if (isString(p[item[0]])) p[item[0]] = [p[item[0]]];\n p[item[0]].push(item[1]);\n }\n });\n return p;\n } else {\n p = [];\n each(O, function (k, v) {\n p.push(k + \"=\" + escape(v));\n });\n return p.join('&');\n }\n }\n\n function encode(s) {\n return encodeURIComponent(s);\n }\n\n function decode(s) {\n return decodeURIComponent(s);\n }\n\n function error() {\n ax5.info.onerror.apply(this, arguments);\n }\n\n function localDate(yy, mm, dd, hh, mi, ss) {\n var utcD, localD;\n localD = new Date();\n if (mm < 0) mm = 0;\n if (typeof hh === \"undefined\") hh = 12;\n if (typeof mi === \"undefined\") mi = 0;\n utcD = new Date(Date.UTC(yy, mm, dd || 1, hh, mi, ss || 0));\n\n if (mm == 0 && dd == 1 && utcD.getUTCHours() + utcD.getTimezoneOffset() / 60 < 0) {\n utcD.setUTCHours(0);\n } else {\n utcD.setUTCHours(utcD.getUTCHours() + utcD.getTimezoneOffset() / 60);\n }\n return utcD;\n }\n\n /**\n * 날짜 형식의 문자열이나 Date객체를 조건에 맞게 처리 한 후 원하는 return 값으로 반환합니다.\n * @method ax5.util.date\n * @param {String|Date} d\n * @param {Object} cond\n * @returns {Date|String}\n * @example\n * ```js\n * ax5.util.date('2013-01-01'); // Tue Jan 01 2013 23:59:00 GMT+0900 (KST)\n * ax5.util.date((new Date()), {add:{d:10}, return:'yyyy/MM/dd'}); // \"2015/07/01\"\n * ax5.util.date('1919-03-01', {add:{d:10}, return:'yyyy/MM/dd hh:mm:ss'}); // \"1919/03/11 23:59:00\"\n * ```\n */\n function date(d, cond) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n hh = void 0,\n mi = void 0,\n aDateTime = void 0,\n aTimes = void 0,\n aTime = void 0,\n aDate = void 0,\n va = void 0,\n ISO_8601 = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i,\n ISO_8601_FULL = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n\n if (isString(d)) {\n if (d.length == 0) {\n d = new Date();\n } else if (d.length > 15) {\n if (ISO_8601_FULL.test(d) || ISO_8601.test(d)) {\n d = new Date(d);\n } else {\n aDateTime = d.split(/ /g), aTimes, aTime, aDate = aDateTime[0].split(/\\D/g), yy = aDate[0];\n mm = parseFloat(aDate[1]);\n dd = parseFloat(aDate[2]);\n aTime = aDateTime[1] || \"09:00\";\n aTimes = aTime.substring(0, 5).split(\":\");\n hh = parseFloat(aTimes[0]);\n mi = parseFloat(aTimes[1]);\n if (right(aTime, 2) === \"AM\" || right(aTime, 2) === \"PM\") hh += 12;\n d = localDate(yy, mm - 1, dd, hh, mi);\n }\n } else if (d.length == 14) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)), number(va.substr(8, 2)), number(va.substr(10, 2)), number(va.substr(12, 2)));\n } else if (d.length > 7) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, number(va.substr(6, 2)));\n } else if (d.length > 4) {\n va = d.replace(/\\D/g, \"\");\n d = localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else if (d.length > 2) {\n va = d.replace(/\\D/g, \"\");\n return localDate(va.substr(0, 4), va.substr(4, 2) - 1, 1);\n } else {\n d = new Date();\n }\n }\n if (typeof cond === \"undefined\" || typeof d === \"undefined\") {\n return d;\n } else {\n if (\"add\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n mxdd = void 0,\n DyMilli = 1000 * 60 * 60 * 24;\n\n if (typeof opts[\"d\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"d\"] * DyMilli);\n } else if (typeof opts[\"m\"] !== \"undefined\") {\n yy = _d.getFullYear();\n mm = _d.getMonth();\n dd = _d.getDate();\n yy = yy + parseInt(opts[\"m\"] / 12);\n mm += opts[\"m\"] % 12;\n mxdd = daysOfMonth(yy, mm);\n if (mxdd < dd) dd = mxdd;\n _d = new Date(yy, mm, dd, 12);\n } else if (typeof opts[\"y\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"y\"] * 365 * DyMilli);\n } else if (typeof opts[\"h\"] !== \"undefined\") {\n _d.setTime(_d.getTime() + opts[\"h\"] * 1000 * 60 * 60);\n }\n\n return _d;\n }(new Date(d), cond[\"add\"]);\n }\n if (\"set\" in cond) {\n d = function (_d, opts) {\n var yy = void 0,\n mm = void 0,\n dd = void 0,\n processor = {\n \"firstDayOfMonth\": function firstDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = 1;\n return new Date(yy, mm, dd, 12);\n },\n \"lastDayOfMonth\": function lastDayOfMonth(date) {\n yy = date.getFullYear();\n mm = date.getMonth();\n dd = daysOfMonth(yy, mm);\n return new Date(yy, mm, dd, 12);\n }\n };\n if (opts in processor) {\n return processor[opts](_d);\n } else {\n return _d;\n }\n }(new Date(d), cond[\"set\"]);\n }\n if (\"return\" in cond) {\n return function () {\n\n var fStr = cond[\"return\"],\n nY = void 0,\n nM = void 0,\n nD = void 0,\n nH = void 0,\n nMM = void 0,\n nS = void 0,\n nDW = void 0,\n yre = void 0,\n regY = void 0,\n mre = void 0,\n regM = void 0,\n dre = void 0,\n regD = void 0,\n hre = void 0,\n regH = void 0,\n mire = void 0,\n regMI = void 0,\n sre = void 0,\n regS = void 0,\n dwre = void 0,\n regDW = void 0;\n\n nY = d.getUTCFullYear();\n nM = setDigit(d.getMonth() + 1, 2);\n nD = setDigit(d.getDate(), 2);\n nH = setDigit(d.getHours(), 2);\n nMM = setDigit(d.getMinutes(), 2);\n nS = setDigit(d.getSeconds(), 2);\n nDW = d.getDay();\n\n yre = /[^y]*(yyyy)[^y]*/gi;\n yre.exec(fStr);\n regY = RegExp.$1;\n mre = /[^m]*(MM)[^m]*/g;\n mre.exec(fStr);\n regM = RegExp.$1;\n dre = /[^d]*(dd)[^d]*/gi;\n dre.exec(fStr);\n regD = RegExp.$1;\n hre = /[^h]*(hh)[^h]*/gi;\n hre.exec(fStr);\n regH = RegExp.$1;\n mire = /[^m]*(mm)[^i]*/g;\n mire.exec(fStr);\n regMI = RegExp.$1;\n sre = /[^s]*(ss)[^s]*/gi;\n sre.exec(fStr);\n regS = RegExp.$1;\n dwre = /[^d]*(dw)[^w]*/gi;\n dwre.exec(fStr);\n regDW = RegExp.$1;\n\n if (regY === \"yyyy\") {\n fStr = fStr.replace(regY, right(nY, regY.length));\n }\n if (regM === \"MM\") {\n if (regM.length == 1) nM = d.getMonth() + 1;\n fStr = fStr.replace(regM, nM);\n }\n if (regD === \"dd\") {\n if (regD.length == 1) nD = d.getDate();\n fStr = fStr.replace(regD, nD);\n }\n if (regH === \"hh\") {\n fStr = fStr.replace(regH, nH);\n }\n if (regMI === \"mm\") {\n fStr = fStr.replace(regMI, nMM);\n }\n if (regS === \"ss\") {\n fStr = fStr.replace(regS, nS);\n }\n if (regDW == \"dw\") {\n fStr = fStr.replace(regDW, info.weekNames[nDW].label);\n }\n return fStr;\n }();\n } else {\n return d;\n }\n }\n }\n\n /**\n * 인자인 날짜가 오늘부터 몇일전인지 반환합니다. 또는 인자인 날짜가 가까운 미래에 몇일 후인지 반환합니다.\n * @method ax5.util.dday\n * @param {String|Data} d\n * @param {Object} cond\n * @returns {Number}\n * @example\n * ```js\n * ax5.util.dday('2016-01-29');\n * // 1\n * ax5.util.dday('2016-01-29', {today:'2016-01-28'});\n * // 1\n * ax5.util.dday('1977-03-29', {today:'2016-01-28', age:true});\n * // 39\n * ```\n */\n function dday(d, cond) {\n var memoryDay = date(d),\n DyMilli = 1000 * 60 * 60 * 24,\n today = new Date(),\n diffnum,\n thisYearMemoryDay;\n\n function getDayTime(_d) {\n return Math.floor(_d.getTime() / DyMilli) * DyMilli;\n }\n\n if (typeof cond === \"undefined\") {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n return diffnum;\n } else {\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (cond[\"today\"]) {\n today = date(cond.today);\n diffnum = number((getDayTime(memoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n if (cond[\"thisYear\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n if (diffnum < 0) {\n thisYearMemoryDay = new Date(today.getFullYear() + 1, memoryDay.getMonth(), memoryDay.getDate());\n diffnum = number((getDayTime(thisYearMemoryDay) - getDayTime(today)) / DyMilli, { floor: true });\n }\n }\n if (cond[\"age\"]) {\n thisYearMemoryDay = new Date(today.getFullYear(), memoryDay.getMonth(), memoryDay.getDate());\n diffnum = thisYearMemoryDay.getFullYear() - memoryDay.getFullYear();\n }\n\n return diffnum;\n }\n }\n\n /**\n * 인자인 날짜가 몇년 몇월의 몇번째 주차인지 반환합니다.\n * @method ax5.util.weeksOfMonth\n * @param {String|Data} d\n * @returns {Object}\n * @example\n * ```js\n * ax5.util.weeksOfMonth(\"2015-10-01\"); // {year: 2015, month: 10, count: 1}\n * ax5.util.weeksOfMonth(\"2015-09-19\"); // {year: 2015, month: 9, count: 3}\n * ```\n */\n function weeksOfMonth(d) {\n var myDate = date(d);\n return {\n year: myDate.getFullYear(),\n month: myDate.getMonth() + 1,\n count: parseInt(myDate.getDate() / 7 + 1)\n };\n }\n\n /**\n * 년월에 맞는 날자수를 반환합니다.\n * (new Date()).getMonth() 기준으로 월값을 보냅니다. \"2월\" 인경우 \"1\" 을 넘기게 됩니다.\n * @method ax5.util.daysOfMonth\n * @param {Number} y\n * @param {Number} m\n * @returns {Number}\n * @examples\n * ```js\n * ax5.util.daysOfMonth(2015, 11); // 31\n * ax5.util.daysOfMonth(2015, 1); // 28\n * ```\n */\n function daysOfMonth(y, m) {\n if (m == 3 || m == 5 || m == 8 || m == 10) {\n return 30;\n } else if (m == 1) {\n return y % 4 == 0 && y % 100 != 0 || y % 400 == 0 ? 29 : 28;\n } else {\n return 31;\n }\n }\n\n /**\n * 원하는 횟수 만큼 자릿수 맞춤 문자열을 포함한 문자열을 반환합니다.\n * 문자열 길이보다 작은값을 보내면 무시됩니다.\n * @method ax5.util.setDigit\n * @param {String|Number} num\n * @param {Number} length\n * @param {String} [padder=0]\n * @param {Number} [radix]\n * @returns {String}\n * @example\n * ```\n * ax5.util.setDigit(2016, 6)\n * // \"002016\"\n * ax5.util.setDigit(2016, 2)\n * // \"2016\"\n * ```\n */\n function setDigit(num, length, padder, radix) {\n var s = num.toString(radix || 10);\n return times(padder || '0', length - s.length) + s;\n }\n\n /**\n * 문자열을 지정된 수만큼 반복 합니다.\n * @param {String} s\n * @param {Number} count\n * @returns {string}\n * @example\n * ```\n * ax5.util.times(2016, 2)\n * //\"20162016\"\n * ```\n */\n function times(s, count) {\n return count < 1 ? '' : new Array(count + 1).join(s);\n }\n\n /**\n * 타겟엘리먼트의 부모 엘리멘트 트리에서 원하는 조건의 엘리먼트를 얻습니다.\n * @method ax5.util.findParentNode\n * @param {Element} _target - target element\n * @param {Object|Function} cond - 원하는 element를 찾을 조건\n * @returns {Element}\n * @example\n * ```\n * // cond 속성정의\n * var cond = {\n * \ttagname: {String} - 태그명 (ex. a, div, span..),\n * \tclazz: {String} - 클래스명\n * \t[, 그 외 찾고 싶은 attribute명들]\n * };\n * console.log(\n * console.log(\n * ax5.util.findParentNode(e.target, {tagname:\"a\", clazz:\"ax-menu-handel\", \"data-custom-attr\":\"attr_value\"})\n * );\n * // cond 함수로 처리하기\n * jQuery('#id').bind(\"click.app_expand\", function(e){\n * \tvar target = ax5.util.findParentNode(e.target, function(target){\n * \t\tif($(target).hasClass(\"aside\")){\n * \t\t\treturn true;\n * \t\t}\n * \t\telse{\n * \t\t\treturn true;\n * \t\t}\n * \t});\n * \t//client-aside\n * \tif(target.id !== \"client-aside\"){\n * \t\t// some action\n * \t}\n * });\n * ```\n */\n\n function findParentNode(_target, cond) {\n if (_target) {\n while (function () {\n var result = true;\n if (typeof cond === \"undefined\") {\n _target = _target.parentNode ? _target.parentNode : false;\n } else if (isFunction(cond)) {\n result = cond(_target);\n } else if (isObject(cond)) {\n for (var k in cond) {\n if (k === \"tagname\") {\n if (_target.tagName.toLocaleLowerCase() != cond[k]) {\n result = false;\n break;\n }\n } else if (k === \"clazz\" || k === \"class_name\") {\n if (\"className\" in _target) {\n var klasss = _target.className.split(reClassNameSplit);\n var hasClass = false;\n for (var a = 0; a < klasss.length; a++) {\n if (klasss[a] == cond[k]) {\n hasClass = true;\n break;\n }\n }\n result = hasClass;\n } else {\n result = false;\n break;\n }\n } else {\n // 그외 속성값들.\n if (_target.getAttribute) {\n if (_target.getAttribute(k) != cond[k]) {\n result = false;\n break;\n }\n } else {\n result = false;\n break;\n }\n }\n }\n }\n return !result;\n }()) {\n if (_target.parentNode && _target.parentNode.parentNode) {\n _target = _target.parentNode;\n } else {\n _target = false;\n break;\n }\n }\n }\n return _target;\n }\n\n /**\n * @method ax5.util.cssNumber\n * @param {String|Number} val\n * @returns {String}\n * @example\n * ```\n * console.log(ax5.util.cssNumber(\"100px\"))\n * console.log(ax5.util.cssNumber(\"100%\"))\n * console.log(ax5.util.cssNumber(\"100\"))\n * console.log(ax5.util.cssNumber(100))\n * console.log(ax5.util.cssNumber(\"!!100@#\"))\n * ```\n */\n function cssNumber(val) {\n var re = /\\D?(\\d+)([a-zA-Z%]*)/i,\n found = ('' + val).match(re),\n unit = found[2] || \"px\";\n\n return found[1] + unit;\n }\n\n /**\n * css string 및 object 를 넘기면 object 및 string 으로 변환되어 리턴됩니다.\n * @method ax5.util.css\n * @param {Object|String} val - CSS String or CSS Object\n * @returns {String|Object}\n * @example\n * ```\n * console.log(ax5.util.css({background: \"#ccc\", padding: \"50px\", width: \"100px\"}));\n * //\"background:#ccc;padding:50px;width:100px;\"\n * console.log(ax5.util.css('width:100px;padding: 50px; background: #ccc'));\n * // object {width: \"100px\", padding: \"50px\", background: \"#ccc\"}\n * ```\n */\n function css(val) {\n var returns;\n if (isObject(val)) {\n returns = '';\n for (var k in val) {\n returns += k + ':' + val[k] + ';';\n }\n return returns;\n } else if (isString(val)) {\n returns = {};\n var valSplited = val.split(/[ ]*;[ ]*/g);\n valSplited.forEach(function (v) {\n if ((v = v.trim()) !== \"\") {\n var vSplited = v.split(/[ ]*:[ ]*/g);\n returns[vSplited[0]] = vSplited[1];\n }\n });\n return returns;\n }\n }\n\n /**\n * @method ax5.util.stopEvent\n * @param {Event} e\n * @example\n * ```\n * ax5.util.stopEvent(e);\n * ```\n */\n function stopEvent(e) {\n // 이벤트 중지 구문\n if (!e) var e = window.event;\n\n //e.cancelBubble is supported by IE -\n // this will kill the bubbling process.\n e.cancelBubble = true;\n e.returnValue = false;\n\n //e.stopPropagation works only in Firefox.\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n\n return false;\n // 이벤트 중지 구문 끝\n }\n\n /**\n * @method ax5.util.selectRange\n * @param {Element} el\n * @param {Element} offset\n * @example\n * ```\n * ax5.util.selectRange($(\"#select-test-0\")); // selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"selectAll\"); //selectAll\n * ax5.util.selectRange($(\"#select-test-0\"), \"start\"); // focus on start\n * ax5.util.selectRange($(\"#select-test-0\"), \"end\"); // focus on end\n * ax5.util.selectRange($(\"#select-test-0\"), [1, 5]); // select 1~5\n * ```\n */\n var selectRange = function () {\n var processor = {\n 'textRange': {\n 'selectAll': function selectAll(el, range, offset) {},\n 'arr': function arr(el, range, offset) {\n range.moveStart(\"character\", offset[0]); // todo ie node select 체크필요\n range.collapse();\n range.moveEnd(\"character\", offset[1]);\n },\n 'start': function start(el, range, offset) {\n range.moveStart(\"character\", 0);\n range.collapse();\n },\n 'end': function end(el, range, offset) {\n range.moveStart(\"character\", range.text.length);\n range.collapse();\n }\n },\n 'range': {\n 'selectAll': function selectAll(el, range, offset) {\n range.selectNodeContents(el);\n },\n 'arr': function arr(el, range, offset) {\n if (isObject(offset[0])) {\n range.setStart(offset[0].node, offset[0].offset);\n range.setEnd(offset[1].node, offset[1].offset);\n } else {\n range.setStart(el.firstChild, offset[0]);\n range.setEnd(el.firstChild, offset[1]);\n }\n },\n 'start': function start(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(true);\n },\n 'end': function end(el, range, offset) {\n range.selectNodeContents(el);\n range.collapse(false);\n }\n }\n };\n return function (el, offset) {\n var range, rangeType, selection;\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n if (!el) return;\n\n // 레인지 타입 선택\n if (doc.body.createTextRange) {\n range = document.body.createTextRange();\n range.moveToElementText(el);\n rangeType = \"textRange\";\n } else if (window.getSelection) {\n selection = window.getSelection();\n range = document.createRange();\n rangeType = \"range\";\n }\n\n // range 적용\n if (typeof offset == \"undefined\") {\n processor[rangeType].selectAll.call(this, el, range, offset);\n } else if (isArray(offset)) {\n processor[rangeType].arr.call(this, el, range, offset);\n } else {\n for (var key in processor[rangeType]) {\n if (offset == key) {\n processor[rangeType][key].call(this, el, range, offset);\n break;\n }\n }\n }\n\n // 포커스 및 셀렉트\n if (doc.body.createTextRange) {\n range.select();\n el.focus();\n } else if (window.getSelection) {\n el.focus();\n selection.removeAllRanges();\n selection.addRange(range);\n }\n };\n }();\n\n /**\n * 지정한 시간을 지연시켜 함수를 실행합니다.\n * @method ax5.util.debounce\n * @param {Function} func\n * @param {Number} wait\n * @param {Object} options\n * @returns {debounced}\n * @example\n * ```js\n * var debounceFn = ax5.util.debounce(function( val ) { console.log(val); }, 300);\n * $(document.body).click(function(){\n * debounceFn(new Date());\n * });\n * ```\n */\n // https://github.com/lodash/lodash/blob/master/debounce.js\n function debounce(func, wait, options) {\n var lastArgs = void 0,\n lastThis = void 0,\n maxWait = void 0,\n result = void 0,\n timerId = void 0,\n lastCallTime = void 0;\n\n var lastInvokeTime = 0;\n var leading = false;\n var maxing = false;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs;\n var thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n var result = wait - timeSinceLastCall;\n\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime;\n var timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function debounced() {\n var time = Date.now();\n var isInvoking = shouldInvoke(time);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * @method ax5.util.throttle\n * @param func\n * @param wait\n * @param options\n * @return {debounced}\n */\n //https://github.com/lodash/lodash/blob/master/throttle.js\n function throttle(func, wait, options) {\n var leading = true;\n var trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * @method ax5.util.deepCopy\n * @param {Object} obj\n * @returns {Object}\n * @example\n * ```js\n * var obj = [\n * {name:\"A\", child:[{name:\"a-1\"}]},\n * {name:\"B\", child:[{name:\"b-1\"}], callBack: function(){ console.log('callBack'); }}\n * ];\n * var copiedObj = ax5.util.deepCopy(obj)\n * ```\n */\n function deepCopy(obj) {\n var r, l;\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object') {\n if (U.isArray(obj)) {\n l = obj.length;\n r = new Array(l);\n for (var i = 0; i < l; i++) {\n r[i] = deepCopy(obj[i]);\n }\n return r;\n } else {\n return jQuery.extend({}, obj);\n }\n }\n return obj;\n }\n\n /**\n * HTML 문자열을 escape 처리합니다.\n * \"&lt;\" represents the < sign.\n * \"&gt;\" represents the > sign.\n * \"&amp;\" represents the & sign.\n * \"&quot; represents the \" mark.\n * [Character entity references](https://www.w3.org/TR/html401/charset.html#h-5.3)\n * @method ax5.util.escapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.escapeHtml('HTML <span>string</span> & \"escape\"')\n * //\"HTML &lt;span&gt;string&lt;/span&gt; &amp; &quot;escape&quot;\"\n * ```\n */\n function escapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/[\\<\\>\\&\\\"]/gm, function (match) {\n switch (match) {\n case \"<\":\n return \"&lt;\";\n case \">\":\n return \"&gt;\";\n case \"&\":\n return \"&amp;\";\n case \"\\\"\":\n return \"&quot;\";\n default:\n return match;\n }\n });\n }\n\n /**\n * HTML 문자열을 unescape 처리합니다.\n * escapeHtml를 참고하세요.\n * @method ax5.util.unescapeHtml\n * @param {String} s\n * @returns {string}\n * @example\n * ```\n * ax5.util.unescapeHtml('HTML &lt;span&gt;string&lt;/span&gt; &amp; &quot;escape&quot;')\n * //\"HTML <span>string</span> & \"escape\"\"\n * ```\n */\n function unescapeHtml(s) {\n if (_toString.call(s) != \"[object String]\") return s;\n if (!s) return \"\";\n return s.replace(/(&lt;)|(&gt;)|(&amp;)|(&quot;)/gm, function (match) {\n switch (match) {\n case \"&lt;\":\n return \"<\";\n case \"&gt;\":\n return \">\";\n case \"&amp;\":\n return \"&\";\n case \"&quot;\":\n return \"\\\"\";\n default:\n return match;\n }\n });\n }\n\n /**\n * @method ax5.util.string\n * @param {String} tmpl\n * @param {*} args\n * @return {ax5string}\n * @example\n * ```js\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format(\"ASP\", \"ASP.NET\");\n * ax5.util.string(\"{0} is dead, but {1} is alive! {0} {2}\").format([\"ASP\", \"ASP.NET\"]);\n * ax5.util.stinrg(\"{0} counts\").format(100);\n * ```\n */\n function string(_string) {\n return new function (_string) {\n this.value = _string;\n this.toString = function () {\n return this.value;\n };\n /**\n * @method ax5.util.string.format\n * @returns {*}\n */\n this.format = function () {\n var args = [];\n for (var i = 0, l = arguments.length; i < l; i++) {\n args = args.concat(arguments[i]);\n }\n return this.value.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n /**\n * @method ax5.util.string.escape\n * @returns {*}\n */\n this.escape = function () {\n return escapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.unescape\n * @returns {*}\n */\n this.unescape = function () {\n return unescapeHtml(this.value);\n };\n /**\n * @method ax5.util.string.encode\n * @returns {*}\n */\n this.encode = function () {\n return encode(this.value);\n };\n /**\n * @method ax5.util.string.decode\n * @returns {*}\n */\n this.decode = function () {\n return decode(this.value);\n };\n /**\n * @method ax5.util.string.left\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.left = function (_pos) {\n return left(this.value, _pos);\n };\n /**\n * @method ax5.util.string.right\n * @param {String|Number} pos - 찾을 문자열 또는 포지션\n * @returns {*}\n */\n this.right = function (_pos) {\n return right(this.value, _pos);\n };\n /**\n * @method ax5.util.string.camelCase\n * @returns {*}\n */\n this.camelCase = function () {\n return camelCase(this.value);\n };\n /**\n * @method ax5.util.string.snakeCase\n * @returns {*}\n */\n this.snakeCase = function () {\n return snakeCase(this.value);\n };\n }(_string);\n }\n\n /**\n * @method ax5.util.color\n * @param _hexColor\n * @return {ax5color}\n * @example\n * ```js\n * ax5.util.color(\"#ff3300\").lighten(10).getHexValue()\n * console.log(ax5.util.color(\"#ff3300\").darken(10).getHexValue());\n * ```\n */\n function color(_hexColor) {\n\n var matchers = function () {\n\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n var convertObject = function convertObject(_color) {\n var match = void 0;\n if (match = matchers.rgb.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if (match = matchers.rgba.exec(_color)) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if (match = matchers.hsl.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if (match = matchers.hsla.exec(_color)) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if (match = matchers.hsv.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if (match = matchers.hsva.exec(_color)) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if (match = matchers.hex8.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: parseInt(match[4] / 255, 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(_color)) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n format: \"hex\"\n };\n }\n if (match = matchers.hex4.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n a: parseInt(match[4] + '' + match[4], 16),\n format: \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(_color)) {\n return {\n r: parseInt(match[1] + '' + match[1], 16),\n g: parseInt(match[2] + '' + match[2], 16),\n b: parseInt(match[3] + '' + match[3], 16),\n format: \"hex\"\n };\n }\n\n return false;\n };\n\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n }\n\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n }\n\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n\n return n;\n }\n\n function convertTo255(n) {\n return ax5.util.number(Math.min(255, Math.max(n, 0)), { 'round': 2 });\n }\n\n function convertToHex(n) {\n return setDigit(Math.round(n).toString(16), 2);\n }\n\n function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n }\n\n function hslToRgb(h, s, l) {\n var r = void 0,\n g = void 0,\n b = void 0;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n }\n\n return new function (_color) {\n this._originalValue = _color;\n _color = convertObject(_color);\n this.r = _color.r;\n this.g = _color.g;\n this.b = _color.b;\n this.a = _color.a || 1;\n this._format = _color.format;\n this._hex = convertToHex(this.r) + convertToHex(this.g) + convertToHex(this.b);\n\n this.getHexValue = function () {\n return this._hex;\n };\n\n this.lighten = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l += amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.darken = function (amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = rgbToHsl(this.r, this.g, this.b),\n rgb = {};\n\n hsl.l -= amount / 100;\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n\n rgb = hslToRgb(hsl.h, convertToPercentage(hsl.s), convertToPercentage(hsl.l));\n\n return color('rgba(' + convertTo255(rgb.r) + ', ' + convertTo255(rgb.g) + ', ' + convertTo255(rgb.b) + ', ' + this.a + ')');\n };\n\n this.getBrightness = function () {\n return (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n };\n\n this.isDark = function () {\n return this.getBrightness() < 128;\n };\n\n this.isLight = function () {\n return !this.isDark();\n };\n\n this.getHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n hsl.l = Math.min(1, Math.max(0, hsl.l));\n hsl.h = hsl.h * 360;\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l\n };\n };\n }(_hexColor);\n }\n\n return {\n alert: alert,\n each: each,\n map: map,\n search: search,\n reduce: reduce,\n reduceRight: reduceRight,\n filter: filter,\n sum: sum,\n avg: avg,\n toJson: toJson,\n parseJson: parseJson,\n first: first,\n last: last,\n deepCopy: deepCopy,\n\n left: left,\n right: right,\n getType: getType,\n isWindow: isWindow,\n isElement: isElement,\n isObject: isObject,\n isArray: isArray,\n isFunction: isFunction,\n isString: isString,\n isNumber: isNumber,\n isNodelist: isNodelist,\n isUndefined: isUndefined,\n isNothing: isNothing,\n setCookie: setCookie,\n getCookie: getCookie,\n camelCase: camelCase,\n snakeCase: snakeCase,\n number: number,\n toArray: toArray,\n merge: merge,\n param: param,\n error: error,\n date: date,\n dday: dday,\n daysOfMonth: daysOfMonth,\n weeksOfMonth: weeksOfMonth,\n setDigit: setDigit,\n times: times,\n findParentNode: findParentNode,\n cssNumber: cssNumber,\n css: css,\n isDate: isDate,\n isDateFormat: isDateFormat,\n stopEvent: stopEvent,\n selectRange: selectRange,\n debounce: debounce,\n throttle: throttle,\n escapeHtml: escapeHtml,\n unescapeHtml: unescapeHtml,\n\n string: string,\n color: color\n };\n }();\n\n if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n module.exports = ax5;\n } else {\n root.ax5 = function () {\n return ax5;\n }(); // ax5.ui에 연결\n }\n}).call(typeof window !== \"undefined\" ? window : undefined);\n\nax5.def = {};\nax5.info.errorMsg[\"ax5dialog\"] = {\n \"501\": \"Duplicate call error\"\n};\n\nax5.info.errorMsg[\"ax5picker\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find content key\"\n};\n\nax5.info.errorMsg[\"single-uploader\"] = {\n \"460\": \"There are no files to be uploaded.\",\n \"461\": \"There is no uploaded files.\"\n};\n\nax5.info.errorMsg[\"ax5calendar\"] = {\n \"401\": \"Can not find target element\"\n};\n\nax5.info.errorMsg[\"ax5formatter\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find pattern\"\n};\n\nax5.info.errorMsg[\"ax5menu\"] = {\n \"501\": \"Can not find menu item\"\n};\n\nax5.info.errorMsg[\"ax5select\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n\nax5.info.errorMsg[\"ax5combobox\"] = {\n \"401\": \"Can not find target element\",\n \"402\": \"Can not find boundID\",\n \"501\": \"Can not find option\"\n};\n// 필수 Ployfill 확장 구문\n(function () {\n 'use strict';\n\n var root = this,\n re_trim = /^\\s*|\\s*$/g;\n\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n if (!Object.keys) {\n Object.keys = function () {\n var hwp = Object.prototype.hasOwnProperty,\n hdeb = !{ toString: null }.propertyIsEnumerable('toString'),\n de = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n del = de.length;\n\n return function (obj) {\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' && (typeof obj !== 'function' || obj === null)) throw new TypeError('type err');\n var r = [],\n prop,\n i;\n for (prop in obj) {\n if (hwp.call(obj, prop)) r.push(prop);\n }if (hdeb) {\n for (i = 0; i < del; i++) {\n if (hwp.call(obj, de[i])) r.push(de[i]);\n }\n }\n return r;\n };\n }();\n }\n\n // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function (fun /*, thisp */) {\n if (this === void 0 || this === null) {\n throw TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof fun !== \"function\") {\n throw TypeError();\n }\n var thisp = arguments[1],\n i;\n for (i = 0; i < len; i++) {\n if (i in t) {\n fun.call(thisp, t[i], i, t);\n }\n }\n };\n }\n\n // ES5 15.3.4.5 Function.prototype.bind ( thisArg [, arg1 [, arg2, ... ]] )\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n if (!Function.prototype.bind) {\n Function.prototype.bind = function (o) {\n if (typeof this !== 'function') {\n throw TypeError(\"function\");\n }\n var slice = [].slice,\n args = slice.call(arguments, 1),\n self = this,\n bound = function bound() {\n return self.apply(this instanceof nop ? this : o, args.concat(slice.call(arguments)));\n };\n\n function nop() {}\n\n nop.prototype = self.prototype;\n bound.prototype = new nop();\n return bound;\n };\n }\n\n /*global document */\n /**\n * define document.querySelector & document.querySelectorAll for IE7\n *\n * A not very fast but small hack. The approach is taken from\n * http://weblogs.asp.net/bleroy/archive/2009/08/31/queryselectorall-on-old-ie-versions-something-that-doesn-t-work.aspx\n *\n */\n (function () {\n if (document.querySelectorAll || document.querySelector) {\n return;\n }\n if (!document.createStyleSheet) return;\n var style = document.createStyleSheet(),\n select = function select(selector, maxCount) {\n var all = document.all,\n l = all.length,\n i,\n resultSet = [];\n\n style.addRule(selector, \"foo:bar\");\n for (i = 0; i < l; i += 1) {\n if (all[i].currentStyle.foo === \"bar\") {\n resultSet.push(all[i]);\n if (resultSet.length > maxCount) {\n break;\n }\n }\n }\n style.removeRule(0);\n return resultSet;\n };\n\n document.querySelectorAll = function (selector) {\n return select(selector, Infinity);\n };\n document.querySelector = function (selector) {\n return select(selector, 1)[0] || null;\n };\n })();\n\n if (!String.prototype.trim) {\n (function () {\n String.prototype.trim = function () {\n return this.replace(re_trim, '');\n };\n })();\n }\n\n if (!window.JSON) {\n window.JSON = {\n parse: function parse(sJSON) {\n return new Function('', 'return ' + sJSON)();\n },\n stringify: function () {\n var r = /[\"]/g,\n _f;\n return _f = function f(vContent) {\n var result, i, j;\n switch (result = typeof vContent === 'undefined' ? 'undefined' : _typeof(vContent)) {\n case 'string':\n return '\"' + vContent.replace(r, '\\\\\"') + '\"';\n case 'number':\n case 'boolean':\n return vContent.toString();\n case 'undefined':\n return 'undefined';\n case 'function':\n return '\"\"';\n case 'object':\n if (!vContent) return 'null';\n result = '';\n if (vContent.splice) {\n for (i = 0, j = vContent.length; i < j; i++) {\n result += ',' + _f(vContent[i]);\n }return '[' + result.substr(1) + ']';\n } else {\n for (i in vContent) {\n if (vContent.hasOwnProperty(i) && vContent[i] !== undefined && typeof vContent[i] != 'function') result += ',\"' + i + '\":' + _f(vContent[i]);\n }return '{' + result.substr(1) + '}';\n }\n }\n };\n }()\n };\n }\n\n // splice ie8 <= polyfill\n (function () {\n if (!document.documentMode || document.documentMode >= 9) return false;\n var _splice = Array.prototype.splice;\n Array.prototype.splice = function () {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[1] === \"undefined\") args[1] = this.length - args[0];\n return _splice.apply(this, args);\n };\n })();\n\n /**\n * Shim for \"fixing\" IE's lack of support (IE < 9) for applying slice\n * on host objects like NamedNodeMap, NodeList, and HTMLCollection\n * (technically, since host objects have been implementation-dependent,\n * at least before ES6, IE hasn't needed to work this way).\n * Also works on strings, fixes IE < 9 to allow an explicit undefined\n * for the 2nd argument (as in Firefox), and prevents errors when\n * called on other DOM objects.\n */\n (function () {\n 'use strict';\n\n var _slice = Array.prototype.slice;\n\n try {\n // Can't be used with DOM elements in IE < 9\n _slice.call(document.documentElement);\n } catch (e) {\n // Fails in IE < 9\n // This will work for genuine arrays, array-like objects,\n // NamedNodeMap (attributes, entities, notations),\n // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),\n // and will not fail on other DOM objects (as do DOM elements in IE < 9)\n Array.prototype.slice = function (begin, end) {\n // IE < 9 gets unhappy with an undefined end argument\n end = typeof end !== 'undefined' ? end : this.length;\n\n // For native Array objects, we use the native slice function\n if (Object.prototype.toString.call(this) === '[object Array]') {\n return _slice.call(this, begin, end);\n }\n\n // For array like object we handle it ourselves.\n var i,\n cloned = [],\n size,\n len = this.length;\n\n // Handle negative value for \"begin\"\n var start = begin || 0;\n start = start >= 0 ? start : Math.max(0, len + start);\n\n // Handle negative value for \"end\"\n var upTo = typeof end == 'number' ? Math.min(end, len) : len;\n if (end < 0) {\n upTo = len + end;\n }\n\n // Actual expected size of the slice\n size = upTo - start;\n\n if (size > 0) {\n cloned = new Array(size);\n if (this.charAt) {\n for (i = 0; i < size; i++) {\n cloned[i] = this.charAt(start + i);\n }\n } else {\n for (i = 0; i < size; i++) {\n cloned[i] = this[start + i];\n }\n }\n }\n\n return cloned;\n };\n }\n })();\n\n // Console-polyfill. MIT license. https://github.com/paulmillr/console-polyfill\n // Make it safe to do console.log() always.\n (function (con) {\n var prop, method;\n var empty = {};\n var dummy = function dummy() {};\n var properties = 'memory'.split(',');\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) {\n con[prop] = con[prop] || empty;\n }while (method = methods.pop()) {\n con[method] = con[method] || dummy;\n }\n })(window.console || {}); // Using `this` for web workers.\n\n\n // Modernizr style test\n if (!(window.webkitMatchMedia || window.mozMatchMedia || window.oMatchMedia || window.msMatchMedia || window.matchMedia)) {\n var root = document.getElementsByTagName('html')[0];\n root.className += ' no-matchmedia';\n }\n\n /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */\n window.matchMedia || (window.matchMedia = function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n\n var styleMedia = window.styleMedia || window.media;\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n script.parentNode.insertBefore(style, script);\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function matchMedium(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function (media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n }());\n\n /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n (function () {\n // Bail out for browsers that have addListener support\n if (window.matchMedia && window.matchMedia('all').addListener) {\n return false;\n }\n\n var localMatchMedia = window.matchMedia,\n hasMediaQueries = localMatchMedia('only all').matches,\n isListening = false,\n timeoutID = 0,\n // setTimeout for debouncing 'handleChange'\n queries = [],\n // Contains each 'mql' and associated 'listeners' if 'addListener' is used\n handleChange = function handleChange(evt) {\n // Debounce\n clearTimeout(timeoutID);\n\n timeoutID = setTimeout(function () {\n for (var i = 0, il = queries.length; i < il; i++) {\n var mql = queries[i].mql,\n listeners = queries[i].listeners || [],\n matches = localMatchMedia(mql.media).matches;\n\n // Update mql.matches value and call listeners\n // Fire listeners only if transitioning to or from matched state\n if (matches !== mql.matches) {\n mql.matches = matches;\n\n for (var j = 0, jl = listeners.length; j < jl; j++) {\n listeners[j].call(window, mql);\n }\n }\n }\n }, 30);\n };\n\n window.matchMedia = function (media) {\n var mql = localMatchMedia(media),\n listeners = [],\n index = 0;\n\n mql.addListener = function (listener) {\n // Changes would not occur to css media type so return now (Affects IE <= 8)\n if (!hasMediaQueries) {\n return;\n }\n\n // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)\n // There should only ever be 1 resize listener running for performance\n if (!isListening) {\n isListening = true;\n window.addEventListener('resize', handleChange, true);\n }\n\n // Push object only if it has not been pushed already\n if (index === 0) {\n index = queries.push({\n mql: mql,\n listeners: listeners\n });\n }\n\n listeners.push(listener);\n };\n\n mql.removeListener = function (listener) {\n for (var i = 0, il = listeners.length; i < il; i++) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n }\n }\n };\n\n return mql;\n };\n })();\n\n // extend innerWidth ..\n var html = document.getElementsByTagName('html')[0];\n var body = document.getElementsByTagName('body')[0];\n\n /*\n if (!window.innerWidth) window.innerWidth = html.clientWidth;\n if (!window.innerHeight) window.innerHeight = html.clientHeight;\n if (!window.scrollX) window.scrollX = window.pageXOffset || html.scrollLeft;\n if (!window.scrollY) window.scrollY = window.pageYOffset || html.scrollTop;\n */\n}).call(window);\n/**\n * Refer to this by {@link ax5}.\n * @namespace ax5.ui\n */\n\n/**\n * @class ax5.ui.root\n * @classdesc ax5 ui class\n * @author tom@axisj.com\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * ```\n */\nax5.ui = function () {\n\n function axUi() {\n this.config = {};\n this.name = \"root\";\n\n /**\n * 클래스의 속성 정의 메소드 속성 확장후에 내부에 init 함수를 호출합니다.\n * @method ax5.ui.root.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Boolean} [callInit=true] - init 함수 호출 여부\n * @returns {ax5.ui.axUi}\n * @example\n * ```\n * var myui = new ax5.ui.root();\n * myui.setConfig({\n * \tid:\"abcd\"\n * });\n * ```\n */\n this.setConfig = function (cfg, callInit) {\n jQuery.extend(true, this.config, cfg);\n if (typeof callInit == \"undefined\" || callInit === true) {\n this.init();\n }\n return this;\n };\n this.init = function () {\n console.log(this.config);\n };\n\n this.bindWindowResize = function (callBack) {\n setTimeout(function () {\n jQuery(window).resize(function () {\n if (this.bindWindowResize__) clearTimeout(this.bindWindowResize__);\n this.bindWindowResize__ = setTimeout(function () {\n callBack.call(this);\n }.bind(this), 10);\n }.bind(this));\n }.bind(this), 100);\n };\n\n this.stopEvent = function (e) {\n if (e.preventDefault) e.preventDefault();\n if (e.stopPropagation) e.stopPropagation();\n e.cancelBubble = true;\n return false;\n };\n\n this.toString = function () {\n return this.name + '@' + this.version;\n };\n\n // instance init\n this.main = function () {}.apply(this, arguments);\n }\n\n /**\n * @method ax5.ui.addClass\n * @param {Object} config\n * @param {String} config.className - name of Class\n * @param {Object} [config.classStore=ax5.ui] - 클래스가 저장될 경로\n * @param {Function} [config.superClass=ax5.ui.root]\n * @param {Function} cls - Class Function\n */\n function addClass(config, cls) {\n if (!config || !config.className) throw 'invalid call';\n var classStore = config.classStore ? config.classStore : ax5.ui;\n if (!classStore) throw 'invalid classStore';\n\n // make ui definition variable\n ax5.def[config.className] = {\n version: ax5.info.version\n };\n\n var factory = function factory(cls, arg) {\n switch (arg.length) {\n case 0:\n return new cls();\n break;\n case 1:\n return new cls(arg[0]);\n break;\n case 2:\n return new cls(arg[0], arg[1]);\n break;\n case 3:\n return new cls(arg[0], arg[1], arg[2]);\n break;\n }\n };\n var initInstance = function initInstance(name, version, instance) {\n instance.name = name;\n instance.version = version;\n instance.instanceId = ax5.getGuid();\n return instance;\n };\n var initPrototype = function initPrototype(cls) {\n var superClass = config.superClass ? config.superClass : ax5.ui.root;\n if (!ax5.util.isFunction(superClass)) throw 'invalid superClass';\n superClass.call(this); // 부모호출\n cls.prototype = new superClass(); // 상속\n };\n var wrapper = function wrapper() {\n if (!this || !(this instanceof wrapper)) throw 'invalid call';\n var instance = factory(cls, arguments);\n return initInstance(config.className, config.version || \"\", instance);\n };\n initPrototype.call(this, cls);\n classStore[config.className] = wrapper;\n }\n\n return {\n root: axUi,\n addClass: addClass\n };\n}();\n\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n * https://github.com/thomasJang/mustache.js -- imporove some variables\n */\n\n(function defineMustache(global, factory) {\n\n factory(global.mustache = {});\n})(window.ax5, function mustacheFactory(mustache) {\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill(object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction(object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr(obj) {\n return isArray(obj) ? 'array' : typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty(obj, propName) {\n return obj != null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && propName in obj;\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;', '/': '&#x2F;'\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate(template, tags) {\n if (!template) return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length) {\n delete tokens[spaces.pop()];\n }\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === 'string') tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push(['text', chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe)) break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe)) throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection) throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection) throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos() {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0) return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re),\n match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context(view, parentContext) {\n this.view = view;\n this.cache = {\n '.': this.view,\n '@each': function each() {\n var returns = [];\n for (var k in this) {\n returns.push({ '@key': k, '@value': this[k] });\n }\n return returns;\n }\n };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup(name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this,\n names,\n index,\n lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1) lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value)) value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer() {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache() {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse(template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null) tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render(template, view, partials) {\n var tokens = this.parse(template);\n var context = view instanceof Context ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate) {\n var buffer = '';\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);else if (symbol === '&') value = this.unescapedValue(token, context);else if (symbol === 'name') value = this.escapedValue(token, context);else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined) buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) {\n var self = this;\n var buffer = '';\n\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n if (value[j]) {\n if (_typeof(value[j]) === 'object') {\n value[j]['@i'] = j;\n value[j]['@first'] = j === 0;\n }\n\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);\n }\n }\n } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string') throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null) buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || isArray(value) && value.length === 0) return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial(token, context, partials) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n\n mustache.name = 'mustache.js';\n mustache.version = '2.1.3';\n mustache.tags = ['{{', '}}'];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render(template, view, partials) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' + 'but \"' + typeStr(template) + '\" was given as the first ' + 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html(template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n});","\"use strict\";\n\n// ax5.ui.formatter\n(function () {\n var UI = ax5.ui;\n var U = ax5.util;\n var FORMATTER = void 0;\n\n UI.addClass({\n className: \"formatter\"\n }, function () {\n var TODAY = new Date();\n var setSelectionRange = function setSelectionRange(input, pos) {\n if (typeof pos == \"undefined\") {\n pos = input.value.length;\n }\n if (input.setSelectionRange) {\n input.focus();\n input.setSelectionRange(pos, pos);\n } else if (input.createTextRange) {\n var range = input.createTextRange();\n range.collapse(true);\n range.moveEnd('character', pos);\n range.moveStart('character', pos);\n range.select();\n } else if (input.selectionStart) {\n input.focus();\n input.selectionStart = pos;\n input.selectionEnd = pos;\n }\n };\n\n /**\n * @class ax5formatter\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * $('#idInputTime').attr('data-ax5formatter', 'time').ax5formatter();\n * $('#idInputMoney').attr('data-ax5formatter', 'money').ax5formatter();\n * $('#idInputPhone').attr('data-ax5formatter', 'phone').ax5formatter();\n * $('#idInputDate').attr('data-ax5formatter', 'date').ax5formatter();\n *\n * $('#ax5formatter-custom').ax5formatter({\n * pattern: \"custom\",\n * getEnterableKeyCodes: function(){\n * return {\n * '65':'a',\n * '66':'b',\n * '67':'c',\n * '68':'d',\n * '69':'e',\n * '70':'f'\n * };\n * },\n * getPatternValue: function(obj){\n * return obj.value.replace(/./g, \"*\");\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n animateTime: 250\n };\n\n this.queue = [];\n this.openTimer = null;\n this.closeTimer = null;\n\n cfg = this.config;\n\n var formatterEvent = {\n 'focus': function focus(opts, optIdx, e) {\n if (!opts.$input.data(\"__originValue__\")) opts.$input.data(\"__originValue__\", opts.$input.val());\n },\n /* 키 다운 이벤트에서 입력할 수 없는 키 입력을 방어 */\n 'keydown': function keydown(opts, optIdx, e) {\n var isStop = false;\n if (!opts.enterableKeyCodes) {} else if (e.which && opts.enterableKeyCodes[e.which]) {} else if (!e.metaKey && !e.ctrlKey && !e.shiftKey) {\n //console.log(e.which, opts.enterableKeyCodes);\n isStop = true;\n }\n if (isStop) ax5.util.stopEvent(e);\n },\n /* 키 업 이벤트에서 패턴을 적용 */\n 'keyup': function keyup(opts, optIdx, e) {\n var elem = opts.$input.get(0),\n elemFocusPosition,\n beforeValue,\n newValue,\n selection,\n selectionLength;\n\n if ('selectionStart' in elem) {\n // Standard-compliant browsers\n elemFocusPosition = elem.selectionStart;\n } else if (document.selection) {\n // IE\n //elem.focus();\n selection = document.selection.createRange();\n selectionLength = document.selection.createRange().text.length;\n selection.moveStart('character', -elem.value.length);\n elemFocusPosition = selection.text.length - selectionLength;\n }\n\n beforeValue = elem.value;\n if (opts.pattern in FORMATTER.formatter) {\n newValue = FORMATTER.formatter[opts.pattern].getPatternValue.call(this, opts, optIdx, e, elem.value);\n } else {\n newValue = beforeValue;\n }\n\n if (newValue != beforeValue) {\n opts.$input.val(newValue).trigger(\"change\");\n setSelectionRange(elem, elemFocusPosition + newValue.length - beforeValue.length);\n }\n },\n 'blur': function blur(opts, optIdx, e, _force) {\n var elem = opts.$input.get(0),\n beforeValue,\n newValue;\n\n opts.$input.removeData(\"__originValue__\");\n\n beforeValue = elem.value;\n if (opts.pattern in FORMATTER.formatter) {\n newValue = FORMATTER.formatter[opts.pattern].getPatternValue.call(this, opts, optIdx, e, elem.value, 'blur');\n } else {\n newValue = beforeValue;\n }\n\n if (_force) {\n opts.$input.val(newValue);\n } else {\n if (newValue != beforeValue) {\n opts.$input.val(newValue).trigger(\"change\");\n }\n }\n }\n };\n\n var bindFormatterTarget = function bindFormatterTarget(opts, optIdx) {\n\n if (!opts.pattern) {\n if (opts.$target.get(0).tagName == \"INPUT\") {\n opts.pattern = opts.$target.attr('data-ax5formatter');\n } else {\n opts.pattern = opts.$target.find('input[type=\"text\"]').attr('data-ax5formatter');\n }\n if (!opts.pattern) {\n console.log(ax5.info.getError(\"ax5formatter\", \"501\", \"bind\"));\n console.log(opts.target);\n return this;\n }\n }\n\n var re = /[^\\(^\\))]+/gi,\n matched = opts.pattern.match(re);\n\n opts.pattern = matched[0];\n opts.patternArgument = matched[1] || \"\";\n\n // 함수타입\n if (opts.pattern in FORMATTER.formatter) {\n opts.enterableKeyCodes = FORMATTER.formatter[opts.pattern].getEnterableKeyCodes.call(this, opts, optIdx);\n }\n\n opts.$input.unbind('focus.ax5formatter').bind('focus.ax5formatter', formatterEvent.focus.bind(this, this.queue[optIdx], optIdx));\n\n opts.$input.unbind('keydown.ax5formatter').bind('keydown.ax5formatter', formatterEvent.keydown.bind(this, this.queue[optIdx], optIdx));\n\n opts.$input.unbind('keyup.ax5formatter').bind('keyup.ax5formatter', formatterEvent.keyup.bind(this, this.queue[optIdx], optIdx));\n\n opts.$input.unbind('blur.ax5formatter').bind('blur.ax5formatter', formatterEvent.blur.bind(this, this.queue[optIdx], optIdx));\n\n formatterEvent.blur.call(this, this.queue[optIdx], optIdx);\n\n return this;\n };\n\n var getQueIdx = function getQueIdx(boundID) {\n if (!U.isString(boundID)) {\n boundID = jQuery(boundID).data(\"data-formatter\");\n }\n /*\n if (!U.isString(boundID)) {\n console.log(ax5.info.getError(\"ax5formatter\", \"402\", \"getQueIdx\"));\n return;\n }\n */\n return U.search(this.queue, function () {\n return this.id == boundID;\n });\n };\n\n /**\n * Preferences of formatter UI\n * @method ax5formatter.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5.ui.formatter}\n * @example\n * ```\n * ```\n */\n this.init = function () {};\n\n this.bind = function (opts) {\n var formatterConfig = {},\n optIdx = void 0;\n\n jQuery.extend(true, formatterConfig, cfg);\n if (opts) jQuery.extend(true, formatterConfig, opts);\n opts = formatterConfig;\n\n if (!opts.target) {\n console.log(ax5.info.getError(\"ax5formatter\", \"401\", \"bind\"));\n return this;\n }\n opts.$target = jQuery(opts.target);\n\n if (opts.$target.get(0).tagName == \"INPUT\") {\n opts.$input = opts.$target;\n } else {\n opts.$input = opts.$target.find('input[type=\"text\"]');\n if (opts.$input.length > 1) {\n opts.$input.each(function () {\n opts.target = this;\n self.bind(opts);\n });\n return this;\n }\n }\n\n opts.$input = opts.$target.get(0).tagName == \"INPUT\" ? opts.$target : opts.$target.find('input[type=\"text\"]');\n if (!opts.id) opts.id = opts.$input.data(\"ax5-formatter\");\n\n if (!opts.id) {\n opts.id = 'ax5-formatter-' + ax5.getGuid();\n opts.$input.data(\"ax5-formatter\", opts.id);\n }\n optIdx = U.search(this.queue, function () {\n return this.id == opts.id;\n });\n\n if (optIdx === -1) {\n this.queue.push(opts);\n bindFormatterTarget.call(this, this.queue[this.queue.length - 1], this.queue.length - 1);\n } else {\n this.queue[optIdx] = opts;\n bindFormatterTarget.call(this, this.queue[optIdx], optIdx);\n }\n\n return this;\n };\n\n /**\n * formatter value 를 다시 적용합니다.\n * @method ax5formatter.formatting\n * @returns {ax5formatter}\n * @example\n * ```js\n * $('[data-ax5formatter=\"time\"]').ax5formatter(\"formatting\"); // 하나만\n * $('[data-ax5formatter]').ax5formatter(\"formatting\"); // 모두\n * ```\n */\n this.formatting = function (boundID) {\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID);\n if (queIdx === -1) {\n var i = this.queue.length;\n while (i--) {\n formatterEvent.blur.call(this, this.queue[i], i, null, true);\n }\n } else {\n formatterEvent.blur.call(this, this.queue[queIdx], queIdx, null, true);\n }\n return this;\n };\n\n this.unbind = function () {\n // 구현해야함.\n };\n\n // 클래스 생성자\n this.main = function () {\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n FORMATTER = ax5.ui.formatter;\n})();\n// ax5.ui.formatter.formatter\n(function () {\n\n var FORMATTER = ax5.ui.formatter;\n var U = ax5.util;\n var TODAY = new Date();\n\n var ctrlKeys = {\n \"18\": \"KEY_ALT\",\n \"8\": \"KEY_BACKSPACE\",\n \"17\": \"KEY_CONTROL\",\n \"46\": \"KEY_DELETE\",\n \"40\": \"KEY_DOWN\",\n \"35\": \"KEY_END\",\n \"187\": \"KEY_EQUAL\",\n \"27\": \"KEY_ESC\",\n \"36\": \"KEY_HOME\",\n \"45\": \"KEY_INSERT\",\n \"37\": \"KEY_LEFT\",\n \"189\": \"KEY_MINUS\",\n \"34\": \"KEY_PAGEDOWN\",\n \"33\": \"KEY_PAGEUP\",\n // \"190\": \"KEY_PERIOD\",\n \"13\": \"KEY_RETURN\",\n \"39\": \"KEY_RIGHT\",\n \"16\": \"KEY_SHIFT\",\n // \"32\": \"KEY_SPACE\",\n \"9\": \"KEY_TAB\",\n \"38\": \"KEY_UP\",\n \"91\": \"KEY_WINDOW\"\n //\"107\" : \"NUMPAD_ADD\",\n //\"194\" : \"NUMPAD_COMMA\",\n //\"110\" : \"NUMPAD_DECIMAL\",\n //\"111\" : \"NUMPAD_DIVIDE\",\n //\"12\" : \"NUMPAD_EQUAL\",\n //\"106\" : \"NUMPAD_MULTIPLY\",\n //\"109\" : \"NUMPAD_SUBTRACT\"\n };\n var numKeys = {\n '48': 1, '49': 1, '50': 1, '51': 1, '52': 1, '53': 1, '54': 1, '55': 1, '56': 1, '57': 1,\n '96': 1, '97': 1, '98': 1, '99': 1, '100': 1, '101': 1, '102': 1, '103': 1, '104': 1, '105': 1\n };\n var pattern_money = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '188': ','\n };\n if (_opts.patternArgument == \"int\") {\n // 소수점 입력 안됨\n } else {\n enterableKeyCodes['190'] = \".\"; // 소수점 입력 허용\n }\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/[^0-9^\\.^\\-]/g, \"\");\n var regExpPattern = new RegExp('([0-9])([0-9][0-9][0-9][,.])'),\n arrNumber = val.split('.'),\n returnValue;\n\n arrNumber[0] += '.';\n\n do {\n arrNumber[0] = arrNumber[0].replace(regExpPattern, '$1,$2');\n } while (regExpPattern.test(arrNumber[0]));\n\n if (arrNumber.length > 1) {\n if (U.isNumber(_opts.maxRound)) {\n returnValue = arrNumber[0] + U.left(arrNumber[1], _opts.maxRound);\n } else {\n returnValue = arrNumber.join('');\n }\n } else {\n returnValue = arrNumber[0].split('.')[0];\n }\n\n return returnValue;\n }\n };\n\n var pattern_number = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '190': '.',\n '110': '.'\n\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/[^0-9^\\.^\\-]/g, \"\");\n var arrNumber = val.split('.'),\n returnValue;\n\n arrNumber[0] += \".\";\n\n if (arrNumber.length > 1) {\n if (U.isNumber(_opts.maxRound)) {\n returnValue = arrNumber[0] + U.left(arrNumber[1], _opts.maxRound);\n } else {\n returnValue = arrNumber.join('');\n }\n } else {\n returnValue = arrNumber[0].split('.')[0];\n }\n\n return returnValue;\n }\n };\n\n var pattern_date = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-', '191': '/'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n if (val == \"\") return val;\n var regExpPattern = /^([0-9]{4})\\-?([0-9]{1,2})?\\-?([0-9]{1,2})?.*$/;\n\n if (_opts.patternArgument == \"time\") {\n regExpPattern = /^([0-9]{4})\\-?([0-9]{1,2})?\\-?([0-9]{1,2})? ?([0-9]{1,2})?:?([0-9]{1,2})?:?([0-9]{1,2})?.*$/;\n } else if (_opts.patternArgument == \"year\") {\n regExpPattern = /^([0-9]{0,4})?.*$/;\n } else if (_opts.patternArgument == \"month\") {\n regExpPattern = /^([0-9]{4})\\-?([0-9]{1,2})?.*$/;\n }\n\n var matchedPattern = val.match(regExpPattern),\n returnValue = \"\",\n inspectValue = function inspectValue(val, format, inspect, data) {\n var _val = {\n 'Y': function Y(v) {\n if (typeof v == \"undefined\") v = TODAY.getFullYear();\n if (v == '' || v == '0000') v = TODAY.getFullYear();\n return v.length < 4 ? U.setDigit(v, 4) : v;\n },\n 'M': function M(v) {\n if (typeof v == \"undefined\") v = TODAY.getMonth() + 1;\n return v > 12 ? 12 : v == 0 ? '01' : U.setDigit(v, 2);\n },\n 'D': function D(v) {\n if (typeof v == \"undefined\") v = TODAY.getDate() + 1;\n var dLen = U.daysOfMonth(data[1], data[2] - 1);\n return v > dLen ? dLen : v == 0 ? '01' : U.setDigit(v, 2);\n },\n 'h': function h(v) {\n if (!v) v = 0;\n return v > 23 ? 23 : U.setDigit(v, 2);\n },\n 'm': function m(v) {\n if (!v) v = 0;\n return v > 59 ? 59 : U.setDigit(v, 2);\n },\n 's': function s(v) {\n if (!v) v = 0;\n return v > 59 ? 59 : U.setDigit(v, 2);\n }\n };\n return inspect ? _val[format](val) : val;\n };\n\n returnValue = val.replace(regExpPattern, function (a, b) {\n var nval = [];\n\n if (_opts.patternArgument == \"year\") {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n } else if (_opts.patternArgument == \"month\") {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n if (arguments[2] || eType) nval.push('-' + inspectValue(arguments[2], \"M\", eType));\n } else if (_opts.patternArgument == \"time\") {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n if (arguments[2] || eType) nval.push('-' + inspectValue(arguments[2], \"M\", eType));\n if (arguments[3] || eType) nval.push('-' + inspectValue(arguments[3], \"D\", eType, arguments));\n if (arguments[4] || eType) nval.push(' ' + inspectValue(arguments[4], \"h\", eType));\n if (arguments[5] || eType) nval.push(':' + inspectValue(arguments[5], \"m\", eType));\n if (arguments[6] || eType) nval.push(':' + inspectValue(arguments[6], \"s\", eType));\n } else {\n nval.push(inspectValue(arguments[1], \"Y\", eType));\n if (arguments[2] || eType) nval.push('-' + inspectValue(arguments[2], \"M\", eType));\n if (arguments[3] || eType) nval.push('-' + inspectValue(arguments[3], \"D\", eType, arguments));\n }\n return nval.join('');\n });\n\n if (eType == 'blur' && !matchedPattern) {\n returnValue = function () {\n var nval = [];\n\n if (_opts.patternArgument == \"year\") {\n nval.push(inspectValue(0, \"Y\", eType));\n } else if (_opts.patternArgument == \"month\") {\n nval.push(inspectValue(0, \"Y\", eType));\n nval.push('-' + inspectValue(0, \"M\", eType));\n } else if (_opts.patternArgument == \"time\") {\n nval.push(inspectValue(0, \"Y\", eType));\n nval.push('-' + inspectValue(0, \"M\", eType));\n nval.push('-' + inspectValue(0, \"D\", eType, arguments));\n nval.push(' ' + inspectValue(0, \"h\", eType));\n nval.push(':' + inspectValue(0, \"m\", eType));\n nval.push(':' + inspectValue(0, \"s\", eType));\n } else {\n nval.push(inspectValue(0, \"Y\", eType));\n nval.push('-' + inspectValue(0, \"M\", eType));\n nval.push('-' + inspectValue(0, \"D\", eType, arguments));\n }\n return nval.join('');\n }();\n } else if (!matchedPattern) returnValue = returnValue.length > 4 ? U.left(returnValue, 4) : returnValue;\n\n return returnValue;\n }\n };\n\n var pattern_time = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '186': ':'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n var regExpPattern = /^([0-9]{1,2})?:?([0-9]{1,2})?:?([0-9]{1,2})?.*$/;\n\n var matchedPattern = val.match(regExpPattern),\n returnValue = val.replace(regExpPattern, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(':' + arguments[2]);\n if (arguments[3]) nval.push(':' + arguments[3]);\n return nval.join('');\n });\n\n if (!matchedPattern) returnValue = returnValue.length > 2 ? U.left(returnValue, 2) : returnValue;\n\n return returnValue;\n }\n };\n\n var pattern_bizno = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n var regExpPattern = /^([0-9]{3})\\-?([0-9]{1,2})?\\-?([0-9]{1,5})?.*$/,\n returnValue = val.replace(regExpPattern, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(arguments[2]);\n if (arguments[3]) nval.push(arguments[3]);\n return nval.join(\"-\");\n });\n\n return returnValue;\n }\n };\n\n var pattern_phone = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-', '188': ','\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\");\n var regExpPattern3 = /^([0-9]{3})\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?/;\n if (val.substr(0, 2) == \"02\") {\n regExpPattern3 = /^([0-9]{2})\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?\\-?([0-9]{1,4})?/;\n }\n\n var returnValue = val.replace(regExpPattern3, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(arguments[2]);\n if (arguments[3]) nval.push(arguments[3]);\n if (arguments[4]) nval.push(arguments[4]);\n if (arguments[5]) nval.push(arguments[5]);\n return nval.join(\"-\");\n });\n return returnValue;\n }\n };\n\n var pattern_credit = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n var enterableKeyCodes = {\n '189': '-'\n };\n return jQuery.extend(enterableKeyCodes, FORMATTER.formatter.ctrlKeys, FORMATTER.formatter.numKeys);\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n val = val.replace(/\\D/g, \"\").substring(0, 16);\n\n var regExpPattern3 = /^([0-9]{4})\\-?([0-9]{4})?\\-?([0-9]{4})?\\-?([0-9]{4})?/,\n returnValue = val.replace(regExpPattern3, function (a, b) {\n var nval = [arguments[1]];\n if (arguments[2]) nval.push(arguments[2]);\n if (arguments[3]) nval.push(arguments[3]);\n if (arguments[4]) nval.push(arguments[4]);\n return nval.join(\"-\");\n });\n return returnValue;\n }\n };\n\n var pattern_custom = {\n getEnterableKeyCodes: function getEnterableKeyCodes(_opts) {\n if (_opts.getEnterableKeyCodes) {\n return _opts.getEnterableKeyCodes.call(_opts, { $input: _opts.$input });\n } else {\n return null;\n }\n },\n getPatternValue: function getPatternValue(_opts, optIdx, e, val, eType) {\n if (_opts.getPatternValue) {\n return _opts.getPatternValue.call(_opts, { event: e, $input: _opts.$input, value: val });\n }\n }\n };\n\n FORMATTER.formatter = {\n ctrlKeys: ctrlKeys,\n numKeys: numKeys,\n money: pattern_money,\n number: pattern_number,\n date: pattern_date,\n time: pattern_time,\n bizno: pattern_bizno,\n phone: pattern_phone,\n credit: pattern_credit,\n custom: pattern_custom\n };\n})();\n\n/*\n * Copyright (c) 2017. tom@axisj.com\n * - github.com/thomasjang\n * - www.axisj.com\n */\n\nax5.ui.formatter_instance = new ax5.ui.formatter();\n\njQuery.fn.ax5formatter = function () {\n return function (config) {\n if (ax5.util.isString(arguments[0])) {\n var methodName = arguments[0];\n\n switch (methodName) {\n case \"formatting\":\n return ax5.ui.formatter_instance.formatting(this);\n break;\n\n case \"unbind\":\n return ax5.ui.formatter_instance.unbind(this);\n break;\n\n default:\n return this;\n }\n } else {\n if (typeof config == \"undefined\") config = {};\n jQuery.each(this, function () {\n var defaultConfig = {\n target: this\n };\n config = jQuery.extend({}, config, defaultConfig);\n ax5.ui.formatter_instance.bind(config);\n });\n }\n return this;\n };\n}();","'use strict';\n\n// ax5.ui.mask\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var MASK = void 0;\n\n UI.addClass({\n className: \"mask\"\n }, function () {\n /**\n * @class ax5mask\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '<div class=\"ax-mask\" id=\"{{maskId}}\" >' +\n * ' <div class=\"ax-mask-bg\" style=\"background-color:red !important;\"></div>' +\n * ' <div class=\"ax-mask-content\">' +\n * ' {{{body}}}' +\n * ' </div>' +\n * '</div>';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * var mask = new ax5.ui.mask();\n *\n * mask.open({\n * templateName: 'customMask',\n * content: 'custom MASK on target',\n * target: $(\"#user-content\").get(0),\n * onClick: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n theme: '',\n target: jQuery(document.body).get(0),\n animateTime: 250\n };\n this.maskContent = '';\n this.status = \"off\";\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n };\n var getBodyTmpl = function getBodyTmpl(data) {\n if (typeof data.templateName === \"undefined\") data.templateName = \"defaultMask\";\n return MASK.tmpl.get.call(this, data.templateName, data);\n };\n var setBody = function setBody(content) {\n this.maskContent = content;\n };\n\n /**\n * Preferences of Mask UI\n * @method ax5mask.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5mask}\n * @example\n * ```\n * setConfig({\n * target : {Element|AX5 nodelist}, // 마스크 처리할 대상\n * content : {String}, // 마스크안에 들어가는 내용물\n * onStateChanged: function(){} // 마스크 상태변경 시 호출되는 함수 this.type으로 예외처리 가능\n * }\n * ```\n */\n this.init = function () {\n // after setConfig();\n this.onStateChanged = cfg.onStateChanged;\n this.onClick = cfg.onClick;\n if (this.config.content) setBody.call(this, this.config.content);\n };\n\n /**\n * open mask\n * target 을 주지 않으면 기본적으로 body 에 마스크가 적용되고 원하는 타겟을 지정해서 마스크를 씌울 수 있습니다.\n * 기본 정의된 마스크 외에 사용자가 템플릿을 정의해서 마스크를 사용 가능합니다.\n * @method ax5mask.open\n * @param {Object} config\n * @param {String} config\n * @returns {ax5mask}\n * @example\n * ```js\n * my_mask.open({\n * target: document.body,\n * content: \"<h1>Loading..</h1>\",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"<h1>Loading..</h1>\",\n * onStateChanged: function () {\n *\n * }\n * });\n *\n *\n * var customMask = function customMask() {\n * var cTmpl = '' +\n * '<div class=\"ax-mask\" id=\"{{maskId}}\" >' +\n * ' <div class=\"ax-mask-bg\" style=\"background-color:red !important;\"></div>' +\n * ' <div class=\"ax-mask-content\">' +\n * ' {{{body}}}' +\n * ' </div>' +\n * '</div>';\n * return cTmpl;\n * };\n * ax5.ui.mask.tmpl.customMask = customMask;\n *\n * my_mask.open({\n * target: $(\"#mask-target\").get(0), // dom Element\n * content: \"<h1>Loading..</h1>\",\n * \n * onStateChanged: function () {\n *\n * }\n * });\n * ```\n */\n this.open = function (options) {\n\n if (this.status === \"on\") this.close();\n if (options && options.content) setBody.call(this, options.content);\n if (options && typeof options.templateName === \"undefined\") options.templateName = \"defaultMask\";\n self.maskConfig = jQuery.extend(true, {}, this.config, options);\n\n var _cfg = self.maskConfig,\n target = _cfg.target,\n $target = jQuery(target),\n maskId = 'ax-mask-' + ax5.getGuid(),\n $mask = void 0,\n css = {},\n that = {},\n templateName = _cfg.templateName,\n body = getBodyTmpl({\n theme: _cfg.theme,\n maskId: maskId,\n body: this.maskContent,\n templateName: templateName\n });\n\n jQuery(document.body).append(body);\n\n // 마스크의 타겟이 html body 가 아니라면\n if (target && target !== jQuery(document.body).get(0)) {\n css = {\n position: _cfg.position || \"absolute\",\n left: $target.offset().left,\n top: $target.offset().top,\n width: $target.outerWidth(),\n height: $target.outerHeight()\n };\n\n $target.addClass(\"ax-masking\");\n\n // 마스크의 타겟이 html body가 아닌경우 window resize 이벤트를 추적하여 엘리먼트 마스크의 CSS 속성 변경\n jQuery(window).on(\"resize.ax5mask-\" + this.instanceId, function (_$target) {\n this.align();\n }.bind(this));\n }\n\n if (typeof self.maskConfig.zIndex !== \"undefined\") {\n css[\"z-index\"] = self.maskConfig.zIndex;\n }\n\n this.$mask = $mask = jQuery(\"#\" + maskId);\n this.$target = $target;\n this.status = \"on\";\n $mask.css(css);\n\n if (_cfg.onClick) {\n $mask.on(\"click\", function (e) {\n that = {\n self: self,\n state: \"open\",\n type: \"click\"\n };\n self.maskConfig.onClick.call(that, that);\n });\n }\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"open\"\n });\n\n options = null;\n _cfg = null;\n target = null;\n $target = null;\n maskId = null;\n $mask = null;\n css = null;\n that = null;\n templateName = null;\n body = null;\n\n return this;\n };\n\n /**\n * close mask\n * @method ax5mask.close\n * @param {Number} [_delay=0]\n * @returns {ax5mask}\n * @example\n * ```\n * my_mask.close();\n * ```\n */\n this.close = function (_delay) {\n if (this.$mask) {\n var _close = function _close() {\n this.status = \"off\";\n this.$mask.remove();\n this.$target.removeClass(\"ax-masking\");\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"close\"\n });\n\n jQuery(window).off(\"resize.ax5mask-\" + this.instanceId);\n };\n\n if (_delay) {\n setTimeout(function () {\n _close.call(this);\n }.bind(this), _delay);\n } else {\n _close.call(this);\n }\n }\n return this;\n };\n\n /**\n * @method ax5mask.fadeOut\n * @returns {ax5mask}\n */\n this.fadeOut = function () {\n if (this.$mask) {\n var _close = function _close() {\n this.status = \"off\";\n this.$mask.remove();\n this.$target.removeClass(\"ax-masking\");\n\n onStateChanged.call(this, null, {\n self: this,\n state: \"close\"\n });\n\n jQuery(window).off(\"resize.ax5mask-\" + this.instanceId);\n };\n\n this.$mask.addClass(\"fade-out\");\n setTimeout(function () {\n _close.call(this);\n }.bind(this), cfg.animateTime);\n }\n return this;\n };\n\n /**\n * @method ax5mask.align\n * @returns {ax5mask}\n */\n this.align = function () {\n if (this.maskConfig && this.maskConfig.target && this.maskConfig.target !== jQuery(document.body).get(0)) {\n try {\n var css = {\n position: this.maskConfig.position || \"absolute\",\n left: this.$target.offset().left,\n top: this.$target.offset().top,\n width: this.$target.outerWidth(),\n height: this.$target.outerHeight()\n };\n this.$mask.css(css);\n } catch (e) {}\n }\n return this;\n };\n\n this.pullRequest = function () {\n console.log(\"test pullRequest01\");\n console.log(\"test pullRequest02\");\n };\n\n // 클래스 생성자\n this.main = function () {\n\n UI.mask_instance = UI.mask_instance || [];\n UI.mask_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n MASK = ax5.ui.mask;\n})();\n// ax5.ui.mask.tmpl\n(function () {\n\n var MASK = ax5.ui.mask;\n\n var defaultMask = function defaultMask(columnKeys) {\n return '\\n <div class=\"ax-mask {{theme}}\" id=\"{{maskId}}\">\\n <div class=\"ax-mask-bg\"></div>\\n <div class=\"ax-mask-content\">\\n <div class=\"ax-mask-body\">\\n {{{body}}}\\n </div>\\n </div>\\n </div>\\n ';\n };\n\n MASK.tmpl = {\n \"defaultMask\": defaultMask,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(MASK.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n/*\n * Copyright (c) 2016. tom@axisj.com\n * - github.com/thomasjang\n * - www.axisj.com\n */\n\n// ax5.ui.modal\n(function () {\n var UI = ax5.ui;\n var U = ax5.util;\n var MODAL = void 0;\n\n UI.addClass({\n className: \"modal\"\n }, function () {\n /**\n * @class ax5modal\n * @alias ax5.ui.modal\n * @author tom@axisj.com\n */\n return function () {\n var self = this,\n cfg = void 0,\n ENM = {\n mousedown: ax5.info.supportTouch ? \"touchstart\" : \"mousedown\",\n mousemove: ax5.info.supportTouch ? \"touchmove\" : \"mousemove\",\n mouseup: ax5.info.supportTouch ? \"touchend\" : \"mouseup\"\n },\n getMousePosition = function getMousePosition(e) {\n var mouseObj = e;\n if (\"changedTouches\" in e && e.changedTouches) {\n mouseObj = e.changedTouches[0];\n }\n return {\n clientX: mouseObj.clientX,\n clientY: mouseObj.clientY\n };\n };\n\n this.instanceId = ax5.getGuid();\n this.config = {\n id: \"ax5-modal-\" + this.instanceId,\n position: {\n left: \"center\",\n top: \"middle\",\n margin: 10\n },\n minimizePosition: \"bottom-right\",\n clickEventName: \"ontouchstart\" in document.documentElement ? \"touchstart\" : \"click\",\n theme: \"default\",\n width: 300,\n height: 400,\n closeToEsc: true,\n disableDrag: false,\n disableResize: false,\n animateTime: 250,\n iframe: false\n };\n this.activeModal = null;\n this.watingModal = false;\n this.$ = {}; // UI inside of the jQuery object store\n\n cfg = this.config; // extended config copy cfg\n\n var onStateChanged = function onStateChanged(opts, that) {\n var eventProcessor = {\n resize: function resize(that) {\n if (opts && opts.onResize) {\n opts.onResize.call(that, that);\n } else if (this.onResize) {\n this.onResize.call(that, that);\n }\n },\n move: function move() {}\n };\n if (that.state in eventProcessor) {\n eventProcessor[that.state].call(this, that);\n }\n\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n return true;\n },\n getContent = function getContent(modalId, opts) {\n var data = {\n modalId: modalId,\n theme: opts.theme,\n header: opts.header,\n fullScreen: opts.fullScreen ? \"fullscreen\" : \"\",\n styles: \"\",\n iframe: opts.iframe,\n iframeLoadingMsg: opts.iframeLoadingMsg,\n disableResize: opts.disableResize\n };\n\n if (opts.zIndex) {\n data.styles += \"z-index:\" + opts.zIndex + \";\";\n }\n if (opts.absolute) {\n data.styles += \"position:absolute;\";\n }\n\n if (data.iframe && typeof data.iframe.param === \"string\") {\n data.iframe.param = ax5.util.param(data.iframe.param);\n }\n\n return MODAL.tmpl.get.call(this, \"content\", data, {});\n },\n open = function open(opts, callback) {\n var that = void 0;\n jQuery(document.body).append(getContent.call(this, opts.id, opts));\n\n this.activeModal = jQuery(\"#\" + opts.id);\n // 파트수집\n this.$ = {\n root: this.activeModal,\n header: this.activeModal.find('[data-modal-els=\"header\"]'),\n body: this.activeModal.find('[data-modal-els=\"body\"]')\n };\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"] = this.activeModal.find('[data-modal-els=\"iframe-wrap\"]');\n this.$[\"iframe\"] = this.activeModal.find('[data-modal-els=\"iframe\"]');\n this.$[\"iframe-form\"] = this.activeModal.find('[data-modal-els=\"iframe-form\"]');\n this.$[\"iframe-loading\"] = this.activeModal.find('[data-modal-els=\"iframe-loading\"]');\n } else {\n this.$[\"body-frame\"] = this.activeModal.find('[data-modal-els=\"body-frame\"]');\n }\n\n //- position 정렬\n this.align();\n\n that = {\n self: this,\n id: opts.id,\n theme: opts.theme,\n width: opts.width,\n height: opts.height,\n state: \"open\",\n $: this.$\n };\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"].css({ height: opts.height });\n this.$[\"iframe\"].css({ height: opts.height });\n\n // iframe content load\n this.$[\"iframe-form\"].attr({ method: opts.iframe.method });\n this.$[\"iframe-form\"].attr({ target: opts.id + \"-frame\" });\n this.$[\"iframe-form\"].attr({ action: opts.iframe.url });\n this.$[\"iframe\"].on(\"load\", function () {\n that.state = \"load\";\n if (opts.iframeLoadingMsg) {\n this.$[\"iframe-loading\"].hide();\n }\n onStateChanged.call(this, opts, that);\n }.bind(this));\n if (!opts.iframeLoadingMsg) {\n this.$[\"iframe\"].show();\n }\n this.$[\"iframe-form\"].submit();\n }\n\n if (callback) callback.call(that, that);\n\n if (!this.watingModal) {\n onStateChanged.call(this, opts, that);\n }\n\n // bind key event\n if (opts.closeToEsc) {\n jQuery(window).bind(\"keydown.ax-modal\", function (e) {\n onkeyup.call(this, e || window.event);\n }.bind(this));\n }\n\n jQuery(window).bind(\"resize.ax-modal\", function (e) {\n this.align(null, e || window.event);\n }.bind(this));\n\n this.$.header.off(ENM[\"mousedown\"]).off(\"dragstart\").on(ENM[\"mousedown\"], function (e) {\n /// 이벤트 필터링 추가 : 버튼엘리먼트로 부터 발생된 이벤트이면 moveModal 시작하지 않도록 필터링\n var isButton = U.findParentNode(e.target, function (_target) {\n if (_target.getAttribute(\"data-modal-header-btn\")) {\n return true;\n }\n });\n\n if (!opts.isFullScreen && !isButton && opts.disableDrag != true) {\n self.mousePosition = getMousePosition(e);\n moveModal.on.call(self);\n }\n if (isButton) {\n btnOnClick.call(self, e || window.event, opts);\n }\n }).on(\"dragstart\", function (e) {\n U.stopEvent(e.originalEvent);\n return false;\n });\n\n this.activeModal.off(ENM[\"mousedown\"]).off(\"dragstart\").on(ENM[\"mousedown\"], \"[data-ax5modal-resizer]\", function (e) {\n if (opts.disableDrag || opts.isFullScreen) return false;\n self.mousePosition = getMousePosition(e);\n resizeModal.on.call(self, this.getAttribute(\"data-ax5modal-resizer\"));\n }).on(\"dragstart\", function (e) {\n U.stopEvent(e.originalEvent);\n return false;\n });\n },\n btnOnClick = function btnOnClick(e, opts, callback, target, k) {\n var that = void 0;\n if (e.srcElement) e.target = e.srcElement;\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-modal-header-btn\")) {\n return true;\n }\n });\n\n if (target) {\n k = target.getAttribute(\"data-modal-header-btn\");\n\n that = {\n self: this,\n key: k,\n value: opts.header.btns[k],\n dialogId: opts.id,\n btnTarget: target\n };\n\n if (opts.header.btns[k].onClick) {\n opts.header.btns[k].onClick.call(that, k);\n }\n }\n\n that = null;\n opts = null;\n callback = null;\n target = null;\n k = null;\n },\n onkeyup = function onkeyup(e) {\n if (e.keyCode == ax5.info.eventKeys.ESC) {\n this.close();\n }\n },\n alignProcessor = {\n \"top-left\": function topLeft() {\n this.align({ left: \"left\", top: \"top\" });\n },\n \"top-right\": function topRight() {\n this.align({ left: \"right\", top: \"top\" });\n },\n \"bottom-left\": function bottomLeft() {\n this.align({ left: \"left\", top: \"bottom\" });\n },\n \"bottom-right\": function bottomRight() {\n this.align({ left: \"right\", top: \"bottom\" });\n },\n \"center-middle\": function centerMiddle() {\n this.align({ left: \"center\", top: \"middle\" });\n }\n },\n moveModal = {\n on: function on() {\n var modalZIndex = this.activeModal.css(\"z-index\"),\n modalOffset = this.activeModal.offset(),\n modalBox = {\n width: this.activeModal.outerWidth(),\n height: this.activeModal.outerHeight()\n },\n windowBox = {\n width: jQuery(window).width(),\n height: jQuery(window).height(),\n scrollLeft: jQuery(document).scrollLeft(),\n scrollTop: jQuery(document).scrollTop()\n },\n getResizerPosition = function getResizerPosition(e) {\n self.__dx = e.clientX - self.mousePosition.clientX;\n self.__dy = e.clientY - self.mousePosition.clientY;\n\n /*\n if (minX > modalOffset.left + self.__dx) {\n self.__dx = -modalOffset.left;\n } else if (maxX < modalOffset.left + self.__dx) {\n self.__dx = maxX - modalOffset.left;\n }\n if (minY > modalOffset.top + self.__dy) {\n self.__dy = -modalOffset.top;\n } else if (maxY < modalOffset.top + self.__dy) {\n self.__dy = maxY - modalOffset.top;\n }\n */\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy\n };\n };\n\n var minX = 0,\n maxX = windowBox.width - modalBox.width,\n minY = 0,\n maxY = windowBox.height - modalBox.height;\n\n self.__dx = 0; // 변화량 X\n self.__dy = 0; // 변화량 Y\n\n // self.resizerBg : body 가 window보다 작을 때 문제 해결을 위한 DIV\n self.resizerBg = jQuery('<div class=\"ax5modal-resizer-background\" ondragstart=\"return false;\"></div>');\n self.resizer = jQuery('<div class=\"ax5modal-resizer\" ondragstart=\"return false;\"></div>');\n self.resizerBg.css({ zIndex: modalZIndex });\n self.resizer.css({\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height,\n zIndex: modalZIndex + 1\n });\n\n jQuery(document.body).append(self.resizerBg).append(self.resizer);\n\n self.activeModal.addClass(\"draged\");\n\n jQuery(document.body).on(ENM[\"mousemove\"] + \".ax5modal-move-\" + this.instanceId, function (e) {\n self.resizer.css(getResizerPosition(e));\n }).on(ENM[\"mouseup\"] + \".ax5modal-move-\" + this.instanceId, function (e) {\n moveModal.off.call(self);\n }).on(\"mouseleave.ax5modal-move-\" + this.instanceId, function (e) {\n moveModal.off.call(self);\n });\n\n jQuery(document.body).attr(\"unselectable\", \"on\").css(\"user-select\", \"none\").on(\"selectstart\", false);\n },\n off: function off() {\n var setModalPosition = function setModalPosition() {\n var box = this.resizer.offset();\n if (!this.modalConfig.absolute) {\n box.left -= jQuery(document).scrollLeft();\n box.top -= jQuery(document).scrollTop();\n }\n this.activeModal.css(box);\n this.modalConfig.left = box.left;\n this.modalConfig.top = box.top;\n\n box = null;\n };\n\n this.activeModal.removeClass(\"draged\");\n setModalPosition.call(this);\n\n this.resizer.remove();\n this.resizer = null;\n this.resizerBg.remove();\n this.resizerBg = null;\n //this.align();\n\n jQuery(document.body).off(ENM[\"mousemove\"] + \".ax5modal-move-\" + this.instanceId).off(ENM[\"mouseup\"] + \".ax5modal-move-\" + this.instanceId).off(\"mouseleave.ax5modal-move-\" + this.instanceId);\n\n jQuery(document.body).removeAttr(\"unselectable\").css(\"user-select\", \"auto\").off(\"selectstart\");\n\n onStateChanged.call(this, self.modalConfig, {\n self: this,\n state: \"move\"\n });\n }\n },\n resizeModal = {\n on: function on(resizerType) {\n var modalZIndex = this.activeModal.css(\"z-index\"),\n modalOffset = this.activeModal.offset(),\n modalBox = {\n width: this.activeModal.outerWidth(),\n height: this.activeModal.outerHeight()\n },\n windowBox = {\n width: jQuery(window).width(),\n height: jQuery(window).height(),\n scrollLeft: jQuery(document).scrollLeft(),\n scrollTop: jQuery(document).scrollTop()\n },\n resizerProcessor = {\n top: function top(e) {\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width,\n height: modalBox.height - self.__dy * 2\n };\n } else if (e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dy,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dy * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width,\n height: modalBox.height - self.__dy\n };\n }\n },\n bottom: function bottom(e) {\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey) {\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n\n return {\n left: modalOffset.left,\n top: modalOffset.top - self.__dy,\n width: modalBox.width,\n height: modalBox.height + self.__dy * 2\n };\n } else if (e.altKey) {\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dy,\n top: modalOffset.top - self.__dy,\n width: modalBox.width + self.__dy * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height + self.__dy\n };\n }\n },\n left: function left(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (e.shiftKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height\n };\n } else if (e.altKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dx,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height - self.__dx * 2\n };\n } else {\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx,\n height: modalBox.height\n };\n }\n },\n right: function right(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (e.shiftKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height\n };\n } else if (e.altKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top - self.__dx,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height + self.__dx * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width + self.__dx,\n height: modalBox.height\n };\n }\n },\n \"top-left\": function topLeft(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width - self.__dx,\n height: modalBox.height - self.__dy\n };\n }\n },\n \"top-right\": function topRight(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (minHeight > modalBox.height - self.__dy) {\n self.__dy = modalBox.height - minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minHeight > modalBox.height - self.__dy * 2) {\n self.__dy = (modalBox.height - minHeight) / 2;\n }\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top + self.__dy,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height - self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top + self.__dy,\n width: modalBox.width + self.__dx,\n height: modalBox.height - self.__dy\n };\n }\n },\n \"bottom-left\": function bottomLeft(e) {\n if (minWidth > modalBox.width - self.__dx) {\n self.__dx = modalBox.width - minWidth;\n }\n\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minWidth > modalBox.width - self.__dx * 2) {\n self.__dx = (modalBox.width - minWidth) / 2;\n }\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top - self.__dy,\n width: modalBox.width - self.__dx * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left + self.__dx,\n top: modalOffset.top,\n width: modalBox.width - self.__dx,\n height: modalBox.height + self.__dy\n };\n }\n },\n \"bottom-right\": function bottomRight(e) {\n if (minWidth > modalBox.width + self.__dx) {\n self.__dx = -modalBox.width + minWidth;\n }\n\n if (minHeight > modalBox.height + self.__dy) {\n self.__dy = -modalBox.height + minHeight;\n }\n\n if (e.shiftKey || e.altKey) {\n if (minWidth > modalBox.width + self.__dx * 2) {\n self.__dx = (-modalBox.width + minWidth) / 2;\n }\n if (minHeight > modalBox.height + self.__dy * 2) {\n self.__dy = (-modalBox.height + minHeight) / 2;\n }\n return {\n left: modalOffset.left - self.__dx,\n top: modalOffset.top - self.__dy,\n width: modalBox.width + self.__dx * 2,\n height: modalBox.height + self.__dy * 2\n };\n } else {\n return {\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width + self.__dx,\n height: modalBox.height + self.__dy\n };\n }\n }\n },\n getResizerPosition = function getResizerPosition(e) {\n self.__dx = e.clientX - self.mousePosition.clientX;\n self.__dy = e.clientY - self.mousePosition.clientY;\n\n return resizerProcessor[resizerType](e);\n };\n\n var minWidth = 100,\n minHeight = 100;\n\n var cursorType = {\n top: \"row-resize\",\n bottom: \"row-resize\",\n left: \"col-resize\",\n right: \"col-resize\",\n \"top-left\": \"nwse-resize\",\n \"top-right\": \"nesw-resize\",\n \"bottom-left\": \"nesw-resize\",\n \"bottom-right\": \"nwse-resize\"\n };\n\n self.__dx = 0; // 변화량 X\n self.__dy = 0; // 변화량 Y\n\n // self.resizerBg : body 가 window보다 작을 때 문제 해결을 위한 DIV\n self.resizerBg = jQuery('<div class=\"ax5modal-resizer-background\" ondragstart=\"return false;\"></div>');\n self.resizer = jQuery('<div class=\"ax5modal-resizer\" ondragstart=\"return false;\"></div>');\n self.resizerBg.css({\n zIndex: modalZIndex,\n cursor: cursorType[resizerType]\n });\n self.resizer.css({\n left: modalOffset.left,\n top: modalOffset.top,\n width: modalBox.width,\n height: modalBox.height,\n zIndex: modalZIndex + 1,\n cursor: cursorType[resizerType]\n });\n jQuery(document.body).append(self.resizerBg).append(self.resizer);\n self.activeModal.addClass(\"draged\");\n\n jQuery(document.body).bind(ENM[\"mousemove\"] + \".ax5modal-resize-\" + this.instanceId, function (e) {\n self.resizer.css(getResizerPosition(e));\n }).bind(ENM[\"mouseup\"] + \".ax5modal-resize-\" + this.instanceId, function (e) {\n resizeModal.off.call(self);\n }).bind(\"mouseleave.ax5modal-resize-\" + this.instanceId, function (e) {\n resizeModal.off.call(self);\n });\n\n jQuery(document.body).attr(\"unselectable\", \"on\").css(\"user-select\", \"none\").bind(\"selectstart\", false);\n },\n off: function off() {\n var setModalPosition = function setModalPosition() {\n var box = this.resizer.offset();\n jQuery.extend(box, {\n width: this.resizer.width(),\n height: this.resizer.height()\n });\n if (!this.modalConfig.absolute) {\n box.left -= jQuery(document).scrollLeft();\n box.top -= jQuery(document).scrollTop();\n }\n this.activeModal.css(box);\n\n this.modalConfig.left = box.left;\n this.modalConfig.top = box.top;\n this.modalConfig.width = box.width;\n this.modalConfig.height = box.height;\n this.$[\"body\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n if (this.modalConfig.iframe) {\n this.$[\"iframe-wrap\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n this.$[\"iframe\"].css({\n height: box.height - this.modalConfig.headerHeight\n });\n }\n\n box = null;\n };\n\n this.activeModal.removeClass(\"draged\");\n setModalPosition.call(this);\n\n this.resizer.remove();\n this.resizer = null;\n this.resizerBg.remove();\n this.resizerBg = null;\n\n onStateChanged.call(this, self.modalConfig, {\n self: this,\n state: \"resize\"\n });\n\n jQuery(document.body).unbind(ENM[\"mousemove\"] + \".ax5modal-resize-\" + this.instanceId).unbind(ENM[\"mouseup\"] + \".ax5modal-resize-\" + this.instanceId).unbind(\"mouseleave.ax5modal-resize-\" + this.instanceId);\n\n jQuery(document.body).removeAttr(\"unselectable\").css(\"user-select\", \"auto\").unbind(\"selectstart\");\n }\n };\n\n /// private end\n\n /**\n * Preferences of modal UI\n * @method ax5modal.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Number} [config.zIndex]\n * @param {Object} [config.position]\n * @param {String} [config.position.left=\"center\"]\n * @param {String} [config.position.top=\"middle\"]\n * @param {Number} [config.position.margin=10]\n * @param {String} [config.minimizePosition=\"bottom-right\"]\n * @param {Number} [config.width=300]\n * @param {Number} [config.height=400]\n * @param {Boolean} [config.closeToEsc=true]\n * @param {Boolean} [config.absolute=false]\n * @param {Boolean} [config.disableDrag=false]\n * @param {Boolean} [config.disableResize=false]\n * @param {Number} [config.animateTime=250]\n * @param {Function} [config.fullScreen]\n * @param {Function} [config.onStateChanged] - `onStateChanged` function can be defined in setConfig method or new ax5.ui.modal initialization method. However, you can us to define an event function after initialization, if necessary\n * @param {Function} [config.onResize]\n * @returns {ax5modal}\n * @example\n * ```js\n * var modal = new ax5.ui.modal({\n * iframeLoadingMsg: '<i class=\"fa fa-spinner fa-5x fa-spin\" aria-hidden=\"true\"></i>',\n * header: {\n * title: \"MODAL TITLE\",\n * btns: {\n * minimize: {\n * label: '<i class=\"fa fa-minus-circle\" aria-hidden=\"true\"></i>', onClick: function () {\n * modal.minimize();\n * }\n * },\n * maximize: {\n * label: '<i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>', onClick: function () {\n * modal.maximize();\n * }\n * },\n * close: {\n * label: '<i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>', onClick: function () {\n * modal.close();\n * }\n * }\n * }\n * }\n * });\n *\n * modal.open({\n * width: 800,\n * height: 600,\n * fullScreen: function(){\n * return ($(window).width() < 600);\n * },\n * iframe: {\n * method: \"get\",\n * url: \"http://chequer-app:2017/html/login.html\",\n * param: \"callback=modalCallback\"\n * },\n * onStateChanged: function(){\n * console.log(this);\n * },\n * onResize: function(){\n * console.log(this);\n * }\n * });\n * ```\n */\n //== class body start\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n this.onResize = cfg.onResize;\n };\n\n /**\n * open the modal\n * @method ax5modal.open\n * @returns {ax5modal}\n * @example\n * ```\n * modal.open();\n * modal.open({\n * width: 500,\n * height: 500\n * });\n * moaal.open({}, function(){\n * console.log(this);\n * });\n * ```\n */\n this.open = function (opts, callback, tryCount) {\n if (typeof tryCount === \"undefined\") tryCount = 0;\n if (!this.activeModal) {\n opts = self.modalConfig = jQuery.extend(true, {}, cfg, opts);\n open.call(this, opts, callback);\n this.watingModal = false;\n } else if (tryCount < 3) {\n // 3번까지 재 시도\n this.watingModal = true;\n setTimeout(function () {\n this.open(opts, callback, tryCount + 1);\n }.bind(this), cfg.animateTime);\n } else {\n // 열기 시도 종료\n this.watingModal = false;\n }\n return this;\n };\n\n /**\n * close the modal\n * @method ax5modal.close\n * @param _option\n * @returns {ax5modal}\n * @example\n * ```\n * my_modal.close();\n * my_modal.close({callback: function(){\n * // on close event\n * });\n * // close 함수에 callback을 전달하면 정확한 close 타이밍을 캐치할 수 있습니다\n * ```\n */\n\n this.close = function (_option) {\n var opts = void 0,\n that = void 0;\n\n if (this.activeModal) {\n opts = self.modalConfig;\n this.activeModal.addClass(\"destroy\");\n jQuery(window).unbind(\"keydown.ax-modal\");\n jQuery(window).unbind(\"resize.ax-modal\");\n\n setTimeout(function () {\n // 프레임 제거\n if (opts.iframe) {\n var $iframe = this.$[\"iframe\"]; // iframe jQuery Object\n if ($iframe) {\n var iframeObject = $iframe.get(0),\n idoc = iframeObject.contentDocument ? iframeObject.contentDocument : iframeObject.contentWindow.document;\n\n try {\n $(idoc.body).children().each(function () {\n $(this).remove();\n });\n } catch (e) {}\n idoc.innerHTML = \"\";\n $iframe.attr(\"src\", \"about:blank\").remove();\n\n // force garbarge collection for IE only\n window.CollectGarbage && window.CollectGarbage();\n }\n }\n\n this.activeModal.remove();\n this.activeModal = null;\n\n // 모달 오픈 대기중이면 닫기 상태 전달 안함.\n if (!this.watingModal) {\n onStateChanged.call(this, opts, {\n self: this,\n state: \"close\"\n });\n }\n\n if (_option && U.isFunction(_option.callback)) {\n that = {\n self: this,\n id: opts.id,\n theme: opts.theme,\n width: opts.width,\n height: opts.height,\n state: \"close\",\n $: this.$\n };\n _option.callback.call(that, that);\n }\n }.bind(this), cfg.animateTime);\n }\n\n this.minimized = false; // hoksi\n\n return this;\n };\n\n /**\n * @method ax5modal.minimize\n * @returns {ax5modal}\n */\n this.minimize = function () {\n return function (minimizePosition) {\n if (this.minimized !== true) {\n var opts = self.modalConfig;\n if (typeof minimizePosition === \"undefined\") minimizePosition = cfg.minimizePosition;\n\n this.minimized = true;\n this.$.body.hide();\n self.modalConfig.originalHeight = opts.height;\n self.modalConfig.height = 0;\n alignProcessor[minimizePosition].call(this);\n\n onStateChanged.call(this, opts, {\n self: this,\n state: \"minimize\"\n });\n }\n\n return this;\n };\n }();\n\n /**\n * @method ax5modal.restore\n * @returns {ax5modal}\n */\n this.restore = function () {\n var opts = self.modalConfig;\n if (this.minimized) {\n this.minimized = false;\n this.$.body.show();\n self.modalConfig.height = self.modalConfig.originalHeight;\n self.modalConfig.originalHeight = undefined;\n\n this.align({ left: \"center\", top: \"middle\" });\n onStateChanged.call(this, opts, {\n self: this,\n state: \"restore\"\n });\n }\n return this;\n };\n\n /**\n * setCSS\n * @method ax5modal.css\n * @param {Object} css -\n * @returns {ax5modal}\n */\n this.css = function (css) {\n if (this.activeModal && !self.fullScreen) {\n this.activeModal.css(css);\n if (typeof css.width !== \"undefined\") {\n self.modalConfig.width = css.width;\n }\n if (typeof css.height !== \"undefined\") {\n self.modalConfig.height = css.height;\n }\n\n this.align();\n }\n return this;\n };\n\n /**\n * @method ax5modal.setModalConfig\n * @param _config\n * @returns {ax5.ui.ax5modal}\n */\n this.setModalConfig = function (_config) {\n self.modalConfig = jQuery.extend({}, self.modalConfig, _config);\n this.align();\n return this;\n };\n\n /**\n * @method ax5modal.align\n * @param position\n * @param e\n * @returns {ax5modal}\n * @example\n * ```js\n * modal.align({left:\"center\", top:\"middle\"});\n * modal.align({left:\"left\", top:\"top\", margin: 20});\n * ```\n */\n this.align = function () {\n return function (position, e) {\n if (!this.activeModal) return this;\n\n var opts = self.modalConfig,\n box = {\n width: opts.width,\n height: opts.height\n };\n\n var fullScreen = opts.isFullScreen = function (_fullScreen) {\n if (typeof _fullScreen === \"undefined\") {\n return false;\n } else if (U.isFunction(_fullScreen)) {\n return _fullScreen();\n }\n }(opts.fullScreen);\n\n if (fullScreen) {\n if (opts.header) this.$.header.show();\n if (opts.header) {\n opts.headerHeight = this.$.header.outerHeight();\n box.height += opts.headerHeight;\n } else {\n opts.headerHeight = 0;\n }\n box.width = jQuery(window).width();\n box.height = opts.height;\n box.left = 0;\n box.top = 0;\n } else {\n if (opts.header) this.$.header.show();\n if (position) {\n jQuery.extend(true, opts.position, position);\n }\n\n if (opts.header) {\n opts.headerHeight = this.$.header.outerHeight();\n box.height += opts.headerHeight;\n } else {\n opts.headerHeight = 0;\n }\n\n //- position 정렬\n if (opts.position.left == \"left\") {\n box.left = opts.position.margin || 0;\n } else if (opts.position.left == \"right\") {\n // window.innerWidth;\n box.left = jQuery(window).width() - box.width - (opts.position.margin || 0);\n } else if (opts.position.left == \"center\") {\n box.left = jQuery(window).width() / 2 - box.width / 2;\n } else {\n box.left = opts.position.left || 0;\n }\n\n if (opts.position.top == \"top\") {\n box.top = opts.position.margin || 0;\n } else if (opts.position.top == \"bottom\") {\n box.top = jQuery(window).height() - box.height - (opts.position.margin || 0);\n } else if (opts.position.top == \"middle\") {\n box.top = jQuery(window).height() / 2 - box.height / 2;\n } else {\n box.top = opts.position.top || 0;\n }\n if (box.left < 0) box.left = 0;\n if (box.top < 0) box.top = 0;\n\n if (opts.absolute) {\n box.top += jQuery(window).scrollTop();\n box.left += jQuery(window).scrollLeft();\n }\n }\n\n this.activeModal.css(box);\n\n this.$[\"body\"].css({\n height: box.height - (opts.headerHeight || 0)\n });\n\n if (opts.iframe) {\n this.$[\"iframe-wrap\"].css({\n height: box.height - opts.headerHeight\n });\n this.$[\"iframe\"].css({ height: box.height - opts.headerHeight });\n } else {}\n return this;\n };\n }();\n\n // 클래스 생성자\n this.main = function () {\n UI.modal_instance = UI.modal_instance || [];\n UI.modal_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n MODAL = ax5.ui.modal;\n})();\n\n// ax5.ui.modal.tmpl\n(function () {\n var MODAL = ax5.ui.modal;\n\n var content = function content() {\n return \" \\n <div id=\\\"{{modalId}}\\\" data-modal-els=\\\"root\\\" class=\\\"ax5modal {{theme}} {{fullscreen}}\\\" style=\\\"{{styles}}\\\">\\n {{#header}}\\n <div class=\\\"ax-modal-header\\\" data-modal-els=\\\"header\\\">\\n {{{title}}}\\n {{#btns}}\\n <div class=\\\"ax-modal-header-addon\\\">\\n {{#@each}}\\n <button tabindex=\\\"-1\\\" data-modal-header-btn=\\\"{{@key}}\\\" class=\\\"{{@value.theme}}\\\">{{{@value.label}}}</button>\\n {{/@each}}\\n </div>\\n {{/btns}}\\n </div>\\n {{/header}}\\n <div class=\\\"ax-modal-body\\\" data-modal-els=\\\"body\\\">\\n {{#iframe}}\\n <div data-modal-els=\\\"iframe-wrap\\\" style=\\\"-webkit-overflow-scrolling: touch; overflow: auto;position: relative;\\\">\\n <table data-modal-els=\\\"iframe-loading\\\" style=\\\"width:100%;height:100%;\\\"><tr><td style=\\\"text-align: center;vertical-align: middle\\\">{{{iframeLoadingMsg}}}</td></tr></table>\\n <iframe name=\\\"{{modalId}}-frame\\\" src=\\\"\\\" width=\\\"100%\\\" height=\\\"100%\\\" frameborder=\\\"0\\\" data-modal-els=\\\"iframe\\\" style=\\\"position: absolute;left:0;top:0;\\\"></iframe>\\n </div>\\n <form name=\\\"{{modalId}}-form\\\" data-modal-els=\\\"iframe-form\\\">\\n <input type=\\\"hidden\\\" name=\\\"modalId\\\" value=\\\"{{modalId}}\\\" />\\n {{#param}}\\n {{#@each}}\\n <input type=\\\"hidden\\\" name=\\\"{{@key}}\\\" value=\\\"{{@value}}\\\" />\\n {{/@each}}\\n {{/param}}\\n </form>\\n {{/iframe}}\\n {{^iframe}}\\n <div data-modal-els=\\\"body-frame\\\" style=\\\"position: absolute;left:0;top:0;width:100%;height:100%;\\\"></div>\\n {{/iframe}}\\n </div>\\n {{^disableResize}}\\n <div data-ax5modal-resizer=\\\"top\\\"></div>\\n <div data-ax5modal-resizer=\\\"right\\\"></div>\\n <div data-ax5modal-resizer=\\\"bottom\\\"></div>\\n <div data-ax5modal-resizer=\\\"left\\\"></div>\\n <div data-ax5modal-resizer=\\\"top-left\\\"></div>\\n <div data-ax5modal-resizer=\\\"top-right\\\"></div>\\n <div data-ax5modal-resizer=\\\"bottom-left\\\"></div>\\n <div data-ax5modal-resizer=\\\"bottom-right\\\"></div>\\n {{/disableResize}}\\n </div>\\n \";\n };\n\n MODAL.tmpl = {\n \"content\": content,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(MODAL.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.toast\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var TOAST;\n\n UI.addClass({\n className: \"toast\"\n }, function () {\n /**\n * @class ax5toast\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```\n * ```js\n * var toast = new ax5.ui.toast();\n * toast.setConfig({\n * icon: '<i class=\"fa fa-bug\"></i>',\n * containerPosition: \"bottom-right\",\n * closeIcon: '<i class=\"fa fa-times\"></i>'\n * });\n *\n * toast.onStateChanged = function(){\n * console.log(this);\n * };\n *\n * toast.push({\n * icon: '<i class=\"fa fa-book\"></i>',\n * msg:\"999999\"\n * });\n *\n * toast.push({\n * theme: theme,\n * msg: 'toast message'\n * });\n * ```\n */\n var ax5toast = function ax5toast() {\n var self = this,\n cfg,\n toastSeq = 0,\n toastSeqClear = null;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n clickEventName: \"click\", //(('ontouchstart' in document.documentElement) ? \"touchstart\" : \"click\"),\n theme: 'default',\n width: 300,\n icon: '',\n closeIcon: '',\n msg: '',\n lang: {\n \"ok\": \"ok\", \"cancel\": \"cancel\"\n },\n displayTime: 3000,\n animateTime: 250,\n containerPosition: \"bottom-left\"\n };\n this.toastContainer = null;\n this.queue = [];\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n opts = null;\n that = null;\n return true;\n },\n\n /**\n * @method ax5toast.getContent\n * @param {String} toastId\n * @param {Object} opts\n * @returns toastDisplay\n * @example\n * ```js\n * ax5toast.getContent('ax5-toast-3-1', opts);\n * ```\n */\n getContent = function getContent(toastId, opts) {\n\n var data = {\n toastId: toastId,\n theme: opts.theme,\n icon: opts.icon,\n msg: (opts.msg || \"\").replace(/\\n/g, \"<br/>\"),\n btns: opts.btns,\n closeIcon: opts.closeIcon\n };\n\n try {\n return TOAST.tmpl.get.call(this, \"toastDisplay\", data);\n } finally {\n toastId = null;\n data = null;\n }\n },\n\n /**\n * @method ax5toast.open\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n open = function open(opts, callBack) {\n if (toastSeqClear) clearTimeout(toastSeqClear);\n\n var toastBox,\n box = {\n width: opts.width\n };\n\n opts.id = 'ax5-toast-' + self.containerId + '-' + ++toastSeq;\n if (jQuery('#' + opts.id).get(0)) return this;\n\n if (U.left(cfg.containerPosition, '-') == 'bottom') {\n this.toastContainer.append(getContent(opts.id, opts));\n } else {\n this.toastContainer.prepend(getContent(opts.id, opts));\n }\n\n toastBox = jQuery('#' + opts.id);\n toastBox.css({ width: box.width });\n opts.toastBox = toastBox;\n this.queue.push(opts);\n\n onStateChanged.call(this, opts, {\n self: this,\n state: \"open\",\n toastId: opts.id\n });\n\n if (opts.toastType === \"push\") {\n // 자동 제거 타이머 시작\n setTimeout(function () {\n this.close(opts, callBack);\n }.bind(this), cfg.displayTime);\n\n toastBox.find(\"[data-ax-toast-btn]\").on(cfg.clickEventName, function (e) {\n btnOnClick.call(this, e || window.event, opts, toastBox, callBack);\n }.bind(this));\n } else if (opts.toastType === \"confirm\") {\n toastBox.find(\"[data-ax-toast-btn]\").on(cfg.clickEventName, function (e) {\n btnOnClick.call(this, e || window.event, opts, toastBox, callBack);\n }.bind(this));\n }\n\n box = null;\n },\n btnOnClick = function btnOnClick(e, opts, toastBox, callBack, target, k) {\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-ax-toast-btn\")) {\n return true;\n }\n });\n\n if (target) {\n k = target.getAttribute(\"data-ax-toast-btn\");\n\n var that = {\n key: k, value: opts.btns ? opts.btns[k] : k,\n toastId: opts.id,\n btn_target: target\n };\n\n if (opts.btns && opts.btns[k].onClick) {\n opts.btns[k].onClick.call(that, k);\n } else if (opts.toastType === \"push\") {\n if (callBack) callBack.call(that, k);\n this.close(opts, callBack);\n } else if (opts.toastType === \"confirm\") {\n if (callBack) callBack.call(that, k);\n this.close(opts, callBack);\n }\n }\n\n e = null;\n opts = null;\n toastBox = null;\n callBack = null;\n target = null;\n k = null;\n };\n\n /**\n * Preferences of toast UI\n * @method ax5toast.set_config\n * @param {Object} config - 클래스 속성값\n * @returns {ax5toast}\n * @example\n * ```\n * ```\n */\n //== class body start\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n // after set_config();\n self.containerId = ax5.getGuid();\n var styles = [];\n if (cfg.zIndex) {\n styles.push(\"z-index:\" + cfg.zIndex);\n }\n jQuery(document.body).append('<div class=\"ax5-ui-toast-container ' + cfg.containerPosition + '\" data-toast-container=\"' + '' + self.containerId + '\" style=\"' + styles.join(\";\") + '\"></div>');\n this.toastContainer = jQuery('[data-toast-container=\"' + self.containerId + '\"]');\n };\n\n /**\n * @method ax5toast.push\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n this.push = function (opts, callBack) {\n if (!self.containerId) {\n this.init();\n }\n if (U.isString(opts)) {\n opts = {\n title: cfg.title,\n msg: opts\n };\n }\n opts.toastType = \"push\";\n\n self.dialogConfig = {};\n jQuery.extend(true, self.dialogConfig, cfg, opts);\n opts = self.dialogConfig;\n\n open.call(this, opts, callBack);\n\n opts = null;\n callBack = null;\n return this;\n };\n\n /**\n * @method ax5toast.confirm\n * @param opts\n * @param callBack\n * @returns {ax5toast}\n */\n this.confirm = function (opts, callBack) {\n if (!self.containerId) {\n this.init();\n }\n if (U.isString(opts)) {\n opts = {\n title: cfg.title,\n msg: opts\n };\n }\n opts.toastType = \"confirm\";\n\n self.dialogConfig = {};\n jQuery.extend(true, self.dialogConfig, cfg, opts);\n opts = self.dialogConfig;\n\n if (typeof opts.btns === \"undefined\") {\n opts.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: opts.theme }\n };\n }\n open.call(this, opts, callBack);\n\n opts = null;\n callBack = null;\n return this;\n };\n\n /**\n * close the toast\n * @method ax5toast.close\n * @returns {ax5toast}\n * @example\n * ```\n * my_toast.close();\n * ```\n */\n this.close = function (opts, callBack) {\n if (typeof opts === \"undefined\") {\n opts = U.last(this.queue);\n }\n\n var toastBox = opts.toastBox;\n toastBox.addClass(opts.toastType == \"push\" ? \"removed\" : \"destroy\");\n this.queue = U.filter(this.queue, function () {\n return opts.id != this.id;\n });\n setTimeout(function () {\n var that = {\n toastId: opts.id\n };\n\n toastBox.remove();\n if (callBack) callBack.call(that);\n\n that = {\n self: this,\n state: \"close\",\n toastId: opts.id\n };\n onStateChanged.call(this, opts, that);\n\n // 3초후에도 아무 일이 없다면 완전히 제거\n if (this.queue.length === 0) {\n if (toastSeqClear) clearTimeout(toastSeqClear);\n toastSeqClear = setTimeout(function () {\n /// console.log(\"try clear seq\");\n if (this.queue.length === 0) toastSeq = 0;\n }.bind(this), 3000);\n }\n\n that = null;\n opts = null;\n callBack = null;\n toastBox = null;\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n // 클래스 생성자\n this.main = function () {\n\n UI.toast_instance = UI.toast_instance || [];\n UI.toast_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n return ax5toast;\n }());\n TOAST = ax5.ui.toast;\n})();\n// ax5.ui.toast.tmpl\n(function () {\n\n var TOAST = ax5.ui.toast;\n\n var toastDisplay = function toastDisplay(columnKeys) {\n return \"\\n <div id=\\\"{{toastId}}\\\" data-ax5-ui=\\\"toast\\\" class=\\\"ax5-ui-toast {{theme}}\\\">\\n {{#icon}}\\n <div class=\\\"ax-toast-icon\\\">{{{.}}}</div>\\n {{/icon}}\\n <div class=\\\"ax-toast-body\\\">{{{msg}}}</div>\\n {{#btns}}\\n <div class=\\\"ax-toast-buttons\\\">\\n <div class=\\\"ax-button-wrap\\\">\\n {{#@each}}\\n <button type=\\\"button\\\" data-ax-toast-btn=\\\"{{@key}}\\\" class=\\\"btn btn-{{@value.theme}}\\\">{{{@value.label}}}</button>\\n {{/@each}}\\n </div>\\n </div>\\n {{/btns}}\\n {{^btns}}\\n <a class=\\\"ax-toast-close\\\" data-ax-toast-btn=\\\"ok\\\">{{{closeIcon}}}</a>\\n {{/btns}}\\n <div style=\\\"clear:both;\\\"></div>\\n </div>\";\n };\n\n TOAST.tmpl = {\n \"toastDisplay\": toastDisplay,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(TOAST.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.calendar\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var CALENDAR = void 0;\n\n UI.addClass({\n className: \"calendar\"\n }, function () {\n\n /**\n * @class ax5calendar\n * @classdesc\n * @author tom@axisj.com\n * @logs\n * 2014-06-21 tom : 시작\n * @example\n * ```js\n * ax5.info.months = [\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\"];\n * ax5.info.weekNames = [\n * {label: \"일\"},\n * {label: \"월\"},\n * {label: \"화\"},\n * {label: \"수\"},\n * {label: \"목\"},\n * {label: \"금\"},\n * {label: \"토\"}\n * ];\n *\n * var myCalendar = new ax5.ui.calendar({\n * control: {\n * left: '≪',\n * yearTmpl: '%s',\n * monthTmpl: '%s',\n * right: '≫',\n * yearFirst: true\n * },\n *\n * dimensions: {\n * itemPadding: 1,\n * height: 200\n * },\n *\n * target: document.getElementById(\"calendar-target\"),\n * displayDate: (new Date()),\n * mode: \"day\",\n * selectMode: \"day\",\n *\n * marker: (function () {\n * var marker = {};\n * marker[_c_date(today, {'return': 'yyyy-MM-dd', 'add': {d: -1}})] = true;\n * marker[_c_date(today, {'return': 'yyyy-MM-dd', 'add': {d: 0}})] = true;\n * marker[_c_date(today, {'return': 'yyyy-MM-dd', 'add': {d: 1}})] = true;\n *\n * return marker;\n * })(),\n * onClick: function () {\n * console.log(myCalendar.getSelection());\n * },\n * onStateChanged: function () {\n * console.log(this);\n * }\n * , multipleSelect: 2\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0,\n selectableCount = 1;\n\n this.instanceId = ax5.getGuid();\n this.target = null;\n this.selection = [];\n this.selectionMap = {};\n this.selectableMap = {};\n this.markerMap = {};\n this.printedDay = {\n start: \"\", end: \"\"\n };\n this.config = {\n clickEventName: \"click\",\n theme: 'default',\n startOfWeek: 0,\n mode: 'day', // day|month|year,\n dateFormat: 'yyyy-MM-dd',\n displayDate: new Date(),\n animateTime: 100,\n dimensions: {\n controlHeight: '40',\n controlButtonWidth: '40',\n colHeadHeight: '30',\n itemPadding: 2\n },\n lang: {\n yearHeading: \"Choose the year\",\n monthHeading: \"Choose the month\",\n yearTmpl: \"%s\",\n months: ax5.info.months || ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],\n dayTmpl: \"%s\"\n },\n multipleSelect: false,\n selectMode: 'day',\n defaultMarkerTheme: 'holiday',\n defaultPeriodTheme: 'period'\n };\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(opts, that) {\n if (opts && opts.onStateChanged) {\n opts.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n\n that = null;\n };\n var getFrame = function getFrame() {\n var data = jQuery.extend(true, {}, cfg, {\n controlCSS: {},\n controlButtonCSS: {}\n });\n\n data.controlButtonCSS[\"height\"] = data.controlCSS[\"height\"] = U.cssNumber(cfg.dimensions.controlHeight);\n data.controlButtonCSS[\"line-height\"] = data.controlCSS[\"line-height\"] = U.cssNumber(cfg.dimensions.controlHeight);\n data.controlButtonCSS[\"width\"] = U.cssNumber(cfg.dimensions.controlHeight);\n\n data.controlCSS = U.css(data.controlCSS);\n data.controlButtonCSS = U.css(data.controlButtonCSS);\n\n try {\n return CALENDAR.tmpl.get.call(this, \"frameTmpl\", data);\n } finally {\n data = null;\n }\n };\n var setDisplay = function setDisplay() {\n var myDate = U.date(cfg.displayDate),\n yy = \"\",\n mm = \"\",\n yy1,\n yy2;\n\n if (cfg.control) {\n if (cfg.mode == \"day\" || cfg.mode == \"d\") {\n yy = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', myDate.getFullYear()) : myDate.getFullYear();\n mm = cfg.control.monthTmpl ? cfg.control.monthTmpl.replace('%s', cfg.lang.months[myDate.getMonth()]) : cfg.lang.months[myDate.getMonth()];\n\n this.$[\"control-display\"].html(function () {\n if (cfg.control.yearFirst) {\n return '<span data-calendar-display=\"year\">' + yy + '</span>' + '<span data-calendar-display=\"month\">' + mm + '</span>';\n } else {\n return '<span data-calendar-display=\"month\">' + mm + '</span>' + '<span data-calendar-display=\"year\">' + yy + '</span>';\n }\n }());\n } else if (cfg.mode == \"month\" || cfg.mode == \"m\") {\n yy = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', myDate.getFullYear()) : myDate.getFullYear();\n this.$[\"control-display\"].html('<span data-calendar-display=\"year\">' + yy + '</span>');\n } else if (cfg.mode == \"year\" || cfg.mode == \"y\") {\n yy1 = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', myDate.getFullYear() - 10) : myDate.getFullYear() - 10;\n yy2 = cfg.control.yearTmpl ? cfg.control.yearTmpl.replace('%s', Number(myDate.getFullYear()) + 9) : Number(myDate.getFullYear()) + 9;\n this.$[\"control-display\"].html(yy1 + ' ~ ' + yy2);\n }\n\n this.$[\"control-display\"].find('[data-calendar-display]').on(cfg.clickEventName, function (e) {\n var target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-calendar-display\")) {\n return true;\n }\n }),\n mode;\n if (target) {\n mode = target.getAttribute(\"data-calendar-display\");\n this.changeMode(mode);\n }\n target = null;\n mode = null;\n }.bind(this));\n }\n\n myDate = null;\n yy = null;\n mm = null;\n yy1 = null;\n yy2 = null;\n return this;\n };\n var printDay = function printDay(nowDate) {\n var dotDate = U.date(nowDate),\n monthStratDate = new Date(dotDate.getFullYear(), dotDate.getMonth(), 1, 12),\n _today = cfg.displayDate,\n tableStartDate = function () {\n var day = monthStratDate.getDay();\n if (day == 0) day = 7;\n day -= cfg.startOfWeek;\n\n try {\n return U.date(monthStratDate, { add: { d: -day } });\n } finally {\n day = null;\n }\n }(),\n loopDate,\n thisMonth = dotDate.getMonth(),\n itemStyles = {},\n i,\n k,\n _k,\n frameWidth = this.$[\"body\"].width(),\n frameHeight = Math.floor(frameWidth * (6 / 7)),\n // 1week = 7days, 1month = 6weeks\n data,\n tmpl;\n\n if (cfg.dimensions.height) {\n frameHeight = U.number(cfg.dimensions.height) - U.number(cfg.dimensions.colHeadHeight);\n }\n\n itemStyles['height'] = Math.floor(frameHeight / 6) - U.number(cfg.dimensions.itemPadding) * 2 + 'px';\n itemStyles['line-height'] = itemStyles['height'];\n itemStyles['padding'] = U.cssNumber(cfg.dimensions.itemPadding);\n\n data = {\n weekNames: [].concat(ax5.info.weekNames),\n list: []\n };\n\n if (cfg.startOfWeek) {\n data.weekNames = data.weekNames.concat(data.weekNames.slice(0, cfg.startOfWeek)).splice(cfg.startOfWeek);\n }\n\n data.weekNames.forEach(function (n) {\n n.colHeadHeight = U.cssNumber(cfg.dimensions.colHeadHeight);\n });\n\n loopDate = tableStartDate;\n i = 0;\n while (i < 6) {\n k = 0;\n while (k < 7) {\n _k = (7 + (k - cfg.startOfWeek)) % 7;\n var thisDate = '' + U.date(loopDate, { \"return\": cfg.dateFormat }),\n _date = {\n 'row': i,\n 'col': k,\n isStartOfWeek: k == 0,\n thisDate: '' + thisDate,\n thisDataLabel: cfg.lang.dayTmpl.replace('%s', loopDate.getDate()),\n itemStyles: U.css(itemStyles),\n addClass: function () {\n\n var classNames = \"\";\n\n if (cfg.selectable) {\n if (self.selectableMap[thisDate]) {\n classNames += loopDate.getMonth() == thisMonth ? \" live\" : \"\";\n } else {\n classNames += \" disable\";\n }\n } else {\n if (loopDate.getMonth() == thisMonth) {\n if (thisDate == U.date(_today, { \"return\": \"yyyyMMdd\" })) {\n classNames += \" focus\";\n } else {\n classNames += \" live\";\n }\n\n if (loopDate.getDay() == 0) {\n classNames += \" sunday\";\n }\n if (loopDate.getDay() == 6) {\n classNames += \" saturday\";\n }\n }\n }\n\n return classNames;\n }() + ' ' + function () {\n return self.markerMap[thisDate] ? self.markerMap[thisDate].theme || cfg.defaultMarkerTheme : '';\n }() + ' ' + function () {\n return self.selectionMap[thisDate] ? \"selected-day\" : '';\n }()\n };\n data.list.push(_date);\n\n k++;\n loopDate = U.date(loopDate, { add: { d: 1 } });\n\n thisDate = null;\n _date = null;\n }\n i++;\n }\n tmpl = CALENDAR.tmpl.get.call(this, \"dayTmpl\", data);\n this.$[\"body\"].html(tmpl);\n this.$[\"body\"].find('[data-calendar-item-date]').on(cfg.clickEventName, function (e) {\n e = e || window.event;\n onclick.call(self, e, 'date');\n U.stopEvent(e);\n });\n\n this.printedDay = {\n start: tableStartDate, end: loopDate\n };\n\n onStateChanged.call(this, null, {\n self: this,\n action: \"printDay\",\n printedDay: this.printedDay\n });\n setDisplay.call(this);\n\n dotDate = null;\n monthStratDate = null;\n _today = null;\n tableStartDate = null;\n loopDate = null;\n thisMonth = null;\n itemStyles = null;\n i = null;\n k = null;\n frameWidth = null;\n frameHeight = null;\n data = null;\n tmpl = null;\n };\n var printMonth = function printMonth(nowDate) {\n var dotDate = U.date(nowDate),\n nMonth = dotDate.getMonth(),\n itemStyles = {},\n i,\n k,\n m,\n tableStartMonth,\n frameWidth = this.$[\"body\"].width(),\n frameHeight = Math.floor(frameWidth * (6 / 7)),\n data,\n tmpl;\n\n if (cfg.dimensions.height) {\n frameHeight = U.number(cfg.dimensions.height) - U.number(cfg.dimensions.colHeadHeight);\n }\n\n itemStyles['height'] = Math.floor(frameHeight / 4) - U.number(cfg.dimensions.itemPadding) * 2 + 'px';\n itemStyles['line-height'] = itemStyles['height'];\n itemStyles['padding'] = U.cssNumber(cfg.dimensions.itemPadding);\n\n data = {\n colHeadHeight: U.cssNumber(cfg.dimensions.colHeadHeight),\n colHeadLabel: cfg.lang.monthHeading,\n list: []\n };\n\n tableStartMonth = 0;\n m = 0;\n i = 0;\n while (i < 4) {\n k = 0;\n while (k < 3) {\n var _month = {\n row: i,\n col: k,\n isStartOfRow: k == 0,\n thisMonth: dotDate.getFullYear() + '-' + U.setDigit(m + 1, 2) + '-01', // + U.setDigit(dotDate.getDate(), 2),\n thisMonthLabel: cfg.lang.months[m],\n itemStyles: U.css(itemStyles),\n addClass: function () {\n if (cfg.selectable) {\n return self.selectableMap[m] ? 'live' : 'disable';\n } else {\n return 'live';\n }\n }() + ' ' + function () {\n return m == nMonth ? \"focus\" : \"\";\n }() + ' ' + function () {\n return self.markerMap[m] ? self.markerMap[m].theme || cfg.defaultMarkerTheme : '';\n }()\n };\n data.list.push(_month);\n m++;\n k++;\n _month = null;\n }\n i++;\n }\n tmpl = CALENDAR.tmpl.get.call(this, \"monthTmpl\", data);\n this.$[\"body\"].html(tmpl);\n this.$[\"body\"].find('[data-calendar-item-month]').on(cfg.clickEventName, function (e) {\n e = e || window.event;\n onclick.call(self, e, 'month');\n U.stopEvent(e);\n });\n\n this.printedDay = {\n start: dotDate.getFullYear() + '-' + U.setDigit(tableStartMonth + 1, 2),\n end: dotDate.getFullYear() + '-' + U.setDigit(m, 2)\n };\n\n onStateChanged.call(this, null, {\n self: this,\n action: \"printMonth\",\n printedDay: this.printedDay\n });\n setDisplay.call(this);\n\n dotDate = null;\n nMonth = null;\n itemStyles = null;\n i = null;\n k = null;\n m = null;\n tableStartMonth = null;\n frameWidth = null;\n frameHeight = null;\n data = null;\n tmpl = null;\n };\n var printYear = function printYear(nowDate) {\n var dotDate = U.date(nowDate),\n nYear = dotDate.getFullYear(),\n itemStyles = {},\n i,\n k,\n y,\n tableStartYear,\n frameWidth = this.$[\"body\"].width(),\n frameHeight = Math.floor(frameWidth * (6 / 7)),\n data,\n tmpl;\n\n if (cfg.dimensions.height) {\n frameHeight = U.number(cfg.dimensions.height) - U.number(cfg.dimensions.colHeadHeight);\n }\n\n itemStyles['height'] = Math.floor(frameHeight / 5) - U.number(cfg.dimensions.itemPadding) * 2 + 'px';\n itemStyles['line-height'] = itemStyles['height'];\n itemStyles['padding'] = U.cssNumber(cfg.dimensions.itemPadding);\n\n data = {\n colHeadHeight: U.cssNumber(cfg.dimensions.colHeadHeight),\n colHeadLabel: cfg.lang.yearHeading,\n list: []\n };\n\n tableStartYear = nYear - 10;\n y = nYear - 10;\n i = 0;\n while (i < 5) {\n k = 0;\n while (k < 4) {\n var _year = {\n row: i,\n col: k,\n isStartOfRow: k == 0,\n thisYear: y + '-' + U.setDigit(dotDate.getMonth() + 1, 2) + '-01', // + U.setDigit(dotDate.getDate(), 2),\n thisYearLabel: cfg.lang.yearTmpl.replace('%s', y),\n itemStyles: U.css(itemStyles),\n addClass: function () {\n if (cfg.selectable) {\n return self.selectableMap[y] ? 'live' : 'disable';\n } else {\n return 'live';\n }\n }() + ' ' + function () {\n return y == nYear ? \"focus\" : \"\";\n }() + ' ' + function () {\n return self.selectableMap[y] ? self.selectableMap[y].theme || cfg.defaultMarkerTheme : '';\n }()\n };\n data.list.push(_year);\n y++;\n k++;\n _year = null;\n }\n i++;\n }\n tmpl = CALENDAR.tmpl.get.call(this, \"yearTmpl\", data);\n this.$[\"body\"].html(tmpl);\n this.$[\"body\"].find('[data-calendar-item-year]').on(cfg.clickEventName, function (e) {\n e = e || window.event;\n onclick.call(this, e, 'year');\n U.stopEvent(e);\n });\n\n this.printedDay = {\n start: tableStartYear, end: y - 1\n };\n\n onStateChanged.call(this, null, {\n self: this,\n action: \"printYear\",\n printedDay: this.printedDay\n });\n setDisplay.call(this);\n\n dotDate = null;\n nYear = null;\n itemStyles = null;\n i = null;\n k = null;\n y = null;\n tableStartYear = null;\n frameWidth = null;\n frameHeight = null;\n data = null;\n tmpl = null;\n };\n var onclick = function onclick(e, mode, target, value) {\n var removed, dt, selectable;\n\n mode = mode || \"date\";\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-calendar-item-\" + mode)) {\n return true;\n }\n });\n if (target) {\n value = target.getAttribute(\"data-calendar-item-\" + mode);\n\n dt = U.date(value, { \"return\": cfg.dateFormat });\n selectable = true;\n selectableCount = cfg.multipleSelect ? U.isNumber(cfg.multipleSelect) ? cfg.multipleSelect : 2 : 1;\n\n if (cfg.selectable) {\n if (!self.selectableMap[dt]) selectable = false;\n }\n\n if (mode == \"date\") {\n if (selectable) {\n\n if (self.selection.length >= selectableCount) {\n removed = self.selection.splice(0, self.selection.length - (selectableCount - 1));\n removed.forEach(function (d) {\n self.$[\"body\"].find('[data-calendar-item-date=\"' + U.date(d, { \"return\": cfg.dateFormat }) + '\"]').removeClass(\"selected-day\");\n });\n }\n\n jQuery(target).addClass(\"selected-day\");\n self.selection.push(value);\n\n if (self.onClick) {\n self.onClick.call({\n self: this, date: value, target: this.target, dateElement: target\n });\n }\n }\n } else if (mode == \"month\") {\n if (cfg.selectMode == \"month\") {\n if (selectable) {\n if (self.selection.length >= selectableCount) {\n removed = self.selection.splice(0, self.selection.length - (selectableCount - 1));\n removed.forEach(function (d) {\n self.$[\"body\"].find('[data-calendar-item-month=\"' + U.date(d, { \"return\": 'yyyy-MM-dd' }) + '\"]').removeClass(\"selected-month\");\n });\n }\n\n jQuery(target).addClass(\"selected-month\");\n self.selection.push(value);\n\n if (self.onClick) {\n self.onClick.call({\n self: this, date: value, target: this.target, dateElement: target\n });\n }\n }\n } else {\n self.changeMode(\"day\", value);\n }\n } else if (mode == \"year\") {\n if (cfg.selectMode == \"year\") {\n if (selectable) {\n if (self.selection.length >= selectableCount) {\n removed = self.selection.splice(0, self.selection.length - (selectableCount - 1));\n removed.forEach(function (d) {\n self.$[\"body\"].find('[data-calendar-item-year=\"' + U.date(d, { \"return\": 'yyyy-MM-dd' }) + '\"]').removeClass(\"selected-year\");\n });\n }\n\n jQuery(target).addClass(\"selected-year\");\n self.selection.push(value);\n\n if (self.onClick) {\n self.onClick.call({\n self: this, date: value, target: this.target, dateElement: target\n });\n }\n }\n } else {\n self.changeMode(\"month\", value);\n }\n }\n }\n\n mode = null;\n target = null;\n value = null;\n removed = null;\n dt = null;\n selectable = null;\n };\n var move = function move(e, target, value) {\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-calendar-move\")) {\n return true;\n }\n });\n if (target) {\n value = target.getAttribute(\"data-calendar-move\");\n if (cfg.mode == \"day\" || cfg.mode == \"d\") {\n if (value == \"left\") {\n cfg.displayDate = U.date(cfg.displayDate, { add: { m: -1 } });\n } else {\n cfg.displayDate = U.date(cfg.displayDate, { add: { m: 1 } });\n }\n printDay.call(this, cfg.displayDate);\n } else if (cfg.mode == \"month\" || cfg.mode == \"m\") {\n if (value == \"left\") {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: -1 } });\n } else {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: 1 } });\n }\n printMonth.call(this, cfg.displayDate);\n } else if (cfg.mode == \"year\" || cfg.mode == \"y\") {\n if (value == \"left\") {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: -10 } });\n } else {\n cfg.displayDate = U.date(cfg.displayDate, { add: { y: 10 } });\n }\n printYear.call(this, cfg.displayDate);\n }\n }\n\n target = null;\n value = null;\n };\n var applyMarkerMap = function applyMarkerMap() {\n setTimeout(function () {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n for (var k in this.markerMap) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').addClass(this.markerMap[k].theme || cfg.defaultMarkerTheme);\n }\n }\n }.bind(this));\n };\n var applySelectionMap = function applySelectionMap() {\n setTimeout(function () {\n for (var k in this.selectionMap) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').addClass(\"selected-day\");\n }\n }.bind(this));\n };\n var applyPeriodMap = function applyPeriodMap() {\n setTimeout(function () {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n for (var k in this.periodMap) {\n if (this.periodMap[k].label) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').find(\".addon-footer\").html(this.periodMap[k].label);\n }\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').addClass(this.periodMap[k].theme);\n }\n }\n }.bind(this));\n };\n var clearPeriodMap = function clearPeriodMap() {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n for (var k in this.periodMap) {\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').find(\".addon-footer\").empty();\n this.$[\"body\"].find('[data-calendar-item-date=\"' + k + '\"]').removeClass(this.periodMap[k].theme);\n }\n }\n };\n\n /**\n * Preferences of calendar UI\n * @method ax5calendar.setConfig\n * @param {Object} config - 클래스 속성값\n * @param {Element|nodelist} config.target\n * @param {String} [config.mode=day|month|year]\n * @param {Function} [config.onClick}\n * @returns {ax5calendar}\n * @example\n * ```js\n * var myCalendar = new ax5.ui.calendar();\n * myCalendar.setConfig({\n * target: $(\"#target\"),\n * mode: \"day\"\n * });\n * ```\n */\n //== class body start\n this.init = function () {\n // after setConfig();\n\n this.onStateChanged = cfg.onStateChanged;\n this.onClick = cfg.onClick;\n\n if (!cfg.target) {\n console.log(ax5.info.getError(\"ax5calendar\", \"401\", \"setConfig\"));\n }\n this.target = jQuery(cfg.target);\n\n cfg.displayDate = U.date(cfg.displayDate);\n this.target.html(getFrame.call(this));\n\n // 파트수집\n this.$ = {\n \"root\": this.target.find('[data-calendar-els=\"root\"]'),\n \"control\": this.target.find('[data-calendar-els=\"control\"]'),\n \"control-display\": this.target.find('[data-calendar-els=\"control-display\"]'),\n \"body\": this.target.find('[data-calendar-els=\"body\"]')\n };\n\n if (cfg.control) {\n this.$[\"root\"].on(cfg.clickEventName, '[data-calendar-move]', function (e) {\n move.call(this, e || window.event);\n }.bind(this));\n }\n\n // collect selectableMap\n if (cfg.selection) {\n this.setSelection(cfg.selection, false);\n }\n // collect selectableMap\n if (cfg.selectable) {\n this.setSelectable(cfg.selectable, false);\n }\n // collect markerMap\n if (cfg.marker) {\n this.setMarker(cfg.marker, false);\n }\n\n setTimeout(function () {\n if (cfg.mode === \"day\" || cfg.mode === \"d\") {\n printDay.call(this, cfg.displayDate);\n } else if (cfg.mode === \"month\" || cfg.mode === \"m\") {\n printMonth.call(this, cfg.displayDate);\n } else if (cfg.mode === \"year\" || cfg.mode === \"y\") {\n printYear.call(this, cfg.displayDate);\n }\n }.bind(this));\n };\n\n /**\n * @method ax5calendar.changeMode\n * @param {String} mode\n * @param {String} changeDate\n * @returns {ax5calendar}\n */\n this.changeMode = function (mode, changeDate) {\n if (typeof changeDate != \"undefined\") cfg.displayDate = changeDate;\n if (mode) cfg.mode = mode;\n\n this.$[\"body\"].removeClass(\"fadein\").addClass(\"fadeout\");\n setTimeout(function () {\n if (cfg.mode == \"day\" || cfg.mode == \"d\") {\n printDay.call(this, cfg.displayDate);\n } else if (cfg.mode == \"month\" || cfg.mode == \"m\") {\n printMonth.call(this, cfg.displayDate);\n } else if (cfg.mode == \"year\" || cfg.mode == \"y\") {\n printYear.call(this, cfg.displayDate);\n }\n this.$[\"body\"].removeClass(\"fadeout\").addClass(\"fadein\");\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n /**\n * @method ax5calendar.setSelection\n * @param {Array} selection\n * @returns {ax5calendar}\n * @example\n * ```\n *\n * ```\n */\n this.setSelection = function () {\n self.selectionMap = {};\n var processor = {\n 'arr': function arr(v, map, count) {\n map = {};\n if (!U.isArray(v)) return map;\n self.selection = v = v.splice(0, count);\n v.forEach(function (n) {\n if (U.isDate(n)) n = U.date(n, { 'return': cfg.dateFormat });\n map[n] = true;\n });\n return map;\n }\n };\n\n return function (selection, isPrint) {\n var result = {};\n selectableCount = cfg.multipleSelect ? U.isNumber(cfg.multipleSelect) ? cfg.multipleSelect : 2 : 1;\n\n if (cfg.selection = selection) {\n if (U.isArray(selection)) {\n result = processor.arr(selection, {}, selectableCount);\n } else {\n return this;\n }\n }\n\n this.selectionMap = jQuery.extend({}, result);\n // 변경내용 적용하여 출력\n\n if (isPrint !== false) applySelectionMap.call(this);\n\n result = null;\n\n return this;\n };\n }();\n\n /**\n * @method ax5calendar.getSelection\n */\n this.getSelection = function () {\n return this.selection;\n };\n\n /**\n * @method ax5calendar.setSelectable\n */\n this.setSelectable = function () {\n self.selectableMap = {};\n var processor = {\n 'arr': function arr(v, map) {\n map = {};\n if (!U.isArray(v)) return map;\n v.forEach(function (n) {\n if (U.isDate(n)) n = U.date(n, { 'return': cfg.dateFormat });\n map[n] = true;\n });\n return map;\n },\n 'obj': function obj(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (v.range) return map;\n for (var k in v) {\n map[k] = v[k];\n }\n return map;\n },\n 'range': function range(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (!v.range) return map;\n\n v.range.forEach(function (n) {\n if (U.isDateFormat(n.from) && U.isDateFormat(n.to)) {\n for (var d = U.date(n.from); d <= U.date(n.to); d.setDate(d.getDate() + 1)) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = true;\n }\n } else {\n for (var i = n.from; i <= n.to; i++) {\n map[i] = true;\n }\n }\n });\n\n return map;\n }\n };\n\n return function (selectable, isPrint) {\n\n var key,\n result = {};\n\n if (cfg.selectable = selectable) {\n if (U.isArray(selectable)) {\n result = processor.arr(selectable);\n } else {\n for (key in processor) {\n if (selectable[key]) {\n result = processor[key](selectable);\n break;\n }\n }\n if (Object.keys(result).length === 0) {\n result = processor.obj(selectable);\n }\n }\n }\n\n this.selectableMap = result;\n // 변경내용 적용하여 출력\n if (isPrint !== false) this.changeMode();\n\n return this;\n };\n }();\n\n /**\n * @method ax5calendar.setMarker\n */\n this.setMarker = function () {\n self.markerMap = {};\n var processor = {\n 'obj': function obj(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (v.range) return map;\n for (var k in v) {\n map[k] = v[k];\n }\n\n v = null;\n return map;\n },\n 'range': function range(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (!v.range) return map;\n\n v.range.forEach(function (n) {\n if (U.isDateFormat(n.from) && U.isDateFormat(n.to)) {\n for (var d = U.date(n.from); d <= U.date(n.to); d.setDate(d.getDate() + 1)) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme, label: n.label };\n }\n } else {\n for (var i = n.from; i <= n.to; i++) {\n map[i] = { theme: n.theme, label: n.label };\n }\n }\n });\n\n v = null;\n return map;\n }\n };\n\n return function (marker, isApply) {\n\n var key,\n result = {};\n\n if (cfg.marker = marker) {\n for (key in processor) {\n if (marker[key]) {\n result = processor[key](marker);\n break;\n }\n }\n if (Object.keys(result).length === 0) {\n result = processor.obj(marker);\n }\n }\n\n this.markerMap = result;\n // 변경내용 적용하여 출력\n if (isApply !== false) applyMarkerMap.call(this);\n return this;\n };\n }();\n\n /**\n * @method ax5calendar.setPeriod\n */\n this.setPeriod = function () {\n self.periodMap = {};\n\n var processor = {\n 'range': function range(v, map) {\n map = {};\n if (U.isArray(v)) return map;\n if (!v.range) return map;\n\n v.range.forEach(function (n) {\n if (U.isDateFormat(n.from) && U.isDateFormat(n.to)) {\n for (var d = new Date(U.date(n.from)); d <= U.date(n.to); d.setDate(d.getDate() + 1)) {\n if (d.getTime() == U.date(n.from).getTime()) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme || cfg.defaultPeriodTheme, label: n.fromLabel };\n } else if (d.getTime() == U.date(n.to).getTime()) {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme || cfg.defaultPeriodTheme, label: n.toLabel };\n } else {\n map[U.date(d, { \"return\": cfg.dateFormat })] = { theme: n.theme || cfg.defaultPeriodTheme };\n }\n }\n }\n });\n\n v = null;\n return map;\n }\n };\n\n return function (period, isApply) {\n\n var key,\n result = {};\n\n // 변경내용 적용하여 출력\n if (isApply !== false) {\n clearPeriodMap.call(this);\n }\n\n if (cfg.period = period) {\n result = processor.range(period);\n }\n\n this.periodMap = result;\n\n //console.log(this.periodMap);\n\n // 변경내용 적용하여 출력\n if (isApply !== false) {\n applyPeriodMap.call(this);\n }\n return this;\n };\n }();\n\n // 클래스 생성자\n this.main = function () {\n\n UI.calendar_instance = UI.calendar_instance || [];\n UI.calendar_instance.push(this);\n\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n CALENDAR = ax5.ui.calendar;\n})();\n// ax5.ui.calendar.tmpl\n(function () {\n\n var CALENDAR = ax5.ui.calendar;\n\n var frameTmpl = function frameTmpl(columnKeys) {\n return \"\\n <div class=\\\"ax5-ui-calendar {{theme}}\\\" data-calendar-els=\\\"root\\\" onselectstart=\\\"return false;\\\">\\n {{#control}}\\n <div class=\\\"calendar-control\\\" data-calendar-els=\\\"control\\\" style=\\\"{{controlCSS}}\\\">\\n <a class=\\\"date-move-left\\\" data-calendar-move=\\\"left\\\" style=\\\"{{controlButtonCSS}}\\\">{{{left}}}</a>\\n <div class=\\\"date-display\\\" data-calendar-els=\\\"control-display\\\" style=\\\"{{controlCSS}}\\\"></div>\\n <a class=\\\"date-move-right\\\" data-calendar-move=\\\"right\\\" style=\\\"{{controlButtonCSS}}\\\">{{{right}}}</a>\\n </div>\\n {{/control}}\\n <div class=\\\"calendar-body\\\" data-calendar-els=\\\"body\\\"></div>\\n </div>\\n \";\n };\n var dayTmpl = function dayTmpl(columnKeys) {\n return \"\\n <table data-calendar-table=\\\"day\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" style=\\\"width:100%;\\\">\\n <thead>\\n <tr>\\n {{#weekNames}}\\n <td class=\\\"calendar-col-{{col}}\\\" style=\\\"height: {{colHeadHeight}}\\\">\\n {{label}}\\n </td>\\n {{/weekNames}}\\n </tr>\\n </thead>\\n <tbody>\\n <tr>\\n {{#list}} \\n {{#isStartOfWeek}}\\n {{^@first}}\\n </tr>\\n <tr>\\n {{/@first}}\\n {{/isStartOfWeek}}\\n <td class=\\\"calendar-col-{{col}}\\\" style=\\\"{{itemStyles}}\\\">\\n <a class=\\\"calendar-item-day {{addClass}}\\\" data-calendar-item-date=\\\"{{thisDate}}\\\">\\n <span class=\\\"addon addon-header\\\"></span>\\n {{thisDataLabel}}\\n <span class=\\\"addon addon-footer\\\"></span>\\n </a>\\n </td>\\n {{/list}}\\n </tr>\\n </tbody>\\n </table>\\n \";\n };\n var monthTmpl = function monthTmpl(columnKeys) {\n return \"\\n <table data-calendar-table=\\\"month\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" style=\\\"width:100%;\\\">\\n <thead>\\n <tr>\\n <td class=\\\"calendar-col-0\\\" colspan=\\\"3\\\" style=\\\"height: {{colHeadHeight}}\\\">\\n {{colHeadLabel}}\\n </td>\\n </tr>\\n </thead>\\n <tbody>\\n <tr>\\n {{#list}} \\n {{#isStartOfRow}}\\n {{^@first}}\\n </tr>\\n <tr>\\n {{/@first}}\\n {{/isStartOfRow}}\\n <td class=\\\"calendar-col-{{col}}\\\" style=\\\"{{itemStyles}}\\\">\\n <a class=\\\"calendar-item-month {{addClass}}\\\" data-calendar-item-month=\\\"{{thisMonth}}\\\">\\n <span class=\\\"addon\\\"></span>\\n {{thisMonthLabel}}\\n <span class=\\\"lunar\\\"></span>\\n </a>\\n </td>\\n {{/list}}\\n </tr>\\n </tbody>\\n </table>\\n \";\n };\n var yearTmpl = function yearTmpl(columnKeys) {\n return \"\\n <table data-calendar-table=\\\"year\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" style=\\\"width:100%;\\\">\\n <thead>\\n <tr>\\n <td class=\\\"calendar-col-0\\\" colspan=\\\"4\\\" style=\\\"height: {{colHeadHeight}}\\\">\\n {{colHeadLabel}}\\n </td>\\n </tr>\\n </thead>\\n <tbody>\\n <tr>\\n {{#list}} \\n {{#isStartOfRow}}\\n {{^@first}}\\n </tr>\\n <tr>\\n {{/@first}}\\n {{/isStartOfRow}}\\n <td class=\\\"calendar-col-{{col}}\\\" style=\\\"{{itemStyles}}\\\">\\n <a class=\\\"calendar-item-year {{addClass}}\\\" data-calendar-item-year=\\\"{{thisYear}}\\\">\\n <span class=\\\"addon\\\"></span>\\n {{thisYearLabel}}\\n <span class=\\\"lunar\\\"></span>\\n </a>\\n </td>\\n {{/list}}\\n </tr>\\n </tbody>\\n </table>\\n \";\n };\n\n CALENDAR.tmpl = {\n \"frameTmpl\": frameTmpl,\n \"dayTmpl\": dayTmpl,\n \"monthTmpl\": monthTmpl,\n \"yearTmpl\": yearTmpl,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(CALENDAR.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();","\"use strict\";\n\n// ax5.ui.picker\n(function () {\n\n var UI = ax5.ui;\n var U = ax5.util;\n var PICKER = void 0;\n\n UI.addClass({\n className: \"picker\"\n }, function () {\n /**\n * @class ax5picker\n * @classdesc\n * @author tom@axisj.com\n * @example\n * ```js\n * ax5.def.picker.date_leftArrow = '<i class=\"fa fa-chevron-left\"></i>';\n * ax5.def.picker.date_yearTmpl = '%s';\n * ax5.def.picker.date_monthTmpl = '%s';\n * def.picker.date_rightArrow = '<i class=\"fa fa-chevron-right\"></i>';\n *\n * var picker = new ax5.ui.picker({\n * onStateChanged: function () {\n * console.log(this);\n * }\n * });\n *\n * picker.bind({\n * target: $('[data-picker-date]'),\n * direction: \"auto\",\n * content: {\n * type: 'date',\n * formatter: {\n * pattern: 'date'\n * }\n * }\n * });\n * ```\n */\n return function () {\n var self = this,\n cfg = void 0;\n\n this.instanceId = ax5.getGuid();\n this.config = {\n clickEventName: \"click\", //(('ontouchstart' in document.documentElement) ? \"touchend\" : \"click\"),\n theme: 'default',\n title: '',\n lang: {\n \"ok\": \"ok\",\n \"cancel\": \"cancel\"\n },\n animateTime: 100,\n calendar: {\n multipleSelect: false,\n control: {\n left: ax5.def.picker.date_leftArrow || '&#x02190',\n yearTmpl: ax5.def.picker.date_yearTmpl || '%s',\n monthTmpl: ax5.def.picker.date_monthTmpl || '%s',\n right: ax5.def.picker.date_rightArrow || '&#x02192',\n yearFirst: true\n }\n },\n palette: {}\n };\n this.queue = [];\n this.activePicker = null;\n this.activePickerQueueIndex = -1;\n this.openTimer = null;\n this.closeTimer = null;\n\n cfg = this.config;\n\n var onStateChanged = function onStateChanged(item, that) {\n if (item && item.onStateChanged) {\n item.onStateChanged.call(that, that);\n } else if (this.onStateChanged) {\n this.onStateChanged.call(that, that);\n }\n return true;\n };\n var bindPickerTarget = function () {\n\n var pickerEvent = {\n 'focus': function focus(queIdx, e) {\n this.open(queIdx);\n },\n 'click': function click(queIdx, e) {\n this.open(queIdx);\n }\n };\n\n var pickerType = {\n '@fn': function fn(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n if (inputLength > 1) {\n config.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: cfg.theme }\n };\n }\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'date': function date(queIdx, _input) {\n var item = this.queue[queIdx],\n contentWidth = item.content ? item.content.width || 270 : 270,\n contentMargin = item.content ? item.content.margin || 5 : 5,\n inputLength = _input.length,\n config = {\n contentWidth: contentWidth * inputLength + (inputLength - 1) * contentMargin,\n content: { width: contentWidth, margin: contentMargin },\n inputLength: inputLength || 1\n };\n\n if (inputLength > 1 && !item.btns) {\n config.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: cfg.theme }\n };\n }\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n contentWidth = null;\n contentMargin = null;\n config = null;\n inputLength = null;\n },\n 'secure-num': function secureNum(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'keyboard': function keyboard(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'numpad': function numpad(queIdx, _input) {\n var item = this.queue[queIdx],\n inputLength = _input.length,\n config = {\n inputLength: inputLength || 1\n };\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n config = null;\n inputLength = null;\n },\n 'color': function color(queIdx, _input) {\n var item = this.queue[queIdx],\n contentWidth = item.content ? item.content.width || 270 : 270,\n contentMargin = item.content ? item.content.margin || 5 : 5,\n inputLength = _input.length,\n config = {\n contentWidth: contentWidth * inputLength + (inputLength - 1) * contentMargin,\n content: { width: contentWidth, margin: contentMargin },\n inputLength: inputLength || 1\n },\n $colorPreview = item.$target.find('[data-ax5picker-color=\"preview\"]');\n\n if ($colorPreview.get(0)) {\n $colorPreview.css({ \"background-color\": \"#\" + U.color(_input.val() || \"#000000\").getHexValue() });\n // 컬러 피커인 경우 input의 값이 변경되면 preview를 수정\n _input.on(\"change\", function () {\n $colorPreview.css({ \"background-color\": \"#\" + U.color(this.value || \"#000000\").getHexValue() });\n });\n }\n\n if (inputLength > 1 && !item.btns) {\n config.btns = {\n ok: { label: cfg.lang[\"ok\"], theme: cfg.theme }\n };\n }\n\n this.queue[queIdx] = jQuery.extend(true, config, item);\n\n contentWidth = null;\n contentMargin = null;\n config = null;\n inputLength = null;\n }\n };\n\n return function (queIdx) {\n var item = this.queue[queIdx],\n input = void 0;\n\n if (!item.content) {\n console.log(ax5.info.getError(\"ax5picker\", \"501\", \"bind\"));\n return this;\n }\n\n input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : item.$target.find('input[type]');\n\n // 함수타입\n if (U.isFunction(item.content)) {\n pickerType[\"@fn\"].call(this, queIdx, input);\n } else {\n for (var key in pickerType) {\n if (item.content.type == key) {\n pickerType[key].call(this, queIdx, input);\n break;\n }\n }\n }\n\n input.unbind('focus.ax5picker').unbind('click.ax5picker').bind('focus.ax5picker', pickerEvent.focus.bind(this, queIdx)).bind('click.ax5picker', pickerEvent.click.bind(this, queIdx));\n\n item.$target.find('.input-group-addon').unbind('click.ax5picker').bind('click.ax5picker', pickerEvent.click.bind(this, queIdx));\n\n if (item.content.formatter && ax5.ui.formatter) {\n input.ax5formatter(item.content.formatter);\n }\n\n input = null;\n item = null;\n queIdx = null;\n return this;\n };\n }();\n\n var alignPicker = function alignPicker(append) {\n if (!this.activePicker) return this;\n\n var _alignPicker = function _alignPicker(item) {\n var $window = jQuery(window),\n $body = jQuery(document.body);\n var pos = {},\n positionMargin = 12,\n dim = {},\n pickerDim = {},\n pickerDirection;\n\n pos = item.$target.offset();\n dim = {\n width: item.$target.outerWidth(),\n height: item.$target.outerHeight()\n };\n pickerDim = {\n winWidth: Math.max($window.width(), $body.width()),\n winHeight: Math.max($window.height(), $body.height()),\n width: this.activePicker.outerWidth(),\n height: this.activePicker.outerHeight()\n };\n\n // picker css(width, left, top) & direction 결정\n\n if (!item.direction || item.direction === \"\" || item.direction === \"auto\") {\n // set direction\n pickerDirection = \"top\";\n if (pos.top - pickerDim.height - positionMargin < 0) {\n pickerDirection = \"top\";\n } else if (pos.top + dim.height + pickerDim.height + positionMargin > pickerDim.winHeight) {\n pickerDirection = \"bottom\";\n }\n } else {\n pickerDirection = item.direction;\n }\n\n if (append) {\n this.activePicker.addClass(\"direction-\" + pickerDirection);\n }\n\n var positionCSS = function () {\n var css = { left: 0, top: 0 };\n switch (pickerDirection) {\n case \"top\":\n css.left = pos.left + dim.width / 2 - pickerDim.width / 2;\n css.top = pos.top + dim.height + positionMargin;\n break;\n case \"bottom\":\n css.left = pos.left + dim.width / 2 - pickerDim.width / 2;\n css.top = pos.top - pickerDim.height - positionMargin;\n break;\n case \"left\":\n css.left = pos.left + dim.width + positionMargin;\n css.top = pos.top - pickerDim.height / 2 + dim.height / 2;\n break;\n case \"right\":\n css.left = pos.left - pickerDim.width - positionMargin;\n css.top = pos.top - pickerDim.height / 2 + dim.height / 2;\n break;\n }\n return css;\n }();\n\n (function () {\n if (pickerDirection == \"top\" || pickerDirection == \"bottom\") {\n if (positionCSS.left < 0) {\n positionCSS.left = positionMargin;\n this.activePickerArrow.css({ left: pos.left + dim.width / 2 - positionCSS.left });\n } else if (positionCSS.left + pickerDim.width > pickerDim.winWidth) {\n positionCSS.left = pickerDim.winWidth - pickerDim.width - positionMargin;\n this.activePickerArrow.css({ left: pos.left + dim.width / 2 - positionCSS.left });\n }\n }\n }).call(this);\n\n this.activePicker.css(positionCSS);\n };\n var item = this.queue[this.activePickerQueueIndex];\n\n if (append) {\n this.activePicker.css({ top: -999 });\n jQuery(document.body).append(this.activePicker);\n }\n\n setTimeout(function () {\n _alignPicker.call(this, item);\n }.bind(this));\n };\n\n var onBodyClick = function onBodyClick(e, target) {\n if (!this.activePicker) return this;\n\n var item = this.queue[this.activePickerQueueIndex];\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-picker-els\")) {\n return true;\n } else if (item.$target.get(0) == target) {\n return true;\n }\n });\n if (!target) {\n this.close();\n return this;\n }\n //console.log(\"i'm picker\");\n return this;\n };\n\n var onBtnClick = function onBtnClick(e, target) {\n // console.log('btn click');\n if (e.srcElement) e.target = e.srcElement;\n\n target = U.findParentNode(e.target, function (target) {\n if (target.getAttribute(\"data-picker-btn\")) {\n return true;\n }\n });\n\n if (target) {\n var item = this.queue[this.activePickerQueueIndex],\n k = target.getAttribute(\"data-picker-btn\");\n\n if (item.btns && item.btns[k].onClick) {\n var that = {\n key: k,\n value: item.btns[k],\n self: this,\n item: item\n };\n item.btns[k].onClick.call(that, k);\n } else {\n this.close();\n }\n }\n };\n\n var onBodyKeyup = function onBodyKeyup(e) {\n if (e.keyCode == ax5.info.eventKeys.ESC) {\n this.close();\n }\n };\n\n var getQueIdx = function getQueIdx(boundID) {\n if (!U.isString(boundID)) {\n boundID = jQuery(boundID).data(\"data-axpicker-id\");\n }\n if (!U.isString(boundID)) {\n console.log(ax5.info.getError(\"ax5picker\", \"402\", \"getQueIdx\"));\n return;\n }\n return U.search(this.queue, function () {\n return this.id == boundID;\n });\n };\n /// private end\n\n /**\n * Preferences of picker UI\n * @method ax5picker.setConfig\n * @param {Object} config - 클래스 속성값\n * @returns {ax5picker}\n * @example\n * ```\n * ```\n */\n this.init = function () {\n this.onStateChanged = cfg.onStateChanged;\n };\n\n /**\n * bind picker UI\n * @method ax5picker.bind\n * @param {Object} item\n * @param {Element} item.target\n * @param {String} item.direction - top|left|right|bottom|auto\n * @param {Number} item.contentWidth\n * @param {Boolean} item.disableChangeTrigger\n * @param {Function} item.onStateChanged\n * @param {Object} item.btns\n * @param {Object} item.content\n * @param {Number} item.content.width\n * @param {Number} item.content.margin\n * @param {String} item.content.type\n * @param {Object} item.content.config - binded UI config\n * @param {Object} item.content.formatter\n * @param {String} item.content.formatter.pattern\n * @returns {ax5picker}\n * @example\n * ```js\n * var picker = new ax5.ui.picker();\n * $(document.body).ready(function () {\n * picker.bind({\n * target: $('[data-ax5picker=\"basic\"]'),\n * direction: \"top\",\n * content: {\n * width: 270,\n * margin: 10,\n * type: 'date',\n * config: {\n * control: {\n * left: '<i class=\"fa fa-chevron-left\"></i>',\n * yearTmpl: '%s',\n * monthTmpl: '%s',\n * right: '<i class=\"fa fa-chevron-right\"></i>'\n * },\n * lang: {\n * yearTmpl: \"%s년\",\n * months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n * dayTmpl: \"%s\"\n * }\n * },\n * formatter: {\n * pattern: 'date'\n * }\n * },\n * onStateChanged: function () {\n *\n * }\n * });\n * });\n * ```\n */\n this.bind = function (item) {\n var pickerConfig = {},\n queIdx = void 0;\n\n item = jQuery.extend(true, pickerConfig, cfg, item);\n\n if (!item.target) {\n console.log(ax5.info.getError(\"ax5picker\", \"401\", \"bind\"));\n return this;\n }\n item.$target = jQuery(item.target);\n\n if (!item.$target.get(0)) {\n console.log(ax5.info.getError(\"ax5picker\", \"401\", \"bind\"));\n return this;\n }\n\n if (!item.id) item.id = item.$target.data(\"data-axpicker-id\");\n\n if (!item.id) {\n item.id = 'ax5-picker-' + ax5.getGuid();\n item.$target.data(\"data-axpicker-id\", item.id);\n }\n queIdx = U.search(this.queue, function () {\n return this.id == item.id;\n });\n\n if (queIdx === -1) {\n this.queue.push(item);\n bindPickerTarget.call(this, this.queue.length - 1);\n } else {\n this.queue[queIdx] = jQuery.extend(true, {}, this.queue[queIdx], item);\n bindPickerTarget.call(this, queIdx);\n }\n\n pickerConfig = null;\n queIdx = null;\n return this;\n };\n\n /**\n * @method ax5picker.setContentValue\n * @param {String} boundID\n * @param {Number} inputIndex\n * @param {String} val\n * @returns {ax5picker} this\n */\n this.setContentValue = function () {\n\n var multipleInputProcessor = {\n \"date\": function date(_item, _inputIndex, _val) {\n var values = [],\n diffDay,\n prevInputValue,\n nextInputValue;\n\n if (_item.$target.get(0).tagName.toUpperCase() !== \"INPUT\") {\n _item.$target.find('input[type]').each(function () {\n values.push(this.value);\n });\n }\n\n if (_inputIndex == 0) {\n if (values.length > 1 && values[1] !== \"\") {\n // 값 검증\n diffDay = ax5.util.dday(values[1], { today: values[0] });\n if (diffDay < 0) {\n // 다음날짜 달력을 변경합니다.\n nextInputValue = _val;\n } else {}\n } else {\n nextInputValue = _val;\n }\n\n if (nextInputValue) {\n _item.pickerCalendar[1].ax5uiInstance.setSelection([nextInputValue], false).changeMode(\"d\", nextInputValue);\n this.setContentValue(_item.id, 1, nextInputValue);\n }\n\n return _val;\n } else if (_inputIndex == 1) {\n\n if (values.length > 1) {\n // 값 검증\n diffDay = ax5.util.dday(values[1], { today: values[0] });\n if (diffDay < 0) {\n // 다음날짜 달력을 변경합니다.\n prevInputValue = values[1];\n }\n }\n\n if (prevInputValue) {\n _item.pickerCalendar[0].ax5uiInstance.setSelection([prevInputValue], false).changeMode(\"d\", prevInputValue);\n this.setContentValue(_item.id, 0, prevInputValue);\n }\n\n return _val;\n }\n }\n };\n\n return function (boundID, inputIndex, val, _option) {\n\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID),\n item = this.queue[queIdx],\n _input = void 0;\n\n if (!_option) _option = {};\n\n if (item) {\n\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(inputIndex));\n _input.val(val);\n\n if (!item.disableChangeTrigger) {\n _input.trigger(\"change\");\n } else {\n var $colorPreview = item.$target.find('[data-ax5picker-color=\"preview\"]');\n if ($colorPreview.get(0)) {\n $colorPreview.css({ \"background-color\": val });\n }\n }\n\n // picker의 입력이 2개이상인 경우\n //console.log(item.inputLength);\n if (item.inputLength > 1) {\n // 경우에 따라 첫번 선택에 따라 해야할 일들 처리\n if (multipleInputProcessor[item.content.type]) {\n val = multipleInputProcessor[item.content.type].call(this, item, inputIndex, val);\n }\n }\n\n var that = {\n self: self,\n state: \"changeValue\",\n item: item,\n inputIndex: inputIndex,\n value: val,\n values: [val]\n };\n if (item.$target.get(0).tagName.toUpperCase() !== \"INPUT\") {\n that.values = [];\n item.$target.find('input[type]').each(function () {\n that.values.push(this.value);\n });\n }\n\n onStateChanged.call(this, item, that);\n\n if (item.inputLength == 1 && !_option.doNotClose) {\n this.close();\n }\n }\n\n item = null;\n boundID = null;\n inputIndex = null;\n val = null;\n return this;\n };\n }();\n\n /**\n * @method ax5picker.getContentValue\n * @param {String} boundID\n * @param {Number} inputIndex\n * @returns {ax5picker} this\n */\n this.getContentValue = function () {\n return function (boundID, inputIndex) {\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID),\n item = this.queue[queIdx],\n _input = void 0;\n\n if (item) {\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(inputIndex));\n return _input.val();\n }\n\n item = null;\n boundID = null;\n inputIndex = null;\n return this;\n };\n }();\n\n /**\n * @method ax5picker.open\n * @param {String} boundObjectId\n * @returns {ax5picker} this\n */\n this.open = function () {\n\n var pickerContent = {\n '@fn': function fn(queIdx, callback) {\n var item = this.queue[queIdx];\n item.content.call(item, function (html) {\n callback(html);\n });\n return true;\n },\n 'date': function date(queIdx) {\n var item = this.queue[queIdx],\n html = [],\n calendarConfig = jQuery.extend({}, cfg.calendar, { displayDate: new Date() }),\n input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : item.$target.find('input[type]');\n\n for (var i = 0; i < item.inputLength; i++) {\n html.push('<div ' + 'style=\"width:' + U.cssNumber(item.content.width) + ';float:left;\" ' + 'class=\"ax-picker-content-box\" ' + 'data-calendar-target=\"' + i + '\"></div>');\n if (i < item.inputLength - 1) html.push('<div style=\"width:' + item.content.margin + 'px;float:left;height: 5px;\"></div>');\n }\n html.push('<div style=\"clear:both;\"></div>');\n item.pickerContent.html(html.join(''));\n\n // calendar bind\n item.pickerCalendar = [];\n item.pickerContent.find('[data-calendar-target]').each(function () {\n\n // calendarConfig extend ~\n var idx = this.getAttribute(\"data-calendar-target\"),\n dValue = input.get(idx).value,\n d = ax5.util.date(dValue),\n dateConvert = {\n \"year\": function year(_d) {\n return ax5.util.date(_d, { \"return\": \"yyyy\" });\n },\n \"month\": function month(_d) {\n return ax5.util.date(_d, { \"return\": \"yyyy-MM\" });\n },\n \"day\": function day(_d) {\n return _d;\n }\n };\n\n calendarConfig.displayDate = d;\n\n if (dValue) calendarConfig.selection = [d];\n\n calendarConfig = jQuery.extend(true, calendarConfig, item.content.config || {});\n calendarConfig.target = this;\n calendarConfig.onClick = function () {\n self.setContentValue(item.id, idx, dateConvert[calendarConfig.selectMode || \"day\"](this.date));\n };\n\n item.pickerCalendar.push({\n itemId: item.id,\n inputIndex: idx,\n ax5uiInstance: new ax5.ui.calendar(calendarConfig)\n });\n });\n },\n 'secure-num': function secureNum(queIdx) {\n var item = this.queue[queIdx],\n html = [];\n for (var i = 0; i < item.inputLength; i++) {\n html.push('<div ' + 'style=\"width:' + U.cssNumber(item.content.width) + ';float:left;\" ' + 'class=\"ax-picker-content-box\" ' + 'data-secure-num-target=\"' + i + '\"></div>');\n if (i < item.inputLength - 1) html.push('<div style=\"width:' + item.content.margin + 'px;float:left;height: 5px;\"></div>');\n }\n html.push('<div style=\"clear:both;\"></div>');\n item.pickerContent.html(html.join(''));\n\n // secure-num bind\n item.pickerContent.find('[data-secure-num-target]').each(function () {\n var idx = this.getAttribute(\"data-secure-num-target\"),\n po = [];\n\n var numArray = function (a) {\n var j, x, i;\n for (i = a.length; i; i -= 1) {\n j = Math.floor(Math.random() * i);\n x = a[i - 1];\n a[i - 1] = a[j];\n a[j] = x;\n }\n return a;\n }([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\n var specialArray = [{ label: \"&#x02190\", fn: \"back\" }, { label: \"C\", fn: \"clear\" }];\n\n numArray.forEach(function (n) {\n po.push('<div style=\"float:left;' + item.content.config.btnWrapStyle + '\">');\n po.push('<button class=\"btn btn-default btn-' + item.content.config.btnTheme + '\" ' + 'style=\"' + item.content.config.btnStyle + '\" data-secure-num-value=\"' + n + '\">' + n + '</button>');\n po.push('</div>');\n });\n specialArray.forEach(function (n) {\n po.push('<div style=\"float:left;' + item.content.config.btnWrapStyle + '\">');\n po.push('<button class=\"btn btn-default btn-' + item.content.config.specialBtnTheme + '\" ' + 'style=\"' + item.content.config.btnStyle + '\" data-secure-num-value=\"' + n.fn + '\">' + n.label + '</button>');\n po.push('</div>');\n });\n\n po.push('<div style=\"clear:both;\"></div>');\n\n $(this).html(po.join('')).on(\"click\", '[data-secure-num-value]', function () {\n var act = this.getAttribute(\"data-secure-num-value\");\n var _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(idx));\n var val = _input.val();\n\n if (act == \"back\") {\n _input.val(val.substring(0, val.length - 1));\n } else if (act == \"clear\") {\n _input.val('');\n } else {\n _input.val(val + act);\n }\n\n onStateChanged.call(this, item, {\n self: self,\n state: \"changeValue\",\n item: item,\n value: _input.val()\n });\n });\n });\n },\n 'keyboard': function keyboard(queIdx) {\n var item = this.queue[queIdx];\n var html = [];\n for (var i = 0; i < item.inputLength; i++) {\n html.push('<div ' + 'style=\"width:' + U.cssNumber(item.content.width) + ';float:left;\" ' + 'class=\"ax-picker-content-box\" ' + 'data-keyboard-target=\"' + i + '\"></div>');\n if (i < item.inputLength - 1) html.push('<div style=\"width:' + item.content.margin + 'px;float:left;height: 5px;\"></div>');\n }\n html.push('<div style=\"clear:both;\"></div>');\n item.pickerContent.html(html.join(''));\n\n var keyArray = [[{ value: \"`\", shiftValue: \"~\" }, { value: \"1\", shiftValue: \"!\" }, { value: \"2\", shiftValue: \"@\" }, { value: \"3\", shiftValue: \"#\" }, { value: \"4\", shiftValue: \"$\" }, { value: \"5\", shiftValue: \"%\" }, { value: \"6\", shiftValue: \"^\" }, { value: \"7\", shiftValue: \"&\" }, { value: \"8\", shiftValue: \"*\" }, { value: \"9\", shiftValue: \"(\" }, { value: \"0\", shiftValue: \")\" }, { value: \"-\", shiftValue: \"_\" }, { value: \"=\", shiftValue: \"+\" }, { label: \"&#x02190\", fn: \"back\" }], [{ value: \"q\", shiftValue: \"Q\" }, { value: \"w\", shiftValue: \"W\" }, { value: \"e\", shiftValue: \"E\" }, { value: \"r\", shiftValue: \"R\" }, { value: \"t\", shiftValue: \"T\" }, { value: \"y\", shiftValue: \"Y\" }, { value: \"u\", shiftValue: \"U\" }, { value: \"i\", shiftValue: \"I\" }, { value: \"o\", shiftValue: \"O\" }, { value: \"p\", shiftValue: \"P\" }, { value: \"[\", shiftValue: \"{\" }, { value: \"]\", shiftValue: \"}\" }, { value: \"\\\\\", shiftValue: \"|\" }], [{ label: \"Clear\", fn: \"clear\" }, { value: \"a\", shiftValue: \"A\" }, { value: \"s\", shiftValue: \"S\" }, { value: \"d\", shiftValue: \"D\" }, { value: \"f\", shiftValue: \"F\" }, { value: \"g\", shiftValue: \"G\" }, { value: \"h\", shiftValue: \"H\" }, { value: \"j\", shiftValue: \"J\" }, { value: \"k\", shiftValue: \"K\" }, { value: \"l\", shiftValue: \"L\" }, { value: \";\", shiftValue: \":\" }, { value: \"'\", shiftValue: \"\\\"\" }], [{ label: \"Shift\", fn: \"shift\" }, { value: \"z\", shiftValue: \"Z\" }, { value: \"x\", shiftValue: \"X\" }, { value: \"c\", shiftValue: \"C\" }, { value: \"v\", shiftValue: \"V\" }, { value: \"b\", shiftValue: \"B\" }, { value: \"n\", shiftValue: \"N\" }, { value: \"m\", shiftValue: \"M\" }, { value: \",\", shiftValue: \"<\" }, { value: \".\", shiftValue: \">\" }, { value: \"/\", shiftValue: \"?\" }, { label: \"Close\", fn: \"close\" }]];\n var specialArray = [{ label: \"&#x02190\", fn: \"back\" }, { label: \"C\", fn: \"clear\" }];\n\n var getKeyBoard = function getKeyBoard(isShiftKey) {\n var po = [];\n keyArray.forEach(function (row) {\n po.push('<div style=\"display: table;margin:0 auto;\">');\n row.forEach(function (n) {\n\n var keyValue, keyLabel, btnWrapStyle, btnTheme, btnStyle;\n if (n.fn) {\n keyValue = n.fn;\n keyLabel = n.label;\n btnWrapStyle = item.content.config.specialBtnWrapStyle;\n btnTheme = item.content.config.specialBtnTheme;\n btnStyle = item.content.config.specialBtnStyle;\n } else {\n keyLabel = keyValue = isShiftKey ? n.shiftValue : n.value;\n btnWrapStyle = item.content.config.btnWrapStyle;\n btnTheme = item.content.config.btnTheme;\n btnStyle = item.content.config.btnStyle;\n }\n\n po.push('<div style=\"display: table-cell;' + btnWrapStyle + '\">');\n po.push('<button class=\"btn btn-default btn-' + btnTheme + '\" ' + 'style=\"' + btnStyle + '\" data-keyboard-value=\"' + keyValue + '\">' + keyLabel + '</button>');\n po.push('</div>');\n });\n po.push('</div>');\n });\n return po.join('');\n };\n\n // secure-num bind\n item.pickerContent.find('[data-keyboard-target]').each(function () {\n var idx = this.getAttribute(\"data-keyboard-target\"),\n $this = $(this),\n isShiftKey = false,\n toggleShift = function toggleShift() {\n isShiftKey = !isShiftKey;\n $this.html(getKeyBoard(isShiftKey));\n };\n\n $this.html(getKeyBoard(isShiftKey)).on(\"mousedown\", '[data-keyboard-value]', function () {\n var act = this.getAttribute(\"data-keyboard-value\"),\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(idx)),\n val = _input.val();\n\n switch (act) {\n case \"back\":\n _input.val(val.substring(0, val.length - 1));\n break;\n case \"clear\":\n _input.val('');\n break;\n case \"shift\":\n toggleShift();\n return false;\n break;\n case \"close\":\n self.close();\n return false;\n break;\n default:\n _input.val(val + act);\n }\n\n onStateChanged.call(this, item, {\n self: self,\n state: \"changeValue\",\n item: item,\n value: _input.val()\n });\n });\n });\n },\n 'numpad': function numpad(queIdx) {\n var item = this.queue[queIdx],\n html = [];\n for (var i = 0; i < item.inputLength; i++) {\n html.push('<div ' + 'style=\"width:' + U.cssNumber(item.content.width) + ';float:left;\" ' + 'class=\"ax-picker-content-box\" ' + 'data-numpad-target=\"' + i + '\"></div>');\n if (i < item.inputLength - 1) html.push('<div style=\"width:' + item.content.margin + 'px;float:left;height: 5px;\"></div>');\n }\n html.push('<div style=\"clear:both;\"></div>');\n item.pickerContent.html(html.join(''));\n\n // secure-num bind\n item.pickerContent.find('[data-numpad-target]').each(function () {\n var idx = this.getAttribute(\"data-numpad-target\"),\n po = [],\n keyArray = item.content.config.keyArray || [{ value: \"7\" }, { value: \"8\" }, { value: \"9\" }, { label: \"BS\", fn: \"back\" }, { value: \"4\" }, { value: \"5\" }, { value: \"6\" }, { label: \"CLS\", fn: \"clear\" }, { value: \"1\" }, { value: \"2\" }, { value: \"3\" }, { value: \"\" }, { value: \".\" }, { value: \"0\" }, { value: \"\" }, { label: \"OK\", fn: \"enter\" }];\n\n keyArray.forEach(function (n) {\n var keyValue = void 0,\n keyLabel = void 0,\n btnWrapStyle = void 0,\n btnTheme = void 0,\n btnStyle = void 0;\n\n if (n.fn) {\n keyValue = n.fn;\n keyLabel = n.label;\n btnTheme = item.content.config.specialBtnTheme;\n btnWrapStyle = item.content.config.specialBtnWrapStyle;\n btnStyle = item.content.config.specialBtnStyle;\n } else {\n keyLabel = keyValue = n.value;\n btnTheme = keyValue ? item.content.config.btnTheme : \"\";\n btnWrapStyle = item.content.config.btnWrapStyle;\n btnStyle = item.content.config.btnStyle;\n }\n\n po.push('<div style=\"float:left;' + btnWrapStyle + '\">');\n po.push('<button class=\"btn btn-default btn-' + btnTheme + '\" ' + 'style=\"' + btnStyle + '\" data-numpad-value=\"' + keyValue + '\">' + (keyLabel || \"&nbsp;\") + '</button>');\n po.push('</div>');\n });\n\n po.push('<div style=\"clear:both;\"></div>');\n\n $(this).html(po.join('')).on(\"mousedown\", '[data-numpad-value]', function () {\n var act = this.getAttribute(\"data-numpad-value\"),\n _input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : jQuery(item.$target.find('input[type]').get(idx)),\n val = _input.val(),\n state = \"\";\n\n switch (act) {\n case \"back\":\n state = \"changeValue\";\n _input.val(val.substring(0, val.length - 1));\n break;\n case \"clear\":\n state = \"changeValue\";\n _input.val('');\n break;\n case \"enter\":\n self.close(item, \"enter\");\n return false;\n break;\n case \"close\":\n self.close();\n return false;\n break;\n default:\n state = \"changeValue\";\n _input.val(val + act);\n }\n\n onStateChanged.call(this, item, {\n self: self,\n state: state,\n item: item,\n value: _input.val()\n });\n });\n });\n },\n 'color': function color(queIdx) {\n var item = this.queue[queIdx],\n html = [],\n paletteConfig = jQuery.extend({}, cfg.palette),\n input = item.$target.get(0).tagName.toUpperCase() == \"INPUT\" ? item.$target : item.$target.find('input[type]');\n\n for (var i = 0; i < item.inputLength; i++) {\n html.push('<div ' + 'style=\"padding: 5px;width:' + U.cssNumber(item.content.width) + ';float:left;\" ' + 'class=\"ax-picker-content-box\" ' + 'data-palette-target=\"' + i + '\" data-ax5palette=\"ax5picker-' + item.id + '\"></div>');\n if (i < item.inputLength - 1) html.push('<div style=\"width:' + item.content.margin + 'px;float:left;height: 5px;\"></div>');\n }\n html.push('<div style=\"clear:both;\"></div>');\n item.pickerContent.html(html.join(''));\n\n // calendar bind\n item.pickerPalette = [];\n\n item.pickerContent.find('[data-palette-target]').each(function () {\n // calendarConfig extend ~\n var idx = this.getAttribute(\"data-palette-target\"),\n dColor = input.get(idx).value;\n\n paletteConfig.selectedColor = dColor;\n paletteConfig = jQuery.extend(true, paletteConfig, item.content.config || {});\n paletteConfig.target = this;\n paletteConfig.onClick = function (color) {\n self.setContentValue(item.id, idx, color);\n };\n paletteConfig.onUpdateColor = function (color) {\n self.setContentValue(item.id, idx, color, { doNotClose: true });\n };\n\n item.pickerPalette.push({\n itemId: item.id,\n inputIndex: idx,\n ax5uiInstance: new ax5.ui.palette(paletteConfig)\n });\n });\n }\n };\n\n return function (boundID, tryCount) {\n var queIdx = U.isNumber(boundID) ? boundID : getQueIdx.call(this, boundID),\n item = this.queue[queIdx];\n\n /**\n 다른 피커가 있는 경우와 다른 피커를 닫고 다시 오픈 명령이 내려진 경우에 대한 예외 처리 구문\n */\n if (this.openTimer) clearTimeout(this.openTimer);\n if (this.activePicker) {\n if (this.activePickerQueueIndex == queIdx) {\n return this;\n }\n\n if (tryCount > 2) return this;\n this.close();\n this.openTimer = setTimeout(function () {\n this.open(queIdx, (tryCount || 0) + 1);\n }.bind(this), cfg.animateTime);\n return this;\n }\n\n this.activePicker = jQuery(PICKER.tmpl.get.call(this, \"pickerTmpl\", item));\n this.activePickerArrow = this.activePicker.find(\".ax-picker-arrow\");\n this.activePickerQueueIndex = queIdx;\n item.pickerContent = this.activePicker.find('[data-picker-els=\"content\"]');\n\n if (U.isFunction(item.content)) {\n // 함수타입\n item.pickerContent.html(\"Loading..\");\n pickerContent[\"@fn\"].call(this, queIdx, function (html) {\n item.pickerContent.html(html);\n });\n } else {\n if (item.content.type in pickerContent) {\n pickerContent[item.content.type].call(this, queIdx);\n }\n }\n\n // bind event picker btns\n this.activePicker.find(\"[data-picker-btn]\").on(cfg.clickEventName, function (e) {\n onBtnClick.call(this, e || window.event, queIdx);\n }.bind(this));\n\n alignPicker.call(this, \"append\");\n\n jQuery(window).bind(\"resize.ax5picker\", function () {\n alignPicker.call(this);\n }.bind(this));\n\n // bind key event\n jQuery(window).bind(\"keyup.ax5picker\", function (e) {\n e = e || window.event;\n onBodyKeyup.call(this, e);\n U.stopEvent(e);\n }.bind(this));\n\n jQuery(window).bind(\"click.ax5picker\", function (e) {\n e = e || window.event;\n onBodyClick.call(this, e);\n U.stopEvent(e);\n }.bind(this));\n\n onStateChanged.call(this, item, {\n self: this,\n state: \"open\",\n item: item\n });\n\n return this;\n };\n }();\n\n /**\n * @method ax5picker.close\n * @returns {ax5picker} this\n */\n this.close = function (item, state) {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n if (!this.activePicker) return this;\n\n item = this.queue[this.activePickerQueueIndex];\n\n this.activePicker.addClass(\"destroy\");\n jQuery(window).unbind(\"resize.ax5picker\");\n jQuery(window).unbind(\"click.ax5picker\");\n jQuery(window).unbind(\"keyup.ax5picker\");\n\n this.closeTimer = setTimeout(function () {\n if (this.activePicker) this.activePicker.remove();\n this.activePicker = null;\n this.activePickerQueueIndex = -1;\n\n onStateChanged.call(this, item, {\n self: this,\n state: state || \"close\"\n });\n }.bind(this), cfg.animateTime);\n\n return this;\n };\n\n // 클래스 생성자\n this.main = function () {\n if (arguments && U.isObject(arguments[0])) {\n this.setConfig(arguments[0]);\n }\n }.apply(this, arguments);\n };\n }());\n\n PICKER = ax5.ui.picker;\n})();\n\n// ax5.ui.picker.tmpl\n(function () {\n\n var PICKER = ax5.ui.picker;\n var U = ax5.util;\n\n var pickerTmpl = function pickerTmpl() {\n return \"\\n<div class=\\\"ax5-ui-picker {{theme}}\\\" id=\\\"{{id}}\\\" data-picker-els=\\\"root\\\" {{#zIndex}}style=\\\"z-index:{{zIndex}};\\\"{{/zIndex}}>\\n {{#title}}\\n <div class=\\\"ax-picker-heading\\\">{{title}}</div>\\n {{/title}}\\n <div class=\\\"ax-picker-body\\\">\\n <div class=\\\"ax-picker-content\\\" data-picker-els=\\\"content\\\" style=\\\"width:{{contentWidth}}px;\\\"></div>\\n {{#btns}}\\n <div class=\\\"ax-picker-buttons\\\">\\n {{#btns}}\\n {{#@each}}\\n <button data-picker-btn=\\\"{{@key}}\\\" class=\\\"btn btn-default {{@value.theme}}\\\">{{@value.label}}</button>\\n {{/@each}}\\n {{/btns}}\\n </div>\\n {{/btns}}\\n </div>\\n <div class=\\\"ax-picker-arrow\\\"></div>\\n</div>\\n\";\n };\n\n PICKER.tmpl = {\n \"pickerTmpl\": pickerTmpl,\n\n get: function get(tmplName, data, columnKeys) {\n return ax5.mustache.render(PICKER.tmpl[tmplName].call(this, columnKeys), data);\n }\n };\n})();\n/**\n * ax5.ui.picker_instance\n * @type {ax5picker}\n * @example\n * ```js\n * // picker 기본 속성을 변경해야 한다면\n * ax5.ui.picker_instance.setConfig({\n * });\n *\n * ```\n */\nif (ax5 && ax5.ui && ax5.ui.picker) {\n ax5.ui.picker_instance = new ax5.ui.picker();\n\n jQuery.fn.ax5picker = function () {\n return function (config) {\n if (ax5.util.isString(arguments[0])) {\n var methodName = arguments[0];\n\n switch (methodName) {\n case \"open\":\n return ax5.ui.picker_instance.open(this);\n break;\n case \"close\":\n return ax5.ui.picker_instance.close(this);\n break;\n case \"setValue\":\n return ax5.ui.picker_instance.setContentValue(this, arguments[1], arguments[2]);\n break;\n default:\n return this;\n }\n } else {\n if (typeof config == \"undefined\") config = {};\n jQuery.each(this, function () {\n var defaultConfig = {\n target: this\n };\n config = jQuery.extend(true, config, defaultConfig);\n ax5.ui.picker_instance.bind(config);\n });\n }\n return this;\n };\n }();\n}","/*!\r\n * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2016\r\n * @version 1.3.4\r\n *\r\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\r\n * @see http://php.net/manual/en/function.date.php\r\n *\r\n * For more JQuery plugins visit http://plugins.krajee.com\r\n * For more Yii related demos visit http://demos.krajee.com\r\n */var DateFormatter;!function(){\"use strict\";var t,e,r,n,a,u,i;u=864e5,i=3600,t=function(t,e){return\"string\"==typeof t&&\"string\"==typeof e&&t.toLowerCase()===e.toLowerCase()},e=function(t,r,n){var a=n||\"0\",u=t.toString();return u.length<r?e(a+u,r):u},r=function(t){var e,n;for(t=t||{},e=1;e<arguments.length;e++)if(n=arguments[e])for(var a in n)n.hasOwnProperty(a)&&(\"object\"==typeof n[a]?r(t[a],n[a]):t[a]=n[a]);return t},n=function(t,e){for(var r=0;r<e.length;r++)if(e[r].toLowerCase()===t.toLowerCase())return r;return-1},a={dateSettings:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],meridiem:[\"AM\",\"PM\"],ordinal:function(t){var e=t%10,r={1:\"st\",2:\"nd\",3:\"rd\"};return 1!==Math.floor(t%100/10)&&r[e]?r[e]:\"th\"}},separators:/[ \\-+\\/\\.T:@]/g,validParts:/[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,intParts:/[djwNzmnyYhHgGis]/g,tzParts:/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,tzClip:/[^-+\\dA-Z]/g},DateFormatter=function(t){var e=this,n=r(a,t);e.dateSettings=n.dateSettings,e.separators=n.separators,e.validParts=n.validParts,e.intParts=n.intParts,e.tzParts=n.tzParts,e.tzClip=n.tzClip},DateFormatter.prototype={constructor:DateFormatter,getMonth:function(t){var e,r=this;return e=n(t,r.dateSettings.monthsShort)+1,0===e&&(e=n(t,r.dateSettings.months)+1),e},parseDate:function(e,r){var n,a,u,i,s,o,c,f,l,h,d=this,g=!1,m=!1,p=d.dateSettings,y={date:null,year:null,month:null,day:null,hour:0,min:0,sec:0};if(!e)return null;if(e instanceof Date)return e;if(\"U\"===r)return u=parseInt(e),u?new Date(1e3*u):e;switch(typeof e){case\"number\":return new Date(e);case\"string\":break;default:return null}if(n=r.match(d.validParts),!n||0===n.length)throw new Error(\"Invalid date format definition.\");for(a=e.replace(d.separators,\"\\x00\").split(\"\\x00\"),u=0;u<a.length;u++)switch(i=a[u],s=parseInt(i),n[u]){case\"y\":case\"Y\":if(!s)return null;l=i.length,y.year=2===l?parseInt((70>s?\"20\":\"19\")+i):s,g=!0;break;case\"m\":case\"n\":case\"M\":case\"F\":if(isNaN(s)){if(o=d.getMonth(i),!(o>0))return null;y.month=o}else{if(!(s>=1&&12>=s))return null;y.month=s}g=!0;break;case\"d\":case\"j\":if(!(s>=1&&31>=s))return null;y.day=s,g=!0;break;case\"g\":case\"h\":if(c=n.indexOf(\"a\")>-1?n.indexOf(\"a\"):n.indexOf(\"A\")>-1?n.indexOf(\"A\"):-1,h=a[c],c>-1)f=t(h,p.meridiem[0])?0:t(h,p.meridiem[1])?12:-1,s>=1&&12>=s&&f>-1?y.hour=s+f-1:s>=0&&23>=s&&(y.hour=s);else{if(!(s>=0&&23>=s))return null;y.hour=s}m=!0;break;case\"G\":case\"H\":if(!(s>=0&&23>=s))return null;y.hour=s,m=!0;break;case\"i\":if(!(s>=0&&59>=s))return null;y.min=s,m=!0;break;case\"s\":if(!(s>=0&&59>=s))return null;y.sec=s,m=!0}if(g===!0&&y.year&&y.month&&y.day)y.date=new Date(y.year,y.month-1,y.day,y.hour,y.min,y.sec,0);else{if(m!==!0)return null;y.date=new Date(0,0,0,y.hour,y.min,y.sec,0)}return y.date},guessDate:function(t,e){if(\"string\"!=typeof t)return t;var r,n,a,u,i,s,o=this,c=t.replace(o.separators,\"\\x00\").split(\"\\x00\"),f=/^[djmn]/g,l=e.match(o.validParts),h=new Date,d=0;if(!f.test(l[0]))return t;for(a=0;a<c.length;a++){if(d=2,i=c[a],s=parseInt(i.substr(0,2)),isNaN(s))return null;switch(a){case 0:\"m\"===l[0]||\"n\"===l[0]?h.setMonth(s-1):h.setDate(s);break;case 1:\"m\"===l[0]||\"n\"===l[0]?h.setDate(s):h.setMonth(s-1);break;case 2:if(n=h.getFullYear(),r=i.length,d=4>r?r:4,n=parseInt(4>r?n.toString().substr(0,4-r)+i:i.substr(0,4)),!n)return null;h.setFullYear(n);break;case 3:h.setHours(s);break;case 4:h.setMinutes(s);break;case 5:h.setSeconds(s)}u=i.substr(d),u.length>0&&c.splice(a+1,0,u)}return h},parseFormat:function(t,r){var n,a=this,s=a.dateSettings,o=/\\\\?(.?)/gi,c=function(t,e){return n[t]?n[t]():e};return n={d:function(){return e(n.j(),2)},D:function(){return s.daysShort[n.w()]},j:function(){return r.getDate()},l:function(){return s.days[n.w()]},N:function(){return n.w()||7},w:function(){return r.getDay()},z:function(){var t=new Date(n.Y(),n.n()-1,n.j()),e=new Date(n.Y(),0,1);return Math.round((t-e)/u)},W:function(){var t=new Date(n.Y(),n.n()-1,n.j()-n.N()+3),r=new Date(t.getFullYear(),0,4);return e(1+Math.round((t-r)/u/7),2)},F:function(){return s.months[r.getMonth()]},m:function(){return e(n.n(),2)},M:function(){return s.monthsShort[r.getMonth()]},n:function(){return r.getMonth()+1},t:function(){return new Date(n.Y(),n.n(),0).getDate()},L:function(){var t=n.Y();return t%4===0&&t%100!==0||t%400===0?1:0},o:function(){var t=n.n(),e=n.W(),r=n.Y();return r+(12===t&&9>e?1:1===t&&e>9?-1:0)},Y:function(){return r.getFullYear()},y:function(){return n.Y().toString().slice(-2)},a:function(){return n.A().toLowerCase()},A:function(){var t=n.G()<12?0:1;return s.meridiem[t]},B:function(){var t=r.getUTCHours()*i,n=60*r.getUTCMinutes(),a=r.getUTCSeconds();return e(Math.floor((t+n+a+i)/86.4)%1e3,3)},g:function(){return n.G()%12||12},G:function(){return r.getHours()},h:function(){return e(n.g(),2)},H:function(){return e(n.G(),2)},i:function(){return e(r.getMinutes(),2)},s:function(){return e(r.getSeconds(),2)},u:function(){return e(1e3*r.getMilliseconds(),6)},e:function(){var t=/\\((.*)\\)/.exec(String(r))[1];return t||\"Coordinated Universal Time\"},I:function(){var t=new Date(n.Y(),0),e=Date.UTC(n.Y(),0),r=new Date(n.Y(),6),a=Date.UTC(n.Y(),6);return t-e!==r-a?1:0},O:function(){var t=r.getTimezoneOffset(),n=Math.abs(t);return(t>0?\"-\":\"+\")+e(100*Math.floor(n/60)+n%60,4)},P:function(){var t=n.O();return t.substr(0,3)+\":\"+t.substr(3,2)},T:function(){var t=(String(r).match(a.tzParts)||[\"\"]).pop().replace(a.tzClip,\"\");return t||\"UTC\"},Z:function(){return 60*-r.getTimezoneOffset()},c:function(){return\"Y-m-d\\\\TH:i:sP\".replace(o,c)},r:function(){return\"D, d M Y H:i:s O\".replace(o,c)},U:function(){return r.getTime()/1e3||0}},c(t,t)},formatDate:function(t,e){var r,n,a,u,i,s=this,o=\"\",c=\"\\\\\";if(\"string\"==typeof t&&(t=s.parseDate(t,e),!t))return null;if(t instanceof Date){for(a=e.length,r=0;a>r;r++)i=e.charAt(r),\"S\"!==i&&i!==c&&(r>0&&e.charAt(r-1)===c?o+=i:(u=s.parseFormat(i,t),r!==a-1&&s.intParts.test(i)&&\"S\"===e.charAt(r+1)&&(n=parseInt(u)||0,u+=s.dateSettings.ordinal(n)),o+=u));return o}return\"\"}}}();/**\r\n * @preserve jQuery DateTimePicker\r\n * @homepage http://xdsoft.net/jqplugins/datetimepicker/\r\n * @author Chupurnov Valeriy (<chupurnov@gmail.com>)\r\n */\r\n\r\n/**\r\n * @param {jQuery} $\r\n */\r\nvar datetimepickerFactory = function ($) {\r\n\t'use strict';\r\n\r\n\tvar default_options = {\r\n\t\ti18n: {\r\n\t\t\tar: { // Arabic\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"الأحد\", \"الاثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\", \"الأحد\"]\r\n\t\t\t},\r\n\t\t\tro: { // Romanian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"Noiembrie\", \"Decembrie\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sâ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Duminică\", \"Luni\", \"Marţi\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sâmbătă\"]\r\n\t\t\t},\r\n\t\t\tid: { // Indonesian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Min\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"]\r\n\t\t\t},\r\n\t\t\tis: { // Icelandic\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janúar\", \"Febrúar\", \"Mars\", \"Apríl\", \"Maí\", \"Júní\", \"Júlí\", \"Ágúst\", \"September\", \"Október\", \"Nóvember\", \"Desember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sun\", \"Mán\", \"Þrið\", \"Mið\", \"Fim\", \"Fös\", \"Lau\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sunnudagur\", \"Mánudagur\", \"Þriðjudagur\", \"Miðvikudagur\", \"Fimmtudagur\", \"Föstudagur\", \"Laugardagur\"]\r\n\t\t\t},\r\n\t\t\tbg: { // Bulgarian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Неделя\", \"Понеделник\", \"Вторник\", \"Сряда\", \"Четвъртък\", \"Петък\", \"Събота\"]\r\n\t\t\t},\r\n\t\t\tfa: { // Persian/Farsi\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"یک‌شنبه\", \"دوشنبه\", \"سه‌شنبه\", \"چهارشنبه\", \"پنج‌شنبه\", \"جمعه\", \"شنبه\", \"یک‌شنبه\"]\r\n\t\t\t},\r\n\t\t\tru: { // Russian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"]\r\n\t\t\t},\r\n\t\t\tuk: { // Ukrainian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"]\r\n\t\t\t},\r\n\t\t\ten: { // English\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\r\n\t\t\t},\r\n\t\t\tel: { // Ελληνικά\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Σάββατο\"]\r\n\t\t\t},\r\n\t\t\tde: { // German\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"]\r\n\t\t\t},\r\n\t\t\tnl: { // Dutch\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"]\r\n\t\t\t},\r\n\t\t\ttr: { // Turkish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"]\r\n\t\t\t},\r\n\t\t\tfr: { //French\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"]\r\n\t\t\t},\r\n\t\t\tes: { // Spanish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\tth: { // Thai\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"อาทิตย์\", \"จันทร์\", \"อังคาร\", \"พุธ\", \"พฤหัส\", \"ศุกร์\", \"เสาร์\", \"อาทิตย์\"]\r\n\t\t\t},\r\n\t\t\tpl: { // Polish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"niedziela\", \"poniedziałek\", \"wtorek\", \"środa\", \"czwartek\", \"piątek\", \"sobota\"]\r\n\t\t\t},\r\n\t\t\tpt: { // Portuguese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\tch: { // Simplified Chinese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tse: { // Swedish\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tkm: { // Khmer (ភាសាខ្មែរ)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"មករា​\", \"កុម្ភៈ\", \"មិនា​\", \"មេសា​\", \"ឧសភា​\", \"មិថុនា​\", \"កក្កដា​\", \"សីហា​\", \"កញ្ញា​\", \"តុលា​\", \"វិច្ឆិកា\", \"ធ្នូ​\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\"អាទិ​\", \"ច័ន្ទ​\", \"អង្គារ​\", \"ពុធ​\", \"ព្រហ​​\", \"សុក្រ​\", \"សៅរ៍\"],\r\n\t\t\t\tdayOfWeek: [\"អាទិត្យ​\", \"ច័ន្ទ​\", \"អង្គារ​\", \"ពុធ​\", \"ព្រហស្បតិ៍​\", \"សុក្រ​\", \"សៅរ៍\"]\r\n\t\t\t},\r\n\t\t\tkr: { // Korean\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\r\n\t\t\t},\r\n\t\t\tit: { // Italian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"]\r\n\t\t\t},\r\n\t\t\tda: { // Dansk\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"]\r\n\t\t\t},\r\n\t\t\tno: { // Norwegian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']\r\n\t\t\t},\r\n\t\t\tja: { // Japanese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"日曜\", \"月曜\", \"火曜\", \"水曜\", \"木曜\", \"金曜\", \"土曜\"]\r\n\t\t\t},\r\n\t\t\tvi: { // Vietnamese\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Chủ nhật\", \"Thứ hai\", \"Thứ ba\", \"Thứ tư\", \"Thứ năm\", \"Thứ sáu\", \"Thứ bảy\"]\r\n\t\t\t},\r\n\t\t\tsl: { // Slovenščina\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"]\r\n\t\t\t},\r\n\t\t\tcs: { // Čeština\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\thu: { // Hungarian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"vasárnap\", \"hétfő\", \"kedd\", \"szerda\", \"csütörtök\", \"péntek\", \"szombat\"]\r\n\t\t\t},\r\n\t\t\taz: { //Azerbaijanian (Azeri)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Bazar\", \"Bazar ertəsi\", \"Çərşənbə axşamı\", \"Çərşənbə\", \"Cümə axşamı\", \"Cümə\", \"Şənbə\"]\r\n\t\t\t},\r\n\t\t\tbs: { //Bosanski\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedjelja\",\"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"]\r\n\t\t\t},\r\n\t\t\tca: { //Català\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"]\r\n\t\t\t},\r\n\t\t\t'en-GB': { //English (British)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\r\n\t\t\t},\r\n\t\t\tet: { //\"Eesti\"\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Pühapäev\", \"Esmaspäev\", \"Teisipäev\", \"Kolmapäev\", \"Neljapäev\", \"Reede\", \"Laupäev\"]\r\n\t\t\t},\r\n\t\t\teu: { //Euskara\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']\r\n\t\t\t},\r\n\t\t\tfi: { //Finnish (Suomi)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"]\r\n\t\t\t},\r\n\t\t\tgl: { //Galego\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Luns\", \"Martes\", \"Mércores\", \"Xoves\", \"Venres\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\thr: { //Hrvatski\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"]\r\n\t\t\t},\r\n\t\t\tko: { //Korean (한국어)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\r\n\t\t\t},\r\n\t\t\tlt: { //Lithuanian (lietuvių)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Sekmadienis\", \"Pirmadienis\", \"Antradienis\", \"Trečiadienis\", \"Ketvirtadienis\", \"Penktadienis\", \"Šeštadienis\"]\r\n\t\t\t},\r\n\t\t\tlv: { //Latvian (Latviešu)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Svētdiena\", \"Pirmdiena\", \"Otrdiena\", \"Trešdiena\", \"Ceturtdiena\", \"Piektdiena\", \"Sestdiena\"]\r\n\t\t\t},\r\n\t\t\tmk: { //Macedonian (Македонски)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Недела\", \"Понеделник\", \"Вторник\", \"Среда\", \"Четврток\", \"Петок\", \"Сабота\"]\r\n\t\t\t},\r\n\t\t\tmn: { //Mongolian (Монгол)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Даваа\", \"Мягмар\", \"Лхагва\", \"Пүрэв\", \"Баасан\", \"Бямба\", \"Ням\"]\r\n\t\t\t},\r\n\t\t\t'pt-BR': { //Português(Brasil)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"]\r\n\t\t\t},\r\n\t\t\tsk: { //Slovenčina\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\"]\r\n\t\t\t},\r\n\t\t\tsq: { //Albanian (Shqip)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Janar\", \"Shkurt\", \"Mars\", \"Prill\", \"Maj\", \"Qershor\", \"Korrik\", \"Gusht\", \"Shtator\", \"Tetor\", \"Nëntor\", \"Dhjetor\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Die\", \"Hën\", \"Mar\", \"Mër\", \"Enj\", \"Pre\", \"Shtu\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"E Diel\", \"E Hënë\", \"E Martē\", \"E Mërkurë\", \"E Enjte\", \"E Premte\", \"E Shtunë\"]\r\n\t\t\t},\r\n\t\t\t'sr-YU': { //Serbian (Srpski)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Nedelja\",\"Ponedeljak\", \"Utorak\", \"Sreda\", \"Četvrtak\", \"Petak\", \"Subota\"]\r\n\t\t\t},\r\n\t\t\tsr: { //Serbian Cyrillic (Српски)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Недеља\",\"Понедељак\", \"Уторак\", \"Среда\", \"Четвртак\", \"Петак\", \"Субота\"]\r\n\t\t\t},\r\n\t\t\tsv: { //Svenska\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"]\r\n\t\t\t},\r\n\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"]\r\n\t\t\t},\r\n\t\t\tzh: { //Simplified Chinese (简体中文)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"]\r\n\t\t\t},\r\n\t\t\tug:{ // Uyghur(ئۇيغۇرچە)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"1-ئاي\",\"2-ئاي\",\"3-ئاي\",\"4-ئاي\",\"5-ئاي\",\"6-ئاي\",\"7-ئاي\",\"8-ئاي\",\"9-ئاي\",\"10-ئاي\",\"11-ئاي\",\"12-ئاي\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\r\n\t\t\t\t\t\"يەكشەنبە\", \"دۈشەنبە\",\"سەيشەنبە\",\"چارشەنبە\",\"پەيشەنبە\",\"جۈمە\",\"شەنبە\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\the: { //Hebrew (עברית)\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\", \"ראשון\"]\r\n\t\t\t},\r\n\t\t\thy: { // Armenian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Հունվար\", \"Փետրվար\", \"Մարտ\", \"Ապրիլ\", \"Մայիս\", \"Հունիս\", \"Հուլիս\", \"Օգոստոս\", \"Սեպտեմբեր\", \"Հոկտեմբեր\", \"Նոյեմբեր\", \"Դեկտեմբեր\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Կի\", \"Երկ\", \"Երք\", \"Չոր\", \"Հնգ\", \"Ուրբ\", \"Շբթ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"Կիրակի\", \"Երկուշաբթի\", \"Երեքշաբթի\", \"Չորեքշաբթի\", \"Հինգշաբթի\", \"Ուրբաթ\", \"Շաբաթ\"]\r\n\t\t\t},\r\n\t\t\tkg: { // Kyrgyz\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Жек\", \"Дүй\", \"Шей\", \"Шар\", \"Бей\", \"Жум\", \"Ише\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\r\n\t\t\t\t\t\"Жекшемб\", \"Дүйшөмб\", \"Шейшемб\", \"Шаршемб\", \"Бейшемби\", \"Жума\", \"Ишенб\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\trm: { // Romansh\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t\"Schaner\", \"Favrer\", \"Mars\", \"Avrigl\", \"Matg\", \"Zercladur\", \"Fanadur\", \"Avust\", \"Settember\", \"October\", \"November\", \"December\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"Du\", \"Gli\", \"Ma\", \"Me\", \"Gie\", \"Ve\", \"So\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\r\n\t\t\t\t\t\"Dumengia\", \"Glindesdi\", \"Mardi\", \"Mesemna\", \"Gievgia\", \"Venderdi\", \"Sonda\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tka: { // Georgian\r\n\t\t\t\tmonths: [\r\n\t\t\t\t\t'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeekShort: [\r\n\t\t\t\t\t\"კვ\", \"ორშ\", \"სამშ\", \"ოთხ\", \"ხუთ\", \"პარ\", \"შაბ\"\r\n\t\t\t\t],\r\n\t\t\t\tdayOfWeek: [\"კვირა\", \"ორშაბათი\", \"სამშაბათი\", \"ოთხშაბათი\", \"ხუთშაბათი\", \"პარასკევი\", \"შაბათი\"]\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\townerDocument: document,\r\n\t\tcontentWindow: window,\r\n\r\n\t\tvalue: '',\r\n\t\trtl: false,\r\n\r\n\t\tformat:\t'Y/m/d H:i',\r\n\t\tformatTime:\t'H:i',\r\n\t\tformatDate:\t'Y/m/d',\r\n\r\n\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\r\n\t\tstep: 60,\r\n\t\tmonthChangeSpinner: true,\r\n\r\n\t\tcloseOnDateSelect: false,\r\n\t\tcloseOnTimeSelect: true,\r\n\t\tcloseOnWithoutClick: true,\r\n\t\tcloseOnInputClick: true,\r\n\t\topenOnFocus: true,\r\n\r\n\t\ttimepicker: true,\r\n\t\tdatepicker: true,\r\n\t\tweeks: false,\r\n\r\n\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\r\n\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\r\n\r\n\t\tminDate: false,\r\n\t\tmaxDate: false,\r\n\t\tminTime: false,\r\n\t\tmaxTime: false,\r\n\t\tminDateTime: false,\r\n\t\tmaxDateTime: false,\r\n\r\n\t\tallowTimes: [],\r\n\t\topened: false,\r\n\t\tinitTime: true,\r\n\t\tinline: false,\r\n\t\ttheme: '',\r\n\t\ttouchMovedThreshold: 5,\r\n\r\n\t\tonSelectDate: function () {},\r\n\t\tonSelectTime: function () {},\r\n\t\tonChangeMonth: function () {},\r\n\t\tonGetWeekOfYear: function () {},\r\n\t\tonChangeYear: function () {},\r\n\t\tonChangeDateTime: function () {},\r\n\t\tonShow: function () {},\r\n\t\tonClose: function () {},\r\n\t\tonGenerate: function () {},\r\n\r\n\t\twithoutCopyright: true,\r\n\t\tinverseButton: false,\r\n\t\thours12: false,\r\n\t\tnext: 'xdsoft_next',\r\n\t\tprev : 'xdsoft_prev',\r\n\t\tdayOfWeekStart: 0,\r\n\t\tparentID: 'body',\r\n\t\ttimeHeightInTimePicker: 25,\r\n\t\ttimepickerScrollbar: true,\r\n\t\ttodayButton: true,\r\n\t\tprevButton: true,\r\n\t\tnextButton: true,\r\n\t\tdefaultSelect: true,\r\n\r\n\t\tscrollMonth: true,\r\n\t\tscrollTime: true,\r\n\t\tscrollInput: true,\r\n\r\n\t\tlazyInit: false,\r\n\t\tmask: false,\r\n\t\tvalidateOnBlur: true,\r\n\t\tallowBlank: true,\r\n\t\tyearStart: 1950,\r\n\t\tyearEnd: 2050,\r\n\t\tmonthStart: 0,\r\n\t\tmonthEnd: 11,\r\n\t\tstyle: '',\r\n\t\tid: '',\r\n\t\tfixed: false,\r\n\t\troundTime: 'round', // ceil, floor\r\n\t\tclassName: '',\r\n\t\tweekends: [],\r\n\t\thighlightedDates: [],\r\n\t\thighlightedPeriods: [],\r\n\t\tallowDates : [],\r\n\t\tallowDateRe : null,\r\n\t\tdisabledDates : [],\r\n\t\tdisabledWeekDays: [],\r\n\t\tyearOffset: 0,\r\n\t\tbeforeShowDay: null,\r\n\r\n\t\tenterLikeTab: true,\r\n\t\tshowApplyButton: false\r\n\t};\r\n\r\n\tvar dateHelper = null,\r\n\t\tdefaultDateHelper = null,\r\n\t\tglobalLocaleDefault = 'en',\r\n\t\tglobalLocale = 'en';\r\n\r\n\tvar dateFormatterOptionsDefault = {\r\n\t\tmeridiem: ['AM', 'PM']\r\n\t};\r\n\r\n\tvar initDateFormatter = function(){\r\n\t\tvar locale = default_options.i18n[globalLocale],\r\n\t\t\topts = {\r\n\t\t\t\tdays: locale.dayOfWeek,\r\n\t\t\t\tdaysShort: locale.dayOfWeekShort,\r\n\t\t\t\tmonths: locale.months,\r\n\t\t\t\tmonthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) })\r\n\t\t\t};\r\n\r\n\t\tif (typeof DateFormatter === 'function') {\r\n\t\t\tdateHelper = defaultDateHelper = new DateFormatter({\r\n\t\t\t\tdateSettings: $.extend({}, dateFormatterOptionsDefault, opts)\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tvar dateFormatters = {\r\n\t\tmoment: {\r\n\t\t\tdefault_options:{\r\n\t\t\t\tformat: 'YYYY/MM/DD HH:mm',\r\n\t\t\t\tformatDate: 'YYYY/MM/DD',\r\n\t\t\t\tformatTime: 'HH:mm',\r\n\t\t\t},\r\n\t\t\tformatter: {\r\n\t\t\t\tparseDate: function (date, format) {\r\n\t\t\t\t\tif(isFormatStandard(format)){\r\n\t\t\t\t\t\treturn defaultDateHelper.parseDate(date, format);\r\n\t\t\t\t\t} \r\n\t\t\t\t\tvar d = moment(date, format);\r\n\t\t\t\t\treturn d.isValid() ? d.toDate() : false;\r\n\t\t\t\t},\r\n\r\n\t\t\t\tformatDate: function (date, format) {\r\n\t\t\t\t\tif(isFormatStandard(format)){\r\n\t\t\t\t\t\treturn defaultDateHelper.formatDate(date, format);\r\n\t\t\t\t\t} \r\n\t\t\t\t\treturn moment(date).format(format);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tformatMask: function(format){\r\n\t\t\t\t\treturn format\r\n\t\t\t\t\t\t.replace(/Y{4}/g, '9999')\r\n\t\t\t\t\t\t.replace(/Y{2}/g, '99')\r\n\t\t\t\t\t\t.replace(/M{2}/g, '19')\r\n\t\t\t\t\t\t.replace(/D{2}/g, '39')\r\n\t\t\t\t\t\t.replace(/H{2}/g, '29')\r\n\t\t\t\t\t\t.replace(/m{2}/g, '59')\r\n\t\t\t\t\t\t.replace(/s{2}/g, '59');\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// for locale settings\r\n\t$.datetimepicker = {\r\n\t\tsetLocale: function(locale){\r\n\t\t\tvar newLocale = default_options.i18n[locale] ? locale : globalLocaleDefault;\r\n\t\t\tif (globalLocale !== newLocale) {\r\n\t\t\t\tglobalLocale = newLocale;\r\n\t\t\t\t// reinit date formatter\r\n\t\t\t\tinitDateFormatter();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tsetDateFormatter: function(dateFormatter) {\r\n\t\t\tif(typeof dateFormatter === 'string' && dateFormatters.hasOwnProperty(dateFormatter)){\r\n\t\t\t\tvar df = dateFormatters[dateFormatter];\r\n\t\t\t\t$.extend(default_options, df.default_options);\r\n\t\t\t\tdateHelper = df.formatter; \r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdateHelper = dateFormatter;\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\tvar standardFormats = {\r\n\t\tRFC_2822: 'D, d M Y H:i:s O',\r\n\t\tATOM: 'Y-m-d\\TH:i:sP',\r\n\t\tISO_8601: 'Y-m-d\\TH:i:sO',\r\n\t\tRFC_822: 'D, d M y H:i:s O',\r\n\t\tRFC_850: 'l, d-M-y H:i:s T',\r\n\t\tRFC_1036: 'D, d M y H:i:s O',\r\n\t\tRFC_1123: 'D, d M Y H:i:s O',\r\n\t\tRSS: 'D, d M Y H:i:s O',\r\n\t\tW3C: 'Y-m-d\\TH:i:sP'\r\n\t}\r\n\r\n\tvar isFormatStandard = function(format){\r\n\t\treturn Object.values(standardFormats).indexOf(format) === -1 ? false : true;\r\n\t}\r\n\r\n\t$.extend($.datetimepicker, standardFormats);\r\n\r\n\t// first init date formatter\r\n\tinitDateFormatter();\r\n\r\n\t// fix for ie8\r\n\tif (!window.getComputedStyle) {\r\n\t\twindow.getComputedStyle = function (el) {\r\n\t\t\tthis.el = el;\r\n\t\t\tthis.getPropertyValue = function (prop) {\r\n\t\t\t\tvar re = /(-([a-z]))/g;\r\n\t\t\t\tif (prop === 'float') {\r\n\t\t\t\t\tprop = 'styleFloat';\r\n\t\t\t\t}\r\n\t\t\t\tif (re.test(prop)) {\r\n\t\t\t\t\tprop = prop.replace(re, function (a, b, c) {\r\n\t\t\t\t\t\treturn c.toUpperCase();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn el.currentStyle[prop] || null;\r\n\t\t\t};\r\n\t\t\treturn this;\r\n\t\t};\r\n\t}\r\n\tif (!Array.prototype.indexOf) {\r\n\t\tArray.prototype.indexOf = function (obj, start) {\r\n\t\t\tvar i, j;\r\n\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\r\n\t\t\t\tif (this[i] === obj) { return i; }\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\t}\r\n\r\n\tDate.prototype.countDaysInMonth = function () {\r\n\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\r\n\t};\r\n\r\n\t$.fn.xdsoftScroller = function (options, percent) {\r\n\t\treturn this.each(function () {\r\n\t\t\tvar timeboxparent = $(this),\r\n\t\t\t\tpointerEventToXY = function (e) {\r\n\t\t\t\t\tvar out = {x: 0, y: 0},\r\n\t\t\t\t\t\ttouch;\r\n\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\r\n\t\t\t\t\t\ttouch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\r\n\t\t\t\t\t\tout.x = touch.clientX;\r\n\t\t\t\t\t\tout.y = touch.clientY;\r\n\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\r\n\t\t\t\t\t\tout.x = e.clientX;\r\n\t\t\t\t\t\tout.y = e.clientY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn out;\r\n\t\t\t\t},\r\n\t\t\t\ttimebox,\r\n\t\t\t\tparentHeight,\r\n\t\t\t\theight,\r\n\t\t\t\tscrollbar,\r\n\t\t\t\tscroller,\r\n\t\t\t\tmaximumOffset = 100,\r\n\t\t\t\tstart = false,\r\n\t\t\t\tstartY = 0,\r\n\t\t\t\tstartTop = 0,\r\n\t\t\t\th1 = 0,\r\n\t\t\t\ttouchStart = false,\r\n\t\t\t\tstartTopScroll = 0,\r\n\t\t\t\tcalcOffset = function () {};\r\n\r\n\t\t\tif (percent === 'hide') {\r\n\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\r\n\t\t\t\ttimebox = timeboxparent.children().eq(0);\r\n\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\r\n\t\t\t\theight = timebox[0].offsetHeight;\r\n\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\r\n\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\r\n\t\t\t\tscrollbar.append(scroller);\r\n\r\n\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\r\n\t\t\t\tcalcOffset = function calcOffset(event) {\r\n\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\r\n\t\t\t\t\tif (offset < 0) {\r\n\t\t\t\t\t\toffset = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\r\n\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscroller\r\n\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\r\n\t\t\t\t\t\tif (!parentHeight) {\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\r\n\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\r\n\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\r\n\r\n\t\t\t\t\t\tif (event.type === 'mousedown' || event.type === 'touchstart') {\r\n\t\t\t\t\t\t\tif (options.ownerDocument) {\r\n\t\t\t\t\t\t\t\t$(options.ownerDocument.body).addClass('xdsoft_noselect');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {\r\n\t\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchend mouseup.xdsoft_scroller', arguments_callee)\r\n\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\r\n\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t$(options.ownerDocument.body).on('mousemove.xdsoft_scroller', calcOffset);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttouchStart = true;\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.on('touchmove', function (event) {\r\n\t\t\t\t\t\tif (touchStart) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tcalcOffset(event);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.on('touchend touchcancel', function () {\r\n\t\t\t\t\t\ttouchStart = false;\r\n\t\t\t\t\t\tstartTopScroll = 0;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent\r\n\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\r\n\t\t\t\t\t\tif (!parentHeight) {\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\r\n\r\n\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\r\n\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\r\n\t\t\t\t\t\t}, 10);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\r\n\t\t\t\t\t\tvar percent, sh;\r\n\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\r\n\t\t\t\t\t\theight = timebox[0].offsetHeight;\r\n\t\t\t\t\t\tpercent = parentHeight / height;\r\n\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\r\n\t\t\t\t\t\tif (percent > 1) {\r\n\t\t\t\t\t\t\tscroller.hide();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscroller.show();\r\n\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\r\n\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\r\n\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\r\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\r\n\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\r\n\r\n\t\t\t\t\ttop = top - (event.deltaY * 20);\r\n\t\t\t\t\tif (top < 0) {\r\n\t\t\t\t\t\ttop = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('touchstart', function (event) {\r\n\t\t\t\t\tstart = pointerEventToXY(event);\r\n\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('touchmove', function (event) {\r\n\t\t\t\t\tif (start) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tvar coord = pointerEventToXY(event);\r\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttimeboxparent.on('touchend touchcancel', function () {\r\n\t\t\t\t\tstart = false;\r\n\t\t\t\t\tstartTop = 0;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\r\n\t\t});\r\n\t};\r\n\r\n\t$.fn.datetimepicker = function (opt, opt2) {\r\n\t\tvar result = this,\r\n\t\t\tKEY0 = 48,\r\n\t\t\tKEY9 = 57,\r\n\t\t\t_KEY0 = 96,\r\n\t\t\t_KEY9 = 105,\r\n\t\t\tCTRLKEY = 17,\r\n\t\t\tDEL = 46,\r\n\t\t\tENTER = 13,\r\n\t\t\tESC = 27,\r\n\t\t\tBACKSPACE = 8,\r\n\t\t\tARROWLEFT = 37,\r\n\t\t\tARROWUP = 38,\r\n\t\t\tARROWRIGHT = 39,\r\n\t\t\tARROWDOWN = 40,\r\n\t\t\tTAB = 9,\r\n\t\t\tF5 = 116,\r\n\t\t\tAKEY = 65,\r\n\t\t\tCKEY = 67,\r\n\t\t\tVKEY = 86,\r\n\t\t\tZKEY = 90,\r\n\t\t\tYKEY = 89,\r\n\t\t\tctrlDown\t=\tfalse,\r\n\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\r\n\r\n\t\t\tlazyInitTimer = 0,\r\n\t\t\tcreateDateTimePicker,\r\n\t\t\tdestroyDateTimePicker,\r\n\r\n\t\t\tlazyInit = function (input) {\r\n\t\t\t\tinput\r\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback() {\r\n\t\t\t\t\t\tif (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tclearTimeout(lazyInitTimer);\r\n\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\r\n\r\n\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\r\n\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tinput\r\n\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)\r\n\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\r\n\t\t\t\t\t\t}, 100);\r\n\t\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\tcreateDateTimePicker = function (input) {\r\n\t\t\tvar datetimepicker = $('<div class=\"xdsoft_datetimepicker xdsoft_noselect\"></div>'),\r\n\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\r\n\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\r\n\t\t\t\tmonth_picker = $('<div class=\"xdsoft_monthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\r\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\r\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\r\n\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\r\n\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\r\n\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\r\n\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\r\n\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\r\n\t\t\t\tapplyButton = $('<button type=\"button\" class=\"xdsoft_save_selected blue-gradient-button\">Save Selected</button>'),\r\n\r\n\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\r\n\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\r\n\t\t\t\ttriggerAfterOpen = false,\r\n\t\t\t\tXDSoft_datetime,\r\n\r\n\t\t\t\txchangeTimer,\r\n\t\t\t\ttimerclick,\r\n\t\t\t\tcurrent_time_index,\r\n\t\t\t\tsetPos,\r\n\t\t\t\ttimer = 0,\r\n\t\t\t\t_xdsoft_datetime,\r\n\t\t\t\tforEachAncestorOf;\r\n\r\n\t\t\tif (options.id) {\r\n\t\t\t\tdatetimepicker.attr('id', options.id);\r\n\t\t\t}\r\n\t\t\tif (options.style) {\r\n\t\t\t\tdatetimepicker.attr('style', options.style);\r\n\t\t\t}\r\n\t\t\tif (options.weeks) {\r\n\t\t\t\tdatetimepicker.addClass('xdsoft_showweeks');\r\n\t\t\t}\r\n\t\t\tif (options.rtl) {\r\n\t\t\t\tdatetimepicker.addClass('xdsoft_rtl');\r\n\t\t\t}\r\n\r\n\t\t\tdatetimepicker.addClass('xdsoft_' + options.theme);\r\n\t\t\tdatetimepicker.addClass(options.className);\r\n\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_month span')\r\n\t\t\t\t.after(monthselect);\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_year span')\r\n\t\t\t\t.after(yearselect);\r\n\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\r\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\r\n\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\r\n\t\t\t\t\t\tval = 0,\r\n\t\t\t\t\t\ttop = 0,\r\n\t\t\t\t\t\tvisible = select.is(':visible'),\r\n\t\t\t\t\t\titems,\r\n\t\t\t\t\t\ti;\r\n\r\n\t\t\t\t\tmonth_picker\r\n\t\t\t\t\t\t.find('.xdsoft_select')\r\n\t\t\t\t\t\t.hide();\r\n\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\r\n\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tselect[visible ? 'hide' : 'show']();\r\n\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\r\n\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttop += items[0].offsetHeight;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tselect.xdsoftScroller(options, top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\tvar handleTouchMoved = function (event) {\r\n\t\t\t\tvar evt = event.originalEvent;\r\n\t\t\t\tvar touchPosition = evt.touches ? evt.touches[0] : evt;\r\n\t\t\t\tthis.touchStartPosition = this.touchStartPosition || touchPosition;\r\n\t\t\t\tvar xMovement = Math.abs(this.touchStartPosition.clientX - touchPosition.clientX);\r\n\t\t\t\tvar yMovement = Math.abs(this.touchStartPosition.clientY - touchPosition.clientY);\r\n\t\t\t\tvar distance = Math.sqrt(xMovement * xMovement + yMovement * yMovement);\r\n\t\t\t\tif(distance > options.touchMovedThreshold) {\r\n\t\t\t\t\tthis.touchMoved = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_select')\r\n\t\t\t\t.xdsoftScroller(options)\r\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\r\n\t\t\t\t\tvar evt = event.originalEvent;\r\n\t\t\t\t\tthis.touchMoved = false;\r\n\t\t\t\t\tthis.touchStartPosition = evt.touches ? evt.touches[0] : evt;\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t})\r\n\t\t\t\t.on('touchmove', '.xdsoft_option', handleTouchMoved)\r\n\t\t\t\t.on('touchend mousedown.xdsoft', '.xdsoft_option', function () {\r\n\t\t\t\t\tif (!this.touchMoved) {\r\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\r\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$(this).parent().parent().hide();\r\n\r\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\r\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\r\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tdatetimepicker.getValue = function () {\r\n\t\t\t\treturn _xdsoft_datetime.getCurrentTime();\r\n\t\t\t};\r\n\r\n\t\t\tdatetimepicker.setOptions = function (_options) {\r\n\t\t\t\tvar highlightedDates = {};\r\n\r\n\t\t\t\toptions = $.extend(true, {}, options, _options);\r\n\r\n\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\r\n\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\r\n\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.allowDates && $.isArray(_options.allowDates) && _options.allowDates.length) {\r\n\t\t\t\t\toptions.allowDates = $.extend(true, [], _options.allowDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)===\"[object String]\") {\r\n\t\t\t\t\toptions.allowDateRe = new RegExp(_options.allowDateRe);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {\r\n\t\t\t\t\t$.each(_options.highlightedDates, function (index, value) {\r\n\t\t\t\t\t\tvar splitData = $.map(value.split(','), $.trim),\r\n\t\t\t\t\t\t\texDesc,\r\n\t\t\t\t\t\t\thDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style\r\n\t\t\t\t\t\t\tkeyDate = dateHelper.formatDate(hDate.date, options.formatDate);\r\n\t\t\t\t\t\tif (highlightedDates[keyDate] !== undefined) {\r\n\t\t\t\t\t\t\texDesc = highlightedDates[keyDate].desc;\r\n\t\t\t\t\t\t\tif (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {\r\n\t\t\t\t\t\t\t\thighlightedDates[keyDate].desc = exDesc + \"\\n\" + hDate.desc;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\thighlightedDates[keyDate] = hDate;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\toptions.highlightedDates = $.extend(true, [], highlightedDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {\r\n\t\t\t\t\thighlightedDates = $.extend(true, [], options.highlightedDates);\r\n\t\t\t\t\t$.each(_options.highlightedPeriods, function (index, value) {\r\n\t\t\t\t\t\tvar dateTest, // start date\r\n\t\t\t\t\t\t\tdateEnd,\r\n\t\t\t\t\t\t\tdesc,\r\n\t\t\t\t\t\t\thDate,\r\n\t\t\t\t\t\t\tkeyDate,\r\n\t\t\t\t\t\t\texDesc,\r\n\t\t\t\t\t\t\tstyle;\r\n\t\t\t\t\t\tif ($.isArray(value)) {\r\n\t\t\t\t\t\t\tdateTest = value[0];\r\n\t\t\t\t\t\t\tdateEnd = value[1];\r\n\t\t\t\t\t\t\tdesc = value[2];\r\n\t\t\t\t\t\t\tstyle = value[3];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tvar splitData = $.map(value.split(','), $.trim);\r\n\t\t\t\t\t\t\tdateTest = dateHelper.parseDate(splitData[0], options.formatDate);\r\n\t\t\t\t\t\t\tdateEnd = dateHelper.parseDate(splitData[1], options.formatDate);\r\n\t\t\t\t\t\t\tdesc = splitData[2];\r\n\t\t\t\t\t\t\tstyle = splitData[3];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twhile (dateTest <= dateEnd) {\r\n\t\t\t\t\t\t\thDate = new HighlightedDate(dateTest, desc, style);\r\n\t\t\t\t\t\t\tkeyDate = dateHelper.formatDate(dateTest, options.formatDate);\r\n\t\t\t\t\t\t\tdateTest.setDate(dateTest.getDate() + 1);\r\n\t\t\t\t\t\t\tif (highlightedDates[keyDate] !== undefined) {\r\n\t\t\t\t\t\t\t\texDesc = highlightedDates[keyDate].desc;\r\n\t\t\t\t\t\t\t\tif (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {\r\n\t\t\t\t\t\t\t\t\thighlightedDates[keyDate].desc = exDesc + \"\\n\" + hDate.desc;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\thighlightedDates[keyDate] = hDate;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\toptions.highlightedDates = $.extend(true, [], highlightedDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\r\n\t\t\t\t\toptions.disabledDates = $.extend(true, [], _options.disabledDates);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {\r\n\t\t\t\t\toptions.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\r\n\t\t\t\t\tinput.trigger('open.xdsoft');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.inline) {\r\n\t\t\t\t\ttriggerAfterOpen = true;\r\n\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\r\n\t\t\t\t\tinput.after(datetimepicker).hide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.inverseButton) {\r\n\t\t\t\t\toptions.next = 'xdsoft_prev';\r\n\t\t\t\t\toptions.prev = 'xdsoft_next';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.datepicker) {\r\n\t\t\t\t\tdatepicker.addClass('active');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatepicker.removeClass('active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.timepicker) {\r\n\t\t\t\t\ttimepicker.addClass('active');\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttimepicker.removeClass('active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.value) {\r\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\r\n\t\t\t\t\tif (input && input.val) {\r\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\r\n\t\t\t\t\toptions.dayOfWeekStart = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!options.timepickerScrollbar) {\r\n\t\t\t\t\ttimeboxparent.xdsoftScroller(options, 'hide');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.minDate && /^[\\+\\-](.*)$/.test(options.minDate)) {\r\n\t\t\t\t\toptions.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.maxDate && /^[\\+\\-](.*)$/.test(options.maxDate)) {\r\n\t\t\t\t\toptions.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);\r\n\t\t\t\t}\r\n\r\n if (options.minDateTime && /^\\+(.*)$/.test(options.minDateTime)) {\r\n \toptions.minDateTime = _xdsoft_datetime.strToDateTime(options.minDateTime).dateFormat(options.formatDate);\r\n }\r\n\r\n if (options.maxDateTime && /^\\+(.*)$/.test(options.maxDateTime)) {\r\n \toptions.maxDateTime = _xdsoft_datetime.strToDateTime(options.maxDateTime).dateFormat(options.formatDate);\r\n }\r\n\r\n\t\t\t\tapplyButton.toggle(options.showApplyButton);\r\n\r\n\t\t\t\tmonth_picker\r\n\t\t\t\t\t.find('.xdsoft_today_button')\r\n\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\r\n\r\n\t\t\t\tmonth_picker\r\n\t\t\t\t\t.find('.' + options.prev)\r\n\t\t\t\t\t.css('visibility', !options.prevButton ? 'hidden' : 'visible');\r\n\r\n\t\t\t\tmonth_picker\r\n\t\t\t\t\t.find('.' + options.next)\r\n\t\t\t\t\t.css('visibility', !options.nextButton ? 'hidden' : 'visible');\r\n\r\n\t\t\t\tsetMask(options);\r\n\r\n\t\t\t\tif (options.validateOnBlur) {\r\n\t\t\t\t\tinput\r\n\t\t\t\t\t\t.off('blur.xdsoft')\r\n\t\t\t\t\t\t.on('blur.xdsoft', function () {\r\n\t\t\t\t\t\t\tif (options.allowBlank && (!$.trim($(this).val()).length ||\r\n\t\t\t\t\t\t\t\t\t(typeof options.mask === \"string\" && $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_')))) {\r\n\t\t\t\t\t\t\t\t$(this).val(null);\r\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar d = dateHelper.parseDate($(this).val(), options.format);\r\n\t\t\t\t\t\t\t\tif (d) { // parseDate() may skip some invalid parts like date or time, so make it clear for user: show parsed date/time\r\n\t\t\t\t\t\t\t\t\t$(this).val(dateHelper.formatDate(d, options.format));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tvar splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')),\r\n\t\t\t\t\t\t\t\t\t\tsplittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));\r\n\r\n\t\t\t\t\t\t\t\t\t// parse the numbers as 0312 => 03:12\r\n\t\t\t\t\t\t\t\t\tif (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {\r\n\t\t\t\t\t\t\t\t\t\t$(this).val([splittedHours, splittedMinutes].map(function (item) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn item > 9 ? item : '0' + item;\r\n\t\t\t\t\t\t\t\t\t\t}).join(':'));\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t$(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\r\n\r\n\t\t\t\tdatetimepicker\r\n\t\t\t\t\t.trigger('xchange.xdsoft')\r\n\t\t\t\t\t.trigger('afterOpen.xdsoft');\r\n\t\t\t};\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.data('options', options)\r\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tyearselect.hide();\r\n\t\t\t\t\tmonthselect.hide();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\r\n\t\t\ttimeboxparent.append(timebox);\r\n\t\t\ttimeboxparent.xdsoftScroller(options);\r\n\r\n\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\r\n\t\t\t\ttimeboxparent.xdsoftScroller(options);\r\n\t\t\t});\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.append(datepicker)\r\n\t\t\t\t.append(timepicker);\r\n\r\n\t\t\tif (options.withoutCopyright !== true) {\r\n\t\t\t\tdatetimepicker\r\n\t\t\t\t\t.append(xdsoft_copyright);\r\n\t\t\t}\r\n\r\n\t\t\tdatepicker\r\n\t\t\t\t.append(month_picker)\r\n\t\t\t\t.append(calendar)\r\n\t\t\t\t.append(applyButton);\r\n\r\n\t\t\t$(options.parentID)\r\n\t\t\t\t.append(datetimepicker);\r\n\r\n\t\t\tXDSoft_datetime = function () {\r\n\t\t\t\tvar _this = this;\r\n\t\t\t\t_this.now = function (norecursion) {\r\n\t\t\t\t\tvar d = new Date(),\r\n\t\t\t\t\t\tdate,\r\n\t\t\t\t\t\ttime;\r\n\r\n\t\t\t\t\tif (!norecursion && options.defaultDate) {\r\n\t\t\t\t\t\tdate = _this.strToDateTime(options.defaultDate);\r\n\t\t\t\t\t\td.setFullYear(date.getFullYear());\r\n\t\t\t\t\t\td.setMonth(date.getMonth());\r\n\t\t\t\t\t\td.setDate(date.getDate());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\td.setFullYear(d.getFullYear());\r\n\r\n\t\t\t\t\tif (!norecursion && options.defaultTime) {\r\n\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\r\n\t\t\t\t\t\td.setHours(time.getHours());\r\n\t\t\t\t\t\td.setMinutes(time.getMinutes());\r\n\t\t\t\t\t\td.setSeconds(time.getSeconds());\r\n\t\t\t\t\t\td.setMilliseconds(time.getMilliseconds());\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn d;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.isValidDate = function (d) {\r\n\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn !isNaN(d.getTime());\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.setCurrentTime = function (dTime, requireValidDate) {\r\n\t\t\t\t\tif (typeof dTime === 'string') {\r\n\t\t\t\t\t\t_this.currentTime = _this.strToDateTime(dTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (_this.isValidDate(dTime)) {\r\n\t\t\t\t\t\t_this.currentTime = dTime;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!dTime && !requireValidDate && options.allowBlank && !options.inline) {\r\n\t\t\t\t\t\t_this.currentTime = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t_this.currentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.empty = function () {\r\n\t\t\t\t\t_this.currentTime = null;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.getCurrentTime = function () {\r\n\t\t\t\t\treturn _this.currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.nextMonth = function () {\r\n\r\n\t\t\t\t\tif (_this.currentTime === undefined || _this.currentTime === null) {\r\n\t\t\t\t\t\t_this.currentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\r\n\t\t\t\t\t\tyear;\r\n\t\t\t\t\tif (month === 12) {\r\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\r\n\t\t\t\t\t\tmonth = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tyear = _this.currentTime.getFullYear();\r\n\r\n\t\t\t\t\t_this.currentTime.setDate(\r\n\t\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\r\n\t\t\t\t\t\t\t_this.currentTime.getDate()\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t\t\t_this.currentTime.setMonth(month);\r\n\r\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\r\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\r\n\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\treturn month;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.prevMonth = function () {\r\n\r\n\t\t\t\t\tif (_this.currentTime === undefined || _this.currentTime === null) {\r\n\t\t\t\t\t\t_this.currentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\r\n\t\t\t\t\tif (month === -1) {\r\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\r\n\t\t\t\t\t\tmonth = 11;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_this.currentTime.setDate(\r\n\t\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\r\n\t\t\t\t\t\t\t_this.currentTime.getDate()\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t\t\t_this.currentTime.setMonth(month);\r\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\r\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\treturn month;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.getWeekOfYear = function (datetime) {\r\n\t\t\t\t\tif (options.onGetWeekOfYear && $.isFunction(options.onGetWeekOfYear)) {\r\n\t\t\t\t\t\tvar week = options.onGetWeekOfYear.call(datetimepicker, datetime);\r\n\t\t\t\t\t\tif (typeof week !== 'undefined') {\r\n\t\t\t\t\t\t\treturn week;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\r\n\r\n\t\t\t\t\t//First week of the year is th one with the first Thursday according to ISO8601\r\n\t\t\t\t\tif (onejan.getDay() !== 4) {\r\n\t\t\t\t\t\tonejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.strToDateTime = function (sDateTime) {\r\n\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\r\n\r\n\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\r\n\t\t\t\t\t\treturn sDateTime;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttmpDate = /^([+-]{1})(.*)$/.exec(sDateTime);\r\n\r\n\t\t\t\t\tif (tmpDate) {\r\n\t\t\t\t\t\ttmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (tmpDate && tmpDate[2]) {\r\n\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\r\n\t\t\t\t\t\tcurrentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcurrentTime = sDateTime ? dateHelper.parseDate(sDateTime, options.format) : _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\r\n\t\t\t\t\t\tcurrentTime = _this.now();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.strToDate = function (sDate) {\r\n\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\r\n\t\t\t\t\t\treturn sDate;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar currentTime = sDate ? dateHelper.parseDate(sDate, options.formatDate) : _this.now(true);\r\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\r\n\t\t\t\t\t\tcurrentTime = _this.now(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.strtotime = function (sTime) {\r\n\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\r\n\t\t\t\t\t\treturn sTime;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar currentTime = sTime ? dateHelper.parseDate(sTime, options.formatTime) : _this.now(true);\r\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\r\n\t\t\t\t\t\tcurrentTime = _this.now(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn currentTime;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_this.str = function () {\r\n\t\t\t\t\tvar format = options.format;\r\n\t\t\t\t\tif (options.yearOffset) {\r\n\t\t\t\t\t\tformat = format.replace('Y', _this.currentTime.getFullYear() + options.yearOffset);\r\n\t\t\t\t\t\tformat = format.replace('y', String(_this.currentTime.getFullYear() + options.yearOffset).substring(2, 4));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn dateHelper.formatDate(_this.currentTime, format);\r\n\t\t\t\t};\r\n\t\t\t\t_this.currentTime = this.now();\r\n\t\t\t};\r\n\r\n\t\t\t_xdsoft_datetime = new XDSoft_datetime();\r\n\r\n\t\t\tapplyButton.on('touchend click', function (e) {//pathbrite\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\r\n\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t});\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_today_button')\r\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\r\n\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0, true);\r\n\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\r\n\t\t\t\t}).on('dblclick.xdsoft', function () {\r\n\t\t\t\tvar currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;\r\n\t\t\t\tcurrentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\r\n\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\r\n\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\r\n\t\t\t\tif (currentDate < minDate) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\r\n\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());\r\n\t\t\t\tif (currentDate > maxDate) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\t\t\t\tinput.trigger('change');\r\n\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t});\r\n\t\t\tmonth_picker\r\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\r\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\ttimer = 0,\r\n\t\t\t\t\t\tstop = false;\r\n\r\n\t\t\t\t\t(function arguments_callee1(v) {\r\n\t\t\t\t\t\tif ($this.hasClass(options.next)) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\r\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (options.monthChangeSpinner) {\r\n\t\t\t\t\t\t\tif (!stop) {\r\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}(500));\r\n\r\n\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft', function arguments_callee2() {\r\n\t\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\t\tstop = true;\r\n\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchend mouseup.xdsoft', arguments_callee2);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\ttimepicker\r\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\r\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\ttimer = 0,\r\n\t\t\t\t\t\tstop = false,\r\n\t\t\t\t\t\tperiod = 110;\r\n\t\t\t\t\t(function arguments_callee4(v) {\r\n\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\r\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\r\n\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\r\n\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\r\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\r\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\r\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/**\r\n\t\t\t\t\t\t * Fixed bug:\r\n\t\t\t\t\t\t * When using css3 transition, it will cause a bug that you cannot scroll the timepicker list.\r\n\t\t\t\t\t\t * The reason is that the transition-duration time, if you set it to 0, all things fine, otherwise, this\r\n\t\t\t\t\t\t * would cause a bug when you use jquery.css method.\r\n\t\t\t\t\t\t * Let's say: * { transition: all .5s ease; }\r\n\t\t\t\t\t\t * jquery timebox.css('marginTop') will return the original value which is before you clicking the next/prev button,\r\n\t\t\t\t\t\t * meanwhile the timebox[0].style.marginTop will return the right value which is after you clicking the\r\n\t\t\t\t\t\t * next/prev button.\r\n\t\t\t\t\t\t *\r\n\t\t\t\t\t\t * What we should do:\r\n\t\t\t\t\t\t * Replace timebox.css('marginTop') with timebox[0].style.marginTop.\r\n\t\t\t\t\t\t */\r\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox[0].style.marginTop, 10) / (height - pheight))]);\r\n\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\r\n\t\t\t\t\t\tif (!stop) {\r\n\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}(500));\r\n\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft', function arguments_callee5() {\r\n\t\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\t\tstop = true;\r\n\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow])\r\n\t\t\t\t\t\t\t.off('touchend mouseup.xdsoft', arguments_callee5);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\txchangeTimer = 0;\r\n\t\t\t// base handler - generating a calendar and timepicker\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.on('xchange.xdsoft', function (event) {\r\n\t\t\t\t\tclearTimeout(xchangeTimer);\r\n\t\t\t\t\txchangeTimer = setTimeout(function () {\r\n\r\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar table =\t'',\r\n\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\r\n\t\t\t\t\t\t\ti = 0,\r\n\t\t\t\t\t\t\tj,\r\n\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\r\n\t\t\t\t\t\t\tmaxDate = false,\r\n\t\t\t\t\t\t\tminDate = false,\r\n\t\t\t\t\t\t\tminDateTime = false,\r\n\t\t\t\t\t\t\tmaxDateTime = false,\r\n\t\t\t\t\t\t\thDate,\r\n\t\t\t\t\t\t\tday,\r\n\t\t\t\t\t\t\td,\r\n\t\t\t\t\t\t\ty,\r\n\t\t\t\t\t\t\tm,\r\n\t\t\t\t\t\t\tw,\r\n\t\t\t\t\t\t\tclasses = [],\r\n\t\t\t\t\t\t\tcustomDateSettings,\r\n\t\t\t\t\t\t\tnewRow = true,\r\n\t\t\t\t\t\t\ttime = '',\r\n\t\t\t\t\t\t\th,\r\n\t\t\t\t\t\t\tline_time,\r\n\t\t\t\t\t\t\tdescription;\r\n\r\n\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\r\n\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable += '<table><thead><tr>';\r\n\r\n\t\t\t\t\t\tif (options.weeks) {\r\n\t\t\t\t\t\t\ttable += '<th></th>';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\r\n\t\t\t\t\t\t\ttable += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable += '</tr></thead>';\r\n\t\t\t\t\t\ttable += '<tbody>';\r\n\r\n\t\t\t\t\t\tif (options.maxDate !== false) {\r\n\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\r\n\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.minDate !== false) {\r\n\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\r\n\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\r\n\t\t\t\t\t\t}\r\n\r\n if (options.minDateTime !== false) {\r\n\t\t\t\t\t\t\tminDateTime = _xdsoft_datetime.strToDate(options.minDateTime);\r\n\t\t\t\t\t\t\tminDateTime = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), minDateTime.getHours(), minDateTime.getMinutes(), minDateTime.getSeconds());\r\n\t\t\t\t\t\t}\r\n\r\n if (options.maxDateTime !== false) {\r\n\t\t\t\t\t\t\tmaxDateTime = _xdsoft_datetime.strToDate(options.maxDateTime);\r\n\t\t\t\t\t\t\tmaxDateTime = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), maxDateTime.getHours(), maxDateTime.getMinutes(), maxDateTime.getSeconds());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar maxDateTimeDay;\r\n\t\t\t\t\t\tif (maxDateTime !== false) {\r\n\t\t\t\t\t\t\tmaxDateTimeDay = ((maxDateTime.getFullYear() * 12) + maxDateTime.getMonth()) * 31 + maxDateTime.getDate();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\r\n\t\t\t\t\t\t\tclasses = [];\r\n\t\t\t\t\t\t\ti += 1;\r\n\r\n\t\t\t\t\t\t\tday = start.getDay();\r\n\t\t\t\t\t\t\td = start.getDate();\r\n\t\t\t\t\t\t\ty = start.getFullYear();\r\n\t\t\t\t\t\t\tm = start.getMonth();\r\n\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\r\n\t\t\t\t\t\t\tdescription = '';\r\n\r\n\t\t\t\t\t\t\tclasses.push('xdsoft_date');\r\n\r\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\r\n\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tcustomDateSettings = null;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === \"[object RegExp]\"){\r\n\t\t\t\t\t\t\t\tif(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(options.allowDates && options.allowDates.length>0){\r\n\t\t\t\t\t\t\t\tif(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar currentDay = ((start.getFullYear() * 12) + start.getMonth()) * 31 + start.getDate();\r\n\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDateTime !== false && start < minDateTime) || (minDate !== false && start < minDate) || (maxDateTime !== false && currentDay > maxDateTimeDay) || (customDateSettings && customDateSettings[0] === false)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (options.disabledWeekDays.indexOf(day) !== -1) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (input.is('[disabled]')) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\r\n\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (dateHelper.formatDate(today, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (options.highlightedDates[dateHelper.formatDate(start, options.formatDate)] !== undefined) {\r\n\t\t\t\t\t\t\t\thDate = options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];\r\n\t\t\t\t\t\t\t\tclasses.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);\r\n\t\t\t\t\t\t\t\tdescription = hDate.desc === undefined ? '' : hDate.desc;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\r\n\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (newRow) {\r\n\t\t\t\t\t\t\t\ttable += '<tr>';\r\n\t\t\t\t\t\t\t\tnewRow = false;\r\n\t\t\t\t\t\t\t\tif (options.weeks) {\r\n\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\" title=\"' + description + '\">' +\r\n\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\r\n\t\t\t\t\t\t\t\t'</td>';\r\n\r\n\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\r\n\t\t\t\t\t\t\t\ttable += '</tr>';\r\n\t\t\t\t\t\t\t\tnewRow = true;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tstart.setDate(d + 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttable += '</tbody></table>';\r\n\r\n\t\t\t\t\t\tcalendar.html(table);\r\n\r\n\t\t\t\t\t\tmonth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);\r\n\t\t\t\t\t\tmonth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear() + options.yearOffset);\r\n\r\n\t\t\t\t\t\t// generate timebox\r\n\t\t\t\t\t\ttime = '';\r\n\t\t\t\t\t\th = '';\r\n\t\t\t\t\t\tm = '';\r\n\r\n\t\t\t\t\t\tvar minTimeMinutesOfDay = 0;\r\n\t\t\t\t\t\tif (options.minTime !== false) {\r\n\t\t\t\t\t\t var t = _xdsoft_datetime.strtotime(options.minTime);\r\n\t\t\t\t\t\t minTimeMinutesOfDay = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar maxTimeMinutesOfDay = 24 * 60;\r\n\t\t\t\t\t\tif (options.maxTime !== false) {\r\n\t\t\t\t\t\t var t = _xdsoft_datetime.strtotime(options.maxTime);\r\n\t\t\t\t\t\t maxTimeMinutesOfDay = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.minDateTime !== false) {\r\n\t\t\t\t\t\t\tvar t = _xdsoft_datetime.strToDateTime(options.minDateTime);\r\n\t\t\t\t\t\t var currentDayIsMinDateTimeDay = dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(t, options.formatDate);\r\n\t\t\t\t\t\t\tif (currentDayIsMinDateTimeDay) {\r\n\t\t\t\t\t\t\t\tvar m = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t\t\tif (m > minTimeMinutesOfDay) minTimeMinutesOfDay = m;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.maxDateTime !== false) {\r\n\t\t\t\t\t\t\tvar t = _xdsoft_datetime.strToDateTime(options.maxDateTime);\r\n\t\t\t\t\t\t var currentDayIsMaxDateTimeDay = dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(t, options.formatDate);\r\n\t\t\t\t\t\t\tif (currentDayIsMaxDateTimeDay) {\r\n\t\t\t\t\t\t\t\tvar m = 60 * t.getHours() + t.getMinutes();\r\n\t\t\t\t\t\t\t\tif (m < maxTimeMinutesOfDay) maxTimeMinutesOfDay = m;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tline_time = function line_time(h, m) {\r\n\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now(), current_time,\r\n\t\t\t\t\t\t\t\tisALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;\r\n\t\t\t\t\t\t\tnow.setHours(h);\r\n\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\r\n\t\t\t\t\t\t\tnow.setMinutes(m);\r\n\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\r\n\t\t\t\t\t\t\tclasses = [];\r\n\t\t\t\t\t\t\tvar currentMinutesOfDay = 60 * h + m;\r\n\t\t\t\t\t\t\tif (input.is('[disabled]') || (currentMinutesOfDay >= maxTimeMinutesOfDay) || (currentMinutesOfDay < minTimeMinutesOfDay)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcurrent_time = new Date(_xdsoft_datetime.currentTime);\r\n\t\t\t\t\t\t\tcurrent_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));\r\n\r\n\t\t\t\t\t\t\tif (!isALlowTimesInit) {\r\n\t\t\t\t\t\t\t\tcurrent_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {\r\n\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\r\n\t\t\t\t\t\t\t\t} else if (options.initTime) {\r\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\r\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + dateHelper.formatDate(now, options.formatTime) + '</div>';\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\r\n\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\r\n\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\r\n\t\t\t\t\t\t\t\t var currentMinutesOfDay = i * 60 + j;\r\n\t\t\t\t\t\t\t\t if (currentMinutesOfDay < minTimeMinutesOfDay) continue;\r\n\t\t\t\t\t\t\t\t if (currentMinutesOfDay >= maxTimeMinutesOfDay) continue;\r\n\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\r\n\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\r\n\t\t\t\t\t\t\t\t\tline_time(h, m);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\r\n\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\r\n\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\r\n\t\t\t\t\t\t\t\tline_time(h, m);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimebox.html(time);\r\n\r\n\t\t\t\t\t\topt = '';\r\n\r\n\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10); i <= parseInt(options.yearEnd, 10); i += 1) {\r\n\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + (i + options.yearOffset) + '</div>';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tyearselect.children().eq(0)\r\n\t\t\t\t\t\t\t.html(opt);\r\n\r\n\t\t\t\t\t\tfor (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {\r\n\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[globalLocale].months[i] + '</div>';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\r\n\t\t\t\t\t\t$(datetimepicker)\r\n\t\t\t\t\t\t\t.trigger('generate.xdsoft');\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t})\r\n\t\t\t\t.on('afterOpen.xdsoft', function () {\r\n\t\t\t\t\tif (options.timepicker) {\r\n\t\t\t\t\t\tvar classType, pheight, height, top;\r\n\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\r\n\t\t\t\t\t\t\tclassType = '.xdsoft_current';\r\n\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\r\n\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (classType) {\r\n\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\r\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\r\n\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\r\n\t\t\t\t\t\t\tif ((height - pheight) < top) {\r\n\t\t\t\t\t\t\t\ttop = height - pheight;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\ttimerclick = 0;\r\n\t\t\tcalendar\r\n\t\t\t\t.on('touchend click.xdsoft', 'td', function (xdevent) {\r\n\t\t\t\t\txdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\r\n\t\t\t\t\ttimerclick += 1;\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\r\n\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\r\n\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcurrentTime.setDate(1);\r\n\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\r\n\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\r\n\t\t\t\t\tcurrentTime.setDate($this.data('date'));\r\n\r\n\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\r\n\r\n\t\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\r\n\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\r\n\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\ttimerclick = 0;\r\n\t\t\t\t\t}, 200);\r\n\t\t\t\t});\r\n\r\n\t\t\ttimebox\r\n\t\t\t\t.on('touchstart', 'div', function (xdevent) {\r\n\t\t\t\t\tthis.touchMoved = false;\r\n\t\t\t\t})\r\n\t\t\t\t.on('touchmove', 'div', handleTouchMoved)\r\n\t\t\t\t.on('touchend click.xdsoft', 'div', function (xdevent) {\r\n\t\t\t\t\tif (!this.touchMoved) {\r\n\t\t\t\t\t\txdevent.stopPropagation();\r\n\t\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\r\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\r\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\r\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\r\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\r\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\r\n\r\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\r\n\r\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\r\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\r\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\t\tif (options.inline !== true && options.closeOnTimeSelect === true) {\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tdatepicker\r\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\r\n\t\t\t\t\tif (!options.scrollMonth) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (event.deltaY < 0) {\r\n\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t\tinput\r\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\r\n\t\t\t\t\tif (!options.scrollInput) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!options.datepicker && options.timepicker) {\r\n\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\r\n\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\r\n\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\r\n\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (options.datepicker && !options.timepicker) {\r\n\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\r\n\t\t\t\t\t\tif (input.val) {\r\n\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.on('changedatetime.xdsoft', function (event) {\r\n\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\r\n\t\t\t\t\t\tvar $input = datetimepicker.data('input');\r\n\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\r\n\t\t\t\t\t\tdelete options.value;\r\n\t\t\t\t\t\t$input.trigger('change');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('generate.xdsoft', function () {\r\n\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\r\n\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (triggerAfterOpen) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\r\n\t\t\t\t\t\ttriggerAfterOpen = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('click.xdsoft', function (xdevent) {\r\n\t\t\t\t\txdevent.stopPropagation();\r\n\t\t\t\t});\r\n\r\n\t\t\tcurrent_time_index = 0;\r\n\r\n\t\t\t/**\r\n\t\t\t * Runs the callback for each of the specified node's ancestors.\r\n\t\t\t *\r\n\t\t\t * Return FALSE from the callback to stop ascending.\r\n\t\t\t *\r\n\t\t\t * @param {DOMNode} node\r\n\t\t\t * @param {Function} callback\r\n\t\t\t * @returns {undefined}\r\n\t\t\t */\r\n\t\t\tforEachAncestorOf = function (node, callback) {\r\n\t\t\t\tdo {\r\n\t\t\t\t\tnode = node.parentNode;\r\n\r\n\t\t\t\t\tif (!node || callback(node) === false) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while (node.nodeName !== 'HTML');\r\n\t\t\t};\r\n\r\n\t\t\t/**\r\n\t\t\t * Sets the position of the picker.\r\n\t\t\t *\r\n\t\t\t * @returns {undefined}\r\n\t\t\t */\r\n\t\t\tsetPos = function () {\r\n\t\t\t\tvar dateInputOffset,\r\n\t\t\t\t\tdateInputElem,\r\n\t\t\t\t\tverticalPosition,\r\n\t\t\t\t\tleft,\r\n\t\t\t\t\tposition,\r\n\t\t\t\t\tdatetimepickerElem,\r\n\t\t\t\t\tdateInputHasFixedAncestor,\r\n\t\t\t\t\t$dateInput,\r\n\t\t\t\t\twindowWidth,\r\n\t\t\t\t\tverticalAnchorEdge,\r\n\t\t\t\t\tdatetimepickerCss,\r\n\t\t\t\t\twindowHeight,\r\n\t\t\t\t\twindowScrollTop;\r\n\r\n\t\t\t\t$dateInput = datetimepicker.data('input');\r\n\t\t\t\tdateInputOffset = $dateInput.offset();\r\n\t\t\t\tdateInputElem = $dateInput[0];\r\n\r\n\t\t\t\tverticalAnchorEdge = 'top';\r\n\t\t\t\tverticalPosition = (dateInputOffset.top + dateInputElem.offsetHeight) - 1;\r\n\t\t\t\tleft = dateInputOffset.left;\r\n\t\t\t\tposition = \"absolute\";\r\n\r\n\t\t\t\twindowWidth = $(options.contentWindow).width();\r\n\t\t\t\twindowHeight = $(options.contentWindow).height();\r\n\t\t\t\twindowScrollTop = $(options.contentWindow).scrollTop();\r\n\r\n\t\t\t\tif ((options.ownerDocument.documentElement.clientWidth - dateInputOffset.left) < datepicker.parent().outerWidth(true)) {\r\n\t\t\t\t\tvar diff = datepicker.parent().outerWidth(true) - dateInputElem.offsetWidth;\r\n\t\t\t\t\tleft = left - diff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($dateInput.parent().css('direction') === 'rtl') {\r\n\t\t\t\t\tleft -= (datetimepicker.outerWidth() - $dateInput.outerWidth());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.fixed) {\r\n\t\t\t\t\tverticalPosition -= windowScrollTop;\r\n\t\t\t\t\tleft -= $(options.contentWindow).scrollLeft();\r\n\t\t\t\t\tposition = \"fixed\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdateInputHasFixedAncestor = false;\r\n\r\n\t\t\t\t\tforEachAncestorOf(dateInputElem, function (ancestorNode) {\r\n\t\t\t\t\t\tif (ancestorNode === null) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (options.contentWindow.getComputedStyle(ancestorNode).getPropertyValue('position') === 'fixed') {\r\n\t\t\t\t\t\t\tdateInputHasFixedAncestor = true;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (dateInputHasFixedAncestor) {\r\n\t\t\t\t\t\tposition = 'fixed';\r\n\r\n\t\t\t\t\t\t//If the picker won't fit entirely within the viewport then display it above the date input.\r\n\t\t\t\t\t\tif (verticalPosition + datetimepicker.outerHeight() > windowHeight + windowScrollTop) {\r\n\t\t\t\t\t\t\tverticalAnchorEdge = 'bottom';\r\n\t\t\t\t\t\t\tverticalPosition = (windowHeight + windowScrollTop) - dateInputOffset.top;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tverticalPosition -= windowScrollTop;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (verticalPosition + datetimepicker[0].offsetHeight > windowHeight + windowScrollTop) {\r\n\t\t\t\t\t\t\tverticalPosition = dateInputOffset.top - datetimepicker[0].offsetHeight + 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (verticalPosition < 0) {\r\n\t\t\t\t\t\tverticalPosition = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (left + dateInputElem.offsetWidth > windowWidth) {\r\n\t\t\t\t\t\tleft = windowWidth - dateInputElem.offsetWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdatetimepickerElem = datetimepicker[0];\r\n\r\n\t\t\t\tforEachAncestorOf(datetimepickerElem, function (ancestorNode) {\r\n\t\t\t\t\tvar ancestorNodePosition;\r\n\r\n\t\t\t\t\tancestorNodePosition = options.contentWindow.getComputedStyle(ancestorNode).getPropertyValue('position');\r\n\r\n\t\t\t\t\tif (ancestorNodePosition === 'relative' && windowWidth >= ancestorNode.offsetWidth) {\r\n\t\t\t\t\t\tleft = left - ((windowWidth - ancestorNode.offsetWidth) / 2);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdatetimepickerCss = {\r\n\t\t\t\t\tposition: position,\r\n\t\t\t\t\tleft: left,\r\n\t\t\t\t\ttop: '', //Initialize to prevent previous values interfering with new ones.\r\n\t\t\t\t\tbottom: '' //Initialize to prevent previous values interfering with new ones.\r\n\t\t\t\t};\r\n\r\n\t\t\t\tdatetimepickerCss[verticalAnchorEdge] = verticalPosition;\r\n\r\n\t\t\t\tdatetimepicker.css(datetimepickerCss);\r\n\t\t\t};\r\n\r\n\t\t\tdatetimepicker\r\n\t\t\t\t.on('open.xdsoft', function (event) {\r\n\t\t\t\t\tvar onShow = true;\r\n\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\r\n\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (onShow !== false) {\r\n\t\t\t\t\t\tdatetimepicker.show();\r\n\t\t\t\t\t\tsetPos();\r\n\t\t\t\t\t\t$(options.contentWindow)\r\n\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\r\n\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\r\n\r\n\t\t\t\t\t\tif (options.closeOnWithoutClick) {\r\n\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchstart mousedown.xdsoft', function arguments_callee6() {\r\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchstart mousedown.xdsoft', arguments_callee6);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('close.xdsoft', function (event) {\r\n\t\t\t\t\tvar onClose = true;\r\n\t\t\t\t\tmonth_picker\r\n\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\r\n\t\t\t\t\t\t.find('.xdsoft_select')\r\n\t\t\t\t\t\t.hide();\r\n\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\r\n\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\r\n\t\t\t\t\t\tdatetimepicker.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t})\r\n\t\t\t\t.on('toggle.xdsoft', function () {\r\n\t\t\t\t\tif (datetimepicker.is(':visible')) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.data('input', input);\r\n\r\n\t\t\ttimer = 0;\r\n\r\n\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\r\n\t\t\tdatetimepicker.setOptions(options);\r\n\r\n\t\t\tfunction getCurrentValue() {\r\n\t\t\t\tvar ct = false, time;\r\n\r\n\t\t\t\tif (options.startDate) {\r\n\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\r\n\t\t\t\t\tif (ct) {\r\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\r\n\t\t\t\t\t\tif (options.yearOffset) {\r\n\t\t\t\t\t\t\tct = new Date(ct.getFullYear() - options.yearOffset, ct.getMonth(), ct.getDate(), ct.getHours(), ct.getMinutes(), ct.getSeconds(), ct.getMilliseconds());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (options.defaultDate) {\r\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(options.defaultDate);\r\n\t\t\t\t\t\tif (options.defaultTime) {\r\n\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\r\n\t\t\t\t\t\t\tct.setHours(time.getHours());\r\n\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\r\n\t\t\t\t\tdatetimepicker.data('changed', true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tct = '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ct || 0;\r\n\t\t\t}\r\n\r\n\t\t\tfunction setMask(options) {\r\n\r\n\t\t\t\tvar isValidValue = function (mask, value) {\r\n\t\t\t\t\t\tvar reg = mask\r\n\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\r\n\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\r\n\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\r\n\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\r\n\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\r\n\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetCaretPos = function (input) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tif (options.ownerDocument.selection && options.ownerDocument.selection.createRange) {\r\n\t\t\t\t\t\t\t\tvar range = options.ownerDocument.selection.createRange();\r\n\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (input.setSelectionRange) {\r\n\t\t\t\t\t\t\t\treturn input.selectionStart;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetCaretPos = function (node, pos) {\r\n\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? options.ownerDocument.getElementById(node) : node;\r\n\t\t\t\t\t\tif (!node) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (node.createTextRange) {\r\n\t\t\t\t\t\t\tvar textRange = node.createTextRange();\r\n\t\t\t\t\t\t\ttextRange.collapse(true);\r\n\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\r\n\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\r\n\t\t\t\t\t\t\ttextRange.select();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (node.setSelectionRange) {\r\n\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\tif(options.mask) {\r\n\t\t\t\t\tinput.off('keydown.xdsoft');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.mask === true) {\r\n\t\t\t\t\tif (dateHelper.formatMask) {\r\n\t\t\t\t\t\toptions.mask = dateHelper.formatMask(options.format)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toptions.mask = options.format\r\n\t\t\t\t\t\t\t.replace(/Y/g, '9999')\r\n\t\t\t\t\t\t\t.replace(/F/g, '9999')\r\n\t\t\t\t\t\t\t.replace(/m/g, '19')\r\n\t\t\t\t\t\t\t.replace(/d/g, '39')\r\n\t\t\t\t\t\t\t.replace(/H/g, '29')\r\n\t\t\t\t\t\t\t.replace(/i/g, '59')\r\n\t\t\t\t\t\t\t.replace(/s/g, '59');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($.type(options.mask) === 'string') {\r\n\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\r\n\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\r\n\t\t\t\t\t\tsetCaretPos(input[0], 0);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinput.on('paste.xdsoft', function (event) {\r\n\t\t\t\t\t // couple options here\r\n\t\t\t\t\t // 1. return false - tell them they can't paste\r\n\t\t\t\t\t // 2. insert over current characters - minimal validation\r\n\t\t\t\t\t // 3. full fledged parsing and validation\r\n\t\t\t\t\t // let's go option 2 for now\r\n\r\n\t\t\t\t\t // fires multiple times for some reason\r\n\r\n\t\t\t\t\t // https://stackoverflow.com/a/30496488/1366033\r\n\t\t\t\t\t var clipboardData = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData,\r\n\t\t\t\t\t\tpastedData = clipboardData.getData('text'),\r\n\t\t\t\t\t\tval = this.value,\r\n\t\t\t\t\t\tpos = this.selectionStart\r\n\r\n\t\t\t\t\t var valueBeforeCursor = val.substr(0, pos);\r\n\t\t\t\t\t var valueAfterPaste = val.substr(pos + pastedData.length);\r\n\r\n\t\t\t\t\t val = valueBeforeCursor + pastedData + valueAfterPaste; \r\n\t\t\t\t\t pos += pastedData.length;\r\n\r\n\t\t\t\t\t if (isValidValue(options.mask, val)) {\r\n\t\t\t\t\t\tthis.value = val;\r\n\t\t\t\t\t\tsetCaretPos(this, pos);\r\n\t\t\t\t\t } else if ($.trim(val) === '') {\r\n\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\r\n\t\t\t\t\t } else {\r\n\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t\t event.preventDefault();\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t });\r\n\r\n\t\t\t\t\t input.on('keydown.xdsoft', function (event) {\r\n\t\t\t\t\t var val = this.value,\r\n\t\t\t\t\t\tkey = event.which,\r\n\t\t\t\t\t\tpos = this.selectionStart,\r\n\t\t\t\t\t\tselEnd = this.selectionEnd,\r\n\t\t\t\t\t\thasSel = pos !== selEnd,\r\n\t\t\t\t\t\tdigit;\r\n\r\n\t\t\t\t\t // only alow these characters\r\n\t\t\t\t\t if (((key >= KEY0 && key <= KEY9) ||\r\n\t\t\t\t\t\t (key >= _KEY0 && key <= _KEY9)) || \r\n\t\t\t\t\t\t (key === BACKSPACE || key === DEL)) {\r\n\r\n\t\t\t\t\t // get char to insert which is new character or placeholder ('_')\r\n\t\t\t\t\t digit = (key === BACKSPACE || key === DEL) ? '_' :\r\n\t\t\t\t\t\t\t String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key);\r\n\r\n\t\t\t\t\t\t// we're deleting something, we're not at the start, and have normal cursor, move back one\r\n\t\t\t\t\t\t// if we have a selection length, cursor actually sits behind deletable char, not in front\r\n\t\t\t\t\t\tif (key === BACKSPACE && pos && !hasSel) {\r\n\t\t\t\t\t\t pos -= 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// don't stop on a separator, continue whatever direction you were going\r\n\t\t\t\t\t\t// value char - keep incrementing position while on separator char and we still have room\r\n\t\t\t\t\t\t// del char - keep decrementing position while on separator char and we still have room\r\n\t\t\t\t\t\twhile (true) {\r\n\t\t\t\t\t\t var maskValueAtCurPos = options.mask.substr(pos, 1);\r\n\t\t\t\t\t\t var posShorterThanMaskLength = pos < options.mask.length;\r\n\t\t\t\t\t\t var posGreaterThanZero = pos > 0;\r\n\t\t\t\t\t\t var notNumberOrPlaceholder = /[^0-9_]/;\r\n\t\t\t\t\t\t var curPosOnSep = notNumberOrPlaceholder.test(maskValueAtCurPos);\r\n\t\t\t\t\t\t var continueMovingPosition = curPosOnSep && posShorterThanMaskLength && posGreaterThanZero\r\n\r\n\t\t\t\t\t\t // if we hit a real char, stay where we are\r\n\t\t\t\t\t\t if (!continueMovingPosition) break;\r\n\r\n\t\t\t\t\t\t // hitting backspace in a selection, you can possibly go back any further - go forward\r\n\t\t\t\t\t\t pos += (key === BACKSPACE && !hasSel) ? -1 : 1;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tif (hasSel) {\r\n\t\t\t\t\t\t // pos might have moved so re-calc length\r\n\t\t\t\t\t\t var selLength = selEnd - pos\r\n\r\n\t\t\t\t\t\t // if we have a selection length we will wipe out entire selection and replace with default template for that range\r\n\t\t\t\t\t\t var defaultBlank = options.mask.replace(/[0-9]/g, '_');\r\n\t\t\t\t\t\t var defaultBlankSelectionReplacement = defaultBlank.substr(pos, selLength); \r\n\t\t\t\t\t\t var selReplacementRemainder = defaultBlankSelectionReplacement.substr(1) // might be empty\r\n\r\n\t\t\t\t\t\t var valueBeforeSel = val.substr(0, pos);\r\n\t\t\t\t\t\t var insertChars = digit + selReplacementRemainder;\r\n\t\t\t\t\t\t var charsAfterSelection = val.substr(pos + selLength);\r\n\r\n\t\t\t\t\t\t val = valueBeforeSel + insertChars + charsAfterSelection\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t var valueBeforeCursor = val.substr(0, pos);\r\n\t\t\t\t\t\t var insertChar = digit;\r\n\t\t\t\t\t\t var valueAfterNextChar = val.substr(pos + 1);\r\n\r\n\t\t\t\t\t\t val = valueBeforeCursor + insertChar + valueAfterNextChar\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ($.trim(val) === '') {\r\n\t\t\t\t\t\t // if empty, set to default\r\n\t\t\t\t\t\t val = defaultBlank\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t // if at the last character don't need to do anything\r\n\t\t\t\t\t\t if (pos === options.mask.length) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// resume cursor location\r\n\t\t\t\t\t\tpos += (key === BACKSPACE) ? 0 : 1;\r\n\t\t\t\t\t\t// don't stop on a separator, continue whatever direction you were going\r\n\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\r\n\t\t\t\t\t\t pos += (key === BACKSPACE) ? 0 : 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\r\n\t\t\t\t\t\t this.value = val;\r\n\t\t\t\t\t\t setCaretPos(this, pos);\r\n\t\t\t\t\t\t} else if ($.trim(val) === '') {\r\n\t\t\t\t\t\t this.value = options.mask.replace(/[0-9]/g, '_');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t input.trigger('error_input.xdsoft');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t } else {\r\n\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\r\n\t\t\t\t\t\t return true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t\t event.preventDefault();\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\r\n\r\n\t\t\tinput\r\n\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\r\n\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function () {\r\n\t\t\t\t\tif (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!options.openOnFocus) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\ttimer = setTimeout(function () {\r\n\t\t\t\t\t\tif (input.is(':disabled')) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttriggerAfterOpen = true;\r\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue(), true);\r\n\t\t\t\t\t\tif(options.mask) {\r\n\t\t\t\t\t\t\tsetMask(options);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\r\n\t\t\t\t\t}, 100);\r\n\t\t\t\t})\r\n\t\t\t\t.on('keydown.xdsoft', function (event) {\r\n\t\t\t\t\tvar elementSelector,\r\n\t\t\t\t\t\tkey = event.which;\r\n\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\r\n\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible,button:visible,a:visible\");\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\r\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.on('blur.xdsoft', function () {\r\n\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t});\r\n\t\t};\r\n\t\tdestroyDateTimePicker = function (input) {\r\n\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\r\n\t\t\tif (datetimepicker) {\r\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\r\n\t\t\t\tdatetimepicker.remove();\r\n\t\t\t\tinput\r\n\t\t\t\t\t.data('xdsoft_datetimepicker', null)\r\n\t\t\t\t\t.off('.xdsoft');\r\n\t\t\t\t$(options.contentWindow).off('resize.xdsoft');\r\n\t\t\t\t$([options.contentWindow, options.ownerDocument.body]).off('mousedown.xdsoft touchstart');\r\n\t\t\t\tif (input.unmousewheel) {\r\n\t\t\t\t\tinput.unmousewheel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\t$(options.ownerDocument)\r\n\t\t\t.off('keydown.xdsoftctrl keyup.xdsoftctrl')\r\n\t\t\t.on('keydown.xdsoftctrl', function (e) {\r\n\t\t\t\tif (e.keyCode === CTRLKEY) {\r\n\t\t\t\t\tctrlDown = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('keyup.xdsoftctrl', function (e) {\r\n\t\t\t\tif (e.keyCode === CTRLKEY) {\r\n\t\t\t\t\tctrlDown = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.each(function () {\r\n\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;\r\n\t\t\tif (datetimepicker) {\r\n\t\t\t\tif ($.type(opt) === 'string') {\r\n\t\t\t\t\tswitch (opt) {\r\n\t\t\t\t\t\tcase 'show':\r\n\t\t\t\t\t\t\t$(this).select().focus();\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'hide':\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'toggle':\r\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'destroy':\r\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'reset':\r\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\r\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))) {\r\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'validate':\r\n\t\t\t\t\t\t\t$input = datetimepicker.data('input');\r\n\t\t\t\t\t\t\t$input.trigger('blur.xdsoft');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tif (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {\r\n\t\t\t\t\t\t\t\tresult = datetimepicker[opt](opt2);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatetimepicker\r\n\t\t\t\t\t\t.setOptions(opt);\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tif ($.type(opt) !== 'string') {\r\n\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\r\n\t\t\t\t\tcreateDateTimePicker($(this));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlazyInit($(this));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\t$.fn.datetimepicker.defaults = default_options;\r\n\r\n\tfunction HighlightedDate(date, desc, style) {\r\n\t\t\"use strict\";\r\n\t\tthis.date = date;\r\n\t\tthis.desc = desc;\r\n\t\tthis.style = style;\r\n\t}\r\n};\r\n;(function (factory) {\r\n\tif ( typeof define === 'function' && define.amd ) {\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine(['jquery', 'jquery-mousewheel'], factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\t// Node/CommonJS style for Browserify\r\n\t\tmodule.exports = factory(require('jquery'));;\r\n\t} else {\r\n\t\t// Browser globals\r\n\t\tfactory(jQuery);\r\n\t}\r\n}(datetimepickerFactory));\r\n\r\n\r\n/*!\r\n * jQuery Mousewheel 3.1.13\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n */\r\n\r\n(function (factory) {\r\n if ( typeof define === 'function' && define.amd ) {\r\n // AMD. Register as an anonymous module.\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS style for Browserify\r\n module.exports = factory;\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n\r\n var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\r\n toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\r\n ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\r\n slice = Array.prototype.slice,\r\n nullLowestDeltaTimeout, lowestDelta;\r\n\r\n if ( $.event.fixHooks ) {\r\n for ( var i = toFix.length; i; ) {\r\n $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\r\n }\r\n }\r\n\r\n var special = $.event.special.mousewheel = {\r\n version: '3.1.12',\r\n\r\n setup: function() {\r\n if ( this.addEventListener ) {\r\n for ( var i = toBind.length; i; ) {\r\n this.addEventListener( toBind[--i], handler, false );\r\n }\r\n } else {\r\n this.onmousewheel = handler;\r\n }\r\n // Store the line height and page height for this particular element\r\n $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\r\n $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\r\n },\r\n\r\n teardown: function() {\r\n if ( this.removeEventListener ) {\r\n for ( var i = toBind.length; i; ) {\r\n this.removeEventListener( toBind[--i], handler, false );\r\n }\r\n } else {\r\n this.onmousewheel = null;\r\n }\r\n // Clean up the data we added to the element\r\n $.removeData(this, 'mousewheel-line-height');\r\n $.removeData(this, 'mousewheel-page-height');\r\n },\r\n\r\n getLineHeight: function(elem) {\r\n var $elem = $(elem),\r\n $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\r\n if (!$parent.length) {\r\n $parent = $('body');\r\n }\r\n return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\r\n },\r\n\r\n getPageHeight: function(elem) {\r\n return $(elem).height();\r\n },\r\n\r\n settings: {\r\n adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\r\n normalizeOffset: true // calls getBoundingClientRect for each event\r\n }\r\n };\r\n\r\n $.fn.extend({\r\n mousewheel: function(fn) {\r\n return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\r\n },\r\n\r\n unmousewheel: function(fn) {\r\n return this.unbind('mousewheel', fn);\r\n }\r\n });\r\n\r\n\r\n function handler(event) {\r\n var orgEvent = event || window.event,\r\n args = slice.call(arguments, 1),\r\n delta = 0,\r\n deltaX = 0,\r\n deltaY = 0,\r\n absDelta = 0,\r\n offsetX = 0,\r\n offsetY = 0;\r\n event = $.event.fix(orgEvent);\r\n event.type = 'mousewheel';\r\n\r\n // Old school scrollwheel delta\r\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\r\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\r\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\r\n if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\r\n\r\n // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\r\n if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\r\n deltaX = deltaY * -1;\r\n deltaY = 0;\r\n }\r\n\r\n // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\r\n delta = deltaY === 0 ? deltaX : deltaY;\r\n\r\n // New school wheel delta (wheel event)\r\n if ( 'deltaY' in orgEvent ) {\r\n deltaY = orgEvent.deltaY * -1;\r\n delta = deltaY;\r\n }\r\n if ( 'deltaX' in orgEvent ) {\r\n deltaX = orgEvent.deltaX;\r\n if ( deltaY === 0 ) { delta = deltaX * -1; }\r\n }\r\n\r\n // No change actually happened, no reason to go any further\r\n if ( deltaY === 0 && deltaX === 0 ) { return; }\r\n\r\n // Need to convert lines and pages to pixels if we aren't already in pixels\r\n // There are three delta modes:\r\n // * deltaMode 0 is by pixels, nothing to do\r\n // * deltaMode 1 is by lines\r\n // * deltaMode 2 is by pages\r\n if ( orgEvent.deltaMode === 1 ) {\r\n var lineHeight = $.data(this, 'mousewheel-line-height');\r\n delta *= lineHeight;\r\n deltaY *= lineHeight;\r\n deltaX *= lineHeight;\r\n } else if ( orgEvent.deltaMode === 2 ) {\r\n var pageHeight = $.data(this, 'mousewheel-page-height');\r\n delta *= pageHeight;\r\n deltaY *= pageHeight;\r\n deltaX *= pageHeight;\r\n }\r\n\r\n // Store lowest absolute delta to normalize the delta values\r\n absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\r\n\r\n if ( !lowestDelta || absDelta < lowestDelta ) {\r\n lowestDelta = absDelta;\r\n\r\n // Adjust older deltas if necessary\r\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\r\n lowestDelta /= 40;\r\n }\r\n }\r\n\r\n // Adjust older deltas if necessary\r\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\r\n // Divide all the things by 40!\r\n delta /= 40;\r\n deltaX /= 40;\r\n deltaY /= 40;\r\n }\r\n\r\n // Get a whole, normalized value for the deltas\r\n delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);\r\n deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\r\n deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\r\n\r\n // Normalise offsetX and offsetY properties\r\n if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\r\n var boundingRect = this.getBoundingClientRect();\r\n offsetX = event.clientX - boundingRect.left;\r\n offsetY = event.clientY - boundingRect.top;\r\n }\r\n\r\n // Add information to the event object\r\n event.deltaX = deltaX;\r\n event.deltaY = deltaY;\r\n event.deltaFactor = lowestDelta;\r\n event.offsetX = offsetX;\r\n event.offsetY = offsetY;\r\n // Go ahead and set deltaMode to 0 since we converted to pixels\r\n // Although this is a little odd since we overwrite the deltaX/Y\r\n // properties with normalized deltas.\r\n event.deltaMode = 0;\r\n\r\n // Add event and delta to the front of the arguments\r\n args.unshift(event, delta, deltaX, deltaY);\r\n\r\n // Clearout lowestDelta after sometime to better\r\n // handle multiple device types that give different\r\n // a different lowestDelta\r\n // Ex: trackpad = 3 and mouse wheel = 120\r\n if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\r\n nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\r\n\r\n return ($.event.dispatch || $.event.handle).apply(this, args);\r\n }\r\n\r\n function nullLowestDelta() {\r\n lowestDelta = null;\r\n }\r\n\r\n function shouldAdjustOldDeltas(orgEvent, absDelta) {\r\n // If this is an older event and the delta is divisable by 120,\r\n // then we are assuming that the browser is treating this as an\r\n // older mouse wheel event and that we should divide the deltas\r\n // by 40 to try and get a more usable deltaFactor.\r\n // Side note, this actually impacts the reported scroll distance\r\n // in older browsers and can cause scrolling to be slower than native.\r\n // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\r\n return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\r\n }\r\n\r\n}));\r\n","/*!\r\n * jQuery blockUI plugin\r\n * Version 2.70.0-2014.11.23\r\n * Requires jQuery v1.7 or later\r\n *\r\n * Examples at: http://malsup.com/jquery/block/\r\n * Copyright (c) 2007-2013 M. Alsup\r\n * Dual licensed under the MIT and GPL licenses:\r\n * http://www.opensource.org/licenses/mit-license.php\r\n * http://www.gnu.org/licenses/gpl.html\r\n *\r\n * Thanks to Amir-Hossein Sobhi for some excellent contributions!\r\n */\r\n\r\n;(function() {\r\n /*jshint eqeqeq:false curly:false latedef:false */\r\n \"use strict\";\r\n\r\n function setup($) {\r\n $.fn._fadeIn = $.fn.fadeIn;\r\n\r\n var noOp = $.noop || function() {};\r\n\r\n // this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\r\n // confusing userAgent strings on Vista)\r\n var msie = /MSIE/.test(navigator.userAgent);\r\n var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);\r\n var mode = document.documentMode || 0;\r\n var setExpr = $.isFunction( document.createElement('div').style.setExpression );\r\n\r\n // global $ methods for blocking/unblocking the entire page\r\n $.blockUI = function(opts) { install(window, opts); };\r\n $.unblockUI = function(opts) { remove(window, opts); };\r\n\r\n // convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)\r\n $.growlUI = function(title, message, timeout, onClose) {\r\n var $m = $('<div class=\"growlUI\"></div>');\r\n if (title) $m.append('<h1>'+title+'</h1>');\r\n if (message) $m.append('<h2>'+message+'</h2>');\r\n if (timeout === undefined) timeout = 3000;\r\n\r\n // Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications\r\n var callBlock = function(opts) {\r\n opts = opts || {};\r\n\r\n $.blockUI({\r\n message: $m,\r\n fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,\r\n fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,\r\n timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,\r\n centerY: false,\r\n showOverlay: false,\r\n onUnblock: onClose,\r\n css: $.blockUI.defaults.growlCSS\r\n });\r\n };\r\n\r\n callBlock();\r\n var nonmousedOpacity = $m.css('opacity');\r\n $m.mouseover(function() {\r\n callBlock({\r\n fadeIn: 0,\r\n timeout: 30000\r\n });\r\n\r\n var displayBlock = $('.blockMsg');\r\n displayBlock.stop(); // cancel fadeout if it has started\r\n displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency\r\n }).mouseout(function() {\r\n $('.blockMsg').fadeOut(1000);\r\n });\r\n // End konapun additions\r\n };\r\n\r\n // plugin method for blocking element content\r\n $.fn.block = function(opts) {\r\n if ( this[0] === window ) {\r\n $.blockUI( opts );\r\n return this;\r\n }\r\n var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\r\n this.each(function() {\r\n var $el = $(this);\r\n if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\r\n return;\r\n $el.unblock({ fadeOut: 0 });\r\n });\r\n\r\n return this.each(function() {\r\n if ($.css(this,'position') == 'static') {\r\n this.style.position = 'relative';\r\n $(this).data('blockUI.static', true);\r\n }\r\n this.style.zoom = 1; // force 'hasLayout' in ie\r\n install(this, opts);\r\n });\r\n };\r\n\r\n // plugin method for unblocking element content\r\n $.fn.unblock = function(opts) {\r\n if ( this[0] === window ) {\r\n $.unblockUI( opts );\r\n return this;\r\n }\r\n return this.each(function() {\r\n remove(this, opts);\r\n });\r\n };\r\n\r\n $.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!\r\n\r\n // override these in your code to change the default behavior and style\r\n $.blockUI.defaults = {\r\n // message displayed when blocking (use null for no message)\r\n message: '<h1>Please wait...</h1>',\r\n\r\n title: null,\t\t// title string; only used when theme == true\r\n draggable: true,\t// only used when theme == true (requires jquery-ui.js to be loaded)\r\n\r\n theme: false, // set to true to use with jQuery UI themes\r\n\r\n // styles for the message when blocking; if you wish to disable\r\n // these and use an external stylesheet then do this in your code:\r\n // $.blockUI.defaults.css = {};\r\n css: {\r\n padding:\t0,\r\n margin:\t\t0,\r\n width:\t\t'30%',\r\n top:\t\t'40%',\r\n left:\t\t'35%',\r\n textAlign:\t'center',\r\n color:\t\t'#000',\r\n border:\t\t'3px solid #aaa',\r\n backgroundColor:'#fff',\r\n cursor:\t\t'wait'\r\n },\r\n\r\n // minimal style set used when themes are used\r\n themedCSS: {\r\n width:\t'30%',\r\n top:\t'40%',\r\n left:\t'35%'\r\n },\r\n\r\n // styles for the overlay\r\n overlayCSS: {\r\n backgroundColor:\t'#000',\r\n opacity:\t\t\t0.6,\r\n cursor:\t\t\t\t'wait'\r\n },\r\n\r\n // style to replace wait cursor before unblocking to correct issue\r\n // of lingering wait cursor\r\n cursorReset: 'default',\r\n\r\n // styles applied when using $.growlUI\r\n growlCSS: {\r\n width:\t\t'350px',\r\n top:\t\t'10px',\r\n left:\t\t'',\r\n right:\t\t'10px',\r\n border:\t\t'none',\r\n padding:\t'5px',\r\n opacity:\t0.6,\r\n cursor:\t\t'default',\r\n color:\t\t'#fff',\r\n backgroundColor: '#000',\r\n '-webkit-border-radius':'10px',\r\n '-moz-border-radius':\t'10px',\r\n 'border-radius':\t\t'10px'\r\n },\r\n\r\n // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\r\n // (hat tip to Jorge H. N. de Vasconcelos)\r\n /*jshint scripturl:true */\r\n iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\r\n\r\n // force usage of iframe in non-IE browsers (handy for blocking applets)\r\n forceIframe: false,\r\n\r\n // z-index for the blocking overlay\r\n baseZ: 1000,\r\n\r\n // set these to true to have the message automatically centered\r\n centerX: true, // <-- only effects element blocking (page block controlled via css above)\r\n centerY: true,\r\n\r\n // allow body element to be stetched in ie6; this makes blocking look better\r\n // on \"short\" pages. disable if you wish to prevent changes to the body height\r\n allowBodyStretch: true,\r\n\r\n // enable if you want key and mouse events to be disabled for content that is blocked\r\n bindEvents: true,\r\n\r\n // be default blockUI will supress tab navigation from leaving blocking content\r\n // (if bindEvents is true)\r\n constrainTabKey: true,\r\n\r\n // fadeIn time in millis; set to 0 to disable fadeIn on block\r\n fadeIn: 200,\r\n\r\n // fadeOut time in millis; set to 0 to disable fadeOut on unblock\r\n fadeOut: 400,\r\n\r\n // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\r\n timeout: 0,\r\n\r\n // disable if you don't want to show the overlay\r\n showOverlay: true,\r\n\r\n // if true, focus will be placed in the first available input field when\r\n // page blocking\r\n focusInput: true,\r\n\r\n // elements that can receive focus\r\n focusableElements: ':input:enabled:visible',\r\n\r\n // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\r\n // no longer needed in 2012\r\n // applyPlatformOpacityRules: true,\r\n\r\n // callback method invoked when fadeIn has completed and blocking message is visible\r\n onBlock: null,\r\n\r\n // callback method invoked when unblocking has completed; the callback is\r\n // passed the element that has been unblocked (which is the window object for page\r\n // blocks) and the options that were passed to the unblock call:\r\n //\tonUnblock(element, options)\r\n onUnblock: null,\r\n\r\n // callback method invoked when the overlay area is clicked.\r\n // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\r\n onOverlayClick: null,\r\n\r\n // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\r\n quirksmodeOffsetHack: 4,\r\n\r\n // class name of the message block\r\n blockMsgClass: 'blockMsg',\r\n\r\n // if it is already blocked, then ignore it (don't unblock and reblock)\r\n ignoreIfBlocked: false\r\n };\r\n\r\n // private data and functions follow...\r\n\r\n var pageBlock = null;\r\n var pageBlockEls = [];\r\n\r\n function install(el, opts) {\r\n var css, themedCSS;\r\n var full = (el == window);\r\n var msg = (opts && opts.message !== undefined ? opts.message : undefined);\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n\r\n if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\r\n return;\r\n\r\n opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\r\n css = $.extend({}, $.blockUI.defaults.css, opts.css || {});\r\n if (opts.onOverlayClick)\r\n opts.overlayCSS.cursor = 'pointer';\r\n\r\n themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\r\n msg = msg === undefined ? opts.message : msg;\r\n\r\n // remove the current block (if there is one)\r\n if (full && pageBlock)\r\n remove(window, {fadeOut:0});\r\n\r\n // if an existing element is being used as the blocking content then we capture\r\n // its current place in the DOM (and current display style) so we can restore\r\n // it when we unblock\r\n if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\r\n var node = msg.jquery ? msg[0] : msg;\r\n var data = {};\r\n $(el).data('blockUI.history', data);\r\n data.el = node;\r\n data.parent = node.parentNode;\r\n data.display = node.style.display;\r\n data.position = node.style.position;\r\n if (data.parent)\r\n data.parent.removeChild(node);\r\n }\r\n\r\n $(el).data('blockUI.onUnblock', opts.onUnblock);\r\n var z = opts.baseZ;\r\n\r\n // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\r\n // layer1 is the iframe layer which is used to supress bleed through of underlying content\r\n // layer2 is the overlay layer which has opacity and a wait cursor (by default)\r\n // layer3 is the message content that is displayed while blocking\r\n var lyr1, lyr2, lyr3, s;\r\n if (msie || opts.forceIframe)\r\n lyr1 = $('<iframe class=\"blockUI\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0\" src=\"'+opts.iframeSrc+'\"></iframe>');\r\n else\r\n lyr1 = $('<div class=\"blockUI\" style=\"display:none\"></div>');\r\n\r\n if (opts.theme)\r\n lyr2 = $('<div class=\"blockUI blockOverlay ui-widget-overlay\" style=\"z-index:'+ (z++) +';display:none\"></div>');\r\n else\r\n lyr2 = $('<div class=\"blockUI blockOverlay\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0\"></div>');\r\n\r\n if (opts.theme && full) {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:fixed\">';\r\n if ( opts.title ) {\r\n s += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || '&nbsp;')+'</div>';\r\n }\r\n s += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\r\n s += '</div>';\r\n }\r\n else if (opts.theme) {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:absolute\">';\r\n if ( opts.title ) {\r\n s += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || '&nbsp;')+'</div>';\r\n }\r\n s += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\r\n s += '</div>';\r\n }\r\n else if (full) {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage\" style=\"z-index:'+(z+10)+';display:none;position:fixed\"></div>';\r\n }\r\n else {\r\n s = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement\" style=\"z-index:'+(z+10)+';display:none;position:absolute\"></div>';\r\n }\r\n lyr3 = $(s);\r\n\r\n // if we have a message, style it\r\n if (msg) {\r\n if (opts.theme) {\r\n lyr3.css(themedCSS);\r\n lyr3.addClass('ui-widget-content');\r\n }\r\n else\r\n lyr3.css(css);\r\n }\r\n\r\n // style the overlay\r\n if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\r\n lyr2.css(opts.overlayCSS);\r\n lyr2.css('position', full ? 'fixed' : 'absolute');\r\n\r\n // make iframe layer transparent in IE\r\n if (msie || opts.forceIframe)\r\n lyr1.css('opacity',0.0);\r\n\r\n //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\r\n var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\r\n $.each(layers, function() {\r\n this.appendTo($par);\r\n });\r\n\r\n if (opts.theme && opts.draggable && $.fn.draggable) {\r\n lyr3.draggable({\r\n handle: '.ui-dialog-titlebar',\r\n cancel: 'li'\r\n });\r\n }\r\n\r\n // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\r\n var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\r\n if (ie6 || expr) {\r\n // give body 100% height\r\n if (full && opts.allowBodyStretch && $.support.boxModel)\r\n $('html,body').css('height','100%');\r\n\r\n // fix ie6 issue when blocked element has a border width\r\n if ((ie6 || !$.support.boxModel) && !full) {\r\n var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\r\n var fixT = t ? '(0 - '+t+')' : 0;\r\n var fixL = l ? '(0 - '+l+')' : 0;\r\n }\r\n\r\n // simulate fixed position\r\n $.each(layers, function(i,o) {\r\n var s = o[0].style;\r\n s.position = 'absolute';\r\n if (i < 2) {\r\n if (full)\r\n s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\r\n else\r\n s.setExpression('height','this.parentNode.offsetHeight + \"px\"');\r\n if (full)\r\n s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\r\n else\r\n s.setExpression('width','this.parentNode.offsetWidth + \"px\"');\r\n if (fixL) s.setExpression('left', fixL);\r\n if (fixT) s.setExpression('top', fixT);\r\n }\r\n else if (opts.centerY) {\r\n if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\r\n s.marginTop = 0;\r\n }\r\n else if (!opts.centerY && full) {\r\n var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\r\n var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\r\n s.setExpression('top',expression);\r\n }\r\n });\r\n }\r\n\r\n // show the message\r\n if (msg) {\r\n if (opts.theme)\r\n lyr3.find('.ui-widget-content').append(msg);\r\n else\r\n lyr3.append(msg);\r\n if (msg.jquery || msg.nodeType)\r\n $(msg).show();\r\n }\r\n\r\n if ((msie || opts.forceIframe) && opts.showOverlay)\r\n lyr1.show(); // opacity is zero\r\n if (opts.fadeIn) {\r\n var cb = opts.onBlock ? opts.onBlock : noOp;\r\n var cb1 = (opts.showOverlay && !msg) ? cb : noOp;\r\n var cb2 = msg ? cb : noOp;\r\n if (opts.showOverlay)\r\n lyr2._fadeIn(opts.fadeIn, cb1);\r\n if (msg)\r\n lyr3._fadeIn(opts.fadeIn, cb2);\r\n }\r\n else {\r\n if (opts.showOverlay)\r\n lyr2.show();\r\n if (msg)\r\n lyr3.show();\r\n if (opts.onBlock)\r\n opts.onBlock.bind(lyr3)();\r\n }\r\n\r\n // bind key and mouse events\r\n bind(1, el, opts);\r\n\r\n if (full) {\r\n pageBlock = lyr3[0];\r\n pageBlockEls = $(opts.focusableElements,pageBlock);\r\n if (opts.focusInput)\r\n setTimeout(focus, 20);\r\n }\r\n else\r\n center(lyr3[0], opts.centerX, opts.centerY);\r\n\r\n if (opts.timeout) {\r\n // auto-unblock\r\n var to = setTimeout(function() {\r\n if (full)\r\n $.unblockUI(opts);\r\n else\r\n $(el).unblock(opts);\r\n }, opts.timeout);\r\n $(el).data('blockUI.timeout', to);\r\n }\r\n }\r\n\r\n // remove the block\r\n function remove(el, opts) {\r\n var count;\r\n var full = (el == window);\r\n var $el = $(el);\r\n var data = $el.data('blockUI.history');\r\n var to = $el.data('blockUI.timeout');\r\n if (to) {\r\n clearTimeout(to);\r\n $el.removeData('blockUI.timeout');\r\n }\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n bind(0, el, opts); // unbind events\r\n\r\n if (opts.onUnblock === null) {\r\n opts.onUnblock = $el.data('blockUI.onUnblock');\r\n $el.removeData('blockUI.onUnblock');\r\n }\r\n\r\n var els;\r\n if (full) // crazy selector to handle odd field errors in ie6/7\r\n els = $('body').children().filter('.blockUI').add('body > .blockUI');\r\n else\r\n els = $el.find('>.blockUI');\r\n\r\n // fix cursor issue\r\n if ( opts.cursorReset ) {\r\n if ( els.length > 1 )\r\n els[1].style.cursor = opts.cursorReset;\r\n if ( els.length > 2 )\r\n els[2].style.cursor = opts.cursorReset;\r\n }\r\n\r\n if (full)\r\n pageBlock = pageBlockEls = null;\r\n\r\n if (opts.fadeOut) {\r\n count = els.length;\r\n els.stop().fadeOut(opts.fadeOut, function() {\r\n if ( --count === 0)\r\n reset(els,data,opts,el);\r\n });\r\n }\r\n else\r\n reset(els, data, opts, el);\r\n }\r\n\r\n // move blocking element back into the DOM where it started\r\n function reset(els,data,opts,el) {\r\n var $el = $(el);\r\n if ( $el.data('blockUI.isBlocked') )\r\n return;\r\n\r\n els.each(function(i,o) {\r\n // remove via DOM calls so we don't lose event handlers\r\n if (this.parentNode)\r\n this.parentNode.removeChild(this);\r\n });\r\n\r\n if (data && data.el) {\r\n data.el.style.display = data.display;\r\n data.el.style.position = data.position;\r\n data.el.style.cursor = 'default'; // #59\r\n if (data.parent)\r\n data.parent.appendChild(data.el);\r\n $el.removeData('blockUI.history');\r\n }\r\n\r\n if ($el.data('blockUI.static')) {\r\n $el.css('position', 'static'); // #22\r\n }\r\n\r\n if (typeof opts.onUnblock == 'function')\r\n opts.onUnblock(el,opts);\r\n\r\n // fix issue in Safari 6 where block artifacts remain until reflow\r\n var body = $(document.body), w = body.width(), cssW = body[0].style.width;\r\n body.width(w-1).width(w);\r\n body[0].style.width = cssW;\r\n }\r\n\r\n // bind/unbind the handler\r\n function bind(b, el, opts) {\r\n var full = el == window, $el = $(el);\r\n\r\n // don't bother unbinding if there is nothing to unbind\r\n if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\r\n return;\r\n\r\n $el.data('blockUI.isBlocked', b);\r\n\r\n // don't bind events when overlay is not in use or if bindEvents is false\r\n if (!full || !opts.bindEvents || (b && !opts.showOverlay))\r\n return;\r\n\r\n // bind anchors and inputs for mouse and key events\r\n var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\r\n if (b)\r\n $(document).bind(events, opts, handler);\r\n else\r\n $(document).unbind(events, handler);\r\n\r\n // former impl...\r\n //\t\tvar $e = $('a,:input');\r\n //\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\r\n }\r\n\r\n // event handler to suppress keyboard/mouse events when blocking\r\n function handler(e) {\r\n // allow tab navigation (conditionally)\r\n if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\r\n if (pageBlock && e.data.constrainTabKey) {\r\n var els = pageBlockEls;\r\n var fwd = !e.shiftKey && e.target === els[els.length-1];\r\n var back = e.shiftKey && e.target === els[0];\r\n if (fwd || back) {\r\n setTimeout(function(){focus(back);},10);\r\n return false;\r\n }\r\n }\r\n }\r\n var opts = e.data;\r\n var target = $(e.target);\r\n if (target.hasClass('blockOverlay') && opts.onOverlayClick)\r\n opts.onOverlayClick(e);\r\n\r\n // allow events within the message content\r\n if (target.parents('div.' + opts.blockMsgClass).length > 0)\r\n return true;\r\n\r\n // allow events for content that is not being blocked\r\n return target.parents().children().filter('div.blockUI').length === 0;\r\n }\r\n\r\n function focus(back) {\r\n if (!pageBlockEls)\r\n return;\r\n var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\r\n if (e)\r\n e.focus();\r\n }\r\n\r\n function center(el, x, y) {\r\n var p = el.parentNode, s = el.style;\r\n var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\r\n var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\r\n if (x) s.left = l > 0 ? (l+'px') : '0';\r\n if (y) s.top = t > 0 ? (t+'px') : '0';\r\n }\r\n\r\n function sz(el, p) {\r\n return parseInt($.css(el,p),10)||0;\r\n }\r\n\r\n }\r\n\r\n\r\n /*global define:true */\r\n if (typeof define === 'function' && define.amd && define.amd.jQuery) {\r\n define(['jquery'], setup);\r\n } else {\r\n setup(jQuery);\r\n }\r\n\r\n})();","/*!\r\n * v0.1.5\r\n * Copyright (c) 2014 First Opinion\r\n * formatter.js is open sourced under the MIT license.\r\n *\r\n * thanks to digitalBush/jquery.maskedinput for some of the trickier\r\n * keycode handling\r\n */ \r\n\r\n//\r\n// Uses CommonJS, AMD or browser globals to create a jQuery plugin.\r\n//\r\n// Similar to jqueryPlugin.js but also tries to\r\n// work in a CommonJS environment.\r\n// It is unlikely jQuery will run in a CommonJS\r\n// environment. See jqueryPlugin.js if you do\r\n// not want to add the extra CommonJS detection.\r\n//\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(['jQuery'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jQuery'));\r\n } else {\r\n // Browser globals\r\n factory(root.jQuery);\r\n }\r\n}(this, function (jQuery) {\r\n\r\n\r\n/*\r\n * pattern.js\r\n *\r\n * Utilities to parse str pattern and return info\r\n *\r\n */\r\nvar pattern = function () {\r\n // Define module\r\n var pattern = {};\r\n // Match information\r\n var DELIM_SIZE = 4;\r\n // Our regex used to parse\r\n var regexp = new RegExp('{{([^}]+)}}', 'g');\r\n //\r\n // Helper method to parse pattern str\r\n //\r\n var getMatches = function (pattern) {\r\n // Populate array of matches\r\n var matches = [], match;\r\n while (match = regexp.exec(pattern)) {\r\n matches.push(match);\r\n }\r\n return matches;\r\n };\r\n //\r\n // Create an object holding all formatted characters\r\n // with corresponding positions\r\n //\r\n pattern.parse = function (pattern) {\r\n // Our obj to populate\r\n var info = {\r\n inpts: {},\r\n chars: {}\r\n };\r\n // Pattern information\r\n var matches = getMatches(pattern), pLength = pattern.length;\r\n // Counters\r\n var mCount = 0, iCount = 0, i = 0;\r\n // Add inpts, move to end of match, and process\r\n var processMatch = function (val) {\r\n var valLength = val.length;\r\n for (var j = 0; j < valLength; j++) {\r\n info.inpts[iCount] = val.charAt(j);\r\n iCount++;\r\n }\r\n mCount++;\r\n i += val.length + DELIM_SIZE - 1;\r\n };\r\n // Process match or add chars\r\n for (i; i < pLength; i++) {\r\n if (mCount < matches.length && i === matches[mCount].index) {\r\n processMatch(matches[mCount][1]);\r\n } else {\r\n info.chars[i - mCount * DELIM_SIZE] = pattern.charAt(i);\r\n }\r\n }\r\n // Set mLength and return\r\n info.mLength = i - mCount * DELIM_SIZE;\r\n return info;\r\n };\r\n // Expose\r\n return pattern;\r\n }();\r\n/*\r\n * utils.js\r\n *\r\n * Independent helper methods (cross browser, etc..)\r\n *\r\n */\r\nvar utils = function () {\r\n // Define module\r\n var utils = {};\r\n // Useragent info for keycode handling\r\n var uAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;\r\n //\r\n // Shallow copy properties from n objects to destObj\r\n //\r\n utils.extend = function (destObj) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n for (var key in arguments[i]) {\r\n destObj[key] = arguments[i][key];\r\n }\r\n }\r\n return destObj;\r\n };\r\n //\r\n // Add a given character to a string at a defined pos\r\n //\r\n utils.addChars = function (str, chars, pos) {\r\n return str.substr(0, pos) + chars + str.substr(pos, str.length);\r\n };\r\n //\r\n // Remove a span of characters\r\n //\r\n utils.removeChars = function (str, start, end) {\r\n return str.substr(0, start) + str.substr(end, str.length);\r\n };\r\n //\r\n // Return true/false is num false between bounds\r\n //\r\n utils.isBetween = function (num, bounds) {\r\n bounds.sort(function (a, b) {\r\n return a - b;\r\n });\r\n return num > bounds[0] && num < bounds[1];\r\n };\r\n //\r\n // Helper method for cross browser event listeners\r\n //\r\n utils.addListener = function (el, evt, handler) {\r\n return typeof el.addEventListener !== 'undefined' ? el.addEventListener(evt, handler, false) : el.attachEvent('on' + evt, handler);\r\n };\r\n //\r\n // Helper method for cross browser implementation of preventDefault\r\n //\r\n utils.preventDefault = function (evt) {\r\n return evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;\r\n };\r\n //\r\n // Helper method for cross browser implementation for grabbing\r\n // clipboard data\r\n //\r\n utils.getClip = function (evt) {\r\n if (evt.clipboardData) {\r\n return evt.clipboardData.getData('Text');\r\n }\r\n if (window.clipboardData) {\r\n return window.clipboardData.getData('Text');\r\n }\r\n };\r\n //\r\n // Loop over object and checking for matching properties\r\n //\r\n utils.getMatchingKey = function (which, keyCode, keys) {\r\n // Loop over and return if matched.\r\n for (var k in keys) {\r\n var key = keys[k];\r\n if (which === key.which && keyCode === key.keyCode) {\r\n return k;\r\n }\r\n }\r\n };\r\n //\r\n // Returns true/false if k is a del keyDown\r\n //\r\n utils.isDelKeyDown = function (which, keyCode) {\r\n var keys = {\r\n 'backspace': {\r\n 'which': 8,\r\n 'keyCode': 8\r\n },\r\n 'delete': {\r\n 'which': 46,\r\n 'keyCode': 46\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n //\r\n // Returns true/false if k is a del keyPress\r\n //\r\n utils.isDelKeyPress = function (which, keyCode) {\r\n var keys = {\r\n 'backspace': {\r\n 'which': 8,\r\n 'keyCode': 8,\r\n 'shiftKey': false\r\n },\r\n 'delete': {\r\n 'which': 0,\r\n 'keyCode': 46\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n // //\r\n // // Determine if keydown relates to specialKey\r\n // //\r\n // utils.isSpecialKeyDown = function (which, keyCode) {\r\n // var keys = {\r\n // 'tab': { 'which': 9, 'keyCode': 9 },\r\n // 'enter': { 'which': 13, 'keyCode': 13 },\r\n // 'end': { 'which': 35, 'keyCode': 35 },\r\n // 'home': { 'which': 36, 'keyCode': 36 },\r\n // 'leftarrow': { 'which': 37, 'keyCode': 37 },\r\n // 'uparrow': { 'which': 38, 'keyCode': 38 },\r\n // 'rightarrow': { 'which': 39, 'keyCode': 39 },\r\n // 'downarrow': { 'which': 40, 'keyCode': 40 },\r\n // 'F5': { 'which': 116, 'keyCode': 116 }\r\n // };\r\n // return utils.getMatchingKey(which, keyCode, keys);\r\n // };\r\n //\r\n // Determine if keypress relates to specialKey\r\n //\r\n utils.isSpecialKeyPress = function (which, keyCode) {\r\n var keys = {\r\n 'tab': {\r\n 'which': 0,\r\n 'keyCode': 9\r\n },\r\n 'enter': {\r\n 'which': 13,\r\n 'keyCode': 13\r\n },\r\n 'end': {\r\n 'which': 0,\r\n 'keyCode': 35\r\n },\r\n 'home': {\r\n 'which': 0,\r\n 'keyCode': 36\r\n },\r\n 'leftarrow': {\r\n 'which': 0,\r\n 'keyCode': 37\r\n },\r\n 'uparrow': {\r\n 'which': 0,\r\n 'keyCode': 38\r\n },\r\n 'rightarrow': {\r\n 'which': 0,\r\n 'keyCode': 39\r\n },\r\n 'downarrow': {\r\n 'which': 0,\r\n 'keyCode': 40\r\n },\r\n 'F5': {\r\n 'which': 116,\r\n 'keyCode': 116\r\n }\r\n };\r\n return utils.getMatchingKey(which, keyCode, keys);\r\n };\r\n //\r\n // Returns true/false if modifier key is held down\r\n //\r\n utils.isModifier = function (evt) {\r\n return evt.ctrlKey || evt.altKey || evt.metaKey;\r\n };\r\n //\r\n // Iterates over each property of object or array.\r\n //\r\n utils.forEach = function (collection, callback, thisArg) {\r\n if (collection.hasOwnProperty('length')) {\r\n for (var index = 0, len = collection.length; index < len; index++) {\r\n if (callback.call(thisArg, collection[index], index, collection) === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n for (var key in collection) {\r\n if (collection.hasOwnProperty(key)) {\r\n if (callback.call(thisArg, collection[key], key, collection) === false) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n // Expose\r\n return utils;\r\n }();\r\n/*\r\n* pattern-matcher.js\r\n*\r\n* Parses a pattern specification and determines appropriate pattern for an\r\n* input string\r\n*\r\n*/\r\nvar patternMatcher = function (pattern, utils) {\r\n //\r\n // Parse a matcher string into a RegExp. Accepts valid regular\r\n // expressions and the catchall '*'.\r\n // @private\r\n //\r\n var parseMatcher = function (matcher) {\r\n if (matcher === '*') {\r\n return /.*/;\r\n }\r\n return new RegExp(matcher);\r\n };\r\n //\r\n // Parse a pattern spec and return a function that returns a pattern\r\n // based on user input. The first matching pattern will be chosen.\r\n // Pattern spec format:\r\n // Array [\r\n // Object: { Matcher(RegExp String) : Pattern(Pattern String) },\r\n // ...\r\n // ]\r\n function patternMatcher(patternSpec) {\r\n var matchers = [], patterns = [];\r\n // Iterate over each pattern in order.\r\n utils.forEach(patternSpec, function (patternMatcher) {\r\n // Process single property object to obtain pattern and matcher.\r\n utils.forEach(patternMatcher, function (patternStr, matcherStr) {\r\n var parsedPattern = pattern.parse(patternStr), regExpMatcher = parseMatcher(matcherStr);\r\n matchers.push(regExpMatcher);\r\n patterns.push(parsedPattern);\r\n // Stop after one iteration.\r\n return false;\r\n });\r\n });\r\n var getPattern = function (input) {\r\n var matchedIndex;\r\n utils.forEach(matchers, function (matcher, index) {\r\n if (matcher.test(input)) {\r\n matchedIndex = index;\r\n return false;\r\n }\r\n });\r\n return matchedIndex === undefined ? null : patterns[matchedIndex];\r\n };\r\n return {\r\n getPattern: getPattern,\r\n patterns: patterns,\r\n matchers: matchers\r\n };\r\n }\r\n // Expose\r\n return patternMatcher;\r\n }(pattern, utils);\r\n/*\r\n * inpt-sel.js\r\n *\r\n * Cross browser implementation to get and set input selections\r\n *\r\n */\r\nvar inptSel = function () {\r\n // Define module\r\n var inptSel = {};\r\n //\r\n // Get begin and end positions of selected input. Return 0's\r\n // if there is no selectiion data\r\n //\r\n inptSel.get = function (el) {\r\n // If normal browser return with result\r\n if (typeof el.selectionStart === 'number') {\r\n return {\r\n begin: el.selectionStart,\r\n end: el.selectionEnd\r\n };\r\n }\r\n // Uh-Oh. We must be IE. Fun with TextRange!!\r\n var range = document.selection.createRange();\r\n // Determine if there is a selection\r\n if (range && range.parentElement() === el) {\r\n var inputRange = el.createTextRange(), endRange = el.createTextRange(), length = el.value.length;\r\n // Create a working TextRange for the input selection\r\n inputRange.moveToBookmark(range.getBookmark());\r\n // Move endRange begin pos to end pos (hence endRange)\r\n endRange.collapse(false);\r\n // If we are at the very end of the input, begin and end\r\n // must both be the length of the el.value\r\n if (inputRange.compareEndPoints('StartToEnd', endRange) > -1) {\r\n return {\r\n begin: length,\r\n end: length\r\n };\r\n }\r\n // Note: moveStart usually returns the units moved, which \r\n // one may think is -length, however, it will stop when it\r\n // gets to the begin of the range, thus giving us the\r\n // negative value of the pos.\r\n return {\r\n begin: -inputRange.moveStart('character', -length),\r\n end: -inputRange.moveEnd('character', -length)\r\n };\r\n }\r\n //Return 0's on no selection data\r\n return {\r\n begin: 0,\r\n end: 0\r\n };\r\n };\r\n //\r\n // Set the caret position at a specified location\r\n //\r\n inptSel.set = function (el, pos) {\r\n // Normalize pos\r\n if (typeof pos !== 'object') {\r\n pos = {\r\n begin: pos,\r\n end: pos\r\n };\r\n }\r\n // If normal browser\r\n if (el.setSelectionRange) {\r\n el.focus();\r\n el.setSelectionRange(pos.begin, pos.end);\r\n } else if (el.createTextRange) {\r\n var range = el.createTextRange();\r\n range.collapse(true);\r\n range.moveEnd('character', pos.end);\r\n range.moveStart('character', pos.begin);\r\n range.select();\r\n }\r\n };\r\n // Expose\r\n return inptSel;\r\n }();\r\n/*\r\n * formatter.js\r\n *\r\n * Class used to format input based on passed pattern\r\n *\r\n */\r\nvar formatter = function (patternMatcher, inptSel, utils) {\r\n // Defaults\r\n var defaults = {\r\n persistent: false,\r\n repeat: false,\r\n placeholder: ' '\r\n };\r\n // Regexs for input validation\r\n var inptRegs = {\r\n '9': /[0-9]/,\r\n 'a': /[A-Za-z]/,\r\n '*': /[A-Za-z0-9]/\r\n };\r\n //\r\n // Class Constructor - Called with new Formatter(el, opts)\r\n // Responsible for setting up required instance variables, and\r\n // attaching the event listener to the element.\r\n //\r\n function Formatter(el, opts) {\r\n // Cache this\r\n var self = this;\r\n // Make sure we have an element. Make accesible to instance\r\n self.el = el;\r\n if (!self.el) {\r\n throw new TypeError('Must provide an existing element');\r\n }\r\n // Merge opts with defaults\r\n self.opts = utils.extend({}, defaults, opts);\r\n // 1 pattern is special case\r\n if (typeof self.opts.pattern !== 'undefined') {\r\n self.opts.patterns = self._specFromSinglePattern(self.opts.pattern);\r\n delete self.opts.pattern;\r\n }\r\n // Make sure we have valid opts\r\n if (typeof self.opts.patterns === 'undefined') {\r\n throw new TypeError('Must provide a pattern or array of patterns');\r\n }\r\n self.patternMatcher = patternMatcher(self.opts.patterns);\r\n // Upate pattern with initial value\r\n self._updatePattern();\r\n // Init values\r\n self.hldrs = {};\r\n self.focus = 0;\r\n // Add Listeners\r\n utils.addListener(self.el, 'keydown', function (evt) {\r\n self._keyDown(evt);\r\n });\r\n utils.addListener(self.el, 'keypress', function (evt) {\r\n self._keyPress(evt);\r\n });\r\n utils.addListener(self.el, 'paste', function (evt) {\r\n self._paste(evt);\r\n });\r\n // Persistence\r\n if (self.opts.persistent) {\r\n // Format on start\r\n self._processKey('', false);\r\n self.el.blur();\r\n // Add Listeners\r\n utils.addListener(self.el, 'focus', function (evt) {\r\n self._focus(evt);\r\n });\r\n utils.addListener(self.el, 'click', function (evt) {\r\n self._focus(evt);\r\n });\r\n utils.addListener(self.el, 'touchstart', function (evt) {\r\n self._focus(evt);\r\n });\r\n }\r\n }\r\n //\r\n // @public\r\n // Add new char\r\n //\r\n Formatter.addInptType = function (chr, reg) {\r\n inptRegs[chr] = reg;\r\n };\r\n //\r\n // @public\r\n // Apply the given pattern to the current input without moving caret.\r\n //\r\n Formatter.prototype.resetPattern = function (str) {\r\n // Update opts to hold new pattern\r\n this.opts.patterns = str ? this._specFromSinglePattern(str) : this.opts.patterns;\r\n // Get current state\r\n this.sel = inptSel.get(this.el);\r\n this.val = this.el.value;\r\n // Init values\r\n this.delta = 0;\r\n // Remove all formatted chars from val\r\n this._removeChars();\r\n this.patternMatcher = patternMatcher(this.opts.patterns);\r\n // Update pattern\r\n var newPattern = this.patternMatcher.getPattern(this.val);\r\n this.mLength = newPattern.mLength;\r\n this.chars = newPattern.chars;\r\n this.inpts = newPattern.inpts;\r\n // Format on start\r\n this._processKey('', false, true);\r\n };\r\n //\r\n // @private\r\n // Determine correct format pattern based on input val\r\n //\r\n Formatter.prototype._updatePattern = function () {\r\n // Determine appropriate pattern\r\n var newPattern = this.patternMatcher.getPattern(this.val);\r\n // Only update the pattern if there is an appropriate pattern for the value.\r\n // Otherwise, leave the current pattern (and likely delete the latest character.)\r\n if (newPattern) {\r\n // Get info about the given pattern\r\n this.mLength = newPattern.mLength;\r\n this.chars = newPattern.chars;\r\n this.inpts = newPattern.inpts;\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on all keyDown strokes. All keys trigger\r\n // this handler. Only process delete keys.\r\n //\r\n Formatter.prototype._keyDown = function (evt) {\r\n // The first thing we need is the character code\r\n var k = evt.which || evt.keyCode;\r\n // If delete key\r\n if (k && utils.isDelKeyDown(evt.which, evt.keyCode)) {\r\n // Process the keyCode and prevent default\r\n this._processKey(null, k);\r\n return utils.preventDefault(evt);\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on all keyPress strokes. Only processes\r\n // character keys (as long as no modifier key is in use).\r\n //\r\n Formatter.prototype._keyPress = function (evt) {\r\n // The first thing we need is the character code\r\n var k, isSpecial;\r\n // Mozilla will trigger on special keys and assign the the value 0\r\n // We want to use that 0 rather than the keyCode it assigns.\r\n k = evt.which || evt.keyCode;\r\n isSpecial = utils.isSpecialKeyPress(evt.which, evt.keyCode);\r\n // Process the keyCode and prevent default\r\n if (!utils.isDelKeyPress(evt.which, evt.keyCode) && !isSpecial && !utils.isModifier(evt)) {\r\n this._processKey(String.fromCharCode(k), false);\r\n return utils.preventDefault(evt);\r\n }\r\n };\r\n //\r\n // @private\r\n // Handler called on paste event.\r\n //\r\n Formatter.prototype._paste = function (evt) {\r\n // Process the clipboard paste and prevent default\r\n this._processKey(utils.getClip(evt), false);\r\n return utils.preventDefault(evt);\r\n };\r\n //\r\n // @private\r\n // Handle called on focus event.\r\n //\r\n Formatter.prototype._focus = function () {\r\n // Wrapped in timeout so that we can grab input selection\r\n var self = this;\r\n setTimeout(function () {\r\n // Grab selection\r\n var selection = inptSel.get(self.el);\r\n // Char check\r\n var isAfterStart = selection.end > self.focus, isFirstChar = selection.end === 0;\r\n // If clicked in front of start, refocus to start\r\n if (isAfterStart || isFirstChar) {\r\n inptSel.set(self.el, self.focus);\r\n }\r\n }, 0);\r\n };\r\n //\r\n // @private\r\n // Using the provided key information, alter el value.\r\n //\r\n Formatter.prototype._processKey = function (chars, delKey, ignoreCaret) {\r\n // Get current state\r\n this.sel = inptSel.get(this.el);\r\n this.val = this.el.value;\r\n // Init values\r\n this.delta = 0;\r\n // If chars were highlighted, we need to remove them\r\n if (this.sel.begin !== this.sel.end) {\r\n this.delta = -1 * Math.abs(this.sel.begin - this.sel.end);\r\n this.val = utils.removeChars(this.val, this.sel.begin, this.sel.end);\r\n } else if (delKey && delKey === 46) {\r\n this._delete();\r\n } else if (delKey && this.sel.begin - 1 >= 0) {\r\n // Always have a delta of at least -1 for the character being deleted.\r\n this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);\r\n this.delta -= 1;\r\n } else if (delKey) {\r\n return true;\r\n }\r\n // If the key is not a del key, it should convert to a str\r\n if (!delKey) {\r\n // Add char at position and increment delta\r\n this.val = utils.addChars(this.val, chars, this.sel.begin);\r\n this.delta += chars.length;\r\n }\r\n // Format el.value (also handles updating caret position)\r\n this._formatValue(ignoreCaret);\r\n };\r\n //\r\n // @private\r\n // Deletes the character in front of it\r\n //\r\n Formatter.prototype._delete = function () {\r\n // Adjust focus to make sure its not on a formatted char\r\n while (this.chars[this.sel.begin]) {\r\n this._nextPos();\r\n }\r\n // As long as we are not at the end\r\n if (this.sel.begin < this.val.length) {\r\n // We will simulate a delete by moving the caret to the next char\r\n // and then deleting\r\n this._nextPos();\r\n this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);\r\n this.delta = -1;\r\n }\r\n };\r\n //\r\n // @private\r\n // Quick helper method to move the caret to the next pos\r\n //\r\n Formatter.prototype._nextPos = function () {\r\n this.sel.end++;\r\n this.sel.begin++;\r\n };\r\n //\r\n // @private\r\n // Alter element value to display characters matching the provided\r\n // instance pattern. Also responsible for updating\r\n //\r\n Formatter.prototype._formatValue = function (ignoreCaret) {\r\n // Set caret pos\r\n this.newPos = this.sel.end + this.delta;\r\n // Remove all formatted chars from val\r\n this._removeChars();\r\n // Switch to first matching pattern based on val\r\n this._updatePattern();\r\n // Validate inputs\r\n this._validateInpts();\r\n // Add formatted characters\r\n this._addChars();\r\n // Set value and adhere to maxLength\r\n this.el.value = this.val.substr(0, this.mLength);\r\n // Set new caret position\r\n if (typeof ignoreCaret === 'undefined' || ignoreCaret === false) {\r\n inptSel.set(this.el, this.newPos);\r\n }\r\n };\r\n //\r\n // @private\r\n // Remove all formatted before and after a specified pos\r\n //\r\n Formatter.prototype._removeChars = function () {\r\n // Delta shouldn't include placeholders\r\n if (this.sel.end > this.focus) {\r\n this.delta += this.sel.end - this.focus;\r\n }\r\n // Account for shifts during removal\r\n var shift = 0;\r\n // Loop through all possible char positions\r\n for (var i = 0; i <= this.mLength; i++) {\r\n // Get transformed position\r\n var curChar = this.chars[i], curHldr = this.hldrs[i], pos = i + shift, val;\r\n // If after selection we need to account for delta\r\n pos = i >= this.sel.begin ? pos + this.delta : pos;\r\n val = this.val.charAt(pos);\r\n // Remove char and account for shift\r\n if (curChar && curChar === val || curHldr && curHldr === val) {\r\n this.val = utils.removeChars(this.val, pos, pos + 1);\r\n shift--;\r\n }\r\n }\r\n // All hldrs should be removed now\r\n this.hldrs = {};\r\n // Set focus to last character\r\n this.focus = this.val.length;\r\n };\r\n //\r\n // @private\r\n // Make sure all inpts are valid, else remove and update delta\r\n //\r\n Formatter.prototype._validateInpts = function () {\r\n // Loop over each char and validate\r\n for (var i = 0; i < this.val.length; i++) {\r\n // Get char inpt type\r\n var inptType = this.inpts[i];\r\n // Checks\r\n var isBadType = !inptRegs[inptType], isInvalid = !isBadType && !inptRegs[inptType].test(this.val.charAt(i)), inBounds = this.inpts[i];\r\n // Remove if incorrect and inbounds\r\n if ((isBadType || isInvalid) && inBounds) {\r\n this.val = utils.removeChars(this.val, i, i + 1);\r\n this.focusStart--;\r\n this.newPos--;\r\n this.delta--;\r\n i--;\r\n }\r\n }\r\n };\r\n //\r\n // @private\r\n // Loop over val and add formatted chars as necessary\r\n //\r\n Formatter.prototype._addChars = function () {\r\n if (this.opts.persistent) {\r\n // Loop over all possible characters\r\n for (var i = 0; i <= this.mLength; i++) {\r\n if (!this.val.charAt(i)) {\r\n // Add placeholder at pos\r\n this.val = utils.addChars(this.val, this.opts.placeholder, i);\r\n this.hldrs[i] = this.opts.placeholder;\r\n }\r\n this._addChar(i);\r\n }\r\n // Adjust focus to make sure its not on a formatted char\r\n while (this.chars[this.focus]) {\r\n this.focus++;\r\n }\r\n } else {\r\n // Avoid caching val.length, as they may change in _addChar.\r\n for (var j = 0; j <= this.val.length; j++) {\r\n // When moving backwards there are some race conditions where we\r\n // dont want to add the character\r\n if (this.delta <= 0 && j === this.focus) {\r\n return true;\r\n }\r\n // Place character in current position of the formatted string.\r\n this._addChar(j);\r\n }\r\n }\r\n };\r\n //\r\n // @private\r\n // Add formattted char at position\r\n //\r\n Formatter.prototype._addChar = function (i) {\r\n // If char exists at position\r\n var chr = this.chars[i];\r\n if (!chr) {\r\n return true;\r\n }\r\n // If chars are added in between the old pos and new pos\r\n // we need to increment pos and delta\r\n if (utils.isBetween(i, [\r\n this.sel.begin - 1,\r\n this.newPos + 1\r\n ])) {\r\n this.newPos++;\r\n this.delta++;\r\n }\r\n // If character added before focus, incr\r\n if (i <= this.focus) {\r\n this.focus++;\r\n }\r\n // Updateholder\r\n if (this.hldrs[i]) {\r\n delete this.hldrs[i];\r\n this.hldrs[i + 1] = this.opts.placeholder;\r\n }\r\n // Update value\r\n this.val = utils.addChars(this.val, chr, i);\r\n };\r\n //\r\n // @private\r\n // Create a patternSpec for passing into patternMatcher that\r\n // has exactly one catch all pattern.\r\n //\r\n Formatter.prototype._specFromSinglePattern = function (patternStr) {\r\n return [{ '*': patternStr }];\r\n };\r\n // Expose\r\n return Formatter;\r\n }(patternMatcher, inptSel, utils);\r\n\r\n\r\n\r\n// A really lightweight plugin wrapper around the constructor,\r\n// preventing against multiple instantiations\r\nvar pluginName = 'formatter';\r\n\r\n$.fn[pluginName] = function (options) {\r\n\r\n // Initiate plugin if options passed\r\n if (typeof options == 'object') {\r\n this.each(function () {\r\n if (!$.data(this, 'plugin_' + pluginName)) {\r\n $.data(this, 'plugin_' + pluginName,\r\n new formatter(this, options));\r\n }\r\n });\r\n }\r\n\r\n // Add resetPattern method to plugin\r\n this.resetPattern = function (str) {\r\n this.each(function () {\r\n var formatted = $.data(this, 'plugin_' + pluginName);\r\n // resetPattern for instance\r\n if (formatted) { formatted.resetPattern(str); }\r\n });\r\n // Chainable please\r\n return this;\r\n };\r\n\r\n // Chainable please\r\n return this;\r\n};\r\n\r\n$.fn[pluginName].addInptType = function (chr, regexp) {\r\n formatter.addInptType(chr, regexp);\r\n};\r\n\r\n\r\n}));","/*!\r\n * jQuery Templates Plugin 1.0.0pre\r\n * http://github.com/jquery/jquery-tmpl\r\n * Requires jQuery 1.4.2\r\n *\r\n * Copyright 2011, Software Freedom Conservancy, Inc.\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n * http://jquery.org/license\r\n */\r\n(function( jQuery, undefined ){\r\n\tvar oldManip = jQuery.fn.domManip, tmplItmAtt = \"_tmplitem\", htmlExpr = /^[^<]*(<[\\w\\W]+>)[^>]*$|\\{\\{\\! /,\r\n\t\tnewTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];\r\n\r\n\tfunction newTmplItem( options, parentItem, fn, data ) {\r\n\t\t// Returns a template item data structure for a new rendered instance of a template (a 'template item').\r\n\t\t// The content field is a hierarchical array of strings and nested items (to be\r\n\t\t// removed and replaced by nodes field of dom elements, once inserted in DOM).\r\n\t\tvar newItem = {\r\n\t\t\tdata: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),\r\n\t\t\t_wrap: parentItem ? parentItem._wrap : null,\r\n\t\t\ttmpl: null,\r\n\t\t\tparent: parentItem || null,\r\n\t\t\tnodes: [],\r\n\t\t\tcalls: tiCalls,\r\n\t\t\tnest: tiNest,\r\n\t\t\twrap: tiWrap,\r\n\t\t\thtml: tiHtml,\r\n\t\t\tupdate: tiUpdate\r\n\t\t};\r\n\t\tif ( options ) {\r\n\t\t\tjQuery.extend( newItem, options, { nodes: [], parent: parentItem });\r\n\t\t}\r\n\t\tif ( fn ) {\r\n\t\t\t// Build the hierarchical content to be used during insertion into DOM\r\n\t\t\tnewItem.tmpl = fn;\r\n\t\t\tnewItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );\r\n\t\t\tnewItem.key = ++itemKey;\r\n\t\t\t// Keep track of new template item, until it is stored as jQuery Data on DOM element\r\n\t\t\t(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;\r\n\t\t}\r\n\t\treturn newItem;\r\n\t}\r\n\r\n\t// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).\r\n\tjQuery.each({\r\n\t\tappendTo: \"append\",\r\n\t\tprependTo: \"prepend\",\r\n\t\tinsertBefore: \"before\",\r\n\t\tinsertAfter: \"after\",\r\n\t\treplaceAll: \"replaceWith\"\r\n\t}, function( name, original ) {\r\n\t\tjQuery.fn[ name ] = function( selector ) {\r\n\t\t\tvar ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,\r\n\t\t\t\tparent = this.length === 1 && this[0].parentNode;\r\n\r\n\t\t\tappendToTmplItems = newTmplItems || {};\r\n\t\t\tif ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\r\n\t\t\t\tinsert[ original ]( this[0] );\r\n\t\t\t\tret = this;\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i = 0, l = insert.length; i < l; i++ ) {\r\n\t\t\t\t\tcloneIndex = i;\r\n\t\t\t\t\telems = (i > 0 ? this.clone(true) : this).get();\r\n\t\t\t\t\tjQuery( insert[i] )[ original ]( elems );\r\n\t\t\t\t\tret = ret.concat( elems );\r\n\t\t\t\t}\r\n\t\t\t\tcloneIndex = 0;\r\n\t\t\t\tret = this.pushStack( ret, name, insert.selector );\r\n\t\t\t}\r\n\t\t\ttmplItems = appendToTmplItems;\r\n\t\t\tappendToTmplItems = null;\r\n\t\t\tjQuery.tmpl.complete( tmplItems );\r\n\t\t\treturn ret;\r\n\t\t};\r\n\t});\r\n\r\n\tjQuery.fn.extend({\r\n\t\t// Use first wrapped element as template markup.\r\n\t\t// Return wrapped set of template items, obtained by rendering template against data.\r\n\t\ttmpl: function( data, options, parentItem ) {\r\n\t\t\treturn jQuery.tmpl( this[0], data, options, parentItem );\r\n\t\t},\r\n\r\n\t\t// Find which rendered template item the first wrapped DOM element belongs to\r\n\t\ttmplItem: function() {\r\n\t\t\treturn jQuery.tmplItem( this[0] );\r\n\t\t},\r\n\r\n\t\t// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.\r\n\t\ttemplate: function( name ) {\r\n\t\t\treturn jQuery.template( name, this[0] );\r\n\t\t},\r\n\r\n\t\tdomManip: function( args, table, callback, options ) {\r\n\t\t\tif ( args[0] && jQuery.isArray( args[0] )) {\r\n\t\t\t\tvar dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;\r\n\t\t\t\twhile ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], \"tmplItem\" ))) {}\r\n\t\t\t\tif ( tmplItem && cloneIndex ) {\r\n\t\t\t\t\tdmArgs[2] = function( fragClone ) {\r\n\t\t\t\t\t\t// Handler called by oldManip when rendered template has been inserted into DOM.\r\n\t\t\t\t\t\tjQuery.tmpl.afterManip( this, fragClone, callback );\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\toldManip.apply( this, dmArgs );\r\n\t\t\t} else {\r\n\t\t\t\toldManip.apply( this, arguments );\r\n\t\t\t}\r\n\t\t\tcloneIndex = 0;\r\n\t\t\tif ( !appendToTmplItems ) {\r\n\t\t\t\tjQuery.tmpl.complete( newTmplItems );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t});\r\n\r\n\tjQuery.extend({\r\n\t\t// Return wrapped set of template items, obtained by rendering template against data.\r\n\t\ttmpl: function( tmpl, data, options, parentItem ) {\r\n\t\t\tvar ret, topLevel = !parentItem;\r\n\t\t\tif ( topLevel ) {\r\n\t\t\t\t// This is a top-level tmpl call (not from a nested template using {{tmpl}})\r\n\t\t\t\tparentItem = topTmplItem;\r\n\t\t\t\ttmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );\r\n\t\t\t\twrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level\r\n\t\t\t} else if ( !tmpl ) {\r\n\t\t\t\t// The template item is already associated with DOM - this is a refresh.\r\n\t\t\t\t// Re-evaluate rendered template for the parentItem\r\n\t\t\t\ttmpl = parentItem.tmpl;\r\n\t\t\t\tnewTmplItems[parentItem.key] = parentItem;\r\n\t\t\t\tparentItem.nodes = [];\r\n\t\t\t\tif ( parentItem.wrapped ) {\r\n\t\t\t\t\tupdateWrapped( parentItem, parentItem.wrapped );\r\n\t\t\t\t}\r\n\t\t\t\t// Rebuild, without creating a new template item\r\n\t\t\t\treturn jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));\r\n\t\t\t}\r\n\t\t\tif ( !tmpl ) {\r\n\t\t\t\treturn []; // Could throw...\r\n\t\t\t}\r\n\t\t\tif ( typeof data === \"function\" ) {\r\n\t\t\t\tdata = data.call( parentItem || {} );\r\n\t\t\t}\r\n\t\t\tif ( options && options.wrapped ) {\r\n\t\t\t\tupdateWrapped( options, options.wrapped );\r\n\t\t\t}\r\n\t\t\tret = jQuery.isArray( data ) ?\r\n\t\t\t\tjQuery.map( data, function( dataItem ) {\r\n\t\t\t\t\treturn dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;\r\n\t\t\t\t}) :\r\n\t\t\t\t[ newTmplItem( options, parentItem, tmpl, data ) ];\r\n\t\t\treturn topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;\r\n\t\t},\r\n\r\n\t\t// Return rendered template item for an element.\r\n\t\ttmplItem: function( elem ) {\r\n\t\t\tvar tmplItem;\r\n\t\t\tif ( elem instanceof jQuery ) {\r\n\t\t\t\telem = elem[0];\r\n\t\t\t}\r\n\t\t\twhile ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, \"tmplItem\" )) && (elem = elem.parentNode) ) {}\r\n\t\t\treturn tmplItem || topTmplItem;\r\n\t\t},\r\n\r\n\t\t// Set:\r\n\t\t// Use $.template( name, tmpl ) to cache a named template,\r\n\t\t// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.\r\n\t\t// Use $( \"selector\" ).template( name ) to provide access by name to a script block template declaration.\r\n\r\n\t\t// Get:\r\n\t\t// Use $.template( name ) to access a cached template.\r\n\t\t// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )\r\n\t\t// will return the compiled template, without adding a name reference.\r\n\t\t// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent\r\n\t\t// to $.template( null, templateString )\r\n\t\ttemplate: function( name, tmpl ) {\r\n\t\t\tif (tmpl) {\r\n\t\t\t\t// Compile template and associate with name\r\n\t\t\t\tif ( typeof tmpl === \"string\" ) {\r\n\t\t\t\t\t// This is an HTML string being passed directly in.\r\n\t\t\t\t\ttmpl = buildTmplFn( tmpl );\r\n\t\t\t\t} else if ( tmpl instanceof jQuery ) {\r\n\t\t\t\t\ttmpl = tmpl[0] || {};\r\n\t\t\t\t}\r\n\t\t\t\tif ( tmpl.nodeType ) {\r\n\t\t\t\t\t// If this is a template block, use cached copy, or generate tmpl function and cache.\r\n\t\t\t\t\ttmpl = jQuery.data( tmpl, \"tmpl\" ) || jQuery.data( tmpl, \"tmpl\", buildTmplFn( tmpl.innerHTML ));\r\n\t\t\t\t\t// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.\r\n\t\t\t\t\t// This means that foo=\"${x}\" will not work if the value of x includes white space: foo=\"${x}\" -> foo=value of x.\r\n\t\t\t\t\t// To correct this, include space in tag: foo=\"${ x }\" -> foo=\"value of x\"\r\n\t\t\t\t}\r\n\t\t\t\treturn typeof name === \"string\" ? (jQuery.template[name] = tmpl) : tmpl;\r\n\t\t\t}\r\n\t\t\t// Return named compiled template\r\n\t\t\treturn name ? (typeof name !== \"string\" ? jQuery.template( null, name ):\r\n\t\t\t\t(jQuery.template[name] ||\r\n\t\t\t\t\t// If not in map, and not containing at least on HTML tag, treat as a selector.\r\n\t\t\t\t\t// (If integrated with core, use quickExpr.exec)\r\n\t\t\t\t\tjQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;\r\n\t\t},\r\n\r\n\t\tencode: function( text ) {\r\n\t\t\t// Do HTML encoding replacing < > & and ' and \" by corresponding entities.\r\n\t\t\treturn (\"\" + text).split(\"<\").join(\"&lt;\").split(\">\").join(\"&gt;\").split('\"').join(\"&#34;\").split(\"'\").join(\"&#39;\");\r\n\t\t}\r\n\t});\r\n\r\n\tjQuery.extend( jQuery.tmpl, {\r\n\t\ttag: {\r\n\t\t\t\"tmpl\": {\r\n\t\t\t\t_default: { $2: \"null\" },\r\n\t\t\t\topen: \"if($notnull_1){__=__.concat($item.nest($1,$2));}\"\r\n\t\t\t\t// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)\r\n\t\t\t\t// This means that {{tmpl foo}} treats foo as a template (which IS a function).\r\n\t\t\t\t// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.\r\n\t\t\t},\r\n\t\t\t\"wrap\": {\r\n\t\t\t\t_default: { $2: \"null\" },\r\n\t\t\t\topen: \"$item.calls(__,$1,$2);__=[];\",\r\n\t\t\t\tclose: \"call=$item.calls();__=call._.concat($item.wrap(call,__));\"\r\n\t\t\t},\r\n\t\t\t\"each\": {\r\n\t\t\t\t_default: { $2: \"$index, $value\" },\r\n\t\t\t\topen: \"if($notnull_1){$.each($1a,function($2){with(this){\",\r\n\t\t\t\tclose: \"}});}\"\r\n\t\t\t},\r\n\t\t\t\"if\": {\r\n\t\t\t\topen: \"if(($notnull_1) && $1a){\",\r\n\t\t\t\tclose: \"}\"\r\n\t\t\t},\r\n\t\t\t\"else\": {\r\n\t\t\t\t_default: { $1: \"true\" },\r\n\t\t\t\topen: \"}else if(($notnull_1) && $1a){\"\r\n\t\t\t},\r\n\t\t\t\"html\": {\r\n\t\t\t\t// Unecoded expression evaluation.\r\n\t\t\t\topen: \"if($notnull_1){__.push($1a);}\"\r\n\t\t\t},\r\n\t\t\t\"=\": {\r\n\t\t\t\t// Encoded expression evaluation. Abbreviated form is ${}.\r\n\t\t\t\t_default: { $1: \"$data\" },\r\n\t\t\t\topen: \"if($notnull_1){__.push($.encode($1a));}\"\r\n\t\t\t},\r\n\t\t\t\"!\": {\r\n\t\t\t\t// Comment tag. Skipped by parser\r\n\t\t\t\topen: \"\"\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events\r\n\t\tcomplete: function( items ) {\r\n\t\t\tnewTmplItems = {};\r\n\t\t},\r\n\r\n\t\t// Call this from code which overrides domManip, or equivalent\r\n\t\t// Manage cloning/storing template items etc.\r\n\t\tafterManip: function afterManip( elem, fragClone, callback ) {\r\n\t\t\t// Provides cloned fragment ready for fixup prior to and after insertion into DOM\r\n\t\t\tvar content = fragClone.nodeType === 11 ?\r\n\t\t\t\tjQuery.makeArray(fragClone.childNodes) :\r\n\t\t\t\tfragClone.nodeType === 1 ? [fragClone] : [];\r\n\r\n\t\t\t// Return fragment to original caller (e.g. append) for DOM insertion\r\n\t\t\tcallback.call( elem, fragClone );\r\n\r\n\t\t\t// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.\r\n\t\t\tstoreTmplItems( content );\r\n\t\t\tcloneIndex++;\r\n\t\t}\r\n\t});\r\n\r\n\t//========================== Private helper functions, used by code above ==========================\r\n\r\n\tfunction build( tmplItem, nested, content ) {\r\n\t\t// Convert hierarchical content into flat string array\r\n\t\t// and finally return array of fragments ready for DOM insertion\r\n\t\tvar frag, ret = content ? jQuery.map( content, function( item ) {\r\n\t\t\treturn (typeof item === \"string\") ?\r\n\t\t\t\t// Insert template item annotations, to be converted to jQuery.data( \"tmplItem\" ) when elems are inserted into DOM.\r\n\t\t\t\t(tmplItem.key ? item.replace( /(<\\w+)(?=[\\s>])(?![^>]*_tmplitem)([^>]*)/g, \"$1 \" + tmplItmAtt + \"=\\\"\" + tmplItem.key + \"\\\" $2\" ) : item) :\r\n\t\t\t\t// This is a child template item. Build nested template.\r\n\t\t\t\tbuild( item, tmplItem, item._ctnt );\r\n\t\t}) :\r\n\t\t// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.\r\n\t\ttmplItem;\r\n\t\tif ( nested ) {\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t// top-level template\r\n\t\tret = ret.join(\"\");\r\n\r\n\t\t// Support templates which have initial or final text nodes, or consist only of text\r\n\t\t// Also support HTML entities within the HTML markup.\r\n\t\tret.replace( /^\\s*([^<\\s][^<]*)?(<[\\w\\W]+>)([^>]*[^>\\s])?\\s*$/, function( all, before, middle, after) {\r\n\t\t\tfrag = jQuery( middle ).get();\r\n\r\n\t\t\tstoreTmplItems( frag );\r\n\t\t\tif ( before ) {\r\n\t\t\t\tfrag = unencode( before ).concat(frag);\r\n\t\t\t}\r\n\t\t\tif ( after ) {\r\n\t\t\t\tfrag = frag.concat(unencode( after ));\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn frag ? frag : unencode( ret );\r\n\t}\r\n\r\n\tfunction unencode( text ) {\r\n\t\t// Use createElement, since createTextNode will not render HTML entities correctly\r\n\t\tvar el = document.createElement( \"div\" );\r\n\t\tel.innerHTML = text;\r\n\t\treturn jQuery.makeArray(el.childNodes);\r\n\t}\r\n\r\n\t// Generate a reusable function that will serve to render a template against data\r\n\tfunction buildTmplFn( markup ) {\r\n\t\treturn new Function(\"jQuery\",\"$item\",\r\n\t\t\t// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).\r\n\t\t\t\"var $=jQuery,call,__=[],$data=$item.data;\" +\r\n\r\n\t\t\t// Introduce the data as local variables using with(){}\r\n\t\t\t\"with($data){__.push('\" +\r\n\r\n\t\t\t// Convert the template into pure JavaScript\r\n\t\t\tjQuery.trim(markup)\r\n\t\t\t\t.replace( /([\\\\'])/g, \"\\\\$1\" )\r\n\t\t\t\t.replace( /[\\r\\t\\n]/g, \" \" )\r\n\t\t\t\t.replace( /\\$\\{([^\\}]*)\\}/g, \"{{= $1}}\" )\r\n\t\t\t\t.replace( /\\{\\{(\\/?)(\\w+|.)(?:\\(((?:[^\\}]|\\}(?!\\}))*?)?\\))?(?:\\s+(.*?)?)?(\\(((?:[^\\}]|\\}(?!\\}))*?)\\))?\\s*\\}\\}/g,\r\n\t\t\t\tfunction( all, slash, type, fnargs, target, parens, args ) {\r\n\t\t\t\t\tvar tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;\r\n\t\t\t\t\tif ( !tag ) {\r\n\t\t\t\t\t\tthrow \"Unknown template tag: \" + type;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdef = tag._default || [];\r\n\t\t\t\t\tif ( parens && !/\\w$/.test(target)) {\r\n\t\t\t\t\t\ttarget += parens;\r\n\t\t\t\t\t\tparens = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( target ) {\r\n\t\t\t\t\t\ttarget = unescape( target );\r\n\t\t\t\t\t\targs = args ? (\",\" + unescape( args ) + \")\") : (parens ? \")\" : \"\");\r\n\t\t\t\t\t\t// Support for target being things like a.toLowerCase();\r\n\t\t\t\t\t\t// In that case don't call with template item as 'this' pointer. Just evaluate...\r\n\t\t\t\t\t\texpr = parens ? (target.indexOf(\".\") > -1 ? target + unescape( parens ) : (\"(\" + target + \").call($item\" + args)) : target;\r\n\t\t\t\t\t\texprAutoFnDetect = parens ? expr : \"(typeof(\" + target + \")==='function'?(\" + target + \").call($item):(\" + target + \"))\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texprAutoFnDetect = expr = def.$1 || \"null\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfnargs = unescape( fnargs );\r\n\t\t\t\t\treturn \"');\" +\r\n\t\t\t\t\t\ttag[ slash ? \"close\" : \"open\" ]\r\n\t\t\t\t\t\t\t.split( \"$notnull_1\" ).join( target ? \"typeof(\" + target + \")!=='undefined' && (\" + target + \")!=null\" : \"true\" )\r\n\t\t\t\t\t\t\t.split( \"$1a\" ).join( exprAutoFnDetect )\r\n\t\t\t\t\t\t\t.split( \"$1\" ).join( expr )\r\n\t\t\t\t\t\t\t.split( \"$2\" ).join( fnargs || def.$2 || \"\" ) +\r\n\t\t\t\t\t\t\"__.push('\";\r\n\t\t\t\t}) +\r\n\t\t\t\"');}return __;\"\r\n\t\t);\r\n\t}\r\n\tfunction updateWrapped( options, wrapped ) {\r\n\t\t// Build the wrapped content.\r\n\t\toptions._wrap = build( options, true,\r\n\t\t\t// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.\r\n\t\t\tjQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]\r\n\t\t).join(\"\");\r\n\t}\r\n\r\n\tfunction unescape( args ) {\r\n\t\treturn args ? args.replace( /\\\\'/g, \"'\").replace(/\\\\\\\\/g, \"\\\\\" ) : null;\r\n\t}\r\n\tfunction outerHtml( elem ) {\r\n\t\tvar div = document.createElement(\"div\");\r\n\t\tdiv.appendChild( elem.cloneNode(true) );\r\n\t\treturn div.innerHTML;\r\n\t}\r\n\r\n\t// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.\r\n\tfunction storeTmplItems( content ) {\r\n\t\tvar keySuffix = \"_\" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;\r\n\t\tfor ( i = 0, l = content.length; i < l; i++ ) {\r\n\t\t\tif ( (elem = content[i]).nodeType !== 1 ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\telems = elem.getElementsByTagName(\"*\");\r\n\t\t\tfor ( m = elems.length - 1; m >= 0; m-- ) {\r\n\t\t\t\tprocessItemKey( elems[m] );\r\n\t\t\t}\r\n\t\t\tprocessItemKey( elem );\r\n\t\t}\r\n\t\tfunction processItemKey( el ) {\r\n\t\t\tvar pntKey, pntNode = el, pntItem, tmplItem, key;\r\n\t\t\t// Ensure that each rendered template inserted into the DOM has its own template item,\r\n\t\t\tif ( (key = el.getAttribute( tmplItmAtt ))) {\r\n\t\t\t\twhile ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }\r\n\t\t\t\tif ( pntKey !== key ) {\r\n\t\t\t\t\t// The next ancestor with a _tmplitem expando is on a different key than this one.\r\n\t\t\t\t\t// So this is a top-level element within this template item\r\n\t\t\t\t\t// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.\r\n\t\t\t\t\tpntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;\r\n\t\t\t\t\tif ( !(tmplItem = newTmplItems[key]) ) {\r\n\t\t\t\t\t\t// The item is for wrapped content, and was copied from the temporary parent wrappedItem.\r\n\t\t\t\t\t\ttmplItem = wrappedItems[key];\r\n\t\t\t\t\t\ttmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );\r\n\t\t\t\t\t\ttmplItem.key = ++itemKey;\r\n\t\t\t\t\t\tnewTmplItems[itemKey] = tmplItem;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( cloneIndex ) {\r\n\t\t\t\t\t\tcloneTmplItem( key );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.removeAttribute( tmplItmAtt );\r\n\t\t\t} else if ( cloneIndex && (tmplItem = jQuery.data( el, \"tmplItem\" )) ) {\r\n\t\t\t\t// This was a rendered element, cloned during append or appendTo etc.\r\n\t\t\t\t// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.\r\n\t\t\t\tcloneTmplItem( tmplItem.key );\r\n\t\t\t\tnewTmplItems[tmplItem.key] = tmplItem;\r\n\t\t\t\tpntNode = jQuery.data( el.parentNode, \"tmplItem\" );\r\n\t\t\t\tpntNode = pntNode ? pntNode.key : 0;\r\n\t\t\t}\r\n\t\t\tif ( tmplItem ) {\r\n\t\t\t\tpntItem = tmplItem;\r\n\t\t\t\t// Find the template item of the parent element.\r\n\t\t\t\t// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)\r\n\t\t\t\twhile ( pntItem && pntItem.key != pntNode ) {\r\n\t\t\t\t\t// Add this element as a top-level node for this rendered template item, as well as for any\r\n\t\t\t\t\t// ancestor items between this item and the item of its parent element\r\n\t\t\t\t\tpntItem.nodes.push( el );\r\n\t\t\t\t\tpntItem = pntItem.parent;\r\n\t\t\t\t}\r\n\t\t\t\t// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...\r\n\t\t\t\tdelete tmplItem._ctnt;\r\n\t\t\t\tdelete tmplItem._wrap;\r\n\t\t\t\t// Store template item as jQuery data on the element\r\n\t\t\t\tjQuery.data( el, \"tmplItem\", tmplItem );\r\n\t\t\t}\r\n\t\t\tfunction cloneTmplItem( key ) {\r\n\t\t\t\tkey = key + keySuffix;\r\n\t\t\t\ttmplItem = newClonedItems[key] =\r\n\t\t\t\t\t(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//---- Helper functions for template item ----\r\n\r\n\tfunction tiCalls( content, tmpl, data, options ) {\r\n\t\tif ( !content ) {\r\n\t\t\treturn stack.pop();\r\n\t\t}\r\n\t\tstack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });\r\n\t}\r\n\r\n\tfunction tiNest( tmpl, data, options ) {\r\n\t\t// nested template, using {{tmpl}} tag\r\n\t\treturn jQuery.tmpl( jQuery.template( tmpl ), data, options, this );\r\n\t}\r\n\r\n\tfunction tiWrap( call, wrapped ) {\r\n\t\t// nested template, using {{wrap}} tag\r\n\t\tvar options = call.options || {};\r\n\t\toptions.wrapped = wrapped;\r\n\t\t// Apply the template, which may incorporate wrapped content,\r\n\t\treturn jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );\r\n\t}\r\n\r\n\tfunction tiHtml( filter, textOnly ) {\r\n\t\tvar wrapped = this._wrap;\r\n\t\treturn jQuery.map(\r\n\t\t\tjQuery( jQuery.isArray( wrapped ) ? wrapped.join(\"\") : wrapped ).filter( filter || \"*\" ),\r\n\t\t\tfunction(e) {\r\n\t\t\t\treturn textOnly ?\r\n\t\t\t\t\te.innerText || e.textContent :\r\n\t\t\t\t\te.outerHTML || outerHtml(e);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction tiUpdate() {\r\n\t\tvar coll = this.nodes;\r\n\t\tjQuery.tmpl( null, null, null, this).insertBefore( coll[0] );\r\n\t\tjQuery( coll ).remove();\r\n\t}\r\n})( jQuery );\r\n","/***********************************************************************************\r\n * 관리자 페이지 초기화\r\n ***********************************************************************************/\r\nAPP.init = function(){\r\n APP.initAjaxDefaultSetting();\r\n APP.initMenu();\r\n APP.initAx5();\r\n APP.initPlugins();\r\n APP.initCheckboxAll();\r\n};\r\n\r\n/***********************************************************************************\r\n * AJAX Error 및 BlockUI 처리\r\n ***********************************************************************************/\r\nAPP.initAjaxDefaultSetting = function() {\r\n $(document).ajaxError(function(event, request, settings){\r\n var message = '알수없는 오류가 발생하였습니다.';\r\n if( typeof request.responseJSON != 'undefined' && typeof request.responseJSON.message != 'undefined' ) {\r\n message = request.responseJSON.message;\r\n }\r\n else {\r\n if( request.status == 500 ) message = '서버 코드 오류가 발생하였습니다.\\n관리자에게 문의하세요';\r\n else if ( request.status == 401 ) message = '해당 명령을 실행할 권한이 없습니다.';\r\n }\r\n toastr.error(message, '오류 발생');\r\n }).ajaxStart(function(){\r\n $.blockUI({\r\n css: {width:'25px',top:'49%',left:'49%',border:'0px none',backgroundColor:'transparent',cursor:'wait'},\r\n message : '<img src=\"/assets/images/common/ajax-loader.gif\" alt=\"로딩중\">',\r\n baseZ : 10000,\r\n overlayCSS : {opacity : 0}\r\n });\r\n }).ajaxComplete(function(){\r\n $.unblockUI();\r\n });\r\n};\r\n\r\n/***********************************************************************************\r\n * 메뉴관련 초기화\r\n ***********************************************************************************/\r\nAPP.initMenu = function(){\r\n $('#nav .main-navigation li').each(function(){\r\n var $this = $(this);\r\n var menuCode = $this.data('active');\r\n\r\n if(menuCode == menuActive)\r\n {\r\n $(this).addClass('active');\r\n $(this).parents('li').addClass('active');\r\n }\r\n });\r\n};\r\n\r\nAPP.initPlugins = function() {\r\n /*\r\n $('[data-toggle=\"datepicker\"]').datepicker();\r\n\r\n $(\"body\").on(\"click\", '[data-toggle=\"datepicker\"]', function(){\r\n if (!$(this).hasClass(\"hasDatepicker\"))\r\n {\r\n $(this).datepicker();\r\n $(this).datepicker(\"show\");\r\n }\r\n });\r\n\r\n $('[data-toggle=\"formatter\"]').each(function(){\r\n if( $(this).data('pattern') )\r\n {\r\n $(this).formatter({\r\n pattern : $(this).data('pattern'),\r\n persistent: true\r\n });\r\n }\r\n });\r\n\r\n $.datetimepicker.setLocale('kr');\r\n $('[data-toggle=\"datetimepicker\"]').datetimepicker({\r\n format:'Y-m-d H:i'\r\n });\r\n */\r\n};\r\n\r\nAPP.initCheckboxAll = function(){\r\n $('[data-checkbox]').click(function(){\r\n var $check = $(this);\r\n var is_all = ($check.data('checkbox-all') && $check.data('checkbox-all').toString() == 'true');\r\n var name = $check.data('checkbox');\r\n var checked = $check.prop('checked');\r\n var $allCheck = is_all ? $check : $('[data-checkbox=\"'+name+'\"][data-checkbox-all=\"true\"]');\r\n\r\n if( is_all ) {\r\n $('[data-checkbox=\"'+name+'\"]').prop('checked', checked );\r\n }\r\n else {\r\n $allCheck.prop('checked', $('[data-checkbox=\"'+name+'\"]').not('[data-checkbox-all=\"true\"]').length == $('[data-checkbox=\"'+name+'\"]:checked').not('[data-checkbox-all=\"true\"]').length);\r\n }\r\n });\r\n};\r\n\r\n/**********************************************************************************************************************\r\n * MODAL 관련\r\n *********************************************************************************************************************/\r\nAPP.initAx5 = function(){\r\n APP.MASK = new ax5.ui.mask({\r\n zIndex: 1000}\r\n );\r\n APP.MASK2 = new ax5.ui.mask({\r\n zIndex: 2000\r\n });\r\n APP.modal = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: '<i class=\"far fa-spinner\"></i>'\r\n });\r\n APP.modal2 = new ax5.ui.modal({\r\n absolute: true,\r\n iframeLoadingMsg: '<i class=\"far fa-spinner\"></i>'\r\n });\r\n APP.toast = new ax5.ui.toast({\r\n containerPosition: \"top-right\",\r\n closeIcon: '<i class=\"far fa-times\"></i>'\r\n });\r\n};\r\n\r\n\r\n$(function(){\r\n APP.init();\r\n});","/* ========================================================================\r\n * Bootstrap: dropdown.js v3.3.7\r\n * http://getbootstrap.com/javascript/#dropdowns\r\n * ========================================================================\r\n * Copyright 2011-2016 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n+function ($) {\r\n 'use strict';\r\n\r\n // DROPDOWN CLASS DEFINITION\r\n // =========================\r\n\r\n var backdrop = '.dropdown-backdrop'\r\n var toggle = '[data-toggle=\"dropdown\"]'\r\n var Dropdown = function (element) {\r\n $(element).on('click.bs.dropdown', this.toggle)\r\n }\r\n\r\n Dropdown.VERSION = '3.3.7'\r\n\r\n function getParent($this) {\r\n var selector = $this.attr('data-target')\r\n\r\n if (!selector) {\r\n selector = $this.attr('href')\r\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n }\r\n\r\n var $parent = selector && $(selector)\r\n\r\n return $parent && $parent.length ? $parent : $this.parent()\r\n }\r\n\r\n function clearMenus(e) {\r\n if (e && e.which === 3) return\r\n $(backdrop).remove()\r\n $(toggle).each(function () {\r\n var $this = $(this)\r\n var $parent = getParent($this)\r\n var relatedTarget = { relatedTarget: this }\r\n\r\n if (!$parent.hasClass('open')) return\r\n\r\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\r\n\r\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this.attr('aria-expanded', 'false')\r\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\r\n })\r\n }\r\n\r\n Dropdown.prototype.toggle = function (e) {\r\n var $this = $(this)\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n clearMenus()\r\n\r\n if (!isActive) {\r\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\r\n // if mobile we use a backdrop because click events don't delegate\r\n $(document.createElement('div'))\r\n .addClass('dropdown-backdrop')\r\n .insertAfter($(this))\r\n .on('click', clearMenus)\r\n }\r\n\r\n var relatedTarget = { relatedTarget: this }\r\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this\r\n .trigger('focus')\r\n .attr('aria-expanded', 'true')\r\n\r\n $parent\r\n .toggleClass('open')\r\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\r\n }\r\n\r\n return false\r\n }\r\n\r\n Dropdown.prototype.keydown = function (e) {\r\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\r\n\r\n var $this = $(this)\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\r\n if (e.which == 27) $parent.find(toggle).trigger('focus')\r\n return $this.trigger('click')\r\n }\r\n\r\n var desc = ' li:not(.disabled):visible a'\r\n var $items = $parent.find('.dropdown-menu' + desc)\r\n\r\n if (!$items.length) return\r\n\r\n var index = $items.index(e.target)\r\n\r\n if (e.which == 38 && index > 0) index-- // up\r\n if (e.which == 40 && index < $items.length - 1) index++ // down\r\n if (!~index) index = 0\r\n\r\n $items.eq(index).trigger('focus')\r\n }\r\n\r\n\r\n // DROPDOWN PLUGIN DEFINITION\r\n // ==========================\r\n\r\n function Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this)\r\n var data = $this.data('bs.dropdown')\r\n\r\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\r\n if (typeof option == 'string') data[option].call($this)\r\n })\r\n }\r\n\r\n var old = $.fn.dropdown\r\n\r\n $.fn.dropdown = Plugin\r\n $.fn.dropdown.Constructor = Dropdown\r\n\r\n\r\n // DROPDOWN NO CONFLICT\r\n // ====================\r\n\r\n $.fn.dropdown.noConflict = function () {\r\n $.fn.dropdown = old\r\n return this\r\n }\r\n\r\n\r\n // APPLY TO STANDARD DROPDOWN ELEMENTS\r\n // ===================================\r\n\r\n $(document)\r\n .on('click.bs.dropdown.data-api', clearMenus)\r\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\r\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\r\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\r\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\r\n\r\n}(jQuery);","APP.MODAL = function() {\r\n var modalCallback = {};\r\n\r\n var defaultCss = {\r\n width: 400,\r\n height: 400,\r\n position: {\r\n left: \"center\",\r\n top: \"middle\"\r\n }\r\n };\r\n\r\n var defaultOption = $.extend(true, {}, defaultCss, {\r\n iframeLoadingMsg: \"\",\r\n iframe: {\r\n method: \"get\",\r\n url: \"#\"\r\n },\r\n closeToEsc: true,\r\n onStateChanged: function onStateChanged() {\r\n // mask\r\n if (this.state === \"open\") {\r\n APP.MASK.open();\r\n } else if (this.state === \"close\") {\r\n APP.MASK.close();\r\n }\r\n },\r\n animateTime: 100,\r\n zIndex: 1001,\r\n absolute: true,\r\n fullScreen: false,\r\n header: {\r\n title: \"새로운 윈도우\",\r\n btns: {\r\n close: {\r\n label: '<i class=\"far fa-times\"></i>', onClick: function onClick() {\r\n APP.MODAL.callback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var open = function(modalConfig) {\r\n\r\n modalConfig = $.extend(true, {}, defaultOption, modalConfig);\r\n $(document.body).addClass(\"modalOpened\");\r\n\r\n this.modalCallback = modalConfig.callback;\r\n this.modalSendData = modalConfig.sendData;\r\n\r\n APP.modal.open(modalConfig);\r\n };\r\n\r\n var css = function css(modalCss) {\r\n modalCss = $.extend(true, {}, defaultCss, modalCss);\r\n APP.modal.css(modalCss);\r\n };\r\n var align = function align(modalAlign) {\r\n APP.modal.align(modalAlign);\r\n };\r\n var close = function close(data) {\r\n APP.modal.close();\r\n setTimeout(function () {\r\n $(document.body).removeClass(\"modalOpened\");\r\n }, 500);\r\n };\r\n var minimize = function minimize() {\r\n APP.modal.minimize();\r\n };\r\n var maximize = function maximize() {\r\n APP.modal.maximize();\r\n };\r\n var callback = function callback(data) {\r\n if (this.modalCallback) {\r\n this.modalCallback(data);\r\n }\r\n this.close(data);\r\n };\r\n var getData = function getData() {\r\n if (this.modalSendData) {\r\n return this.modalSendData();\r\n }\r\n };\r\n\r\n return {\r\n \"open\": open,\r\n \"css\": css,\r\n \"align\": align,\r\n \"close\": close,\r\n \"minimize\": minimize,\r\n \"maximize\": maximize,\r\n \"callback\": callback,\r\n \"modalCallback\": modalCallback,\r\n \"getData\": getData\r\n };\r\n}();\r\nAPP.MODAL2 = function() {\r\n var modalCallback = {};\r\n\r\n var defaultCss = {\r\n width: 400,\r\n height: 400,\r\n position: {\r\n left: \"center\",\r\n top: \"middle\"\r\n }\r\n };\r\n\r\n var defaultOption = $.extend(true, {}, defaultCss, {\r\n iframeLoadingMsg: \"\",\r\n iframe: {\r\n method: \"get\",\r\n url: \"#\"\r\n },\r\n closeToEsc: true,\r\n onStateChanged: function onStateChanged() {\r\n // mask\r\n if (this.state === \"open\") {\r\n APP.MASK2.open();\r\n } else if (this.state === \"close\") {\r\n APP.MASK2.close();\r\n }\r\n },\r\n animateTime: 100,\r\n zIndex: 2001,\r\n absolute: true,\r\n fullScreen: false,\r\n header: {\r\n title: \"새로운 윈도우\",\r\n btns: {\r\n close: {\r\n label: '<i class=\"far fa-times\"></i>', onClick: function onClick() {\r\n APP.MODAL2.callback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n var open = function(modalConfig) {\r\n\r\n modalConfig = $.extend(true, {}, defaultOption, modalConfig);\r\n $(document.body).addClass(\"modalOpened\");\r\n\r\n this.modalCallback = modalConfig.callback;\r\n this.modalSendData = modalConfig.sendData;\r\n\r\n APP.modal2.open(modalConfig);\r\n };\r\n\r\n var css = function css(modalCss) {\r\n modalCss = $.extend(true, {}, defaultCss, modalCss);\r\n APP.modal2.css(modalCss);\r\n };\r\n var align = function align(modalAlign) {\r\n APP.modal2.align(modalAlign);\r\n };\r\n var close = function close(data) {\r\n APP.modal2.close();\r\n setTimeout(function () {\r\n $(document.body).removeClass(\"modalOpened\");\r\n }, 500);\r\n };\r\n var minimize = function minimize() {\r\n APP.modal2.minimize();\r\n };\r\n var maximize = function maximize() {\r\n APP.modal2.maximize();\r\n };\r\n var callback = function callback(data) {\r\n if (this.modalCallback) {\r\n this.modalCallback(data);\r\n }\r\n this.close(data);\r\n };\r\n var getData = function getData() {\r\n if (this.modalSendData) {\r\n return this.modalSendData();\r\n }\r\n };\r\n\r\n return {\r\n \"open\": open,\r\n \"css\": css,\r\n \"align\": align,\r\n \"close\": close,\r\n \"minimize\": minimize,\r\n \"maximize\": maximize,\r\n \"callback\": callback,\r\n \"modalCallback\": modalCallback,\r\n \"getData\": getData\r\n };\r\n}();","APP.TOAST = {\r\n confirm : function(msg) {\r\n APP.toast.push({\r\n theme : 'default',\r\n icon : '<i class=\"far fa-bell\"></i>',\r\n msg : msg\r\n });\r\n },\r\n error : function(msg) {\r\n APP.toast.push({\r\n theme : 'danger',\r\n icon : '<i class=\"far fa-exclamation-circle\"></i>',\r\n msg : msg\r\n });\r\n },\r\n success: function(msg) {\r\n APP.toast.push({\r\n theme : 'success',\r\n icon : '<i class=\"far fa-check-circle\"></i>',\r\n msg : msg\r\n })\r\n }\r\n};","var faq = {};\r\nfaq.form = function(fac_idx, faq_idx)\r\n{\r\n var faq_idx = (typeof faq_idx == 'string' || typeof faq_idx == 'number' ) ? faq_idx : null;\r\n var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;\r\n if(! fac_idx) {\r\n alert('FAQ 분류 정보가 없습니다.');\r\n return false;\r\n }\r\n\r\n APP.MODAL.open({\r\n width: 800,\r\n height :650,\r\n header : {\r\n title : faq_idx ? 'FAQ 정보 수정' : 'FAQ 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/management/faq_form',\r\n param : {\r\n fac_idx : fac_idx,\r\n faq_idx : faq_idx\r\n }\r\n }\r\n });\r\n};\r\nfaq.remove = function(faq_idx) {\r\n if(typeof faq_idx == 'undefined' || ! faq_idx || faq_idx.trim() == '') {\r\n alert('잘못된 접근입니다.');\r\n }\r\n\r\n if(! confirm('해당 FAQ를 삭제하시겠습니까?')) return false;\r\n\r\n $.ajax({\r\n url : '/ajax/faq/info',\r\n type : 'delete',\r\n async:false,\r\n cache:false,\r\n data:{faq_idx:faq_idx},\r\n success:function(res){\r\n alert('FAQ가 삭제되었습니다.');\r\n location.reload();\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * FAQ 분류\r\n * @type {{}}\r\n */\r\nfaq.category = {};\r\nfaq.category.form = function(fac_idx)\r\n{\r\n var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;\r\n APP.MODAL.open({\r\n width: $(window).width() > 600 ? 600 : $(window).width(),\r\n height :250,\r\n header : {\r\n title : fac_idx ? 'FAQ 분류 정보 수정' : 'FAQ 분류 추가'\r\n },\r\n callback : function(){\r\n location.reload();\r\n },\r\n iframe : {\r\n method : 'get',\r\n url : '/admin/management/faq_category_form',\r\n param : {\r\n fac_idx : fac_idx\r\n }\r\n }\r\n });\r\n};\r\nfaq.category.exist = function(fac_idx) {\r\n if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') return false;\r\n var result = false;\r\n $.ajax({\r\n url : '/ajax/faq/category',\r\n type:'get',\r\n async:false,\r\n cache:false,\r\n data:{fac_idx:fac_idx},\r\n success:function (res) {\r\n result = !(res && typeof res.fac_idx != 'undefined' && res.fac_idx);\r\n }\r\n });\r\n return result;\r\n};\r\nfaq.category.remove = function(fac_idx) {\r\n if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') {\r\n alert('잘못된 접근입니다.');\r\n }\r\n var count = 0;\r\n $.ajax({\r\n url : '/ajax/faq/lists',\r\n type : 'get',\r\n async:false,\r\n cache: false,\r\n data : {fac_idx:fac_idx},\r\n success:function(res){\r\n count = res.total_count;\r\n }\r\n });\r\n\r\n var msg = ( count > 0 ) ? '해당 FAQ 분류에 ' + count + '개의 FAQ 목록이 등록되어 있습니다.\\nFAQ 분류을 삭제할시 등록된 FAQ 목록도 같이 삭제됩니다.\\n\\n계속 하시겠습니까?' : 'FAQ 분류을 삭제하시겠습니까?';\r\n if(! confirm(msg)) return false;\r\n\r\n $.ajax({\r\n url : '/ajax/faq/category',\r\n type : 'delete',\r\n async:false,\r\n cache:false,\r\n data:{fac_idx:fac_idx},\r\n success:function(res){\r\n alert('FAQ 분류가 삭제되었습니다.');\r\n location.href= base_url + \"/admin/management/faq\";\r\n }\r\n });\r\n};\r\n\r\n\r\n"],"file":"admin.min.js"}