{"version":3,"sources":["jquery.hoverIntent.js","main.coffee","jquery.flexnav.js","main.js","jquery.fitvids.js","jquery.highlight.js","jquery.flexslider.js","bootstrap/collapse.js","bootstrap/transition.js","bootstrap/affix.js","bootstrap/button.js","bootstrap/tab.js","bootstrap/modal.js","bootstrap/dropdown.js","bootstrap/alert.js","tablesaw.js","fileinput.js","likes-ajax.js","scripts.js"],"names":["factory","define","amd","jQuery","fn","hoverIntent","$","cX","cY","_cfg","interval","sensitivity","timeout","INSTANCE_COUNT","track","ev","pageX","pageY","compare","$el","s","cfg","Math","sqrt","pX","pY","off","namespace","timeoutId","isActive","over","apply","setTimeout","handlerIn","handlerOut","selector","instanceId","extend","isPlainObject","isFunction","out","handleHover","e","this","hoverIntentData","data","state","id","clearTimeout","type","on","delay","mouseenter.hoverIntent","mouseleave.hoverIntent","flexNav","options","$nav","$top_nav_items","breakpoint","count","nav_percent","resetMenu","resizer","settings","showMenu","toggle_selector","touch_selector","animationSpeed","transitionOpacity","buttonSelector","hoverIntentTimeout","calcItemWidths","hover","addClass","find","each","has","length","hide","hasClass","filter","stop","animate","height","opacity","removeClass","window","width","css","append","bs","toggleClass","preventDefault","stopPropagation","is","parent","$sub","$touchButton","siblings","slideUp","slideDown","focus","not","show","call","fitVids","customSelector","ignore","document","getElementById","head","getElementsByTagName","div","createElement","innerHTML","appendChild","childNodes","selectors","push","ignoreList","$allVideos","join","$this","parents","tagName","toLowerCase","isNaN","attr","aspectRatio","parseInt","videoID","wrap","removeAttr","Zepto","highlight","node","re","nodeName","className","nodeType","match","wordNode","splitText","index","wordClone","cloneNode","parentNode","replaceChild","test","toUpperCase","i","unhighlight","element","firstChild","normalize","end","words","caseSensitive","wordsOnly","constructor","String","grep","word","map","replace","flag","pattern","RegExp","flexslider","el","slider","vars","defaults","watchedEventClearTimer","msGesture","navigator","msPointerEnabled","MSGesture","touch","DocumentTouch","eventType","watchedEvent","vertical","direction","reverse","carousel","itemWidth","fade","animation","asNav","asNavFor","methods","init","animating","currentSlide","startAt","animatingTo","atEnd","last","containerSelector","substr","search","slides","container","syncExists","sync","prop","args","manualPause","stopped","started","startTimeout","transitions","video","useCSS","obj","props","undefined","style","pfx","ensureAnimationEnd","controlsContainer","manualControls","customDirectionNav","randomize","sort","round","random","empty","doMath","setup","controlNav","directionNav","keyboard","multipleKeyboard","bind","event","keycode","keyCode","target","getTarget","flexAnimate","pauseOnAction","mousewheel","delta","deltaX","deltaY","pausePlay","slideshow","pauseInvisible","pauseOnHover","manualPlay","pause","play","isHidden","initDelay","smoothHeight","resize","start","floor","move","currentItem","eq","_slider","_gesture","addEventListener","currentTarget","addPointer","pointerId","$slide","offset","left","scrollLeft","setupManual","setupPaging","item","slide","j","controlNavScaffold","pagingCount","thumbCaptions","captn","set","active","delegate","setToClearWatchedEvent","update","action","pos","remove","closest","directionNavScaffold","prevText","nextText","disabledClass","animationLoop","pausePlayScaffold","html","playText","pauseText","startX","startY","cwidth","dx","startT","onTouchStart","onTouchMove","onTouchEnd","scrolling","localX","localY","accDx","msTouchAction","h","w","Number","Date","limit","itemW","itemMargin","cloneOffset","transX","translationX","transY","translationY","abs","detail","MSGESTURE_FLAG_INERTIA","setImmediate","setProps","updateDx","canAdvance","touches","removeEventListener","computedW","viewport","newSlides","dur","$obj","playing","uniqueID","$clone","add","visProp","getHiddenProp","evtname","prefixes","override","withSync","fromNav","master","ceil","visible","before","zIndex","wrapup","dimension","easing","margin","slideString","calcNext","unbind","after","animateSlides","clearInterval","animatedSlides","setInterval","slideshowSpeed","dir","special","posCheck","sliderOffset","arr","float","marginRight","position","display","webkitTransition","fadeFirstSlide","overflow","appendTo","cloneCount","makeArray","first","clone","prepend","slideMargin","minItems","maxItems","boxPadding","outerWidth","itemT","minW","maxW","addSlide","added","removeSlide","removed","blur","focused","allowOneSlide","$slides","fadeIn","$slider","Collapse","$element","DEFAULTS","transitioning","$parent","toggle","Plugin","option","VERSION","prototype","startEvent","Event","trigger","isDefaultPrevented","actives","hasData","complete","support","transition","scrollSize","camelCase","one","proxy","emulateTransitionEnd","offsetHeight","old","collapse","Constructor","noConflict","href","$target","duration","called","transEndEventNames","WebkitTransition","MozTransition","OTransition","name","transitionEnd","bsTransitionEnd","bindType","delegateType","handle","handleObj","handler","arguments","Affix","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","RESET","getPinnedOffset","scrollTop","top","scrollHeight","offsetTop","offsetBottom","bottom","affix","affixType","$spy","Button","isLoading","setState","loadingText","d","val","resetText","changed","$input","button","$btn","Tab","$ul","previous","relatedTarget","activate","callback","$active","next","offsetWidth","tab","Modal","$body","body","$backdrop","isShown","scrollbarWidth","remote","load","_relatedTarget","backdrop","that","checkScrollbar","setScrollbar","escape","enforceFocus","resetScrollbar","hideModal","which","removeBackdrop","doAnimate","callbackRemove","clientWidth","innerWidth","measureScrollbar","bodyPad","scrollDiv","removeChild","modal","showEvent","Dropdown","clearMenus","getParent","documentElement","insertAfter","keydown","desc","$items","dropdown","dismiss","Alert","close","removeElement","detach","alert","all","$doc","blackberry","WebKitPoint","operamini","Tablesaw","i18n","modes","columns","columnBtnText","columnsDialogError","config","classes","events","Table","Error","table","$table","mode","pluginName","createToolbar","colstart","_initCells","thrs","querySelectorAll","self","coltally","children","span","getAttribute","sel","k","cells","refresh","$toolbar","prev","insertBefore","destroy","tableId","removeData","$t","win","attrs","Stack","labelless","hideempty","allHeaders","reverseHeaders","$cells","hierarchyClass","$sortableButton","iteration","wrapInner","replaceWith","_create","_init","oEl","_select","label","opts","selected","createTextNode","text","l","arrg","a","b","c","ColumnToggle","columnToggleTable","columnBtnContain","columnBtn","popup","priorityPrefix","toolbar","headers","$menuButton","$popup","$menu","$btnContain","closeTimeout","hasNonPersistentHeaders","closePopup","priority","checked","refreshToggle","refreshPriority","createSwipeTable","$btns","$prevBtn","$nextBtn","persistWidths","$headerCells","$headerCellsNoPersist","headerWidths","$head","isIE8","$getCells","headerCell","showColumn","hideColumn","maintainWidths","newHash","prefix","styles","tableWidth","hash","$style","getNext","checkFound","getPrev","pair","fakeBreakpoints","matchMedia","matches","containerWidth","persist","sum","sums","visibleNonPersistantCount","isPersist","needsNonPersistentColumn","advance","fwd","nextpair","get","getCoord","key","originalEvent","click","x","y","originX","originY","swipe","horizontalThreshold","verticalThreshold","getSortValue","cell","trim","ascend","descend","switcher","tableToolbar","sortButton","o","heads","$switcher","clearOthers","sibs","v","col","makeHeadsActionable","newSortValue","idx","handleDefault","isDefaultCol","isDescending","isNumeric","slice","$firstChild","tablesawbtn","split","addSwitcher","getColumnNumber","prevAll","getTableRows","sortRows","rows","colNum","ascending","r","rowNum","getCells","customFn","forceNumeric","regex","parseFloat","getSortFxn","sorted","cur","newRows","applyToRows","replaceTableRows","makeColDefault","sortBy","returnVal","Array","MM","createMiniMap","$dotNav","hideDot","showHideNav","mq","showMinimap","dots","S","attributes","excludeMode","main","ignoreMode","isSelected","dataMode","$otherToolbarItems","onModeChange","nextUntil","fileinputLocales","isIE","ver","appName","userAgent","status","skipNS","previewCache","content","initialPreview","isArray","initialPreviewDelimiter","initialPreviewConfig","tags","initialPreviewThumbTags","delimiter","template","previewGenericTemplate","msg","n","getMsgSelected","initId","previewInitId","footer","getLayoutTemplate","renderThumbProgress","isDelete","initialPreviewShowDelete","caption","initialCaption","actions","showUpload","showDelete","disabled","url","renderFileActions","fetch","isDisabled","$tmp","ind","previewId","frameClass","isEmpty","replaceTags","frameAttr","unset","chk","len","isSet","hasFileAPISupport","File","FileReader","addCss","defaultFileActionSettings","removeIcon","removeTitle","uploadIcon","uploadClass","uploadTitle","indicatorNew","indicatorSuccess","indicatorError","indicatorLoading","indicatorNewTitle","indicatorSuccessTitle","indicatorErrorTitle","indicatorLoadingTitle","defaultLayoutTemplates","main1","main2","preview","zoom","icon","progress","actionDelete","actionUpload","btnDefault","btnLink","btnBrowse","defaultPreviewTemplates","generic","image","audio","flash","object","other","defaultPreviewTypes","defaultPreviewSettings","defaultFileTypeSettings","vType","vName","value","Object","toString","needle","haystack","getElement","param","uniqId","getTime","str","objUrl","URL","webkitURL","FileInput","validate","isPreviewable","isIE9","isIE10","listen","t","$div","def","num","fileInputCleared","fileBatchCompleted","showPreview","uploadFileAttr","reader","formdata","filestack","uploadCount","uploadStatus","fileprogress","ajaxRequests","isError","ajaxAborted","cancelling","progressTemplate","progressClass","progressCompleteTemplate","progressCompleteClass","dropZoneEnabled","draggable","ondragstart","ondrop","isUploadable","FormData","uploadUrl","slug","slugCallback","slugDefault","mainTemplate","showCaption","captionTemplate","getPreviewTemplate","$container","createContainer","refreshContainer","$progress","$btnUpload","$captionContainer","$caption","$previewContainer","$preview","$previewStatus","$errorContainer","msgErrorClass","fileActionSettings","initPreview","initPreviewDeletes","setFileDropZoneTitle","disable","parseError","jqXHR","errorThrown","fileName","errMsg","dot","responseJSON","error","responseText","msgUploadAborted","showAjaxErrorDetails","raise","params","result","layoutTemplates","customLayoutTags","previewTemplates","customPreviewTags","parseFilePreviewIcon","fname","ext","icn","previewFileIcon","indexOf","pop","previewFileIconSettings","previewFileExtSettings","func","previewFileIconClass","getOutData","responseData","filesData","form","files","extra","getExtraData","response","$cap","$btnFile","$form","$cont","change","clear","reset","cancel","initDragDrop","submitForm","isEnabled","upload","minFileCount","getFileCount","noFilesError","abort","message","abortData","abortMessage","setProgress","showUploadError","filePlural","fileSingle","msgFilesTooLess","$error","addError","updateFileDetails","clearFileInput","p","pct","min","outData","totLen","getFileStack","hasExtraData","isEmptyObject","resetUpload","lock","uploadExtraOnly","hasInitData","uploadAsync","uploadCache","uploadSingle","uploadBatch","resetErrors","showRemove","showCancel","unlock","enable","resetFileStack","newstack","getThumbs","$thumb","file","data-fileindex","fileinput","$zone","hasFiles","inArray","dataTransfer","types","effectAllowed","dropEffect","dropZoneTitleClass","dropZoneTitle","initFileActions","hasError","cap","$frame","validateMinCount","cleanMemory","fadeOut","clearObjects","hasThumb","setCaption","strFiles","msgSelected","renderFileFooter","previewThumbTags","vUrl","vKey","btnDelete","btnUpload","otherButtons","otherActionButtons","setThumbStatus","$indicator","clearPreview","showUploadedThumbs","isInit","initCaption","deleteExtraData","resetProgress","deleteUrl","extraData","cache","dataType","beforeSend","success","textStatus","showError","ajaxDeleteSettings","ajax","$srcFrm","$tmpFrm","$tmpEl","xhr","revokeObjectURL","hasInitialPreview","overwriteInitial","showFileIcon","resetPreview","hideFileIcon","resetPreviewThumbs","isAjax","uploadExtraData","uploadExtra","setAsyncUploadStatus","total","initXhr","xhrobj","fileCount","loaded","lengthComputable","ajaxSubmit","fnBefore","fnSuccess","fnComplete","fnError","ajaxSettings","processData","contentType","initUploadSuccess","allFiles","$newThumb","initSuccessThumbs","$remove","chkComplete","resetActions","$btnDelete","hasPostData","setAllUploaded","$thumbs","keys","errorkeys","uploadFileCount","errorCloseButton","showFolderError","folders","msgFoldersNotAllowed","errorHandler","evt","err","code","NOT_FOUND_ERR","msgFileNotFound","SECURITY_ERR","msgFileSecured","NOT_READABLE_ERR","msgFileNotReadable","ABORT_ERR","msgFilePreviewAborted","msgFilePreviewError","parseFileType","cat","fileTypeSettings","previewDefault","createObjectURL","previewSettings","lastIndexOf","previewOtherTemplate","previewFile","theFile","strText","allowedPreviewTypes","mimes","allowedPreviewMimeTypes","tmplt","chkTypes","chkMimes","msgZoomModalHeading","zoomIndicator","msgZoomTitle","validateImage","skipNull","readFiles","readFile","$status","msgLoading","msgProgress","numFiles","ctr","throwError","p1","p2","checkFile","typ","fileSize","size","fileExtExpr","previewData","fileTypes","allowedFileTypes","strTypes","fileExt","allowedFileExtensions","strExt","toFixed","maxFileSize","msgSizeTooLarge","msgInvalidFileType","onerror","onload","onloadend","onprogress","fact","readAsText","textEncoding","readAsArrayBuffer","msgInvalidFileExtension","fileStack","nFiles","log","validateInitialCount","tfiles","f","mesg","isDragDrop","isSingleUpload","isAjaxUpload","flagSingle","maxFileCount","autoReplace","msgFilesTooMany","w1","w2","$img","checkDimensions","dim","$imgEl","naturalWidth","naturalHeight","title","msgValidationError","msgValidationErrorClass","msgValidationErrorIcon","initBrowse","class","renderMain","dropCss","previewClass","captionClass","mainClass","renderButton","btnType","retvals","shift","lang","language","browseIcon","browseClass","cancelIcon","cancelClass","minImageWidth","minImageHeight","maxImageWidth","maxImageHeight","progressThumbClass","previewFileType","elCaptionContainer","elCaptionText","elPreviewContainer","elPreviewImage","elPreviewStatus","elErrorContainer","en","browseLabel","removeLabel","cancelLabel","cancelTitle","uploadLabel","msgImageWidthSmall","msgImageHeightSmall","msgImageWidthLarge","msgImageHeightLarge","ready","rtrim","serialize","context","source","sink","found","kid","selectpicker","submit","bindAjaxify","onSuccess","dom","method","methoth","location","assign","setToWindowHeight","navBlock","equalHeightSidebar","group","tallest","thisHeight","growBy","bodyHeight","equalHeight","outerHeight","vCenter","textBlock","marginOffest","margin-top","slideHeight","newMargin","vCenterSingle","navStretch","navNumber","navWidth","childrenWidth","navGap","margin-right","fadeTo","setHeight","featureBox","textHeight","centerScale","theImage","parentHeight","parentWidth","thisWidth","hShift","leftMargin","margin-left","topMargin","touchStartX","touchStartY","querySelector","submitButton","btn","innerHtml","textContent","setAttribute","disableForumPostSubmitButton","$countryDropdown","$usLocationSearch","clientX","clientY","touchRight","changedTouches","navInClass","touchDown","toggleOffCanvas","$back_to_top","scroll","toggleText","toggleAttrTrueFalse","elAttr"],"mappings":"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","sourcesContent":["/*!\r\n * hoverIntent v1.8.1 // 2014.08.11 // jQuery v1.9.1+\r\n * http://cherne.net/brian/resources/jquery.hoverIntent.html\r\n *\r\n * You may use hoverIntent under the terms of the MIT license. Basically that\r\n * means you are free to use hoverIntent as long as this header is left intact.\r\n * Copyright 2007, 2014 Brian Cherne\r\n */\r\n\r\n/* hoverIntent is similar to jQuery's built-in \"hover\" method except that\r\n * instead of firing the handlerIn function immediately, hoverIntent checks\r\n * to see if the user's mouse has slowed down (beneath the sensitivity\r\n * threshold) before firing the event. The handlerOut function is only\r\n * called after a matching handlerIn.\r\n *\r\n * // basic usage ... just like .hover()\r\n * .hoverIntent( handlerIn, handlerOut )\r\n * .hoverIntent( handlerInOut )\r\n *\r\n * // basic usage ... with event delegation!\r\n * .hoverIntent( handlerIn, handlerOut, selector )\r\n * .hoverIntent( handlerInOut, selector )\r\n *\r\n * // using a basic configuration object\r\n * .hoverIntent( config )\r\n *\r\n * @param handlerIn function OR configuration object\r\n * @param handlerOut function OR selector for delegation OR undefined\r\n * @param selector selector OR undefined\r\n * @author Brian Cherne \r\n */\r\n\r\n(function(factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery'], factory);\r\n } else if (jQuery && !jQuery.fn.hoverIntent) {\r\n factory(jQuery);\r\n }\r\n})(function($) {\r\n 'use strict';\r\n\r\n // default configuration values\r\n var _cfg = {\r\n interval: 100,\r\n sensitivity: 6,\r\n timeout: 0\r\n };\r\n\r\n // counter used to generate an ID for each instance\r\n var INSTANCE_COUNT = 0;\r\n\r\n // current X and Y position of mouse, updated during mousemove tracking (shared across instances)\r\n var cX, cY;\r\n\r\n // saves the current pointer position coordinated based on the given mouse event\r\n var track = function(ev) {\r\n cX = ev.pageX;\r\n cY = ev.pageY;\r\n };\r\n\r\n // compares current and previous mouse positions\r\n var compare = function(ev,$el,s,cfg) {\r\n // compare mouse positions to see if pointer has slowed enough to trigger `over` function\r\n if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {\r\n $el.off('mousemove.hoverIntent'+s.namespace,track);\r\n delete s.timeoutId;\r\n // set hoverIntent state as active for this element (so `out` handler can eventually be called)\r\n s.isActive = true;\r\n // clear coordinate data\r\n delete s.pX; delete s.pY;\r\n return cfg.over.apply($el[0],[ev]);\r\n } else {\r\n // set previous coordinates for next comparison\r\n s.pX = cX; s.pY = cY;\r\n // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)\r\n s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );\r\n }\r\n };\r\n\r\n // triggers given `out` function at configured `timeout` after a mouseleave and clears state\r\n var delay = function(ev,$el,s,out) {\r\n delete $el.data('hoverIntent')[s.id];\r\n return out.apply($el[0],[ev]);\r\n };\r\n\r\n $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {\r\n // instance ID, used as a key to store and retrieve state information on an element\r\n var instanceId = INSTANCE_COUNT++;\r\n\r\n // extend the default configuration and parse parameters\r\n var cfg = $.extend({}, _cfg);\r\n if ( $.isPlainObject(handlerIn) ) {\r\n cfg = $.extend(cfg, handlerIn );\r\n } else if ($.isFunction(handlerOut)) {\r\n cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );\r\n } else {\r\n cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );\r\n }\r\n\r\n // A private function for handling mouse 'hovering'\r\n var handleHover = function(e) {\r\n // cloned event to pass to handlers (copy required for event object to be passed in IE)\r\n var ev = $.extend({},e);\r\n\r\n // the current target of the mouse event, wrapped in a jQuery object\r\n var $el = $(this);\r\n\r\n // read hoverIntent data from element (or initialize if not present)\r\n var hoverIntentData = $el.data('hoverIntent');\r\n if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }\r\n\r\n // read per-instance state from element (or initialize if not present)\r\n var state = hoverIntentData[instanceId];\r\n if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }\r\n\r\n // state properties:\r\n // id = instance ID, used to clean up data\r\n // timeoutId = timeout ID, reused for tracking mouse position and delaying \"out\" handler\r\n // isActive = plugin state, true after `over` is called just until `out` is called\r\n // pX, pY = previously-measured pointer coordinates, updated at each polling interval\r\n // namespace = string used as namespace for per-instance event management\r\n\r\n // clear any existing timeout\r\n if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }\r\n\r\n // event namespace, used to register and unregister mousemove tracking\r\n var namespace = state.namespace = '.hoverIntent'+instanceId;\r\n\r\n // handle the event, based on its type\r\n if (e.type === 'mouseenter') {\r\n // do nothing if already active\r\n if (state.isActive) { return; }\r\n // set \"previous\" X and Y position based on initial entry point\r\n state.pX = ev.pageX; state.pY = ev.pageY;\r\n // update \"current\" X and Y position based on mousemove\r\n $el.on('mousemove.hoverIntent'+namespace,track);\r\n // start polling interval (self-calling timeout) to compare mouse coordinates over time\r\n state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );\r\n } else { // \"mouseleave\"\r\n // do nothing if not already active\r\n if (!state.isActive) { return; }\r\n // unbind expensive mousemove event\r\n $el.off('mousemove.hoverIntent'+namespace,track);\r\n // if hoverIntent state is true, then call the mouseOut function after the specified delay\r\n state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );\r\n }\r\n };\r\n\r\n // listen for mouseenter and mouseleave\r\n return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);\r\n };\r\n});\r\n",null,"/*\r\n\tFlexNav.js 1.3.3\r\n\r\n\tCreated by Jason Weaver http://jasonweaver.name\r\n\tReleased under http://unlicense.org/\r\n\r\n//\r\n*/\r\n\r\n\r\n(function() {\r\n var $;\r\n\r\n $ = jQuery;\r\n\r\n $.fn.flexNav = function(options) {\r\n var $nav, $top_nav_items, breakpoint, count, nav_percent, nav_width, resetMenu, resizer, settings, showMenu, toggle_selector, touch_selector;\r\n settings = $.extend({\r\n 'animationSpeed': 250,\r\n 'transitionOpacity': true,\r\n 'buttonSelector': '.menu-button',\r\n 'hoverIntent': false,\r\n 'hoverIntentTimeout': 150,\r\n 'calcItemWidths': false,\r\n 'hover': true\r\n }, options);\r\n $nav = $(this);\r\n $nav.addClass('with-js');\r\n // if (settings.transitionOpacity === true) {\r\n // $nav.addClass('opacity');\r\n // }\r\n $nav.find(\"li\").each(function() {\r\n if ($(this).has(\"ul\").length) {\r\n return $(this).addClass(\"item-with-ul\").find(\"ul\").hide();\r\n }\r\n });\r\n if (settings.calcItemWidths === true) {\r\n $top_nav_items = $nav.find('>li');\r\n count = $top_nav_items.length;\r\n nav_width = 100 / count;\r\n nav_percent = nav_width + \"%\";\r\n }\r\n if ($nav.data('breakpoint')) {\r\n breakpoint = $nav.data('breakpoint');\r\n }\r\n showMenu = function() {\r\n if ($nav.hasClass('lg-screen') === true && settings.hover === true) {\r\n // console.log(\"show menu on hover\");\r\n if (settings.transitionOpacity === true) {\r\n return $(this).find('>ul').filter(':not(:animated)').addClass('flexnav-show').stop(true, true).animate({\r\n height: [\"show\", \"swing\"],\r\n opacity: \"show\"\r\n }, settings.animationSpeed);\r\n } else {\r\n return $(this).find('>ul').filter(':not(:animated)').addClass('flexnav-show').stop(true, true).animate({\r\n height: [\"show\", \"swing\"]\r\n }, settings.animationSpeed);\r\n }\r\n }\r\n };\r\n resetMenu = function() {\r\n if ($nav.hasClass('lg-screen') === true && $(this).find('>ul').hasClass('flexnav-show') === true && settings.hover === true) {\r\n // console.log(\"close menu on mouse out\");\r\n if (settings.transitionOpacity === true) {\r\n return $(this).find('>ul').removeClass('flexnav-show').stop(true, true).animate({\r\n height: [\"hide\", \"swing\"],\r\n opacity: \"hide\"\r\n }, settings.animationSpeed);\r\n } else {\r\n return $(this).find('>ul').removeClass('flexnav-show').stop(true, true).animate({\r\n height: [\"hide\", \"swing\"]\r\n }, settings.animationSpeed);\r\n }\r\n }\r\n };\r\n resizer = function() {\r\n var selector;\r\n if ($(window).width() <= breakpoint) {\r\n $nav.removeClass(\"lg-screen\").addClass(\"sm-screen\");\r\n if (settings.calcItemWidths === true) {\r\n $top_nav_items.css('width', '100%');\r\n }\r\n selector = settings['buttonSelector'] + ', ' + settings['buttonSelector'] + ' .touch-button';\r\n $(selector).removeClass('active');\r\n return $('.one-page li a').on('click', function() {\r\n return $nav.removeClass('flexnav-show');\r\n });\r\n } else if ($(window).width() > breakpoint) {\r\n $nav.removeClass(\"sm-screen\").addClass(\"lg-screen\");\r\n if (settings.calcItemWidths === true) {\r\n $top_nav_items.css('width', nav_percent);\r\n }\r\n $nav.removeClass('flexnav-show').find('.item-with-ul').on();\r\n $('.item-with-ul').find('ul').removeClass('flexnav-show');\r\n resetMenu();\r\n if (settings.hoverIntent === true) {\r\n return $('.item-with-ul').hoverIntent({\r\n over: showMenu,\r\n out: resetMenu,\r\n timeout: settings.hoverIntentTimeout\r\n });\r\n } else if (settings.hoverIntent === false) {\r\n return $('.item-with-ul').on('mouseenter', showMenu).on('mouseleave', resetMenu);\r\n }\r\n }\r\n };\r\n $(settings['buttonSelector']).data('navEl', $nav);\r\n touch_selector = '.item-with-ul, ' + settings['buttonSelector'];\r\n $(touch_selector).append('');\r\n toggle_selector = settings['buttonSelector'] + ', ' + settings['buttonSelector'] + ' .touch-button';\r\n $(toggle_selector).on('click', function(e) {\r\n var $btnParent, $thisNav, bs;\r\n $(toggle_selector).toggleClass('active');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n bs = settings['buttonSelector'];\r\n $btnParent = $(this).is(bs) ? $(this) : $(this).parent(bs);\r\n $thisNav = $btnParent.data('navEl');\r\n return $thisNav.toggleClass('flexnav-show');\r\n });\r\n $('.touch-button').on('click', function(e) {\r\n var $sub, $touchButton;\r\n $sub = $(this).parent('.item-with-ul').find('>ul');\r\n $touchButton = $(this).parent('.item-with-ul').find('>span.touch-button');\r\n if ($nav.hasClass('lg-screen') === true) {\r\n $(this).parent('.item-with-ul').siblings().find('ul.flexnav-show').removeClass('flexnav-show').hide();\r\n }\r\n if ($sub.hasClass('flexnav-show') === true) {\r\n $sub.removeClass('flexnav-show').slideUp(settings.animationSpeed);\r\n // console.log(\"close menu with touch\");\r\n return $touchButton.removeClass('active');\r\n } else if ($sub.hasClass('flexnav-show') === false) {\r\n $sub.addClass('flexnav-show').slideDown(settings.animationSpeed);\r\n // console.log(\"open menu with touch\");\r\n return $touchButton.addClass('active');\r\n }\r\n });\r\n $nav.find('.item-with-ul *').focus(function() {\r\n $(this).parent('.item-with-ul').parent().find(\".open\").not(this).removeClass(\"open\").hide();\r\n return $(this).parent('.item-with-ul').find('>ul').addClass(\"open\").show();\r\n });\r\n resizer();\r\n return $(window).on('resize', resizer);\r\n };\r\n\r\n}).call(this);\r\n",null,"/*jshint browser:true */\r\n/*!\r\n* FitVids 1.1\r\n*\r\n* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com\r\n* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/\r\n* Released under the WTFPL license - http://sam.zoy.org/wtfpl/\r\n*\r\n*/\r\n\r\n;(function( $ ){\r\n\r\n 'use strict';\r\n\r\n $.fn.fitVids = function( options ) {\r\n var settings = {\r\n customSelector: null,\r\n ignore: null\r\n };\r\n\r\n if(!document.getElementById('fit-vids-style')) {\r\n // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js\r\n var head = document.head || document.getElementsByTagName('head')[0];\r\n var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';\r\n var div = document.createElement(\"div\");\r\n div.innerHTML = '

x

';\r\n head.appendChild(div.childNodes[1]);\r\n }\r\n\r\n if ( options ) {\r\n $.extend( settings, options );\r\n }\r\n\r\n return this.each(function(){\r\n var selectors = [\r\n 'iframe[src*=\"player.vimeo.com\"]',\r\n 'iframe[src*=\"youtube.com\"]',\r\n 'iframe[src*=\"youtube-nocookie.com\"]',\r\n 'iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\r\n 'object',\r\n 'embed'\r\n ];\r\n\r\n if (settings.customSelector) {\r\n selectors.push(settings.customSelector);\r\n }\r\n\r\n var ignoreList = '.fitvidsignore';\r\n\r\n if(settings.ignore) {\r\n ignoreList = ignoreList + ', ' + settings.ignore;\r\n }\r\n\r\n var $allVideos = $(this).find(selectors.join(','));\r\n $allVideos = $allVideos.not('object object'); // SwfObj conflict patch\r\n $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.\r\n\r\n $allVideos.each(function(count){\r\n var $this = $(this);\r\n if($this.parents(ignoreList).length > 0) {\r\n return; // Disable FitVids on this video.\r\n }\r\n if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }\r\n if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))\r\n {\r\n $this.attr('height', 9);\r\n $this.attr('width', 16);\r\n }\r\n var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),\r\n width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),\r\n aspectRatio = height / width;\r\n if(!$this.attr('id')){\r\n var videoID = 'fitvid' + count;\r\n $this.attr('id', videoID);\r\n }\r\n $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');\r\n $this.removeAttr('height').removeAttr('width');\r\n });\r\n });\r\n };\r\n// Works with either jQuery or Zepto\r\n})( window.jQuery || window.Zepto );\r\n","/*\r\n * jQuery Highlight plugin\r\n *\r\n * Based on highlight v3 by Johann Burkard\r\n * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html\r\n *\r\n * Code a little bit refactored and cleaned (in my humble opinion).\r\n * Most important changes:\r\n * - has an option to highlight only entire words (wordsOnly - false by default),\r\n * - has an option to be case sensitive (caseSensitive - false by default)\r\n * - highlight element tag and class names can be specified in options\r\n *\r\n * Usage:\r\n * // wrap every occurrance of text 'lorem' in content\r\n * // with (default options)\r\n * $('#content').highlight('lorem');\r\n *\r\n * // search for and highlight more terms at once\r\n * // so you can save some time on traversing DOM\r\n * $('#content').highlight(['lorem', 'ipsum']);\r\n * $('#content').highlight('lorem ipsum');\r\n *\r\n * // search only for entire word 'lorem'\r\n * $('#content').highlight('lorem', { wordsOnly: true });\r\n *\r\n * // don't ignore case during search of term 'lorem'\r\n * $('#content').highlight('lorem', { caseSensitive: true });\r\n *\r\n * // wrap every occurrance of term 'ipsum' in content\r\n * // with \r\n * $('#content').highlight('ipsum', { element: 'em', className: 'important' });\r\n *\r\n * // remove default highlight\r\n * $('#content').unhighlight();\r\n *\r\n * // remove custom highlight\r\n * $('#content').unhighlight({ element: 'em', className: 'important' });\r\n *\r\n *\r\n * Copyright (c) 2009 Bartek Szopka\r\n *\r\n * Licensed under MIT license.\r\n *\r\n */\r\n\r\njQuery.extend({\r\n\thighlight: function (node, re, nodeName, className) {\r\n\t\tif (node.nodeType === 3) {\r\n\t\t\tvar match = node.data.match(re);\r\n\t\t\tif (match) {\r\n\t\t\t\tvar highlight = document.createElement(nodeName || 'span');\r\n\t\t\t\thighlight.className = className || 'highlight';\r\n\t\t\t\tvar wordNode = node.splitText(match.index);\r\n\t\t\t\twordNode.splitText(match[0].length);\r\n\t\t\t\tvar wordClone = wordNode.cloneNode(true);\r\n\t\t\t\thighlight.appendChild(wordClone);\r\n\t\t\t\twordNode.parentNode.replaceChild(highlight, wordNode);\r\n\t\t\t\treturn 1; //skip added node in parent\r\n\t\t\t}\r\n\t\t} else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children\r\n\t\t\t\t\t\t!/(script|style)/i.test(node.tagName) && // ignore script and style nodes\r\n\t\t\t\t\t\t!(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted\r\n\t\t\tfor (var i = 0; i < node.childNodes.length; i++) {\r\n\t\t\t\ti += jQuery.highlight(node.childNodes[i], re, nodeName, className);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n});\r\n\r\njQuery.fn.unhighlight = function (options) {\r\n\tvar settings = { className: 'highlight', element: 'span' };\r\n\tjQuery.extend(settings, options);\r\n\r\n\treturn this.find(settings.element + \".\" + settings.className).each(function () {\r\n\t\tvar parent = this.parentNode;\r\n\t\tparent.replaceChild(this.firstChild, this);\r\n\t\tparent.normalize();\r\n\t}).end();\r\n};\r\n\r\njQuery.fn.highlight = function (words, options) {\r\n\tvar settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };\r\n\tjQuery.extend(settings, options);\r\n\r\n\tif (words.constructor === String) {\r\n\t\twords = [words];\r\n\t}\r\n\twords = jQuery.grep(words, function (word, i) {\r\n\t\treturn word != '';\r\n\t});\r\n\twords = jQuery.map(words, function (word, i) {\r\n\t\treturn word.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\r\n\t});\r\n\tif (words.length == 0) { return this; };\r\n\r\n\tvar flag = settings.caseSensitive ? \"\" : \"i\";\r\n\tvar pattern = \"(\" + words.join(\"|\") + \")\";\r\n\tif (settings.wordsOnly) {\r\n\t\tpattern = \"\\\\b\" + pattern + \"\\\\b\";\r\n\t}\r\n\tvar re = new RegExp(pattern, flag);\r\n\r\n\treturn this.each(function () {\r\n\t\tjQuery.highlight(this, re, settings.element, settings.className);\r\n\t});\r\n};\r\n\r\n","/*\r\n * jQuery FlexSlider v2.5.0\r\n * Copyright 2012 WooThemes\r\n * Contributing Author: Tyler Smith\r\n */\r\n;\r\n(function ($) {\r\n\r\n //FlexSlider: Object Instance\r\n $.flexslider = function(el, options) {\r\n var slider = $(el);\r\n\r\n // making variables public\r\n slider.vars = $.extend({}, $.flexslider.defaults, options);\r\n\r\n var namespace = slider.vars.namespace,\r\n msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,\r\n touch = (( \"ontouchstart\" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,\r\n // depricating this idea, as devices are being released with both of these events\r\n //eventType = (touch) ? \"touchend\" : \"click\",\r\n eventType = \"click touchend MSPointerUp keyup\",\r\n watchedEvent = \"\",\r\n watchedEventClearTimer,\r\n vertical = slider.vars.direction === \"vertical\",\r\n reverse = slider.vars.reverse,\r\n carousel = (slider.vars.itemWidth > 0),\r\n fade = slider.vars.animation === \"fade\",\r\n asNav = slider.vars.asNavFor !== \"\",\r\n methods = {},\r\n focused = true;\r\n\r\n // Store a reference to the slider object\r\n $.data(el, \"flexslider\", slider);\r\n\r\n // Private slider methods\r\n methods = {\r\n init: function() {\r\n slider.animating = false;\r\n // Get current slide and make sure it is a number\r\n slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );\r\n if ( isNaN( slider.currentSlide ) ) { slider.currentSlide = 0; }\r\n slider.animatingTo = slider.currentSlide;\r\n slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);\r\n slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));\r\n slider.slides = $(slider.vars.selector, slider);\r\n slider.container = $(slider.containerSelector, slider);\r\n slider.count = slider.slides.length;\r\n // SYNC:\r\n slider.syncExists = $(slider.vars.sync).length > 0;\r\n // SLIDE:\r\n if (slider.vars.animation === \"slide\") { slider.vars.animation = \"swing\"; }\r\n slider.prop = (vertical) ? \"top\" : \"marginLeft\";\r\n slider.args = {};\r\n // SLIDESHOW:\r\n slider.manualPause = false;\r\n slider.stopped = false;\r\n //PAUSE WHEN INVISIBLE\r\n slider.started = false;\r\n slider.startTimeout = null;\r\n // TOUCH/USECSS:\r\n slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() {\r\n var obj = document.createElement('div'),\r\n props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];\r\n for (var i in props) {\r\n if ( obj.style[ props[i] ] !== undefined ) {\r\n slider.pfx = props[i].replace('Perspective','').toLowerCase();\r\n slider.prop = \"-\" + slider.pfx + \"-transform\";\r\n return true;\r\n }\r\n }\r\n return false;\r\n }());\r\n slider.ensureAnimationEnd = '';\r\n // CONTROLSCONTAINER:\r\n if (slider.vars.controlsContainer !== \"\") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);\r\n // MANUAL:\r\n if (slider.vars.manualControls !== \"\") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);\r\n\r\n // CUSTOM DIRECTION NAV:\r\n if (slider.vars.customDirectionNav !== \"\") slider.customDirectionNav = $(slider.vars.customDirectionNav).length === 2 && $(slider.vars.customDirectionNav);\r\n\r\n // RANDOMIZE:\r\n if (slider.vars.randomize) {\r\n slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });\r\n slider.container.empty().append(slider.slides);\r\n }\r\n\r\n slider.doMath();\r\n\r\n // INIT\r\n slider.setup(\"init\");\r\n\r\n // CONTROLNAV:\r\n if (slider.vars.controlNav) { methods.controlNav.setup(); }\r\n\r\n // DIRECTIONNAV:\r\n if (slider.vars.directionNav) { methods.directionNav.setup(); }\r\n\r\n // KEYBOARD:\r\n if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {\r\n $(document).bind('keyup', function(event) {\r\n var keycode = event.keyCode;\r\n if (!slider.animating && (keycode === 39 || keycode === 37)) {\r\n var target = (keycode === 39) ? slider.getTarget('next') :\r\n (keycode === 37) ? slider.getTarget('prev') : false;\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n }\r\n });\r\n }\r\n // MOUSEWHEEL:\r\n if (slider.vars.mousewheel) {\r\n slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {\r\n event.preventDefault();\r\n var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n });\r\n }\r\n\r\n // PAUSEPLAY\r\n if (slider.vars.pausePlay) { methods.pausePlay.setup(); }\r\n\r\n //PAUSE WHEN INVISIBLE\r\n if (slider.vars.slideshow && slider.vars.pauseInvisible) { methods.pauseInvisible.init(); }\r\n\r\n // SLIDSESHOW\r\n if (slider.vars.slideshow) {\r\n if (slider.vars.pauseOnHover) {\r\n slider.hover(function() {\r\n if (!slider.manualPlay && !slider.manualPause) { slider.pause(); }\r\n }, function() {\r\n if (!slider.manualPause && !slider.manualPlay && !slider.stopped) { slider.play(); }\r\n });\r\n }\r\n // initialize animation\r\n //If we're visible, or we don't use PageVisibility API\r\n if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) {\r\n (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play();\r\n }\r\n }\r\n\r\n // ASNAV:\r\n if (asNav) { methods.asNav.setup(); }\r\n\r\n // TOUCH\r\n if (touch && slider.vars.touch) { methods.touch(); }\r\n\r\n // FADE&&SMOOTHHEIGHT || SLIDE:\r\n if (!fade || (fade && slider.vars.smoothHeight)) { $(window).bind(\"resize orientationchange focus\", methods.resize); }\r\n\r\n slider.find(\"img\").attr(\"draggable\", \"false\");\r\n\r\n // API: start() Callback\r\n setTimeout(function(){\r\n slider.vars.start(slider);\r\n }, 200);\r\n },\r\n asNav: {\r\n setup: function() {\r\n slider.asNav = true;\r\n slider.animatingTo = Math.floor(slider.currentSlide/slider.move);\r\n slider.currentItem = slider.currentSlide;\r\n slider.slides.removeClass(namespace + \"active-slide\").eq(slider.currentItem).addClass(namespace + \"active-slide\");\r\n if(!msGesture){\r\n slider.slides.on(eventType, function(e){\r\n e.preventDefault();\r\n var $slide = $(this),\r\n target = $slide.index();\r\n var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container\r\n if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {\r\n slider.flexAnimate(slider.getTarget(\"prev\"), true);\r\n } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + \"active-slide\")) {\r\n slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\r\n slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);\r\n }\r\n });\r\n }else{\r\n el._slider = slider;\r\n slider.slides.each(function (){\r\n var that = this;\r\n that._gesture = new MSGesture();\r\n that._gesture.target = that;\r\n that.addEventListener(\"MSPointerDown\", function (e){\r\n e.preventDefault();\r\n if(e.currentTarget._gesture) {\r\n e.currentTarget._gesture.addPointer(e.pointerId);\r\n }\r\n }, false);\r\n that.addEventListener(\"MSGestureTap\", function (e){\r\n e.preventDefault();\r\n var $slide = $(this),\r\n target = $slide.index();\r\n if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {\r\n slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\r\n slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n controlNav: {\r\n setup: function() {\r\n if (!slider.manualControls) {\r\n methods.controlNav.setupPaging();\r\n } else { // MANUALCONTROLS:\r\n methods.controlNav.setupManual();\r\n }\r\n },\r\n setupPaging: function() {\r\n var type = (slider.vars.controlNav === \"thumbnails\") ? 'control-thumbs' : 'control-paging',\r\n j = 1,\r\n item,\r\n slide;\r\n\r\n slider.controlNavScaffold = $('
    ');\r\n\r\n if (slider.pagingCount > 1) {\r\n for (var i = 0; i < slider.pagingCount; i++) {\r\n slide = slider.slides.eq(i);\r\n item = (slider.vars.controlNav === \"thumbnails\") ? '' : '' + j + '';\r\n if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {\r\n var captn = slide.attr( 'data-thumbcaption' );\r\n if ( '' !== captn && undefined !== captn ) { item += '' + captn + ''; }\r\n }\r\n slider.controlNavScaffold.append('
  1. ' + item + '
  2. ');\r\n j++;\r\n }\r\n }\r\n\r\n // CONTROLSCONTAINER:\r\n (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);\r\n methods.controlNav.set();\r\n\r\n methods.controlNav.active();\r\n\r\n slider.controlNavScaffold.delegate('a, img', eventType, function(event) {\r\n event.preventDefault();\r\n\r\n if (watchedEvent === \"\" || watchedEvent === event.type) {\r\n var $this = $(this),\r\n target = slider.controlNav.index($this);\r\n\r\n if (!$this.hasClass(namespace + 'active')) {\r\n slider.direction = (target > slider.currentSlide) ? \"next\" : \"prev\";\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n }\r\n }\r\n\r\n // setup flags to prevent event duplication\r\n if (watchedEvent === \"\") {\r\n watchedEvent = event.type;\r\n }\r\n methods.setToClearWatchedEvent();\r\n\r\n });\r\n },\r\n setupManual: function() {\r\n slider.controlNav = slider.manualControls;\r\n methods.controlNav.active();\r\n\r\n slider.controlNav.bind(eventType, function(event) {\r\n event.preventDefault();\r\n\r\n if (watchedEvent === \"\" || watchedEvent === event.type) {\r\n var $this = $(this),\r\n target = slider.controlNav.index($this);\r\n\r\n if (!$this.hasClass(namespace + 'active')) {\r\n (target > slider.currentSlide) ? slider.direction = \"next\" : slider.direction = \"prev\";\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n }\r\n }\r\n\r\n // setup flags to prevent event duplication\r\n if (watchedEvent === \"\") {\r\n watchedEvent = event.type;\r\n }\r\n methods.setToClearWatchedEvent();\r\n });\r\n },\r\n set: function() {\r\n var selector = (slider.vars.controlNav === \"thumbnails\") ? 'img' : 'a';\r\n slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);\r\n },\r\n active: function() {\r\n slider.controlNav.removeClass(namespace + \"active\").eq(slider.animatingTo).addClass(namespace + \"active\");\r\n },\r\n update: function(action, pos) {\r\n if (slider.pagingCount > 1 && action === \"add\") {\r\n slider.controlNavScaffold.append($('
  3. ' + slider.count + '
  4. '));\r\n } else if (slider.pagingCount === 1) {\r\n slider.controlNavScaffold.find('li').remove();\r\n } else {\r\n slider.controlNav.eq(pos).closest('li').remove();\r\n }\r\n methods.controlNav.set();\r\n (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();\r\n }\r\n },\r\n directionNav: {\r\n setup: function() {\r\n var directionNavScaffold = $('');\r\n\r\n // CUSTOM DIRECTION NAV:\r\n if (slider.customDirectionNav) {\r\n slider.directionNav = slider.customDirectionNav;\r\n // CONTROLSCONTAINER:\r\n } else if (slider.controlsContainer) {\r\n $(slider.controlsContainer).append(directionNavScaffold);\r\n slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);\r\n } else {\r\n slider.append(directionNavScaffold);\r\n slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);\r\n }\r\n\r\n methods.directionNav.update();\r\n\r\n slider.directionNav.bind(eventType, function(event) {\r\n event.preventDefault();\r\n var target;\r\n\r\n if (watchedEvent === \"\" || watchedEvent === event.type) {\r\n target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n }\r\n\r\n // setup flags to prevent event duplication\r\n if (watchedEvent === \"\") {\r\n watchedEvent = event.type;\r\n }\r\n methods.setToClearWatchedEvent();\r\n });\r\n },\r\n update: function() {\r\n var disabledClass = namespace + 'disabled';\r\n if (slider.pagingCount === 1) {\r\n slider.directionNav.addClass(disabledClass).attr('tabindex', '-1');\r\n } else if (!slider.vars.animationLoop) {\r\n if (slider.animatingTo === 0) {\r\n slider.directionNav.removeClass(disabledClass).filter('.' + namespace + \"prev\").addClass(disabledClass).attr('tabindex', '-1');\r\n } else if (slider.animatingTo === slider.last) {\r\n slider.directionNav.removeClass(disabledClass).filter('.' + namespace + \"next\").addClass(disabledClass).attr('tabindex', '-1');\r\n } else {\r\n slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');\r\n }\r\n } else {\r\n slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');\r\n }\r\n }\r\n },\r\n pausePlay: {\r\n setup: function() {\r\n var pausePlayScaffold = $('
    ');\r\n\r\n // CONTROLSCONTAINER:\r\n if (slider.controlsContainer) {\r\n slider.controlsContainer.append(pausePlayScaffold);\r\n slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);\r\n } else {\r\n slider.append(pausePlayScaffold);\r\n slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);\r\n }\r\n\r\n methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play');\r\n\r\n slider.pausePlay.bind(eventType, function(event) {\r\n event.preventDefault();\r\n\r\n if (watchedEvent === \"\" || watchedEvent === event.type) {\r\n if ($(this).hasClass(namespace + 'pause')) {\r\n slider.manualPause = true;\r\n slider.manualPlay = false;\r\n slider.pause();\r\n } else {\r\n slider.manualPause = false;\r\n slider.manualPlay = true;\r\n slider.play();\r\n }\r\n }\r\n\r\n // setup flags to prevent event duplication\r\n if (watchedEvent === \"\") {\r\n watchedEvent = event.type;\r\n }\r\n methods.setToClearWatchedEvent();\r\n });\r\n },\r\n update: function(state) {\r\n (state === \"play\") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').html(slider.vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').html(slider.vars.pauseText);\r\n }\r\n },\r\n touch: function() {\r\n var startX,\r\n startY,\r\n offset,\r\n cwidth,\r\n dx,\r\n startT,\r\n onTouchStart,\r\n onTouchMove,\r\n onTouchEnd,\r\n scrolling = false,\r\n localX = 0,\r\n localY = 0,\r\n accDx = 0;\r\n\r\n if(!msGesture){\r\n onTouchStart = function(e) {\r\n if (slider.animating) {\r\n e.preventDefault();\r\n } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {\r\n slider.pause();\r\n // CAROUSEL:\r\n cwidth = (vertical) ? slider.h : slider. w;\r\n startT = Number(new Date());\r\n // CAROUSEL:\r\n\r\n // Local vars for X and Y points.\r\n localX = e.touches[0].pageX;\r\n localY = e.touches[0].pageY;\r\n\r\n offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :\r\n (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :\r\n (carousel && slider.currentSlide === slider.last) ? slider.limit :\r\n (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :\r\n (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;\r\n startX = (vertical) ? localY : localX;\r\n startY = (vertical) ? localX : localY;\r\n\r\n el.addEventListener('touchmove', onTouchMove, false);\r\n el.addEventListener('touchend', onTouchEnd, false);\r\n }\r\n };\r\n\r\n onTouchMove = function(e) {\r\n // Local vars for X and Y points.\r\n\r\n localX = e.touches[0].pageX;\r\n localY = e.touches[0].pageY;\r\n\r\n dx = (vertical) ? startX - localY : startX - localX;\r\n scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));\r\n\r\n var fxms = 500;\r\n\r\n if ( ! scrolling || Number( new Date() ) - startT > fxms ) {\r\n e.preventDefault();\r\n if (!fade && slider.transitions) {\r\n if (!slider.vars.animationLoop) {\r\n dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);\r\n }\r\n slider.setProps(offset + dx, \"setTouch\");\r\n }\r\n }\r\n };\r\n\r\n onTouchEnd = function(e) {\r\n // finish the touch by undoing the touch session\r\n el.removeEventListener('touchmove', onTouchMove, false);\r\n\r\n if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {\r\n var updateDx = (reverse) ? -dx : dx,\r\n target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');\r\n\r\n if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n } else {\r\n if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }\r\n }\r\n }\r\n el.removeEventListener('touchend', onTouchEnd, false);\r\n\r\n startX = null;\r\n startY = null;\r\n dx = null;\r\n offset = null;\r\n };\r\n\r\n el.addEventListener('touchstart', onTouchStart, false);\r\n }else{\r\n el.style.msTouchAction = \"none\";\r\n el._gesture = new MSGesture();\r\n el._gesture.target = el;\r\n el.addEventListener(\"MSPointerDown\", onMSPointerDown, false);\r\n el._slider = slider;\r\n el.addEventListener(\"MSGestureChange\", onMSGestureChange, false);\r\n el.addEventListener(\"MSGestureEnd\", onMSGestureEnd, false);\r\n\r\n function onMSPointerDown(e){\r\n e.stopPropagation();\r\n if (slider.animating) {\r\n e.preventDefault();\r\n }else{\r\n slider.pause();\r\n el._gesture.addPointer(e.pointerId);\r\n accDx = 0;\r\n cwidth = (vertical) ? slider.h : slider. w;\r\n startT = Number(new Date());\r\n // CAROUSEL:\r\n\r\n offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :\r\n (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :\r\n (carousel && slider.currentSlide === slider.last) ? slider.limit :\r\n (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :\r\n (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;\r\n }\r\n }\r\n\r\n function onMSGestureChange(e) {\r\n e.stopPropagation();\r\n var slider = e.target._slider;\r\n if(!slider){\r\n return;\r\n }\r\n var transX = -e.translationX,\r\n transY = -e.translationY;\r\n\r\n //Accumulate translations.\r\n accDx = accDx + ((vertical) ? transY : transX);\r\n dx = accDx;\r\n scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));\r\n\r\n if(e.detail === e.MSGESTURE_FLAG_INERTIA){\r\n setImmediate(function (){\r\n el._gesture.stop();\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (!scrolling || Number(new Date()) - startT > 500) {\r\n e.preventDefault();\r\n if (!fade && slider.transitions) {\r\n if (!slider.vars.animationLoop) {\r\n dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1);\r\n }\r\n slider.setProps(offset + dx, \"setTouch\");\r\n }\r\n }\r\n }\r\n\r\n function onMSGestureEnd(e) {\r\n e.stopPropagation();\r\n var slider = e.target._slider;\r\n if(!slider){\r\n return;\r\n }\r\n if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {\r\n var updateDx = (reverse) ? -dx : dx,\r\n target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');\r\n\r\n if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {\r\n slider.flexAnimate(target, slider.vars.pauseOnAction);\r\n } else {\r\n if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }\r\n }\r\n }\r\n\r\n startX = null;\r\n startY = null;\r\n dx = null;\r\n offset = null;\r\n accDx = 0;\r\n }\r\n }\r\n },\r\n resize: function() {\r\n if (!slider.animating && slider.is(':visible')) {\r\n if (!carousel) { slider.doMath(); }\r\n\r\n if (fade) {\r\n // SMOOTH HEIGHT:\r\n methods.smoothHeight();\r\n } else if (carousel) { //CAROUSEL:\r\n slider.slides.width(slider.computedW);\r\n slider.update(slider.pagingCount);\r\n slider.setProps();\r\n }\r\n else if (vertical) { //VERTICAL:\r\n slider.viewport.height(slider.h);\r\n slider.setProps(slider.h, \"setTotal\");\r\n } else {\r\n // SMOOTH HEIGHT:\r\n if (slider.vars.smoothHeight) { methods.smoothHeight(); }\r\n slider.newSlides.width(slider.computedW);\r\n slider.setProps(slider.computedW, \"setTotal\");\r\n }\r\n }\r\n },\r\n smoothHeight: function(dur) {\r\n if (!vertical || fade) {\r\n var $obj = (fade) ? slider : slider.viewport;\r\n (dur) ? $obj.animate({\"height\": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());\r\n }\r\n },\r\n sync: function(action) {\r\n var $obj = $(slider.vars.sync).data(\"flexslider\"),\r\n target = slider.animatingTo;\r\n\r\n switch (action) {\r\n case \"animate\": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break;\r\n case \"play\": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;\r\n case \"pause\": $obj.pause(); break;\r\n }\r\n },\r\n uniqueID: function($clone) {\r\n // Append _clone to current level and children elements with id attributes\r\n $clone.filter( '[id]' ).add($clone.find( '[id]' )).each(function() {\r\n var $this = $(this);\r\n $this.attr( 'id', $this.attr( 'id' ) + '_clone' );\r\n });\r\n return $clone;\r\n },\r\n pauseInvisible: {\r\n visProp: null,\r\n init: function() {\r\n var visProp = methods.pauseInvisible.getHiddenProp();\r\n if (visProp) {\r\n var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';\r\n document.addEventListener(evtname, function() {\r\n if (methods.pauseInvisible.isHidden()) {\r\n if(slider.startTimeout) {\r\n clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible\r\n } else { \r\n slider.pause(); //Or just pause\r\n }\r\n }\r\n else {\r\n if(slider.started) {\r\n slider.play(); //Initiated before, just play\r\n } else { \r\n if (slider.vars.initDelay > 0) { \r\n setTimeout(slider.play, slider.vars.initDelay);\r\n } else {\r\n slider.play(); //Didn't init before: simply init or wait for it\r\n } \r\n }\r\n }\r\n });\r\n }\r\n },\r\n isHidden: function() {\r\n var prop = methods.pauseInvisible.getHiddenProp();\r\n if (!prop) {\r\n return false;\r\n }\r\n return document[prop];\r\n },\r\n getHiddenProp: function() {\r\n var prefixes = ['webkit','moz','ms','o'];\r\n // if 'hidden' is natively supported just return it\r\n if ('hidden' in document) {\r\n return 'hidden';\r\n }\r\n // otherwise loop over all the known prefixes until we find one\r\n for ( var i = 0; i < prefixes.length; i++ ) {\r\n if ((prefixes[i] + 'Hidden') in document) {\r\n return prefixes[i] + 'Hidden';\r\n }\r\n }\r\n // otherwise it's not supported\r\n return null;\r\n }\r\n },\r\n setToClearWatchedEvent: function() {\r\n clearTimeout(watchedEventClearTimer);\r\n watchedEventClearTimer = setTimeout(function() {\r\n watchedEvent = \"\";\r\n }, 3000);\r\n }\r\n };\r\n\r\n // public methods\r\n slider.flexAnimate = function(target, pause, override, withSync, fromNav) {\r\n if (!slider.vars.animationLoop && target !== slider.currentSlide) {\r\n slider.direction = (target > slider.currentSlide) ? \"next\" : \"prev\";\r\n }\r\n\r\n if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\r\n\r\n if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(\":visible\")) {\r\n if (asNav && withSync) {\r\n var master = $(slider.vars.asNavFor).data('flexslider');\r\n slider.atEnd = target === 0 || target === slider.count - 1;\r\n master.flexAnimate(target, true, false, true, fromNav);\r\n slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\r\n master.direction = slider.direction;\r\n\r\n if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {\r\n slider.currentItem = target;\r\n slider.slides.removeClass(namespace + \"active-slide\").eq(target).addClass(namespace + \"active-slide\");\r\n target = Math.floor(target/slider.visible);\r\n } else {\r\n slider.currentItem = target;\r\n slider.slides.removeClass(namespace + \"active-slide\").eq(target).addClass(namespace + \"active-slide\");\r\n return false;\r\n }\r\n }\r\n\r\n slider.animating = true;\r\n slider.animatingTo = target;\r\n\r\n // SLIDESHOW:\r\n if (pause) { slider.pause(); }\r\n\r\n // API: before() animation Callback\r\n slider.vars.before(slider);\r\n\r\n // SYNC:\r\n if (slider.syncExists && !fromNav) { methods.sync(\"animate\"); }\r\n\r\n // CONTROLNAV\r\n if (slider.vars.controlNav) { methods.controlNav.active(); }\r\n\r\n // !CAROUSEL:\r\n // CANDIDATE: slide active class (for add/remove slide)\r\n if (!carousel) { slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); }\r\n\r\n // INFINITE LOOP:\r\n // CANDIDATE: atEnd\r\n slider.atEnd = target === 0 || target === slider.last;\r\n\r\n // DIRECTIONNAV:\r\n if (slider.vars.directionNav) { methods.directionNav.update(); }\r\n\r\n if (target === slider.last) {\r\n // API: end() of cycle Callback\r\n slider.vars.end(slider);\r\n // SLIDESHOW && !INFINITE LOOP:\r\n if (!slider.vars.animationLoop) { slider.pause(); }\r\n }\r\n\r\n // SLIDE:\r\n if (!fade) {\r\n var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,\r\n margin, slideString, calcNext;\r\n\r\n // INFINITE LOOP / REVERSE:\r\n if (carousel) {\r\n //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin;\r\n margin = slider.vars.itemMargin;\r\n calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;\r\n slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;\r\n } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== \"next\") {\r\n slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;\r\n } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== \"prev\") {\r\n slideString = (reverse) ? 0 : (slider.count + 1) * dimension;\r\n } else {\r\n slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;\r\n }\r\n slider.setProps(slideString, \"\", slider.vars.animationSpeed);\r\n if (slider.transitions) {\r\n if (!slider.vars.animationLoop || !slider.atEnd) {\r\n slider.animating = false;\r\n slider.currentSlide = slider.animatingTo;\r\n }\r\n \r\n // Unbind previous transitionEnd events and re-bind new transitionEnd event\r\n slider.container.unbind(\"webkitTransitionEnd transitionend\");\r\n slider.container.bind(\"webkitTransitionEnd transitionend\", function() {\r\n clearTimeout(slider.ensureAnimationEnd);\r\n slider.wrapup(dimension);\r\n });\r\n\r\n // Insurance for the ever-so-fickle transitionEnd event\r\n clearTimeout(slider.ensureAnimationEnd);\r\n slider.ensureAnimationEnd = setTimeout(function() {\r\n slider.wrapup(dimension);\r\n }, slider.vars.animationSpeed + 100);\r\n\r\n } else {\r\n slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){\r\n slider.wrapup(dimension);\r\n });\r\n }\r\n } else { // FADE:\r\n if (!touch) {\r\n //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);\r\n //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);\r\n\r\n slider.slides.eq(slider.currentSlide).css({\"zIndex\": 1}).animate({\"opacity\": 0}, slider.vars.animationSpeed, slider.vars.easing);\r\n slider.slides.eq(target).css({\"zIndex\": 2}).animate({\"opacity\": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);\r\n\r\n } else {\r\n slider.slides.eq(slider.currentSlide).css({ \"opacity\": 0, \"zIndex\": 1 });\r\n slider.slides.eq(target).css({ \"opacity\": 1, \"zIndex\": 2 });\r\n slider.wrapup(dimension);\r\n }\r\n }\r\n // SMOOTH HEIGHT:\r\n if (slider.vars.smoothHeight) { methods.smoothHeight(slider.vars.animationSpeed); }\r\n }\r\n };\r\n slider.wrapup = function(dimension) {\r\n // SLIDE:\r\n if (!fade && !carousel) {\r\n if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) {\r\n slider.setProps(dimension, \"jumpEnd\");\r\n } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) {\r\n slider.setProps(dimension, \"jumpStart\");\r\n }\r\n }\r\n slider.animating = false;\r\n slider.currentSlide = slider.animatingTo;\r\n // API: after() animation Callback\r\n slider.vars.after(slider);\r\n };\r\n\r\n // SLIDESHOW:\r\n slider.animateSlides = function() {\r\n if (!slider.animating && focused ) { slider.flexAnimate(slider.getTarget(\"next\")); }\r\n };\r\n // SLIDESHOW:\r\n slider.pause = function() {\r\n clearInterval(slider.animatedSlides);\r\n slider.animatedSlides = null;\r\n slider.playing = false;\r\n // PAUSEPLAY:\r\n if (slider.vars.pausePlay) { methods.pausePlay.update(\"play\"); }\r\n // SYNC:\r\n if (slider.syncExists) { methods.sync(\"pause\"); }\r\n };\r\n // SLIDESHOW:\r\n slider.play = function() {\r\n if (slider.playing) { clearInterval(slider.animatedSlides); }\r\n slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);\r\n slider.started = slider.playing = true;\r\n // PAUSEPLAY:\r\n if (slider.vars.pausePlay) { methods.pausePlay.update(\"pause\"); }\r\n // SYNC:\r\n if (slider.syncExists) { methods.sync(\"play\"); }\r\n };\r\n // STOP:\r\n slider.stop = function () {\r\n slider.pause();\r\n slider.stopped = true;\r\n };\r\n slider.canAdvance = function(target, fromNav) {\r\n // ASNAV:\r\n var last = (asNav) ? slider.pagingCount - 1 : slider.last;\r\n return (fromNav) ? true :\r\n (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === \"prev\") ? true :\r\n (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== \"next\") ? false :\r\n (target === slider.currentSlide && !asNav) ? false :\r\n (slider.vars.animationLoop) ? true :\r\n (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== \"next\") ? false :\r\n (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === \"next\") ? false :\r\n true;\r\n };\r\n slider.getTarget = function(dir) {\r\n slider.direction = dir;\r\n if (dir === \"next\") {\r\n return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;\r\n } else {\r\n return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;\r\n }\r\n };\r\n\r\n // SLIDE:\r\n slider.setProps = function(pos, special, dur) {\r\n var target = (function() {\r\n var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo,\r\n posCalc = (function() {\r\n if (carousel) {\r\n return (special === \"setTouch\") ? pos :\r\n (reverse && slider.animatingTo === slider.last) ? 0 :\r\n (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :\r\n (slider.animatingTo === slider.last) ? slider.limit : posCheck;\r\n } else {\r\n switch (special) {\r\n case \"setTotal\": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;\r\n case \"setTouch\": return (reverse) ? pos : pos;\r\n case \"jumpEnd\": return (reverse) ? pos : slider.count * pos;\r\n case \"jumpStart\": return (reverse) ? slider.count * pos : pos;\r\n default: return pos;\r\n }\r\n }\r\n }());\r\n\r\n return (posCalc * -1) + \"px\";\r\n }());\r\n\r\n if (slider.transitions) {\r\n target = (vertical) ? \"translate3d(0,\" + target + \",0)\" : \"translate3d(\" + target + \",0,0)\";\r\n dur = (dur !== undefined) ? (dur/1000) + \"s\" : \"0s\";\r\n slider.container.css(\"-\" + slider.pfx + \"-transition-duration\", dur);\r\n slider.container.css(\"transition-duration\", dur);\r\n }\r\n\r\n slider.args[slider.prop] = target;\r\n if (slider.transitions || dur === undefined) { slider.container.css(slider.args); }\r\n\r\n slider.container.css('transform',target);\r\n };\r\n\r\n slider.setup = function(type) {\r\n // SLIDE:\r\n if (!fade) {\r\n var sliderOffset, arr;\r\n\r\n if (type === \"init\") {\r\n slider.viewport = $('
    ').css({\"overflow\": \"hidden\", \"position\": \"relative\"}).appendTo(slider).append(slider.container);\r\n // INFINITE LOOP:\r\n slider.cloneCount = 0;\r\n slider.cloneOffset = 0;\r\n // REVERSE:\r\n if (reverse) {\r\n arr = $.makeArray(slider.slides).reverse();\r\n slider.slides = $(arr);\r\n slider.container.empty().append(slider.slides);\r\n }\r\n }\r\n // INFINITE LOOP && !CAROUSEL:\r\n if (slider.vars.animationLoop && !carousel) {\r\n slider.cloneCount = 2;\r\n slider.cloneOffset = 1;\r\n // clear out old clones\r\n if (type !== \"init\") { slider.container.find('.clone').remove(); }\r\n slider.container.append(methods.uniqueID(slider.slides.first().clone().addClass('clone')).attr('aria-hidden', 'true'))\r\n .prepend(methods.uniqueID(slider.slides.last().clone().addClass('clone')).attr('aria-hidden', 'true'));\r\n }\r\n slider.newSlides = $(slider.vars.selector, slider);\r\n\r\n sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;\r\n // VERTICAL:\r\n if (vertical && !carousel) {\r\n slider.container.height((slider.count + slider.cloneCount) * 200 + \"%\").css(\"position\", \"absolute\").width(\"100%\");\r\n setTimeout(function(){\r\n slider.newSlides.css({\"display\": \"block\"});\r\n slider.doMath();\r\n slider.viewport.height(slider.h);\r\n slider.setProps(sliderOffset * slider.h, \"init\");\r\n }, (type === \"init\") ? 100 : 0);\r\n } else {\r\n slider.container.width((slider.count + slider.cloneCount) * 200 + \"%\");\r\n slider.setProps(sliderOffset * slider.computedW, \"init\");\r\n setTimeout(function(){\r\n slider.doMath();\r\n slider.newSlides.css({\"width\": slider.computedW, \"float\": \"left\", \"display\": \"block\"});\r\n // SMOOTH HEIGHT:\r\n if (slider.vars.smoothHeight) { methods.smoothHeight(); }\r\n }, (type === \"init\") ? 100 : 0);\r\n }\r\n } else { // FADE:\r\n slider.slides.css({\"width\": \"100%\", \"float\": \"left\", \"marginRight\": \"-100%\", \"position\": \"relative\"});\r\n if (type === \"init\") {\r\n if (!touch) {\r\n //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);\r\n if (slider.vars.fadeFirstSlide == false) {\r\n slider.slides.css({ \"opacity\": 0, \"display\": \"block\", \"zIndex\": 1 }).eq(slider.currentSlide).css({\"zIndex\": 2}).css({\"opacity\": 1});\r\n } else {\r\n slider.slides.css({ \"opacity\": 0, \"display\": \"block\", \"zIndex\": 1 }).eq(slider.currentSlide).css({\"zIndex\": 2}).animate({\"opacity\": 1},slider.vars.animationSpeed,slider.vars.easing);\r\n }\r\n } else {\r\n slider.slides.css({ \"opacity\": 0, \"display\": \"block\", \"webkitTransition\": \"opacity \" + slider.vars.animationSpeed / 1000 + \"s ease\", \"zIndex\": 1 }).eq(slider.currentSlide).css({ \"opacity\": 1, \"zIndex\": 2});\r\n }\r\n }\r\n // SMOOTH HEIGHT:\r\n if (slider.vars.smoothHeight) { methods.smoothHeight(); }\r\n }\r\n // !CAROUSEL:\r\n // CANDIDATE: active slide\r\n if (!carousel) { slider.slides.removeClass(namespace + \"active-slide\").eq(slider.currentSlide).addClass(namespace + \"active-slide\"); }\r\n\r\n //FlexSlider: init() Callback\r\n slider.vars.init(slider);\r\n };\r\n\r\n slider.doMath = function() {\r\n var slide = slider.slides.first(),\r\n slideMargin = slider.vars.itemMargin,\r\n minItems = slider.vars.minItems,\r\n maxItems = slider.vars.maxItems;\r\n\r\n slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width();\r\n slider.h = slide.height();\r\n slider.boxPadding = slide.outerWidth() - slide.width();\r\n\r\n // CAROUSEL:\r\n if (carousel) {\r\n slider.itemT = slider.vars.itemWidth + slideMargin;\r\n slider.minW = (minItems) ? minItems * slider.itemT : slider.w;\r\n slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;\r\n slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :\r\n (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems :\r\n (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth;\r\n\r\n slider.visible = Math.floor(slider.w/(slider.itemW));\r\n slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;\r\n slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);\r\n slider.last = slider.pagingCount - 1;\r\n slider.limit = (slider.pagingCount === 1) ? 0 :\r\n (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;\r\n } else {\r\n slider.itemW = slider.w;\r\n slider.pagingCount = slider.count;\r\n slider.last = slider.count - 1;\r\n }\r\n slider.computedW = slider.itemW - slider.boxPadding;\r\n };\r\n\r\n slider.update = function(pos, action) {\r\n slider.doMath();\r\n\r\n // update currentSlide and slider.animatingTo if necessary\r\n if (!carousel) {\r\n if (pos < slider.currentSlide) {\r\n slider.currentSlide += 1;\r\n } else if (pos <= slider.currentSlide && pos !== 0) {\r\n slider.currentSlide -= 1;\r\n }\r\n slider.animatingTo = slider.currentSlide;\r\n }\r\n\r\n // update controlNav\r\n if (slider.vars.controlNav && !slider.manualControls) {\r\n if ((action === \"add\" && !carousel) || slider.pagingCount > slider.controlNav.length) {\r\n methods.controlNav.update(\"add\");\r\n } else if ((action === \"remove\" && !carousel) || slider.pagingCount < slider.controlNav.length) {\r\n if (carousel && slider.currentSlide > slider.last) {\r\n slider.currentSlide -= 1;\r\n slider.animatingTo -= 1;\r\n }\r\n methods.controlNav.update(\"remove\", slider.last);\r\n }\r\n }\r\n // update directionNav\r\n if (slider.vars.directionNav) { methods.directionNav.update(); }\r\n\r\n };\r\n\r\n slider.addSlide = function(obj, pos) {\r\n var $obj = $(obj);\r\n\r\n slider.count += 1;\r\n slider.last = slider.count - 1;\r\n\r\n // append new slide\r\n if (vertical && reverse) {\r\n (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);\r\n } else {\r\n (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);\r\n }\r\n\r\n // update currentSlide, animatingTo, controlNav, and directionNav\r\n slider.update(pos, \"add\");\r\n\r\n // update slider.slides\r\n slider.slides = $(slider.vars.selector + ':not(.clone)', slider);\r\n // re-setup the slider to accomdate new slide\r\n slider.setup();\r\n\r\n //FlexSlider: added() Callback\r\n slider.vars.added(slider);\r\n };\r\n slider.removeSlide = function(obj) {\r\n var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;\r\n\r\n // update count\r\n slider.count -= 1;\r\n slider.last = slider.count - 1;\r\n\r\n // remove slide\r\n if (isNaN(obj)) {\r\n $(obj, slider.slides).remove();\r\n } else {\r\n (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();\r\n }\r\n\r\n // update currentSlide, animatingTo, controlNav, and directionNav\r\n slider.doMath();\r\n slider.update(pos, \"remove\");\r\n\r\n // update slider.slides\r\n slider.slides = $(slider.vars.selector + ':not(.clone)', slider);\r\n // re-setup the slider to accomdate new slide\r\n slider.setup();\r\n\r\n // FlexSlider: removed() Callback\r\n slider.vars.removed(slider);\r\n };\r\n\r\n //FlexSlider: Initialize\r\n methods.init();\r\n };\r\n\r\n // Ensure the slider isn't focussed if the window loses focus.\r\n $( window ).blur( function ( e ) {\r\n focused = false;\r\n }).focus( function ( e ) {\r\n focused = true;\r\n });\r\n\r\n //FlexSlider: Default Settings\r\n $.flexslider.defaults = {\r\n namespace: \"flex-\", //{NEW} String: Prefix string attached to the class of every element generated by the plugin\r\n selector: \".slides > li\", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril\r\n animation: \"fade\", //String: Select your animation type, \"fade\" or \"slide\"\r\n easing: \"swing\", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!\r\n direction: \"horizontal\", //String: Select the sliding direction, \"horizontal\" or \"vertical\"\r\n reverse: false, //{NEW} Boolean: Reverse the animation direction\r\n animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received \"disable\" classes at either end\r\n smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode\r\n startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide)\r\n slideshow: true, //Boolean: Animate slider automatically\r\n slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds\r\n animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds\r\n initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds\r\n randomize: false, //Boolean: Randomize slide order\r\n fadeFirstSlide: true, //Boolean: Fade in the first slide when animation type is \"fade\"\r\n thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the \"thumbnails\" controlNav.\r\n\r\n // Usability features\r\n pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.\r\n pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering\r\n pauseInvisible: true, \t\t//{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.\r\n useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available\r\n touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices\r\n video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches\r\n\r\n // Primary Controls\r\n controlNav: true, //Boolean: Create navigation for paging control of each slide? Note: Leave true for manualControls usage\r\n directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)\r\n prevText: \"Previous\", //String: Set the text for the \"previous\" directionNav item\r\n nextText: \"Next\", //String: Set the text for the \"next\" directionNav item\r\n\r\n // Secondary Navigation\r\n keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys\r\n multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.\r\n mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel\r\n pausePlay: false, //Boolean: Create pause/play dynamic element\r\n pauseText: \"Pause\", //String: Set the text for the \"pause\" pausePlay item\r\n playText: \"Play\", //String: Set the text for the \"play\" pausePlay item\r\n\r\n // Special properties\r\n controlsContainer: \"\", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(\".flexslider-container\"). Property is ignored if given element is not found.\r\n manualControls: \"\", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(\".flex-control-nav li\") or \"#tabs-nav li img\", etc. The number of elements in your controlNav should match the number of slides/tabs.\r\n customDirectionNav: \"\", //{NEW} jQuery Object/Selector: Custom prev / next button. Must be two jQuery elements. In order to make the events work they have to have the classes \"prev\" and \"next\" (plus namespace)\r\n sync: \"\", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.\r\n asNavFor: \"\", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider\r\n\r\n // Carousel Options\r\n itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.\r\n itemMargin: 0, //{NEW} Integer: Margin between carousel items.\r\n minItems: 1, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.\r\n maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.\r\n move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.\r\n allowOneSlide: true, //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide\r\n\r\n // Callback API\r\n start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide\r\n before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation\r\n after: function(){}, //Callback: function(slider) - Fires after each slider animation completes\r\n end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)\r\n added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added\r\n removed: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is removed\r\n init: function() {} //{NEW} Callback: function(slider) - Fires after the slider is initially setup\r\n };\r\n\r\n //FlexSlider: Plugin Function\r\n $.fn.flexslider = function(options) {\r\n if (options === undefined) { options = {}; }\r\n\r\n if (typeof options === \"object\") {\r\n return this.each(function() {\r\n var $this = $(this),\r\n selector = (options.selector) ? options.selector : \".slides > li\",\r\n $slides = $this.find(selector);\r\n\r\n if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) {\r\n $slides.fadeIn(400);\r\n if (options.start) { options.start($this); }\r\n } else if ($this.data('flexslider') === undefined) {\r\n new $.flexslider(this, options);\r\n }\r\n });\r\n } else {\r\n // Helper strings to quickly perform functions on the slider\r\n var $slider = $(this).data('flexslider');\r\n switch (options) {\r\n case \"play\": $slider.play(); break;\r\n case \"pause\": $slider.pause(); break;\r\n case \"stop\": $slider.stop(); break;\r\n case \"next\": $slider.flexAnimate($slider.getTarget(\"next\"), true); break;\r\n case \"prev\":\r\n case \"previous\": $slider.flexAnimate($slider.getTarget(\"prev\"), true); break;\r\n default: if (typeof options === \"number\") { $slider.flexAnimate(options, true); }\r\n }\r\n }\r\n };\r\n})(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: collapse.js v3.2.0\r\n * http://getbootstrap.com/javascript/#collapse\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // COLLAPSE PUBLIC CLASS DEFINITION\r\n // ================================\r\n\r\n var Collapse = function (element, options) {\r\n this.$element = $(element)\r\n this.options = $.extend({}, Collapse.DEFAULTS, options)\r\n this.transitioning = null\r\n\r\n if (this.options.parent) this.$parent = $(this.options.parent)\r\n if (this.options.toggle) this.toggle()\r\n }\r\n\r\n Collapse.VERSION = '3.2.0'\r\n\r\n Collapse.DEFAULTS = {\r\n toggle: true\r\n }\r\n\r\n Collapse.prototype.dimension = function () {\r\n var hasWidth = this.$element.hasClass('width')\r\n return hasWidth ? 'width' : 'height'\r\n }\r\n\r\n Collapse.prototype.show = function () {\r\n if (this.transitioning || this.$element.hasClass('in')) return\r\n\r\n var startEvent = $.Event('show.bs.collapse')\r\n this.$element.trigger(startEvent)\r\n if (startEvent.isDefaultPrevented()) return\r\n\r\n var actives = this.$parent && this.$parent.find('> .panel > .in')\r\n\r\n if (actives && actives.length) {\r\n var hasData = actives.data('bs.collapse')\r\n if (hasData && hasData.transitioning) return\r\n Plugin.call(actives, 'hide')\r\n hasData || actives.data('bs.collapse', null)\r\n }\r\n\r\n var dimension = this.dimension()\r\n\r\n this.$element\r\n .removeClass('collapse')\r\n .addClass('collapsing')[dimension](0)\r\n\r\n this.transitioning = 1\r\n\r\n var complete = function () {\r\n this.$element\r\n .removeClass('collapsing')\r\n .addClass('collapse in')[dimension]('')\r\n this.transitioning = 0\r\n this.$element\r\n .trigger('shown.bs.collapse')\r\n }\r\n\r\n if (!$.support.transition) return complete.call(this)\r\n\r\n var scrollSize = $.camelCase(['scroll', dimension].join('-'))\r\n\r\n this.$element\r\n .one('bsTransitionEnd', $.proxy(complete, this))\r\n .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])\r\n }\r\n\r\n Collapse.prototype.hide = function () {\r\n if (this.transitioning || !this.$element.hasClass('in')) return\r\n\r\n var startEvent = $.Event('hide.bs.collapse')\r\n this.$element.trigger(startEvent)\r\n if (startEvent.isDefaultPrevented()) return\r\n\r\n var dimension = this.dimension()\r\n\r\n this.$element[dimension](this.$element[dimension]())[0].offsetHeight\r\n\r\n this.$element\r\n .addClass('collapsing')\r\n .removeClass('collapse')\r\n .removeClass('in')\r\n\r\n this.transitioning = 1\r\n\r\n var complete = function () {\r\n this.transitioning = 0\r\n this.$element\r\n .trigger('hidden.bs.collapse')\r\n .removeClass('collapsing')\r\n .addClass('collapse')\r\n }\r\n\r\n if (!$.support.transition) return complete.call(this)\r\n\r\n this.$element\r\n [dimension](0)\r\n .one('bsTransitionEnd', $.proxy(complete, this))\r\n .emulateTransitionEnd(350)\r\n }\r\n\r\n Collapse.prototype.toggle = function () {\r\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\r\n }\r\n\r\n\r\n // COLLAPSE 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.collapse')\r\n var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\r\n\r\n if (!data && options.toggle && option == 'show') option = !option\r\n if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\r\n if (typeof option == 'string') data[option]()\r\n })\r\n }\r\n\r\n var old = $.fn.collapse\r\n\r\n $.fn.collapse = Plugin\r\n $.fn.collapse.Constructor = Collapse\r\n\r\n\r\n // COLLAPSE NO CONFLICT\r\n // ====================\r\n\r\n $.fn.collapse.noConflict = function () {\r\n $.fn.collapse = old\r\n return this\r\n }\r\n\r\n\r\n // COLLAPSE DATA-API\r\n // =================\r\n\r\n $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\r\n var href\r\n var $this = $(this)\r\n var target = $this.attr('data-target')\r\n || e.preventDefault()\r\n || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\r\n var $target = $(target)\r\n var data = $target.data('bs.collapse')\r\n var option = data ? 'toggle' : $this.data()\r\n var parent = $this.attr('data-parent')\r\n var $parent = parent && $(parent)\r\n\r\n if (!data || !data.transitioning) {\r\n if ($parent) $parent.find('[data-toggle=\"collapse\"][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\r\n $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\r\n }\r\n\r\n Plugin.call($target, option)\r\n })\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: transition.js v3.2.0\r\n * http://getbootstrap.com/javascript/#transitions\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\r\n // ============================================================\r\n\r\n function transitionEnd() {\r\n var el = document.createElement('bootstrap')\r\n\r\n var transEndEventNames = {\r\n WebkitTransition : 'webkitTransitionEnd',\r\n MozTransition : 'transitionend',\r\n OTransition : 'oTransitionEnd otransitionend',\r\n transition : 'transitionend'\r\n }\r\n\r\n for (var name in transEndEventNames) {\r\n if (el.style[name] !== undefined) {\r\n return { end: transEndEventNames[name] }\r\n }\r\n }\r\n\r\n return false // explicit for ie8 ( ._.)\r\n }\r\n\r\n // http://blog.alexmaccaw.com/css-transitions\r\n $.fn.emulateTransitionEnd = function (duration) {\r\n var called = false\r\n var $el = this\r\n $(this).one('bsTransitionEnd', function () { called = true })\r\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\r\n setTimeout(callback, duration)\r\n return this\r\n }\r\n\r\n $(function () {\r\n $.support.transition = transitionEnd()\r\n\r\n if (!$.support.transition) return\r\n\r\n $.event.special.bsTransitionEnd = {\r\n bindType: $.support.transition.end,\r\n delegateType: $.support.transition.end,\r\n handle: function (e) {\r\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\r\n }\r\n }\r\n })\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: affix.js v3.2.0\r\n * http://getbootstrap.com/javascript/#affix\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // AFFIX CLASS DEFINITION\r\n // ======================\r\n\r\n var Affix = function (element, options) {\r\n this.options = $.extend({}, Affix.DEFAULTS, options)\r\n\r\n this.$target = $(this.options.target)\r\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\r\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\r\n\r\n this.$element = $(element)\r\n this.affixed =\r\n this.unpin =\r\n this.pinnedOffset = null\r\n\r\n this.checkPosition()\r\n }\r\n\r\n Affix.VERSION = '3.2.0'\r\n\r\n Affix.RESET = 'affix affix-top affix-bottom'\r\n\r\n Affix.DEFAULTS = {\r\n offset: 0,\r\n target: window\r\n }\r\n\r\n Affix.prototype.getPinnedOffset = function () {\r\n if (this.pinnedOffset) return this.pinnedOffset\r\n this.$element.removeClass(Affix.RESET).addClass('affix')\r\n var scrollTop = this.$target.scrollTop()\r\n var position = this.$element.offset()\r\n return (this.pinnedOffset = position.top - scrollTop)\r\n }\r\n\r\n Affix.prototype.checkPositionWithEventLoop = function () {\r\n setTimeout($.proxy(this.checkPosition, this), 1)\r\n }\r\n\r\n Affix.prototype.checkPosition = function () {\r\n if (!this.$element.is(':visible')) return\r\n\r\n var scrollHeight = $(document).height()\r\n var scrollTop = this.$target.scrollTop()\r\n var position = this.$element.offset()\r\n var offset = this.options.offset\r\n var offsetTop = offset.top\r\n var offsetBottom = offset.bottom\r\n\r\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\r\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\r\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\r\n\r\n var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :\r\n offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\r\n offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false\r\n\r\n if (this.affixed === affix) return\r\n if (this.unpin != null) this.$element.css('top', '')\r\n\r\n var affixType = 'affix' + (affix ? '-' + affix : '')\r\n var e = $.Event(affixType + '.bs.affix')\r\n\r\n this.$element.trigger(e)\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n this.affixed = affix\r\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\r\n\r\n this.$element\r\n .removeClass(Affix.RESET)\r\n .addClass(affixType)\r\n .trigger($.Event(affixType.replace('affix', 'affixed')))\r\n\r\n if (affix == 'bottom') {\r\n this.$element.offset({\r\n top: scrollHeight - this.$element.height() - offsetBottom\r\n })\r\n }\r\n }\r\n\r\n\r\n // AFFIX 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.affix')\r\n var options = typeof option == 'object' && option\r\n\r\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\r\n if (typeof option == 'string') data[option]()\r\n })\r\n }\r\n\r\n var old = $.fn.affix\r\n\r\n $.fn.affix = Plugin\r\n $.fn.affix.Constructor = Affix\r\n\r\n\r\n // AFFIX NO CONFLICT\r\n // =================\r\n\r\n $.fn.affix.noConflict = function () {\r\n $.fn.affix = old\r\n return this\r\n }\r\n\r\n\r\n // AFFIX DATA-API\r\n // ==============\r\n\r\n $(window).on('load', function () {\r\n $('[data-spy=\"affix\"]').each(function () {\r\n var $spy = $(this)\r\n var data = $spy.data()\r\n\r\n data.offset = data.offset || {}\r\n\r\n if (data.offsetBottom) data.offset.bottom = data.offsetBottom\r\n if (data.offsetTop) data.offset.top = data.offsetTop\r\n\r\n Plugin.call($spy, data)\r\n })\r\n })\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: button.js v3.2.0\r\n * http://getbootstrap.com/javascript/#buttons\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // BUTTON PUBLIC CLASS DEFINITION\r\n // ==============================\r\n\r\n var Button = function (element, options) {\r\n this.$element = $(element)\r\n this.options = $.extend({}, Button.DEFAULTS, options)\r\n this.isLoading = false\r\n }\r\n\r\n Button.VERSION = '3.2.0'\r\n\r\n Button.DEFAULTS = {\r\n loadingText: 'loading...'\r\n }\r\n\r\n Button.prototype.setState = function (state) {\r\n var d = 'disabled'\r\n var $el = this.$element\r\n var val = $el.is('input') ? 'val' : 'html'\r\n var data = $el.data()\r\n\r\n state = state + 'Text'\r\n\r\n if (data.resetText == null) $el.data('resetText', $el[val]())\r\n\r\n $el[val](data[state] == null ? this.options[state] : data[state])\r\n\r\n // push to event loop to allow forms to submit\r\n setTimeout($.proxy(function () {\r\n if (state == 'loadingText') {\r\n this.isLoading = true\r\n $el.addClass(d).attr(d, d)\r\n } else if (this.isLoading) {\r\n this.isLoading = false\r\n $el.removeClass(d).removeAttr(d)\r\n }\r\n }, this), 0)\r\n }\r\n\r\n Button.prototype.toggle = function () {\r\n var changed = true\r\n var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\r\n\r\n if ($parent.length) {\r\n var $input = this.$element.find('input')\r\n if ($input.prop('type') == 'radio') {\r\n if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\r\n else $parent.find('.active').removeClass('active')\r\n }\r\n if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\r\n }\r\n\r\n if (changed) this.$element.toggleClass('active')\r\n }\r\n\r\n\r\n // BUTTON 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.button')\r\n var options = typeof option == 'object' && option\r\n\r\n if (!data) $this.data('bs.button', (data = new Button(this, options)))\r\n\r\n if (option == 'toggle') data.toggle()\r\n else if (option) data.setState(option)\r\n })\r\n }\r\n\r\n var old = $.fn.button\r\n\r\n $.fn.button = Plugin\r\n $.fn.button.Constructor = Button\r\n\r\n\r\n // BUTTON NO CONFLICT\r\n // ==================\r\n\r\n $.fn.button.noConflict = function () {\r\n $.fn.button = old\r\n return this\r\n }\r\n\r\n\r\n // BUTTON DATA-API\r\n // ===============\r\n\r\n $(document).on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\r\n var $btn = $(e.target)\r\n if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\r\n Plugin.call($btn, 'toggle')\r\n e.preventDefault()\r\n })\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: tab.js v3.2.0\r\n * http://getbootstrap.com/javascript/#tabs\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // TAB CLASS DEFINITION\r\n // ====================\r\n\r\n var Tab = function (element) {\r\n this.element = $(element)\r\n }\r\n\r\n Tab.VERSION = '3.2.0'\r\n\r\n Tab.prototype.show = function () {\r\n var $this = this.element\r\n var $ul = $this.closest('ul:not(.dropdown-menu)')\r\n var selector = $this.data('target')\r\n\r\n if (!selector) {\r\n selector = $this.attr('href')\r\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n }\r\n\r\n if ($this.parent('li').hasClass('active')) return\r\n\r\n var previous = $ul.find('.active:last a')[0]\r\n var e = $.Event('show.bs.tab', {\r\n relatedTarget: previous\r\n })\r\n\r\n $this.trigger(e)\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n var $target = $(selector)\r\n\r\n this.activate($this.closest('li'), $ul)\r\n this.activate($target, $target.parent(), function () {\r\n $this.trigger({\r\n type: 'shown.bs.tab',\r\n relatedTarget: previous\r\n })\r\n })\r\n }\r\n\r\n Tab.prototype.activate = function (element, container, callback) {\r\n var $active = container.find('> .active')\r\n var transition = callback\r\n && $.support.transition\r\n && $active.hasClass('fade')\r\n\r\n function next() {\r\n $active\r\n .removeClass('active')\r\n .find('> .dropdown-menu > .active')\r\n .removeClass('active')\r\n\r\n element.addClass('active')\r\n\r\n if (transition) {\r\n element[0].offsetWidth // reflow for transition\r\n element.addClass('in')\r\n } else {\r\n element.removeClass('fade')\r\n }\r\n\r\n if (element.parent('.dropdown-menu')) {\r\n element.closest('li.dropdown').addClass('active')\r\n }\r\n\r\n callback && callback()\r\n }\r\n\r\n transition ?\r\n $active\r\n .one('bsTransitionEnd', next)\r\n .emulateTransitionEnd(150) :\r\n next()\r\n\r\n $active.removeClass('in')\r\n }\r\n\r\n\r\n // TAB 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.tab')\r\n\r\n if (!data) $this.data('bs.tab', (data = new Tab(this)))\r\n if (typeof option == 'string') data[option]()\r\n })\r\n }\r\n\r\n var old = $.fn.tab\r\n\r\n $.fn.tab = Plugin\r\n $.fn.tab.Constructor = Tab\r\n\r\n\r\n // TAB NO CONFLICT\r\n // ===============\r\n\r\n $.fn.tab.noConflict = function () {\r\n $.fn.tab = old\r\n return this\r\n }\r\n\r\n\r\n // TAB DATA-API\r\n // ============\r\n\r\n $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\r\n e.preventDefault()\r\n Plugin.call($(this), 'show')\r\n })\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: modal.js v3.2.0\r\n * http://getbootstrap.com/javascript/#modals\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // MODAL CLASS DEFINITION\r\n // ======================\r\n\r\n var Modal = function (element, options) {\r\n this.options = options\r\n this.$body = $(document.body)\r\n this.$element = $(element)\r\n this.$backdrop =\r\n this.isShown = null\r\n this.scrollbarWidth = 0\r\n\r\n if (this.options.remote) {\r\n this.$element\r\n .find('.modal-content')\r\n .load(this.options.remote, $.proxy(function () {\r\n this.$element.trigger('loaded.bs.modal')\r\n }, this))\r\n }\r\n }\r\n\r\n Modal.VERSION = '3.2.0'\r\n\r\n Modal.DEFAULTS = {\r\n backdrop: true,\r\n keyboard: true,\r\n show: true\r\n }\r\n\r\n Modal.prototype.toggle = function (_relatedTarget) {\r\n return this.isShown ? this.hide() : this.show(_relatedTarget)\r\n }\r\n\r\n Modal.prototype.show = function (_relatedTarget) {\r\n var that = this\r\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\r\n\r\n this.$element.trigger(e)\r\n\r\n if (this.isShown || e.isDefaultPrevented()) return\r\n\r\n this.isShown = true\r\n\r\n this.checkScrollbar()\r\n this.$body.addClass('modal-open')\r\n\r\n this.setScrollbar()\r\n this.escape()\r\n\r\n this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\r\n\r\n this.backdrop(function () {\r\n var transition = $.support.transition && that.$element.hasClass('fade')\r\n\r\n if (!that.$element.parent().length) {\r\n that.$element.appendTo(that.$body) // don't move modals dom position\r\n }\r\n\r\n that.$element\r\n .show()\r\n .scrollTop(0)\r\n\r\n if (transition) {\r\n that.$element[0].offsetWidth // force reflow\r\n }\r\n\r\n that.$element\r\n .addClass('in')\r\n .attr('aria-hidden', false)\r\n\r\n that.enforceFocus()\r\n\r\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\r\n\r\n transition ?\r\n that.$element.find('.modal-dialog') // wait for modal to slide in\r\n .one('bsTransitionEnd', function () {\r\n that.$element.trigger('focus').trigger(e)\r\n })\r\n .emulateTransitionEnd(300) :\r\n that.$element.trigger('focus').trigger(e)\r\n })\r\n }\r\n\r\n Modal.prototype.hide = function (e) {\r\n if (e) e.preventDefault()\r\n\r\n e = $.Event('hide.bs.modal')\r\n\r\n this.$element.trigger(e)\r\n\r\n if (!this.isShown || e.isDefaultPrevented()) return\r\n\r\n this.isShown = false\r\n\r\n this.$body.removeClass('modal-open')\r\n\r\n this.resetScrollbar()\r\n this.escape()\r\n\r\n $(document).off('focusin.bs.modal')\r\n\r\n this.$element\r\n .removeClass('in')\r\n .attr('aria-hidden', true)\r\n .off('click.dismiss.bs.modal')\r\n\r\n $.support.transition && this.$element.hasClass('fade') ?\r\n this.$element\r\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\r\n .emulateTransitionEnd(300) :\r\n this.hideModal()\r\n }\r\n\r\n Modal.prototype.enforceFocus = function () {\r\n $(document)\r\n .off('focusin.bs.modal') // guard against infinite focus loop\r\n .on('focusin.bs.modal', $.proxy(function (e) {\r\n if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\r\n this.$element.trigger('focus')\r\n }\r\n }, this))\r\n }\r\n\r\n Modal.prototype.escape = function () {\r\n if (this.isShown && this.options.keyboard) {\r\n this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\r\n e.which == 27 && this.hide()\r\n }, this))\r\n } else if (!this.isShown) {\r\n this.$element.off('keyup.dismiss.bs.modal')\r\n }\r\n }\r\n\r\n Modal.prototype.hideModal = function () {\r\n var that = this\r\n this.$element.hide()\r\n this.backdrop(function () {\r\n that.$element.trigger('hidden.bs.modal')\r\n })\r\n }\r\n\r\n Modal.prototype.removeBackdrop = function () {\r\n this.$backdrop && this.$backdrop.remove()\r\n this.$backdrop = null\r\n }\r\n\r\n Modal.prototype.backdrop = function (callback) {\r\n var that = this\r\n var animate = this.$element.hasClass('fade') ? 'fade' : ''\r\n\r\n if (this.isShown && this.options.backdrop) {\r\n var doAnimate = $.support.transition && animate\r\n\r\n this.$backdrop = $('
    ')\r\n .appendTo(this.$body)\r\n\r\n this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\r\n if (e.target !== e.currentTarget) return\r\n this.options.backdrop == 'static'\r\n ? this.$element[0].focus.call(this.$element[0])\r\n : this.hide.call(this)\r\n }, this))\r\n\r\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\r\n\r\n this.$backdrop.addClass('in')\r\n\r\n if (!callback) return\r\n\r\n doAnimate ?\r\n this.$backdrop\r\n .one('bsTransitionEnd', callback)\r\n .emulateTransitionEnd(150) :\r\n callback()\r\n\r\n } else if (!this.isShown && this.$backdrop) {\r\n this.$backdrop.removeClass('in')\r\n\r\n var callbackRemove = function () {\r\n that.removeBackdrop()\r\n callback && callback()\r\n }\r\n $.support.transition && this.$element.hasClass('fade') ?\r\n this.$backdrop\r\n .one('bsTransitionEnd', callbackRemove)\r\n .emulateTransitionEnd(150) :\r\n callbackRemove()\r\n\r\n } else if (callback) {\r\n callback()\r\n }\r\n }\r\n\r\n Modal.prototype.checkScrollbar = function () {\r\n if (document.body.clientWidth >= window.innerWidth) return\r\n this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()\r\n }\r\n\r\n Modal.prototype.setScrollbar = function () {\r\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\r\n if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\r\n }\r\n\r\n Modal.prototype.resetScrollbar = function () {\r\n this.$body.css('padding-right', '')\r\n }\r\n\r\n Modal.prototype.measureScrollbar = function () { // thx walsh\r\n var scrollDiv = document.createElement('div')\r\n scrollDiv.className = 'modal-scrollbar-measure'\r\n this.$body.append(scrollDiv)\r\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\r\n this.$body[0].removeChild(scrollDiv)\r\n return scrollbarWidth\r\n }\r\n\r\n\r\n // MODAL PLUGIN DEFINITION\r\n // =======================\r\n\r\n function Plugin(option, _relatedTarget) {\r\n return this.each(function () {\r\n var $this = $(this)\r\n var data = $this.data('bs.modal')\r\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\r\n\r\n if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\r\n if (typeof option == 'string') data[option](_relatedTarget)\r\n else if (options.show) data.show(_relatedTarget)\r\n })\r\n }\r\n\r\n var old = $.fn.modal\r\n\r\n $.fn.modal = Plugin\r\n $.fn.modal.Constructor = Modal\r\n\r\n\r\n // MODAL NO CONFLICT\r\n // =================\r\n\r\n $.fn.modal.noConflict = function () {\r\n $.fn.modal = old\r\n return this\r\n }\r\n\r\n\r\n // MODAL DATA-API\r\n // ==============\r\n\r\n $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\r\n var $this = $(this)\r\n var href = $this.attr('href')\r\n var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\r\n var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\r\n\r\n if ($this.is('a')) e.preventDefault()\r\n\r\n $target.one('show.bs.modal', function (showEvent) {\r\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\r\n $target.one('hidden.bs.modal', function () {\r\n $this.is(':visible') && $this.trigger('focus')\r\n })\r\n })\r\n Plugin.call($target, option, this)\r\n })\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: dropdown.js v3.2.0\r\n * http://getbootstrap.com/javascript/#dropdowns\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\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.2.0'\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 $('
    ').insertAfter($(this)).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.trigger('focus')\r\n\r\n $parent\r\n .toggleClass('open')\r\n .trigger('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)/.test(e.keyCode)) 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 || (isActive && e.keyCode == 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(.divider):visible a'\r\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\r\n\r\n if (!$items.length) return\r\n\r\n var index = $items.index($items.filter(':focus'))\r\n\r\n if (e.keyCode == 38 && index > 0) index-- // up\r\n if (e.keyCode == 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 function clearMenus(e) {\r\n if (e && e.which === 3) return\r\n $(backdrop).remove()\r\n $(toggle).each(function () {\r\n var $parent = getParent($(this))\r\n var relatedTarget = { relatedTarget: this }\r\n if (!$parent.hasClass('open')) return\r\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\r\n if (e.isDefaultPrevented()) return\r\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\r\n })\r\n }\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\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 + ', [role=\"menu\"], [role=\"listbox\"]', Dropdown.prototype.keydown)\r\n\r\n}(jQuery);\r\n","/* ========================================================================\r\n * Bootstrap: alert.js v3.2.0\r\n * http://getbootstrap.com/javascript/#alerts\r\n * ========================================================================\r\n * Copyright 2011-2014 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // ALERT CLASS DEFINITION\r\n // ======================\r\n\r\n var dismiss = '[data-dismiss=\"alert\"]'\r\n var Alert = function (el) {\r\n $(el).on('click', dismiss, this.close)\r\n }\r\n\r\n Alert.VERSION = '3.2.0'\r\n\r\n Alert.prototype.close = function (e) {\r\n var $this = $(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 && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n }\r\n\r\n var $parent = $(selector)\r\n\r\n if (e) e.preventDefault()\r\n\r\n if (!$parent.length) {\r\n $parent = $this.hasClass('alert') ? $this : $this.parent()\r\n }\r\n\r\n $parent.trigger(e = $.Event('close.bs.alert'))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $parent.removeClass('in')\r\n\r\n function removeElement() {\r\n // detach from parent, fire event then clean up data\r\n $parent.detach().trigger('closed.bs.alert').remove()\r\n }\r\n\r\n $.support.transition && $parent.hasClass('fade') ?\r\n $parent\r\n .one('bsTransitionEnd', removeElement)\r\n .emulateTransitionEnd(150) :\r\n removeElement()\r\n }\r\n\r\n\r\n // ALERT 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.alert')\r\n\r\n if (!data) $this.data('bs.alert', (data = new Alert(this)))\r\n if (typeof option == 'string') data[option].call($this)\r\n })\r\n }\r\n\r\n var old = $.fn.alert\r\n\r\n $.fn.alert = Plugin\r\n $.fn.alert.Constructor = Alert\r\n\r\n\r\n // ALERT NO CONFLICT\r\n // =================\r\n\r\n $.fn.alert.noConflict = function () {\r\n $.fn.alert = old\r\n return this\r\n }\r\n\r\n\r\n // ALERT DATA-API\r\n // ==============\r\n\r\n $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\r\n\r\n}(jQuery);\r\n","/*! Tablesaw - v1.0.4 - 2015-02-19\r\n* https://github.com/filamentgroup/tablesaw\r\n* Copyright (c) 2015 Filament Group; Licensed MIT */\r\n;(function( $ ) {\r\n\tvar div = document.createElement('div'),\r\n\t\tall = div.getElementsByTagName('i'),\r\n\t\t$doc = $( document.documentElement );\r\n\r\n\tdiv.innerHTML = '';\r\n\tif( all[ 0 ] ) {\r\n\t\t$doc.addClass( 'ie-lte8' );\r\n\t}\r\n\r\n\t// Cut the mustard\r\n\tif( !( 'querySelector' in document ) ||\r\n\t\t\t( window.blackberry && !window.WebKitPoint ) ||\r\n\t\t\twindow.operamini ) {\r\n\t\treturn;\r\n\t} else {\r\n\t\t$doc.addClass( 'tablesaw-enhanced' );\r\n\r\n\t\t// DOM-ready auto-init of plugins.\r\n\t\t// Many plugins bind to an \"enhance\" event to init themselves on dom ready, or when new markup is inserted into the DOM\r\n\t\t$( function(){\r\n\t\t\t$( document ).trigger( \"enhance.tablesaw\" );\r\n\t\t});\r\n\t}\r\n\r\n})( jQuery );\r\n/*\r\n* tablesaw: A set of plugins for responsive tables\r\n* Stack and Column Toggle tables\r\n* Copyright (c) 2013 Filament Group, Inc.\r\n* MIT License\r\n*/\r\n\r\nif( typeof Tablesaw === \"undefined\" ) {\r\n\tTablesaw = {\r\n\t\ti18n: {\r\n\t\t\tmodes: [ 'Stack', 'Swipe', 'Toggle' ],\r\n\t\t\tcolumns: 'Columns',\r\n\t\t\tcolumnBtnText: 'Columns',\r\n\t\t\tcolumnsDialogError: 'No eligible columns.',\r\n\t\t\tsort: 'Sort'\r\n\t\t}\r\n\t};\r\n}\r\nif( !Tablesaw.config ) {\r\n\tTablesaw.config = {};\r\n}\r\n\r\n;(function( $ ) {\r\n\tvar pluginName = \"table\",\r\n\t\tclasses = {\r\n\t\t\ttoolbar: \"tablesaw-bar\"\r\n\t\t},\r\n\t\tevents = {\r\n\t\t\tcreate: \"tablesawcreate\",\r\n\t\t\tdestroy: \"tablesawdestroy\",\r\n\t\t\trefresh: \"tablesawrefresh\"\r\n\t\t},\r\n\t\tdefaultMode = \"stack\",\r\n\t\tinitSelector = \"table[data-tablesaw-mode],table[data-tablesaw-sortable]\";\r\n\r\n\tvar Table = function( element ) {\r\n\t\tif( !element ) {\r\n\t\t\tthrow new Error( \"Tablesaw requires an element.\" );\r\n\t\t}\r\n\r\n\t\tthis.table = element;\r\n\t\tthis.$table = $( element );\r\n\r\n\t\tthis.mode = this.$table.attr( \"data-tablesaw-mode\" ) || defaultMode;\r\n\r\n\t\tthis.init();\r\n\t};\r\n\r\n\tTable.prototype.init = function() {\r\n\t\t// assign an id if there is none\r\n\t\tif ( !this.$table.attr( \"id\" ) ) {\r\n\t\t\tthis.$table.attr( \"id\", pluginName + \"-\" + Math.round( Math.random() * 10000 ) );\r\n\t\t}\r\n\r\n\t\tthis.createToolbar();\r\n\r\n\t\tvar colstart = this._initCells();\r\n\r\n\t\tthis.$table.trigger( events.create, [ this, colstart ] );\r\n\t};\r\n\r\n\tTable.prototype._initCells = function() {\r\n\t\tvar colstart,\r\n\t\t\tthrs = this.table.querySelectorAll( \"thead tr\" ),\r\n\t\t\tself = this;\r\n\r\n\t\t$( thrs ).each( function(){\r\n\t\t\tvar coltally = 0;\r\n\r\n\t\t\t$( this ).children().each( function(){\r\n\t\t\t\tvar span = parseInt( this.getAttribute( \"colspan\" ), 10 ),\r\n\t\t\t\t\tsel = \":nth-child(\" + ( coltally + 1 ) + \")\";\r\n\r\n\t\t\t\tcolstart = coltally + 1;\r\n\r\n\t\t\t\tif( span ){\r\n\t\t\t\t\tfor( var k = 0; k < span - 1; k++ ){\r\n\t\t\t\t\t\tcoltally++;\r\n\t\t\t\t\t\tsel += \", :nth-child(\" + ( coltally + 1 ) + \")\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Store \"cells\" data on header as a reference to all cells in the same column as this TH\r\n\t\t\t\tthis.cells = self.$table.find(\"tr\").not( $( thrs ).eq( 0 ) ).not( this ).children( sel );\r\n\t\t\t\tcoltally++;\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn colstart;\r\n\t};\r\n\r\n\tTable.prototype.refresh = function() {\r\n\t\tthis._initCells();\r\n\r\n\t\tthis.$table.trigger( events.refresh );\r\n\t};\r\n\r\n\tTable.prototype.createToolbar = function() {\r\n\t\t// Insert the toolbar\r\n\t\t// TODO move this into a separate component\r\n\t\tvar $toolbar = this.$table.prev( '.' + classes.toolbar );\r\n\t\tif( !$toolbar.length ) {\r\n\t\t\t$toolbar = $( '
    ' )\r\n\t\t\t\t.addClass( classes.toolbar )\r\n\t\t\t\t.insertBefore( this.$table );\r\n\t\t}\r\n\t\tthis.$toolbar = $toolbar;\r\n\r\n\t\tif( this.mode ) {\r\n\t\t\tthis.$toolbar.addClass( 'mode-' + this.mode );\r\n\t\t}\r\n\t};\r\n\r\n\tTable.prototype.destroy = function() {\r\n\t\t// Don’t remove the toolbar. Some of the table features are not yet destroy-friendly.\r\n\t\tthis.$table.prev( '.' + classes.toolbar ).each(function() {\r\n\t\t\tthis.className = this.className.replace( /\\bmode\\-\\w*\\b/gi, '' );\r\n\t\t});\r\n\r\n\t\tvar tableId = this.$table.attr( 'id' );\r\n\t\t$( document ).unbind( \".\" + tableId );\r\n\t\t$( window ).unbind( \".\" + tableId );\r\n\r\n\t\t// other plugins\r\n\t\tthis.$table.trigger( events.destroy, [ this ] );\r\n\r\n\t\tthis.$table.removeAttr( 'data-tablesaw-mode' );\r\n\r\n\t\tthis.$table.removeData( pluginName );\r\n\t};\r\n\r\n\t// Collection method.\r\n\t$.fn[ pluginName ] = function() {\r\n\t\treturn this.each( function() {\r\n\t\t\tvar $t = $( this );\r\n\r\n\t\t\tif( $t.data( pluginName ) ){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar table = new Table( this );\r\n\t\t\t$t.data( pluginName, table );\r\n\t\t});\r\n\t};\r\n\r\n\t$( document ).on( \"enhance.tablesaw\", function( e ) {\r\n\t\t$( e.target ).find( initSelector )[ pluginName ]();\r\n\t});\r\n\r\n}( jQuery ));\r\n\r\n;(function( win, $, undefined ){\r\n\r\n\tvar classes = {\r\n\t\tstackTable: 'tablesaw-stack',\r\n\t\tcellLabels: 'tablesaw-cell-label',\r\n\t\tcellContentLabels: 'tablesaw-cell-content'\r\n\t};\r\n\r\n\tvar data = {\r\n\t\tobj: 'tablesaw-stack'\r\n\t};\r\n\r\n\tvar attrs = {\r\n\t\tlabelless: 'data-tablesaw-no-labels',\r\n\t\thideempty: 'data-tablesaw-hide-empty'\r\n\t};\r\n\r\n\tvar Stack = function( element ) {\r\n\r\n\t\tthis.$table = $( element );\r\n\r\n\t\tthis.labelless = this.$table.is( '[' + attrs.labelless + ']' );\r\n\t\tthis.hideempty = this.$table.is( '[' + attrs.hideempty + ']' );\r\n\r\n\t\tif( !this.labelless ) {\r\n\t\t\t// allHeaders references headers, plus all THs in the thead, which may include several rows, or not\r\n\t\t\tthis.allHeaders = this.$table.find( \"th\" );\r\n\t\t}\r\n\r\n\t\tthis.$table.data( data.obj, this );\r\n\t};\r\n\r\n\tStack.prototype.init = function( colstart ) {\r\n\t\tthis.$table.addClass( classes.stackTable );\r\n\r\n\t\tif( this.labelless ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// get headers in reverse order so that top-level headers are appended last\r\n\t\tvar reverseHeaders = $( this.allHeaders );\r\n\t\tvar hideempty = this.hideempty;\r\n\t\t\r\n\t\t// create the hide/show toggles\r\n\t\treverseHeaders.each(function(){\r\n\t\t\tvar $t = $( this ),\r\n\t\t\t\t$cells = $( this.cells ).filter(function() {\r\n\t\t\t\t\treturn !$( this ).parent().is( \"[\" + attrs.labelless + \"]\" ) && ( !hideempty || !$( this ).is( \":empty\" ) );\r\n\t\t\t\t}),\r\n\t\t\t\thierarchyClass = $cells.not( this ).filter( \"thead th\" ).length && \" tablesaw-cell-label-top\",\r\n\t\t\t\t// TODO reduce coupling with sortable\r\n\t\t\t\t$sortableButton = $t.find( \".tablesaw-sortable-btn\" ),\r\n\t\t\t\thtml = $sortableButton.length ? $sortableButton.html() : $t.html();\r\n\r\n\t\t\tif( html !== \"\" ){\r\n\t\t\t\tif( hierarchyClass ){\r\n\t\t\t\t\tvar iteration = parseInt( $( this ).attr( \"colspan\" ), 10 ),\r\n\t\t\t\t\t\tfilter = \"\";\r\n\r\n\t\t\t\t\tif( iteration ){\r\n\t\t\t\t\t\tfilter = \"td:nth-child(\"+ iteration +\"n + \" + ( colstart ) +\")\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$cells.filter( filter ).prepend( \"\" + html + \"\" );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$cells.wrapInner( \"\" );\r\n\t\t\t\t\t$cells.prepend( \"\" + html + \"\" );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tStack.prototype.destroy = function() {\r\n\t\tthis.$table.removeClass( classes.stackTable );\r\n\t\tthis.$table.find( '.' + classes.cellLabels ).remove();\r\n\t\tthis.$table.find( '.' + classes.cellContentLabels ).each(function() {\r\n\t\t\t$( this ).replaceWith( this.childNodes );\r\n\t\t});\r\n\t};\r\n\r\n\t// on tablecreate, init\r\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw, colstart ){\r\n\t\tif( Tablesaw.mode === 'stack' ){\r\n\t\t\tvar table = new Stack( Tablesaw.table );\r\n\t\t\ttable.init( colstart );\r\n\t\t}\r\n\r\n\t} );\r\n\r\n\t$( document ).on( \"tablesawdestroy\", function( e, Tablesaw ){\r\n\r\n\t\tif( Tablesaw.mode === 'stack' ){\r\n\t\t\t$( Tablesaw.table ).data( data.obj ).destroy();\r\n\t\t}\r\n\r\n\t} );\r\n\r\n}( this, jQuery ));\r\n;(function( $ ) {\r\n\tvar pluginName = \"tablesawbtn\",\r\n\t\tinitSelector = \".btn\",\r\n\t\tmethods = {\r\n\t\t\t_create: function(){\r\n\t\t\t\treturn $( this ).each(function() {\r\n\t\t\t\t\t$( this )\r\n\t\t\t\t\t\t.trigger( \"beforecreate.\" + pluginName )\r\n\t\t\t\t\t\t[ pluginName ]( \"_init\" )\r\n\t\t\t\t\t\t.trigger( \"create.\" + pluginName );\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t_init: function(){\r\n\t\t\t\tvar oEl = $( this ),\r\n\t\t\t\t\tsel = this.getElementsByTagName( \"select\" )[ 0 ];\r\n\r\n\t\t\t\tif( sel ) {\r\n\t\t\t\t\t$( this )\r\n\t\t\t\t\t\t.addClass( \"btn-select\" )\r\n\t\t\t\t\t\t[ pluginName ]( \"_select\", sel );\r\n\t\t\t\t}\r\n\t\t\t\treturn oEl;\r\n\t\t\t},\r\n\t\t\t_select: function( sel ) {\r\n\t\t\t\tvar update = function( oEl, sel ) {\r\n\t\t\t\t\tvar opts = $( sel ).find( \"option\" ),\r\n\t\t\t\t\t\tlabel, el, children;\r\n\r\n\t\t\t\t\topts.each(function() {\r\n\t\t\t\t\t\tvar opt = this;\r\n\t\t\t\t\t\tif( opt.selected ) {\r\n\t\t\t\t\t\t\tlabel = document.createTextNode( opt.text );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tchildren = oEl.childNodes;\r\n\t\t\t\t\tif( opts.length > 0 ){\r\n\t\t\t\t\t\tfor( var i = 0, l = children.length; i < l; i++ ) {\r\n\t\t\t\t\t\t\tel = children[ i ];\r\n\r\n\t\t\t\t\t\t\tif( el && el.nodeType === 3 ) {\r\n\t\t\t\t\t\t\t\toEl.replaceChild( label, el );\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\r\n\t\t\t\tupdate( this, sel );\r\n\t\t\t\t$( this ).bind( \"change refresh\", function() {\r\n\t\t\t\t\tupdate( this, sel );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t// Collection method.\r\n\t$.fn[ pluginName ] = function( arrg, a, b, c ) {\r\n\t\treturn this.each(function() {\r\n\r\n\t\t// if it's a method\r\n\t\tif( arrg && typeof( arrg ) === \"string\" ){\r\n\t\t\treturn $.fn[ pluginName ].prototype[ arrg ].call( this, a, b, c );\r\n\t\t}\r\n\r\n\t\t// don't re-init\r\n\t\tif( $( this ).data( pluginName + \"active\" ) ){\r\n\t\t\treturn $( this );\r\n\t\t}\r\n\r\n\t\t// otherwise, init\r\n\r\n\t\t$( this ).data( pluginName + \"active\", true );\r\n\t\t\t$.fn[ pluginName ].prototype._create.call( this );\r\n\t\t});\r\n\t};\r\n\r\n\t// add methods\r\n\t$.extend( $.fn[ pluginName ].prototype, methods );\r\n\r\n\t$( document ).on( \"enhance\", function( e ) {\r\n\t\t$( initSelector, e.target )[ pluginName ]();\r\n\t});\r\n\r\n}( jQuery ));\r\n;(function( win, $, undefined ){\r\n\r\n\tvar ColumnToggle = function( element ) {\r\n\r\n\t\tthis.$table = $( element );\r\n\r\n\t\tthis.classes = {\r\n\t\t\tcolumnToggleTable: 'tablesaw-columntoggle',\r\n\t\t\tcolumnBtnContain: 'tablesaw-columntoggle-btnwrap tablesaw-advance',\r\n\t\t\tcolumnBtn: 'tablesaw-columntoggle-btn tablesaw-nav-btn down',\r\n\t\t\tpopup: 'tablesaw-columntoggle-popup',\r\n\t\t\tpriorityPrefix: 'tablesaw-priority-',\r\n\t\t\t// TODO duplicate class, also in tables.js\r\n\t\t\ttoolbar: 'tablesaw-bar'\r\n\t\t};\r\n\r\n\t\t// Expose headers and allHeaders properties on the widget\r\n\t\t// headers references the THs within the first TR in the table\r\n\t\tthis.headers = this.$table.find( 'tr:first > th' );\r\n\r\n\t\tthis.$table.data( 'tablesaw-coltoggle', this );\r\n\t};\r\n\r\n\tColumnToggle.prototype.init = function() {\r\n\r\n\t\tvar tableId,\r\n\t\t\tid,\r\n\t\t\t$menuButton,\r\n\t\t\t$popup,\r\n\t\t\t$menu,\r\n\t\t\t$btnContain,\r\n\t\t\tself = this;\r\n\r\n\t\tthis.$table.addClass( this.classes.columnToggleTable );\r\n\r\n\t\ttableId = this.$table.attr( \"id\" );\r\n\t\tid = tableId + \"-popup\";\r\n\t\t$btnContain = $( \"
    \" );\r\n\t\t$menuButton = $( \"\" +\r\n\t\t\t\t\t\t\t\t\t\t\"\" + Tablesaw.i18n.columnBtnText + \"\" );\r\n\t\t$popup = $( \"
    \" );\r\n\t\t$menu = $( \"
    \" );\r\n\r\n\t\tvar hasNonPersistentHeaders = false;\r\n\t\t$( this.headers ).not( \"td\" ).each( function() {\r\n\t\t\tvar $this = $( this ),\r\n\t\t\t\tpriority = $this.attr(\"data-tablesaw-priority\"),\r\n\t\t\t\t$cells = $this.add( this.cells );\r\n\r\n\t\t\tif( priority && priority !== \"persist\" ) {\r\n\t\t\t\t$cells.addClass( self.classes.priorityPrefix + priority );\r\n\r\n\t\t\t\t$(\"\" )\r\n\t\t\t\t\t.appendTo( $menu )\r\n\t\t\t\t\t.children( 0 )\r\n\t\t\t\t\t.data( \"cells\", $cells );\r\n\r\n\t\t\t\thasNonPersistentHeaders = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif( !hasNonPersistentHeaders ) {\r\n\t\t\t$menu.append( '' );\r\n\t\t}\r\n\r\n\t\t$menu.appendTo( $popup );\r\n\r\n\t\t// bind change event listeners to inputs - TODO: move to a private method?\r\n\t\t$menu.find( 'input[type=\"checkbox\"]' ).on( \"change\", function(e) {\r\n\t\t\tvar checked = e.target.checked;\r\n\r\n\t\t\t$( e.target ).data( \"cells\" )\r\n\t\t\t\t.toggleClass( \"tablesaw-cell-hidden\", !checked )\r\n\t\t\t\t.toggleClass( \"tablesaw-cell-visible\", checked );\r\n\r\n\t\t\tself.$table.trigger( 'tablesawcolumns' );\r\n\t\t});\r\n\r\n\t\t$menuButton.appendTo( $btnContain );\r\n\t\t$btnContain.appendTo( this.$table.prev( '.' + this.classes.toolbar ) );\r\n\r\n\t\tvar closeTimeout;\r\n\t\tfunction openPopup() {\r\n\t\t\t$btnContain.addClass( 'visible' );\r\n\t\t\t$menuButton.removeClass( 'down' ).addClass( 'up' );\r\n\r\n\t\t\t$( document ).unbind( 'click.' + tableId, closePopup );\r\n\r\n\t\t\twindow.clearTimeout( closeTimeout );\r\n\t\t\tcloseTimeout = window.setTimeout(function() {\r\n\t\t\t\t$( document ).one( 'click.' + tableId, closePopup );\r\n\t\t\t}, 15 );\r\n\t\t}\r\n\r\n\t\tfunction closePopup( event ) {\r\n\t\t\t// Click came from inside the popup, ignore.\r\n\t\t\tif( event && $( event.target ).closest( \".\" + self.classes.popup ).length ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t$( document ).unbind( 'click.' + tableId );\r\n\t\t\t$menuButton.removeClass( 'up' ).addClass( 'down' );\r\n\t\t\t$btnContain.removeClass( 'visible' );\r\n\t\t}\r\n\r\n\t\t$menuButton.on( \"click.tablesaw\", function( event ) {\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\tif( !$btnContain.is( \".visible\" ) ) {\r\n\t\t\t\topenPopup();\r\n\t\t\t} else {\r\n\t\t\t\tclosePopup();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$popup.appendTo( $btnContain );\r\n\r\n\t\tthis.$menu = $menu;\r\n\r\n\t\t$(window).on( \"resize.\" + tableId, function(){\r\n\t\t\tself.refreshToggle();\r\n\t\t});\r\n\r\n\t\tthis.refreshToggle();\r\n\t};\r\n\r\n\tColumnToggle.prototype.refreshToggle = function() {\r\n\t\tthis.$menu.find( \"input\" ).each( function() {\r\n\t\t\tvar $this = $( this );\r\n\r\n\t\t\tthis.checked = $this.data( \"cells\" ).eq( 0 ).css( \"display\" ) === \"table-cell\";\r\n\t\t});\r\n\t};\r\n\r\n\tColumnToggle.prototype.refreshPriority = function(){\r\n\t\tvar self = this;\r\n\t\t$(this.headers).not( \"td\" ).each( function() {\r\n\t\t\tvar $this = $( this ),\r\n\t\t\t\tpriority = $this.attr(\"data-tablesaw-priority\"),\r\n\t\t\t\t$cells = $this.add( this.cells );\r\n\r\n\t\t\tif( priority && priority !== \"persist\" ) {\r\n\t\t\t\t$cells.addClass( self.classes.priorityPrefix + priority );\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tColumnToggle.prototype.destroy = function() {\r\n\t\t// table toolbars, document and window .tableId events\r\n\t\t// removed in parent tables.js destroy method\r\n\r\n\t\tthis.$table.removeClass( this.classes.columnToggleTable );\r\n\t\tthis.$table.find( 'th, td' ).each(function() {\r\n\t\t\tvar $cell = $( this );\r\n\t\t\t$cell.removeClass( 'tablesaw-cell-hidden' )\r\n\t\t\t\t.removeClass( 'tablesaw-cell-visible' );\r\n\r\n\t\t\tthis.className = this.className.replace( /\\bui\\-table\\-priority\\-\\d\\b/g, '' );\r\n\t\t});\r\n\t};\r\n\r\n\t// on tablecreate, init\r\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw ){\r\n\r\n\t\tif( Tablesaw.mode === 'columntoggle' ){\r\n\t\t\tvar table = new ColumnToggle( Tablesaw.table );\r\n\t\t\ttable.init();\r\n\t\t}\r\n\r\n\t} );\r\n\r\n\t$( document ).on( \"tablesawdestroy\", function( e, Tablesaw ){\r\n\t\tif( Tablesaw.mode === 'columntoggle' ){\r\n\t\t\t$( Tablesaw.table ).data( 'tablesaw-coltoggle' ).destroy();\r\n\t\t}\r\n\t} );\r\n\r\n}( this, jQuery ));\r\n;(function( win, $, undefined ){\r\n\r\n\t$.extend( Tablesaw.config, {\r\n\t\tswipe: {\r\n\t\t\thorizontalThreshold: 15,\r\n\t\t\tverticalThreshold: 30\r\n\t\t}\r\n\t});\r\n\r\n\tfunction createSwipeTable( $table ){\r\n\r\n\t\tvar $btns = $( \"
    \" ),\r\n\t\t\t$prevBtn = $( \"\" ).appendTo( $btns ),\r\n\t\t\t$nextBtn = $( \"\" ).appendTo( $btns ),\r\n\t\t\thideBtn = 'disabled',\r\n\t\t\tpersistWidths = 'tablesaw-fix-persist',\r\n\t\t\t$headerCells = $table.find( \"thead th\" ),\r\n\t\t\t$headerCellsNoPersist = $headerCells.not( '[data-tablesaw-priority=\"persist\"]' ),\r\n\t\t\theaderWidths = [],\r\n\t\t\t$head = $( document.head || 'head' ),\r\n\t\t\ttableId = $table.attr( 'id' ),\r\n\t\t\t// TODO switch this to an nth-child feature test\r\n\t\t\tisIE8 = $( 'html' ).is( '.ie-lte8' );\r\n\r\n\t\tif( !$headerCells.length ) {\r\n\t\t\tthrow new Error( \"tablesaw swipe: no header cells found. Are you using inside of ?\" );\r\n\t\t}\r\n\r\n\t\t// Calculate initial widths\r\n\t\t$table.css('width', 'auto');\r\n\t\t$headerCells.each(function() {\r\n\t\t\theaderWidths.push( $( this ).outerWidth() );\r\n\t\t});\r\n\t\t$table.css( 'width', '' );\r\n\r\n\t\t$btns.appendTo( $table.prev( '.tablesaw-bar' ) );\r\n\r\n\t\t$table.addClass( \"tablesaw-swipe\" );\r\n\r\n\t\tif( !tableId ) {\r\n\t\t\ttableId = 'tableswipe-' + Math.round( Math.random() * 10000 );\r\n\t\t\t$table.attr( 'id', tableId );\r\n\t\t}\r\n\r\n\t\tfunction $getCells( headerCell ) {\r\n\t\t\treturn $( headerCell.cells ).add( headerCell );\r\n\t\t}\r\n\r\n\t\tfunction showColumn( headerCell ) {\r\n\t\t\t$getCells( headerCell ).removeClass( 'tablesaw-cell-hidden' );\r\n\t\t}\r\n\r\n\t\tfunction hideColumn( headerCell ) {\r\n\t\t\t$getCells( headerCell ).addClass( 'tablesaw-cell-hidden' );\r\n\t\t}\r\n\r\n\t\tfunction persistColumn( headerCell ) {\r\n\t\t\t$getCells( headerCell ).addClass( 'tablesaw-cell-persist' );\r\n\t\t}\r\n\r\n\t\tfunction isPersistent( headerCell ) {\r\n\t\t\treturn $( headerCell ).is( '[data-tablesaw-priority=\"persist\"]' );\r\n\t\t}\r\n\r\n\t\tfunction unmaintainWidths() {\r\n\t\t\t$table.removeClass( persistWidths );\r\n\t\t\t$( '#' + tableId + '-persist' ).remove();\r\n\t\t}\r\n\r\n\t\tfunction maintainWidths() {\r\n\t\t\tvar prefix = '#' + tableId + '.tablesaw-swipe ',\r\n\t\t\t\tstyles = [],\r\n\t\t\t\ttableWidth = $table.width(),\r\n\t\t\t\thash = [],\r\n\t\t\t\tnewHash;\r\n\r\n\t\t\t$headerCells.each(function( index ) {\r\n\t\t\t\tvar width;\r\n\t\t\t\tif( isPersistent( this ) ) {\r\n\t\t\t\t\twidth = $( this ).outerWidth();\r\n\r\n\t\t\t\t\t// Only save width on non-greedy columns (take up less than 75% of table width)\r\n\t\t\t\t\tif( width < tableWidth * 0.75 ) {\r\n\t\t\t\t\t\thash.push( index + '-' + width );\r\n\t\t\t\t\t\tstyles.push( prefix + ' .tablesaw-cell-persist:nth-child(' + ( index + 1 ) + ') { width: ' + width + 'px; }' );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tnewHash = hash.join( '_' );\r\n\r\n\t\t\t$table.addClass( persistWidths );\r\n\r\n\t\t\tvar $style = $( '#' + tableId + '-persist' );\r\n\t\t\t// If style element not yet added OR if the widths have changed\r\n\t\t\tif( !$style.length || $style.data( 'hash' ) !== newHash ) {\r\n\t\t\t\t// Remove existing\r\n\t\t\t\t$style.remove();\r\n\r\n\t\t\t\tif( styles.length ) {\r\n\t\t\t\t\t$( '' )\r\n\t\t\t\t\t\t.attr( 'id', tableId + '-persist' )\r\n\t\t\t\t\t\t.data( 'hash', newHash )\r\n\t\t\t\t\t\t.appendTo( $head );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getNext(){\r\n\t\t\tvar next = [],\r\n\t\t\t\tcheckFound;\r\n\r\n\t\t\t$headerCellsNoPersist.each(function( i ) {\r\n\t\t\t\tvar $t = $( this ),\r\n\t\t\t\t\tisHidden = $t.css( \"display\" ) === \"none\" || $t.is( \".tablesaw-cell-hidden\" );\r\n\r\n\t\t\t\tif( !isHidden && !checkFound ) {\r\n\t\t\t\t\tcheckFound = true;\r\n\t\t\t\t\tnext[ 0 ] = i;\r\n\t\t\t\t} else if( isHidden && checkFound ) {\r\n\t\t\t\t\tnext[ 1 ] = i;\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn next;\r\n\t\t}\r\n\r\n\t\tfunction getPrev(){\r\n\t\t\tvar next = getNext();\r\n\t\t\treturn [ next[ 1 ] - 1 , next[ 0 ] - 1 ];\r\n\t\t}\r\n\r\n\t\tfunction nextpair( fwd ){\r\n\t\t\treturn fwd ? getNext() : getPrev();\r\n\t\t}\r\n\r\n\t\tfunction canAdvance( pair ){\r\n\t\t\treturn pair[ 1 ] > -1 && pair[ 1 ] < $headerCellsNoPersist.length;\r\n\t\t}\r\n\r\n\t\tfunction matchesMedia() {\r\n\t\t\tvar matchMedia = $table.attr( \"data-tablesaw-swipe-media\" );\r\n\t\t\treturn !matchMedia || ( \"matchMedia\" in win ) && win.matchMedia( matchMedia ).matches;\r\n\t\t}\r\n\r\n\t\tfunction fakeBreakpoints() {\r\n\t\t\tif( !matchesMedia() ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar extraPaddingPixels = 20,\r\n\t\t\t\tcontainerWidth = $table.parent().width(),\r\n\t\t\t\tpersist = [],\r\n\t\t\t\tsum = 0,\r\n\t\t\t\tsums = [],\r\n\t\t\t\tvisibleNonPersistantCount = $headerCells.length;\r\n\r\n\t\t\t$headerCells.each(function( index ) {\r\n\t\t\t\tvar $t = $( this ),\r\n\t\t\t\t\tisPersist = $t.is( '[data-tablesaw-priority=\"persist\"]' );\r\n\r\n\t\t\t\tpersist.push( isPersist );\r\n\r\n\t\t\t\tsum += headerWidths[ index ] + ( isPersist ? 0 : extraPaddingPixels );\r\n\t\t\t\tsums.push( sum );\r\n\r\n\t\t\t\t// is persistent or is hidden\r\n\t\t\t\tif( isPersist || sum > containerWidth ) {\r\n\t\t\t\t\tvisibleNonPersistantCount--;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar needsNonPersistentColumn = visibleNonPersistantCount === 0;\r\n\r\n\t\t\t$headerCells.each(function( index ) {\r\n\t\t\t\tif( persist[ index ] ) {\r\n\r\n\t\t\t\t\t// for visual box-shadow\r\n\t\t\t\t\tpersistColumn( this );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif( sums[ index ] <= containerWidth || needsNonPersistentColumn ) {\r\n\t\t\t\t\tneedsNonPersistentColumn = false;\r\n\t\t\t\t\tshowColumn( this );\r\n\t\t\t\t} else {\r\n\t\t\t\t\thideColumn( this );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif( !isIE8 ) {\r\n\t\t\t\tunmaintainWidths();\r\n\t\t\t}\r\n\t\t\t$table.trigger( 'tablesawcolumns' );\r\n\t\t}\r\n\r\n\t\tfunction advance( fwd ){\r\n\t\t\tvar pair = nextpair( fwd );\r\n\t\t\tif( canAdvance( pair ) ){\r\n\t\t\t\tif( isNaN( pair[ 0 ] ) ){\r\n\t\t\t\t\tif( fwd ){\r\n\t\t\t\t\t\tpair[0] = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpair[0] = $headerCellsNoPersist.length - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif( !isIE8 ) {\r\n\t\t\t\t\tmaintainWidths();\r\n\t\t\t\t}\r\n\r\n\t\t\t\thideColumn( $headerCellsNoPersist.get( pair[ 0 ] ) );\r\n\t\t\t\tshowColumn( $headerCellsNoPersist.get( pair[ 1 ] ) );\r\n\r\n\t\t\t\t$table.trigger( 'tablesawcolumns' );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$prevBtn.add( $nextBtn ).click(function( e ){\r\n\t\t\tadvance( !!$( e.target ).closest( $nextBtn ).length );\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\r\n\t\tfunction getCoord( event, key ) {\r\n\t\t\treturn ( event.touches || event.originalEvent.touches )[ 0 ][ key ];\r\n\t\t}\r\n\r\n\t\t$table\r\n\t\t\t.bind( \"touchstart.swipetoggle\", function( e ){\r\n\t\t\t\tvar originX = getCoord( e, 'pageX' ),\r\n\t\t\t\t\toriginY = getCoord( e, 'pageY' ),\r\n\t\t\t\t\tx,\r\n\t\t\t\t\ty;\r\n\r\n\t\t\t\t$( win ).off( \"resize\", fakeBreakpoints );\r\n\r\n\t\t\t\t$( this )\r\n\t\t\t\t\t.bind( \"touchmove\", function( e ){\r\n\t\t\t\t\t\tx = getCoord( e, 'pageX' );\r\n\t\t\t\t\t\ty = getCoord( e, 'pageY' );\r\n\t\t\t\t\t\tvar cfg = Tablesaw.config.swipe;\r\n\t\t\t\t\t\tif( Math.abs( x - originX ) > cfg.horizontalThreshold && Math.abs( y - originY ) < cfg.verticalThreshold ) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.bind( \"touchend.swipetoggle\", function(){\r\n\t\t\t\t\t\tvar cfg = Tablesaw.config.swipe;\r\n\t\t\t\t\t\tif( Math.abs( y - originY ) < cfg.verticalThreshold ) {\r\n\t\t\t\t\t\t\tif( x - originX < -1 * cfg.horizontalThreshold ){\r\n\t\t\t\t\t\t\t\tadvance( true );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif( x - originX > cfg.horizontalThreshold ){\r\n\t\t\t\t\t\t\t\tadvance( false );\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\twindow.setTimeout(function() {\r\n\t\t\t\t\t\t\t$( win ).on( \"resize\", fakeBreakpoints );\r\n\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t\t$( this ).unbind( \"touchmove touchend\" );\r\n\t\t\t\t\t});\r\n\r\n\t\t\t})\r\n\t\t\t.bind( \"tablesawcolumns.swipetoggle\", function(){\r\n\t\t\t\t$prevBtn[ canAdvance( getPrev() ) ? \"removeClass\" : \"addClass\" ]( hideBtn );\r\n\t\t\t\t$nextBtn[ canAdvance( getNext() ) ? \"removeClass\" : \"addClass\" ]( hideBtn );\r\n\t\t\t})\r\n\t\t\t.bind( \"tablesawnext.swipetoggle\", function(){\r\n\t\t\t\tadvance( true );\r\n\t\t\t} )\r\n\t\t\t.bind( \"tablesawprev.swipetoggle\", function(){\r\n\t\t\t\tadvance( false );\r\n\t\t\t} )\r\n\t\t\t.bind( \"tablesawdestroy.swipetoggle\", function(){\r\n\t\t\t\tvar $t = $( this );\r\n\r\n\t\t\t\t$t.removeClass( 'tablesaw-swipe' );\r\n\t\t\t\t$t.prev( '.tablesaw-bar' ).find( '.tablesaw-advance' ).remove();\r\n\t\t\t\t$( win ).off( \"resize\", fakeBreakpoints );\r\n\r\n\t\t\t\t$t.unbind( \".swipetoggle\" );\r\n\t\t\t});\r\n\r\n\t\tfakeBreakpoints();\r\n\t\t$( win ).on( \"resize\", fakeBreakpoints );\r\n\t}\r\n\r\n\r\n\r\n\t// on tablecreate, init\r\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw ){\r\n\r\n\t\tif( Tablesaw.mode === 'swipe' ){\r\n\t\t\tcreateSwipeTable( Tablesaw.$table );\r\n\t\t}\r\n\r\n\t} );\r\n\r\n}( this, jQuery ));\r\n\r\n;(function( $ ) {\r\n\tfunction getSortValue( cell ) {\r\n\t\treturn $.map( cell.childNodes, function( el ) {\r\n\t\t\t\tvar $el = $( el );\r\n\t\t\t\tif( $el.is( 'input, select' ) ) {\r\n\t\t\t\t\treturn $el.val();\r\n\t\t\t\t} else if( $el.hasClass( 'tablesaw-cell-label' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn $.trim( $el.text() );\r\n\t\t\t}).join( '' );\r\n\t}\r\n\r\n\tvar pluginName = \"tablesaw-sortable\",\r\n\t\tinitSelector = \"table[data-\" + pluginName + \"]\",\r\n\t\tsortableSwitchSelector = \"[data-\" + pluginName + \"-switch]\",\r\n\t\tattrs = {\r\n\t\t\tdefaultCol: \"data-tablesaw-sortable-default-col\"\r\n\t\t},\r\n\t\tclasses = {\r\n\t\t\thead: pluginName + \"-head\",\r\n\t\t\tascend: pluginName + \"-ascending\",\r\n\t\t\tdescend: pluginName + \"-descending\",\r\n\t\t\tswitcher: pluginName + \"-switch\",\r\n\t\t\ttableToolbar: 'tablesaw-toolbar',\r\n\t\t\tsortButton: pluginName + \"-btn\"\r\n\t\t},\r\n\t\tmethods = {\r\n\t\t\t_create: function( o ){\r\n\t\t\t\treturn $( this ).each(function() {\r\n\t\t\t\t\tvar init = $( this ).data( \"init\" + pluginName );\r\n\t\t\t\t\tif( init ) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$( this )\r\n\t\t\t\t\t\t.data( \"init\"+ pluginName, true )\r\n\t\t\t\t\t\t.trigger( \"beforecreate.\" + pluginName )\r\n\t\t\t\t\t\t[ pluginName ]( \"_init\" , o )\r\n\t\t\t\t\t\t.trigger( \"create.\" + pluginName );\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t_init: function(){\r\n\t\t\t\tvar el = $( this ),\r\n\t\t\t\t\theads,\r\n\t\t\t\t\t$switcher;\r\n\r\n\t\t\t\tvar addClassToTable = function(){\r\n\t\t\t\t\t\tel.addClass( pluginName );\r\n\t\t\t\t\t},\r\n\t\t\t\t\taddClassToHeads = function( h ){\r\n\t\t\t\t\t\t$.each( h , function( i , v ){\r\n\t\t\t\t\t\t\t$( v ).addClass( classes.head );\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmakeHeadsActionable = function( h , fn ){\r\n\t\t\t\t\t\t$.each( h , function( i , v ){\r\n\t\t\t\t\t\t\tvar b = $( \"',\r\n tBtnLink = '{icon}{label}',\r\n tBtnBrowse = '
    {icon}{label}
    ',\r\n tModal = '
    \\n' +\r\n '
    \\n' +\r\n '
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n '

    {heading} {title}

    \\n' +\r\n '
    \\n' +\r\n '
    \\n' +\r\n '
    {body}
    \\n' +\r\n '
    \\n' +\r\n '
    \\n' +\r\n '
    \\n' +\r\n '
    ',\r\n tProgress = '
    \\n' +\r\n '
    \\n' +\r\n ' {percent}%\\n' +\r\n '
    \\n' +\r\n '
    ',\r\n tFooter = '
    \\n' +\r\n ' \\n' +\r\n ' {progress} {actions}\\n' +\r\n '
    ',\r\n tActions = '
    \\n' +\r\n ' \\n' +\r\n '
    {indicator}
    \\n' +\r\n '
    \\n' +\r\n '
    ',\r\n tActionDelete = '\\n',\r\n tActionUpload = '\\n',\r\n tZoom = '\\n',\r\n tGeneric = '
    \\n' +\r\n ' {content}\\n' +\r\n ' {footer}\\n' +\r\n '
    \\n',\r\n tHtml = '
    \\n' +\r\n ' \\n' +\r\n ' ' + DEFAULT_PREVIEW + '\\n' +\r\n ' \\n' +\r\n ' {footer}\\n' +\r\n '
    ',\r\n tImage = '
    \\n' +\r\n ' \"{caption}\"\\n' +\r\n ' {footer}\\n' +\r\n '
    \\n',\r\n tText = '
    \\n' +\r\n '
    {data}
    \\n' +\r\n ' {zoom}\\n' +\r\n ' {footer}\\n' +\r\n '
    ',\r\n tVideo = '
    \\n' +\r\n ' \\n' +\r\n ' {footer}\\n' +\r\n '
    \\n',\r\n tAudio = '
    \\n' +\r\n ' \\n' +\r\n ' {footer}\\n' +\r\n '
    ',\r\n tFlash = '
    \\n' +\r\n ' \\n' +\r\n OBJECT_PARAMS + ' ' + DEFAULT_PREVIEW + '\\n' +\r\n ' \\n' +\r\n ' {footer}\\n' +\r\n '
    \\n',\r\n tObject = '
    \\n' +\r\n ' \\n' +\r\n ' \\n' +\r\n OBJECT_PARAMS + ' ' + DEFAULT_PREVIEW + '\\n' +\r\n ' \\n' +\r\n ' {footer}\\n' +\r\n '
    ',\r\n tOther = '
    \\n' +\r\n '
    \\n' +\r\n ' ' + DEFAULT_PREVIEW + '\\n' +\r\n '
    \\n' +\r\n '
    {footer}
    \\n' +\r\n '
    ',\r\n defaultLayoutTemplates = {\r\n main1: tMain1,\r\n main2: tMain2,\r\n preview: tPreview,\r\n zoom: tZoom,\r\n icon: tIcon,\r\n caption: tCaption,\r\n modal: tModal,\r\n progress: tProgress,\r\n footer: tFooter,\r\n actions: tActions,\r\n actionDelete: tActionDelete,\r\n actionUpload: tActionUpload,\r\n btnDefault: tBtnDefault,\r\n btnLink: tBtnLink,\r\n btnBrowse: tBtnBrowse\r\n },\r\n defaultPreviewTemplates = {\r\n generic: tGeneric,\r\n html: tHtml,\r\n image: tImage,\r\n text: tText,\r\n video: tVideo,\r\n audio: tAudio,\r\n flash: tFlash,\r\n object: tObject,\r\n other: tOther\r\n },\r\n defaultPreviewTypes = ['image', 'html', 'text', 'video', 'audio', 'flash', 'object'],\r\n defaultPreviewSettings = {\r\n image: {width: \"auto\", height: \"160px\"},\r\n html: {width: \"213px\", height: \"160px\"},\r\n text: {width: \"160px\", height: \"136px\"},\r\n video: {width: \"213px\", height: \"160px\"},\r\n audio: {width: \"213px\", height: \"80px\"},\r\n flash: {width: \"213px\", height: \"160px\"},\r\n object: {width: \"160px\", height: \"160px\"},\r\n other: {width: \"160px\", height: \"160px\"}\r\n },\r\n defaultFileTypeSettings = {\r\n image: function (vType, vName) {\r\n return (vType !== undefined) ? vType.match('image.*') : vName.match(/\\.(gif|png|jpe?g)$/i);\r\n },\r\n html: function (vType, vName) {\r\n return (vType !== undefined) ? vType === 'text/html' : vName.match(/\\.(htm|html)$/i);\r\n },\r\n text: function (vType, vName) {\r\n return (vType !== undefined && vType.match('text.*')) || vName.match(/\\.(txt|md|csv|nfo|ini|json|php|js|css)$/i);\r\n },\r\n video: function (vType, vName) {\r\n return (vType !== undefined && vType.match(/\\.video\\/(ogg|mp4|webm|3gp)$/i)) || vName.match(/\\.(og?|mp4|webm|3gp)$/i);\r\n },\r\n audio: function (vType, vName) {\r\n return (vType !== undefined && vType.match(/\\.audio\\/(ogg|mp3|wav)$/i)) || vName.match(/\\.(ogg|mp3|wav)$/i);\r\n },\r\n flash: function (vType, vName) {\r\n return (vType !== undefined && vType === 'application/x-shockwave-flash') || vName.match(/\\.(swf)$/i);\r\n },\r\n object: function () {\r\n return true;\r\n },\r\n other: function () {\r\n return true;\r\n }\r\n },\r\n isEmpty = function (value, trim) {\r\n return value === undefined || value === null || value.length === 0 || (trim && $.trim(value) === '');\r\n },\r\n isArray = function (a) {\r\n return Array.isArray(a) || Object.prototype.toString.call(a) === '[object Array]';\r\n },\r\n isSet = function (needle, haystack) {\r\n return (typeof haystack === 'object' && needle in haystack);\r\n },\r\n getElement = function (options, param, value) {\r\n return (isEmpty(options) || isEmpty(options[param])) ? value : $(options[param]);\r\n },\r\n uniqId = function () {\r\n return Math.round(new Date().getTime() + (Math.random() * 100));\r\n },\r\n htmlEncode = function (str) {\r\n return str.replace(/&/g, '&')\r\n .replace(//g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n },\r\n replaceTags = function (str, tags) {\r\n var out = str;\r\n if (!tags) {\r\n return out;\r\n }\r\n $.each(tags, function (key, value) {\r\n if (typeof value === \"function\") {\r\n value = value();\r\n }\r\n out = out.split(key).join(value);\r\n });\r\n return out;\r\n },\r\n objUrl = window.URL || window.webkitURL,\r\n FileInput = function (element, options) {\r\n var self = this;\r\n self.$element = $(element);\r\n if (!self.validate()) {\r\n return;\r\n }\r\n self.isPreviewable = hasFileAPISupport();\r\n self.isIE9 = isIE(9);\r\n self.isIE10 = isIE(10);\r\n if (self.isPreviewable || self.isIE9) {\r\n self.init(options);\r\n self.listen();\r\n } else {\r\n self.$element.removeClass('file-loading');\r\n }\r\n };\r\n\r\n FileInput.prototype = {\r\n constructor: FileInput,\r\n validate: function () {\r\n var self = this, $exception;\r\n if (self.$element.attr('type') === 'file') {\r\n return true;\r\n }\r\n $exception = '
    ' +\r\n '

    Invalid Input Type

    ' +\r\n 'You must set an input type = file for bootstrap-fileinput plugin to initialize.' +\r\n '
    ';\r\n self.$element.after($exception);\r\n return false;\r\n },\r\n init: function (options) {\r\n var self = this, $el = self.$element, t;\r\n $.each(options, function (key, value) {\r\n switch (key) {\r\n case 'minFileCount':\r\n case 'maxFileCount':\r\n case 'maxFileSize':\r\n self[key] = getNum(value);\r\n break;\r\n default:\r\n self[key] = value;\r\n break;\r\n }\r\n });\r\n self.fileInputCleared = false;\r\n self.fileBatchCompleted = true;\r\n if (!self.isPreviewable) {\r\n self.showPreview = false;\r\n }\r\n self.uploadFileAttr = !isEmpty($el.attr('name')) ? $el.attr('name') : 'file_data';\r\n self.reader = null;\r\n self.formdata = {};\r\n self.filestack = [];\r\n self.uploadCount = 0;\r\n self.uploadStatus = {};\r\n self.fileprogress = [];\r\n self.ajaxRequests = [];\r\n self.isError = false;\r\n self.ajaxAborted = false;\r\n self.cancelling = false;\r\n t = self.getLayoutTemplate('progress');\r\n self.progressTemplate = t.replace('{class}', self.progressClass);\r\n self.progressCompleteTemplate = t.replace('{class}', self.progressCompleteClass);\r\n self.dropZoneEnabled = hasDragDropSupport() && self.dropZoneEnabled;\r\n self.isDisabled = self.$element.attr('disabled') || self.$element.attr('readonly');\r\n self.isUploadable = hasFileUploadSupport() && !isEmpty(self.uploadUrl);\r\n self.slug = typeof options.slugCallback === \"function\" ? options.slugCallback : self.slugDefault;\r\n self.mainTemplate = self.showCaption ? self.getLayoutTemplate('main1') : self.getLayoutTemplate('main2');\r\n self.captionTemplate = self.getLayoutTemplate('caption');\r\n self.previewGenericTemplate = self.getPreviewTemplate('generic');\r\n if (isEmpty(self.$element.attr('id'))) {\r\n self.$element.attr('id', uniqId());\r\n }\r\n if (self.$container === undefined) {\r\n self.$container = self.createContainer();\r\n } else {\r\n self.refreshContainer();\r\n }\r\n self.$progress = self.$container.find('.kv-upload-progress');\r\n self.$btnUpload = self.$container.find('.fileinput-upload');\r\n self.$captionContainer = getElement(options, 'elCaptionContainer', self.$container.find('.file-caption'));\r\n self.$caption = getElement(options, 'elCaptionText', self.$container.find('.file-caption-name'));\r\n self.$previewContainer = getElement(options, 'elPreviewContainer', self.$container.find('.file-preview'));\r\n self.$preview = getElement(options, 'elPreviewImage', self.$container.find('.file-preview-thumbnails'));\r\n self.$previewStatus = getElement(options, 'elPreviewStatus', self.$container.find('.file-preview-status'));\r\n self.$errorContainer = getElement(options, 'elErrorContainer',\r\n self.$previewContainer.find('.kv-fileinput-error'));\r\n if (!isEmpty(self.msgErrorClass)) {\r\n addCss(self.$errorContainer, self.msgErrorClass);\r\n }\r\n self.$errorContainer.hide();\r\n self.fileActionSettings = $.extend(defaultFileActionSettings, options.fileActionSettings);\r\n self.previewInitId = \"preview-\" + uniqId();\r\n self.id = self.$element.attr('id');\r\n previewCache.init(self);\r\n self.initPreview(true);\r\n self.initPreviewDeletes();\r\n self.options = options;\r\n self.setFileDropZoneTitle();\r\n self.$element.removeClass('file-loading');\r\n if (self.$element.attr('disabled')) {\r\n self.disable();\r\n }\r\n },\r\n parseError: function (jqXHR, errorThrown, fileName) {\r\n var self = this, errMsg = $.trim(errorThrown + ''),\r\n dot = errMsg.slice(-1) === '.' ? '' : '.',\r\n text = jqXHR.responseJSON !== undefined && jqXHR.responseJSON.error !== undefined ?\r\n jqXHR.responseJSON.error : jqXHR.responseText;\r\n if (self.cancelling && self.msgUploadAborted) {\r\n errMsg = self.msgUploadAborted;\r\n }\r\n if (self.showAjaxErrorDetails && text) {\r\n text = $.trim(text.replace(/\\n\\s*\\n/g, '\\n'));\r\n text = text.length > 0 ? '
    ' + text + '
    ' : '';\r\n errMsg += dot + text;\r\n } else {\r\n errMsg += dot;\r\n }\r\n self.cancelling = false;\r\n return fileName ? '' + fileName + ': ' + errMsg : errMsg;\r\n },\r\n raise: function (event, params) {\r\n var self = this, e = $.Event(event);\r\n if (params !== undefined) {\r\n self.$element.trigger(e, params);\r\n } else {\r\n self.$element.trigger(e);\r\n }\r\n if (e.isDefaultPrevented()) {\r\n return false;\r\n }\r\n if (!e.result) {\r\n return e.result;\r\n }\r\n switch (event) {\r\n // ignore these events\r\n case 'filebatchuploadcomplete':\r\n case 'filebatchuploadsuccess':\r\n case 'fileuploaded':\r\n case 'fileclear':\r\n case 'filecleared':\r\n case 'filereset':\r\n case 'fileerror':\r\n case 'filefoldererror':\r\n case 'fileuploaderror':\r\n case 'filebatchuploaderror':\r\n case 'filedeleteerror':\r\n case 'filecustomerror':\r\n case 'filesuccessremove':\r\n break;\r\n // receive data response via `filecustomerror` event`\r\n default:\r\n self.ajaxAborted = e.result;\r\n break;\r\n }\r\n return true;\r\n },\r\n getLayoutTemplate: function (t) {\r\n var self = this,\r\n template = isSet(t, self.layoutTemplates) ? self.layoutTemplates[t] : defaultLayoutTemplates[t];\r\n if (isEmpty(self.customLayoutTags)) {\r\n return template;\r\n }\r\n return replaceTags(template, self.customLayoutTags);\r\n },\r\n getPreviewTemplate: function (t) {\r\n var self = this,\r\n template = isSet(t, self.previewTemplates) ? self.previewTemplates[t] : defaultPreviewTemplates[t];\r\n if (isEmpty(self.customPreviewTags)) {\r\n return template;\r\n }\r\n return replaceTags(template, self.customPreviewTags);\r\n },\r\n parseFilePreviewIcon: function (content, fname) {\r\n var self = this, ext, icn = self.previewFileIcon;\r\n if (fname && fname.indexOf('.') > -1) {\r\n ext = fname.split('.').pop();\r\n if (self.previewFileIconSettings && self.previewFileIconSettings[ext]) {\r\n icn = self.previewFileIconSettings[ext];\r\n }\r\n if (self.previewFileExtSettings) {\r\n $.each(self.previewFileExtSettings, function (key, func) {\r\n if (self.previewFileIconSettings[key] && func(ext)) {\r\n icn = self.previewFileIconSettings[key];\r\n }\r\n });\r\n }\r\n }\r\n if (content.indexOf('{previewFileIcon}') > -1) {\r\n return content.replace(/\\{previewFileIconClass\\}/g, self.previewFileIconClass).replace(/\\{previewFileIcon\\}/g, icn);\r\n }\r\n return content;\r\n },\r\n getOutData: function (jqXHR, responseData, filesData) {\r\n var self = this;\r\n jqXHR = jqXHR || {};\r\n responseData = responseData || {};\r\n filesData = filesData || self.filestack.slice(0) || {};\r\n return {\r\n form: self.formdata,\r\n files: filesData,\r\n extra: self.getExtraData(),\r\n response: responseData,\r\n reader: self.reader,\r\n jqXHR: jqXHR\r\n };\r\n },\r\n listen: function () {\r\n var self = this, $el = self.$element, $cap = self.$captionContainer, $btnFile = self.$btnFile,\r\n $form = $el.closest('form'), $cont = self.$container;\r\n handler($el, 'change', $.proxy(self.change, self));\r\n handler($btnFile, 'click', function () {\r\n self.raise('filebrowse');\r\n if (self.isError && !self.isUploadable) {\r\n self.clear();\r\n }\r\n $cap.focus();\r\n });\r\n handler($form, 'reset', $.proxy(self.reset, self));\r\n handler($cont.find('.fileinput-remove:not([disabled])'), 'click', $.proxy(self.clear, self));\r\n handler($cont.find('.fileinput-cancel'), 'click', $.proxy(self.cancel, self));\r\n if (self.isUploadable && self.dropZoneEnabled && self.showPreview) {\r\n self.initDragDrop();\r\n }\r\n if (!self.isUploadable) {\r\n handler($form, 'submit', $.proxy(self.submitForm, self));\r\n }\r\n handler(self.$container.find('.fileinput-upload'), 'click', function (e) {\r\n var $btn = $(this), $form, isEnabled = !$btn.hasClass('disabled') && isEmpty($btn.attr('disabled'));\r\n if (!self.isUploadable) {\r\n if (isEnabled && $btn.attr('type') !== 'submit') {\r\n $form = $btn.closest('form');\r\n // downgrade to normal form submit if possible\r\n if ($form.length) {\r\n $form.trigger('submit');\r\n }\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n e.preventDefault();\r\n if (isEnabled) {\r\n self.upload();\r\n }\r\n });\r\n },\r\n submitForm: function () {\r\n var self = this, $el = self.$element, files = $el.get(0).files;\r\n if (files && self.minFileCount > 0 && self.getFileCount(files.length) < self.minFileCount) {\r\n self.noFilesError({});\r\n return false;\r\n }\r\n return !self.abort({});\r\n },\r\n abort: function (params) {\r\n var self = this, data;\r\n if (self.ajaxAborted && typeof self.ajaxAborted === \"object\" && self.ajaxAborted.message !== undefined) {\r\n data = $.extend(self.getOutData(), params);\r\n data.abortData = self.ajaxAborted.data || {};\r\n data.abortMessage = self.ajaxAborted.message;\r\n self.cancel();\r\n self.setProgress(100);\r\n self.showUploadError(self.ajaxAborted.message, data, 'filecustomerror');\r\n return true;\r\n }\r\n return false;\r\n },\r\n noFilesError: function (params) {\r\n var self = this, label = self.minFileCount > 1 ? self.filePlural : self.fileSingle,\r\n msg = self.msgFilesTooLess.replace('{n}', self.minFileCount).replace('{files}', label),\r\n $error = self.$errorContainer;\r\n self.addError(msg);\r\n self.isError = true;\r\n self.updateFileDetails(0);\r\n $error.fadeIn(800);\r\n self.raise('fileerror', [params]);\r\n self.clearFileInput();\r\n addCss(self.$container, 'has-error');\r\n },\r\n setProgress: function (p, $el) {\r\n var self = this, pct = Math.min(p, 100),\r\n template = pct < 100 ? self.progressTemplate : self.progressCompleteTemplate;\r\n $el = $el || self.$progress;\r\n if (!isEmpty(template)) {\r\n $el.html(template.replace(/\\{percent\\}/g, pct));\r\n }\r\n },\r\n upload: function () {\r\n var self = this, totLen = self.getFileStack().length, params = {},\r\n i, outData, len, hasExtraData = !$.isEmptyObject(self.getExtraData());\r\n if (self.minFileCount > 0 && self.getFileCount(totLen) < self.minFileCount) {\r\n self.noFilesError(params);\r\n return;\r\n }\r\n if (!self.isUploadable || self.isDisabled || (totLen === 0 && !hasExtraData)) {\r\n return;\r\n }\r\n self.resetUpload();\r\n self.$progress.removeClass('hide');\r\n self.uploadCount = 0;\r\n self.uploadStatus = {};\r\n self.lock();\r\n self.setProgress(2);\r\n if (totLen === 0 && hasExtraData) {\r\n self.uploadExtraOnly();\r\n return;\r\n }\r\n len = self.filestack.length;\r\n self.hasInitData = false;\r\n if (self.uploadAsync && self.showPreview) {\r\n outData = self.getOutData();\r\n self.raise('filebatchpreupload', [outData]);\r\n self.fileBatchCompleted = false;\r\n self.uploadCache = {content: [], config: [], tags: [], append: true};\r\n for (i = 0; i < len; i += 1) {\r\n if (self.filestack[i] !== undefined) {\r\n self.uploadSingle(i, self.filestack, true);\r\n }\r\n }\r\n return;\r\n }\r\n self.uploadBatch();\r\n },\r\n lock: function () {\r\n var self = this;\r\n self.resetErrors();\r\n self.disable();\r\n if (self.showRemove) {\r\n addCss(self.$container.find('.fileinput-remove'), 'hide');\r\n }\r\n if (self.showCancel) {\r\n self.$container.find('.fileinput-cancel').removeClass('hide');\r\n }\r\n self.raise('filelock', [self.filestack, self.getExtraData()]);\r\n },\r\n unlock: function (reset) {\r\n var self = this;\r\n if (reset === undefined) {\r\n reset = true;\r\n }\r\n self.enable();\r\n if (self.showCancel) {\r\n addCss(self.$container.find('.fileinput-cancel'), 'hide');\r\n }\r\n if (self.showRemove) {\r\n self.$container.find('.fileinput-remove').removeClass('hide');\r\n }\r\n if (reset) {\r\n self.resetFileStack();\r\n }\r\n self.raise('fileunlock', [self.filestack, self.getExtraData()]);\r\n },\r\n resetFileStack: function () {\r\n var self = this, i = 0, newstack = [];\r\n self.getThumbs().each(function () {\r\n var $thumb = $(this), ind = $thumb.attr('data-fileindex'),\r\n file = self.filestack[ind];\r\n if (ind === -1) {\r\n return;\r\n }\r\n if (file !== undefined) {\r\n newstack[i] = file;\r\n $thumb.attr({\r\n 'id': self.previewInitId + '-' + i,\r\n 'data-fileindex': i\r\n });\r\n i += 1;\r\n } else {\r\n $thumb.attr({\r\n 'id': 'uploaded-' + uniqId(),\r\n 'data-fileindex': '-1'\r\n });\r\n }\r\n });\r\n self.filestack = newstack;\r\n },\r\n destroy: function () {\r\n var self = this, $cont = self.$container;\r\n $cont.find('.file-drop-zone').off();\r\n self.$element.insertBefore($cont).off('.fileinput').removeData();\r\n $cont.off().remove();\r\n },\r\n refresh: function (options) {\r\n var self = this, $el = self.$element;\r\n options = options ? $.extend(self.options, options) : self.options;\r\n self.destroy();\r\n $el.fileinput(options);\r\n if ($el.val()) {\r\n $el.trigger('change.fileinput');\r\n }\r\n },\r\n initDragDrop: function () {\r\n var self = this, $zone = self.$container.find('.file-drop-zone'),\r\n allEvents = 'dragenter.fileinput dragover.fileinput drop.fileinput';\r\n handler($zone, 'dragenter.fileinput dragover.fileinput', function (e) {\r\n var hasFiles = $.inArray('Files', e.originalEvent.dataTransfer.types) > -1;\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (self.isDisabled || !hasFiles) {\r\n e.originalEvent.dataTransfer.effectAllowed = 'none';\r\n e.originalEvent.dataTransfer.dropEffect = 'none';\r\n return;\r\n }\r\n addCss($(this), 'highlighted');\r\n }, true);\r\n handler($zone, 'dragleave', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (self.isDisabled) {\r\n return;\r\n }\r\n $(this).removeClass('highlighted');\r\n });\r\n handler($zone, 'drop', function (e) {\r\n e.preventDefault();\r\n if (self.isDisabled || isEmpty(e.originalEvent.dataTransfer.files)) {\r\n return;\r\n }\r\n self.change(e, 'dragdrop');\r\n $(this).removeClass('highlighted');\r\n });\r\n handler($(document), allEvents, function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }, true);\r\n },\r\n setFileDropZoneTitle: function () {\r\n var self = this, $zone = self.$container.find('.file-drop-zone');\r\n $zone.find('.' + self.dropZoneTitleClass).remove();\r\n if (!self.isUploadable || !self.showPreview || $zone.length === 0 || self.getFileStack().length > 0 || !self.dropZoneEnabled) {\r\n return;\r\n }\r\n if ($zone.find('.file-preview-frame').length === 0) {\r\n $zone.prepend('
    ' + self.dropZoneTitle + '
    ');\r\n }\r\n self.$container.removeClass('file-input-new');\r\n addCss(self.$container, 'file-input-ajax-new');\r\n },\r\n initFileActions: function () {\r\n var self = this;\r\n self.$preview.find('.kv-file-remove').each(function () {\r\n var $el = $(this), $frame = $el.closest('.file-preview-frame'), hasError,\r\n id = $frame.attr('id'), ind = $frame.attr('data-fileindex'), n, cap, status;\r\n handler($el, 'click', function (event) {\r\n status = self.raise('filepreremove', [id, ind]);\r\n if (status === false || !self.validateMinCount()) {\r\n return false;\r\n }\r\n hasError = $frame.hasClass('file-preview-error');\r\n self.cleanMemory($frame);\r\n $frame.fadeOut('slow', function () {\r\n self.filestack[ind] = undefined;\r\n self.clearObjects($frame);\r\n $frame.remove();\r\n if (id && hasError) {\r\n self.$errorContainer.find('li[data-file-id=\"' + id + '\"]').fadeOut('fast', function () {\r\n $(this).remove();\r\n if (!self.$errorContainer.find('li').length && !self.$preview.find('.file-preview-frame.file-preview-error').length) {\r\n self.resetErrors();\r\n }\r\n });\r\n }\r\n var filestack = self.getFileStack(true), len = filestack.length, chk = previewCache.count(self.id),\r\n hasThumb = self.showPreview && self.$preview.find('.file-preview-frame').length;\r\n self.clearFileInput();\r\n if (len === 0 && chk === 0 && !hasThumb) {\r\n self.reset();\r\n } else {\r\n n = chk + len;\r\n cap = n > 1 ? self.getMsgSelected(n) : (filestack[0] ? filestack[0].name : '');\r\n self.setCaption(cap);\r\n }\r\n self.raise('fileremoved', [id, ind]);\r\n });\r\n });\r\n });\r\n self.$preview.find('.kv-file-upload').each(function () {\r\n var $el = $(this);\r\n handler($el, 'click', function () {\r\n var $frame = $el.closest('.file-preview-frame'),\r\n ind = $frame.attr('data-fileindex');\r\n if (!$frame.hasClass('file-preview-error')) {\r\n self.uploadSingle(ind, self.filestack, false);\r\n }\r\n });\r\n });\r\n },\r\n getMsgSelected: function (n) {\r\n var self = this, strFiles = n === 1 ? self.fileSingle : self.filePlural;\r\n return self.msgSelected.replace('{n}', n).replace('{files}', strFiles);\r\n },\r\n renderThumbProgress: function () {\r\n return '
    ' + this.progressTemplate.replace(/\\{percent\\}/g, '0') + '
    ';\r\n },\r\n renderFileFooter: function (caption, width) {\r\n var self = this, config = self.fileActionSettings, footer, out,\r\n template = self.getLayoutTemplate('footer'), progress = self.progressTemplate;\r\n if (self.isUploadable) {\r\n footer = template.replace(/\\{actions\\}/g, self.renderFileActions(true, true, false, false, false));\r\n out = footer.replace(/\\{caption\\}/g, caption)\r\n .replace(/\\{width\\}/g, width)\r\n .replace(/\\{progress\\}/g, self.renderThumbProgress())\r\n .replace(/\\{indicator\\}/g, config.indicatorNew)\r\n .replace(/\\{indicatorTitle\\}/g, config.indicatorNewTitle);\r\n } else {\r\n out = template.replace(/\\{actions\\}/g, '')\r\n .replace(/\\{caption\\}/g, caption)\r\n .replace(/\\{progress\\}/g, '')\r\n .replace(/\\{width\\}/g, width)\r\n .replace(/\\{indicator\\}/g, '')\r\n .replace(/\\{indicatorTitle\\}/g, '');\r\n }\r\n out = replaceTags(out, self.previewThumbTags);\r\n return out;\r\n },\r\n renderFileActions: function (showUpload, showDelete, disabled, url, key) {\r\n if (!showUpload && !showDelete) {\r\n return '';\r\n }\r\n var self = this,\r\n vUrl = url === false ? '' : ' data-url=\"' + url + '\"',\r\n vKey = key === false ? '' : ' data-key=\"' + key + '\"',\r\n btnDelete = self.getLayoutTemplate('actionDelete'),\r\n btnUpload = '',\r\n template = self.getLayoutTemplate('actions'),\r\n otherButtons = self.otherActionButtons.replace(/\\{dataKey\\}/g, vKey),\r\n config = self.fileActionSettings,\r\n removeClass = disabled ? config.removeClass + ' disabled' : config.removeClass;\r\n btnDelete = btnDelete\r\n .replace(/\\{removeClass\\}/g, removeClass)\r\n .replace(/\\{removeIcon\\}/g, config.removeIcon)\r\n .replace(/\\{removeTitle\\}/g, config.removeTitle)\r\n .replace(/\\{dataUrl\\}/g, vUrl)\r\n .replace(/\\{dataKey\\}/g, vKey);\r\n if (showUpload) {\r\n btnUpload = self.getLayoutTemplate('actionUpload')\r\n .replace(/\\{uploadClass\\}/g, config.uploadClass)\r\n .replace(/\\{uploadIcon\\}/g, config.uploadIcon)\r\n .replace(/\\{uploadTitle\\}/g, config.uploadTitle);\r\n }\r\n return template\r\n .replace(/\\{delete\\}/g, btnDelete)\r\n .replace(/\\{upload\\}/g, btnUpload)\r\n .replace(/\\{other\\}/g, otherButtons);\r\n },\r\n setThumbStatus: function ($thumb, status) {\r\n var self = this, icon = 'indicator' + status, msg = icon + 'Title',\r\n css = 'file-preview-' + status.toLowerCase(),\r\n $indicator = $thumb.find('.file-upload-indicator'),\r\n config = self.fileActionSettings;\r\n $thumb.removeClass('file-preview-success file-preview-error file-preview-loading');\r\n if (status === 'Error') {\r\n $thumb.find('.kv-file-upload').attr('disabled', true);\r\n addCss($thumb, 'btn disabled');\r\n }\r\n $indicator.html(config[icon]);\r\n $indicator.attr('title', config[msg]);\r\n $thumb.addClass(css);\r\n },\r\n clearPreview: function () {\r\n var self = this, $thumbs = !self.showUploadedThumbs ? self.$preview.find('.file-preview-frame') :\r\n self.$preview.find('.file-preview-frame:not(.file-preview-success)');\r\n $thumbs.remove();\r\n if (!self.$preview.find('.file-preview-frame').length || !self.showPreview) {\r\n self.resetUpload();\r\n }\r\n },\r\n initPreview: function (isInit) {\r\n var self = this, cap = self.initialCaption || '', out;\r\n if (!previewCache.count(self.id)) {\r\n self.clearPreview();\r\n if (isInit) {\r\n self.setCaption(cap);\r\n } else {\r\n self.initCaption();\r\n }\r\n return;\r\n }\r\n out = previewCache.out(self.id);\r\n cap = isInit && self.initialCaption ? self.initialCaption : out.caption;\r\n self.$preview.html(out.content);\r\n self.setCaption(cap);\r\n if (!isEmpty(out.content)) {\r\n self.$container.removeClass('file-input-new');\r\n }\r\n },\r\n initPreviewDeletes: function () {\r\n var self = this, deleteExtraData = self.deleteExtraData || {},\r\n resetProgress = function () {\r\n var hasFiles = self.isUploadable ? previewCache.count(self.id) : self.$element.get(0).files.length;\r\n if (self.$preview.find('.kv-file-remove').length === 0 && !hasFiles) {\r\n self.reset();\r\n self.initialCaption = '';\r\n }\r\n };\r\n\r\n self.$preview.find('.kv-file-remove').each(function () {\r\n var $el = $(this), vUrl = $el.data('url') || self.deleteUrl, vKey = $el.data('key');\r\n if (isEmpty(vUrl) || vKey === undefined) {\r\n return;\r\n }\r\n var $frame = $el.closest('.file-preview-frame'), cache = previewCache.data[self.id],\r\n settings, params, index = $frame.data('fileindex'), config, extraData;\r\n index = parseInt(index.replace('init_', ''));\r\n config = isEmpty(cache.config) && isEmpty(cache.config[index]) ? null : cache.config[index];\r\n extraData = isEmpty(config) || isEmpty(config.extra) ? deleteExtraData : config.extra;\r\n if (typeof extraData === \"function\") {\r\n extraData = extraData();\r\n }\r\n params = {id: $el.attr('id'), key: vKey, extra: extraData};\r\n settings = $.extend({\r\n url: vUrl,\r\n type: 'POST',\r\n dataType: 'json',\r\n data: $.extend({key: vKey}, extraData),\r\n beforeSend: function (jqXHR) {\r\n self.ajaxAborted = false;\r\n self.raise('filepredelete', [vKey, jqXHR, extraData]);\r\n if (self.ajaxAborted) {\r\n jqXHR.abort();\r\n } else {\r\n addCss($frame, 'file-uploading');\r\n addCss($el, 'disabled');\r\n }\r\n },\r\n success: function (data, textStatus, jqXHR) {\r\n var n, cap;\r\n if (isEmpty(data) || isEmpty(data.error)) {\r\n previewCache.unset(self.id, index);\r\n n = previewCache.count(self.id);\r\n cap = n > 0 ? self.getMsgSelected(n) : '';\r\n self.raise('filedeleted', [vKey, jqXHR, extraData]);\r\n self.setCaption(cap);\r\n } else {\r\n params.jqXHR = jqXHR;\r\n params.response = data;\r\n self.showError(data.error, params, 'filedeleteerror');\r\n $frame.removeClass('file-uploading');\r\n $el.removeClass('disabled');\r\n resetProgress();\r\n return;\r\n }\r\n $frame.removeClass('file-uploading').addClass('file-deleted');\r\n $frame.fadeOut('slow', function () {\r\n self.clearObjects($frame);\r\n $frame.remove();\r\n resetProgress();\r\n if (!n && self.getFileStack().length === 0) {\r\n self.setCaption('');\r\n self.reset();\r\n }\r\n });\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var errMsg = self.parseError(jqXHR, errorThrown);\r\n params.jqXHR = jqXHR;\r\n params.response = {};\r\n self.showError(errMsg, params, 'filedeleteerror');\r\n $frame.removeClass('file-uploading');\r\n resetProgress();\r\n }\r\n }, self.ajaxDeleteSettings);\r\n handler($el, 'click', function () {\r\n if (!self.validateMinCount()) {\r\n return false;\r\n }\r\n $.ajax(settings);\r\n });\r\n });\r\n },\r\n clearObjects: function ($el) {\r\n $el.find('video audio').each(function () {\r\n this.pause();\r\n $(this).remove();\r\n });\r\n $el.find('img object div').each(function () {\r\n $(this).remove();\r\n });\r\n },\r\n clearFileInput: function () {\r\n var self = this, $el = self.$element, $srcFrm, $tmpFrm, $tmpEl;\r\n if (isEmpty($el.val())) {\r\n return;\r\n }\r\n // Fix for IE ver < 11, that does not clear file inputs\r\n // Requires a sequence of steps to prevent IE crashing but\r\n // still allow clearing of the file input.\r\n if (self.isIE9 || self.isIE10) {\r\n $srcFrm = $el.closest('form');\r\n $tmpFrm = $(document.createElement('form'));\r\n $tmpEl = $(document.createElement('div'));\r\n $el.before($tmpEl);\r\n if ($srcFrm.length) {\r\n $srcFrm.after($tmpFrm);\r\n } else {\r\n $tmpEl.after($tmpFrm);\r\n }\r\n $tmpFrm.append($el).trigger('reset');\r\n $tmpEl.before($el).remove();\r\n $tmpFrm.remove();\r\n } else { // normal input clear behavior for other sane browsers\r\n $el.val('');\r\n }\r\n self.fileInputCleared = true;\r\n },\r\n resetUpload: function () {\r\n var self = this;\r\n self.uploadCache = {content: [], config: [], tags: [], append: true};\r\n self.uploadCount = 0;\r\n self.uploadStatus = {};\r\n self.$btnUpload.removeAttr('disabled');\r\n self.setProgress(0);\r\n addCss(self.$progress, 'hide');\r\n self.resetErrors(false);\r\n self.ajaxAborted = false;\r\n self.ajaxRequests = [];\r\n },\r\n cancel: function () {\r\n var self = this, xhr = self.ajaxRequests, len = xhr.length, i;\r\n if (len > 0) {\r\n for (i = 0; i < len; i += 1) {\r\n self.cancelling = true;\r\n xhr[i].abort();\r\n }\r\n }\r\n self.getThumbs().each(function () {\r\n var $thumb = $(this), ind = $thumb.attr('data-fileindex');\r\n $thumb.removeClass('file-uploading');\r\n if (self.filestack[ind] !== undefined) {\r\n $thumb.find('.kv-file-upload').removeClass('disabled').removeAttr('disabled');\r\n $thumb.find('.kv-file-remove').removeClass('disabled').removeAttr('disabled');\r\n }\r\n self.unlock();\r\n });\r\n },\r\n cleanMemory: function ($thumb) {\r\n var data = $thumb.is('img') ? $thumb.attr('src') : $thumb.find('source').attr('src');\r\n objUrl.revokeObjectURL(data);\r\n },\r\n hasInitialPreview: function () {\r\n var self = this;\r\n return !self.overwriteInitial && previewCache.count(self.id);\r\n },\r\n clear: function () {\r\n var self = this, cap;\r\n self.$btnUpload.removeAttr('disabled');\r\n self.getThumbs().find('video,audio,img').each(function () {\r\n self.cleanMemory($(this));\r\n });\r\n self.resetUpload();\r\n self.filestack = [];\r\n self.clearFileInput();\r\n self.resetErrors(true);\r\n self.raise('fileclear');\r\n if (self.hasInitialPreview()) {\r\n self.showFileIcon();\r\n self.resetPreview();\r\n self.initPreviewDeletes();\r\n self.$container.removeClass('file-input-new');\r\n } else {\r\n self.getThumbs().each(function () {\r\n self.clearObjects($(this));\r\n });\r\n if (self.isUploadable) {\r\n previewCache.data[self.id] = {};\r\n }\r\n self.$preview.html('');\r\n cap = (!self.overwriteInitial && self.initialCaption.length > 0) ? self.initialCaption : '';\r\n self.setCaption(cap);\r\n self.$caption.attr('title', '');\r\n addCss(self.$container, 'file-input-new');\r\n }\r\n if (self.$container.find('.file-preview-frame').length === 0) {\r\n if (!self.initCaption()) {\r\n self.$captionContainer.find('.kv-caption-icon').hide();\r\n }\r\n }\r\n self.hideFileIcon();\r\n self.raise('filecleared');\r\n self.$captionContainer.focus();\r\n self.setFileDropZoneTitle();\r\n },\r\n resetPreview: function () {\r\n var self = this, out, cap;\r\n if (previewCache.count(self.id)) {\r\n out = previewCache.out(self.id);\r\n self.$preview.html(out.content);\r\n cap = self.initialCaption ? self.initialCaption : out.caption;\r\n self.setCaption(cap);\r\n } else {\r\n self.clearPreview();\r\n self.initCaption();\r\n }\r\n },\r\n resetPreviewThumbs: function (isAjax) {\r\n var self = this, out;\r\n if (isAjax) {\r\n self.clearPreview();\r\n self.filestack = [];\r\n return;\r\n }\r\n if (self.hasInitialPreview()) {\r\n out = previewCache.out(self.id);\r\n self.$preview.html(out.content);\r\n self.setCaption(out.caption);\r\n self.initPreviewDeletes();\r\n } else {\r\n self.clearPreview();\r\n }\r\n },\r\n reset: function () {\r\n var self = this;\r\n self.resetPreview();\r\n self.$container.find('.fileinput-filename').text('');\r\n self.raise('filereset');\r\n addCss(self.$container, 'file-input-new');\r\n if (self.$preview.find('.file-preview-frame').length || self.isUploadable && self.dropZoneEnabled) {\r\n self.$container.removeClass('file-input-new');\r\n }\r\n self.setFileDropZoneTitle();\r\n self.filestack = [];\r\n self.formdata = {};\r\n },\r\n disable: function () {\r\n var self = this;\r\n self.isDisabled = true;\r\n self.raise('filedisabled');\r\n self.$element.attr('disabled', 'disabled');\r\n self.$container.find(\".kv-fileinput-caption\").addClass(\"file-caption-disabled\");\r\n self.$container.find(\".btn-file, .fileinput-remove, .fileinput-upload, .file-preview-frame button\").attr(\"disabled\",\r\n true);\r\n self.initDragDrop();\r\n },\r\n enable: function () {\r\n var self = this;\r\n self.isDisabled = false;\r\n self.raise('fileenabled');\r\n self.$element.removeAttr('disabled');\r\n self.$container.find(\".kv-fileinput-caption\").removeClass(\"file-caption-disabled\");\r\n self.$container.find(\".btn-file, .fileinput-remove, .fileinput-upload, .file-preview-frame button\").removeAttr(\"disabled\");\r\n self.initDragDrop();\r\n },\r\n getThumbs: function (css) {\r\n css = css || '';\r\n return this.$preview.find('.file-preview-frame:not(.file-preview-initial)' + css);\r\n },\r\n getExtraData: function (previewId, index) {\r\n var self = this, data = self.uploadExtraData;\r\n if (typeof self.uploadExtraData === \"function\") {\r\n data = self.uploadExtraData(previewId, index);\r\n }\r\n return data;\r\n },\r\n uploadExtra: function (previewId, index) {\r\n var self = this, data = self.getExtraData(previewId, index);\r\n if (data.length === 0) {\r\n return;\r\n }\r\n $.each(data, function (key, value) {\r\n self.formdata.append(key, value);\r\n });\r\n },\r\n setAsyncUploadStatus: function (previewId, pct, total) {\r\n var self = this, sum = 0;\r\n self.setProgress(pct, $('#' + previewId).find('.file-thumb-progress'));\r\n self.uploadStatus[previewId] = pct;\r\n $.each(self.uploadStatus, function (key, value) {\r\n sum += value;\r\n });\r\n self.setProgress(Math.ceil(sum / total));\r\n\r\n },\r\n initXhr: function (xhrobj, previewId, fileCount) {\r\n var self = this;\r\n if (xhrobj.upload) {\r\n xhrobj.upload.addEventListener('progress', function (event) {\r\n var pct = 0, position = event.loaded || event.position, total = event.total;\r\n if (event.lengthComputable) {\r\n pct = Math.ceil(position / total * 100);\r\n }\r\n if (previewId) {\r\n self.setAsyncUploadStatus(previewId, pct, fileCount);\r\n } else {\r\n self.setProgress(Math.ceil(pct));\r\n }\r\n }, false);\r\n }\r\n return xhrobj;\r\n },\r\n ajaxSubmit: function (fnBefore, fnSuccess, fnComplete, fnError, previewId, index) {\r\n var self = this, settings;\r\n self.raise('filepreajax', [previewId, index]);\r\n self.uploadExtra(previewId, index);\r\n settings = $.extend({\r\n xhr: function () {\r\n var xhrobj = $.ajaxSettings.xhr();\r\n return self.initXhr(xhrobj, previewId, self.getFileStack().length);\r\n },\r\n url: self.uploadUrl,\r\n type: 'POST',\r\n dataType: 'json',\r\n data: self.formdata,\r\n cache: false,\r\n processData: false,\r\n contentType: false,\r\n beforeSend: fnBefore,\r\n success: fnSuccess,\r\n complete: fnComplete,\r\n error: fnError\r\n }, self.ajaxSettings);\r\n self.ajaxRequests.push($.ajax(settings));\r\n },\r\n initUploadSuccess: function (out, $thumb, allFiles) {\r\n var self = this, append, data, index, $newThumb, content, config, tags;\r\n if (typeof out !== 'object' || $.isEmptyObject(out)) {\r\n return;\r\n }\r\n if (out.initialPreview !== undefined && out.initialPreview.length > 0) {\r\n self.hasInitData = true;\r\n content = out.initialPreview || [];\r\n config = out.initialPreviewConfig || [];\r\n tags = out.initialPreviewThumbTags || [];\r\n append = out.append === undefined || out.append ? true : false;\r\n self.overwriteInitial = false;\r\n if ($thumb !== undefined && !allFiles) {\r\n index = previewCache.add(self.id, content, config[0], tags[0], append);\r\n data = previewCache.get(self.id, index, false);\r\n $newThumb = $(data).hide();\r\n $thumb.after($newThumb).fadeOut('slow', function () {\r\n $newThumb.fadeIn('slow').css('display:inline-block');\r\n self.initPreviewDeletes();\r\n self.clearFileInput();\r\n $thumb.remove();\r\n });\r\n } else {\r\n if (allFiles) {\r\n self.uploadCache.content.push(content[0]);\r\n self.uploadCache.config.push(config[0]);\r\n self.uploadCache.tags.push(tags[0]);\r\n self.uploadCache.append = append;\r\n } else {\r\n previewCache.set(self.id, content, config, tags, append);\r\n self.initPreview();\r\n self.initPreviewDeletes();\r\n }\r\n }\r\n }\r\n },\r\n initSuccessThumbs: function () {\r\n var self = this;\r\n self.getThumbs('.file-preview-success').each(function () {\r\n var $thumb = $(this), $remove = $thumb.find('.kv-file-remove');\r\n $remove.removeAttr('disabled');\r\n handler($remove, 'click', function () {\r\n var out = self.raise('filesuccessremove', [$thumb.attr('id'), $thumb.data('fileindex')]);\r\n self.cleanMemory($thumb);\r\n if (out === false) {\r\n return;\r\n }\r\n $thumb.fadeOut('slow', function () {\r\n $thumb.remove();\r\n if (!self.$preview.find('.file-preview-frame').length) {\r\n self.reset();\r\n }\r\n });\r\n });\r\n });\r\n },\r\n uploadSingle: function (i, files, allFiles) {\r\n var self = this, total = self.getFileStack().length, formdata = new FormData(), outData,\r\n previewId = self.previewInitId + \"-\" + i, $thumb = $('#' + previewId + ':not(.file-preview-initial)'),\r\n chkComplete, $btnUpload = $thumb.find('.kv-file-upload'), $btnDelete = $thumb.find('.kv-file-remove'),\r\n hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData),\r\n resetActions, fnBefore, fnSuccess, fnComplete, fnError, params = {id: previewId, index: i};\r\n self.formdata = formdata;\r\n $('#' + previewId).find('.file-thumb-progress').removeClass('hide');\r\n if (total === 0 || !hasPostData || $btnUpload.hasClass('disabled') || self.abort(params)) {\r\n return;\r\n }\r\n chkComplete = function () {\r\n var $thumbs = self.getThumbs('.file-uploading');\r\n if ($thumbs.length > 0 || self.fileBatchCompleted) {\r\n return;\r\n }\r\n self.fileBatchCompleted = true;\r\n setTimeout(function () {\r\n previewCache.set(self.id, self.uploadCache.content, self.uploadCache.config, self.uploadCache.tags,\r\n self.uploadCache.append);\r\n if (self.hasInitData) {\r\n self.initPreview();\r\n self.initPreviewDeletes();\r\n }\r\n self.unlock();\r\n self.clearFileInput();\r\n self.raise('filebatchuploadcomplete', [self.filestack, self.getExtraData()]);\r\n self.uploadCount = 0;\r\n self.uploadStatus = {};\r\n self.setProgress(100);\r\n }, 100);\r\n };\r\n resetActions = function () {\r\n $btnUpload.removeAttr('disabled');\r\n $btnDelete.removeAttr('disabled');\r\n $thumb.removeClass('file-uploading');\r\n };\r\n fnBefore = function (jqXHR) {\r\n outData = self.getOutData(jqXHR);\r\n if (!$thumb.hasClass('file-preview-success')) {\r\n self.setThumbStatus($thumb, 'Loading');\r\n addCss($thumb, 'file-uploading');\r\n }\r\n $btnUpload.attr('disabled', true);\r\n $btnDelete.attr('disabled', true);\r\n if (!allFiles) {\r\n self.lock();\r\n }\r\n self.raise('filepreupload', [outData, previewId, i]);\r\n params = $.extend(params, outData);\r\n if (self.abort(params)) {\r\n jqXHR.abort();\r\n self.setProgress(100);\r\n }\r\n };\r\n fnSuccess = function (data, textStatus, jqXHR) {\r\n outData = self.getOutData(jqXHR, data);\r\n params = $.extend(params, outData);\r\n setTimeout(function () {\r\n if (isEmpty(data) || isEmpty(data.error)) {\r\n self.setThumbStatus($thumb, 'Success');\r\n $btnUpload.hide();\r\n self.filestack[i] = undefined;\r\n self.raise('fileuploaded', [outData, previewId, i]);\r\n self.initUploadSuccess(data, $thumb, allFiles);\r\n if (!allFiles) {\r\n self.resetFileStack();\r\n }\r\n } else {\r\n self.setThumbStatus($thumb, 'Error');\r\n self.showUploadError(data.error, params);\r\n }\r\n }, 100);\r\n };\r\n fnComplete = function () {\r\n setTimeout(function () {\r\n resetActions();\r\n if (!allFiles) {\r\n self.unlock(false);\r\n } else {\r\n chkComplete();\r\n }\r\n self.initSuccessThumbs();\r\n }, 100);\r\n };\r\n fnError = function (jqXHR, textStatus, errorThrown) {\r\n var errMsg = self.parseError(jqXHR, errorThrown, (allFiles ? files[i].name : null));\r\n self.uploadStatus[previewId] = 100;\r\n self.setThumbStatus($thumb, 'Error');\r\n params = $.extend(params, self.getOutData(jqXHR));\r\n self.showUploadError(errMsg, params);\r\n };\r\n formdata.append(self.uploadFileAttr, files[i]);\r\n formdata.append('file_id', i);\r\n self.ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError, previewId, i);\r\n },\r\n uploadBatch: function () {\r\n var self = this, files = self.filestack, total = files.length, params = {},\r\n hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData),\r\n setAllUploaded, fnBefore, fnSuccess, fnComplete, fnError;\r\n self.formdata = new FormData();\r\n if (total === 0 || !hasPostData || self.abort(params)) {\r\n return;\r\n }\r\n setAllUploaded = function () {\r\n $.each(files, function (key) {\r\n self.filestack[key] = undefined;\r\n });\r\n self.clearFileInput();\r\n };\r\n fnBefore = function (jqXHR) {\r\n self.lock();\r\n var outData = self.getOutData(jqXHR);\r\n if (self.showPreview) {\r\n self.getThumbs().each(function () {\r\n var $thumb = $(this), $btnUpload = $thumb.find('.kv-file-upload'),\r\n $btnDelete = $thumb.find('.kv-file-remove');\r\n if (!$thumb.hasClass('file-preview-success')) {\r\n self.setThumbStatus($thumb, 'Loading');\r\n addCss($thumb, 'file-uploading');\r\n }\r\n $btnUpload.attr('disabled', true);\r\n $btnDelete.attr('disabled', true);\r\n });\r\n }\r\n self.raise('filebatchpreupload', [outData]);\r\n if (self.abort(outData)) {\r\n jqXHR.abort();\r\n self.setProgress(100);\r\n }\r\n };\r\n fnSuccess = function (data, textStatus, jqXHR) {\r\n var outData = self.getOutData(jqXHR, data), $thumbs = self.getThumbs(), key = 0,\r\n keys = isEmpty(data) || isEmpty(data.errorkeys) ? [] : data.errorkeys;\r\n if (isEmpty(data) || isEmpty(data.error)) {\r\n self.raise('filebatchuploadsuccess', [outData]);\r\n setAllUploaded();\r\n if (self.showPreview) {\r\n $thumbs.each(function () {\r\n var $thumb = $(this), $btnUpload = $thumb.find('.kv-file-upload');\r\n $thumb.find('.kv-file-upload').hide();\r\n self.setThumbStatus($thumb, 'Success');\r\n $thumb.removeClass('file-uploading');\r\n $btnUpload.removeAttr('disabled');\r\n });\r\n self.initUploadSuccess(data);\r\n } else {\r\n self.reset();\r\n }\r\n } else {\r\n if (self.showPreview) {\r\n $thumbs.each(function () {\r\n var $thumb = $(this), $btnDelete = $thumb.find('.kv-file-remove'),\r\n $btnUpload = $thumb.find('.kv-file-upload');\r\n $thumb.removeClass('file-uploading');\r\n $btnUpload.removeAttr('disabled');\r\n $btnDelete.removeAttr('disabled');\r\n if (keys.length === 0) {\r\n self.setThumbStatus($thumb, 'Error');\r\n return;\r\n }\r\n if ($.inArray(key, keys) !== -1) {\r\n self.setThumbStatus($thumb, 'Error');\r\n } else {\r\n $thumb.find('.kv-file-upload').hide();\r\n self.setThumbStatus($thumb, 'Success');\r\n self.filestack[key] = undefined;\r\n }\r\n key++;\r\n });\r\n self.initUploadSuccess(data);\r\n }\r\n self.showUploadError(data.error, outData, 'filebatchuploaderror');\r\n }\r\n };\r\n fnComplete = function () {\r\n self.setProgress(100);\r\n self.unlock();\r\n self.initSuccessThumbs();\r\n self.clearFileInput();\r\n self.raise('filebatchuploadcomplete', [self.filestack, self.getExtraData()]);\r\n };\r\n fnError = function (jqXHR, textStatus, errorThrown) {\r\n var outData = self.getOutData(jqXHR), errMsg = self.parseError(jqXHR, errorThrown);\r\n self.showUploadError(errMsg, outData, 'filebatchuploaderror');\r\n self.uploadFileCount = total - 1;\r\n if (!self.showPreview) {\r\n return;\r\n }\r\n self.getThumbs().each(function () {\r\n var $thumb = $(this), key = $thumb.attr('data-fileindex');\r\n $thumb.removeClass('file-uploading');\r\n if (self.filestack[key] !== undefined) {\r\n self.setThumbStatus($thumb, 'Error');\r\n }\r\n });\r\n self.getThumbs().removeClass('file-uploading');\r\n self.getThumbs(' .kv-file-upload').removeAttr('disabled');\r\n self.getThumbs(' .kv-file-delete').removeAttr('disabled');\r\n };\r\n $.each(files, function (key, data) {\r\n if (!isEmpty(files[key])) {\r\n self.formdata.append(self.uploadFileAttr, data);\r\n }\r\n });\r\n self.ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError);\r\n },\r\n uploadExtraOnly: function () {\r\n var self = this, params = {}, fnBefore, fnSuccess, fnComplete, fnError;\r\n self.formdata = new FormData();\r\n if (self.abort(params)) {\r\n return;\r\n }\r\n fnBefore = function (jqXHR) {\r\n self.lock();\r\n var outData = self.getOutData(jqXHR);\r\n self.raise('filebatchpreupload', [outData]);\r\n self.setProgress(50);\r\n params.data = outData;\r\n params.xhr = jqXHR;\r\n if (self.abort(params)) {\r\n jqXHR.abort();\r\n self.setProgress(100);\r\n }\r\n };\r\n fnSuccess = function (data, textStatus, jqXHR) {\r\n var outData = self.getOutData(jqXHR, data);\r\n if (isEmpty(data) || isEmpty(data.error)) {\r\n self.raise('filebatchuploadsuccess', [outData]);\r\n self.clearFileInput();\r\n self.initUploadSuccess(data);\r\n } else {\r\n self.showUploadError(data.error, outData, 'filebatchuploaderror');\r\n }\r\n };\r\n fnComplete = function () {\r\n self.setProgress(100);\r\n self.unlock();\r\n self.clearFileInput();\r\n self.raise('filebatchuploadcomplete', [self.filestack, self.getExtraData()]);\r\n };\r\n fnError = function (jqXHR, textStatus, errorThrown) {\r\n var outData = self.getOutData(jqXHR), errMsg = self.parseError(jqXHR, errorThrown);\r\n params.data = outData;\r\n self.showUploadError(errMsg, outData, 'filebatchuploaderror');\r\n };\r\n self.ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError);\r\n },\r\n hideFileIcon: function () {\r\n if (this.overwriteInitial) {\r\n this.$captionContainer.find('.kv-caption-icon').hide();\r\n }\r\n },\r\n showFileIcon: function () {\r\n this.$captionContainer.find('.kv-caption-icon').show();\r\n },\r\n addError: function (msg) {\r\n var self = this, $error = self.$errorContainer;\r\n if (msg && $error.length) {\r\n $error.html(self.errorCloseButton + msg);\r\n $error.find('.kv-error-close').off('click').on('click', function () {\r\n $error.fadeOut('slow');\r\n });\r\n }\r\n },\r\n resetErrors: function (fade) {\r\n var self = this, $error = self.$errorContainer;\r\n self.isError = false;\r\n self.$container.removeClass('has-error');\r\n $error.html('');\r\n if (fade) {\r\n $error.fadeOut('slow');\r\n } else {\r\n $error.hide();\r\n }\r\n },\r\n showFolderError: function (folders) {\r\n var self = this, $error = self.$errorContainer;\r\n if (!folders) {\r\n return;\r\n }\r\n self.addError(self.msgFoldersNotAllowed.replace(/\\{n\\}/g, folders));\r\n $error.fadeIn(800);\r\n addCss(self.$container, 'has-error');\r\n self.raise('filefoldererror', [folders]);\r\n },\r\n showUploadError: function (msg, params, event) {\r\n var self = this, $error = self.$errorContainer, ev = event || 'fileuploaderror',\r\n e = params && params.id ? '
  5. ' + msg + '
  6. ' : '
  7. ' + msg + '
  8. ';\r\n if ($error.find('ul').length === 0) {\r\n self.addError('
      ' + e + '
    ');\r\n } else {\r\n $error.find('ul').append(e);\r\n }\r\n $error.fadeIn(800);\r\n self.raise(ev, [params]);\r\n self.$container.removeClass('file-input-new');\r\n addCss(self.$container, 'has-error');\r\n return true;\r\n },\r\n showError: function (msg, params, event) {\r\n var self = this, $error = self.$errorContainer, ev = event || 'fileerror';\r\n params = params || {};\r\n params.reader = self.reader;\r\n self.addError(msg);\r\n $error.fadeIn(800);\r\n self.raise(ev, [params]);\r\n if (!self.isUploadable) {\r\n self.clearFileInput();\r\n }\r\n self.$container.removeClass('file-input-new');\r\n addCss(self.$container, 'has-error');\r\n self.$btnUpload.attr('disabled', true);\r\n return true;\r\n },\r\n errorHandler: function (evt, caption) {\r\n var self = this, err = evt.target.error;\r\n switch (err.code) {\r\n case err.NOT_FOUND_ERR:\r\n self.showError(self.msgFileNotFound.replace('{name}', caption));\r\n break;\r\n case err.SECURITY_ERR:\r\n self.showError(self.msgFileSecured.replace('{name}', caption));\r\n break;\r\n case err.NOT_READABLE_ERR:\r\n self.showError(self.msgFileNotReadable.replace('{name}', caption));\r\n break;\r\n case err.ABORT_ERR:\r\n self.showError(self.msgFilePreviewAborted.replace('{name}', caption));\r\n break;\r\n default:\r\n self.showError(self.msgFilePreviewError.replace('{name}', caption));\r\n }\r\n },\r\n parseFileType: function (file) {\r\n var self = this, isValid, vType, cat, i;\r\n for (i = 0; i < defaultPreviewTypes.length; i += 1) {\r\n cat = defaultPreviewTypes[i];\r\n isValid = isSet(cat, self.fileTypeSettings) ? self.fileTypeSettings[cat] : defaultFileTypeSettings[cat];\r\n vType = isValid(file.type, file.name) ? cat : '';\r\n if (!isEmpty(vType)) {\r\n return vType;\r\n }\r\n }\r\n return 'other';\r\n },\r\n previewDefault: function (file, previewId, isDisabled) {\r\n if (!this.showPreview) {\r\n return;\r\n }\r\n var self = this, data = objUrl.createObjectURL(file), frameClass = '', fname = file ? file.name : '',\r\n config = self.previewSettings.other || defaultPreviewSettings.other,\r\n footer = self.renderFileFooter(file.name, config.width),\r\n ind = previewId.slice(previewId.lastIndexOf('-') + 1),\r\n previewOtherTemplate = self.parseFilePreviewIcon(self.getPreviewTemplate('other'), fname);\r\n if (isDisabled === true) {\r\n frameClass = ' btn disabled';\r\n if (!self.isUploadable) {\r\n footer += '
    ' + self.fileActionSettings.indicatorError + '
    ';\r\n }\r\n }\r\n self.$preview.append(\"\\n\" + previewOtherTemplate\r\n .replace(/\\{previewId\\}/g, previewId)\r\n .replace(/\\{frameClass\\}/g, frameClass)\r\n .replace(/\\{fileindex\\}/g, ind)\r\n .replace(/\\{caption\\}/g, self.slug(file.name))\r\n .replace(/\\{width\\}/g, config.width)\r\n .replace(/\\{height\\}/g, config.height)\r\n .replace(/\\{type\\}/g, file.type)\r\n .replace(/\\{data\\}/g, data)\r\n .replace(/\\{footer\\}/g, footer));\r\n if (isDisabled === true && self.isUploadable) {\r\n self.setThumbStatus($('#' + previewId), 'Error');\r\n }\r\n },\r\n previewFile: function (i, file, theFile, previewId, data) {\r\n if (!this.showPreview) {\r\n return;\r\n }\r\n var self = this, cat = self.parseFileType(file), fname = file ? file.name : '', caption = self.slug(fname),\r\n content, strText, types = self.allowedPreviewTypes, mimes = self.allowedPreviewMimeTypes,\r\n tmplt = self.getPreviewTemplate(cat), chkTypes = types && types.indexOf(cat) >= 0, id,\r\n config = isSet(cat, self.previewSettings) ? self.previewSettings[cat] : defaultPreviewSettings[cat],\r\n chkMimes = mimes && mimes.indexOf(file.type) !== -1,\r\n footer = self.renderFileFooter(caption, config.width), modal = '',\r\n ind = previewId.slice(previewId.lastIndexOf('-') + 1);\r\n if (chkTypes || chkMimes) {\r\n tmplt = self.parseFilePreviewIcon(tmplt, fname.split('.').pop());\r\n if (cat === 'text') {\r\n strText = htmlEncode(theFile.target.result);\r\n id = 'text-' + uniqId();\r\n content = tmplt.replace(/\\{zoom\\}/g, self.getLayoutTemplate('zoom'));\r\n modal = self.getLayoutTemplate('modal').replace('{id}', id)\r\n .replace(/\\{title\\}/g, caption)\r\n .replace(/\\{body\\}/g, strText).replace(/\\{heading\\}/g, self.msgZoomModalHeading);\r\n content = content.replace(/\\{previewId\\}/g, previewId).replace(/\\{caption\\}/g, caption)\r\n .replace(/\\{width\\}/g, config.width).replace(/\\{height\\}/g, config.height)\r\n .replace(/\\{frameClass\\}/g, '').replace(/\\{zoomInd\\}/g, self.zoomIndicator)\r\n .replace(/\\{footer\\}/g, footer).replace(/\\{fileindex\\}/g, ind)\r\n .replace(/\\{type\\}/g, file.type).replace(/\\{zoomTitle\\}/g, self.msgZoomTitle)\r\n .replace(/\\{dialog\\}/g, \"$('#\" + id + \"').modal('show')\")\r\n .replace(/\\{data\\}/g, strText) + modal;\r\n } else {\r\n content = tmplt.replace(/\\{previewId\\}/g, previewId).replace(/\\{caption\\}/g, caption)\r\n .replace(/\\{frameClass\\}/g, '').replace(/\\{type\\}/g, file.type).replace(/\\{fileindex\\}/g, ind)\r\n .replace(/\\{width\\}/g, config.width).replace(/\\{height\\}/g, config.height)\r\n .replace(/\\{footer\\}/g, footer).replace(/\\{data\\}/g, data);\r\n }\r\n self.$preview.append(\"\\n\" + content);\r\n self.validateImage(i, previewId, caption);\r\n } else {\r\n self.previewDefault(file, previewId);\r\n }\r\n },\r\n slugDefault: function (text) {\r\n return isEmpty(text) ? '' : text.split(/(\\\\|\\/)/g).pop().replace(/[^\\w\\u00C0-\\u017F\\-.\\\\\\/ ]+/g, '');\r\n },\r\n getFileStack: function (skipNull) {\r\n var self = this;\r\n return self.filestack.filter(function (n) {\r\n return (skipNull ? n !== undefined : n !== undefined && n !== null);\r\n });\r\n },\r\n readFiles: function (files) {\r\n this.reader = new FileReader();\r\n var self = this, $el = self.$element, $preview = self.$preview, reader = self.reader,\r\n $container = self.$previewContainer, $status = self.$previewStatus, msgLoading = self.msgLoading,\r\n msgProgress = self.msgProgress, previewInitId = self.previewInitId, numFiles = files.length,\r\n settings = self.fileTypeSettings, ctr = self.filestack.length, readFile,\r\n throwError = function (msg, file, previewId, index) {\r\n var p1 = $.extend(self.getOutData({}, {}, files), {id: previewId, index: index}),\r\n p2 = {id: previewId, index: index, file: file, files: files};\r\n self.previewDefault(file, previewId, true);\r\n if (self.isUploadable) {\r\n self.filestack.push(undefined);\r\n }\r\n setTimeout(readFile(index + 1), 100);\r\n self.initFileActions();\r\n return self.isUploadable ? self.showUploadError(msg, p1) : self.showError(msg, p2);\r\n };\r\n\r\n readFile = function (i) {\r\n if (isEmpty($el.attr('multiple'))) {\r\n numFiles = 5;\r\n }\r\n if (i >= numFiles) {\r\n if (self.isUploadable && self.filestack.length > 0) {\r\n self.raise('filebatchselected', [self.getFileStack()]);\r\n } else {\r\n self.raise('filebatchselected', [files]);\r\n }\r\n $container.removeClass('loading');\r\n $status.html('');\r\n return;\r\n }\r\n var node = ctr + i, previewId = previewInitId + \"-\" + node, isText, file = files[i],\r\n caption = self.slug(file.name), fileSize = (file.size || 0) / 1000, checkFile, fileExtExpr = '',\r\n previewData = objUrl.createObjectURL(file), fileCount = 0, j, msg, typ, chk,\r\n fileTypes = self.allowedFileTypes, strTypes = isEmpty(fileTypes) ? '' : fileTypes.join(', '),\r\n fileExt = self.allowedFileExtensions, strExt = isEmpty(fileExt) ? '' : fileExt.join(', ');\r\n if (!isEmpty(fileExt)) {\r\n fileExtExpr = new RegExp('\\\\.(' + fileExt.join('|') + ')$', 'i');\r\n }\r\n fileSize = fileSize.toFixed(2);\r\n if (self.maxFileSize > 0 && fileSize > self.maxFileSize) {\r\n msg = self.msgSizeTooLarge.replace('{name}', caption)\r\n .replace('{size}', fileSize)\r\n .replace('{maxSize}', self.maxFileSize);\r\n self.isError = throwError(msg, file, previewId, i);\r\n return;\r\n }\r\n if (!isEmpty(fileTypes) && isArray(fileTypes)) {\r\n for (j = 0; j < fileTypes.length; j += 1) {\r\n typ = fileTypes[j];\r\n checkFile = settings[typ];\r\n chk = (checkFile !== undefined && checkFile(file.type, caption));\r\n fileCount += isEmpty(chk) ? 0 : chk.length;\r\n }\r\n if (fileCount === 0) {\r\n msg = self.msgInvalidFileType.replace('{name}', caption).replace('{types}', strTypes);\r\n self.isError = throwError(msg, file, previewId, i);\r\n return;\r\n }\r\n }\r\n if (fileCount === 0 && !isEmpty(fileExt) && isArray(fileExt) && !isEmpty(fileExtExpr)) {\r\n chk = caption.match(fileExtExpr);\r\n fileCount += isEmpty(chk) ? 0 : chk.length;\r\n if (fileCount === 0) {\r\n msg = self.msgInvalidFileExtension.replace('{name}', caption).replace('{extensions}',\r\n strExt);\r\n self.isError = throwError(msg, file, previewId, i);\r\n return;\r\n }\r\n }\r\n if (!self.showPreview) {\r\n self.filestack.push(file);\r\n setTimeout(readFile(i + 1), 100);\r\n self.raise('fileloaded', [file, previewId, i, reader]);\r\n return;\r\n }\r\n if ($preview.length > 0 && FileReader !== undefined) {\r\n $status.html(msgLoading.replace('{index}', i + 1).replace('{files}', numFiles));\r\n $container.addClass('loading');\r\n reader.onerror = function (evt) {\r\n self.errorHandler(evt, caption);\r\n };\r\n reader.onload = function (theFile) {\r\n self.previewFile(i, file, theFile, previewId, previewData);\r\n self.initFileActions();\r\n };\r\n reader.onloadend = function () {\r\n msg = msgProgress\r\n .replace('{index}', i + 1).replace('{files}', numFiles)\r\n .replace('{percent}', 50).replace('{name}', caption);\r\n setTimeout(function () {\r\n $status.html(msg);\r\n self.updateFileDetails(numFiles);\r\n readFile(i + 1);\r\n }, 100);\r\n self.raise('fileloaded', [file, previewId, i, reader]);\r\n };\r\n reader.onprogress = function (data) {\r\n if (data.lengthComputable) {\r\n var fact = (data.loaded / data.total) * 100, progress = Math.ceil(fact);\r\n msg = msgProgress.replace('{index}', i + 1).replace('{files}', numFiles)\r\n .replace('{percent}', progress).replace('{name}', caption);\r\n setTimeout(function () {\r\n $status.html(msg);\r\n }, 100);\r\n }\r\n };\r\n isText = isSet('text', settings) ? settings.text : defaultFileTypeSettings.text;\r\n if (isText(file.type, caption)) {\r\n reader.readAsText(file, self.textEncoding);\r\n } else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n } else {\r\n self.previewDefault(file, previewId);\r\n setTimeout(function () {\r\n readFile(i + 1);\r\n self.updateFileDetails(numFiles);\r\n }, 100);\r\n self.raise('fileloaded', [file, previewId, i, reader]);\r\n }\r\n self.filestack.push(file);\r\n };\r\n\r\n readFile(0);\r\n self.updateFileDetails(numFiles, false);\r\n },\r\n updateFileDetails: function (numFiles) {\r\n var self = this, $el = self.$element, fileStack = self.getFileStack(),\r\n name = $el.val() || (fileStack.length && fileStack[0].name) || '', label = self.slug(name),\r\n n = self.isUploadable ? fileStack.length : numFiles,\r\n nFiles = previewCache.count(self.id) + n,\r\n log = n > 1 ? self.getMsgSelected(nFiles) : label;\r\n if (self.isError) {\r\n self.$previewContainer.removeClass('loading');\r\n self.$previewStatus.html('');\r\n self.$captionContainer.find('.kv-caption-icon').hide();\r\n } else {\r\n self.showFileIcon();\r\n }\r\n self.setCaption(log, self.isError);\r\n self.$container.removeClass('file-input-new file-input-ajax-new');\r\n if (arguments.length === 1) {\r\n self.raise('fileselect', [numFiles, label]);\r\n }\r\n if (previewCache.count(self.id)) {\r\n self.initPreviewDeletes();\r\n }\r\n },\r\n validateMinCount: function () {\r\n var self = this, len = self.isUploadable ? self.getFileStack().length : self.$element.get(0).files.length;\r\n if (self.validateInitialCount && self.minFileCount > 0 && self.getFileCount(len - 1) < self.minFileCount) {\r\n self.noFilesError({});\r\n return false;\r\n }\r\n return true;\r\n },\r\n getFileCount: function (fileCount) {\r\n var self = this, addCount = 0;\r\n if (self.validateInitialCount && !self.overwriteInitial) {\r\n addCount = previewCache.count(self.id);\r\n fileCount += addCount;\r\n }\r\n return fileCount;\r\n },\r\n change: function (e) {\r\n var self = this, $el = self.$element;\r\n if (!self.isUploadable && isEmpty($el.val()) && self.fileInputCleared) { // IE 11 fix\r\n self.fileInputCleared = false;\r\n return;\r\n }\r\n self.fileInputCleared = false;\r\n var tfiles, msg, total, isDragDrop = arguments.length > 1,\r\n files = isDragDrop ? e.originalEvent.dataTransfer.files : $el.get(0).files,\r\n isSingleUpload = isEmpty($el.attr('multiple')), i = 0, f, n, folders = 0,\r\n ctr = self.filestack.length, isAjaxUpload = self.isUploadable, len,\r\n flagSingle = (isSingleUpload && ctr > 0),\r\n throwError = function (mesg, file, previewId, index) {\r\n var p1 = $.extend(self.getOutData({}, {}, files), {id: previewId, index: index}),\r\n p2 = {id: previewId, index: index, file: file, files: files};\r\n return self.isUploadable ? self.showUploadError(mesg, p1) : self.showError(mesg, p2);\r\n };\r\n self.reader = null;\r\n self.resetUpload();\r\n self.hideFileIcon();\r\n if (self.isUploadable) {\r\n self.$container.find('.file-drop-zone .' + self.dropZoneTitleClass).remove();\r\n }\r\n if (isDragDrop) {\r\n tfiles = [];\r\n while (files[i]) {\r\n f = files[i];\r\n if (!f.type && f.size % 4096 === 0) {\r\n folders++;\r\n } else {\r\n tfiles.push(f);\r\n }\r\n i++;\r\n }\r\n } else {\r\n if (e.target.files === undefined) {\r\n tfiles = e.target && e.target.value ? [\r\n {name: e.target.value.replace(/^.+\\\\/, '')}\r\n ] : [];\r\n } else {\r\n tfiles = e.target.files;\r\n }\r\n }\r\n if (isEmpty(tfiles) || tfiles.length === 0) {\r\n if (!isAjaxUpload) {\r\n self.clear();\r\n }\r\n self.showFolderError(folders);\r\n self.raise('fileselectnone');\r\n return;\r\n }\r\n self.resetErrors();\r\n len = tfiles.length;\r\n total = self.isUploadable ? self.getFileStack().length + len : len;\r\n total = self.getFileCount(total);\r\n if (self.maxFileCount > 0 && total > self.maxFileCount) {\r\n if (!self.autoReplace || len > self.maxFileCount) {\r\n n = (self.autoReplace && len > self.maxFileCount) ? len : total;\r\n msg = self.msgFilesTooMany.replace('{m}', self.maxFileCount).replace('{n}', n);\r\n self.isError = throwError(msg, null, null, null);\r\n self.$captionContainer.find('.kv-caption-icon').hide();\r\n self.setCaption('', true);\r\n self.$container.removeClass('file-input-new file-input-ajax-new');\r\n return;\r\n }\r\n if (total > self.maxFileCount) {\r\n self.resetPreviewThumbs(isAjaxUpload);\r\n }\r\n } else {\r\n if (!isAjaxUpload || flagSingle) {\r\n self.resetPreviewThumbs(false);\r\n if (flagSingle) {\r\n self.filestack = [];\r\n }\r\n } else {\r\n if (isAjaxUpload && ctr === 0 && (!previewCache.count(self.id) || self.overwriteInitial)) {\r\n self.resetPreviewThumbs(true);\r\n }\r\n }\r\n }\r\n if (self.isPreviewable) {\r\n self.readFiles(tfiles);\r\n } else {\r\n self.updateFileDetails(1);\r\n }\r\n self.showFolderError(folders);\r\n },\r\n validateImage: function (i, previewId, fname) {\r\n var self = this, $preview = self.$preview, params, w1, w2,\r\n $thumb = $preview.find(\"#\" + previewId), $img = $thumb.find('img');\r\n fname = fname || 'Untitled';\r\n if (!$img.length) {\r\n return;\r\n }\r\n handler($img, 'load', function () {\r\n w1 = $thumb.width();\r\n w2 = $preview.width();\r\n if (w1 > w2) {\r\n $img.css('width', '100%');\r\n $thumb.css('width', '97%');\r\n }\r\n params = {ind: i, id: previewId};\r\n self.checkDimensions(i, 'Small', $img, $thumb, fname, 'Width', params);\r\n self.checkDimensions(i, 'Small', $img, $thumb, fname, 'Height', params);\r\n self.checkDimensions(i, 'Large', $img, $thumb, fname, 'Width', params);\r\n self.checkDimensions(i, 'Large', $img, $thumb, fname, 'Height', params);\r\n self.raise('fileimageloaded', [previewId]);\r\n objUrl.revokeObjectURL($img.attr('src'));\r\n });\r\n },\r\n checkDimensions: function (i, chk, $img, $thumb, fname, type, params) {\r\n var self = this, msg, dim, tag = chk === 'Small' ? 'min' : 'max',\r\n limit = self[tag + 'Image' + type], $imgEl, isValid;\r\n if (isEmpty(limit) || !$img.length) {\r\n return;\r\n }\r\n $imgEl = $img[0];\r\n dim = (type === 'Width') ? $imgEl.naturalWidth || $imgEl.width : $imgEl.naturalHeight || $imgEl.height;\r\n isValid = chk === 'Small' ? dim >= limit : dim <= limit;\r\n if (isValid) {\r\n return;\r\n }\r\n msg = self['msgImage' + type + chk].replace('{name}', fname).replace('{size}', limit);\r\n self.showUploadError(msg, params);\r\n self.setThumbStatus($thumb, 'Error');\r\n self.filestack[i] = null;\r\n },\r\n initCaption: function () {\r\n var self = this, cap = self.initialCaption || '';\r\n if (self.overwriteInitial || isEmpty(cap)) {\r\n self.$caption.html('');\r\n return false;\r\n }\r\n self.setCaption(cap);\r\n return true;\r\n },\r\n setCaption: function (content, isError) {\r\n var self = this, title, out;\r\n if (isError) {\r\n title = $('
    ' + self.msgValidationError + '
    ').text();\r\n out = '' +\r\n self.msgValidationErrorIcon + title + '';\r\n } else {\r\n if (isEmpty(content) || self.$caption.length === 0) {\r\n return;\r\n }\r\n title = $('
    ' + content + '
    ').text();\r\n out = self.getLayoutTemplate('icon') + title;\r\n }\r\n self.$caption.html(out);\r\n self.$caption.attr('title', title);\r\n self.$captionContainer.find('.file-caption-ellipsis').attr('title', title);\r\n },\r\n initBrowse: function ($container) {\r\n var self = this;\r\n self.$btnFile = $container.find('.btn-file');\r\n self.$btnFile.append(self.$element);\r\n },\r\n createContainer: function () {\r\n var self = this,\r\n $container = $(document.createElement(\"div\"))\r\n .attr({\"class\": 'file-input file-input-new'})\r\n .html(self.renderMain());\r\n self.$element.before($container);\r\n self.initBrowse($container);\r\n return $container;\r\n },\r\n refreshContainer: function () {\r\n var self = this, $container = self.$container;\r\n $container.before(self.$element);\r\n $container.html(self.renderMain());\r\n self.initBrowse($container);\r\n },\r\n renderMain: function () {\r\n var self = this, dropCss = (self.isUploadable && self.dropZoneEnabled) ? ' file-drop-zone' : '',\r\n preview = self.showPreview ? self.getLayoutTemplate('preview').replace(/\\{class\\}/g, self.previewClass)\r\n .replace(/\\{dropClass\\}/g, dropCss) : '',\r\n css = self.isDisabled ? self.captionClass + ' file-caption-disabled' : self.captionClass,\r\n caption = self.captionTemplate.replace(/\\{class\\}/g, css + ' kv-fileinput-caption');\r\n return self.mainTemplate.replace(/\\{class\\}/g, self.mainClass)\r\n .replace(/\\{preview\\}/g, preview)\r\n .replace(/\\{caption\\}/g, caption)\r\n .replace(/\\{upload\\}/g, self.renderButton('upload'))\r\n .replace(/\\{remove\\}/g, self.renderButton('remove'))\r\n .replace(/\\{cancel\\}/g, self.renderButton('cancel'))\r\n .replace(/\\{browse\\}/g, self.renderButton('browse'));\r\n },\r\n renderButton: function (type) {\r\n var self = this, tmplt = self.getLayoutTemplate('btnDefault'), css = self[type + 'Class'],\r\n title = self[type + 'Title'], icon = self[type + 'Icon'], label = self[type + 'Label'],\r\n status = self.isDisabled ? ' disabled' : '', btnType = 'button';\r\n switch (type) {\r\n case 'remove':\r\n if (!self.showRemove) {\r\n return '';\r\n }\r\n break;\r\n case 'cancel':\r\n if (!self.showCancel) {\r\n return '';\r\n }\r\n css += ' hide';\r\n break;\r\n case 'upload':\r\n if (!self.showUpload) {\r\n return '';\r\n }\r\n if (self.isUploadable && !self.isDisabled) {\r\n tmplt = self.getLayoutTemplate('btnLink').replace('{href}', self.uploadUrl);\r\n } else {\r\n btnType = 'submit';\r\n }\r\n break;\r\n case 'browse':\r\n tmplt = self.getLayoutTemplate('btnBrowse');\r\n break;\r\n default:\r\n return '';\r\n }\r\n css += type === 'browse' ? ' btn-file' : ' fileinput-' + type + ' fileinput-' + type + '-button';\r\n return tmplt.replace('{type}', btnType)\r\n .replace('{css}', css)\r\n .replace('{title}', title)\r\n .replace('{status}', status)\r\n .replace('{icon}', icon)\r\n .replace('{label}', label);\r\n }\r\n };\r\n\r\n //FileInput plugin definition\r\n $.fn.fileinput = function (option) {\r\n if (!hasFileAPISupport() && !isIE(9)) {\r\n return;\r\n }\r\n var args = Array.apply(null, arguments), retvals = [];\r\n args.shift();\r\n this.each(function () {\r\n var $this = $(this), data = $this.data('fileinput'), defaults,\r\n options = typeof option === 'object' && option,\r\n lang = options.language || $this.data('language') || 'en';\r\n\r\n if (!data) {\r\n defaults = $.extend({}, $.fn.fileinput.defaults);\r\n if (lang !== 'en' && !isEmpty($.fn.fileinputLocales[lang])) {\r\n defaults = $.extend(defaults, $.fn.fileinputLocales[lang]);\r\n }\r\n data = new FileInput(this, $.extend(defaults, options, $this.data()));\r\n $this.data('fileinput', data);\r\n }\r\n\r\n if (typeof option === 'string') {\r\n retvals.push(data[option].apply(data, args));\r\n }\r\n });\r\n switch (retvals.length) {\r\n case 0:\r\n return this;\r\n case 1:\r\n return retvals[0];\r\n default:\r\n return retvals;\r\n }\r\n };\r\n\r\n $.fn.fileinput.defaults = {\r\n language: 'en',\r\n showCaption: true,\r\n showPreview: true,\r\n showRemove: true,\r\n showUpload: true,\r\n showCancel: true,\r\n showUploadedThumbs: true,\r\n autoReplace: false,\r\n mainClass: '',\r\n previewClass: '',\r\n captionClass: '',\r\n mainTemplate: null,\r\n initialCaption: '',\r\n initialPreview: [],\r\n initialPreviewDelimiter: '*$$*',\r\n initialPreviewConfig: [],\r\n initialPreviewThumbTags: [],\r\n previewThumbTags: {},\r\n initialPreviewShowDelete: true,\r\n deleteUrl: '',\r\n deleteExtraData: {},\r\n overwriteInitial: true,\r\n layoutTemplates: defaultLayoutTemplates,\r\n previewTemplates: defaultPreviewTemplates,\r\n allowedPreviewTypes: defaultPreviewTypes,\r\n allowedPreviewMimeTypes: null,\r\n allowedFileTypes: null,\r\n allowedFileExtensions: null,\r\n customLayoutTags: {},\r\n customPreviewTags: {},\r\n previewSettings: defaultPreviewSettings,\r\n fileTypeSettings: defaultFileTypeSettings,\r\n previewFileIcon: '',\r\n previewFileIconClass: 'file-icon-4x',\r\n previewFileIconSettings: {},\r\n previewFileExtSettings: {},\r\n browseIcon: '  ',\r\n browseClass: 'btn btn-primary',\r\n removeIcon: ' ',\r\n removeClass: 'btn btn-default',\r\n cancelIcon: ' ',\r\n cancelClass: 'btn btn-default',\r\n uploadIcon: ' ',\r\n uploadClass: 'btn btn-default',\r\n uploadUrl: null,\r\n uploadAsync: true,\r\n uploadExtraData: {},\r\n minImageWidth: null,\r\n minImageHeight: null,\r\n maxImageWidth: null,\r\n maxImageHeight: null,\r\n maxFileSize: 0,\r\n minFileCount: 0,\r\n maxFileCount: 0,\r\n validateInitialCount: false,\r\n msgValidationErrorClass: 'text-danger',\r\n msgValidationErrorIcon: ' ',\r\n msgErrorClass: 'file-error-message',\r\n progressThumbClass: \"progress-bar progress-bar-success progress-bar-striped active\",\r\n progressClass: \"progress-bar progress-bar-success progress-bar-striped active\",\r\n progressCompleteClass: \"progress-bar progress-bar-success\",\r\n previewFileType: 'image',\r\n zoomIndicator: '',\r\n elCaptionContainer: null,\r\n elCaptionText: null,\r\n elPreviewContainer: null,\r\n elPreviewImage: null,\r\n elPreviewStatus: null,\r\n elErrorContainer: null,\r\n errorCloseButton: '×',\r\n slugCallback: null,\r\n dropZoneEnabled: true,\r\n dropZoneTitleClass: 'file-drop-zone-title',\r\n fileActionSettings: {},\r\n otherActionButtons: '',\r\n textEncoding: 'UTF-8',\r\n ajaxSettings: {},\r\n ajaxDeleteSettings: {},\r\n showAjaxErrorDetails: true\r\n };\r\n\r\n $.fn.fileinputLocales.en = {\r\n fileSingle: 'file',\r\n filePlural: 'files',\r\n browseLabel: 'Browse …',\r\n removeLabel: 'Remove',\r\n removeTitle: 'Clear selected files',\r\n cancelLabel: 'Cancel',\r\n cancelTitle: 'Abort ongoing upload',\r\n uploadLabel: 'Upload',\r\n uploadTitle: 'Upload selected files',\r\n msgZoomTitle: 'View details',\r\n msgZoomModalHeading: 'Detailed Preview',\r\n msgSizeTooLarge: 'File \"{name}\" ({size} KB) exceeds maximum allowed upload size of {maxSize} KB.',\r\n msgFilesTooLess: 'You must select at least {n} {files} to upload.',\r\n msgFilesTooMany: 'Number of files selected for upload ({n}) exceeds maximum allowed limit of {m}.',\r\n msgFileNotFound: 'File \"{name}\" not found!',\r\n msgFileSecured: 'Security restrictions prevent reading the file \"{name}\".',\r\n msgFileNotReadable: 'File \"{name}\" is not readable.',\r\n msgFilePreviewAborted: 'File preview aborted for \"{name}\".',\r\n msgFilePreviewError: 'An error occurred while reading the file \"{name}\".',\r\n msgInvalidFileType: 'Invalid type for file \"{name}\". Only \"{types}\" files are supported.',\r\n msgInvalidFileExtension: 'Invalid extension for file \"{name}\". Only \"{extensions}\" files are supported.',\r\n msgUploadAborted: 'The file upload was aborted',\r\n msgValidationError: 'File Upload Error',\r\n msgLoading: 'Loading file {index} of {files} …',\r\n msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',\r\n msgSelected: '{n} {files} selected',\r\n msgFoldersNotAllowed: 'Drag & drop files only! {n} folder(s) dropped were skipped.',\r\n msgImageWidthSmall: 'Width of image file \"{name}\" must be at least {size} px.',\r\n msgImageHeightSmall: 'Height of image file \"{name}\" must be at least {size} px.',\r\n msgImageWidthLarge: 'Width of image file \"{name}\" cannot exceed {size} px.',\r\n msgImageHeightLarge: 'Height of image file \"{name}\" cannot exceed {size} px.',\r\n dropZoneTitle: 'Drag & drop files here …'\r\n };\r\n\r\n $.extend($.fn.fileinput.defaults, $.fn.fileinputLocales.en);\r\n\r\n $.fn.fileinput.Constructor = FileInput;\r\n\r\n /**\r\n * Convert automatically file inputs with class 'file'\r\n * into a bootstrap fileinput control.\r\n */\r\n $(document).ready(function () {\r\n var $input = $('input.file[type=file]');\r\n if ($input.length) {\r\n $input.fileinput();\r\n }\r\n });\r\n})(window.jQuery);","\r\n(function ($) {\r\n\tif (!String.prototype.trim) {\r\n\t\t(function () {\r\n\t\t\t// Make sure we trim BOM and NBSP\r\n\t\t\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\r\n\t\t\tString.prototype.trim = function () {\r\n\t\t\t\treturn this.replace(rtrim, '');\r\n\t\t\t};\r\n\t\t})();\r\n\t}\r\n\r\n\t// Ajaxifies the \"like\" content forms.\r\n\t// Ajaxifies the \"report\" content links.\r\n\t$(function () {\r\n\t\t$(document).on('submit', 'form.js-activity-form', function (e) {\r\n\t\t\tvar t = $(this);\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\t$.ajax({\r\n\t\t\t\ttype: t.attr('method'),\r\n\t\t\t\turl: t.attr('action'),\r\n\t\t\t\tdata: t.serialize(),\r\n\t\t\t\tdataType: 'html',\r\n\t\t\t\tsuccess: function (html) {\r\n\t\t\t\t\tt.replaceWith(html);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t});\r\n\r\n\r\n\t// Handles the dropdowns on the aircraft index page\r\n\t$(function () {\r\n\t\t$('[data-multi-options]').each(function () {\r\n\t\t\tvar context = $(this);\r\n\t\t\tvar source = context.find('.js-source');\r\n\t\t\tvar sink = context.find('.js-sink');\r\n\t\t\tvar data = context.data('multiOptions');\r\n\r\n\t\t\tvar update = function (t) {\r\n\t\t\t\tvar val = t.val();\r\n\t\t\t\tvar found = false;\r\n\r\n\t\t\t\tsink.find('option').remove();\r\n\t\t\t\tsink.append('