{"version":3,"sources":["select-input.js","__utility.js","gaCookie.js","superCookie.js","modernizr.custom-3.6.0.js","jquery-easing.js","_fix.js","fixedfooterscroll.js","accordion-controller.js","anchor-controller.js","breakpoint-reload-controller.js","content-controller.js","content-fixes.js","countdown-controller.js","easteregg.js","fix-flash.js","grid-controller.js","masthead-controller.js","nav-controller-mobile.js","nav-controller.js","overlay-controller.js","pdf-controller.js","polyfill.js","responsive-image-controller.js","results-controller.js","scroll-controller.js","search-controller.js","tab-controller.js","table-controller.js","testimonial-controller.js","ustream-controller.js","classes-start-controller.js","explore-button-controller.js","focus-ring.js","breakpoint-controller.js","modal-controller.js","snhuCookie.js","ad-tracking.js","snhuUtilities.js","video-controller.js","jquery.fancybox.js"],"names":["Listbox","params","container","this","setDefaults","addListeners","formatLocalDate","date","now","Date","tzo","getTimezoneOffset","dif","pad","num","norm","Math","abs","floor","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","isDateInRange","d","start","end","isFinite","valueOf","NaN","getTimeZone","m","exec","toString","isTouchDevice","window","navigator","maxTouchPoints","crumbleCookie","c","cookie_array","document","cookie","split","keyvaluepair","length","key","substring","indexOf","trim","value","gaCookies","utma","utma_array","domainhash","uniqueid","ftime","ltime","stime","sessions","utmb","utmb_array","gifrequest","utmv","utmv_array","utmz","utmz_array","source","medium","name","term","content","gclid","slice","join","utms","i","val","decodeURIComponent","replace","getDomainHash","getUniqueId","getInitialVisitTime","getPreviousVisitTime","getCurrentVisitTime","getSessionCounter","getGifRequests","getUserDefinedValue","getCampaignSource","getCampaignMedium","getCampaignName","getCampaignTerm","getCampaignContent","getGclid","superCookieInit","trackingData","superCookie","load","urls","pageTrack","track","url","URL","code","$","setTimeout","SetDefaults","push","lastVisitDate","setDate","maxLength","shift","save","not","prepend","JSON","stringify","err","pageLoad","sender","args","e","n","t","r","_typeof","s","toUpperCase","a","l","apply","arguments","f","o","u","createElement","w","createElementNS","call","p","getComputedStyle","console","getPropertyValue","error","currentStyle","toLowerCase","body","fake","parseInt","id","appendChild","type","styleSheet","cssText","createTextNode","style","background","overflow","_","parentNode","removeChild","offsetHeight","v","CSS","supports","y","P","modElem","g","h","charAt","b","j","C","S","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","on","addTest","fn","options","addAsyncTest","Modernizr","prototype","documentElement","nodeName","x","_cssomPrefixes","E","prefixes","CSSRule","atRule","_domPrefixes","z","elem","unshift","testAllProps","N","prefixed","aliases","hasOwnProperty","Boolean","className","baseVal","RegExp","T","jQuery","easing","extend","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","undefined","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","MouseEvent","dict","event","createEvent","initMouseEvent","bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","ready","footer","win","scroll","onWindowScroll","scrollTop","stop","slideUp","animationTimeout","slideDown","AccordionController","doc","toggleSpecificAccordion","onAccordionContentLinkClick","wrapTableBodies","BreakpointController","onCrossBreakpoint","each","index","element","Accordion","toggleContent","isMobile","addClass","which","preventDefault","toggleIcon","toggle","currentTarget","disabledSetting","attr","isDesktopDisabled","test","isMobileDisabled","hasClass","find","faq","closest","removeClass","TableController","fixDataTableHeights","stopPropagation","callback","$el","isExperienceEditor","setupDefaults","initExpEd","dom","$trigger","$icon","$content","onTriggerClick","bind","toggleClass","resize","AnchorController","onDisabledClick","BreakpointReloadController","ContentController","header","onMoreClick","onLessClick","buildCollapsibleContent","selectBehavior","fixH2BorderTextWrap","fixContentIframes","first","prev","detach","insertAfter","show","css","margin-left","margin-right","width","fixIframe","iframe","src","minHeight","outerHeight","min-height","html","wrapper","collapsibleContentSection","children","headerTag","headerText","text","firstP","lastP","readMore","readLess","append","fixMLSPage","fixPrezPageMenuActiveClass","location","pathname","masthead","link","defaultCountdownFormat","defaultFormatTime","hours","am","getTimeRemaining","endtime","parse","seconds","minutes","total","days","countdownWrapper","setupCountdown","ustreamCountdownWrapper","ustream","hide","UStream","fixUI","countdownElement","onFinished","dayData","hourData","minuteData","secondData","countdown","Countdown","remaining","target","showDays","showHours","showMinutes","showSeconds","Number","size","String","dateFormatFunc","init","ex","log","getTime","isNaN","that","trigger","onInterval","timer","setInterval","interval","setSeconds","intervalSeconds","onEndReached","clearInterval","countdownFormat","Object","defineProperty","get","konami","kkeys","keydown","is","keyCode","unbind","callee","createFunctionWithTimeout","opt_timeout","called","SnhuUtilities","SetCookie","ga","hitType","eventCategory","eventAction","href","eventLabel","hitCallback","GetCookie","ExpireCookie","fancybox","height","afterShow","focus","fixFlashIE","frames","q","ua","userAgent","GridController","equalizeGrids","clearTimeout","grid","shouldEqualize","columnCount","items","equalizeHeights","equalizeTestimonialContentParagraphs","h4s","p1","p2","selection","equalizeContent","add","el","elHeight","img","MastheadController","popup","mastheadh1","timeout","NavControllerMobile","toggleNav","touchEvent","utilityNav","toggleClick","mobileNav","onSubnavOpenClick","onSubnavBackClick","onCloseClick","OverlayController","isMobileNavDescendant","closeNav","clicked","subnav","nextNav","isSubnav","siblings","openNav","next","quickCloseNav","SearchController","blur","clear","animateBody","display","right","animate","speedyAnimationTimeout","animationOffset","parent","NavController","nav","onMouseOver","onSectionFocusA","onSectionFocusShowMenu","onSectionFocusHideMenu","onSectionFocus","onLeaveNav","hrefProp","mysubmenu","mymenuitem","root","overlay","onOverlayClick","fadeOut","fadeIn","PdfController","onDocumentReady","replaceSVGImages","redrawIcons","fixLastColumnGrid","platform","last","head","getElementsByTagName","ResponsiveImageController","processImages","cleanBgUrl","ret","selector","imageSelector","isBackground","desktopSrc","desktopPosition","desktopSize","tabletSrc","tabletPosition","tabletSize","mobileSrc","mobilePosition","mobileSize","innerWidth","IPAD_LANDSCAPE","PHONE_LANDSCAPE","set","sel","ResultsController","onLoadMoreClick","results","fakeResults","clone","ajax","loadMoreUrl","done","fail","always","ScrollController","scrollTo","opacity","topLinkContainer","topLink","onBackToTopClick","checkLinkVisibility","checkLinkVisibilityTimeout","onScrollToClick","scrollToElement","fudgeHeaderHeight","position","offset","top","showTopLink","hideTopLink","outerWidth","quick","$container","$button","buttonClass","$list","listClass","$input","inputClass","activeClass","hoverClass","focusedClass","disabledClass","selectedItem","keycodes","UP","DOWN","SPACE","RETURN","PGUP","PGDOWN","SHIFT","TAB","ESC","checkShift","showList","hideList","handleKeyEvent","changeSelection","item","offsetTop","removeAttr","data","selectNext","direction","selectSpecific","param","currentLetter","nextAll","filter","click","shiftIsPressed","letter","fromCharCode","searchUI","searchUIDesktop","closeButton","searchInput","toggleSearch","onToggleSearchClick","onSearchInputKeypress","onSearchInputKeyup","onDocClick","fixGoogleSearchStyles","close","executeSearch","searchUrl","encodeURIComponent","open","clearInput","TabController","onTabClick","onTabFocusin","tab","tabGroup","tabId","tabContent","tabMakeActive","fixRawTables","addHeaderAttrsToTableRows","fixHeights","td","title","h1","h2","max","table","klass","addMissingThead","tbody","thead","theadTr","firstRow","th","remove","headers","row","cols","headerColumnCount","colspan","isFullWidthBlock","existingFieldValue","fieldValue","TestimonialController","classList","contains","onHomePrevClick","onHomeNextClick","onAsidePrevClick","onAsideNextClick","resizeTestimonials","sharedTestimonialId","getUrlParameter","setSharedTestimonial","childSelector","movePrev","moveNext","itemSelector","resetStyles","active","left","testimonialId","sharedTestimonial","testimonialLink","dispatchEvent","sParam","sParameterName","sPageURL","search","sURLVariables","ustreamContainer","after","ClassesStartController","moveclassesStart","classstart","breadholder","bread","ExploreButtonController","moveExploreButton","topsocial","topexplorebutton","bottomsocial","bottomexplorebutton","global","factory","exports","module","define","amd","ClassList","nodeType","Error","checkToken","token","method","TypeError","SyntaxError","focusTriggersKeyboardModality","tagName","inputTypesWhitelist","readonly","contentEditable","addFocusRingClass","setAttribute","removeFocusRingClass","hasAttribute","removeAttribute","onKeyDown","hadKeyboardEvent","onFocus","onBlur","onWindowFocus","activeElement","elWithFocusRing","onWindowBlur","tel","email","password","number","month","week","time","datetime","datetime-local","addEventListener","toArray","str","getAttribute","classes","arr","len","splice","force","hasToken","loaded","readyState","checkWindow","breakpoints","breakpoint","setBreakpoint","currentBreakpoint","label","getBreakpoint","IPHONE_PORTRAIT","IPHONE_LANDSCAPE","SIX_FORTY","IPAD_PORTRAIT","TWELVE_EIGHTY","FOURTEEN_HUNDRED","empty","ModalController","preventModalTabOut","modalSelector","focusableSelector","dump","onModalOpenClick","onModalCloseClick","onModalSelectChange","onElementFocus","onKeyUp","qs","modalParam","pullFromHref","modalTrigger","closeAllModals","fixFancyboxPosition","fbox","afterFancyboxLoad","current","previous","afterFancyboxShow","setFocusToModal","inner","focusableElements","afterClose","lastFocus","forceOnMobile","pullFromElement","option","contentTarget","afterLoad","operator","modalContent","videoSelector","targetSelector","openContentModal","opts","Sys","prm","WebForms","PageRequestManager","getInstance","add_endRequest","snhuCookie","RenameSearchEngineClickIds","obj","ClickId","GetCookieByName","pos","pos2","unescape","WriteCookie","cookieValue","cookieName","setTime","GlobalTrackingDaysActive","GlobalTrackingDomain","serialize","list","map","TrackingName","escape","PopulateCookieFromQueryString","reduce","acc","k","trackingParams","entries","ownProps","keys","resArray","Array","forEach","qsParam","GlobalTrackingParams","trackerValues","GlobalTrackingCookieName","VenpubIDCookieName","GetQueryStringParameter","match","ParseReferrerString","referrerString","BuildSNHUReferrerCookie","defaultReferrer","campaign","segment","currentCookie","cookieString","gacookie","gaString","CookieTrackingDaysActive","CookieTrackingDomain","TrackingCookieName","queryParams","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","qsValue","return","GetParameterByName","GetCurrentDateTime","today","dd","mm","yyyy","milliseconds","getMilliseconds","TextCounter","field","cnt","maxlimit","cntfield","getElementById","cname","cvalue","exdays","path","expires","toUTCString","ca","the_cookie","cookieExpiresDate","prog","VideoController","H","W","D","F","IE","didUpdate","isTouch","createTouch","isQuery","isString","isPercentage","isScrollable","clientWidth","scrollWidth","clientHeight","scrollHeight","getScalar","orig","dim","getViewport","ceil","getValue","version","defaults","padding","margin","minWidth","maxWidth","maxHeight","pixelRatio","autoSize","autoHeight","autoWidth","autoResize","autoCenter","fitToView","aspectRatio","topRatio","leftRatio","scrolling","wrapCSS","arrows","closeBtn","closeClick","nextClick","mouseWheel","autoPlay","playSpeed","preload","modal","loop","dataType","X-fancyBox","swf","wmode","allowfullscreen","allowscriptaccess","13","34","39","40","8","33","37","38","play","scrollOutside","tpl","wrap","image","openEffect","openSpeed","openEasing","openOpacity","openMethod","closeEffect","closeSpeed","closeEasing","closeOpacity","closeMethod","nextEffect","nextSpeed","nextEasing","nextMethod","prevEffect","prevSpeed","prevEasing","prevMethod","helpers","onCancel","noop","beforeLoad","beforeShow","beforeChange","beforeClose","group","coming","isActive","isOpen","isOpened","skin","outer","player","ajaxLoad","imgPreload","transitions","isPlainObject","isArray","rez","hrefParts","isDom","metadata","prop","isImage","isSWF","_start","cancel","hideLoading","abort","onload","onerror","_afterZoomOut","unbindEvents","isClosing","action","onCancel.player beforeClose.player","onUpdate.player","beforeLoad.player","jumpto","router","reposition","onlyAbsolute","_getPosition","update","anyway","_setDimension","canShrink","showLoading","viewport","appendTo","fixed","locked","scrollLeft","innerHeight","bindEvents","srcElement","inArray","mousewheel","delta","deltaX","deltaY","canScroll","isFunction","helper","_error","_loadImage","_loadAjax","_loadIframe","_afterLoad","hasError","Image","complete","jqXHR","textStatus","success","one","parents","_preloadImages","min","embed","placeholder","replaceAll","wPadding","hPadding","wSpace","hSpace","origWidth","origHeight","origMaxWidth","origMaxHeight","ratio","width_","height_","maxWidth_","maxHeight_","steps","canExpand","scrollOut","scrollbarWidth","wMargin","hMargin","contentWindow","contents","wrapSpace","skinSpace","_afterZoomIn","getOrigPosition","step","fx","zoomIn","startPos","effect","elastic","endPos","duration","zoomOut","changeIn","changeOut","speedOut","showEarly","create","proxy","scrollV","scrollH","offsetWidth","onReady","onUpdate","wrapInner","run","relType","relVal","what","idx","groupAttr","live","undelegate","delegate","w1","w2","child","support","fixedPosition"],"mappings":"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","file":"scripts.min.js","sourcesContent":["function Listbox(params) {\n if (!params.container) {\n return;\n }\n \n this.setDefaults(params);\n this.addListeners();\n}\n\nListbox.prototype.setDefaults = function(params) {\n this.dom = {\n $container: params.container,\n $button: params.container.find(params.buttonClass),\n $list: params.container.find(params.listClass),\n $input: params.container.find(params.inputClass)\n };\n \n this.activeClass = params.activeClass;\n this.hoverClass = params.hoverClass;\n this.focusedClass = params.focusedClass;\n this.disabledClass = params.disabledClass;\n this.selectedItem = this.dom.$list.find('.' + params.activeClass);\n this.keycodes = {\n UP: 38,\n DOWN: 40,\n SPACE: 32,\n RETURN: 13,\n PGUP: 33,\n PGDOWN: 34,\n SHIFT: 16,\n TAB: 9,\n ESC: 27\n };\n};\n\nListbox.prototype.addListeners = function() {\n $(window).on(\"keyup keydown\", this.checkShift.bind(this));\n this.dom.$button.on(\"click\", this.showList.bind(this));\n this.dom.$list.on(\"blur\", this.hideList.bind(this));\n this.dom.$list.on(\"keydown\", this.handleKeyEvent.bind(this));\n this.dom.$list.on(\"click\", this.changeSelection.bind(this));\n};\n\nListbox.prototype.showList = function(e) {\n if(this.dom.$container.hasClass(this.disabledClass)) {\n return;\n }\n \n if(e)\n e.preventDefault();\n \n this.dom.$button.attr(\"aria-expanded\", true);\n \n var item = this.selectedItem.length ? this.selectedItem : this.dom.$list.children().first();\n item.addClass(this.hoverClass);\n this.dom.$list.scrollTop(item[0].offsetTop);\n this.dom.$list.attr('aria-activedescendant', item.attr('id'));\n \n this.dom.$container.addClass(this.focusedClass);\n this.dom.$list.attr('aria-activedescendant', this.selectedItem.attr('id'));\n this.dom.$list.attr(\"tabindex\", -1);\n this.dom.$list.focus();\n};\n\nListbox.prototype.hideList = function(e) {\n if(e)\n e.preventDefault();\n \n this.dom.$container.removeClass(this.focusedClass);\n this.dom.$button.focus().attr(\"aria-expanded\", false);\n this.dom.$list.removeAttr(\"tabindex\");\n \n this.dom.$list.children()\n .not(this.selectedItem)\n .removeClass(this.hoverClass);\n \n if(this.selectedItem.length) {\n this.dom.$list.attr('aria-activedescendant', this.selectedItem.attr('id'));\n } else {\n this.dom.$list.attr('aria-activedescendant', '');\n }\n};\n\nListbox.prototype.changeSelection = function(e) {\n var item = $(e.target);\n item.addClass(this.activeClass).addClass(this.hoverClass);\n item.attr(\"aria-selected\", true);\n item.siblings().removeClass(this.activeClass);\n item.siblings().attr(\"aria-selected\", false);\n \n this.selectedItem = item;\n this.dom.$button.text(item.text()).attr(\"aria-activedescendant\", item.attr('id'));\n this.dom.$list.attr(\"aria-activedescendant\", item.attr('id'));\n this.dom.$input.val(item.data('value')).trigger('change');\n this.hideList();\n};\n\nListbox.prototype.selectNext = function(direction) {\n var item = this.dom.$list.find('.' + this.hoverClass);\n var next = (direction === \"up\") ?\n item.prev() :\n item.next() ;\n \n if(next.length) {\n next.siblings().removeClass(this.hoverClass);\n next.addClass(this.hoverClass);\n this.dom.$list.scrollTop(next[0].offsetTop);\n this.dom.$list.attr('aria-activedescendant', next.attr('id'));\n }\n};\n\n//could be a letter or a boolean\nListbox.prototype.selectSpecific = function(param) {\n var item;\n if (typeof param === \"boolean\") {\n item = param ? this.dom.$list.children().first() : this.dom.$list.children().last();\n this.currentLetter = null;\n } else {\n item = this.currentLetter === param ? this.dom.$list.find(\".\" + this.hoverClass).nextAll() : this.dom.$list.children();\n item = item.filter(function(i){\n return $(this).text().indexOf(param) === 0;\n }).first();\n }\n\n if(item.length) {\n item.siblings().removeClass(this.hoverClass);\n item.addClass(this.hoverClass);\n this.dom.$list.scrollTop(item[0].offsetTop);\n this.dom.$list.attr('aria-activedescendant', item.attr('id'));\n }\n};\n\nListbox.prototype.handleKeyEvent = function(e) {\n var key = e.which;\n switch (key) {\n case this.keycodes.UP:\n e.preventDefault();\n this.selectNext(\"up\");\n break;\n case this.keycodes.DOWN:\n e.preventDefault();\n this.selectNext(\"down\");\n break;\n case this.keycodes.PGUP:\n case this.keycodes.PGDOWN:\n e.preventDefault();\n this.selectSpecific(key === this.keycodes.PGUP);\n break;\n case this.keycodes.SPACE:\n case this.keycodes.RETURN:\n e.preventDefault();\n this.dom.$list.find('.' + this.hoverClass).click();\n break;\n case this.keycodes.TAB:\n if(this.shiftIsPressed)\n this.dom.$container.prev().focus();\n break;\n case this.keycodes.ESC:\n this.hideList();\n this.dom.$button.focus().addClass('focus-ring');\n break;\n default: \n var letter = String.fromCharCode(key);\n if (/[a-zA-Z]/.test(letter)) {\n this.selectSpecific(letter);\n this.currentLetter = letter;\n }\n break;\n }\n};\n\nListbox.prototype.checkShift = function(e) {\n if(e.which == this.keycodes.SHIFT)\n this.shiftIsPressed = e.type === \"keydown\";\n};\n\n(function($) {\n $(\".select-wrapper\").each(function(i, el) {\n new Listbox({\n container: $(el),\n buttonClass: \".select-button\",\n listClass: \".select-listbox\",\n inputClass: \".select-input\",\n activeClass: \"active\",\n hoverClass: \"hover\",\n focusedClass: \"focused\",\n disabledClass: \"disabled\"\n });\n });\n})(jQuery);\n","function formatLocalDate(date) {\r\n\tvar now = date || new Date(),\r\n\t\ttzo = -now.getTimezoneOffset(),\r\n\t\tdif = tzo >= 0 ? '+' : '-',\r\n\t\tpad = function (num) {\r\n\t\t\tvar norm = Math.abs(Math.floor(num));\r\n\t\t\treturn (norm < 10 ? '0' : '') + norm;\r\n\t\t};\r\n\treturn now.getFullYear()\r\n\t\t+ '-' + pad(now.getMonth() + 1)\r\n\t\t+ '-' + pad(now.getDate())\r\n\t\t+ 'T' + pad(now.getHours())\r\n\t\t+ ':' + pad(now.getMinutes())\r\n\t\t+ ':' + pad(now.getSeconds())\r\n\t\t+ dif + pad(tzo / 60)\r\n\t\t+ ':' + pad(tzo % 60);\r\n}\r\n\r\nfunction isDateInRange(d, start, end) {\r\n\t// Checks if date in d is between dates in start and end.\r\n\t// Returns a boolean or NaN:\r\n\t// true : if d is between start and end (inclusive)\r\n\t// false : if d is before start or after end\r\n\t// NaN : if one or more of the dates is illegal.\r\n\t// NOTE: The code inside isFinite does an assignment (=).\r\n\treturn (\r\n\t\t\t isFinite(d.valueOf()) &&\r\n\t\t\t isFinite(start.valueOf()) &&\r\n\t\t\t isFinite(end.valueOf()) ?\r\n\t\t\t start <= d && d <= end :\r\n\t\t\t NaN\r\n\t );\r\n}\r\n\r\nfunction getTimeZone() {\r\n var m = /GMT[\\+\\-].+$/i.exec((new Date()).toString());\r\n if (m) {\r\n return m[0];\r\n }\r\n}\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window // works on most browsers \r\n || navigator.maxTouchPoints; // works on IE10/11 and Surface\r\n}","/**\r\n* @author: Danny Ng (http://www.dannytalk.com/2010/08/19/read-google-an…-cookie-script/)\r\n* @modified: 19/08/10\r\n* @notes: Free to use and distribute without altering this comment. Would appreciate a link back :)\r\n*/\r\n\r\n// Strip leading and trailing white-space\r\nString.prototype.trim = function () { return this.replace(/^\\s*|\\s*$/g, ''); }\r\n\r\n// Check if string is empty\r\nString.prototype.empty = function () {\r\n if (this.length == 0) {\r\n return true;\r\n }\r\n else if (this.length > 0) {\r\n return /^\\s*$/.test(this);\r\n }\r\n}\r\n\r\n// Breaks cookie into an object of keypair cookie values\r\nfunction crumbleCookie(c) {\r\n var cookie_array = document.cookie.split(';');\r\n var keyvaluepair = {};\r\n for (var cookie = 0; cookie < cookie_array.length; cookie++) {\r\n var key = cookie_array[cookie].substring(0, cookie_array[cookie].indexOf('=')).trim();\r\n var value = cookie_array[cookie].substring(cookie_array[cookie].indexOf('=') + 1, cookie_array[cookie].length).trim();\r\n keyvaluepair[key] = value;\r\n }\r\n\r\n if (c) {\r\n return keyvaluepair[c] ? keyvaluepair[c] : null;\r\n }\r\n\r\n return keyvaluepair;\r\n}\r\n\r\n/**\r\n* For GA cookie explanation, see http://services.google.com/analytics/breeze/en/ga_cookies/index.html.\r\n*\r\n* @return - \r\n*\r\n* @pre-condition - pageTracker initialised properly\r\n* @post-condition - provides 'get' methods to access specific values in the Google Analytics cookies\r\n*/\r\nfunction gaCookies() {\r\n // Cookie syntax: domain-hash.unique-id.ftime.ltime.stime.session-counter\r\n var utma = function () {\r\n var utma_array;\r\n\r\n if (crumbleCookie('__utma')) {\r\n utma_array = crumbleCookie('__utma').split('.');\r\n }\r\n else {\r\n return null;\r\n }\r\n\r\n var domainhash = utma_array[0];\r\n var uniqueid = utma_array[1];\r\n var ftime = utma_array[2];\r\n var ltime = utma_array[3];\r\n var stime = utma_array[4];\r\n var sessions = utma_array[5];\r\n\r\n return {\r\n 'cookie': utma_array,\r\n 'domainhash': domainhash,\r\n 'uniqueid': uniqueid,\r\n 'ftime': ftime,\r\n 'ltime': ltime,\r\n 'stime': stime,\r\n 'sessions': sessions\r\n };\r\n };\r\n\r\n // Cookie syntax: domain-hash.gif-requests.10.stime\r\n var utmb = function () {\r\n var utmb_array;\r\n\r\n if (crumbleCookie('__utmb')) {\r\n utmb_array = crumbleCookie('__utmb').split('.');\r\n }\r\n else {\r\n return null;\r\n }\r\n var gifrequest = utmb_array[1];\r\n\r\n return {\r\n 'cookie': utmb_array,\r\n 'gifrequest': gifrequest\r\n };\r\n };\r\n\r\n // Cookie syntax: domain-hash.value\r\n var utmv = function () {\r\n var utmv_array;\r\n\r\n if (crumbleCookie('__utmv')) {\r\n utmv_array = crumbleCookie('__utmv').split('.');\r\n }\r\n else {\r\n return null;\r\n }\r\n\r\n var value = utmv_array[1];\r\n\r\n return {\r\n 'cookie': utmv_array,\r\n 'value': value\r\n };\r\n };\r\n\r\n // Cookie syntax: domain-hash.ftime.?.?.utmcsr=X|utmccn=X|utmcmd=X|utmctr=X\r\n var utmz = function () {\r\n var utmz_array, source, medium, name, term, content, gclid;\r\n\r\n if (crumbleCookie('__utmz')) {\r\n utmz_array = crumbleCookie('__utmz').split('.').slice(4).join('.'); \r\n // breaks if the referrer has a . in it such as web.com \r\n } else {\r\n return null;\r\n }\r\n\r\n var utms = utmz_array.split('|');\r\n for (var i = 0; i < utms.length; i++) {\r\n var key = utms[i].substring(0, utms[i].indexOf('='));\r\n var val = decodeURIComponent(utms[i].substring(utms[i].indexOf('=') + 1, utms[i].length));\r\n val = val.replace(/^\\(|\\)$/g, ''); // strip () brackets\r\n switch (key) {\r\n case 'utmcsr':\r\n source = val;\r\n break;\r\n case 'utmcmd':\r\n medium = val;\r\n break;\r\n case 'utmccn':\r\n name = val;\r\n break;\r\n case 'utmctr':\r\n term = val;\r\n break;\r\n case 'utmcct':\r\n content = val;\r\n break;\r\n case 'utmgclid':\r\n gclid = val;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n 'cookie': utmz_array,\r\n 'source': source,\r\n 'medium': medium,\r\n 'name': name,\r\n 'term': term,\r\n 'content': content,\r\n 'gclid': gclid\r\n };\r\n };\r\n\r\n // Establish public methods\r\n\r\n // utma cookies\r\n this.getDomainHash = function () { return (utma() && utma().domainhash) ? utma().domainhash : null };\r\n this.getUniqueId = function () { return (utma() && utma().uniqueid) ? utma().uniqueid : null };\r\n\r\n this.getInitialVisitTime = function () { return (utma() && utma().ftime) ? utma().ftime : null };\r\n this.getPreviousVisitTime = function () { return (utma() && utma().ltime) ? utma().ltime : null };\r\n this.getCurrentVisitTime = function () { return (utma() && utma().stime) ? utma().stime : null };\r\n this.getSessionCounter = function () { return (utma() && utma().sessions) ? utma().sessions : null };\r\n\r\n // utmb cookies\r\n this.getGifRequests = function () { return (utmb() && utmb().gifrequest) ? utmb().gifrequest : null };\r\n\r\n // utmv cookies\r\n this.getUserDefinedValue = function () { return (utmv() && utmv().value) ? decodeURIComponent(utmv().value) : null };\r\n\r\n // utmz cookies\r\n this.getCampaignSource = function () { return (utmz() && utmz().source) ? utmz().source : null };\r\n this.getCampaignMedium = function () { return (utmz() && utmz().medium) ? utmz().medium : null };\r\n this.getCampaignName = function () { return (utmz() && utmz().name) ? utmz().name : null };\r\n this.getCampaignTerm = function () { return (utmz() && utmz().term) ? utmz().term : null };\r\n this.getCampaignContent = function () { return (utmz() && utmz().content) ? utmz().content : null };\r\n this.getGclid = function () { return (utmz() && utmz().gclid) ? utmz().gclid : null };\r\n};","$(function () {\r\n superCookieInit();\r\n //chatTrack.Initialize();\r\n\r\n // CAEL menu removal hack\r\n //$('li a:contains(\"CAEL Partnership Program\")').parent('li').css('display', 'none');\r\n});\r\n\r\n\r\n\r\nfunction superCookieInit() {\r\n try {\r\n var trackingData = superCookie.load();\r\n\r\n if (trackingData === null || trackingData.urls === null || typeof (trackingData.urls) === 'undefined') {\r\n trackingData.urls = [];\r\n }\r\n\r\n var pageTrack = new track();\r\n pageTrack.url = document.URL;\r\n pageTrack.code = $('input.scCode').length === 0 ? '' : $('input.scCode').val();\r\n\r\n setTimeout(function () {\r\n superCookie.SetDefaults(trackingData);\r\n }, 2000);\r\n\r\n if ((trackingData.urls.length === 0)) {\r\n trackingData.urls.push(pageTrack);\r\n } else {\r\n var lastVisitDate = new Date(trackingData.urls[trackingData.urls.length - 1].date);\r\n if ((trackingData.urls[trackingData.urls.length - 1].url !== document.URL) || (new Date() > lastVisitDate.setDate(lastVisitDate.getDate() + 2))) {\r\n trackingData.urls.push(pageTrack);\r\n }\r\n }\r\n\r\n while (trackingData.urls.length > superCookie.maxLength) {\r\n trackingData.urls.shift();\r\n }\r\n\r\n superCookie.save();\r\n\r\n if ($('input#CookieTrail').length === 0) {\r\n $('form').not('#searchForm').prepend($(''));\r\n }\r\n $('input[id$=\"CookieTrail\"]').val(JSON.stringify(superCookie.load()));\r\n } catch (err) {\r\n //console.log(err);\r\n }\r\n};\r\n\r\nfunction track(){\r\n this.url = '';\r\n this.date = new Date();\r\n this.code = '';\r\n};\r\n\r\n/************************************************************\r\nsuperCookie tracks a users path through the site.\r\ndata is stored as json in the cookie\r\n*************************************************************/\r\nvar superCookie = {\r\n maxLength: 20,\r\n\r\n data: {},\r\n\r\n load: function() {\r\n var the_cookie = superCookie.GetCookieByName('snhuSuperCookie');\r\n if (the_cookie != null) {\r\n the_cookie = the_cookie.split(';');\r\n if (the_cookie[0]) {\r\n this.data = JSON.parse(unescape(the_cookie[0]));\r\n }\r\n }\r\n return this.data;\r\n },\r\n\r\n save: function(expires, path) {\r\n var d = expires || new Date(2030, 2, 2);\r\n var p = path || '/';\r\n superCookie.WriteCookie('snhuSuperCookie', escape(JSON.stringify(this.data)), d.toUTCString(), p);\r\n },\r\n\r\n GetCookieByName: function(name) {\r\n var pos = document.cookie.indexOf(name + '=');\r\n if (pos == -1) {\r\n return null;\r\n } else {\r\n var pos2 = document.cookie.indexOf(';', pos);\r\n if (pos2 == -1) {\r\n return unescape(document.cookie.substring(pos + name.length + 1));\r\n } else {\r\n return unescape(document.cookie.substring(pos + name.length + 1, pos2));\r\n }\r\n }\r\n },\r\n\r\n WriteCookie: function(cookieName, cookieValue, cookieExpiresDate, path) {\r\n var cookieString = escape(cookieValue);\r\n var date = cookieExpiresDate;\r\n document.cookie = cookieName + '=' + cookieValue + ';expires=' + cookieExpiresDate + ';path=' + path + ';domain=.snhu.edu;';\r\n },\r\n\r\n SetDefaults: function(trackingData) {\r\n try {\r\n for (i = trackingData.urls.length - 1; i >= 0; i--) {\r\n if (trackingData.urls[i].code &&\r\n trackingData.urls[i].code.toLowerCase() != 'msn' &&\r\n trackingData.urls[i].code.toLowerCase() != 'msncle' &&\r\n trackingData.urls[i].code.toLowerCase() != 'bsn' &&\r\n trackingData.urls[i].code.toLowerCase() != 'rnmsn' &&\r\n trackingData.urls[i].code.toLowerCase() != 'cwougn' &&\r\n trackingData.urls[i].code.toLowerCase() != 'msnsgr') {\r\n var prog = $('select#ProgramofInterest option[value^=\"' + trackingData.urls[i].code.toUpperCase() + '\"]');\r\n if (prog !== 'undefined' && prog.length > 0) {\r\n if ($($(prog)[0]).attr('class')) {\r\n $('select#AcademicLevel').val(($($(prog)[0]).attr('class').toLowerCase() == 'gr') ? 'graduate' : 'undergraduate');\r\n //$('select#ProgramofInterest').val(trackingData.urls[i].code); \r\n $($(prog)[0]).attr('selected', 'selected');\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n } catch (err) {\r\n //console.log(err);\r\n }\r\n }\r\n\r\n};\r\n\r\n// code below handles asp.net updatepanel partial page loads\r\nfunction pageLoad(sender, args) {\r\n superCookieInit();\r\n};","/*! modernizr 3.6.0 (Custom Build) | MIT *\n * https://modernizr.com/download/?-objectfit-setclasses !*/\n !function(e,n,t){function r(e,n){return typeof e===n}function o(){var e,n,t,o,i,s,a;for(var l in C)if(C.hasOwnProperty(l)){if(e=[],n=C[l],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;tc;c++)if(m=e[c],y=P.style[m],a(m,\"-\")&&(m=s(m)),P.style[m]!==t){if(i||r(o,\"undefined\"))return l(),\"pfx\"==n?m:!0;try{P.style[m]=o}catch(h){}if(P.style[m]!=y)return l(),\"pfx\"==n?m:!0}return l(),!1}function g(e,n,t,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),a=(e+\" \"+b.join(s+\" \")+s).split(\" \");return r(n,\"string\")||r(n,\"undefined\")?y(a,n,o,i):(a=(e+\" \"+j.join(s+\" \")+s).split(\" \"),f(a,n,t))}var h=[],C=[],S={_version:\"3.6.0\",_config:{classPrefix:\"\",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){C.push({name:e,fn:n,options:t})},addAsyncTest:function(e){C.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=S,Modernizr=new Modernizr;var _=n.documentElement,w=\"svg\"===_.nodeName.toLowerCase(),x=\"Moz O ms Webkit\",b=S._config.usePrefixes?x.split(\" \"):[];S._cssomPrefixes=b;var E=function(n){var r,o=prefixes.length,i=e.CSSRule;if(\"undefined\"==typeof i)return t;if(!n)return!1;if(n=n.replace(/^@/,\"\"),r=n.replace(/-/g,\"_\").toUpperCase()+\"_RULE\",r in i)return\"@\"+n;for(var s=0;o>s;s++){var a=prefixes[s],l=a.toUpperCase()+\"_\"+r;if(l in i)return\"@-\"+a.toLowerCase()+\"-\"+n}return!1};S.atRule=E;var j=S._config.usePrefixes?x.toLowerCase().split(\" \"):[];S._domPrefixes=j;var z={elem:u(\"modernizr\")};Modernizr._q.push(function(){delete z.elem});var P={style:z.elem.style};Modernizr._q.unshift(function(){delete P.style}),S.testAllProps=g;var N=S.prefixed=function(e,n,t){return 0===e.indexOf(\"@\")?E(e):(-1!=e.indexOf(\"-\")&&(e=s(e)),n?g(e,n,t):g(e,\"pfx\"))};Modernizr.addTest(\"objectfit\",!!N(\"objectFit\"),{aliases:[\"object-fit\"]}),o(),i(h),delete S.addTest,delete S.addAsyncTest;for(var T=0;T 0) {\r\n var faq = content.closest('.faq');\r\n if (toggleIcon.hasClass('open')) {\r\n toggleIcon.removeClass('fa-minus open').addClass('fa-plus');\r\n faq.removeClass('open');\r\n slideUp(content);\r\n }\r\n else {\r\n toggleIcon.removeClass('fa-plus').addClass('fa-minus open');\r\n faq.addClass('open');\r\n slideDown(content);\r\n TableController.fixDataTableHeights();\r\n }\r\n }\r\n }\r\n \r\n // Stop propagation on links inside the content to prevent the accordion from toggling around unexpectedly.\r\n function onAccordionContentLinkClick(e) {\r\n e.stopPropagation();\r\n }\r\n \r\n function slideUp(content, callback) {\r\n content.stop(true, true).slideUp(250, 'easeInOutExpo', callback);\r\n }\r\n function slideDown(content, callback) {\r\n content.stop(true, true).slideDown(250, 'easeInOutExpo', callback);\r\n }\r\n\r\n function Accordion($el) {\r\n this.$el = $el || null;\r\n this.isExperienceEditor = $('.is-experience-editor').length;\r\n\r\n if (this.$el.length) {\r\n this.setupDefaults();\r\n\r\n if (!this.isExperienceEditor) {\r\n this.addListeners();\r\n\r\n } else {\r\n this.initExpEd();\r\n }\r\n }\r\n };\r\n\r\n Accordion.prototype.setupDefaults = function () {\r\n this.dom = {\r\n $trigger: this.$el.find('.js-accordion-trigger'),\r\n $icon: this.$el.find('.js-accordion-trigger').find('.fa'),\r\n $content: this.$el.find('.js-accordion-content')\r\n }\r\n };\r\n\r\n Accordion.prototype.addListeners = function () {\r\n this.dom.$trigger.on('keypress', this.onTriggerClick.bind(this));\r\n };\r\n\r\n Accordion.prototype.onTriggerClick = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.$el.toggleClass('active');\r\n this.toggleContent();\r\n };\r\n\r\n Accordion.prototype.initExpEd = function () {\r\n this.$el.toggleClass('active');\r\n this.dom.$content.slideDown();\r\n };\r\n\r\n Accordion.prototype.toggleContent = function () {\r\n if (!this.$el.hasClass('active')) {\r\n this.dom.$icon.attr('class', 'fa fa-plus');\r\n this.dom.$content.stop(true, true).slideUp(250, 'easeInOutExpo');\r\n } else {\r\n this.dom.$icon.attr('class', 'fa fa-minus');\r\n this.dom.$content.stop(true, true).slideDown(250, 'easeInOutExpo');\r\n }\r\n\r\n setTimeout(function () {\r\n $(window).resize();\r\n }, 250);\r\n };\r\n\r\n \r\n $(ready);\r\n \r\n return {};\r\n\r\n})(jQuery);","/*\r\n * Anchors \r\n */\r\nvar AnchorController = (function ($) {\r\n \r\n var doc;\r\n \r\n function ready() {\r\n doc = $(document.body);\r\n doc.on('click', '.disabled,[disabled]', onDisabledClick);\r\n }\r\n \r\n // On disabled click, prevent any action.\r\n function onDisabledClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n \r\n /* \r\n * Generate navigation by looking for items that match the given selector.\r\n */\r\n function generate(selector) {\r\n selector = selector || 'h1,h2,h3,h4,h5,h6,p';\r\n var items = $(selector, '#main'),\r\n ul = $(\"
    \");\r\n \r\n items.each(function () {\r\n var item = $(this);\r\n if (!item.attr('id')) return;\r\n \r\n var li = $(\"
  • \"),\r\n a = li.children('a');\r\n \r\n var href = '#' + item.attr('id');\r\n a[0].href = href;\r\n a.attr('data-scroll-to', href);\r\n a.html(item.html());\r\n ul.append(li);\r\n });\r\n \r\n return ul;\r\n }\r\n \r\n $(ready);\r\n \r\n // return {\r\n // generate: generate\r\n // };\r\n \r\n})(jQuery);","/*\r\n * Reload the window when a breakpoint fires in order to allow the\r\n * proper server side components to be sent in the response.\r\n */\r\nvar BreakpointReloadController = (function ($) {\r\n\r\n var timer,\r\n timeout = 500;\r\n\r\n function ready() {\r\n // $(BreakpointController).on('crossBreakpoint', onCrossBreakpoint);\r\n }\r\n\r\n function onCrossBreakpoint() {\r\n clearTimeout(timer);\r\n timer = setTimeout(function () {\r\n window.location.reload();\r\n }, timeout);\r\n\r\n }\r\n\r\n $(ready);\r\n\r\n})(jQuery);\r\n","/*\r\n * Event handlers for general content tasks.\r\n */\r\nvar ContentController = (function($) {\r\n\r\n\tvar win, doc, header;\r\n\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\tdoc = $(document.body);\r\n\t\theader = $(\"header\");\r\n\t\tdoc.on('click', '.collapsible-content a.read-more', onMoreClick);\r\n\t\tdoc.on('click', '.collapsible-content a.read-less', onLessClick);\r\n\t\tbuildCollapsibleContent();\r\n\t\tselectBehavior();\r\n\t\tfixH2BorderTextWrap();\r\n\r\n\t\tfixContentIframes();\r\n\t\twin.on('resize', fixContentIframes);\r\n\r\n\t // move the narrowA after the content if it is the left column\r\n\t\tif ($('section.content').first().prev('aside.hide-small:hidden').length > 0) {\r\n\t\t $('section.content').prev('aside.hide-small:hidden').detach().insertAfter($('section.content').first());\r\n\t\t $('aside.hide-small:hidden').show().css({'margin-left': 'auto', 'margin-right': 'auto', 'width': '90%'});\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t * Fix all iframes in the content area.\r\n\t */\r\n\tfunction fixContentIframes() {\r\n\t\t$(\"section.content iframe\").each(fixIframe);\r\n\t}\r\n\r\n\t/*\r\n\t * Fix iframe to be responsive.\r\n\t * Replace the width and height attributes and give them responsive values.\r\n\t */\r\n\tfunction fixIframe() {\r\n\t\tvar iframe = $(this),\r\n\t\t\tsrc = iframe.attr('src'),\r\n\t\t\tminHeight = (win.outerHeight() - header.outerHeight()) * .67;\r\n\r\n\t\tif (/maps\\.google\\.com/gi.test(src)) {\r\n\t\t\tiframe.attr('width', '100%');\r\n\t\t\tiframe.attr('height', '');\r\n\t\t\tiframe.css({\r\n\t\t\t\t\"min-height\": minHeight\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fixH2BorderTextWrap() {\r\n\t\tif (!BreakpointController.isMobile()) return;\r\n\t\t\r\n\t\t$(\"h2.border, h3.border\").each(function () {\r\n\t\t\tvar html = $(this).html();\r\n\t\t\t$(this).html(\"\" + html + \"\");\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction selectBehavior() {\r\n\t\tdoc.on(\"focus\", 'select', function (e) {\r\n\t\t\tvar wrapper = $(this).closest('.select');\r\n\t\t\tif (wrapper.length > 0) {\r\n\t\t\t\twrapper.addClass(\"focus\");\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tdoc.on(\"blur\", 'select', function (e) {\r\n\t\t\tvar wrapper = $(this).closest('.select');\r\n\t\t\tif (wrapper.length > 0) {\r\n\t\t\t\twrapper.removeClass(\"focus\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction buildCollapsibleContent() {\r\n\t\t$(\".collapsible-content\").each(function () {\r\n\t\t\tvar collapsibleContentSection = $(this);\r\n\t\t\t// If there's only 1 paragraph, don't bother with the read more/less.\r\n\t\t\tif (collapsibleContentSection.children('p').length <= 1) {\r\n\t\t\t\treturn;\r\n }\r\n var headerTag = collapsibleContentSection.children(\"h2:first-of-type\");\r\n var headerText = \"\";\r\n if (headerTag.length > 0) { headerText = \" about \" + headerTag.text().trim(); }\r\n var firstP = collapsibleContentSection.children('p:first-of-type');\r\n var lastP = collapsibleContentSection.children('p:last-of-type');\r\n var readMore = $(\"More >\");\r\n var readLess = $(\"< Less\");\r\n\t\t\tfirstP.append(readMore);\r\n\t\t\tlastP.append(readLess);\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction onMoreClick(e) {\r\n\t\te.preventDefault();\r\n\t\tvar clicked = $(this);\r\n\t\tvar container = clicked.closest('.collapsible-content');\r\n\t\tcontainer.addClass('open');\r\n\t}\r\n\t\r\n\tfunction onLessClick(e) {\r\n\t\te.preventDefault();\r\n\t\tvar clicked = $(this);\r\n\t\tvar container = clicked.closest('.collapsible-content');\r\n\t\tcontainer.removeClass('open');\r\n\t\t\r\n\t\t// var isPersonnel = container.closest(\".personnel\").length > 0;\r\n\t\t// var scrollTo = container.children('p').first();\r\n\t\t// if (isPersonnel) {\r\n\t\t//\t scrollTo = scrollTo.closest('li');\r\n\t\t// }\r\n\t\t// ScrollController.scrollTo(scrollTo, true);\r\n\t}\r\n\t\r\n\t$(ready);\r\n\t\r\n\treturn {\r\n\t\tready: ready\r\n\t};\r\n\t\r\n})(jQuery);","(function ($) {\r\n\r\n\tvar kualiTimer;\r\n\r\n\tfunction ready() {\r\n\t\tfixMLSPage();\r\n\t fixPrezPageMenuActiveClass();\r\n\t\t//if (BreakpointController.isMobile() && /^\\/admission\\/academic-catalogs?/i.test(window.location.pathname)) {\r\n\t\t//\tkualiTimer = setInterval(fixKuali, 44);\t\r\n\t\t//}\r\n\t}\r\n\r\n\tfunction fixMLSPage() {\r\n\t\tif (/^\\/about-us\\/partnerships\\/sports-partnerships\\/major-league-soccer\\/?/i.test(window.location.pathname)) {\r\n\t\t\t$(\"section.masthead.full > .content\").css(\"background-position\", \"top center\");\r\n\t }\r\n\t}\r\n\tfunction fixPrezPageMenuActiveClass() {\r\n\t if (/^\\/about-us\\/leadership-and-history\\/president-corner\\/?/i.test(window.location.pathname)) {\r\n\t var masthead = $(\".masthead.full\");\r\n\t if (masthead.find(\"a.active\").length === 0) {\r\n\t var test = new RegExp(window.location.pathname, \"i\");\r\n\t masthead.find(\"a\")\r\n .each(function () {\r\n var link = $(this);\r\n if (test.test(link.attr(\"href\"))) {\r\n link.closest(\"li\").addClass(\"active\");\r\n }\r\n });\r\n\t }\r\n\t\t}\r\n\t}\r\n\r\n\t//function fixKuali() {\r\n\t//\tvar kuali = $(\"#kuali-catalog\");\r\n\t//\tvar header = kuali.find(\"h1\");\r\n\t//\tvar text = header.text();\r\n\t//\tif (/kuali/i.test(text)) {\r\n\t//\t\theader.text(text.replace(/kuali/i, \"Academic\"));\r\n\t//\t\tclearInterval(kualiTimer);\r\n\t//\t}\r\n\t//}\r\n\r\n\t$(ready);\r\n\r\n})(jQuery);","\r\n/*\r\n * Functionality for a countdown.\r\n */\r\n(function($) {\r\n\r\n Number.prototype.pad = function(size) {\r\n var s = String(this);\r\n while (s.length < (size || 2)) {\r\n s = \"0\" + s;\r\n }\r\n return s;\r\n }\r\n\r\n function defaultCountdownFormat() {\r\n return (this.getMonth() + 1).pad(2) + \"/\" + this.getDate().pad(2) + \"/\" +\r\n this.getFullYear() + \" \" + defaultFormatTime.apply(this, arguments);\r\n };\r\n\r\n function defaultFormatTime() {\r\n var hours = this.getHours();\r\n var am = hours < 12;\r\n if (!am) {\r\n hours = hours - 12;\r\n }\r\n if (hours === 0) {\r\n hours = 12;\r\n }\r\n return \"\" + hours.pad(2) + \":\" + this.getMinutes().pad(2) + (am ? \" AM\" :\r\n \" PM\");\r\n }\r\n\r\n function getTimeRemaining(endtime, now) {\r\n if (!now) {\r\n now = Date.parse(new Date());\r\n }\r\n if (typeof endtime === 'string') {\r\n endtime = Date.parse(endtime);\r\n }\r\n var t = endtime - now;\r\n var seconds = Math.floor((t / 1000) % 60);\r\n var minutes = Math.floor((t / 1000 / 60) % 60);\r\n var hours = Math.floor((t / (1000 * 60 * 60)) % 24);\r\n var days = Math.floor(t / (1000 * 60 * 60 * 24));\r\n return {\r\n 'total': t,\r\n 'days': days,\r\n 'hours': hours,\r\n 'minutes': minutes,\r\n 'seconds': seconds\r\n };\r\n }\r\n\r\n var Countdown = function(element, end, dateFormatFunc) {\r\n var that = this,\r\n now,\r\n timer,\r\n interval = 1000,\r\n intervalSeconds = interval / 1000,\r\n args = arguments,\r\n finished = false;\r\n\r\n that.defaultCountdownFormat = defaultCountdownFormat;\r\n that.defaultFormatTime = defaultFormatTime;\r\n\r\n if (typeof dateFormatFunc === 'function') {\r\n that.countdownFormat = dateFormatFunc;\r\n } else {\r\n that.countdownFormat = defaultCountdownFormat;\r\n }\r\n\r\n init.apply(that, args);\r\n\r\n function init() {\r\n element = $(element);\r\n if (element.closest('.countdown-finished').length > 0)\r\n return;\r\n\r\n try {\r\n now = new Date(!!now ? Date.parse(now) : Date.parse(element.attr(\r\n 'data-now')));\r\n end = new Date(!!end ? Date.parse(end) : Date.parse(element.attr(\r\n 'data-end')));\r\n } catch (ex) {\r\n console.log('Countdown: Error parsing date.', ex);\r\n }\r\n if (!end || (typeof(end.getTime) === 'function' && isNaN(end.getTime()))) {\r\n return;\r\n }\r\n\r\n that.end = end;\r\n that.now = now;\r\n\r\n $(that).trigger(\"countdown:init\");\r\n onInterval();\r\n timer = setInterval(onInterval, interval);\r\n }\r\n\r\n function onInterval() {\r\n that.now.setSeconds(that.now.getSeconds() + intervalSeconds);\r\n that.remaining = getTimeRemaining(that.end, that.now);\r\n\r\n var t = Math.floor(that.remaining.total),\r\n tEnd = 1 * 1000;\r\n\r\n if (t <= tEnd) {\r\n onEndReached();\r\n $(that).trigger(\"countdown:end\");\r\n return;\r\n }\r\n\r\n $(that).trigger(\"countdown:tick\");\r\n }\r\n\r\n function onEndReached() {\r\n clearInterval(timer);\r\n }\r\n\r\n Object.defineProperty(that, 'showDays', {\r\n get: function() {\r\n return that.remaining.days > 0;\r\n }\r\n });\r\n Object.defineProperty(that, 'showHours', {\r\n get: function() {\r\n return that.showDays || (that.remaining.days === 0 && that.remaining\r\n .hours > 0);\r\n }\r\n });\r\n Object.defineProperty(that, 'showMinutes', {\r\n get: function() {\r\n return that.showDays || that.showHours || (that.remaining.hours ===\r\n 0 && that.remaining.minutes > 0);\r\n }\r\n });\r\n Object.defineProperty(that, 'showSeconds', {\r\n get: function() {\r\n return that.showDays || that.showHours || that.showMinutes ||\r\n (that.remaining.minutes === 0 && that.remaining.seconds > 0);\r\n }\r\n });\r\n };\r\n\r\n function ready() {\r\n // Set up home page countdown\r\n var countdownWrapper = $('.masthead.countdown');\r\n var countdown = countdownWrapper.find('.countdown');\r\n setupCountdown(countdown, countdownWrapper);\r\n\r\n // Set up inner page countdown for UStream\r\n var ustreamCountdownWrapper = $(\".inner-countdown\");\r\n var ustream = $(\".u-stream\");\r\n if (ustreamCountdownWrapper.length > 0 && !ustreamCountdownWrapper.hasClass(\"countdown-finished\")) {\r\n if (ustream.length > 0) {\r\n ustream.hide();\r\n ustream.detach();\r\n }\r\n \r\n var ustreamCountdown = ustreamCountdownWrapper.children('.countdown');\r\n setupCountdown(ustreamCountdown, ustreamCountdownWrapper, function () {\r\n if (ustream.length === 0) {\r\n return;\r\n }\r\n // On finished hide the whole thing and show the ustream content.\r\n ustream.insertAfter(ustreamCountdownWrapper);\r\n ustream.show();\r\n UStream.fixUI(ustream);\r\n ustreamCountdownWrapper.hide();\r\n });\r\n }\r\n else {\r\n UStream.fixUI(ustream);\r\n }\r\n }\r\n\r\n function setupCountdown(countdownElement, countdownWrapper, onFinished) {\r\n if (countdownElement.length <= 0) return;\r\n\r\n var days = countdownElement.find('.days'),\r\n dayData = days.children('span'),\r\n hours = countdownElement.find('.hours'),\r\n hourData = hours.children('span'),\r\n minutes = countdownElement.find('.minutes'),\r\n minuteData = minutes.children('span'),\r\n seconds = countdownElement.find('.seconds'),\r\n secondData = seconds.children('span');\r\n\r\n var countdown = $(new Countdown(countdownElement));\r\n countdown.on('countdown:end', function (e) {\r\n countdownWrapper.addClass(\"countdown-finished\");\r\n if (typeof onFinished === 'function') {\r\n onFinished.apply(this, [e]);\r\n }\r\n });\r\n countdown.on('countdown:tick', function (e) {\r\n var remaining = e.target.remaining;\r\n dayData.text(remaining.days.pad(2));\r\n hourData.text(remaining.hours.pad(2));\r\n minuteData.text(remaining.minutes.pad(2));\r\n secondData.text(remaining.seconds.pad(2));\r\n\r\n if (e.target.showDays)\r\n countdownElement.removeClass('zero-days');\r\n else\r\n countdownElement.addClass('zero-days');\r\n if (e.target.showHours)\r\n countdownElement.removeClass('zero-hours');\r\n else\r\n countdownElement.addClass('zero-hours');\r\n if (e.target.showMinutes)\r\n countdownElement.removeClass('zero-minutes');\r\n else\r\n countdownElement.addClass('zero-minutes');\r\n if (e.target.showSeconds)\r\n countdownElement.removeClass('zero-seconds');\r\n else\r\n countdownElement.addClass('zero-seconds');\r\n });\r\n }\r\n\r\n $(ready);\r\n\r\n var ret = {};\r\n return ret;\r\n\r\n})(jQuery);\r\n","(function ($) {\r\n $.fn.konami = function (callback, code) {\r\n if (code == undefined) code = \"68,65,82,76,69,78,69\";\r\n\r\n return this.each(function () {\r\n var kkeys = [];\r\n $(this).keydown(function (e) {\r\n var target = $(e.target);\r\n if (!target.is('input') && !target.is('textarea')) {\r\n kkeys.push(e.keyCode);\r\n while (kkeys.length > code.split(',').length) {\r\n kkeys.shift();\r\n }\r\n if (kkeys.toString().indexOf(code) >= 0) {\r\n // comment out the line below to allow the code to be entered multiple times\r\n $(this).unbind('keydown', arguments.callee);\r\n callback(e);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n $(document).ready(function () {\r\n $(document).konami(function () {\r\n //alert('Konami Code Activated');\r\n //$.fancybox({ href: '/assets/gdee/index.html', width: '980px', height: '780px', type: 'iframe' });\r\n SnhuUtilities.SetCookie('gdee', '1', 1, '/');\r\n\r\n // manually fire the analytics event\r\n // legacy ga.js method\r\n //var _gaq = _gaq || [];\r\n //_gaq.push(['_trackEvent', 'EE', location.href, 'STEM072016']);\r\n\r\n // analytics.js method - universal analytics\r\n ga('trackerUA91129391.send', {\r\n hitType: 'event',\r\n eventCategory: 'EE',\r\n eventAction: location.href,\r\n eventLabel: 'STEM072016',\r\n hitCallback: createFunctionWithTimeout(function() {\r\n location.href = '/online-degrees/bachelors/bs-in-game-programming-and-development';\r\n }, 500)\r\n });\r\n\r\n });\r\n\r\n function createFunctionWithTimeout(callback, opt_timeout) {\r\n var called = false;\r\n function fn() {\r\n if (!called) {\r\n called = true;\r\n callback();\r\n }\r\n }\r\n setTimeout(fn, opt_timeout || 1000);\r\n return fn;\r\n }\r\n\r\n // pop up the game if redirected from home\r\n //if (SnhuUtilities.GetParameterByName('kce') == '1') {\r\n var trigger = SnhuUtilities.GetCookie('gdee');\r\n if (trigger == '1') {\r\n SnhuUtilities.ExpireCookie('gdee');\r\n $.fancybox({\r\n href: '/assets/gdee/index.html',\r\n width: '980px',\r\n height: '780px',\r\n type: 'iframe',\r\n afterShow: function() {\r\n $('.fancybox-inner iframe').attr('tabindex', 1).focus();\r\n }\r\n });\r\n }\r\n //}\r\n });\r\n})(jQuery);\r\n\r\n","/*\r\n * Fix the Adobe flash z-index issue in IE.\r\n */\r\n(function ($) {\r\n\r\n function fixFlashIE() {\r\n //var frames = document.getElementsByTagName(\"iframe\");\r\n var frames = $('#main iframe');\r\n for (var i = 0; i < frames.length; i++) {\r\n var src = frames[i].src;\r\n if (src) {\r\n var q = src.indexOf('?') >= 0 ? '&' : '?';\r\n frames[i].src += q + \"wmode=opaque\";\r\n }\r\n }\r\n }\r\n\r\n var ua = window.navigator.userAgent;\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older\r\n $(fixFlashIE);\r\n }\r\n\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11\r\n $(fixFlashIE);\r\n }\r\n\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+)\r\n $(fixFlashIE);\r\n }\r\n\r\n})(jQuery);\r\n","/*\r\n * Provide useful methods for manipulating alignment grids.\r\n */\r\nvar GridController = (function ($) {\r\n\t\r\n\tvar win, timer;\r\n\t\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\twin.on('load', equalizeGrids);\r\n\t\twin.on('resize', function () {\r\n\t\t\tclearTimeout(timer);\r\n\t\t\ttimer = setTimeout(equalizeGrids, 44);\r\n\t\t});\r\n\t}\r\n\t\r\n\t// Given a selection of grids, equalize the heights on the children of the grid.\r\n\tfunction equalizeGrids() {\r\n\t\t$(\".grid\").each(function () {\r\n\t\t\tvar grid = $(this);\r\n\t\t\tif (BreakpointController.isMobile()) {\r\n\t\t\t\tgrid.children().css('height', '');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (grid.hasClass('equalize') && grid.children().length > 1) {\r\n\t\t\t\tvar shouldEqualize = grid.hasClass('equalize-content');\r\n\t\t\t\tvar columnCount = parseInt(grid.attr('data-column-count'));\r\n\t\t\t\tvar items = grid.children();\r\n\t\t\t\t\r\n\t\t\t\t// Split this array of items up in groups of and perform the equalization on there.\r\n\t\t\t\tif (columnCount && columnCount > 1) {\r\n\t\t\t\t\tfor (var i=0; i *')).css('height', '');\r\n\t\t\r\n\t\tif (equalizeContent) {\r\n\t\t\tselection.find('.content').css('height', '');\r\n\t\t}\r\n\t\tvar h = 0;\r\n\t\tselection.each(function () {\r\n\t\t\tvar el = $(this);\r\n\t\t\tvar elHeight = el.outerHeight();\r\n\t\t\th = elHeight > h ? elHeight : h;\r\n\t\t});\r\n\t\tif (h > 0) {\r\n\t\t\tselection.css('height', h);\r\n\t\t}\r\n\t\tif (equalizeContent) {\r\n\t\t\tselection.each(function () {\r\n\t\t\t\tvar el = $(this);\r\n\t\t\t\tvar elHeight = el.outerHeight();\r\n\t\t\t\tvar img = el.find('.img');\r\n\t\t\t\tvar content = el.find('.content');\r\n\t\t\t\tif (img.length !== 0 && content.length !== 0) {\r\n\t\t\t\t\tcontent.css('height', elHeight - img.outerHeight());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t// Remove forced display so elements can be hidden if the stylesheet specifies that behavior.\r\n\t\tselection.css('display', '');\r\n\t}\r\n\t\r\n\t$(ready);\r\n\t\r\n\treturn {\r\n\t\tequalizeGrids: equalizeGrids,\r\n\t\tequalizeHeights: equalizeHeights\r\n\t};\r\n\t\r\n})(jQuery);","/*\r\n * Masthead behavior.\r\n */\r\nvar MastheadController = (function ($) {\r\n\t\r\n\tvar win, masthead, popup, mastheadh1, timeout = 2000;\r\n\t\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\tmasthead = $(\"section.content .masthead\");\r\n popup = $(\".popup\", masthead);\r\n mastheadh1 = masthead.find(\"h1\");\r\n\t\t\r\n\t\tif (!BreakpointController.isMobile()) {\r\n\t\t\tsetTimeout(show, timeout);\r\n }\r\n if (mastheadh1.length > 0 && masthead.length > 0 && (mastheadh1.outerHeight() > masthead.height())) {\r\n mastheadh1.css(\"max-width\", \"90%\");\r\n }\r\n }\r\n\t\r\n\tfunction show() {\r\n\t\tpopup.stop(true, true).slideDown(250, 'easeOutQuart');\r\n\t}\r\n\t\r\n\tfunction hide() {\r\n\t\tpopup.stop(true, true).slideUp(250, 'easeOutQuart');\r\n\t}\r\n\t\r\n\t$(ready);\r\n\t\r\n})(jQuery);","/*\r\n * Mobile navigation controller.\r\n */\r\nvar NavControllerMobile = (function ($) {\r\n\r\n var body, mobileNav, toggleNav, touchEvent, utilityNav,\r\n animationTimeout = 600,\r\n speedyAnimationTimeout = 400,\r\n animationOffset = Math.floor(animationTimeout / 5);\r\n\r\n function ready() {\r\n body = $(document.body);\r\n toggleNav = $(\"a.toggle-nav\");\r\n touchEvent = $(\"html\").hasClass('touch') ? 'touchend' : 'click';\r\n utilityNav = $(\"nav[aria-label='Utility Navigation'] ul\");\r\n\r\n toggleNav.on(touchEvent, toggleClick);\r\n if (touchEvent !== 'click') {\r\n toggleNav.on('click', function (e) { e.preventDefault() });\r\n }\r\n\r\n mobileNav = $(\"nav.mobile\");\r\n mobileNav.on('click', '.subnav .forward', onSubnavOpenClick);\r\n mobileNav.on('click', '.subnav .back a', onSubnavBackClick);\r\n mobileNav.on('click', '.close', onCloseClick);\r\n\r\n $(BreakpointController).on('crossBreakpoint', onCrossBreakpoint);\r\n $(OverlayController).on('overlayClick', onCloseClick);\r\n\r\n body.on('focusin', '*', function (e) {\r\n if (mobileNav.css('display') != 'block') {\r\n return;\r\n }\r\n if (isMobileNavDescendant(e.currentTarget)) {\r\n return;\r\n }\r\n closeNav();\r\n });\r\n //console.log('bound');\r\n }\r\n\r\n // Close the whole menu.\r\n function onCloseClick(e) {\r\n e.preventDefault();\r\n closeNav();\r\n }\r\n\r\n // Close the current subnav allowing the parent underneath to be displayed again.\r\n function onSubnavBackClick(e) {\r\n e.preventDefault();\r\n var clicked = $(e.target),\r\n subnav = clicked.closest('ul');\r\n\r\n closeNav({ nextNav: subnav, isSubnav: true });\r\n subnav.siblings(\"a.forward\").focus();\r\n }\r\n\r\n // On click of a subnav's chevron open the next level.\r\n function onSubnavOpenClick(e) {\r\n e.preventDefault();\r\n\r\n var clicked = $(e.target);\r\n if (!clicked.is(\"a\")) {\r\n clicked = clicked.closest('a');\r\n }\r\n\r\n openNav({ nextNav: clicked.next('ul') });\r\n }\r\n\r\n // When crossing breakpoints, close the nav if it's open.\r\n function onCrossBreakpoint(e) {\r\n quickCloseNav();\r\n }\r\n\r\n // On click of the toggle nav link / button.\r\n function toggleClick(e) {\r\n e.preventDefault();\r\n\r\n if (body.hasClass(\"nav-opening\") || body.hasClass('nav-open')) {\r\n SearchController.blur();\r\n SearchController.clear();\r\n closeNav({ isSubnav: false });\r\n }\r\n else {\r\n openNav({ animateBody: true });\r\n }\r\n }\r\n\r\n function openNav(options) {\r\n options = options || {};\r\n var nextNav = options.nextNav || mobileNav;\r\n var animateBody = !!options.animateBody;\r\n OverlayController.show();\r\n\r\n if (animateBody) {\r\n body.addClass('nav-opening');\r\n }\r\n\r\n nextNav.css({ display: 'block', right: '-100%' });\r\n nextNav.stop(true, false).animate({ right: '-0%' }, animationTimeout, 'easeOutQuart', function () {\r\n body.addClass('nav-open').removeClass('nav-opening nav-closing');\r\n });\r\n\r\n utilityNav.find(\"li a\").each(function () {\r\n $(this).attr(\"aria-hidden\", \"true\").attr('tabindex', \"-1\");\r\n });\r\n\r\n if (!!options.nextNav) {\r\n //subnav\r\n $(nextNav).find(\"li a\").each(function () {\r\n $(this).attr('tabindex', \"0\");\r\n });\r\n } else {\r\n //primarynav\r\n $(\"li.subnav\").find(\"ul li a\").each(function () {\r\n $(this).attr('tabindex', \"-1\");\r\n });\r\n }\r\n }\r\n\r\n function closeNav(options) {\r\n options = options || {};\r\n var nextNav = options.nextNav || mobileNav;\r\n var isSubnav = !!options.isSubnav;\r\n var animateBody = !isSubnav;\r\n\r\n // Close the children first if there are any\r\n var children = nextNav.find(\"li.subnav > ul:visible\");\r\n\r\n if (animateBody) {\r\n body.removeClass('nav-opening').addClass('nav-closing');\r\n }\r\n\r\n nextNav.add(children).stop(true, false).animate({ right: '-100%' }, speedyAnimationTimeout - animationOffset, 'easeOutQuart', function () {\r\n if (!isSubnav) {\r\n body.removeClass('nav-open nav-opening nav-closing');\r\n OverlayController.hide();\r\n //Primarynav\r\n utilityNav.find(\"li a\").each(function () {\r\n $(this).attr(\"aria-hidden\", \"false\").attr('tabindex', \"0\");\r\n });\r\n } else {\r\n $(nextNav).find(\"li a\").each(function () {\r\n $(this).attr('tabindex', \"-1\");\r\n });\r\n }\r\n\r\n nextNav.attr('style', '');\r\n });\r\n }\r\n\r\n function quickCloseNav(options) {\r\n options = options || {};\r\n const nextNav = options.nextNav || mobileNav;\r\n nextNav.add(nextNav.find('.subnav > ul')).attr('style', '');\r\n body.removeClass('nav-open nav-opening');\r\n }\r\n\r\n function isMobileNavDescendant(el) {\r\n if (el == mobileNav[0]) {\r\n //console.log('true');\r\n return true;\r\n }\r\n var parent = $(el).parent();\r\n if (!parent || parent.length < 1) {\r\n //console.log('false');\r\n return false;\r\n }\r\n return isMobileNavDescendant(parent[0]);\r\n }\r\n\r\n $(ready);\r\n\r\n})(jQuery);","/*\r\n * Navigation bevhaior for desktop.\r\n */\r\nvar NavController = (function ($) {\r\n\r\n var win, doc, nav;\r\n\r\n function ready() {\r\n if (BreakpointController.isMobile()) {\r\n return;\r\n }\r\n win = $(window);\r\n doc = $(document.body);\r\n nav = $(\"nav.main\");\r\n\r\n //mouse\r\n doc.on('mouseover', onMouseOver);\r\n\r\n //keyboard\r\n doc.on('focus', 'nav.main > ul > li > div a', onSectionFocusA);\r\n doc.on('click', 'nav.main ul li button.keyboardmenuaccess', onSectionFocusShowMenu);\r\n doc.on('keydown', 'nav.main ul li button.keyboardmenuaccess', onSectionFocusShowMenu);\r\n doc.on('focus', 'nav.main ul li button.keyboardmenuaccess', onSectionFocusHideMenu);\r\n doc.on('focus', 'nav.main > ul > li > a', onSectionFocus);\r\n doc.on('focusout', \"nav.main > ul > li:last-child div li:last-child a\", onLeaveNav);\r\n \r\n\r\n var hrefProp = \"\";\r\n $(\".utility\").find(\"a\").each(function () {\r\n hrefProp = $(this).attr(\"href\");\r\n if (hrefProp) {\r\n if (hrefProp.indexOf(\"http://tel\") !== -1)\r\n $(this).attr('href', hrefProp.substring(7));\r\n\r\n if (hrefProp.indexOf(\"https://tel\") !== -1)\r\n $(this).attr('href', $(this).attr(\"href\").substring(8));\r\n }\r\n });\r\n }\r\n\r\n function onMouseOver(e) {\r\n //If not within the menu, get rid of \"hover\" classes\r\n if ($(this).closest('nav.main').length === 0) {\r\n nav.find('.hover').removeClass('hover');\r\n }\r\n }\r\n \r\n //Focus Button\r\n function onSectionFocusHideMenu(e) {\r\n \r\n //No sub menu for me\r\n event.preventDefault();\r\n var mysubmenu = $(this).siblings(\"div\");\r\n var mymenuitem = mysubmenu.closest(\"li\");\r\n\r\n mymenuitem.siblings().removeClass('hover');\r\n mymenuitem.removeClass('hover');\r\n \r\n mysubmenu.find('a').each(function() {\r\n $(this).attr(\"tabindex\", \"-1\");\r\n \r\n });\r\n \r\n }\r\n\r\n //Enter Button Hit or Down Arrow\r\n function onSectionFocusShowMenu(e) {\r\n //I want to see the submenu and tab through\r\n if (e.which === 40 || e.which === 13) { //down arrow or enter\r\n event.preventDefault();\r\n var mysubmenu = $(this).siblings(\"div\");\r\n var mymenuitem = mysubmenu.closest(\"li\");\r\n \r\n mymenuitem.siblings().removeClass('hover');\r\n mymenuitem.addClass('hover');\r\n mysubmenu.find('a').each(function () {\r\n $(this).attr(\"tabindex\", \"0\");\r\n });\r\n }\r\n }\r\n\r\n //Submenu Link Focus\r\n function onSectionFocusA(e) {\r\n $(this).closest('nav.main > ul > li').siblings().removeClass('hover');\r\n $(this).closest('nav.main > ul > li').addClass('hover');\r\n } \r\n\r\n //Move away from submenu\r\n function onSectionFocus(e) {\r\n var mysubmenu = nav.find(\"li.hover > div\");\r\n nav.find(\"li\").removeClass('hover');\r\n mysubmenu.find('a').each(function () {\r\n $(this).attr(\"tabindex\", \"-1\");\r\n });\r\n }\r\n\r\n function onLeaveNav(e) {\r\n var mysubmenu = $(this).closest(\"li.hover\");\r\n mysubmenu.removeClass('hover');\r\n }\r\n\r\n\r\n $(ready);\r\n\r\n})(jQuery);","var OverlayController = (function ($) {\r\n \r\n var win, root, overlay;\r\n \r\n function ready() {\r\n win = $(window);\r\n root = $(\"#root\");\r\n \r\n overlay = $(\"
    \");\r\n root.prepend(overlay);\r\n \r\n overlay.on('click', onOverlayClick);\r\n \r\n // if ($('html').hasClass('touch')) {\r\n // overlay.on('touchend', onOverlayTouchEnd);\r\n // }\r\n }\r\n \r\n function onOverlayClick(e) {\r\n e.preventDefault();\r\n $(OverlayController).trigger('overlayClick');\r\n }\r\n \r\n function onOverlayTouchEnd(e) {\r\n e.preventDefault();\r\n $(OverlayController).trigger('overlayClick');\r\n }\r\n \r\n function hide() {\r\n overlay.stop(true, false).fadeOut(250, 'easeInOutExpo');\r\n }\r\n \r\n function show() {\r\n overlay.stop(true, false).fadeIn(250, 'easeInOutExpo');\r\n }\r\n \r\n $(ready);\r\n \r\n return {\r\n show: show,\r\n hide: hide\r\n };\r\n \r\n})(jQuery);","/*\r\n * Behavior related to videos.\r\n */\r\nvar PdfController = (function ($) {\r\n \r\n function ready() {\r\n $(\"a.pdf\").each(function () {\r\n var a = $(this);\r\n a.append(\"\");\r\n });\r\n }\r\n \r\n $(ready);\r\n \r\n})(jQuery);","(function($){\r\n\t\r\n\tfunction onDocumentReady(){\r\n\t\tif($(\"HTML\").hasClass(\"no-svg\")){\r\n\t\t\treplaceSVGImages();\r\n\t\t}\r\n\t\t\r\n\t\tif($(\"HTML\").hasClass(\"lt-ie9\")){\r\n\t\t\tredrawIcons();\r\n\t\t\tfixLastColumnGrid();\r\n\t\t\t\r\n\t\t\t// String.trim for <= IE8\r\n\t\t\tif(typeof String.prototype.trim !== 'function') {\r\n\t\t\t\tString.prototype.trim = function() {\r\n\t\t\t\t\treturn this.replace(/^\\s+|\\s+$/g, ''); \r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\tif (isTouchDevice()) {\r\n\t\t\t//Corrects Firefox on Windows throwing a false positive for touch events\r\n\t\t\tif (/Firefox/g.test(navigator.userAgent) && /Win32/g.test(navigator.platform)) {\r\n\t\t\t\t$('html').removeClass('touch').addClass('no-touch');\r\n\t\t\t}\r\n\t\t}\t\t\r\n\t}\r\n\t\r\n\tfunction fixLastColumnGrid() {\r\n\t\t$(\".grid\").each(function () {\r\n\t\t\tvar last = $(this).children().last();\r\n\t\t\tlast.addClass('last-child');\r\n\t\t});\r\n\t}\r\n\t\r\n\t// IE8 has some trouble with fontcustom icons until the mouse hovers over the element.\r\n\t// This clears and redraws them, which seems to fix it.\r\n\tfunction redrawIcons(){\r\n\t\tvar head = document.getElementsByTagName('head')[0],\r\n\t\t style = document.createElement('style');\r\n\t\tstyle.type = 'text/css';\r\n\t\tstyle.styleSheet.cssText = ':before,:after{content:none !important';\r\n\t\thead.appendChild(style);\r\n\t\tsetTimeout(function(){\r\n\t\t head.removeChild(style);\r\n\t\t}, 0);\r\n\t}\r\n\r\n\t// In browsers that don't support SVG, any image tag using an \r\n\t// svg will change to the .png file. \r\n\t// Make sure that file is saved in the same folder as the svg!\r\n\tfunction replaceSVGImages(){\r\n\t\t$(\"img[src$='.svg']\").each(function(){\r\n\t\t\tthis.src = this.src.replace(/.svg$/, '.png');\r\n\t\t});\r\n\t}\r\n\r\n\t$(onDocumentReady);\r\n})(jQuery);","/*\r\n * Responsive Image Controller\r\n * Provide a mechanism for loading the proper image size on document ready based on the current dimensions \r\n */\r\nvar ResponsiveImageController = (function ($) {\r\n\t\r\n\tvar win, body, imageSelector = \".res-img\";\r\n\t\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\tbody = $(document.body);\r\n\t\tprocessImages();\r\n\t\twin.on('load', processImages);\r\n\t\t$(BreakpointController).on('crossBreakpoint', processImages);\r\n\t}\r\n\t\r\n\tfunction cleanBgUrl(url) {\r\n\t var ret = url.replace(/^\\s*url\\(['\"]?/gi, '');\r\n\t ret = ret.replace(/['\"]?\\)\\s*$/gi, '');\r\n\t return ret;\r\n\t}\r\n\t\r\n\tfunction processImages() {\r\n\t\tvar selector = imageSelector;\r\n\t\tif (typeof arguments[0] === 'string') {\r\n\t\t\tselector = arguments[0];\r\n\t\t}\r\n\t\tvar imgs = $(selector);\r\n\t\t\r\n\t\timgs.each(function () {\r\n\t\t\tvar img = $(this),\r\n\t\t\t\tisBackground = !img.is('img'),\r\n\t\t\t\tdesktopSrc = img.attr('data-desktop-src') || cleanBgUrl((isBackground ? img.css('background-image') : img.attr('src'))),\r\n\t\t\t\tdesktopPosition = img.attr('data-desktop-position') || \"\",\r\n\t\t\t\tdesktopSize = img.attr('data-desktop-size') || \"\",\r\n\t\t\t\ttabletSrc = img.attr('data-tablet-src') || desktopSrc, \r\n\t\t\t\ttabletPosition = img.attr('data-tablet-position') || \"\", \r\n\t\t\t\ttabletSize = img.attr('data-tablet-size') || \"\", \r\n\t\t\t\tmobileSrc = img.attr('data-mobile-src') || tabletSrc, \r\n\t\t\t\tmobilePosition = img.attr('data-mobile-position') || \"\", \r\n\t\t\t\tmobileSize = img.attr('data-mobile-size') || \"\", \r\n\t\t\t\twidth = body.innerWidth();\r\n\t\t\t\t\r\n\t\t\t// Decide which image to load and load the proper src into the image.\r\n\t\t\tif (desktopSrc && (width > BreakpointController.IPAD_LANDSCAPE)) {\r\n\t\t\t if (isBackground) {\r\n\t\t\t\timg.css('background-image', 'url(\"' + desktopSrc + '\")');\r\n\t\t\t\timg.css('background-position', desktopPosition);\r\n\t\t\t\timg.css('background-size', desktopSize);\r\n\t\t\t }\r\n\t\t\t else {\r\n\t\t\t\timg[0].src = desktopSrc; \r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\telse if (tabletSrc && (width <= BreakpointController.IPAD_LANDSCAPE && width > BreakpointController.PHONE_LANDSCAPE)) {\r\n\t\t\t if (isBackground) {\r\n\t\t\t\timg.css('background-image', 'url(\"' + tabletSrc + '\")');\r\n\t\t\t\timg.css('background-position', tabletPosition);\r\n\t\t\t\timg.css('background-size', tabletSize);\r\n\t\t\t }\r\n\t\t\t else {\r\n\t\t\t\timg[0].src = tabletSrc; \r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\telse if (mobileSrc && (width <= BreakpointController.PHONE_LANDSCAPE)) {\r\n\t\t\t if (isBackground) {\r\n\t\t\t\timg.css('background-image', 'url(\"' + mobileSrc + '\")');\r\n\t\t\t\timg.css('background-position', mobilePosition);\r\n\t\t\t\timg.css('background-size', mobileSize);\r\n\t\t\t }\r\n\t\t\t else {\r\n\t\t\t\timg[0].src = mobileSrc; \r\n\t\t\t }\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t$(ready);\r\n\t\r\n\t// Return object representing the public API.\r\n\treturn (function () {\r\n\t\tvar ret = {\r\n\t\t\tprocessImages: processImages,\r\n\t\t\tcleanBgUrl: cleanBgUrl,\r\n\t\t};\r\n\t\tObject.defineProperty(ret, 'imageSelector', {\r\n\t\t\tget: function () {\r\n\t\t\t\treturn imageSelector;\r\n\t\t\t}, \r\n\t\t\tset: function (sel) {\r\n\t\t\t\timageSelector = sel;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn ret;\r\n\t})();\r\n\t\r\n})(jQuery);\r\n","/*\r\n * Behavior governing result lists.\r\n */\r\nvar ResultsController = (function ($) {\r\n \r\n var doc, loadMoreUrl = '/foo/bar',\r\n results, fakeResults;\r\n \r\n function ready() {\r\n doc = $(document.body);\r\n doc.on('click', '.load-more', onLoadMoreClick);\r\n \r\n results = $(\".results\");\r\n fakeResults = results.children('li').clone();\r\n\r\n }\r\n \r\n function onLoadMoreClick(e) {\r\n e.preventDefault();\r\n \r\n $.ajax(loadMoreUrl)\r\n .done(function () {\r\n // TODO: Make an actual request for data.\r\n })\r\n .fail(function () {\r\n \r\n })\r\n .always(function () {\r\n // For now, just duplicate the results to simulate the behavior.\r\n // TODO: Get rid of this dummy behavior once the feature is implemented.\r\n var last = results.children('li').last();\r\n \r\n fakeResults = fakeResults.clone();\r\n fakeResults.css('opacity', 0);\r\n results.append(fakeResults);\r\n ScrollController.scrollTo(last);\r\n fakeResults.animate({opacity: 1}, 750, 'easeOutQuart');\r\n GridController.equalizeGrids();\r\n \r\n });\r\n }\r\n\r\n \r\n $(ready);\r\n \r\n})(jQuery);","/*\r\n * Scroll to top controller.\r\n */\r\nvar ScrollController = (function ($) {\r\n\r\n var win, doc, body, topLink, timer, topLinkContainer;\r\n\r\n function ready() {\r\n win = $(window);\r\n doc = $(document.body);\r\n body = doc;\r\n\r\n // Don't bother with \"Back to top\" if this is a mobile device.\r\n if (!BreakpointController.isMobile()) {\r\n\r\n topLinkContainer = $(\"\");\r\n topLink = $(\"Top\");\r\n topLinkContainer.prepend(topLink);\r\n body.append(topLinkContainer);\r\n\r\n topLink.on('click', onBackToTopClick);\r\n\r\n checkLinkVisibility();\r\n win.on('scroll', checkLinkVisibilityTimeout);\r\n }\r\n\r\n // If links are marked with a data-scroll-to selector, use the scrollTo function's animation to perform the scrolling so it looks nice.\r\n doc.on('click', 'a[data-scroll-to]', onScrollToClick);\r\n }\r\n\r\n // On click of a data-scroll-to element use the scrollTo method to navigate to the item.\r\n function onScrollToClick(e) {\r\n var element = $(e.target),\r\n scrollToElement = $(element.attr('data-scroll-to'));\r\n\r\n if (!scrollToElement || scrollToElement.length === 0) return;\r\n\r\n e.preventDefault();\r\n scrollTo(scrollToElement, BreakpointController.isMobile());\r\n }\r\n\r\n // When the link is clicked, head back to the top of the page.\r\n function onBackToTopClick(e) {\r\n e.preventDefault();\r\n scrollTo();\r\n }\r\n\r\n // Scroll to the top of the page.\r\n function scrollTo(element, fudgeHeaderHeight, callback) {\r\n if (typeof callback !== 'function') {\r\n callback = function () { };\r\n }\r\n element = $(element);\r\n fudgeHeaderHeight = !!fudgeHeaderHeight;\r\n var position = (element && element.length > 0) ? element.offset().top : 0;\r\n if (fudgeHeaderHeight) {\r\n position -= $(\"#root header\").outerHeight();\r\n if (position < 0) {\r\n position = 0;\r\n }\r\n }\r\n $('html, body').animate({ scrollTop: position }, 400, 'easeInOutExpo', callback);\r\n }\r\n\r\n // Check whether or not the Back to Top link should be visible or not.\r\n function checkLinkVisibility() {\r\n if (win.scrollTop() >= win.height() * 0.33333333333) {\r\n showTopLink();\r\n }\r\n else {\r\n hideTopLink();\r\n }\r\n }\r\n\r\n function checkLinkVisibilityTimeout() {\r\n clearTimeout(timer);\r\n timer = setTimeout(function () {\r\n checkLinkVisibility();\r\n }, 14);\r\n }\r\n\r\n function showTopLink() {\r\n if (topLink.is(\":visible\")) return;\r\n topLink.css({ right: -topLink.outerWidth() + 'px', display: \"block\" });\r\n topLink.stop(true, false).animate({ right: 0 }, 250, 'easeInOutExpo');\r\n }\r\n\r\n function hideTopLink(quick) {\r\n if (!topLink.is(\":visible\") || topLink.hasClass('ux-closing')) return;\r\n\r\n topLink.addClass('ux-closing');\r\n\r\n topLink.stop(true, false).animate({ right: -topLink.outerWidth() + 'px' }, 250, 'easeInOutExpo', function () {\r\n topLink.attr('style', '');\r\n topLink.removeClass('ux-closing');\r\n });\r\n }\r\n\r\n $(ready);\r\n\r\n return {\r\n scrollTo: scrollTo,\r\n showTopLink: showTopLink,\r\n hideTopLink: hideTopLink\r\n };\r\n\r\n})(jQuery);","/*\r\n * Search behavior.\r\n */\r\nvar SearchController = (function ($) {\r\n \r\n var doc, win, header, toggleSearch, searchUI, searchUIDesktop, closeButton, searchInput,\r\n searchUrl = \"/search\",\r\n defaultValue = \"Search\",\r\n defaultValueTest = /^\\s*Search\\s*$/;\r\n \r\n function ready() {\r\n win = $(window);\r\n doc = $(document.body);\r\n header = $('header');\r\n searchUI = $(\".search-ui\", header);\r\n searchUIDesktop = $(\"header > .search-ui\");\r\n closeButton = $('.close', searchUIDesktop);\r\n searchInput = $('input[type=text]', searchUI);\r\n toggleSearch = $(\"a.toggle-search\", header);\r\n toggleSearch.on('click', onToggleSearchClick);\r\n closeButton.on('click', onCloseClick);\r\n searchInput.on('keypress', onSearchInputKeypress);\r\n searchInput.on('keyup', onSearchInputKeyup);\r\n doc.on('click', onDocClick);\r\n fixGoogleSearchStyles();\r\n }\r\n \r\n /*\r\n * Apply a special class to tables within the Google search widget\r\n * so that they can be targeted with CSS.\r\n */\r\n function fixGoogleSearchStyles() {\r\n $('form.gsc-search-box').find('table').addClass('google-search');\r\n }\r\n \r\n function onMobileSearchInputFocus(e) {\r\n var clicked = $(e.target);\r\n if (BreakpointController.isMobile()) {\r\n searchInput.val('').removeClass('placeholder');\r\n }\r\n }\r\n \r\n // On document click, close the search if not a toggle or clicking somewhere within the search.\r\n function onDocClick(e) {\r\n var clicked = $(e.target);\r\n \r\n if (!(clicked.closest(\"a.toggle-search\").length > 0 || clicked.closest('.search-ui').length > 0)) {\r\n close();\r\n }\r\n }\r\n \r\n // Execute a search by hitting the Search Url with the querystring parameter.\r\n function executeSearch(q) {\r\n q = \"\" + q;\r\n if (!/^\\s*$/.test(q)) {\r\n window.location.href = searchUrl + \"?ss360Query=\" + encodeURIComponent(q);\r\n }\r\n }\r\n\r\n // If enter key is pressed, fire off the search.\r\n function onSearchInputKeypress(e) {\r\n var searchInput = $(e.target);\r\n switch(e.keyCode) {\r\n case 13:\r\n e.preventDefault();\r\n executeSearch(searchInput.val());\r\n break;\r\n case 27:\r\n e.preventDefault();\r\n close();\r\n break;\r\n }\r\n }\r\n \r\n function onSearchInputKeyup(e) {\r\n switch(e.keyCode) {\r\n case 27:\r\n e.preventDefault();\r\n close();\r\n break;\r\n }\r\n }\r\n \r\n function onCloseClick(e) {\r\n e.preventDefault();\r\n close();\r\n }\r\n \r\n function onToggleSearchClick(e) {\r\n e.preventDefault();\r\n if (searchUIDesktop.is(\":visible\")) {\r\n close();\r\n }\r\n else {\r\n open();\r\n }\r\n }\r\n \r\n // Expand the search.\r\n function open() {\r\n searchUIDesktop.slideDown(400, 'easeOutQuart', function () {\r\n if ($(\"html\").hasClass(\"lt-ie9\")) return;\r\n searchInput.focus();\r\n searchInput.val('');\r\n });\r\n }\r\n \r\n // Close the search.\r\n function close(clearInput) {\r\n clearInput = !!clearInput;\r\n searchUIDesktop.slideUp(400, 'easeOutQuart', function () {\r\n searchInput.val('');\r\n if ($(\"html\").hasClass(\"lt-ie9\")) {\r\n searchInput.focus();\r\n searchInput.blur();\r\n }\r\n });\r\n }\r\n \r\n // Blur the textbox so it doesn't have focus any more.\r\n function blur() {\r\n searchInput.blur();\r\n }\r\n \r\n // Clear the input.\r\n function clear() {\r\n searchInput.val('');\r\n }\r\n \r\n $(ready);\r\n return {\r\n open: open,\r\n close: close,\r\n executeSearch: executeSearch,\r\n blur: blur,\r\n clear: clear\r\n };\r\n \r\n})(jQuery);","/*\r\n * Provide tab functionality.\r\n */\r\nvar TabController = (function ($) {\r\n\r\n\tvar doc;\r\n\r\n\tfunction ready() {\r\n\t\tdoc = $(document.body);\r\n doc.on('click', '.tab-group > ul li', onTabClick);\r\n doc.on('focusin', '.tab-content div', onTabFocusin);\r\n /* \r\n * This should be able to be just an additional event bound to \r\n * doc.on('click', '.tab-group > ul li', onTabClick);\r\n * or by binding \r\n * doc.on('focusin', '.tab-group > ul li', onTabClick);\r\n * but neither of those seem to work.\r\n */\r\n $('.tab-group > ul li').on('focusin', onTabClick);\r\n }\r\n\r\n function onTabClick(e) {\r\n e.preventDefault();\r\n var tab = $(e.currentTarget);\r\n\t\tif (!tab.hasClass('active')) {\r\n\t\t\tvar tabGroup = tab.closest('.tab-group'),\r\n\t\t\t\t\ttabId = tab.attr('data-tab-id'),\r\n\t\t\t\t\ttabContent = tabGroup.find('.tab-content');\r\n\t\t\t\r\n\t\t\ttabContent.add(tab.siblings()).removeClass('active');\r\n\t\t\ttabContent.filter('[data-tab-id=\"' + tabId + '\"]').add(tab).addClass('active');\r\n\t\t}\r\n }\r\n\r\n /* if content is in focus (via tabbing/screen reader), make sure the tab is active */\r\n function onTabFocusin(e) {\r\n e.preventDefault();\r\n var tab = $(e.currentTarget.closest('.tab-content'));\r\n if (!tab.hasClass('active')) {\r\n var tabGroup = tab.closest('.tab-group'),\r\n tabId = tab.attr('data-tab-id'),\r\n tabContent = tabGroup.find('.tab-content'),\r\n tabMakeActive = tabGroup.find(\"li[data-tab-id='\" + tabId + \"']\");\r\n tabContent.add(tab.siblings()).removeClass('active');\r\n tabContent.filter('[data-tab-id=\"' + tabId + '\"]').add(tab).addClass('active');\r\n tabMakeActive.siblings().removeClass('active');\r\n tabMakeActive.addClass('active');\r\n }\r\n }\r\n\r\n\t$(ready);\r\n\r\n})(jQuery);\r\n","/*\r\n * Code related to tables and responsive tables.\r\n */\r\nvar TableController = (function ($) {\r\n\r\n\tvar ret, win;\r\n\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\tfixRawTables();\r\n\t\taddHeaderAttrsToTableRows(\"table.data\");\r\n\r\n\t\tif (BreakpointController.isMobile()) {\r\n\t\t\tfixDataTableHeights();\r\n\t\t\twin.on('load resize', fixDataTableHeights);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fixDataTableHeights() {\r\n\t\tfixHeights.apply($(\"table.data tbody tr td\"));\r\n\t}\r\n\r\n\tfunction fixHeights() {\r\n\t\t$(this).each(function () {\r\n\t\t\tvar td = $(this),\r\n\t\t\t\ttitle = td.children('.header-title'),\r\n\t\t\t\tvalue = td.children('.field-value');\r\n\r\n\t\t\t// Remove current inline height\r\n\r\n\t\t\ttitle.add(value).css('height', '');\r\n\t\t\tvar h1 = title.outerHeight(),\r\n\t\t\t\th2 = value.outerHeight();\r\n\r\n\t\t\ttitle.add(value).css('height', Math.max(h1, h2));\r\n\t\t});\r\n\t}\r\n\r\n\t/*\r\n\t * For each regular table, make it look like a data table if it's within a content area.\r\n\t */\r\n\tfunction fixRawTables() {\r\n\t\t$(\"section.content .content table\").not('.data').each(function () {\r\n\t\t\tvar table = $(this);\r\n\t\t\tvar klass = table.attr('class');\r\n\r\n\t\t\t// If class attr is blank, add the data class.\r\n\t\t\tif (!klass || /^\\s*$/gi.test(klass)) {\r\n\t\t\t\ttable.addClass('data');\r\n\t\t\t\taddMissingThead.apply(table);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// If a table doesn't have a thead element in it, make it so by grabbing the first row and turning the td into a th or using the th if it's there.\r\n\tfunction addMissingThead() {\r\n\t\tvar table = $(this),\r\n\t\t\ttbody = table.find('tbody'),\r\n\t\t\tthead = table.find('thead');\r\n\r\n\t\t// If there's already a thead then don't bother.\t\r\n\t\tif (thead.length > 1) return;\r\n\r\n\t\t// Create a new thead\r\n\t\tthead = $(\"\");\r\n\t\tvar theadTr = thead.children('tr');\r\n\r\n\t\tvar firstRow = tbody.children('tr').first();\r\n\t\tfirstRow.children('th').each(function () {\r\n\t\t\tvar th = $(this);\r\n\t\t\ttheadTr.append(th);\r\n\t\t});\r\n\t\tfirstRow.children('td').each(function () {\r\n\t\t\tvar td = $(this),\r\n\t\t\t\tth = $(\"\");\r\n\t\t\tth.html(td.html());\r\n\t\t\ttheadTr.append(th);\r\n\t\t});\r\n\r\n\t\tfirstRow.remove();\r\n\t\ttable.prepend(thead);\r\n\t}\r\n\r\n\t/*\r\n\t * For each table, add attributes containing the header titles to the \r\n\t * td elements in the row so the CSS has access to the title value when \r\n\t * using the smaller stacked layout.\r\n\t */\r\n\tfunction addHeaderAttrsToTableRows(selector) {\r\n\t\t$(selector).each(function () {\r\n\t\t\tvar table = $(this),\r\n\t\t\t\theaders = [];\r\n\t\t\t$('thead th', table).each(function (i, el) {\r\n\t\t\t\tvar header = $(this);\r\n\t\t\t\theaders.push(header.attr('data-small-title') || header.html().trim());\r\n\t\t\t});\r\n\t\t\t$(\"tbody > tr\", table).each(function () {\r\n\t\t\t\tvar row = $(this),\r\n\t\t\t\t\tcols = row.children('td'),\r\n\t\t\t\t\ttable = row.closest('table'),\r\n\t\t\t\t\theaderColumnCount = table.find('thead th').length;\r\n\r\n\t\t\t\tcols.each(function (i) {\r\n\t\t\t\t\tvar td = $(this),\r\n\t\t\t\t\t\tcolspan = parseInt(td.attr('colspan'));\r\n\r\n\t\t\t\t\ttd.attr('data-header-title', headers[i] || \"\");\r\n\r\n\t\t\t\t\tif (BreakpointController.isMobile()) {\r\n\t\t\t\t\t\tvar isFullWidthBlock = !!(colspan && colspan === headerColumnCount);\r\n\r\n\t\t\t\t\t\t// Reset the content back to what it was before.\r\n\t\t\t\t\t\tvar html = '';\r\n\t\t\t\t\t\tvar existingFieldValue = td.children('.field-value');\r\n\t\t\t\t\t\t// If there's an existing field value, use that element's .html() value.\r\n\t\t\t\t\t\tif (existingFieldValue.length > 0) {\r\n\t\t\t\t\t\t\thtml = existingFieldValue.html();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// Otherwise, just use the .html() value of the element itself.\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\thtml = td.html();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Destroy whatever's in there because we have the value saved at this point.\r\n\t\t\t\t\t\ttd.html('');\r\n\r\n\t\t\t\t\t\t// If it's not a full width block, add the header title.\r\n\t\t\t\t\t\tif (!isFullWidthBlock) {\r\n\t\t\t\t\t\t\tvar title = $(\"\");\r\n\t\t\t\t\t\t\ttitle.html(headers[i]);\r\n\t\t\t\t\t\t\ttd.append(title);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar fieldValue = $(\"\");\r\n\t\t\t\t\t\tif (isFullWidthBlock) {\r\n\t\t\t\t\t\t\tfieldValue.addClass('full');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfieldValue.html(html);\r\n\t\t\t\t\t\ttd.append(fieldValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t$(ready);\r\n\r\n\tret = {\r\n\t\tfixDataTableHeights: fixDataTableHeights\r\n\t};\r\n\treturn ret;\r\n\r\n})(jQuery);","/*\r\n * Control behavior of testimonials on the home page as well as the side bar.\r\n */\r\nvar TestimonialController = (function ($) {\r\n\t\r\n var win, body, timeout, sharedTestimonialId,\r\n\t\tresetStyles = {position: '', display: '', left: '', right: ''};\r\n\t\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\tbody = $(document.body);\r\n\t\t\r\n if (document.body.classList.contains(\"home\")) {\r\n body.on('click', '.testimonials .prev', onHomePrevClick);\r\n body.on('click', '.testimonials .next', onHomeNextClick);\r\n }\r\n else {\r\n body.on('click', '.testimonials .prev', onAsidePrevClick);\r\n body.on('click', '.testimonials .next', onAsideNextClick);\r\n }\r\n\t\t\r\n if (!body.hasClass('home')) {\r\n\t\t\tif ($(\"html\").hasClass(\"lt-ie9\")) {\r\n\t\t\t\t$(\".testimonials\").addClass(\"testimonials-not-home\");\r\n\t\t\t}\r\n\t\t}\r\n win.on('load', resizeTestimonials);\r\n win.on('resize', resizeTestimonials);\r\n\r\n\t\tsharedTestimonialId = getUrlParameter('tid');\r\n\t\tif (sharedTestimonialId !== '') {\r\n\t\t sharedTestimonialId = sharedTestimonialId.replace('{', '').replace('}', '');\r\n\t\t setSharedTestimonial(sharedTestimonialId);\r\n\t\t}\r\n\t}\r\n\r\n function resizeTestimonials() {\r\n clearTimeout(timeout);\r\n var childSelector = body.hasClass('home') ? '.item' : 'div';\r\n timeout = setTimeout(function () {\r\n GridController.equalizeHeights($(\".testimonials\").children(childSelector));\t\r\n\t\t}, 44);\r\n\t}\r\n\r\n\tfunction onHomePrevClick(e) {\r\n\t\te.preventDefault();\r\n\t\tvar clicked = $(e.target), \r\n\t\t\t\titems = clicked.closest('.testimonials').children('.item');\r\n\t\tmovePrev(items, '.item');\r\n\t}\r\n\tfunction onHomeNextClick(e) {\r\n\t\te.preventDefault();\r\n\t\tvar clicked = $(e.target), \r\n\t\t\t\titems = clicked.closest('.testimonials').children('.item');\r\n\t\tmoveNext(items, '.item');\r\n\t}\r\n\tfunction onAsidePrevClick(e) {\r\n\t\te.preventDefault();\r\n\t\tvar clicked = $(e.target), \r\n\t\t\t\titems = clicked.closest('.testimonials').children('div');\r\n\t\tmovePrev(items);\r\n\t}\r\n\tfunction onAsideNextClick(e) {\r\n\t\te.preventDefault();\r\n\t\tvar clicked = $(e.target), \r\n\t\t\t\titems = clicked.closest('.testimonials').children('div');\r\n\t\tmoveNext(items);\r\n\t}\r\n\t\r\n\tfunction movePrev(items, itemSelector) {\r\n\t\titemSelector = itemSelector || 'div';\r\n\t\titems.css(resetStyles);\r\n\t\tvar active = items.filter('.active');\r\n\t\tvar prev = active.prev(itemSelector);\r\n\t\tif (prev.length === 0) {\r\n\t\t\tprev = items.last(itemSelector);\r\n\t\t}\r\n\t\tif (prev.length > 0) {\r\n\t\t\tactive.removeClass('active');\r\n prev.css({ display: 'block', position: 'relative', left: 'auto', right: '20px' });\r\n resizeTestimonials();\r\n\t\t\tprev.stop(true, false).animate({right: 0}, 750, 'easeOutQuart', function () {\r\n prev.css(resetStyles);\r\n\t\t\t});\r\n\t\t\tprev.addClass('active');\r\n\t\t\tif (typeof GridController !== 'undefined') {\r\n\t\t\t\tGridController.equalizeGrids();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction moveNext(items, itemSelector) {\r\n\t\titemSelector = itemSelector || 'div';\r\n\t\titems.css(resetStyles);\r\n\t\tvar active = items.filter('.active');\r\n\t\tvar next = active.next(itemSelector);\r\n\t\tif (next.length === 0) {\r\n\t\t\tnext = items.first(itemSelector);\r\n\t\t}\r\n\t\tif (next.length > 0) {\r\n\t\t\tactive.removeClass('active');\r\n next.css({ display: 'block', position: 'relative', left: '20px' });\r\n resizeTestimonials();\r\n\t\t\tnext.stop(true, false).animate({ left: 0 }, 750, 'easeOutQuart', function () {\r\n next.css(resetStyles);\r\n\t\t\t});\r\n\t\t\tnext.addClass('active');\r\n\t\t\tif (typeof GridController !== 'undefined') {\r\n\t\t\t\tGridController.equalizeGrids();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\r\n\tfunction setSharedTestimonial(testimonialId) {\r\n\t if ($(\"div.testimonials div[data-tid*='\" + testimonialId.toUpperCase() + \"']\").length > 0) {\r\n\t $('div.testimonials div.active').removeClass('active');\r\n\t var sharedTestimonial = $(\"div.testimonials div[data-tid*='\" + testimonialId.toUpperCase() + \"']\").first();\r\n\t $(sharedTestimonial).addClass('active');\r\n\t var testimonialLink = $(sharedTestimonial).find('a.modal-trigger');\r\n //if (typeof(MouseEvent) === 'function') {\r\n var event = new MouseEvent('click', {\r\n 'view': window,\r\n 'bubbles': true,\r\n 'cancelable': true\r\n });\r\n $(testimonialLink)[0].dispatchEvent(event);\r\n //}\r\n\t }\r\n\t}\r\n\r\n\tfunction getUrlParameter(sParam) {\r\n\t var sPageURL = decodeURIComponent(window.location.search.substring(1)),\r\n sURLVariables = sPageURL.split('&'),\r\n sParameterName,\r\n i;\r\n\r\n\t for (i = 0; i < sURLVariables.length; i++) {\r\n\t sParameterName = sURLVariables[i].split('=');\r\n\r\n\t if (sParameterName[0] === sParam) {\r\n\t return sParameterName[1] === undefined ? true : sParameterName[1];\r\n\t }\r\n\t }\r\n\t return '';\r\n\t}\r\n\r\n\t$(ready);\r\n\t\r\n})(jQuery);","\r\nvar UStream = (function() {\r\n\r\n function fixUI(ustreamContainer) {\r\n var siblings = ustreamContainer.children(\"iframe\").nextAll();\r\n ustreamContainer.after(siblings);\r\n }\r\n\r\n var ret = {\r\n fixUI: fixUI\r\n };\r\n return ret;\r\n\r\n})();\r\n","/*\n * Classes-Start Controller Start.\n */\nvar ClassesStartController = (function ($) {\n\n var bread, classstart, breadholder; //, masthead; \n\n classstart = $(\"section[aria-label='Classes Start']\");\n bread = $(\"ul.breadcrumbs\");\n breadholder = $(\"div.js-breadcrumbs-holder\");\n //masthead = $(\"div.masthead\");\n \n function ready() {\n moveclassesStart();\n }\n\n function moveclassesStart() {\n if (!BreakpointController.isMobile() && classstart.length) {\n $(breadholder).addClass(\"breadcrumb-classes-start\");\n $(classstart).insertAfter(bread);\n if (bread.height() > 21) {\n $(\"body.inner #main\").addClass(\"classesStartFixBread\");\n }\n } //else if (classstart.length && $(classstart).parents('.js-breadcrumbs-holder').length) {\n //$(classstart).insertAfter(masthead);\n //} \n }\n \n $(ready);\n return;\n\n})(jQuery);\n\n/*\n * Classes-Start Controller End.\n */","/*\n * Explore-Button Controller Start.\n */\nvar ExploreButtonController = (function ($) {\n\n var topexplorebutton, bottomexplorebutton, topsocial, bottomsocial;\n\n topexplorebutton = $(\"#main a.article-explore-button\"); \n bottomexplorebutton = $(\"#root > div.clear > a.article-explore-button\");\n topsocial = $(\"#main div.article-byline div.newsroom-social\");\n bottomsocial = $(\"#root > div.newsroom-social\");\n\n function ready() {\n moveExploreButton();\n }\n\n function moveExploreButton() {\n if (BreakpointController.isMobile() ) {\n if (topsocial.length === 1 && topexplorebutton.length === 1) {\n topsocial.prepend(topexplorebutton);\n }\n\n if (bottomsocial.length === 1 && bottomexplorebutton.length === 1) {\n bottomsocial.prepend(bottomexplorebutton);\n }\n \n \n }\n }\n\n $(ready);\n return;\n\n})(jQuery);\n\n/*\n * Explore-Button Controller End.\n */","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(factory());\n}(this, (function () { 'use strict';\n\n/**\n * Module export\n *\n * @param {Element} el\n * @return {ClassList}\n */\n\nvar index = function (el) {\n return new ClassList(el);\n};\n\n/**\n * Initialize a new ClassList for the given element\n *\n * @param {Element} el DOM Element\n */\nfunction ClassList(el) {\n if (!el || el.nodeType !== 1) {\n throw new Error('A DOM Element reference is required');\n }\n\n this.el = el;\n this.classList = el.classList;\n}\n\n/**\n * Check token validity\n *\n * @param token\n * @param [method]\n */\nfunction checkToken(token, method) {\n method = method || 'a method';\n\n if (typeof token != 'string') {\n throw new TypeError(\n 'Failed to execute \\'' + method + '\\' on \\'ClassList\\': ' +\n 'the token provided (\\'' + token + '\\') is not a string.'\n );\n }\n if (token === \"\") {\n throw new SyntaxError(\n 'Failed to execute \\'' + method + '\\' on \\'ClassList\\': ' +\n 'the token provided must not be empty.'\n );\n }\n if (/\\s/.test(token)) {\n throw new Error(\n 'Failed to execute \\'' + method + '\\' on \\'ClassList\\': ' +\n 'the token provided (\\'' + token + '\\') contains HTML space ' +\n 'characters, which are not valid in tokens.'\n );\n }\n}\n\n/**\n * Return an array of the class names on the element.\n *\n * @return {Array}\n */\nClassList.prototype.toArray = function () {\n var str = (this.el.getAttribute('class') || '').replace(/^\\s+|\\s+$/g, '');\n var classes = str.split(/\\s+/);\n if ('' === classes[0]) { classes.shift(); }\n return classes;\n};\n\n/**\n * Add the given `token` to the class list if it's not already present.\n *\n * @param {String} token\n */\nClassList.prototype.add = function (token) {\n var classes, index, updated;\n checkToken(token, 'add');\n\n if (this.classList) {\n this.classList.add(token);\n }\n else {\n // fallback\n classes = this.toArray();\n index = classes.indexOf(token);\n if (index === -1) {\n classes.push(token);\n this.el.setAttribute('class', classes.join(' '));\n }\n }\n\n return;\n};\n\n/**\n * Check if the given `token` is in the class list.\n *\n * @param {String} token\n * @return {Boolean}\n */\nClassList.prototype.contains = function (token) {\n checkToken(token, 'contains');\n\n return this.classList ?\n this.classList.contains(token) :\n this.toArray().indexOf(token) > -1;\n};\n\n/**\n * Remove any class names that match the given `token`, when present.\n *\n * @param {String|RegExp} token\n */\nClassList.prototype.remove = function (token) {\n var arr, classes, i, index, len;\n\n if ('[object RegExp]' == Object.prototype.toString.call(token)) {\n arr = this.toArray();\n for (i = 0, len = arr.length; i < len; i++) {\n if (token.test(arr[i])) {\n this.remove(arr[i]);\n }\n }\n }\n else {\n checkToken(token, 'remove');\n\n if (this.classList) {\n this.classList.remove(token);\n }\n else {\n // fallback\n classes = this.toArray();\n index = classes.indexOf(token);\n if (index > -1) {\n classes.splice(index, 1);\n this.el.setAttribute('class', classes.join(' '));\n }\n }\n }\n\n return;\n};\n\n/**\n * Toggle the `token` in the class list. Optionally force state via `force`.\n *\n * Native `classList` is not used as some browsers that support `classList` do\n * not support `force`. Avoiding `classList` altogether keeps this function\n * simple.\n *\n * @param {String} token\n * @param {Boolean} [force]\n * @return {Boolean}\n */\nClassList.prototype.toggle = function (token, force) {\n checkToken(token, 'toggle');\n\n var hasToken = this.contains(token);\n var method = hasToken ? (force !== true && 'remove') : (force !== false && 'add');\n\n if (method) {\n this[method](token);\n }\n\n return (typeof force == 'boolean' ? force : !hasToken);\n};\n\n/**\n * https://github.com/WICG/focus-ring\n */\nfunction init() {\n var hadKeyboardEvent = false;\n var elWithFocusRing;\n\n var inputTypesWhitelist = {\n 'text': true,\n 'search': true,\n 'url': true,\n 'tel': true,\n 'email': true,\n 'password': true,\n 'number': true,\n 'date': true,\n 'month': true,\n 'week': true,\n 'time': true,\n 'datetime': true,\n 'datetime-local': true,\n };\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-ring` class being added, i.e. whether it should always match\n * `:focus-ring` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName == 'INPUT' && inputTypesWhitelist[type] && !el.readonly)\n return true;\n\n if (tagName == 'TEXTAREA' && !el.readonly)\n return true;\n\n if (el.contentEditable == 'true')\n return true;\n\n return false;\n }\n\n /**\n * Add the `focus-ring` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusRingClass(el) {\n if (index(el).contains('focus-ring'))\n return;\n index(el).add('focus-ring');\n el.setAttribute('data-focus-ring-added', '');\n }\n\n /**\n * Remove the `focus-ring` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusRingClass(el) {\n if (!el.hasAttribute('data-focus-ring-added'))\n return;\n index(el).remove('focus-ring');\n el.removeAttribute('data-focus-ring-added');\n }\n\n /**\n * On `keydown`, set `hadKeyboardEvent`, add `focus-ring` class if the\n * key was Tab.\n * @param {Event} e\n */\n function onKeyDown(e) {\n if (e.altKey || e.ctrlKey || e.metaKey)\n return;\n\n if (e.keyCode != 9)\n return;\n\n hadKeyboardEvent = true;\n }\n\n /**\n * On `focus`, add the `focus-ring` class to the target if:\n * - the target received focus as a result of keyboard navigation\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n if (e.target == document)\n return;\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusRingClass(e.target);\n hadKeyboardEvent = false;\n }\n }\n\n /**\n * On `blur`, remove the `focus-ring` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (e.target == document)\n return;\n\n removeFocusRingClass(e.target);\n }\n\n /**\n * When the window regains focus, restore the focus-ring class to the element\n * to which it was previously applied.\n */\n function onWindowFocus() {\n if (document.activeElement == elWithFocusRing)\n addFocusRingClass(elWithFocusRing);\n\n elWithFocusRing = null;\n }\n\n /**\n * When switching windows, keep track of the focused element if it has a\n * focus-ring class.\n */\n function onWindowBlur() {\n if (index(document.activeElement).contains('focus-ring')) {\n // Keep a reference to the element to which the focus-ring class is applied\n // so the focus-ring class can be restored to it if the window regains\n // focus after being blurred.\n elWithFocusRing = document.activeElement;\n }\n }\n\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('focus', onFocus, true);\n document.addEventListener('blur', onBlur, true);\n window.addEventListener('focus', onWindowFocus, true);\n window.addEventListener('blur', onWindowBlur, true);\n\n index(document.body).add('js-focus-ring');\n}\n\n/**\n * Subscription when the DOM is ready\n * @param {Function} callback\n */\nfunction onDOMReady(callback) {\n var loaded;\n\n /**\n * Callback wrapper for check loaded state\n */\n function load() {\n if (!loaded) {\n loaded = true;\n\n callback();\n }\n }\n\n if (document.readyState === 'complete') {\n callback();\n } else {\n loaded = false;\n document.addEventListener('DOMContentLoaded', load, false);\n window.addEventListener('load', load, false);\n }\n}\n\nonDOMReady(init);\n\n})));\n","var BreakpointController = (function($){\r\n\tvar ret = {},\r\n\t\tIPHONE_PORTRAIT = 320,\r\n\t\tIPHONE_LANDSCAPE = 480,\r\n\t\tPHONE_LANDSCAPE = 736,\r\n\t\tSIX_FORTY = 640,\r\n\t\tIPAD_PORTRAIT = 768,\r\n\t\tIPAD_LANDSCAPE = 1024,\r\n\t\tTWELVE_EIGHTY = 1280,\r\n\t\tFOURTEEN_HUNDRED = 1400,\r\n\t\twin,\r\n\t\tcurrentBreakpoint,\r\n\t\tbreakpoints = [\r\n\t\t\t{ label: \"iphone-portrait\", width: IPHONE_PORTRAIT },\r\n\t\t\t{ label: \"iphone-landscape\", width: IPHONE_LANDSCAPE },\r\n\t\t\t{ label: \"phone-landscape\", width: PHONE_LANDSCAPE },\r\n\t\t\t{ label: \"six-forty\", width: SIX_FORTY },\r\n\t\t\t{ label: \"ipad-portrait\", width: IPAD_PORTRAIT },\r\n\t\t\t{ label: \"ipad-landscape\", width: IPAD_LANDSCAPE },\r\n\t\t\t{ label: \"twelve-eighty\", width: TWELVE_EIGHTY },\r\n\t\t\t{ label: \"fourteen-hundred\", width: FOURTEEN_HUNDRED }\r\n\t\t];\r\n\r\n\tfunction onDocumentReady(){\r\n\t\twin = $(window);\r\n\t\twin.on('resize', checkWindow);\r\n\t\tcheckWindow();\r\n\t}\r\n\r\n\tfunction checkWindow(){\r\n\t\tvar w = win.width(),\r\n\t\t\tret;\r\n\r\n\t\tfor(var i=0; i= breakpoint.width)\r\n\t\t\t{\r\n\t\t\t\tret = breakpoint.width;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetBreakpoint(ret);\r\n\t}\r\n\r\n\tfunction setBreakpoint(breakpoint){\r\n\t\tif(breakpoint !== currentBreakpoint)\r\n\t\t{\r\n\t\t\tcurrentBreakpoint = breakpoint;\r\n\t\t\t$(BreakpointController).trigger('crossBreakpoint');\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tcurrentBreakpoint = breakpoint;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction isMobile() {\r\n\t\t// return $(window).outerWidth() <= PHONE_LANDSCAPE;\r\n\t\t// Instead of checking the device width which can be misleading, check a special body class that is added from the server to determine mobile vs. desktop.\r\n\t\treturn $(\"body\").hasClass('mobile-device');\r\n\t}\r\n\t// function isTablet() {\r\n\t// \t// var width = $(window).outerWidth();\r\n\t// \t// return width > PHONE_LANDSCAPE && width <= IPAD_LANDSCAPE;\r\n\t// \treturn $(\"body\").hasClass('mobile-device');\r\n\t// }\r\n\t// function isDesktop() {\r\n\t// \t// return $(window).outerWidth() > PHONE_LANDSCAPE;\r\n\t// \treturn !$(\"body\").hasClass('mobile-device');\r\n\t// }\r\n\r\n\tret = {\r\n\t\tgetBreakpoint: function(){\r\n\t\t\treturn currentBreakpoint;\r\n\t\t},\r\n\t\tisMobile: isMobile,\r\n\t\t// isTablet: isTablet,\r\n\t\t// isDesktop: isDesktop,\r\n\t\tIPHONE_PORTRAIT: IPHONE_PORTRAIT,\r\n\t\tIPHONE_LANDSCAPE: IPHONE_LANDSCAPE,\r\n\t\tPHONE_LANDSCAPE: PHONE_LANDSCAPE,\r\n\t\tSIX_FORTY: SIX_FORTY,\r\n\t\tIPAD_PORTRAIT: IPAD_PORTRAIT,\r\n\t\tIPAD_LANDSCAPE: IPAD_LANDSCAPE,\r\n\t\tTWELVE_EIGHTY: TWELVE_EIGHTY,\r\n\t\tFOURTEEN_HUNDRED: FOURTEEN_HUNDRED\r\n\t};\r\n\r\n\t$(onDocumentReady);\r\n\r\n\treturn ret;\r\n})(jQuery);\r\n","/*\r\n * Modals using fancy box.\r\n */\r\nvar ModalController = (function($) {\r\n\r\n\tvar win, doc, dump,\r\n\t\tmodalParam = /(?:\\?|&)modal=([^&]+)(?:$|&)/gi,\r\n\t\tmodalSelector = \".modal-content\",\r\n\t\tvideoSelector = \".video-container\",\r\n\t\tfocusableElements = [\"a\",\"button\",\"input\",\"link\",\"select\",\"textarea\",\"iframe\"],\r\n\t\tfocusableSelector = focusableElements.join(\",\"),\r\n\t\tlastFocus = null;\r\n\r\n\tfunction ready() {\r\n\t\twin = $(window);\r\n\t\tdoc = $(document.body);\r\n\t\tdump = $(\"
    \");\r\n\r\n\t\tdoc.on(\"click\", \".modal-trigger\", onModalOpenClick);\r\n\t\tdoc.on(\"click\", \".modal-close\", onModalCloseClick);\r\n\t\tdoc.on(\"change\", \"select.modal-trigger\", onModalSelectChange);\r\n\t\tdoc.on(\"focus\", focusableSelector, onElementFocus);\r\n\t\tdoc.on(\"keyup\", onKeyUp);\r\n\r\n doc.on(\"keydown\", \"a.fancybox-close\", preventModalTabOut);\r\n\r\n function preventModalTabOut(e) {\r\n var key = e.which || e.keyCode;\r\n if (key != 9) { // Tab.\r\n return;\r\n }\r\n $(modalSelector)\r\n .find(focusableSelector)[0]\r\n .focus();\r\n return false;\r\n };\r\n\r\n\t\tvar qs = document.location.search;\r\n\t\tvar m = modalParam.exec(qs);\r\n\r\n\t\tif (m && m.length > 1) {\r\n\t\t\tvar val = decodeURIComponent(m[1]);\r\n\t\t\t// If this starts with a slash, then it's supposed to be a path to a video so treat it as such and use the path to load the given video even though it might not be on the same page.\r\n\t\t\tif (/^\\//gi.test(val)) {\r\n\t\t\t\tvar a = $(\"\");\r\n\t\t\t\ta.attr(\"href\", val);\r\n\t\t\t\tpullFromHref.call(a);\r\n\t\t\t} else if (/open/i.test(val)) {\r\n\t\t\t\t// Open the first modal that can be found on the screen.\r\n\t\t\t\tonModalOpenClick.call($(\".modal-trigger.video\")[0]);\r\n\t\t\t} else {\r\n\t\t\t\t// Default case will treat the value as a jQuery selector and open that as a modal.\r\n\t\t\t\tvar modalTrigger = $(val);\r\n\t\t\t\tif (modalTrigger.length > 0) {\r\n\t\t\t\t\tonModalOpenClick.call(modalTrigger[0]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onElementFocus(e) {\r\n\t\tvar me = $(e.target);\r\n\t\tvar inFancybox = me.closest(\".fancybox-wrap\").length > 0;\r\n\t\tif (!inFancybox) {\r\n\t\t\te.stopPropagation();\r\n\t\t\tcloseAllModals();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onKeyUp(e) {\r\n\t\t// Let TAB through because we want the user to be able to navigate.\r\n\t\tif (e.keyCode === 9) { // TAB\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tswitch (e.keyCode) {\r\n\t\t\tcase 27: // ESC\r\n\t\t\t\tcloseAllModals();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// Move the fancybox from it's default location outside of the
    tag to\r\n\t// the end of the #root element so the styles cascade correctly.\r\n\tfunction fixFancyboxPosition() {\r\n\t\tvar fbox = $(\".fancybox-overlay, .fancybox-mobile\");\r\n\t\tvar root = $(\"#root\");\r\n\t\tif (root.length > 0 && !fbox.parent().is(\"#root\")) {\r\n\t\t\tfbox.detach();\r\n\t\t\t$(\"#root\").append(fbox);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\tfunction afterFancyboxLoad(current, previous) {\r\n\t\tfixFancyboxPosition();\r\n\t}\r\n\r\n\tfunction afterFancyboxShow() {\r\n\t\tsetFocusToModal.apply(this, arguments);\r\n\t\t\r\n\t\t// Re-equalize any grids that might have ended up in the modal.\r\n\t\tif (typeof(GridController) !== \"undefined\") {\r\n\t\t\tGridController.equalizeGrids();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setFocusToModal(current, previous) {\r\n\t var inner = $(this.inner),\r\n\t focusableElements = inner.find(focusableSelector);\r\n\r\n // Set tab order so that when tabbing out of the modal the user should proceed back to the element that opened the modal and not the end of the document.\r\n\t focusableElements.add(\"a.fancybox-close\").each(function (i) {\r\n\t $(this).attr(\"tabindex\", i + 1);\r\n\t });\r\n\t var content = focusableElements.first();\r\n\t\tcontent.focus();\r\n\t}\r\n\r\n function afterClose() {\r\n if (lastFocus) {\r\n lastFocus.focus();\r\n }\r\n\t}\r\n\r\n\tfunction onModalOpenClick(e) {\r\n\t var clicked = $(this),\r\n\t isMobile = BreakpointController.isMobile(),\r\n\t forceOnMobile = clicked.attr(\"data-modal-mobile\") === \"true\";\r\n\t lastFocus = clicked;\r\n\r\n\t\tif (clicked.is(\"select\") || (isMobile && !forceOnMobile)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\t\tcloseAllModals();\r\n\t\tif (clicked.attr(\"data-modal-target\")) {\r\n\t\t\tpullFromElement.apply(this, arguments);\r\n\t\t} else {\r\n\t\t\tpullFromHref.apply(this, arguments);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/*\r\n\t * On modal close click, close the fancybox modals.\r\n\t */\r\n\tfunction onModalCloseClick(e) {\r\n\t\te.preventDefault();\r\n\t\tcloseAllModals();\r\n\t}\r\n\r\n\tfunction closeAllModals() {\r\n if ($.fancybox) {\r\n $.fancybox.close(true);\r\n }\r\n\t}\r\n\r\n\t// For a dropdown, if a given value is supposed to trigger the modal,\r\n\t// mark those values in an attribute.\r\n\tfunction onModalSelectChange(e) {\r\n\t\tvar clicked = $(e.currentTarget);\r\n\t\t// Get selected options\r\n\t\tvar option = clicked.children(\"option:selected\");\r\n\t\tvar modalSelector = option.attr(\"data-modal-target\");\r\n\t\tif (modalSelector) {\r\n\t\t\tvar contentTarget = $(modalSelector);\r\n\t\t\tif (contentTarget.length > 0) {\r\n\t\t\t\t$.fancybox({\r\n\t\t\t\t\tcontent: contentTarget.html(),\r\n\t\t\t\t\tafterLoad: afterFancyboxLoad,\r\n\t\t\t\t\tafterShow: afterFancyboxShow,\r\n\t\t\t\t\tafterClose: afterClose\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t * Pull the data for the modal from the URL provided in the href attribute.\r\n\t */\r\n\tfunction pullFromHref(e) {\r\n\t\tvar clicked = $((e) ? e.currentTarget : this);\r\n\t\tvar url = clicked.attr(\"href\");\r\n if (!url) {\r\n return;\r\n }\r\n\t\tvar operator = (url.indexOf(\"?\") < 0) ? \"?\" : \"&\";\r\n\t\tdump.load(url + operator + \"modaltrigger=true\", function() {\r\n\t\t\tvar modalContent = dump.find(videoSelector);\r\n\t\t\tif (modalContent.length === 0) {\r\n\t\t\t\tmodalContent = dump.find(modalSelector);\r\n\t\t\t}\r\n\t\t\tif (modalContent.length > 0) {\r\n\t\t\t\tmodalContent.addClass(\"modal-content-active\");\r\n\t\t\t\tvar html = \"\";\r\n\t\t\t\tmodalContent.each(function() {\r\n\t\t\t\t\thtml += $(\"
    \").append($(this).clone()).html();\r\n\t\t\t\t});\r\n\t\t\t\t$.fancybox({\r\n\t\t\t\t\tcontent: html,\r\n\t\t\t\t\tafterLoad: afterFancyboxLoad,\r\n\t\t\t\t\tafterShow: afterFancyboxShow,\r\n\t\t\t\t\tafterClose: afterClose\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/*\r\n\t * Pull HTML content into the modal from a target element.\r\n\t */\r\n\tfunction pullFromElement(e) {\r\n\t\tvar clicked = $((e) ? e.currentTarget : this),\r\n\t\t\ttargetSelector = \"\" + clicked.attr(\"data-modal-target\");\r\n\r\n\t\ttry {\r\n\t\t\tvar contentTarget = $(targetSelector);\r\n\t\t\tif (contentTarget.length > 0) {\r\n\t\t\t\t$.fancybox({\r\n\t\t\t\t\tcontent: contentTarget.html(),\r\n\t\t\t\t\tafterLoad: afterFancyboxLoad,\r\n\t\t\t\t\tafterShow: afterFancyboxShow,\r\n\t\t\t\t\tafterClose: afterClose\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t* Open up a fancybox modal\r\n\t*/\r\n\tfunction openContentModal(opts) {\r\n\t\topts = opts || {};\r\n\t\topts.content = opts.content || \"\";\r\n\t\topts.afterLoad = opts.afterLoad || afterFancyboxLoad;\r\n\t\topts.afterShow = opts.afterShow || afterFancyboxShow;\r\n\t\topts.afterClose = opts.afterClose || afterClose;\r\n\t\treturn $.fancybox(opts);\r\n\t}\r\n\r\n\t$(ready);\r\n\r\n\treturn {\r\n\t\tready: ready,\r\n\t\tfixFancyboxPosition: fixFancyboxPosition,\r\n\t\topenContentModal: openContentModal\r\n\t};\r\n\r\n})(jQuery);\r\n\r\nif (typeof Sys !== \"undefined\") {\r\n\tvar prm = Sys.WebForms.PageRequestManager.getInstance();\r\n\r\n\tprm.add_endRequest(function() {\r\n\t\tModalController.ready();\r\n\t});\r\n}\r\n","var snhuCookie = (function () {\r\n\r\n const GlobalTrackingCookieName = \"SNHUGlobalTracking\";\r\n const VenpubIDCookieName = \"SNHUvenpubid\";\r\n const GlobalTrackingDomain = \"snhu.edu\";\r\n const GlobalTrackingDaysActive = 30;\r\n const TrackingName = \"Tracking\";\r\n const GlobalTrackingParams = [\"nan_pid\", \"ioguid\", \"k_clickid\", \"venpubid\", \"adxcel_clickid\", \"searchedterm\", \"pfsegment\", \"matchtype\", \"device\", \"msclid\", \"gclid\"];\r\n\r\n function RenameSearchEngineClickIds(obj) {\r\n const ClickId = obj['gclid'] || obj['msclid'];\r\n delete obj['msclid'];\r\n delete obj['gclid'];\r\n if (ClickId) {\r\n obj['ClickId'] = ClickId;\r\n }\r\n }\r\n\r\n function GetCookieByName(name) {\r\n var pos = document.cookie.indexOf(name + '=');\r\n if (pos == -1) {\r\n return null;\r\n } else {\r\n var pos2 = document.cookie.indexOf(';', pos);\r\n if (pos2 == -1) {\r\n return unescape(document.cookie.substring(pos + name.length + 1));\r\n } else {\r\n return unescape(document.cookie.substring(pos + name.length + 1, pos2));\r\n }\r\n }\r\n }\r\n\r\n function WriteCookie(cookieValue, cookieName) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * GlobalTrackingDaysActive));\r\n document.cookie = `${cookieName}=${cookieValue};expires=${date};path=/;domain=.${GlobalTrackingDomain};`;\r\n }\r\n\r\n function ExpireCookie(cookieName) {\r\n const date = new Date();\r\n date.setTime(date.getTime() - (1000 * 60 * 60 * 24 * GlobalTrackingDaysActive));\r\n document.cookie = `${cookieName}=;expires=${date};path=/;domain=.${GlobalTrackingDomain};`;\r\n }\r\n\r\n // Convert a list of objects into a serialized format for the cookie.\r\n function serialize(list) {\r\n return list.map((val, i) => `${TrackingName}${i + 1}=${escape(JSON.stringify(val))}`)\r\n .join('&');\r\n }\r\n\r\n // Return an array of tracker values from the cookie.\r\n function deserialize(str) {\r\n if (!str) {\r\n return [];\r\n }\r\n return str.split('&').reduce((acc, val) => {\r\n const v = val.split('=');\r\n const trackerKey = v[0];\r\n const trackerValue = unescape(v[1]);\r\n acc.push(JSON.parse(trackerValue));\r\n return acc;\r\n }, []);\r\n }\r\n\r\n function PopulateCookieFromQueryString() {\r\n // if querystring is empty, don't bother.\r\n if (!window.location.search) {\r\n return;\r\n }\r\n\r\n // Start with what's on the querystring.\r\n const qs = window.location.search.replace(/^\\?/, '').split('&').reduce((acc, val) => {\r\n const items = val.split('=');\r\n const k = items[0];\r\n const v = items[1];\r\n acc[k] = v;\r\n return acc;\r\n }, {});\r\n\r\n const trackingParams = {};\r\n\r\n if (!Object.entries)\r\n Object.entries = function (obj) {\r\n var ownProps = Object.keys(obj),\r\n i = ownProps.length,\r\n resArray = new Array(i); // preallocate the Array\r\n while (i--)\r\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\r\n\r\n return resArray;\r\n };\r\n\r\n // polyfill method for IE11 and older\r\n Object.entries(qs).forEach(qsParam => {\r\n let key = qsParam[0];\r\n let value = qsParam[1];\r\n if (GlobalTrackingParams.indexOf(key) > -1) {\r\n if (value) {\r\n trackingParams[key] = value;\r\n }\r\n }\r\n });\r\n\r\n if (Object.entries(trackingParams).length > 0) {\r\n RenameSearchEngineClickIds(trackingParams);\r\n\r\n const trackerValues = [];//deserialize(trackingCookieValue);\r\n // Append to the list of trackers\r\n trackerValues.push(trackingParams);\r\n\r\n // Serialize this\r\n var trackingCookieValue = serialize(trackerValues);\r\n\r\n // Write to cookie\r\n WriteCookie(trackingCookieValue, GlobalTrackingCookieName);\r\n\r\n //clear the venpubid in case this string doesn't contain one. We only want to store the most recent click's venpubid\r\n ExpireCookie(VenpubIDCookieName);\r\n }\r\n\r\n // If this string contains a venpubid parameter, write the venpubid cookie so we can use it to populate a conversion pixel (WSP-9823)\r\n if (trackingParams[\"venpubid\"] != null && trackingParams[\"venpubid\"].length > 0) {\r\n WriteCookie(trackingParams[\"venpubid\"], VenpubIDCookieName);\r\n }\r\n\r\n }\r\n\r\n function GetQueryStringParameter(name) {\r\n name = String(name).replace(/[.*+?|()[\\]{}\\\\]/g, '\\\\$&');\r\n var match = RegExp('[?&]' + name.toLowerCase() + '=([^&]*)').exec(window.location.search.toLowerCase());\r\n return match && (decodeURIComponent(match[1].replace(/\\+/g, ' ')));\r\n }\r\n\r\n function ParseReferrerString(referrerString) {\r\n var arr = referrerString.split('&');\r\n for (var j = 0; j < arr.length; j++) {\r\n if (arr[j].replace('?', '').indexOf('utm_source') == 0) {\r\n $('input#Source,input[name$=\"Source\"]').not('input[name=\"FormSource\"]').val(arr[j].substring(arr[j].indexOf('=') + 1, arr[j].length));\r\n }\r\n if (arr[j].replace('?', '').indexOf('utm_medium') == 0) {\r\n $('input#Medium,input[name$=\"Medium\"]').val(arr[j].substring(arr[j].indexOf('=') + 1, arr[j].length));\r\n }\r\n if (arr[j].replace('?', '').indexOf('utm_content') == 0) {\r\n $('input#Content,input[name$=\"Content\"]').val(arr[j].substring(arr[j].indexOf('=') + 1, arr[j].length));\r\n }\r\n if (arr[j].replace('?', '').indexOf('utm_campaign') == 0) {\r\n $('input#Campaign,input[name$=\"Campaign\"]').not('input[name=\"SfCampaign\"]').val(arr[j].substring(arr[j].indexOf('=') + 1, arr[j].length));\r\n }\r\n if (arr[j].replace('?', '').indexOf('SNHU_Segment') == 0) {\r\n $('input#Segment,input[name$=\"Segment\"]').val(arr[j].substring(arr[j].indexOf('=') + 1, arr[j].length));\r\n }\r\n if (arr[j].replace('?', '').indexOf('utm_term') == 0) {\r\n $('input#Term,input[name$=\"Term\"]').val(arr[j].substring(arr[j].indexOf('=') + 1, arr[j].length));\r\n }\r\n }\r\n }\r\n\r\n function BuildSNHUReferrerCookie() {\r\n var defaultReferrer = '?utm_source=snhu&utm_medium=webform&utm_content=01&utm_campaign=SNHUEDU&SNHU_Segment=Unknown';\r\n var source = GetQueryStringParameter('utm_source');\r\n var medium = GetQueryStringParameter('utm_medium');\r\n var content = GetQueryStringParameter('utm_content');\r\n var campaign = GetQueryStringParameter('utm_campaign');\r\n var segment = GetQueryStringParameter('snhu_segment');\r\n var term = GetQueryStringParameter('utm_term');\r\n if (segment == 'null') {\r\n segment = \"ol\";\r\n }\r\n\r\n var currentCookie = GetCookieByName('GoogleString');\r\n var cookieString = '?utm_source=' + source + '&utm_medium=' + medium + '&utm_content=' + content + '&utm_campaign=' + campaign + '&SNHU_Segment=' + segment + '&utm_term=' + term;\r\n\r\n var date = new Date();\r\n date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * 2));\r\n\r\n if (source !== null && source != '') {\r\n WriteCookie(cookieString, 'GoogleString');\r\n $('input[name$=\"PageId\"],input#PageId').val(cookieString);\r\n $('input[name$=\"Source\"]').not('input[name=\"FormSource\"]').val(source);\r\n $('input[name$=\"Medium\"]').val(medium);\r\n $('input[name$=\"Campaign\"]').not('input[name=\"SfCampaign\"]').val(campaign);\r\n $('input[name$=\"Segment\"]').val(segment);\r\n $('input[name$=\"Content\"]').val(content);\r\n\r\n }\r\n else {\r\n if (currentCookie !== null) {\r\n // no query string, but there is a cookie\r\n $('input[name$=\"PageId\"],input#PageId').val(unescape(currentCookie));\r\n ParseReferrerString(unescape(currentCookie));\r\n }\r\n else {\r\n try {\r\n var gacookie = new gaCookies();\r\n var gaString = '?utm_source=' + gacookie.getCampaignSource() + '&utm_medium=' + gacookie.getCampaignMedium() + '&utm_content=' + gacookie.getCampaignContent() + '&utm_campaign=' + gacookie.getCampaignName() + '&utm_term=' + gacookie.getCampaignTerm() + '&SNHU_Segment=';\r\n $('input[name$=\"PageId\"],input#PageId').val(gaString);\r\n $('input[name$=\"Source\"]').not('input[name=\"FormSource\"]').val(gacookie.getCampaignSource());\r\n $('input[name$=\"Medium\"]').val(gacookie.getCampaignMedium());\r\n $('input[name$=\"Campaign\"]').not('input[name=\"SfCampaign\"]').val(gacookie.getCampaignName());\r\n $('input[name$=\"Segment\"]').val('');\r\n $('input[name$=\"Content\"]').val(gacookie.getCampaignContent());\r\n ParseReferrerString(gaString);\r\n }\r\n catch (err) {\r\n try {\r\n $('input[name$=\"PageId\"],input#PageId').val(defaultReferrer);\r\n ParseReferrerString(defaultReferrer);\r\n }\r\n catch (e) {\r\n if (window.console && typeof (window.console.log) === 'function') {\r\n window.console.log(e);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function init() {\r\n BuildSNHUReferrerCookie();\r\n PopulateCookieFromQueryString();\r\n }\r\n\r\n init();\r\n\r\n return {\r\n GetQueryStringParameter: GetQueryStringParameter\r\n }\r\n\r\n})();","\n(function () {\n const TrackingCookieName = \"SNHUAdTracking\";\n const queryParams = [\"adkeyword\", \"admatchtype\", \"addevice\", \"adcampaignid\", \"adgroupid\", \"adcampaignname\", \"adgroupname\", \"adquery\", \"adnetwork\", \"adlocationid\", \"adplacement\"];\n const CookieTrackingDaysActive = 30;\n const CookieTrackingDomain = \"snhu.edu\";\n\n\n function WriteCookie(cookieValue, cookieName) {\n var date = new Date();\n date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * CookieTrackingDaysActive));\n document.cookie = `${cookieName}=${cookieValue};expires=${date};path=/;domain=.${CookieTrackingDomain};`;\n }\n\n\n // Convert a list of objects into a serialized format for the cookie.\n function serialize(list) {\n return list.map((val, i) => `${TrackingCookieName}${i + 1}=${escape(JSON.stringify(val))}`)\n .join('&');\n }\n\n function PopulateCookieFromQueryString() {\n // if querystring is empty, don't bother.\n if (!window.location.search) {\n return;\n }\n\n // Start with what's on the querystring.\n var qs = window.location.search.replace(/^\\?/, '').split('&').reduce((acc, val) => {\n var items = val.split('=');\n var k = items[0];\n var v = items[1];\n acc[k] = v;\n return acc;\n }, {});\n\n var trackingParams = {};\n for (var key of Object.keys(qs)) {\n if (queryParams.map(function (item) { return item.toLowerCase(); }).indexOf(key.toLowerCase()) > -1) {\n var qsValue = qs[key];\n if (qsValue) {\n trackingParams[key.toLowerCase()] = qsValue;\n }\n }\n }\n\n if (Object.keys(trackingParams).length > 0) {\n var trackerValues = [];\n trackerValues.push(trackingParams);\n var trackingCookieValue = serialize(trackerValues);\n WriteCookie(trackingCookieValue, TrackingCookieName);\n }\n }\n\n PopulateCookieFromQueryString();\n})();\n\n","var SnhuUtilities = {\r\n //\r\n GetParameterByName: function (name) {\r\n name = String(name).replace(/[.*+?|()[\\]{}\\\\]/g, '\\\\$&');\r\n var match = RegExp('[?&]' + name + '=([^&]*)', 'i').exec(window.location.search);\r\n return match && (decodeURIComponent(match[1].replace(/\\+/g, ' ')));\r\n },\r\n\r\n GetCurrentDateTime: function () {\r\n var today = new Date();\r\n var dd = today.getDate();\r\n var mm = today.getMonth() + 1; //January is 0!\r\n var yyyy = today.getFullYear();\r\n if (dd < 10) { dd = '0' + dd };\r\n if (mm < 10) { mm = '0' + mm };\r\n\r\n var hours = today.getHours();\r\n var minutes = today.getMinutes();\r\n if (minutes < 10) {\r\n minutes = '0' + minutes;\r\n }\r\n var seconds = today.getSeconds();\r\n if (seconds < 10) {\r\n seconds = '0' + seconds;\r\n }\r\n var milliseconds = today.getMilliseconds();\r\n if (milliseconds < 10) {\r\n milliseconds = '0' + seconds;\r\n }\r\n\r\n var today = mm + '/' + dd + '/' + yyyy + ' ' + hours + ':' + minutes + ':' + seconds + '.' + milliseconds;\r\n return today;\r\n },\r\n\r\n TextCounter: function (field, cnt, maxlimit) { \r\n var cntfield = document.getElementById(cnt) \r\n if (field.value.length > maxlimit) { // if too long...trim it!\r\n field.value = field.value.substring(0, maxlimit);\r\n }else{\r\n // otherwise, update 'characters left' counter \r\n cntfield.value = maxlimit - field.value.length;\r\n }\r\n },\r\n\r\n SetCookie: function(cname, cvalue, exdays, path) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (exdays*24*60*60*1000));\r\n var expires = \"expires=\"+ d.toUTCString() + \"; path=\" + path;\r\n document.cookie = cname + \"=\" + cvalue + \"; \" + expires;\r\n },\r\n\r\n GetCookie: function (cname) {\r\n var name = cname + \"=\";\r\n var ca = document.cookie.split(';');\r\n for(var i = 0; i \");\r\n });\r\n $(\"div.video\").each(function () {\r\n var a = $(this);\r\n a.append(\"\");\r\n });\r\n }\r\n \r\n $(ready);\r\n \r\n})(jQuery);","/*!\n * fancyBox - jQuery Plugin\n * version: 2.1.5 (Fri, 14 Jun 2013)\n * @requires jQuery v1.6 or later\n *\n * Examples at http://fancyapps.com/fancybox/\n * License: www.fancyapps.com/fancybox/#license\n *\n * Copyright 2012 Janis Skarnelis - janis@fancyapps.com\n *\n */\n\n(function (window, document, $, undefined) {\n\t\"use strict\";\n\n\tvar H = $(\"html\"),\n\t\tW = $(window),\n\t\tD = $(document),\n\t\tF = $.fancybox = function () {\n\t\t\tF.open.apply( this, arguments );\n\t\t},\n\t\tIE = navigator.userAgent.match(/msie/i),\n\t\tdidUpdate\t= null,\n\t\tisTouch\t\t= document.createTouch !== undefined,\n\n\t\tisQuery\t= function(obj) {\n\t\t\treturn obj && obj.hasOwnProperty && obj instanceof $;\n\t\t},\n\t\tisString = function(str) {\n\t\t\treturn str && $.type(str) === \"string\";\n\t\t},\n\t\tisPercentage = function(str) {\n\t\t\treturn isString(str) && str.indexOf('%') > 0;\n\t\t},\n\t\tisScrollable = function(el) {\n\t\t\treturn (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));\n\t\t},\n\t\tgetScalar = function(orig, dim) {\n\t\t\tvar value = parseInt(orig, 10) || 0;\n\n\t\t\tif (dim && isPercentage(orig)) {\n\t\t\t\tvalue = F.getViewport()[ dim ] / 100 * value;\n\t\t\t}\n\n\t\t\treturn Math.ceil(value);\n\t\t},\n\t\tgetValue = function(value, dim) {\n\t\t\treturn getScalar(value, dim) + 'px';\n\t\t};\n\n\t$.extend(F, {\n\t\t// The current version of fancyBox\n\t\tversion: '2.1.5',\n\n\t\tdefaults: {\n\t\t\tpadding : 15,\n\t\t\tmargin : 20,\n\n\t\t\twidth : 800,\n\t\t\theight : 600,\n\t\t\tminWidth : 100,\n\t\t\tminHeight : 100,\n\t\t\tmaxWidth : 9999,\n\t\t\tmaxHeight : 9999,\n\t\t\tpixelRatio: 1, // Set to 2 for retina display support\n\n\t\t\tautoSize : true,\n\t\t\tautoHeight : false,\n\t\t\tautoWidth : false,\n\n\t\t\tautoResize : true,\n\t\t\tautoCenter : !isTouch,\n\t\t\tfitToView : true,\n\t\t\taspectRatio : false,\n\t\t\ttopRatio : 0.5,\n\t\t\tleftRatio : 0.5,\n\n\t\t\tscrolling : 'auto', // 'auto', 'yes' or 'no'\n\t\t\twrapCSS : '',\n\n\t\t\tarrows : true,\n\t\t\tcloseBtn : true,\n\t\t\tcloseClick : false,\n\t\t\tnextClick : false,\n\t\t\tmouseWheel : true,\n\t\t\tautoPlay : false,\n\t\t\tplaySpeed : 3000,\n\t\t\tpreload : 3,\n\t\t\tmodal : false,\n\t\t\tloop : true,\n\n\t\t\tajax : {\n\t\t\t\tdataType : 'html',\n\t\t\t\theaders : { 'X-fancyBox': true }\n\t\t\t},\n\t\t\tiframe : {\n\t\t\t\tscrolling : 'auto',\n\t\t\t\tpreload : true\n\t\t\t},\n\t\t\tswf : {\n\t\t\t\twmode: 'transparent',\n\t\t\t\tallowfullscreen : 'true',\n\t\t\t\tallowscriptaccess : 'always'\n\t\t\t},\n\n\t\t\tkeys : {\n\t\t\t\tnext : {\n\t\t\t\t\t13 : 'left', // enter\n\t\t\t\t\t34 : 'up', // page down\n\t\t\t\t\t39 : 'left', // right arrow\n\t\t\t\t\t40 : 'up' // down arrow\n\t\t\t\t},\n\t\t\t\tprev : {\n\t\t\t\t\t8 : 'right', // backspace\n\t\t\t\t\t33 : 'down', // page up\n\t\t\t\t\t37 : 'right', // left arrow\n\t\t\t\t\t38 : 'down' // up arrow\n\t\t\t\t},\n\t\t\t\tclose : [27], // escape key\n\t\t\t\tplay : [32], // space - start/stop slideshow\n\t\t\t\ttoggle : [70] // letter \"f\" - toggle fullscreen\n\t\t\t},\n\n\t\t\tdirection : {\n\t\t\t\tnext : 'left',\n\t\t\t\tprev : 'right'\n\t\t\t},\n\n\t\t\tscrollOutside : true,\n\n\t\t\t// Override some properties\n\t\t\tindex : 0,\n\t\t\ttype : null,\n\t\t\thref : null,\n\t\t\tcontent : null,\n\t\t\ttitle : null,\n\n\t\t\t// HTML templates\n\t\t\ttpl: {\n\t\t\t\twrap : '
    ',\n\t\t\t\timage : '\"\"',\n\t\t\t\tiframe : '',\n\t\t\t\terror : '

    The requested content cannot be loaded.
    Please try again later.

    ',\n closeBtn: '
    Close',\n\t\t\t\tnext : '',\n\t\t\t\tprev : ''\n\t\t\t},\n\n\t\t\t// Properties for each animation type\n\t\t\t// Opening fancyBox\n\t\t\topenEffect : 'fade', // 'elastic', 'fade' or 'none'\n\t\t\topenSpeed : 250,\n\t\t\topenEasing : 'swing',\n\t\t\topenOpacity : true,\n\t\t\topenMethod : 'zoomIn',\n\n\t\t\t// Closing fancyBox\n\t\t\tcloseEffect : 'fade', // 'elastic', 'fade' or 'none'\n\t\t\tcloseSpeed : 250,\n\t\t\tcloseEasing : 'swing',\n\t\t\tcloseOpacity : true,\n\t\t\tcloseMethod : 'zoomOut',\n\n\t\t\t// Changing next gallery item\n\t\t\tnextEffect : 'elastic', // 'elastic', 'fade' or 'none'\n\t\t\tnextSpeed : 250,\n\t\t\tnextEasing : 'swing',\n\t\t\tnextMethod : 'changeIn',\n\n\t\t\t// Changing previous gallery item\n\t\t\tprevEffect : 'elastic', // 'elastic', 'fade' or 'none'\n\t\t\tprevSpeed : 250,\n\t\t\tprevEasing : 'swing',\n\t\t\tprevMethod : 'changeOut',\n\n\t\t\t// Enable default helpers\n\t\t\thelpers : {\n\t\t\t\toverlay : true,\n\t\t\t\ttitle : true\n\t\t\t},\n\n\t\t\t// Callbacks\n\t\t\tonCancel : $.noop, // If canceling\n\t\t\tbeforeLoad : $.noop, // Before loading\n\t\t\tafterLoad : $.noop, // After loading\n\t\t\tbeforeShow : $.noop, // Before changing in current item\n\t\t\tafterShow : $.noop, // After opening\n\t\t\tbeforeChange : $.noop, // Before changing gallery item\n\t\t\tbeforeClose : $.noop, // Before closing\n\t\t\tafterClose : $.noop // After closing\n\t\t},\n\n\t\t//Current state\n\t\tgroup : {}, // Selected group\n\t\topts : {}, // Group options\n\t\tprevious : null, // Previous element\n\t\tcoming : null, // Element being loaded\n\t\tcurrent : null, // Currently loaded element\n\t\tisActive : false, // Is activated\n\t\tisOpen : false, // Is currently open\n\t\tisOpened : false, // Have been fully opened at least once\n\n\t\twrap : null,\n\t\tskin : null,\n\t\touter : null,\n\t\tinner : null,\n\n\t\tplayer : {\n\t\t\ttimer : null,\n\t\t\tisActive : false\n\t\t},\n\n\t\t// Loaders\n\t\tajaxLoad : null,\n\t\timgPreload : null,\n\n\t\t// Some collections\n\t\ttransitions : {},\n\t\thelpers : {},\n\n\t\t/*\n\t\t *\tStatic methods\n\t\t */\n\n\t\topen: function (group, opts) {\n\t\t\tif (!group) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!$.isPlainObject(opts)) {\n\t\t\t\topts = {};\n\t\t\t}\n\n\t\t\t// Close if already active\n\t\t\tif (false === F.close(true)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normalize group\n\t\t\tif (!$.isArray(group)) {\n\t\t\t\tgroup = isQuery(group) ? $(group).get() : [group];\n\t\t\t}\n\n\t\t\t// Recheck if the type of each element is `object` and set content type (image, ajax, etc)\n\t\t\t$.each(group, function(i, element) {\n\t\t\t\tvar obj = {},\n\t\t\t\t\thref,\n\t\t\t\t\ttitle,\n\t\t\t\t\tcontent,\n\t\t\t\t\ttype,\n\t\t\t\t\trez,\n\t\t\t\t\threfParts,\n\t\t\t\t\tselector;\n\n\t\t\t\tif ($.type(element) === \"object\") {\n\t\t\t\t\t// Check if is DOM element\n\t\t\t\t\tif (element.nodeType) {\n\t\t\t\t\t\telement = $(element);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isQuery(element)) {\n\t\t\t\t\t\tobj = {\n\t\t\t\t\t\t\thref : element.data('fancybox-href') || element.attr('href'),\n\t\t\t\t\t\t\ttitle : element.data('fancybox-title') || element.attr('title'),\n\t\t\t\t\t\t\tisDom : true,\n\t\t\t\t\t\t\telement : element\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif ($.metadata) {\n\t\t\t\t\t\t\t$.extend(true, obj, element.metadata());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thref = opts.href || obj.href || (isString(element) ? element : null);\n\t\t\t\ttitle = opts.title !== undefined ? opts.title : obj.title || '';\n\n\t\t\t\tcontent = opts.content || obj.content;\n\t\t\t\ttype = content ? 'html' : (opts.type || obj.type);\n\n\t\t\t\tif (!type && obj.isDom) {\n\t\t\t\t\ttype = element.data('fancybox-type');\n\n\t\t\t\t\tif (!type) {\n\t\t\t\t\t\trez = element.prop('class').match(/fancybox\\.(\\w+)/);\n\t\t\t\t\t\ttype = rez ? rez[1] : null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isString(href)) {\n\t\t\t\t\t// Try to guess the content type\n\t\t\t\t\tif (!type) {\n\t\t\t\t\t\tif (F.isImage(href)) {\n\t\t\t\t\t\t\ttype = 'image';\n\n\t\t\t\t\t\t} else if (F.isSWF(href)) {\n\t\t\t\t\t\t\ttype = 'swf';\n\n\t\t\t\t\t\t} else if (href.charAt(0) === '#') {\n\t\t\t\t\t\t\ttype = 'inline';\n\n\t\t\t\t\t\t} else if (isString(element)) {\n\t\t\t\t\t\t\ttype = 'html';\n\t\t\t\t\t\t\tcontent = element;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Split url into two pieces with source url and content selector, e.g,\n\t\t\t\t\t// \"/mypage.html #my_id\" will load \"/mypage.html\" and display element having id \"my_id\"\n\t\t\t\t\tif (type === 'ajax') {\n\t\t\t\t\t\threfParts = href.split(/\\s+/, 2);\n\t\t\t\t\t\thref = hrefParts.shift();\n\t\t\t\t\t\tselector = hrefParts.shift();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!content) {\n\t\t\t\t\tif (type === 'inline') {\n\t\t\t\t\t\tif (href) {\n\t\t\t\t\t\t\tcontent = $( isString(href) ? href.replace(/.*(?=#[^\\s]+$)/, '') : href ); //strip for ie7\n\n\t\t\t\t\t\t} else if (obj.isDom) {\n\t\t\t\t\t\t\tcontent = element;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (type === 'html') {\n\t\t\t\t\t\tcontent = href;\n\n\t\t\t\t\t} else if (!type && !href && obj.isDom) {\n\t\t\t\t\t\ttype = 'inline';\n\t\t\t\t\t\tcontent = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$.extend(obj, {\n\t\t\t\t\thref : href,\n\t\t\t\t\ttype : type,\n\t\t\t\t\tcontent : content,\n\t\t\t\t\ttitle : title,\n\t\t\t\t\tselector : selector\n\t\t\t\t});\n\n\t\t\t\tgroup[ i ] = obj;\n\t\t\t});\n\n\t\t\t// Extend the defaults\n\t\t\tF.opts = $.extend(true, {}, F.defaults, opts);\n\n\t\t\t// All options are merged recursive except keys\n\t\t\tif (opts.keys !== undefined) {\n\t\t\t\tF.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;\n\t\t\t}\n\n\t\t\tF.group = group;\n\n\t\t\treturn F._start(F.opts.index);\n\t\t},\n\n\t\t// Cancel image loading or abort ajax request\n\t\tcancel: function () {\n\t\t\tvar coming = F.coming;\n\n\t\t\tif (!coming || false === F.trigger('onCancel')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tF.hideLoading();\n\n\t\t\tif (F.ajaxLoad) {\n\t\t\t\tF.ajaxLoad.abort();\n\t\t\t}\n\n\t\t\tF.ajaxLoad = null;\n\n\t\t\tif (F.imgPreload) {\n\t\t\t\tF.imgPreload.onload = F.imgPreload.onerror = null;\n\t\t\t}\n\n\t\t\tif (coming.wrap) {\n\t\t\t\tcoming.wrap.stop(true, true).trigger('onReset').remove();\n\t\t\t}\n\n\t\t\tF.coming = null;\n\n\t\t\t// If the first item has been canceled, then clear everything\n\t\t\tif (!F.current) {\n\t\t\t\tF._afterZoomOut( coming );\n\t\t\t}\n\t\t},\n\n\t\t// Start closing animation if is open; remove immediately if opening/closing\n\t\tclose: function (event) {\n\t\t\tF.cancel();\n\n\t\t\tif (false === F.trigger('beforeClose')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tF.unbindEvents();\n\n\t\t\tif (!F.isActive) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!F.isOpen || event === true) {\n\t\t\t\t$('.fancybox-wrap').stop(true).trigger('onReset').remove();\n\n\t\t\t\tF._afterZoomOut();\n\n\t\t\t} else {\n\t\t\t\tF.isOpen = F.isOpened = false;\n\t\t\t\tF.isClosing = true;\n\n\t\t\t\t$('.fancybox-item, .fancybox-nav').remove();\n\n\t\t\t\tF.wrap.stop(true, true).removeClass('fancybox-opened');\n\n\t\t\t\tF.transitions[ F.current.closeMethod ]();\n\t\t\t}\n\t\t},\n\n\t\t// Manage slideshow:\n\t\t// $.fancybox.play(); - toggle slideshow\n\t\t// $.fancybox.play( true ); - start\n\t\t// $.fancybox.play( false ); - stop\n\t\tplay: function ( action ) {\n\t\t\tvar clear = function () {\n\t\t\t\t\tclearTimeout(F.player.timer);\n\t\t\t\t},\n\t\t\t\tset = function () {\n\t\t\t\t\tclear();\n\n\t\t\t\t\tif (F.current && F.player.isActive) {\n\t\t\t\t\t\tF.player.timer = setTimeout(F.next, F.current.playSpeed);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstop = function () {\n\t\t\t\t\tclear();\n\n\t\t\t\t\tD.unbind('.player');\n\n\t\t\t\t\tF.player.isActive = false;\n\n\t\t\t\t\tF.trigger('onPlayEnd');\n\t\t\t\t},\n\t\t\t\tstart = function () {\n\t\t\t\t\tif (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {\n\t\t\t\t\t\tF.player.isActive = true;\n\n\t\t\t\t\t\tD.bind({\n\t\t\t\t\t\t\t'onCancel.player beforeClose.player' : stop,\n\t\t\t\t\t\t\t'onUpdate.player' : set,\n\t\t\t\t\t\t\t'beforeLoad.player' : clear\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tset();\n\n\t\t\t\t\t\tF.trigger('onPlayStart');\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (action === true || (!F.player.isActive && action !== false)) {\n\t\t\t\tstart();\n\t\t\t} else {\n\t\t\t\tstop();\n\t\t\t}\n\t\t},\n\n\t\t// Navigate to next gallery item\n\t\tnext: function ( direction ) {\n\t\t\tvar current = F.current;\n\n\t\t\tif (current) {\n\t\t\t\tif (!isString(direction)) {\n\t\t\t\t\tdirection = current.direction.next;\n\t\t\t\t}\n\n\t\t\t\tF.jumpto(current.index + 1, direction, 'next');\n\t\t\t}\n\t\t},\n\n\t\t// Navigate to previous gallery item\n\t\tprev: function ( direction ) {\n\t\t\tvar current = F.current;\n\n\t\t\tif (current) {\n\t\t\t\tif (!isString(direction)) {\n\t\t\t\t\tdirection = current.direction.prev;\n\t\t\t\t}\n\n\t\t\t\tF.jumpto(current.index - 1, direction, 'prev');\n\t\t\t}\n\t\t},\n\n\t\t// Navigate to gallery item by index\n\t\tjumpto: function ( index, direction, router ) {\n\t\t\tvar current = F.current;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tindex = getScalar(index);\n\n\t\t\tF.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];\n\t\t\tF.router = router || 'jumpto';\n\n\t\t\tif (current.loop) {\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = current.group.length + (index % current.group.length);\n\t\t\t\t}\n\n\t\t\t\tindex = index % current.group.length;\n\t\t\t}\n\n\t\t\tif (current.group[ index ] !== undefined) {\n\t\t\t\tF.cancel();\n\n\t\t\t\tF._start(index);\n\t\t\t}\n\t\t},\n\n\t\t// Center inside viewport and toggle position type to fixed or absolute if needed\n\t\treposition: function (e, onlyAbsolute) {\n\t\t\tvar current = F.current,\n\t\t\t\twrap = current ? current.wrap : null,\n\t\t\t\tpos;\n\n\t\t\tif (wrap) {\n\t\t\t\tpos = F._getPosition(onlyAbsolute);\n\n\t\t\t\tif (e && e.type === 'scroll') {\n\t\t\t\t\tdelete pos.position;\n\n\t\t\t\t\twrap.stop(true, true).animate(pos, 200);\n\n\t\t\t\t} else {\n\t\t\t\t\twrap.css(pos);\n\n\t\t\t\t\tcurrent.pos = $.extend({}, current.dim, pos);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdate: function (e) {\n\t\t\tvar type = (e && e.type),\n\t\t\t\tanyway = !type || type === 'orientationchange';\n\n\t\t\tif (anyway) {\n\t\t\t\tclearTimeout(didUpdate);\n\n\t\t\t\tdidUpdate = null;\n\t\t\t}\n\n\t\t\tif (!F.isOpen || didUpdate) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdidUpdate = setTimeout(function() {\n\t\t\t\tvar current = F.current;\n\n\t\t\t\tif (!current || F.isClosing) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tF.wrap.removeClass('fancybox-tmp');\n\n\t\t\t\tif (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {\n\t\t\t\t\tF._setDimension();\n\t\t\t\t}\n\n\t\t\t\tif (!(type === 'scroll' && current.canShrink)) {\n\t\t\t\t\tF.reposition(e);\n\t\t\t\t}\n\n\t\t\t\tF.trigger('onUpdate');\n\n\t\t\t\tdidUpdate = null;\n\n\t\t\t}, (anyway && !isTouch ? 0 : 300));\n\t\t},\n\n\t\t// Shrink content to fit inside viewport or restore if resized\n\t\ttoggle: function ( action ) {\n\t\t\tif (F.isOpen) {\n\t\t\t\tF.current.fitToView = $.type(action) === \"boolean\" ? action : !F.current.fitToView;\n\n\t\t\t\t// Help browser to restore document dimensions\n\t\t\t\tif (isTouch) {\n\t\t\t\t\tF.wrap.removeAttr('style').addClass('fancybox-tmp');\n\n\t\t\t\t\tF.trigger('onUpdate');\n\t\t\t\t}\n\n\t\t\t\tF.update();\n\t\t\t}\n\t\t},\n\n\t\thideLoading: function () {\n\t\t\tD.unbind('.loading');\n\n\t\t\t$('#fancybox-loading').remove();\n\t\t},\n\n\t\tshowLoading: function () {\n\t\t\tvar el, viewport;\n\n\t\t\tF.hideLoading();\n\n\t\t\tel = $('
    ').click(F.cancel).appendTo('body');\n\n\t\t\t// If user will press the escape-button, the request will be canceled\n\t\t\tD.bind('keydown.loading', function(e) {\n\t\t\t\tif ((e.which || e.keyCode) === 27) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tF.cancel();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!F.defaults.fixed) {\n\t\t\t\tviewport = F.getViewport();\n\n\t\t\t\tel.css({\n\t\t\t\t\tposition : 'absolute',\n\t\t\t\t\ttop : (viewport.h * 0.5) + viewport.y,\n\t\t\t\t\tleft : (viewport.w * 0.5) + viewport.x\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tgetViewport: function () {\n\t\t\tvar locked = (F.current && F.current.locked) || false,\n\t\t\t\trez = {\n\t\t\t\t\tx: W.scrollLeft(),\n\t\t\t\t\ty: W.scrollTop()\n\t\t\t\t};\n\n\t\t\tif (locked) {\n\t\t\t\trez.w = locked[0].clientWidth;\n\t\t\t\trez.h = locked[0].clientHeight;\n\n\t\t\t} else {\n\t\t\t\t// See http://bugs.jquery.com/ticket/6724\n\t\t\t\trez.w = isTouch && window.innerWidth ? window.innerWidth : W.width();\n\t\t\t\trez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();\n\t\t\t}\n\n\t\t\treturn rez;\n\t\t},\n\n\t\t// Unbind the keyboard / clicking actions\n\t\tunbindEvents: function () {\n\t\t\tif (F.wrap && isQuery(F.wrap)) {\n\t\t\t\tF.wrap.unbind('.fb');\n\t\t\t}\n\n\t\t\tD.unbind('.fb');\n\t\t\tW.unbind('.fb');\n\t\t},\n\n\t\tbindEvents: function () {\n\t\t\tvar current = F.current,\n\t\t\t\tkeys;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Changing document height on iOS devices triggers a 'resize' event,\n\t\t\t// that can change document height... repeating infinitely\n\t\t\tW.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);\n\n\t\t\tkeys = current.keys;\n\n\t\t\tif (keys) {\n\t\t\t\tD.bind('keydown.fb', function (e) {\n\t\t\t\t\tvar code = e.which || e.keyCode,\n\t\t\t\t\t\ttarget = e.target || e.srcElement;\n\n\t\t\t\t\t// Skip esc key if loading, because showLoading will cancel preloading\n\t\t\t\t\tif (code === 27 && F.coming) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore key combinations and key events within form elements\n\t\t\t\t\tif (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {\n\t\t\t\t\t\t$.each(keys, function(i, val) {\n\t\t\t\t\t\t\tif (current.group.length > 1 && val[ code ] !== undefined) {\n\t\t\t\t\t\t\t\tF[ i ]( val[ code ] );\n\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ($.inArray(code, val) > -1) {\n\t\t\t\t\t\t\t\tF[ i ] ();\n\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($.fn.mousewheel && current.mouseWheel) {\n\t\t\t\tF.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {\n\t\t\t\t\tvar target = e.target || null,\n\t\t\t\t\t\tparent = $(target),\n\t\t\t\t\t\tcanScroll = false;\n\n\t\t\t\t\twhile (parent.length) {\n\t\t\t\t\t\tif (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcanScroll = isScrollable( parent[0] );\n\t\t\t\t\t\tparent = $(parent).parent();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (delta !== 0 && !canScroll) {\n\t\t\t\t\t\tif (F.group.length > 1 && !current.canShrink) {\n\t\t\t\t\t\t\tif (deltaY > 0 || deltaX > 0) {\n\t\t\t\t\t\t\t\tF.prev( deltaY > 0 ? 'down' : 'left' );\n\n\t\t\t\t\t\t\t} else if (deltaY < 0 || deltaX < 0) {\n\t\t\t\t\t\t\t\tF.next( deltaY < 0 ? 'up' : 'right' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\ttrigger: function (event, o) {\n\t\t\tvar ret, obj = o || F.coming || F.current;\n\n\t\t\tif (!obj) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($.isFunction( obj[event] )) {\n\t\t\t\tret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\n\t\t\tif (ret === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (obj.helpers) {\n\t\t\t\t$.each(obj.helpers, function (helper, opts) {\n\t\t\t\t\tif (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {\n\t\t\t\t\t\tF.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tD.trigger(event);\n\t\t},\n\n\t\tisImage: function (str) {\n\t\t\treturn isString(str) && str.match(/(^data:image\\/.*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\\?|#).*)?$)/i);\n\t\t},\n\n\t\tisSWF: function (str) {\n\t\t\treturn isString(str) && str.match(/\\.(swf)((\\?|#).*)?$/i);\n\t\t},\n\n\t\t_start: function (index) {\n\t\t\tvar coming = {},\n\t\t\t\tobj,\n\t\t\t\thref,\n\t\t\t\ttype,\n\t\t\t\tmargin,\n\t\t\t\tpadding;\n\n\t\t\tindex = getScalar( index );\n\t\t\tobj = F.group[ index ] || null;\n\n\t\t\tif (!obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcoming = $.extend(true, {}, F.opts, obj);\n\n\t\t\t// Convert margin and padding properties to array - top, right, bottom, left\n\t\t\tmargin = coming.margin;\n\t\t\tpadding = coming.padding;\n\n\t\t\tif ($.type(margin) === 'number') {\n\t\t\t\tcoming.margin = [margin, margin, margin, margin];\n\t\t\t}\n\n\t\t\tif ($.type(padding) === 'number') {\n\t\t\t\tcoming.padding = [padding, padding, padding, padding];\n\t\t\t}\n\n\t\t\t// 'modal' propery is just a shortcut\n\t\t\tif (coming.modal) {\n\t\t\t\t$.extend(true, coming, {\n\t\t\t\t\tcloseBtn : false,\n\t\t\t\t\tcloseClick : false,\n\t\t\t\t\tnextClick : false,\n\t\t\t\t\tarrows : false,\n\t\t\t\t\tmouseWheel : false,\n\t\t\t\t\tkeys : null,\n\t\t\t\t\thelpers: {\n\t\t\t\t\t\toverlay : {\n\t\t\t\t\t\t\tcloseClick : false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 'autoSize' property is a shortcut, too\n\t\t\tif (coming.autoSize) {\n\t\t\t\tcoming.autoWidth = coming.autoHeight = true;\n\t\t\t}\n\n\t\t\tif (coming.width === 'auto') {\n\t\t\t\tcoming.autoWidth = true;\n\t\t\t}\n\n\t\t\tif (coming.height === 'auto') {\n\t\t\t\tcoming.autoHeight = true;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Add reference to the group, so it`s possible to access from callbacks, example:\n\t\t\t * afterLoad : function() {\n\t\t\t * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');\n\t\t\t * }\n\t\t\t */\n\n\t\t\tcoming.group = F.group;\n\t\t\tcoming.index = index;\n\n\t\t\t// Give a chance for callback or helpers to update coming item (type, title, etc)\n\t\t\tF.coming = coming;\n\n\t\t\tif (false === F.trigger('beforeLoad')) {\n\t\t\t\tF.coming = null;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttype = coming.type;\n\t\t\thref = coming.href;\n\n\t\t\tif (!type) {\n\t\t\t\tF.coming = null;\n\n\t\t\t\t//If we can not determine content type then drop silently or display next/prev item if looping through gallery\n\t\t\t\tif (F.current && F.router && F.router !== 'jumpto') {\n\t\t\t\t\tF.current.index = index;\n\n\t\t\t\t\treturn F[ F.router ]( F.direction );\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tF.isActive = true;\n\n\t\t\tif (type === 'image' || type === 'swf') {\n\t\t\t\tcoming.autoHeight = coming.autoWidth = false;\n\t\t\t\tcoming.scrolling = 'visible';\n\t\t\t}\n\n\t\t\tif (type === 'image') {\n\t\t\t\tcoming.aspectRatio = true;\n\t\t\t}\n\n\t\t\tif (type === 'iframe' && isTouch) {\n\t\t\t\tcoming.scrolling = 'scroll';\n\t\t\t}\n\n\t\t\t// Build the neccessary markup\n\t\t\tcoming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );\n\n\t\t\t$.extend(coming, {\n\t\t\t\tskin : $('.fancybox-skin', coming.wrap),\n\t\t\t\touter : $('.fancybox-outer', coming.wrap),\n\t\t\t\tinner : $('.fancybox-inner', coming.wrap)\n\t\t\t});\n\n\t\t\t$.each([\"Top\", \"Right\", \"Bottom\", \"Left\"], function(i, v) {\n\t\t\t\tcoming.skin.css('padding' + v, getValue(coming.padding[ i ]));\n\t\t\t});\n\n\t\t\tF.trigger('onReady');\n\n\t\t\t// Check before try to load; 'inline' and 'html' types need content, others - href\n\t\t\tif (type === 'inline' || type === 'html') {\n\t\t\t\tif (!coming.content || !coming.content.length) {\n\t\t\t\t\treturn F._error( 'content' );\n\t\t\t\t}\n\n\t\t\t} else if (!href) {\n\t\t\t\treturn F._error( 'href' );\n\t\t\t}\n\n\t\t\tif (type === 'image') {\n\t\t\t\tF._loadImage();\n\n\t\t\t} else if (type === 'ajax') {\n\t\t\t\tF._loadAjax();\n\n\t\t\t} else if (type === 'iframe') {\n\t\t\t\tF._loadIframe();\n\n\t\t\t} else {\n\t\t\t\tF._afterLoad();\n\t\t\t}\n\t\t},\n\n\t\t_error: function ( type ) {\n\t\t\t$.extend(F.coming, {\n\t\t\t\ttype : 'html',\n\t\t\t\tautoWidth : true,\n\t\t\t\tautoHeight : true,\n\t\t\t\tminWidth : 0,\n\t\t\t\tminHeight : 0,\n\t\t\t\tscrolling : 'no',\n\t\t\t\thasError : type,\n\t\t\t\tcontent : F.coming.tpl.error\n\t\t\t});\n\n\t\t\tF._afterLoad();\n\t\t},\n\n\t\t_loadImage: function () {\n\t\t\t// Reset preload image so it is later possible to check \"complete\" property\n\t\t\tvar img = F.imgPreload = new Image();\n\n\t\t\timg.onload = function () {\n\t\t\t\tthis.onload = this.onerror = null;\n\n\t\t\t\tF.coming.width = this.width / F.opts.pixelRatio;\n\t\t\t\tF.coming.height = this.height / F.opts.pixelRatio;\n\n\t\t\t\tF._afterLoad();\n\t\t\t};\n\n\t\t\timg.onerror = function () {\n\t\t\t\tthis.onload = this.onerror = null;\n\n\t\t\t\tF._error( 'image' );\n\t\t\t};\n\n\t\t\timg.src = F.coming.href;\n\n\t\t\tif (img.complete !== true) {\n\t\t\t\tF.showLoading();\n\t\t\t}\n\t\t},\n\n\t\t_loadAjax: function () {\n\t\t\tvar coming = F.coming;\n\n\t\t\tF.showLoading();\n\n\t\t\tF.ajaxLoad = $.ajax($.extend({}, coming.ajax, {\n\t\t\t\turl: coming.href,\n\t\t\t\terror: function (jqXHR, textStatus) {\n\t\t\t\t\tif (F.coming && textStatus !== 'abort') {\n\t\t\t\t\t\tF._error( 'ajax', jqXHR );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tF.hideLoading();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsuccess: function (data, textStatus) {\n\t\t\t\t\tif (textStatus === 'success') {\n\t\t\t\t\t\tcoming.content = data;\n\n\t\t\t\t\t\tF._afterLoad();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t},\n\n\t\t_loadIframe: function() {\n\t\t\tvar coming = F.coming,\n\t\t\t\tiframe = $(coming.tpl.iframe.replace(/\\{rnd\\}/g, new Date().getTime()))\n\t\t\t\t\t.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)\n\t\t\t\t\t.attr('src', coming.href);\n\n\t\t\t// This helps IE\n\t\t\t$(coming.wrap).bind('onReset', function () {\n\t\t\t\ttry {\n\t\t\t\t\t$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();\n\t\t\t\t} catch (e) {}\n\t\t\t});\n\n\t\t\tif (coming.iframe.preload) {\n\t\t\t\tF.showLoading();\n\n\t\t\t\tiframe.one('load', function() {\n\t\t\t\t\t$(this).data('ready', 1);\n\n\t\t\t\t\t// iOS will lose scrolling if we resize\n\t\t\t\t\tif (!isTouch) {\n\t\t\t\t\t\t$(this).bind('load.fb', F.update);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Without this trick:\n\t\t\t\t\t// - iframe won't scroll on iOS devices\n\t\t\t\t\t// - IE7 sometimes displays empty iframe\n\t\t\t\t\t$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();\n\n\t\t\t\t\tF._afterLoad();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcoming.content = iframe.appendTo( coming.inner );\n\n\t\t\tif (!coming.iframe.preload) {\n\t\t\t\tF._afterLoad();\n\t\t\t}\n\t\t},\n\n\t\t_preloadImages: function() {\n\t\t\tvar group = F.group,\n\t\t\t\tcurrent = F.current,\n\t\t\t\tlen = group.length,\n\t\t\t\tcnt = current.preload ? Math.min(current.preload, len - 1) : 0,\n\t\t\t\titem,\n\t\t\t\ti;\n\n\t\t\tfor (i = 1; i <= cnt; i += 1) {\n\t\t\t\titem = group[ (current.index + i ) % len ];\n\n\t\t\t\tif (item.type === 'image' && item.href) {\n\t\t\t\t\tnew Image().src = item.href;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_afterLoad: function () {\n\t\t\tvar coming = F.coming,\n\t\t\t\tprevious = F.current,\n\t\t\t\tplaceholder = 'fancybox-placeholder',\n\t\t\t\tcurrent,\n\t\t\t\tcontent,\n\t\t\t\ttype,\n\t\t\t\tscrolling,\n\t\t\t\thref,\n\t\t\t\tembed;\n\n\t\t\tF.hideLoading();\n\n\t\t\tif (!coming || F.isActive === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (false === F.trigger('afterLoad', coming, previous)) {\n\t\t\t\tcoming.wrap.stop(true).trigger('onReset').remove();\n\n\t\t\t\tF.coming = null;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (previous) {\n\t\t\t\tF.trigger('beforeChange', previous);\n\n\t\t\t\tprevious.wrap.stop(true).removeClass('fancybox-opened')\n\t\t\t\t\t.find('.fancybox-item, .fancybox-nav')\n\t\t\t\t\t.remove();\n\t\t\t}\n\n\t\t\tF.unbindEvents();\n\n\t\t\tcurrent = coming;\n\t\t\tcontent = coming.content;\n\t\t\ttype = coming.type;\n\t\t\tscrolling = coming.scrolling;\n\n\t\t\t$.extend(F, {\n\t\t\t\twrap : current.wrap,\n\t\t\t\tskin : current.skin,\n\t\t\t\touter : current.outer,\n\t\t\t\tinner : current.inner,\n\t\t\t\tcurrent : current,\n\t\t\t\tprevious : previous\n\t\t\t});\n\n\t\t\thref = current.href;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'inline':\n\t\t\t\tcase 'ajax':\n\t\t\t\tcase 'html':\n\t\t\t\t\tif (current.selector) {\n\t\t\t\t\t\tcontent = $('
    ').html(content).find(current.selector);\n\n\t\t\t\t\t} else if (isQuery(content)) {\n\t\t\t\t\t\tif (!content.data(placeholder)) {\n\t\t\t\t\t\t\tcontent.data(placeholder, $('
    ').insertAfter( content ).hide() );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontent = content.show().detach();\n\n\t\t\t\t\t\tcurrent.wrap.bind('onReset', function () {\n\t\t\t\t\t\t\tif ($(this).find(content).length) {\n\t\t\t\t\t\t\t\tcontent.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'image':\n\t\t\t\t\tcontent = current.tpl.image.replace('{href}', href);\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'swf':\n\t\t\t\t\tcontent = '';\n\t\t\t\t\tembed = '';\n\n\t\t\t\t\t$.each(current.swf, function(name, val) {\n\t\t\t\t\t\tcontent += '';\n\t\t\t\t\t\tembed += ' ' + name + '=\"' + val + '\"';\n\t\t\t\t\t});\n\n\t\t\t\t\tcontent += '';\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!(isQuery(content) && content.parent().is(current.inner))) {\n\t\t\t\tcurrent.inner.append( content );\n\t\t\t}\n\n\t\t\t// Give a chance for helpers or callbacks to update elements\n\t\t\tF.trigger('beforeShow');\n\n\t\t\t// Set scrolling before calculating dimensions\n\t\t\tcurrent.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));\n\n\t\t\t// Set initial dimensions and start position\n\t\t\tF._setDimension();\n\n\t\t\tF.reposition();\n\n\t\t\tF.isOpen = false;\n\t\t\tF.coming = null;\n\n\t\t\tF.bindEvents();\n\n\t\t\tif (!F.isOpened) {\n\t\t\t\t$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();\n\n\t\t\t} else if (previous.prevMethod) {\n\t\t\t\tF.transitions[ previous.prevMethod ]();\n\t\t\t}\n\n\t\t\tF.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();\n\n\t\t\tF._preloadImages();\n\t\t},\n\n\t\t_setDimension: function () {\n\t\t\tvar viewport = F.getViewport(),\n\t\t\t\tsteps = 0,\n\t\t\t\tcanShrink = false,\n\t\t\t\tcanExpand = false,\n\t\t\t\twrap = F.wrap,\n\t\t\t\tskin = F.skin,\n\t\t\t\tinner = F.inner,\n\t\t\t\tcurrent = F.current,\n\t\t\t\twidth = current.width,\n\t\t\t\theight = current.height,\n\t\t\t\tminWidth = current.minWidth,\n\t\t\t\tminHeight = current.minHeight,\n\t\t\t\tmaxWidth = current.maxWidth,\n\t\t\t\tmaxHeight = current.maxHeight,\n\t\t\t\tscrolling = current.scrolling,\n\t\t\t\tscrollOut = current.scrollOutside ? current.scrollbarWidth : 0,\n\t\t\t\tmargin = current.margin,\n\t\t\t\twMargin = getScalar(margin[1] + margin[3]),\n\t\t\t\thMargin = getScalar(margin[0] + margin[2]),\n\t\t\t\twPadding,\n\t\t\t\thPadding,\n\t\t\t\twSpace,\n\t\t\t\thSpace,\n\t\t\t\torigWidth,\n\t\t\t\torigHeight,\n\t\t\t\torigMaxWidth,\n\t\t\t\torigMaxHeight,\n\t\t\t\tratio,\n\t\t\t\twidth_,\n\t\t\t\theight_,\n\t\t\t\tmaxWidth_,\n\t\t\t\tmaxHeight_,\n\t\t\t\tiframe,\n\t\t\t\tbody;\n\n\t\t\t// Reset dimensions so we could re-check actual size\n\t\t\twrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');\n\n\t\t\twPadding = getScalar(skin.outerWidth(true) - skin.width());\n\t\t\thPadding = getScalar(skin.outerHeight(true) - skin.height());\n\n\t\t\t// Any space between content and viewport (margin, padding, border, title)\n\t\t\twSpace = wMargin + wPadding;\n\t\t\thSpace = hMargin + hPadding;\n\n\t\t\torigWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width;\n\t\t\torigHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;\n\n\t\t\tif (current.type === 'iframe') {\n\t\t\t\tiframe = current.content;\n\n\t\t\t\tif (current.autoHeight && iframe.data('ready') === 1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (iframe[0].contentWindow.document.location) {\n\t\t\t\t\t\t\tinner.width( origWidth ).height(9999);\n\n\t\t\t\t\t\t\tbody = iframe.contents().find('body');\n\n\t\t\t\t\t\t\tif (scrollOut) {\n\t\t\t\t\t\t\t\tbody.css('overflow-x', 'hidden');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\torigHeight = body.outerHeight(true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\n\t\t\t} else if (current.autoWidth || current.autoHeight) {\n\t\t\t\tinner.addClass( 'fancybox-tmp' );\n\n\t\t\t\t// Set width or height in case we need to calculate only one dimension\n\t\t\t\tif (!current.autoWidth) {\n\t\t\t\t\tinner.width( origWidth );\n\t\t\t\t}\n\n\t\t\t\tif (!current.autoHeight) {\n\t\t\t\t\tinner.height( origHeight );\n\t\t\t\t}\n\n\t\t\t\tif (current.autoWidth) {\n\t\t\t\t\torigWidth = inner.width();\n\t\t\t\t}\n\n\t\t\t\tif (current.autoHeight) {\n\t\t\t\t\torigHeight = inner.height();\n\t\t\t\t}\n\n\t\t\t\tinner.removeClass( 'fancybox-tmp' );\n\t\t\t}\n\n\t\t\twidth = getScalar( origWidth );\n\t\t\theight = getScalar( origHeight );\n\n\t\t\tratio = origWidth / origHeight;\n\n\t\t\t// Calculations for the content\n\t\t\tminWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);\n\t\t\tmaxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);\n\n\t\t\tminHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);\n\t\t\tmaxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);\n\n\t\t\t// These will be used to determine if wrap can fit in the viewport\n\t\t\torigMaxWidth = maxWidth;\n\t\t\torigMaxHeight = maxHeight;\n\n\t\t\tif (current.fitToView) {\n\t\t\t\tmaxWidth = Math.min(viewport.w - wSpace, maxWidth);\n\t\t\t\tmaxHeight = Math.min(viewport.h - hSpace, maxHeight);\n\t\t\t}\n\n\t\t\tmaxWidth_ = viewport.w - wMargin;\n\t\t\tmaxHeight_ = viewport.h - hMargin;\n\n\t\t\tif (current.aspectRatio) {\n\t\t\t\tif (width > maxWidth) {\n\t\t\t\t\twidth = maxWidth;\n\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t}\n\n\t\t\t\tif (height > maxHeight) {\n\t\t\t\t\theight = maxHeight;\n\t\t\t\t\twidth = getScalar(height * ratio);\n\t\t\t\t}\n\n\t\t\t\tif (width < minWidth) {\n\t\t\t\t\twidth = minWidth;\n\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t}\n\n\t\t\t\tif (height < minHeight) {\n\t\t\t\t\theight = minHeight;\n\t\t\t\t\twidth = getScalar(height * ratio);\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\twidth = Math.max(minWidth, Math.min(width, maxWidth));\n\n\t\t\t\tif (current.autoHeight && current.type !== 'iframe') {\n\t\t\t\t\tinner.width( width );\n\n\t\t\t\t\theight = inner.height();\n\t\t\t\t}\n\n\t\t\t\theight = Math.max(minHeight, Math.min(height, maxHeight));\n\t\t\t}\n\n\t\t\t// Try to fit inside viewport (including the title)\n\t\t\tif (current.fitToView) {\n\t\t\t\tinner.width( width ).height( height );\n\n\t\t\t\twrap.width( width + wPadding );\n\n\t\t\t\t// Real wrap dimensions\n\t\t\t\twidth_ = wrap.width();\n\t\t\t\theight_ = wrap.height();\n\n\t\t\t\tif (current.aspectRatio) {\n\t\t\t\t\twhile ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {\n\t\t\t\t\t\tif (steps++ > 19) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\theight = Math.max(minHeight, Math.min(maxHeight, height - 10));\n\t\t\t\t\t\twidth = getScalar(height * ratio);\n\n\t\t\t\t\t\tif (width < minWidth) {\n\t\t\t\t\t\t\twidth = minWidth;\n\t\t\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (width > maxWidth) {\n\t\t\t\t\t\t\twidth = maxWidth;\n\t\t\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinner.width( width ).height( height );\n\n\t\t\t\t\t\twrap.width( width + wPadding );\n\n\t\t\t\t\t\twidth_ = wrap.width();\n\t\t\t\t\t\theight_ = wrap.height();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\twidth = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_)));\n\t\t\t\t\theight = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {\n\t\t\t\twidth += scrollOut;\n\t\t\t}\n\n\t\t\tinner.width( width ).height( height );\n\n\t\t\twrap.width( width + wPadding );\n\n\t\t\twidth_ = wrap.width();\n\t\t\theight_ = wrap.height();\n\n\t\t\tcanShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;\n\t\t\tcanExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));\n\n\t\t\t$.extend(current, {\n\t\t\t\tdim : {\n\t\t\t\t\twidth\t: getValue( width_ ),\n\t\t\t\t\theight\t: getValue( height_ )\n\t\t\t\t},\n\t\t\t\torigWidth : origWidth,\n\t\t\t\torigHeight : origHeight,\n\t\t\t\tcanShrink : canShrink,\n\t\t\t\tcanExpand : canExpand,\n\t\t\t\twPadding : wPadding,\n\t\t\t\thPadding : hPadding,\n\t\t\t\twrapSpace : height_ - skin.outerHeight(true),\n\t\t\t\tskinSpace : skin.height() - height\n\t\t\t});\n\n\t\t\tif (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {\n\t\t\t\tinner.height('auto');\n\t\t\t}\n\t\t},\n\n\t\t_getPosition: function (onlyAbsolute) {\n\t\t\tvar current = F.current,\n\t\t\t\tviewport = F.getViewport(),\n\t\t\t\tmargin = current.margin,\n\t\t\t\twidth = F.wrap.width() + margin[1] + margin[3],\n\t\t\t\theight = F.wrap.height() + margin[0] + margin[2],\n\t\t\t\trez = {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop : margin[0],\n\t\t\t\t\tleft : margin[3]\n\t\t\t\t};\n\n\t\t\tif (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {\n\t\t\t\trez.position = 'fixed';\n\n\t\t\t} else if (!current.locked) {\n\t\t\t\trez.top += viewport.y;\n\t\t\t\trez.left += viewport.x;\n\t\t\t}\n\n\t\t\trez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio)));\n\t\t\trez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio)));\n\n\t\t\treturn rez;\n\t\t},\n\n\t\t_afterZoomIn: function () {\n\t\t\tvar current = F.current;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tF.isOpen = F.isOpened = true;\n\n\t\t\tF.wrap.css('overflow', 'visible').addClass('fancybox-opened');\n\n\t\t\tF.update();\n\n\t\t\t// Assign a click event\n\t\t\tif ( current.closeClick || (current.nextClick && F.group.length > 1) ) {\n\t\t\t\tF.inner.css('cursor', 'pointer').bind('click.fb', function(e) {\n\t\t\t\t\tif (!$(e.target).is('a') && !$(e.target).parent().is('a')) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tF[ current.closeClick ? 'close' : 'next' ]();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Create a close button\n\t\t\tif (current.closeBtn) {\n\t\t\t\t$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tF.close();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Create navigation arrows\n\t\t\tif (current.arrows && F.group.length > 1) {\n\t\t\t\tif (current.loop || current.index > 0) {\n\t\t\t\t\t$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);\n\t\t\t\t}\n\n\t\t\t\tif (current.loop || current.index < F.group.length - 1) {\n\t\t\t\t\t$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tF.trigger('afterShow');\n\n\t\t\t// Stop the slideshow if this is the last item\n\t\t\tif (!current.loop && current.index === current.group.length - 1) {\n\t\t\t\tF.play( false );\n\n\t\t\t} else if (F.opts.autoPlay && !F.player.isActive) {\n\t\t\t\tF.opts.autoPlay = false;\n\n\t\t\t\tF.play();\n\t\t\t}\n\t\t},\n\n\t\t_afterZoomOut: function ( obj ) {\n\t\t\tobj = obj || F.current;\n\n\t\t\t$('.fancybox-wrap').trigger('onReset').remove();\n\n\t\t\t$.extend(F, {\n\t\t\t\tgroup : {},\n\t\t\t\topts : {},\n\t\t\t\trouter : false,\n\t\t\t\tcurrent : null,\n\t\t\t\tisActive : false,\n\t\t\t\tisOpened : false,\n\t\t\t\tisOpen : false,\n\t\t\t\tisClosing : false,\n\t\t\t\twrap : null,\n\t\t\t\tskin : null,\n\t\t\t\touter : null,\n\t\t\t\tinner : null\n\t\t\t});\n\n\t\t\tF.trigger('afterClose', obj);\n\t\t}\n\t});\n\n\t/*\n\t *\tDefault transitions\n\t */\n\n\tF.transitions = {\n\t\tgetOrigPosition: function () {\n\t\t\tvar current = F.current,\n\t\t\t\telement = current.element,\n\t\t\t\torig = current.orig,\n\t\t\t\tpos = {},\n\t\t\t\twidth = 50,\n\t\t\t\theight = 50,\n\t\t\t\thPadding = current.hPadding,\n\t\t\t\twPadding = current.wPadding,\n\t\t\t\tviewport = F.getViewport();\n\n\t\t\tif (!orig && current.isDom && element.is(':visible')) {\n\t\t\t\torig = element.find('img:first');\n\n\t\t\t\tif (!orig.length) {\n\t\t\t\t\torig = element;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isQuery(orig)) {\n\t\t\t\tpos = orig.offset();\n\n\t\t\t\tif (orig.is('img')) {\n\t\t\t\t\twidth = orig.outerWidth();\n\t\t\t\t\theight = orig.outerHeight();\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpos.top = viewport.y + (viewport.h - height) * current.topRatio;\n\t\t\t\tpos.left = viewport.x + (viewport.w - width) * current.leftRatio;\n\t\t\t}\n\n\t\t\tif (F.wrap.css('position') === 'fixed' || current.locked) {\n\t\t\t\tpos.top -= viewport.y;\n\t\t\t\tpos.left -= viewport.x;\n\t\t\t}\n\n\t\t\tpos = {\n\t\t\t\ttop : getValue(pos.top - hPadding * current.topRatio),\n\t\t\t\tleft : getValue(pos.left - wPadding * current.leftRatio),\n\t\t\t\twidth : getValue(width + wPadding),\n\t\t\t\theight : getValue(height + hPadding)\n\t\t\t};\n\n\t\t\treturn pos;\n\t\t},\n\n\t\tstep: function (now, fx) {\n\t\t\tvar ratio,\n\t\t\t\tpadding,\n\t\t\t\tvalue,\n\t\t\t\tprop = fx.prop,\n\t\t\t\tcurrent = F.current,\n\t\t\t\twrapSpace = current.wrapSpace,\n\t\t\t\tskinSpace = current.skinSpace;\n\n\t\t\tif (prop === 'width' || prop === 'height') {\n\t\t\t\tratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);\n\n\t\t\t\tif (F.isClosing) {\n\t\t\t\t\tratio = 1 - ratio;\n\t\t\t\t}\n\n\t\t\t\tpadding = prop === 'width' ? current.wPadding : current.hPadding;\n\t\t\t\tvalue = now - padding;\n\n\t\t\t\tF.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) );\n\t\t\t\tF.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );\n\t\t\t}\n\t\t},\n\n\t\tzoomIn: function () {\n\t\t\tvar current = F.current,\n\t\t\t\tstartPos = current.pos,\n\t\t\t\teffect = current.openEffect,\n\t\t\t\telastic = effect === 'elastic',\n\t\t\t\tendPos = $.extend({opacity : 1}, startPos);\n\n\t\t\t// Remove \"position\" property that breaks older IE\n\t\t\tdelete endPos.position;\n\n\t\t\tif (elastic) {\n\t\t\t\tstartPos = this.getOrigPosition();\n\n\t\t\t\tif (current.openOpacity) {\n\t\t\t\t\tstartPos.opacity = 0.1;\n\t\t\t\t}\n\n\t\t\t} else if (effect === 'fade') {\n\t\t\t\tstartPos.opacity = 0.1;\n\t\t\t}\n\n\t\t\tF.wrap.css(startPos).animate(endPos, {\n\t\t\t\tduration : effect === 'none' ? 0 : current.openSpeed,\n\t\t\t\teasing : current.openEasing,\n\t\t\t\tstep : elastic ? this.step : null,\n\t\t\t\tcomplete : F._afterZoomIn\n\t\t\t});\n\t\t},\n\n\t\tzoomOut: function () {\n\t\t\tvar current = F.current,\n\t\t\t\teffect = current.closeEffect,\n\t\t\t\telastic = effect === 'elastic',\n\t\t\t\tendPos = {opacity : 0.1};\n\n\t\t\tif (elastic) {\n\t\t\t\tendPos = this.getOrigPosition();\n\n\t\t\t\tif (current.closeOpacity) {\n\t\t\t\t\tendPos.opacity = 0.1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tF.wrap.animate(endPos, {\n\t\t\t\tduration : effect === 'none' ? 0 : current.closeSpeed,\n\t\t\t\teasing : current.closeEasing,\n\t\t\t\tstep : elastic ? this.step : null,\n\t\t\t\tcomplete : F._afterZoomOut\n\t\t\t});\n\t\t},\n\n\t\tchangeIn: function () {\n\t\t\tvar current = F.current,\n\t\t\t\teffect = current.nextEffect,\n\t\t\t\tstartPos = current.pos,\n\t\t\t\tendPos = { opacity : 1 },\n\t\t\t\tdirection = F.direction,\n\t\t\t\tdistance = 200,\n\t\t\t\tfield;\n\n\t\t\tstartPos.opacity = 0.1;\n\n\t\t\tif (effect === 'elastic') {\n\t\t\t\tfield = direction === 'down' || direction === 'up' ? 'top' : 'left';\n\n\t\t\t\tif (direction === 'down' || direction === 'right') {\n\t\t\t\t\tstartPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);\n\t\t\t\t\tendPos[ field ] = '+=' + distance + 'px';\n\n\t\t\t\t} else {\n\t\t\t\t\tstartPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);\n\t\t\t\t\tendPos[ field ] = '-=' + distance + 'px';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Workaround for http://bugs.jquery.com/ticket/12273\n\t\t\tif (effect === 'none') {\n\t\t\t\tF._afterZoomIn();\n\n\t\t\t} else {\n\t\t\t\tF.wrap.css(startPos).animate(endPos, {\n\t\t\t\t\tduration : current.nextSpeed,\n\t\t\t\t\teasing : current.nextEasing,\n\t\t\t\t\tcomplete : F._afterZoomIn\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tchangeOut: function () {\n\t\t\tvar previous = F.previous,\n\t\t\t\teffect = previous.prevEffect,\n\t\t\t\tendPos = { opacity : 0.1 },\n\t\t\t\tdirection = F.direction,\n\t\t\t\tdistance = 200;\n\n\t\t\tif (effect === 'elastic') {\n\t\t\t\tendPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';\n\t\t\t}\n\n\t\t\tprevious.wrap.animate(endPos, {\n\t\t\t\tduration : effect === 'none' ? 0 : previous.prevSpeed,\n\t\t\t\teasing : previous.prevEasing,\n\t\t\t\tcomplete : function () {\n\t\t\t\t\t$(this).trigger('onReset').remove();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/*\n\t *\tOverlay helper\n\t */\n\n\tF.helpers.overlay = {\n\t\tdefaults : {\n\t\t\tcloseClick : true, // if true, fancyBox will be closed when user clicks on the overlay\n\t\t\tspeedOut : 200, // duration of fadeOut animation\n\t\t\tshowEarly : true, // indicates if should be opened immediately or wait until the content is ready\n\t\t\tcss : {}, // custom CSS properties\n\t\t\tlocked : !isTouch, // if true, the content will be locked into overlay\n\t\t\tfixed : true // if false, the overlay CSS position property will not be set to \"fixed\"\n\t\t},\n\n\t\toverlay : null, // current handle\n\t\tfixed : false, // indicates if the overlay has position \"fixed\"\n\t\tel : $('html'), // element that contains \"the lock\"\n\n\t\t// Public methods\n\t\tcreate : function(opts) {\n\t\t\topts = $.extend({}, this.defaults, opts);\n\n\t\t\tif (this.overlay) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\tthis.overlay = $('
    ').appendTo( F.coming ? F.coming.parent : opts.parent );\n\t\t\tthis.fixed = false;\n\n\t\t\tif (opts.fixed && F.defaults.fixed) {\n\t\t\t\tthis.overlay.addClass('fancybox-overlay-fixed');\n\n\t\t\t\tthis.fixed = true;\n\t\t\t}\n\t\t},\n\n\t\topen : function(opts) {\n\t\t\tvar that = this;\n\n\t\t\topts = $.extend({}, this.defaults, opts);\n\n\t\t\tif (this.overlay) {\n\t\t\t\tthis.overlay.unbind('.overlay').width('auto').height('auto');\n\n\t\t\t} else {\n\t\t\t\tthis.create(opts);\n\t\t\t}\n\n\t\t\tif (!this.fixed) {\n\t\t\t\tW.bind('resize.overlay', $.proxy( this.update, this) );\n\n\t\t\t\tthis.update();\n\t\t\t}\n\n\t\t\tif (opts.closeClick) {\n\t\t\t\tthis.overlay.bind('click.overlay', function(e) {\n\t\t\t\t\tif ($(e.target).hasClass('fancybox-overlay')) {\n\t\t\t\t\t\tif (F.isActive) {\n\t\t\t\t\t\t\tF.close();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthat.close();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.overlay.css( opts.css ).show();\n\t\t},\n\n\t\tclose : function() {\n\t\t\tvar scrollV, scrollH;\n\n\t\t\tW.unbind('resize.overlay');\n\n\t\t\tif (this.el.hasClass('fancybox-lock')) {\n\t\t\t\t$('.fancybox-margin').removeClass('fancybox-margin');\n\n\t\t\t\tscrollV = W.scrollTop();\n\t\t\t\tscrollH = W.scrollLeft();\n\n\t\t\t\tthis.el.removeClass('fancybox-lock');\n\n\t\t\t\tW.scrollTop( scrollV ).scrollLeft( scrollH );\n\t\t\t}\n\n\t\t\t$('.fancybox-overlay').remove().hide();\n\n\t\t\t$.extend(this, {\n\t\t\t\toverlay : null,\n\t\t\t\tfixed : false\n\t\t\t});\n\t\t},\n\n\t\t// Private, callbacks\n\n\t\tupdate : function () {\n\t\t\tvar width = '100%', offsetWidth;\n\n\t\t\t// Reset width/height so it will not mess\n\t\t\tthis.overlay.width(width).height('100%');\n\n\t\t\t// jQuery does not return reliable result for IE\n\t\t\tif (IE) {\n\t\t\t\toffsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);\n\n\t\t\t\tif (D.width() > offsetWidth) {\n\t\t\t\t\twidth = D.width();\n\t\t\t\t}\n\n\t\t\t} else if (D.width() > W.width()) {\n\t\t\t\twidth = D.width();\n\t\t\t}\n\n\t\t\tthis.overlay.width(width).height(D.height());\n\t\t},\n\n\t\t// This is where we can manipulate DOM, because later it would cause iframes to reload\n\t\tonReady : function (opts, obj) {\n\t\t\tvar overlay = this.overlay;\n\n\t\t\t$('.fancybox-overlay').stop(true, true);\n\n\t\t\tif (!overlay) {\n\t\t\t\tthis.create(opts);\n\t\t\t}\n\n\t\t\tif (opts.locked && this.fixed && obj.fixed) {\n\t\t\t\tif (!overlay) {\n\t\t\t\t\tthis.margin = D.height() > W.height() ? $('html').css('margin-right').replace(\"px\", \"\") : false;\n\t\t\t\t}\n\n\t\t\t\tobj.locked = this.overlay.append( obj.wrap );\n\t\t\t\tobj.fixed = false;\n\t\t\t}\n\n\t\t\tif (opts.showEarly === true) {\n\t\t\t\tthis.beforeShow.apply(this, arguments);\n\t\t\t}\n\t\t},\n\n\t\tbeforeShow : function(opts, obj) {\n\t\t\tvar scrollV, scrollH;\n\n\t\t\tif (obj.locked) {\n\t\t\t\tif (this.margin !== false) {\n\t\t\t\t\t$('*').filter(function(){\n\t\t\t\t\t\treturn ($(this).css('position') === 'fixed' && !$(this).hasClass(\"fancybox-overlay\") && !$(this).hasClass(\"fancybox-wrap\") );\n\t\t\t\t\t}).addClass('fancybox-margin');\n\n\t\t\t\t\tthis.el.addClass('fancybox-margin');\n\t\t\t\t}\n\n\t\t\t\tscrollV = W.scrollTop();\n\t\t\t\tscrollH = W.scrollLeft();\n\n\t\t\t\tthis.el.addClass('fancybox-lock');\n\n\t\t\t\tW.scrollTop( scrollV ).scrollLeft( scrollH );\n\t\t\t}\n\n\t\t\tthis.open(opts);\n\t\t},\n\n\t\tonUpdate : function() {\n\t\t\tif (!this.fixed) {\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\n\t\tafterClose: function (opts) {\n\t\t\t// Remove overlay if exists and fancyBox is not opening\n\t\t\t// (e.g., it is not being open using afterClose callback)\n\t\t\t//if (this.overlay && !F.isActive) {\n\t\t\tif (this.overlay && !F.coming) {\n\t\t\t\tthis.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));\n\t\t\t}\n\t\t}\n\t};\n\n\t/*\n\t *\tTitle helper\n\t */\n\n\tF.helpers.title = {\n\t\tdefaults : {\n\t\t\ttype : 'float', // 'float', 'inside', 'outside' or 'over',\n\t\t\tposition : 'bottom' // 'top' or 'bottom'\n\t\t},\n\n\t\tbeforeShow: function (opts) {\n\t\t\tvar current = F.current,\n\t\t\t\ttext = current.title,\n\t\t\t\ttype = opts.type,\n\t\t\t\ttitle,\n\t\t\t\ttarget;\n\n\t\t\tif ($.isFunction(text)) {\n\t\t\t\ttext = text.call(current.element, current);\n\t\t\t}\n\n\t\t\tif (!isString(text) || $.trim(text) === '') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttitle = $('
    ' + text + '
    ');\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'inside':\n\t\t\t\t\ttarget = F.skin;\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'outside':\n\t\t\t\t\ttarget = F.wrap;\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'over':\n\t\t\t\t\ttarget = F.inner;\n\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 'float'\n\t\t\t\t\ttarget = F.skin;\n\n\t\t\t\t\ttitle.appendTo('body');\n\n\t\t\t\t\tif (IE) {\n\t\t\t\t\t\ttitle.width( title.width() );\n\t\t\t\t\t}\n\n\t\t\t\t\ttitle.wrapInner('');\n\n\t\t\t\t\t//Increase bottom margin so this title will also fit into viewport\n\t\t\t\t\tF.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttitle[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target);\n\t\t}\n\t};\n\n\t// jQuery plugin initialization\n\t$.fn.fancybox = function (options) {\n\t\tvar index,\n\t\t\tthat = $(this),\n\t\t\tselector = this.selector || '',\n\t\t\trun = function(e) {\n\t\t\t\tvar what = $(this).blur(), idx = index, relType, relVal;\n\n\t\t\t\tif (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {\n\t\t\t\t\trelType = options.groupAttr || 'data-fancybox-group';\n\t\t\t\t\trelVal = what.attr(relType);\n\n\t\t\t\t\tif (!relVal) {\n\t\t\t\t\t\trelType = 'rel';\n\t\t\t\t\t\trelVal = what.get(0)[ relType ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (relVal && relVal !== '' && relVal !== 'nofollow') {\n\t\t\t\t\t\twhat = selector.length ? $(selector) : that;\n\t\t\t\t\t\twhat = what.filter('[' + relType + '=\"' + relVal + '\"]');\n\t\t\t\t\t\tidx = what.index(this);\n\t\t\t\t\t}\n\n\t\t\t\t\toptions.index = idx;\n\n\t\t\t\t\t// Stop an event from bubbling if everything is fine\n\t\t\t\t\tif (F.open(what, options) !== false) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\toptions = options || {};\n\t\tindex = options.index || 0;\n\n\t\tif (!selector || options.live === false) {\n\t\t\tthat.unbind('click.fb-start').bind('click.fb-start', run);\n\n\t\t} else {\n\t\t\tD.undelegate(selector, 'click.fb-start').delegate(selector + \":not('.fancybox-item, .fancybox-nav')\", 'click.fb-start', run);\n\t\t}\n\n\t\tthis.filter('[data-fancybox-start=1]').trigger('click');\n\n\t\treturn this;\n\t};\n\n\t// Tests that need a body at doc ready\n\tD.ready(function() {\n\t\tvar w1, w2;\n\n\t\tif ( $.scrollbarWidth === undefined ) {\n\t\t\t// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth\n\t\t\t$.scrollbarWidth = function() {\n\t\t\t\tvar parent = $('
    ').appendTo('body'),\n\t\t\t\t\tchild = parent.children(),\n\t\t\t\t\twidth = child.innerWidth() - child.height( 99 ).innerWidth();\n\n\t\t\t\tparent.remove();\n\n\t\t\t\treturn width;\n\t\t\t};\n\t\t}\n\n\t\tif ( $.support.fixedPosition === undefined ) {\n\t\t\t$.support.fixedPosition = (function() {\n\t\t\t\tvar elem = $('
    ').appendTo('body'),\n\t\t\t\t\tfixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );\n\n\t\t\t\telem.remove();\n\n\t\t\t\treturn fixed;\n\t\t\t}());\n\t\t}\n\n\t\t$.extend(F.defaults, {\n\t\t\tscrollbarWidth : $.scrollbarWidth(),\n\t\t\tfixed : $.support.fixedPosition,\n\t\t\tparent : $('body')\n\t\t});\n\n\t\t//Get real width of page scroll-bar\n\t\tw1 = $(window).width();\n\n\t\tH.addClass('fancybox-lock-test');\n\n\t\tw2 = $(window).width();\n\n\t\tH.removeClass('fancybox-lock-test');\n\n\t\t$(\"\").appendTo(\"head\");\n\t});\n\n}(window, document, jQuery));"]}