1"function"==typeof jQuery&&jQuery(document).ready(function(a){a("body").on("post-load",function(){window.a2a&&a2a.init_all()})});; 2/* jquery.nicescroll 3-- version 3.5.0 BETA5 4-- copyright 2011-12-13 InuYaksa*2013 5-- licensed under the MIT 6-- 7-- http://areaaperta.com/nicescroll 8-- https://github.com/inuyaksa/jquery.nicescroll 9-- 10*/ 11 12(function(jQuery){ 13 14 // globals 15 var domfocus = false; 16 var mousefocus = false; 17 var zoomactive = false; 18 var tabindexcounter = 5000; 19 var ascrailcounter = 2000; 20 var globalmaxzindex = 0; 21 22 var $ = jQuery; // sandbox 23 24 // http://stackoverflow.com/questions/2161159/get-script-path 25 function getScriptPath() { 26 var scripts=document.getElementsByTagName('script'); 27 var path=scripts[scripts.length-1].src.split('?')[0]; 28 return (path.split('/').length>0) ? path.split('/').slice(0,-1).join('/')+'/' : ''; 29 } 30 var scriptpath = getScriptPath(); 31 32 var vendors = ['ms','moz','webkit','o']; 33 34 var setAnimationFrame = window.requestAnimationFrame||false; 35 var clearAnimationFrame = window.cancelAnimationFrame||false; 36 37 if (!setAnimationFrame) { 38 for(var vx in vendors) { 39 var v = vendors[vx]; 40 if (!setAnimationFrame) setAnimationFrame = window[v+'RequestAnimationFrame']; 41 if (!clearAnimationFrame) clearAnimationFrame = window[v+'CancelAnimationFrame']||window[v+'CancelRequestAnimationFrame']; 42 } 43 } 44 45 var clsMutationObserver = window.MutationObserver || window.WebKitMutationObserver || false; 46 47 var _globaloptions = { 48 zindex:"auto", 49 cursoropacitymin:0, 50 cursoropacitymax:1, 51 cursorcolor:"#424242", 52 cursorwidth:"5px", 53 cursorborder:"1px solid #fff", 54 cursorborderradius:"5px", 55 scrollspeed:60, 56 mousescrollstep:8*3, 57 touchbehavior:false, 58 hwacceleration:true, 59 usetransition:true, 60 boxzoom:false, 61 dblclickzoom:true, 62 gesturezoom:true, 63 grabcursorenabled:true, 64 autohidemode:true, 65 background:"", 66 iframeautoresize:true, 67 cursorminheight:32, 68 preservenativescrolling:true, 69 railoffset:false, 70 bouncescroll:true, 71 spacebarenabled:true, 72 railpadding:{top:0,right:0,left:0,bottom:0}, 73 disableoutline:true, 74 horizrailenabled:true, 75 railalign:"right", 76 railvalign:"bottom", 77 enabletranslate3d:true, 78 enablemousewheel:true, 79 enablekeyboard:true, 80 smoothscroll:true, 81 sensitiverail:true, 82 enablemouselockapi:true, 83// cursormaxheight:false, 84 cursorfixedheight:false, 85 directionlockdeadzone:6, 86 hidecursordelay:400, 87 nativeparentscrolling:true, 88 enablescrollonselection:true, 89 overflowx:true, 90 overflowy:true, 91 cursordragspeed:0.3, 92 rtlmode:false, 93 cursordragontouch:false, 94 oneaxismousemode:"auto" 95 } 96 97 var browserdetected = false; 98 99 var getBrowserDetection = function() { 100 101 if (browserdetected) return browserdetected; 102 103 var domtest = document.createElement('DIV'); 104 105 var d = {}; 106 107 d.haspointerlock = "pointerLockElement" in document || "mozPointerLockElement" in document || "webkitPointerLockElement" in document; 108 109 d.isopera = ("opera" in window); 110 d.isopera12 = (d.isopera&&("getUserMedia" in navigator)); 111 d.isoperamini = (Object.prototype.toString.call(window.operamini) === "[object OperaMini]"); 112 113 d.isie = (("all" in document) && ("attachEvent" in domtest) && !d.isopera); 114 d.isieold = (d.isie && !("msInterpolationMode" in domtest.style)); // IE6 and older 115 d.isie7 = d.isie&&!d.isieold&&(!("documentMode" in document)||(document.documentMode==7)); 116 d.isie8 = d.isie&&("documentMode" in document)&&(document.documentMode==8); 117 d.isie9 = d.isie&&("performance" in window)&&(document.documentMode>=9); 118 d.isie10 = d.isie&&("performance" in window)&&(document.documentMode>=10); 119 120 d.isie9mobile = /iemobile.9/i.test(navigator.userAgent); //wp 7.1 mango 121 if (d.isie9mobile) d.isie9 = false; 122 d.isie7mobile = (!d.isie9mobile&&d.isie7) && /iemobile/i.test(navigator.userAgent); //wp 7.0 123 124 d.ismozilla = ("MozAppearance" in domtest.style); 125 126 d.iswebkit = ("WebkitAppearance" in domtest.style); 127 128 d.ischrome = ("chrome" in window); 129 d.ischrome22 = (d.ischrome&&d.haspointerlock); 130 d.ischrome26 = (d.ischrome&&("transition" in domtest.style)); // issue with transform detection (maintain prefix) 131 132 d.cantouch = ("ontouchstart" in document.documentElement)||("ontouchstart" in window); // detection for Chrome Touch Emulation 133 d.hasmstouch = (window.navigator.msPointerEnabled||false); // IE10+ pointer events 134 135 d.ismac = /^mac$/i.test(navigator.platform); 136 137 d.isios = (d.cantouch && /iphone|ipad|ipod/i.test(navigator.platform)); 138 d.isios4 = ((d.isios)&&!("seal" in Object)); 139 140 d.isandroid = (/android/i.test(navigator.userAgent)); 141 142 d.trstyle = false;
143 d.hastransform = false; 144 d.hastranslate3d = false; 145 d.transitionstyle = false; 146 d.hastransition = false; 147 d.transitionend = false; 148 149 var check = ['transform','msTransform','webkitTransform','MozTransform','OTransform']; 150 for(var a=0;a<check.length;a++){ 151 if (typeof domtest.style[check[a]] != "undefined") { 152 d.trstyle = check[a]; 153 break; 154 } 155 } 156 d.hastransform = (d.trstyle != false); 157 if (d.hastransform) { 158 domtest.style[d.trstyle] = "translate3d(1px,2px,3px)"; 159 d.hastranslate3d = /translate3d/.test(domtest.style[d.trstyle]); 160 } 161 162 d.transitionstyle = false; 163 d.prefixstyle = ''; 164 d.transitionend = false; 165 var check = ['transition','webkitTransition','MozTransition','OTransition','OTransition','msTransition','KhtmlTransition']; 166 var prefix = ['','-webkit-','-moz-','-o-','-o','-ms-','-khtml-']; 167 var evs = ['transitionend','webkitTransitionEnd','transitionend','otransitionend','oTransitionEnd','msTransitionEnd','KhtmlTransitionEnd']; 168 for(var a=0;a<check.length;a++) { 169 if (check[a] in domtest.style) { 170 d.transitionstyle = check[a]; 171 d.prefixstyle = prefix[a]; 172 d.transitionend = evs[a]; 173 break; 174 } 175 } 176 if (d.ischrome26) { // use always prefix 177 d.prefixstyle = prefix[1]; 178 } 179 180 d.hastransition = (d.transitionstyle); 181 182 function detectCursorGrab() { 183 var lst = ['-moz-grab','-webkit-grab','grab']; 184 if ((d.ischrome&&!d.ischrome22)||d.isie) lst=[]; // force setting for IE returns false positive and chrome cursor bug 185 for(var a=0;a<lst.length;a++) { 186 var p = lst[a]; 187 domtest.style['cursor']=p; 188 if (domtest.style['cursor']==p) return p; 189 } 190 return 'url(http://www.google.com/intl/en_ALL/mapfiles/openhand.cur),n-resize'; // thank you google for custom cursor! 191 } 192 d.cursorgrabvalue = detectCursorGrab(); 193 194 d.hasmousecapture = ("setCapture" in domtest); 195 196 d.hasMutationObserver = (clsMutationObserver !== false); 197 198 domtest = null; //memory released 199 200 browserdetected = d; 201 202 return d; 203 } 204 205 var NiceScrollClass = function(myopt,me) { 206 207 var self = this; 208 209 this.version = '3.5.0 BETA5'; 210 this.name = 'nicescroll'; 211 212 this.me = me; 213 214 this.opt = { 215 doc:$("body"), 216 win:false 217 }; 218 219 $.extend(this.opt,_globaloptions); 220 221// Options for internal use 222 this.opt.snapbackspeed = 80; 223 224 if (myopt||false) { 225 for(var a in self.opt) { 226 if (typeof myopt[a] != "undefined") self.opt[a] = myopt[a]; 227 } 228 } 229 230 this.doc = self.opt.doc; 231 this.iddoc = (this.doc&&this.doc[0])?this.doc[0].id||'':''; 232 this.ispage = /BODY|HTML/.test((self.opt.win)?self.opt.win[0].nodeName:this.doc[0].nodeName); 233 this.haswrapper = (self.opt.win!==false); 234 this.win = self.opt.win||(this.ispage?$(window):this.doc); 235 this.docscroll = (this.ispage&&!this.haswrapper)?$(window):this.win; 236 this.body = $("body"); 237 this.viewport = false; 238 239 this.isfixed = false; 240 241 this.iframe = false; 242 this.isiframe = ((this.doc[0].nodeName == 'IFRAME') && (this.win[0].nodeName == 'IFRAME')); 243 244 this.istextarea = (this.win[0].nodeName == 'TEXTAREA'); 245 246 this.forcescreen = false; //force to use screen position on events 247 248 this.canshowonmouseevent = (self.opt.autohidemode!="scroll"); 249 250// Events jump table 251 this.onmousedown = false; 252 this.onmouseup = false; 253 this.onmousemove = false; 254 this.onmousewheel = false; 255 this.onkeypress = false; 256 this.ongesturezoom = false; 257 this.onclick = false; 258 259// Nicescroll custom events 260 this.onscrollstart = false;
261 this.onscrollend = false; 262 this.onscrollcancel = false; 263 264 this.onzoomin = false; 265 this.onzoomout = false; 266 267// Let's start! 268 this.view = false; 269 this.page = false; 270 271 this.scroll = {x:0,y:0}; 272 this.scrollratio = {x:0,y:0}; 273 this.cursorheight = 20; 274 this.scrollvaluemax = 0; 275 276 this.checkrtlmode = false; 277 278 this.scrollrunning = false; 279 280 this.scrollmom = false; 281 282 this.observer = false; 283 this.observerremover = false; // observer on parent for remove detection 284 285 do { 286 this.id = "ascrail"+(ascrailcounter++); 287 } while (document.getElementById(this.id)); 288 289 this.rail = false; 290 this.cursor = false; 291 this.cursorfreezed = false; 292 this.selectiondrag = false; 293 294 this.zoom = false; 295 this.zoomactive = false; 296 297 this.hasfocus = false; 298 this.hasmousefocus = false; 299 300 this.visibility = true; 301 this.locked = false; 302 this.hidden = false; // rails always hidden 303 this.cursoractive = true; // user can interact with cursors 304 305 this.overflowx = self.opt.overflowx; 306 this.overflowy = self.opt.overflowy; 307 308 this.nativescrollingarea = false; 309 this.checkarea = 0; 310 311 this.events = []; // event list for unbind 312 313 this.saved = {}; 314 315 this.delaylist = {}; 316 this.synclist = {}; 317 318 this.lastdeltax = 0; 319 this.lastdeltay = 0; 320 321 this.detected = getBrowserDetection(); 322 323 var cap = $.extend({},this.detected); 324 325 this.canhwscroll = (cap.hastransform&&self.opt.hwacceleration); 326 this.ishwscroll = (this.canhwscroll&&self.haswrapper); 327 328 this.istouchcapable = false; // desktop devices with touch screen support 329 330//## Check Chrome desktop with touch support 331 if (cap.cantouch&&cap.ischrome&&!cap.isios&&!cap.isandroid) { 332 this.istouchcapable = true; 333 cap.cantouch = false; // parse normal desktop events 334 } 335 336//## Firefox 18 nightly build (desktop) false positive (or desktop with touch support) 337 if (cap.cantouch&&cap.ismozilla&&!cap.isios&&!cap.isandroid) { 338 this.istouchcapable = true; 339 cap.cantouch = false; // parse normal desktop events 340 } 341 342//## disable MouseLock API on user request 343 344 if (!self.opt.enablemouselockapi) { 345 cap.hasmousecapture = false; 346 cap.haspointerlock = false; 347 } 348 349 this.delayed = function(name,fn,tm,lazy) { 350 var dd = self.delaylist[name]; 351 var nw = (new Date()).getTime(); 352 if (!lazy&&dd&&dd.tt) return false; 353 if (dd&&dd.tt) clearTimeout(dd.tt); 354 if (dd&&dd.last+tm>nw&&!dd.tt) { 355 self.delaylist[name] = { 356 last:nw+tm, 357 tt:setTimeout(function(){self.delaylist[name].tt=0;fn.call();},tm) 358 } 359 } 360 else if (!dd||!dd.tt) { 361 self.delaylist[name] = { 362 last:nw, 363 tt:0 364 } 365 setTimeout(function(){fn.call();},0); 366 } 367 }; 368 369 this.debounced = function(name,fn,tm) { 370 var dd = self.delaylist[name]; 371 var nw = (new Date()).getTime(); 372 self.delaylist[name] = fn; 373 if (!dd) { 374 setTimeout(function(){var fn=self.delaylist[name];self.delaylist[name]=false;fn.call();},tm); 375 } 376 } 377 378 this.synched = function(name,fn) { 379 380 function requestSync() { 381 if (self.onsync) return; 382 setAnimationFrame(function(){ 383 self.onsync = false; 384 for(name in self.synclist){ 385 var fn = self.synclist[name]; 386 if (fn) fn.call(self); 387 self.synclist[name] = false; 388 } 389 }); 390 self.onsync = true; 391 }; 392 393 self.synclist[name] = fn; 394 requestSync(); 395 return name; 396 }; 397 398 this.unsynched = function(name) { 399 if (self.synclist[name]) self.synclist[name] = false; 400 } 401 402 this.css = function(el,pars) { // save & set 403 for(var n in pars) { 404 self.saved.css.push([el,n,el.css(n)]); 405 el.css(n,pars[n]); 406 } 407 }; 408 409 this.scrollTop = function(val) { 410 return (typeof val == "undefined") ? self.getScrollTop() : self.setScrollTop(val); 411 }; 412 413 this.scrollLeft = function(val) { 414 return (typeof val == "undefined") ? self.getScrollLeft() : self.setScrollLeft(val); 415 }; 416 417// derived by by Dan Pupius www.pupius.net 418 BezierClass = function(st,ed,spd,p1,p2,p3,p4) { 419 this.st = st; 420 this.ed = ed; 421 this.spd = spd; 422 423 this.p1 = p1||0; 424 this.p2 = p2||1; 425 this.p3 = p3||0; 426 this.p4 = p4||1; 427
428 this.ts = (new Date()).getTime(); 429 this.df = this.ed-this.st; 430 }; 431 BezierClass.prototype = { 432 B2:function(t){ return 3*t*t*(1-t) }, 433 B3:function(t){ return 3*t*(1-t)*(1-t) }, 434 B4:function(t){ return (1-t)*(1-t)*(1-t) }, 435 getNow:function(){ 436 var nw = (new Date()).getTime(); 437 var pc = 1-((nw-this.ts)/this.spd); 438 var bz = this.B2(pc) + this.B3(pc) + this.B4(pc); 439 return (pc<0) ? this.ed : this.st+Math.round(this.df*bz); 440 }, 441 update:function(ed,spd){ 442 this.st = this.getNow(); 443 this.ed = ed; 444 this.spd = spd; 445 this.ts = (new Date()).getTime(); 446 this.df = this.ed-this.st; 447 return this; 448 } 449 }; 450 451 if (this.ishwscroll) { 452 // hw accelerated scroll 453 this.doc.translate = {x:0,y:0,tx:"0px",ty:"0px"}; 454 455 //this one can help to enable hw accel on ios6 http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/ 456 if (cap.hastranslate3d&&cap.isios) this.doc.css("-webkit-backface-visibility","hidden"); // prevent flickering http://stackoverflow.com/questions/3461441/ 457 458 //derived from http://stackoverflow.com/questions/11236090/ 459 function getMatrixValues() { 460 var tr = self.doc.css(cap.trstyle); 461 if (tr&&(tr.substr(0,6)=="matrix")) { 462 return tr.replace(/^.*\((.*)\)$/g, "$1").replace(/px/g,'').split(/, +/); 463 } 464 return false; 465 } 466
467 this.getScrollTop = function(last) { 468 if (!last) { 469 var mtx = getMatrixValues(); 470 if (mtx) return (mtx.length==16) ? -mtx[13] : -mtx[5]; //matrix3d 16 on IE10 471 if (self.timerscroll&&self.timerscroll.bz) return self.timerscroll.bz.getNow(); 472 } 473 return self.doc.translate.y; 474 }; 475 476 this.getScrollLeft = function(last) { 477 if (!last) { 478 var mtx = getMatrixValues(); 479 if (mtx) return (mtx.length==16) ? -mtx[12] : -mtx[4]; //matrix3d 16 on IE10 480 if (self.timerscroll&&self.timerscroll.bh) return self.timerscroll.bh.getNow(); 481 } 482 return self.doc.translate.x; 483 }; 484 485 if (document.createEvent) { 486 this.notifyScrollEvent = function(el) { 487 var e = document.createEvent("UIEvents"); 488 e.initUIEvent("scroll", false, true, window, 1); 489 el.dispatchEvent(e); 490 }; 491 } 492 else if (document.fireEvent) { 493 this.notifyScrollEvent = function(el) { 494 var e = document.createEventObject(); 495 el.fireEvent("onscroll"); 496 e.cancelBubble = true; 497 }; 498 } 499 else { 500 this.notifyScrollEvent = function(el,add) {}; //NOPE 501 } 502 503 if (cap.hastranslate3d&&self.opt.enabletranslate3d) { 504 this.setScrollTop = function(val,silent) { 505 self.doc.translate.y = val; 506 self.doc.translate.ty = (val*-1)+"px"; 507 self.doc.css(cap.trstyle,"translate3d("+self.doc.translate.tx+","+self.doc.translate.ty+",0px)"); 508 if (!silent) self.notifyScrollEvent(self.win[0]); 509 }; 510 this.setScrollLeft = function(val,silent) { 511 self.doc.translate.x = val; 512 self.doc.translate.tx = (val*-1)+"px"; 513 self.doc.css(cap.trstyle,"translate3d("+self.doc.translate.tx+","+self.doc.translate.ty+",0px)"); 514 if (!silent) self.notifyScrollEvent(self.win[0]); 515 }; 516 } else { 517 this.setScrollTop = function(val,silent) { 518 self.doc.translate.y = val; 519 self.doc.translate.ty = (val*-1)+"px"; 520 self.doc.css(cap.trstyle,"translate("+self.doc.translate.tx+","+self.doc.translate.ty+")"); 521 if (!silent) self.notifyScrollEvent(self.win[0]); 522 }; 523 this.setScrollLeft = function(val,silent) { 524 self.doc.translate.x = val; 525 self.doc.translate.tx = (val*-1)+"px"; 526 self.doc.css(cap.trstyle,"translate("+self.doc.translate.tx+","+self.doc.translate.ty+")"); 527 if (!silent) self.notifyScrollEvent(self.win[0]); 528 }; 529 } 530 } else { 531 // native scroll
532 this.getScrollTop = function() { 533 return self.docscroll.scrollTop(); 534 }; 535 this.setScrollTop = function(val) { 536 return self.docscroll.scrollTop(val); 537 }; 538 this.getScrollLeft = function() { 539 return self.docscroll.scrollLeft(); 540 }; 541 this.setScrollLeft = function(val) { 542 return self.docscroll.scrollLeft(val); 543 }; 544 } 545 546 this.getTarget = function(e) { 547 if (!e) return false; 548 if (e.target) return e.target; 549 if (e.srcElement) return e.srcElement; 550 return false; 551 }; 552 553 this.hasParent = function(e,id) { 554 if (!e) return false; 555 var el = e.target||e.srcElement||e||false; 556 while (el && el.id != id) { 557 el = el.parentNode||false; 558 } 559 return (el!==false); 560 }; 561 562 function getZIndex() { 563 var dom = self.win; 564 if ("zIndex" in dom) return dom.zIndex(); // use jQuery UI method when available 565 while (dom.length>0) { 566 if (dom[0].nodeType==9) return false; 567 var zi = dom.css('zIndex'); 568 if (!isNaN(zi)&&zi!=0) return parseInt(zi); 569 dom = dom.parent(); 570 } 571 return false; 572 }; 573 574//inspired by http://forum.jquery.com/topic/width-includes-border-width-when-set-to-thin-medium-thick-in-ie 575 var _convertBorderWidth = {"thin":1,"medium":3,"thick":5}; 576 function getWidthToPixel(dom,prop,chkheight) { 577 var wd = dom.css(prop); 578 var px = parseFloat(wd); 579 if (isNaN(px)) { 580 px = _convertBorderWidth[wd]||0; 581 var brd = (px==3) ? ((chkheight)?(self.win.outerHeight() - self.win.innerHeight()):(self.win.outerWidth() - self.win.innerWidth())) : 1; //DON'T TRUST CSS 582 if (self.isie8&&px) px+=1; 583 return (brd) ? px : 0; 584 } 585 return px; 586 }; 587 588 this.getOffset = function() { 589 if (self.isfixed) return {top:parseFloat(self.win.css('top')),left:parseFloat(self.win.css('left'))}; 590 if (!self.viewport) return self.win.offset(); 591 var ww = self.win.offset(); 592 var vp = self.viewport.offset(); 593 return {top:ww.top-vp.top+self.viewport.scrollTop(),left:ww.left-vp.left+self.viewport.scrollLeft()}; 594 }; 595 596 this.updateScrollBar = function(len) { 597 if (self.ishwscroll) { 598 self.rail.css({height:self.win.innerHeight()}); 599 if (self.railh) self.railh.css({width:self.win.innerWidth()}); 600 } else { 601 var wpos = self.getOffset(); 602 var pos = {top:wpos.top,left:wpos.left}; 603 pos.top+= getWidthToPixel(self.win,'border-top-width',true); 604 var brd = (self.win.outerWidth() - self.win.innerWidth())/2; 605 pos.left+= (self.rail.align) ? self.win.outerWidth() - getWidthToPixel(self.win,'border-right-width') - self.rail.width : getWidthToPixel(self.win,'border-left-width'); 606 607 var off = self.opt.railoffset; 608 if (off) { 609 if (off.top) pos.top+=off.top; 610 if (self.rail.align&&off.left) pos.left+=off.left; 611 } 612 613 if (!self.locked) self.rail.css({top:pos.top,left:pos.left,height:(len)?len.h:self.win.innerHeight()}); 614 615 if (self.zoom) { 616 self.zoom.css({top:pos.top+1,left:(self.rail.align==1) ? pos.left-20 : pos.left+self.rail.width+4}); 617 } 618 619 if (self.railh&&!self.locked) { 620 var pos = {top:wpos.top,left:wpos.left}; 621 var y = (self.railh.align) ? pos.top + getWidthToPixel(self.win,'border-top-width',true) + self.win.innerHeight() - self.railh.height : pos.top + getWidthToPixel(self.win,'border-top-width',true); 622 var x = pos.left + getWidthToPixel(self.win,'border-left-width'); 623 self.railh.css({top:y,left:x,width:self.railh.width}); 624 } 625 626 627 } 628 }; 629 630 this.doRailClick = function(e,dbl,hr) { 631 632 var fn,pg,cur,pos; 633 634// if (self.rail.drag&&self.rail.drag.pt!=1) return; 635 if (self.locked) return; 636// if (self.rail.drag) return; 637 638// self.cancelScroll(); 639 640 self.cancelEvent(e); 641 642 if (dbl) { 643 fn = (hr) ? self.doScrollLeft : self.doScrollTop; 644 cur = (hr) ? ((e.pageX - self.railh.offset().left - (self.cursorwidth/2)) *
644self.scrollratio.x) : ((e.pageY - self.rail.offset().top - (self.cursorheight/2)) * self.scrollratio.y); 645 fn(cur); 646 } else { 647// console.log(e.pageY); 648 fn = (hr) ? self.doScrollLeftBy : self.doScrollBy; 649 cur = (hr) ? self.scroll.x : self.scroll.y; 650 pos = (hr) ? e.pageX - self.railh.offset().left : e.pageY - self.rail.offset().top; 651 pg = (hr) ? self.view.w : self.view.h; 652 (cur>=pos) ? fn(pg) : fn(-pg); 653 } 654 655 } 656 657 self.hasanimationframe = (setAnimationFrame); 658 self.hascancelanimationframe = (clearAnimationFrame); 659 660 if (!self.hasanimationframe) { 661 setAnimationFrame=function(fn){return setTimeout(fn,15-Math.floor((+new Date)/1000)%16)}; // 1000/60)}; 662 clearAnimationFrame=clearInterval; 663 } 664 else if (!self.hascancelanimationframe) clearAnimationFrame=function(){self.cancelAnimationFrame=true}; 665 666 this.init = function() { 667 668 self.saved.css = []; 669 670 if (cap.isie7mobile) return true; // SORRY, DO NOT WORK! 671 if (cap.isoperamini) return true; // SORRY, DO NOT WORK! 672 673 if (cap.hasmstouch) self.css((self.ispage)?$("html"):self.win,{'-ms-touch-action':'none'}); 674 675 self.zindex = "auto"; 676 if (!self.ispage&&self.opt.zindex=="auto") { 677 self.zindex = getZIndex()||"auto"; 678 } else { 679 self.zindex = self.opt.zindex; 680 } 681 682 if (!self.ispage&&self.zindex!="auto") { 683 if (self.zindex>globalmaxzindex) globalmaxzindex=self.zindex; 684 } 685 686 if (self.isie&&self.zindex==0&&self.opt.zindex=="auto") { // fix IE auto == 0 687 self.zindex="auto"; 688 } 689 690/* 691 self.ispage = true; 692 self.haswrapper = true; 693// self.win = $(window); 694 self.docscroll = $("body"); 695// self.doc = $("body"); 696*/ 697 698 if (!self.ispage || (!cap.cantouch && !cap.isieold && !cap.isie9mobile)) { 699 700 var cont = self.docscroll; 701 if (self.ispage) cont = (self.haswrapper)?self.win:self.doc; 702 703 if (!cap.isie9mobile) self.css(cont,{'overflow-y':'hidden'}); 704 705 if (self.ispage&&cap.isie7) { 706 if (self.doc[0].nodeName=='BODY') self.css($("html"),{'overflow-y':'hidden'}); //IE7 double scrollbar issue 707 else if (self.doc[0].nodeName=='HTML') self.css($("body"),{'overflow-y':'hidden'}); //IE7 double scrollbar issue 708 } 709 710 if (cap.isios&&!self.ispage&&!self.haswrapper) self.css($("body"),{"-webkit-overflow-scrolling":"touch"}); //force hw acceleration 711 712 var cursor = $(document.createElement('div')); 713 cursor.css({ 714 position:"relative",top:0,"float":"right",width:self.opt.cursorwidth,height:"0px", 715 'background-color':self.opt.cursorcolor, 716 border:self.opt.cursorborder, 717 'background-clip':'padding-box', 718 '-webkit-border-radius':self.opt.cursorborderradius, 719 '-moz-border-radius':self.opt.cursorborderradius, 720 'border-radius':self.opt.cursorborderradius 721 }); 722 723 cursor.hborder = parseFloat(cursor.outerHeight() - cursor.innerHe
723ight()); 724 self.cursor = cursor; 725 726 var rail = $(document.createElement('div')); 727 rail.attr('id',self.id); 728 rail.addClass('nicescroll-rails'); 729 730 var v,a,kp = ["left","right"]; //"top","bottom" 731 for(var n in kp) { 732 a=kp[n]; 733 v = self.opt.railpadding[a]; 734 (v) ? rail.css("padding-"+a,v+"px") : self.opt.railpadding[a] = 0; 735 } 736 737 rail.append(cursor); 738 739 rail.width = Math.max(parseFloat(self.opt.cursorwidth),cursor.outerWidth()) + self.opt.railpadding['left'] + self.opt.railpadding['right']; 740 rail.css({width:rail.width+"px",'zIndex':self.zindex,"background":self.opt.background,cursor:"default"}); 741 742 rail.visibility = true; 743 rail.scrollable = true; 744 745 rail.align = (self.opt.railalign=="left") ? 0 : 1; 746 747 self.rail = rail; 748 749 self.rail.drag = false; 750 751 var zoom = false; 752 if (self.opt.boxzoom&&!self.ispage&&!cap.isieold) { 753 zoom = document.createElement('div'); 754 self.bind(zoom,"click",self.doZoom); 755 self.zoom = $(zoom); 756 self.zoom.css({"cursor":"pointer",'z-index':self.zindex,'backgroundImage':'url('+scriptpath+'zoomico.png)','height':18,'width':18,'backgroundPosition':'0px 0px'}); 757 if (self.opt.dblclickzoom) self.bind(self.win,"dblclick",self.doZoom); 758 if (cap.cantouch&&self.opt.gesturezoom) { 759 self.ongesturezoom = function(e) { 760 if (e.scale>1.5) self.doZoomIn(e); 761 if (e.scale<0.8) self.doZoomOut(e); 762 return self.cancelEvent(e); 763 }; 764 self.bind(self.win,"gestureend",self.ongesturezoom); 765 } 766 } 767 768// init HORIZ 769 770 self.railh = false; 771 772 if (self.opt.horizrailenabled) { 773 774 self.css(cont,{'overflow-x':'hidden'}); 775 776 var cursor = $(document.createElement('div')); 777 cursor.css({ 778 position:"relative",top:0,height:self.opt.cursorwidth,width:"0px", 779 'background-color':self.opt.cursorcolor, 780 border:self.opt.cursorborder, 781 'background-clip':'padding-box', 782 '-webkit-border-radius':self.opt.cursorborderradius, 783 '-moz-border-radius':self.opt.cursorborderradius, 784 'border-radius':self.opt.cursorborderradius 785 }); 786 787 cursor.wborder = parseFloat(cursor.outerWidth() - cursor.innerWidth()); 788 self.cursorh = cursor; 789 790 var railh = $(document.createElement('div')); 791 railh.attr('id',self.id+'-hr'); 792 railh.addClass('nicescroll-rails'); 793 railh.height = Math.max(parseFloat(self.opt.cursorwidth),cursor.outerHeight()); 794 railh.css({height:railh.height+"px",'zIndex':self.zindex,"background":self.opt.background}); 795 796 railh.append(cursor); 797 798 railh.visibility = true; 799 railh.scrollable = true; 800 801 railh.align = (self.opt.railvalign=="top") ? 0 : 1; 802 803 self.railh = railh; 804 805 self.railh.drag = false; 806 807 } 808 809// 810 811 if (self.ispage) { 812 rail.css({position:"fixed",top:"0px",height:"100%"}); 813 (rail.align) ? rail.css({right:"0px"}) : rail.css({left:"0px"}); 814 self.body.append(rail); 815 if (self.railh) { 816 railh.css({position:"fixed",left:"0px",width:"100%"}); 817 (railh.align) ? railh.css({bottom:"0px"}) : railh.css({top:"0px"}); 818 self.body.append(railh); 819 } 820 } else { 821 if (self.ishwscroll) { 822 if (self.win.css('position')=='static') self.css(self.win,{'position':'relative'}); 823 var bd = (self.win[0].nodeName == 'HTML') ? self.body : self.win; 824 if (self.zoom) { 825 self.zoom.css({position:"absolute",top:1,right:0,"margin-right":rail.width+4}); 826 bd.append(self.zoom); 827 } 828 rail.css({position:"absolute",top:0}); 829 (rail.align) ? rail.css({right:0}) : rail.css({left:0}); 830 bd.append(rail); 831 if (railh) { 832 railh.css({position:"absolute",left:0,bottom:0}); 833 (railh.align) ? railh.css({bottom:0}) : railh.css({top:0}); 834 bd.append(railh); 835 } 836 } else { 837 self.isfixed = (self.win.css("position")=="fixed"); 838 var rlpos = (self.isfixed) ? "fixed" : "absolute"; 839 840 if (!self.isfixed) self.viewport = self.getViewport(self.win[0]); 841 if (self.viewport) { 842 self.body = self.viewport; 843 if ((/relative|absolute/.test(self.viewport.css("position")))==false) self.css(self.viewport,{"position":"relative"}); 844 } 845 846 rail.css({position:rlpos}); 847 if (self.zoom) self.zoom.css({position:rlpos}); 848 self.updateScrollBar(); 849 self.body.append(rail); 850 if (self.zoom) self.body.append(self.zoom); 851 if (self.railh) { 852 railh.css({position:rlpos}); 853 self.body.append(railh); 854 } 855 } 856 857 if (cap.isios) self.css(self.win,{'-webkit-tap-highlight-color':'rgba(0,0,0,0)','-webkit-touch-callout':'none'}); // prevent grey layer on click 858 859 if (cap.isie&&self.opt.disableoutline) self.win.attr("hideFocus","true"); // IE, prevent dotted rectangle on focused div 860 if (cap.iswebkit&&self.opt.disableoutline) self.win.css({"outline":"none"}); 861// if (cap.isopera&&self.opt.disableoutline) self.win.css({"outline":"0"}); // Opera to test [TODO] 862 863 } 864 865 if (self.opt.autohidemode===false) { 866 self.autohidedom = false;
867 self.rail.css({opacity:self.opt.cursoropacitymax}); 868 if (self.railh) self.railh.css({opacity:self.opt.cursoropacitymax}); 869 } 870 else if (self.opt.autohidemode===true) { 871 self.autohidedom = $().add(self.rail); 872 if (cap.isie8) self.autohidedom=self.autohidedom.add(self.cursor); 873 if (self.railh) self.autohidedom=self.autohidedom.add(self.railh); 874 if (self.railh&&cap.isie8) self.autohidedom=self.autohidedom.add(self.cursorh); 875 } 876 else if (self.opt.autohidemode=="scroll") { 877 self.autohidedom = $().add(self.rail); 878 if (self.railh) self.autohidedom=self.autohidedom.add(self.railh); 879 } 880 else if (self.opt.autohidemode=="cursor") { 881 self.autohidedom = $().add(self.cursor); 882 if (self.railh) self.autohidedom=self.autohidedom.add(self.cursorh); 883 } 884 else if (self.opt.autohidemode=="hidden") { 885 self.autohidedom = false; 886 self.hide(); 887 self.locked = false; 888 } 889 890 if (cap.isie9mobile) { 891 892 self.scrollmom = new ScrollMomentumClass2D(self); 893 894 /* 895 var trace = function(msg) { 896 var db = $("#debug"); 897 if (isNaN(msg)&&(typeof msg != "string")) { 898 var x = []; 899 for(var a in msg) { 900 x.push(a+":"+msg[a]); 901 } 902 msg ="{"+x.join(",")+"}"; 903 } 904 if (db.children().length>0) { 905 db.children().eq(0).before("<div>"+msg+"</div>"); 906 } else { 907 db.append("<div>"+msg+"</div>"); 908 } 909 } 910 window.onerror = function(msg,url,ln) { 911 trace("ERR: "+msg+" at "+ln); 912 } 913*/ 914 915 self.onmangotouch = function(e) { 916 var py = self.getScrollTop(); 917 var px = self.getScrollLeft(); 918 919 if ((py == self.scrollmom.lastscrolly)&&(px == self.scrollmom.lastscrollx)) return true; 920// $("#debug").html('DRAG:'+py); 921 922 var dfy = py-self.mangotouch.sy; 923 var dfx = px-self.mangotouch.sx; 924 var df = Math.round(Math.sqrt(Math.pow(dfx,2)+Math.pow(dfy,2))); 925 if (df==0) return; 926 927 var dry = (dfy<0)?-1:1; 928 var drx = (dfx<0)?-1:1; 929 930 var tm = +new Date(); 931 if (self.mangotouch.lazy) clearTimeout(self.mangotouch.lazy); 932 933 if (((tm-self.mangotouch.tm)>80)||(self.mangotouch.dry!=dry)||(self.mangotouch.drx!=drx)) { 934// trace('RESET+'+(tm-self.mangotouch.tm)); 935 self.scrollmom.stop(); 936 self.scrollmom.reset(px,py); 937 self.mangotouch.sy = py; 938 self.mangotouch.ly = py; 939 self.mangotouch.sx = px; 940 self.mangotouch.lx = px; 941 self.mangotouch.dry = dry; 942 self.mangotouch.drx = drx; 943 self.mangotouch.tm = tm; 944 } else { 945 946 self.scrollmom.stop(); 947 self.scrollmom.update(self.mangotouch.sx-dfx,self.mangotouch.sy-dfy); 948 var gap = tm - self.mangotouch.tm; 949 self.mangotouch.tm = tm; 950 951// trace('MOVE:'+df+" - "+gap); 952 953 var ds = Math.max(Math.abs(self.mangotouch.ly-py),Math.abs(self.mangotouch.lx-px)); 954 self.mangotouch.ly = py; 955 self.mangotouch.lx = px; 956 957 if (ds>2) { 958 self.mangotouch.lazy = setTimeout(function(){ 959// trace('END:'+ds+'+'+gap); 960 self.mangotouch.lazy = false; 961 self.mangotouch.dry = 0; 962 self.mangotouch.drx = 0; 963 self.mangotouch.tm = 0; 964 self.scrollmom.doMomentum(30); 965 },100); 966 } 967 } 968 } 969 970 var top = self.getScrollTop(); 971 var lef = self.getScrollLeft(); 972 self.mangotouch = {sy:top,ly:top,dry:0,sx:lef,lx:lef,drx:0,lazy:false,tm:0}; 973 974 self.bind(self.docscroll,"scroll",self.onmangotouch); 975 976 } else { 977 978 if (cap.cantouch||self.istouchcapable||self.opt.touchbehavior||cap.hasmstouch) { 979 980 self.scrollmom = new ScrollMomentumClass2D(self); 981 982 self.ontouchstart = function(e) { 983 if (e.pointerType&&e.pointerType!=2) return false;
984 985 if (!self.locked) { 986 987 if (cap.hasmstouch) { 988 var tg = (e.target) ? e.target : false; 989 while (tg) { 990 var nc = $(tg).getNiceScroll(); 991 if ((nc.length>0)&&(nc[0].me == self.me)) break; 992 if (nc.length>0) return false; 993 if ((tg.nodeName=='DIV')&&(tg.id==self.id)) break; 994 tg = (tg.parentNode) ? tg.parentNode : false; 995 } 996 } 997 998 self.cancelScroll(); 999 1000 var tg = self.getTarget(e); 1001 1002 if (tg) { 1003 var skp = (/INPUT/i.test(tg.nodeName))&&(/range/i.test(tg.type)); 1004 if (skp) return self.stopPropagation(e); 1005 } 1006 1007 if (!("clientX" in e) && ("changedTouches" in e)) { 1008 e.clientX = e.changedTouches[0].clientX; 1009 e.clientY = e.changedTouches[0].clientY; 1010 } 1011 1012 if (self.forcescreen) { 1013 var le = e; 1014 var e = {"original":(e.original)?e.original:e}; 1015 e.clientX = le.screenX; 1016 e.clientY = le.screenY; 1017 } 1018 1019 self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,st:self.getScrollTop(),sl:self.getScrollLeft(),pt:2,dl:false}; 1020 1021 if (self.ispage||!self.opt.directionlockdeadzone) { 1022 self.rail.drag.dl = "f"; 1023 } else { 1024 1025 var view = { 1026 w:$(window).width(), 1027 h:$(window).height() 1028 }; 1029 1030 var page = { 1031 w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth), 1032 h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight) 1033 } 1034 1035 var maxh = Math.max(0,page.h - view.h); 1036 var maxw = Math.max(0,page.w - view.w); 1037 1038 if (!self.rail.scrollable&&self.railh.scrollable) self.rail.drag.ck = (maxh>0) ? "v" : false; 1039 else if (self.rail.scrollable&&!self.railh.scrollable) self.rail.drag.ck = (maxw>0) ? "h" : false; 1040 else self.rail.drag.ck = false; 1041 if (!self.rail.drag.ck) self.rail.drag.dl = "f"; 1042 } 1043 1044 if (self.opt.touchbehavior&&self.isiframe&&cap.isie) { 1045 var wp = self.win.position(); 1046 self.rail.drag.x+=wp.left; 1047 self.rail.drag.y+=wp.top; 1048 } 1049 1050 self.hasmoving = false; 1051 self.lastmouseup = false; 1052 self.scrollmom.reset(e.clientX,e.clientY); 1053 if (!cap.cantouch&&!this.istouchcapable&&!cap.hasmstouch) { 1054 1055 var ip = (tg)?/INPUT|SELECT|TEXTAREA/i.test(tg.nodeName):false; 1056 if (!ip) { 1057 if (!self.ispage&&cap.hasmousecapture) tg.setCapture(); 1058// return self.cancelEvent(e); 1059 return (self.opt.touchbehavior) ? self.cancelEvent(e) : self.stopPropagation(e); 1060 } 1061 if (/SUBMIT|CANCEL|BUTTON/i.test($(tg).attr('type'))) { 1062 pc = {"tg":tg,"click":false}; 1063 self.preventclick = pc; 1064 } 1065 1066 } 1067 } 1068 1069 }; 1070 1071 self.ontouchend = function(e) { 1072 if (e.pointerType&&e.pointerType!=2) return false; 1073 if (self.rail.drag&&(self.rail.drag.pt==2)) { 1074 self.scrollmom.doMomentum(); 1075 self.rail.drag = false; 1076 if (self.hasmoving) { 1077 self.hasmoving = false; 1078 self.lastmouseup = true; 1079 self.hideCursor(); 1080 if (cap.hasmousecapture) document.releaseCapture(); 1081 if (!cap.cantouch) return self.cancelEvent(e); 1082 } 1083 } 1084 1085 }; 1086 1087 var moveneedoffset = (self.opt.touchbehavior&&self.isiframe&&!cap.hasmousecapture); 1088 1089 self.ontouchmove = function(e,byiframe) { 1090 1091 if (e.pointerType&&e.pointerType!=2) return false;
1092 1093 if (self.rail.drag&&(self.rail.drag.pt==2)) { 1094 if (cap.cantouch&&(typeof e.original == "undefined")) return true; // prevent ios "ghost" events by clickable elements 1095 1096 self.hasmoving = true; 1097 1098 if (self.preventclick&&!self.preventclick.click) { 1099 self.preventclick.click = self.preventclick.tg.onclick||false; 1100 self.preventclick.tg.onclick = self.onpreventclick; 1101 } 1102 1103 var ev = $.extend({"original":e},e); 1104 e = ev; 1105 1106 if (("changedTouches" in e)) { 1107 e.clientX = e.changedTouches[0].clientX; 1108 e.clientY = e.changedTouches[0].clientY; 1109 } 1110 1111 if (self.forcescreen) { 1112 var le = e; 1113 var e = {"original":(e.original)?e.original:e}; 1114 e.clientX = le.screenX; 1115 e.clientY = le.screenY; 1116 } 1117 1118 var ofx = ofy = 0; 1119 1120 if (moveneedoffset&&!byiframe) { 1121 var wp = self.win.position(); 1122 ofx=-wp.left; 1123 ofy=-wp.top; 1124 } 1125 1126 var fy = e.clientY + ofy; 1127 var my = (fy-self.rail.drag.y); 1128 var fx = e.clientX + ofx; 1129 var mx = (fx-self.rail.drag.x); 1130 1131 var ny = self.rail.drag.st-my; 1132 1133 if (self.ishwscroll&&self.opt.bouncescroll) { 1134 if (ny<0) { 1135 ny = Math.round(ny/2); 1136// fy = 0; 1137 } 1138 else if (ny>self.page.maxh) { 1139 ny = self.page.maxh+Math.round((ny-self.page.maxh)/2); 1140// fy = 0; 1141 } 1142 } else { 1143 if (ny<0) {ny=0;fy=0} 1144 if (ny>self.page.maxh) {ny=self.page.maxh;fy=0} 1145 } 1146 1147 if (self.railh&&self.railh.scrollable) { 1148 var nx = self.rail.drag.sl-mx; 1149 1150 if (self.ishwscroll&&self.opt.bouncescroll) { 1151 if (nx<0) { 1152 nx = Math.round(nx/2); 1153// fx = 0; 1154 } 1155 else if (nx>self.page.maxw) { 1156 nx = self.page.maxw+Math.round((nx-self.page.maxw)/2); 1157// fx = 0; 1158 } 1159 } else { 1160 if (nx<0) {nx=0;fx=0} 1161 if (nx>self.page.maxw) {nx=self.page.maxw;fx=0} 1162 } 1163 1164 } 1165 1166 var grabbed = false; 1167 if (self.rail.drag.dl) { 1168 grabbed = true; 1169 if (self.rail.drag.dl=="v") nx = self.rail.drag.sl; 1170 else if (self.rail.drag.dl=="h") ny = self.rail.drag.st; 1171 } else { 1172 var ay = Math.abs(my); 1173 var ax = Math.abs(mx); 1174 var dz = self.opt.directionlockdeadzone; 1175 if (self.rail.drag.ck=="v") { 1176 if (ay>dz&&(ax<=(ay*0.3))) { 1177 self.rail.drag = false; 1178 return true; 1179 } 1180 else if (ax>dz) { 1181 self.rail.drag.dl="f"; 1182 $("body").scrollTop($("body").scrollTop()); // stop iOS native scrolling (when active javascript has blocked) 1183 } 1184 } 1185 else if (self.rail.drag.ck=="h") { 1186 if (ax>dz&&(ay<=(ax*0.3))) { 1187 self.rail.drag = false; 1188 return true; 1189 } 1190 else if (ay>dz) { 1191 self.rail.drag.dl="f"; 1192 $("body").scrollLeft($("body").scrollLeft()); // stop iOS native scrolling (when active javascript has blocked) 1193 } 1194 } 1195 } 1196 1197 self.synched("touchmove",function(){ 1198 if (self.rail.drag&&(self.rail.drag.pt==2)) { 1199 if (self.prepareTransition) self.prepareTransition(0); 1200 if (self.rail.scrollable) self.setScrollTop(ny); 1201 self.scrollmom.update(fx,fy); 1202 if (self.railh&&self.railh.scrollable) { 1203 self.setScrollLeft(nx); 1204 self.showCursor(ny,nx); 1205 } else { 1206 self.showCursor(ny); 1207 } 1208 if (cap.isie10) document.selection.clear(); 1209 } 1210 }); 1211 1212 if (cap.ischrome&&self.istouchcapable) grabbed=false; //chrome touch emulation doesn't like! 1213 if (grabbed) return self.cancelEvent(e); 1214 } 1215 1216 }; 1217 1218 } 1219
1220 self.onmousedown = function(e,hronly) { 1221 if (self.rail.drag&&self.rail.drag.pt!=1) return; 1222 if (self.locked) return self.cancelEvent(e); 1223 self.cancelScroll(); 1224 self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,pt:1,hr:(!!hronly)}; 1225 var tg = self.getTarget(e); 1226 if (!self.ispage&&cap.hasmousecapture) tg.setCapture(); 1227 if (self.isiframe&&!cap.hasmousecapture) { 1228 self.saved["csspointerevents"] = self.doc.css("pointer-events"); 1229 self.css(self.doc,{"pointer-events":"none"}); 1230 } 1231 return self.cancelEvent(e); 1232 }; 1233 1234 self.onmouseup = function(e) { 1235 if (self.rail.drag) { 1236 if (cap.hasmousecapture) document.releaseCapture(); 1237 if (self.isiframe&&!cap.hasmousecapture) self.doc.css("pointer-events",self.saved["csspointerevents"]); 1238 if(self.rail.drag.pt!=1)return; 1239 self.rail.drag = false; 1240 //if (!self.rail.active) self.hideCursor(); 1241 return self.cancelEvent(e); 1242 } 1243 }; 1244 1245 self.onmousemove = function(e) { 1246 if (self.rail.drag) { 1247 if(self.rail.drag.pt!=1)return; 1248 1249 if (cap.ischrome&&e.which==0) return self.onmouseup(e); 1250 1251 self.cursorfreezed = true; 1252 1253 if (self.rail.drag.hr) { 1254 self.scroll.x = self.rail.drag.sx + (e.clientX-self.rail.drag.x); 1255 if (self.scroll.x<0) self.scroll.x=0; 1256 var mw = self.scrollvaluemaxw; 1257 if (self.scroll.x>mw) self.scroll.x=mw; 1258 } else { 1259 self.scroll.y = self.rail.drag.sy + (e.clientY-self.rail.drag.y); 1260 if (self.scroll.y<0) self.scroll.y=0; 1261 var my = self.scrollvaluemax; 1262 if (self.scroll.y>my) self.scroll.y=my; 1263 } 1264 1265 self.synched('mousemove',function(){ 1266 if (self.rail.drag&&(self.rail.drag.pt==1)) { 1267 self.showCursor(); 1268 if (self.rail.drag.hr) self.doScrollLeft(Math.round(self.scroll.x*self.scrollratio.x),self.opt.cursordragspeed); 1269 else self.doScrollTop(Math.round(self.scroll.y*self.scrollratio.y),self.opt.cursordragspeed); 1270 } 1271 }); 1272 1273 return self.cancelEvent(e); 1274 } 1275/* 1276 else { 1277 self.checkarea = true; 1278 } 1279*/ 1280 }; 1281 1282 if (cap.cantouch||self.opt.touchbehavior) { 1283 1284 self.onpreventclick = function(e) { 1285 if (self.preventclick) { 1286 self.preventclick.tg.onclick = self.preventclick.click; 1287 self.preventclick = false; 1288 return self.cancelEvent(e); 1289 } 1290 } 1291 1292// self.onmousedown = self.ontouchstart; 1293// self.onmouseup = self.ontouchend; 1294// self.onmousemove = self.ontouchmove; 1295 1296 self.bind(self.win,"mousedown",self.ontouchstart); // control content dragging 1297 1298 self.onclick = (cap.isios) ? false : function(e) { 1299 if (self.lastmouseup) { 1300 self.lastmouseup = false; 1301 return self.cancelEvent(e); 1302 } else { 1303 return true; 1304 } 1305 }; 1306 1307 if (self.opt.grabcursorenabled&&cap.cursorgrabvalue) { 1308 self.css((self.ispage)?self.doc:self.win,{'cursor':cap.cursorgrabvalue}); 1309 self.css(self.rail,{'cursor':cap.cursorgrabvalue}); 1310 } 1311 1312 } else { 1313 1314 function checkSelectionScroll(e) { 1315 if (!self.selectiondrag) return; 1316 1317 if (e) { 1318 var ww = self.win.outerHeight();
1319 var df = (e.pageY - self.selectiondrag.top); 1320 if (df>0&&df<ww) df=0; 1321 if (df>=ww) df-=ww; 1322 self.selectiondrag.df = df; 1323 } 1324 if (self.selectiondrag.df==0) return; 1325 1326 var rt = -Math.floor(self.selectiondrag.df/6)*2; 1327// self.doScrollTop(self.getScrollTop(true)+rt); 1328 self.doScrollBy(rt); 1329 1330 self.debounced("doselectionscroll",function(){checkSelectionScroll()},50); 1331 } 1332 1333 if ("getSelection" in document) { // A grade - Major browsers 1334 self.hasTextSelected = function() { 1335 return (document.getSelection().rangeCount>0); 1336 } 1337 } 1338 else if ("selection" in document) { //IE9- 1339 self.hasTextSelected = function() { 1340 return (document.selection.type != "None"); 1341 } 1342 } 1343 else { 1344 self.hasTextSelected = function() { // no support 1345 return false; 1346 } 1347 } 1348 1349 self.onselectionstart = function(e) { 1350 if (self.ispage) return; 1351 self.selectiondrag = self.win.offset(); 1352 } 1353 self.onselectionend = function(e) { 1354 self.selectiondrag = false; 1355 } 1356 self.onselectiondrag = function(e) { 1357 if (!self.selectiondrag) return; 1358 if (self.hasTextSelected()) self.debounced("selectionscroll",function(){checkSelectionScroll(e)},250); 1359 } 1360 1361 1362 } 1363 1364 if (cap.hasmstouch) { 1365 self.css(self.rail,{'-ms-touch-action':'none'}); 1366 self.css(self.cursor,{'-ms-touch-action':'none'}); 1367 1368 self.bind(self.win,"MSPointerDown",self.ontouchstart); 1369 self.bind(document,"MSPointerUp",self.ontouchend); 1370 self.bind(document,"MSPointerMove",self.ontouchmove); 1371 self.bind(self.cursor,"MSGestureHold",function(e){e.preventDefault()}); 1372 self.bind(self.cursor,"contextmenu",function(e){e.preventDefault()}); 1373 } 1374 1375 if (this.istouchcapable) { //desktop with screen touch enabled 1376 self.bind(self.win,"touchstart",self.ontouchstart); 1377 self.bind(document,"touchend",self.ontouchend); 1378 self.bind(document,"touchcancel",self.ontouchend); 1379 self.bind(document,"touchmove",self.ontouchmove); 1380 } 1381 1382 self.bind(self.cursor,"mousedown",self.onmousedown); 1383 self.bind(self.cursor,"mouseup",self.onmouseup); 1384 1385 if (self.railh) { 1386 self.bind(self.cursorh,"mousedown",function(e){self.onmousedown(e,true)}); 1387 self.bind(self.cursorh,"mouseup",function(e){ 1388 if (self.rail.drag&&self.rail.drag.pt==2) return; 1389 self.rail.drag = false; 1390 self.hasmoving = false; 1391 self.hideCursor(); 1392 if (cap.hasmousecapture) document.releaseCapture(); 1393 return self.cancelEvent(e); 1394 }); 1395 } 1396 1397 if (self.opt.cursordragontouch||!cap.cantouch&&!self.opt.touchbehavior) { 1398 1399 self.rail.css({"cursor":"default"}); 1400 self.railh&&self.railh.css({"cursor":"default"}); 1401 1402 self.jqbind(self.rail,"mouseenter",function() { 1403 if (self.canshowonmouseevent) self.showCursor(); 1404 self.rail.active = true; 1405 }); 1406 self.jqbind(self.rail,"mouseleave",function() { 1407 self.rail.active = false; 1408 if (!self.rail.drag) self.hideCursor(); 1409 }); 1410 1411 if (self.opt.sensitiverail) { 1412 self.bind(self.rail,"click",function(e){self.doRailClick(e,false,false)}); 1413 self.bind(self.rail,"dblclick",function(e){self.doRailClick(e,true,false)}); 1414 self.bind(self.cursor,"click",function(e){self.cancelEvent(e)}); 1415 self.bind(self.cursor,"dblclick",function(e){self.cancelEvent(e)}); 1416 } 1417 1418 if (self.railh) { 1419 self.jqbind(self.railh,"mouseenter",function() { 1420 if (self.canshowonmouseevent) self.showCursor(); 1421 self.rail.active = true; 1422 }); 1423 self.jqbind(self.railh,"mouseleave",function() { 1424 self.rail.active = false;
1425 if (!self.rail.drag) self.hideCursor(); 1426 }); 1427 1428 if (self.opt.sensitiverail) { 1429 self.bind(self.railh, "click", function(e){self.doRailClick(e,false,true)}); 1430 self.bind(self.railh, "dblclick", function(e){self.doRailClick(e, true, true) }); 1431 self.bind(self.cursorh, "click", function (e) { self.cancelEvent(e) }); 1432 self.bind(self.cursorh, "dblclick", function (e) { self.cancelEvent(e) }); 1433 } 1434 1435 } 1436 1437 } 1438 1439 if (!cap.cantouch&&!self.opt.touchbehavior) { 1440 1441 self.bind((cap.hasmousecapture)?self.win:document,"mouseup",self.onmouseup); 1442 self.bind(document,"mousemove",self.onmousemove); 1443 if (self.onclick) self.bind(document,"click",self.onclick); 1444 1445 if (!self.ispage&&self.opt.enablescrollonselection) { 1446 self.bind(self.win[0],"mousedown",self.onselectionstart); 1447 self.bind(document,"mouseup",self.onselectionend); 1448 self.bind(self.cursor,"mouseup",self.onselectionend); 1449 if (self.cursorh) self.bind(self.cursorh,"mouseup",self.onselectionend); 1450 self.bind(document,"mousemove",self.onselectiondrag); 1451 } 1452 1453 if (self.zoom) { 1454 self.jqbind(self.zoom,"mouseenter",function() { 1455 if (self.canshowonmouseevent) self.showCursor(); 1456 self.rail.active = true; 1457 }); 1458 self.jqbind(self.zoom,"mouseleave",function() { 1459 self.rail.active = false; 1460 if (!self.rail.drag) self.hideCursor(); 1461 }); 1462 } 1463 1464 } else { 1465 1466 self.bind((cap.hasmousecapture)?self.win:document,"mouseup",self.ontouchend); 1467 self.bind(document,"mousemove",self.ontouchmove); 1468 if (self.onclick) self.bind(document,"click",self.onclick); 1469 1470 if (self.opt.cursordragontouch) { 1471 self.bind(self.cursor,"mousedown",self.onmousedown); 1472 self.bind(self.cursor,"mousemove",self.onmousemove); 1473 self.cursorh&&self.bind(self.cursorh,"mousedown",self.onmousedown); 1474 self.cursorh&&self.bind(self.cursorh,"mousemove",self.onmousemove); 1475 } 1476 1477 } 1478 1479 if (self.opt.enablemousewheel) { 1480 if (!self.isiframe) self.bind((cap.isie&&self.ispage) ? document : self.win /*self.docscroll*/ ,"mousewheel",self.onmousewheel); 1481 self.bind(self.rail,"mousewheel",self.onmousewheel); 1482 if (self.railh) self.bind(self.railh,"mousewheel",self.onmousewheelhr); 1483 } 1484 1485 if (!self.ispage&&!cap.cantouch&&!(/HTML|BODY/.test(self.win[0].nodeName))) { 1486 if (!self.win.attr("tabindex")) self.win.attr({"tabindex":tabindexcounter++}); 1487 1488 self.jqbind(self.win,"focus",function(e) { 1489 domfocus = (self.getTarget(e)).id||true; 1490 self.hasfocus = true; 1491 if (self.canshowonmouseevent) self.noticeCursor(); 1492 }); 1493 self.jqbind(self.win,"blur",function(e) { 1494 domfocus = false; 1495 self.hasfocus = false; 1496 }); 1497 1498 self.jqbind(self.win,"mouseenter",function(e) { 1499 mousefocus = (self.getTarget(e)).id||true; 1500 self.hasmousefocus = true; 1501 if (self.canshowonmouseevent) self.noticeCursor(); 1502 }); 1503 self.jqbind(self.win,"mouseleave",function() { 1504 mousefocus = false; 1505 self.hasmousefocus = false; 1506 }); 1507 1508 }; 1509 1510 } // !ie9mobile 1511 1512 //Thanks to http://www.quirksmode.org !! 1513 self.onkeypress = function(e) { 1514 if (self.locked&&self.page.maxh==0) return true; 1515 1516 e = (e) ? e : window.e; 1517 var tg = self.getTarget(e); 1518 if (tg&&/INPUT|TEXTAREA|SELECT|OPTION/.test(tg.nodeName)) { 1519 var tp = tg.getAttribute('type')||tg.type||false; 1520 if ((!tp)||!(/submit|button|cancel/i.tp)) return true; 1521 } 1522 1523 if (self.hasfocus||(self.hasmousefocus&&!domfocus)||(self.ispage&&!domfocus&&!mousefocus)) { 1524 var key = e.keyCode; 1525 1526 if (self.locked&&key!=27) return self.cancelEvent(e); 1527 1528 var ctrl = e.ctrlKey||false; 1529 var shift = e.shiftKey || false; 1530 1531 var ret = false;
1532 switch (key) { 1533 case 38: 1534 case 63233: //safari 1535 self.doScrollBy(24*3); 1536 ret = true; 1537 break; 1538 case 40: 1539 case 63235: //safari 1540 self.doScrollBy(-24*3); 1541 ret = true; 1542 break; 1543 case 37: 1544 case 63232: //safari 1545 if (self.railh) { 1546 (ctrl) ? self.doScrollLeft(0) : self.doScrollLeftBy(24*3); 1547 ret = true; 1548 } 1549 break; 1550 case 39: 1551 case 63234: //safari 1552 if (self.railh) { 1553 (ctrl) ? self.doScrollLeft(self.page.maxw) : self.doScrollLeftBy(-24*3); 1554 ret = true; 1555 } 1556 break; 1557 case 33: 1558 case 63276: // safari 1559 self.doScrollBy(self.view.h); 1560 ret = true; 1561 break; 1562 case 34: 1563 case 63277: // safari 1564 self.doScrollBy(-self.view.h); 1565 ret = true; 1566 break; 1567 case 36: 1568 case 63273: // safari 1569 (self.railh&&ctrl) ? self.doScrollPos(0,0) : self.doScrollTo(0); 1570 ret = true; 1571 break; 1572 case 35: 1573 case 63275: // safari 1574 (self.railh&&ctrl) ? self.doScrollPos(self.page.maxw,self.page.maxh) : self.doScrollTo(self.page.maxh); 1575 ret = true; 1576 break; 1577 case 32: 1578 if (self.opt.spacebarenabled) { 1579 (shift) ? self.doScrollBy(self.view.h) : self.doScrollBy(-self.view.h); 1580 ret = true; 1581 } 1582 break; 1583 case 27: // ESC 1584 if (self.zoomactive) { 1585 self.doZoom(); 1586 ret = true; 1587 } 1588 break; 1589 } 1590 if (ret) return self.cancelEvent(e); 1591 } 1592 }; 1593 1594 if (self.opt.enablekeyboard) self.bind(document,(cap.isopera&&!cap.isopera12)?"keypress":"keydown",self.onkeypress); 1595 1596 self.bind(window,'resize',self.lazyResize); 1597 self.bind(window,'orientationchange',self.lazyResize); 1598 1599 self.bind(window,"load",self.lazyResize); 1600 1601 if (cap.ischrome&&!self.ispage&&!self.haswrapper) { //chrome void scrollbar bug - it persists in version 26 1602 var tmp=self.win.attr("style"); 1603 var ww = parseFloat(self.win.css("width"))+1; 1604 self.win.css('width',ww); 1605 self.synched("chromefix",function(){self.win.attr("style",tmp)}); 1606 } 1607 1608 1609// Trying a cross-browser implementation - good luck! 1610 1611 self.onAttributeChange = function(e) { 1612 self.lazyResize(250); 1613 } 1614 1615 if (!self.ispage&&!self.haswrapper) { 1616 // redesigned MutationObserver for Chrome18+/Firefox14+/iOS6+ with support for: remove div, add/remove content 1617 if (clsMutationObserver !== false) { 1618 self.observer = new clsMutationObserver(function(mutations) { 1619 mutations.forEach(self.onAttributeChange); 1620 }); 1621 self.observer.observe(self.win[0],{childList: true, characterData: false, attributes: true, subtree: false}); 1622 1623 self.observerremover = new clsMutationObserver(function(mutations) { 1624 mutations.forEach(function(mo){ 1625 if (mo.removedNodes.length>0) { 1626 for (var dd in mo.removedNodes) { 1627 if (mo.removedNodes[dd]==self.win[0]) return self.remove(); 1628 } 1629 } 1630 }); 1631 }); 1632 self.observerremover.observe(self.win[0].parentNode,{childList: true, characterData: false, attributes: false, subtree: false}); 1633 1634 } else { 1635 self.bind(self.win,(cap.isie&&!cap.isie9)?"propertychange":"DOMAttrModified",self.onAttributeChange); 1636 if (cap.isie9) self.win[0].attachEvent("onpropertychange",self.onAttributeChange); //IE9 DOMAttrModified bug 1637 self.bind(self.win,"DOMNodeRemoved",function(e){ 1638 if (e.target==self.win[0]) self.remove(); 1639 }); 1640 } 1641 } 1642 1643// 1644 1645 if (!self.ispage&&self.opt.boxzoom) self.bind(window,"resize",self.resizeZoom); 1646 if (self.istextarea) self.bind(self.win,"mouseup",self.lazyResize); 1647 1648 self.checkrtlmode = true; 1649 self.lazyResize(30); 1650 1651 } 1652 1653 if (this.doc[0].nodeName == 'IFRAME') { 1654 function oniframeload(e) { 1655 self.iframexd = false;
1656 try { 1657 var doc = 'contentDocument' in this ? this.contentDocument : this.contentWindow.document; 1658 var a = doc.domain; 1659 } catch(e){self.iframexd = true;doc=false}; 1660 1661 if (self.iframexd) { 1662 if ("console" in window) console.log('NiceScroll error: policy restriced iframe'); 1663 return true; //cross-domain - I can't manage this 1664 } 1665 1666 self.forcescreen = true; 1667 1668 if (self.isiframe) { 1669 self.iframe = { 1670 "doc":$(doc), 1671 "html":self.doc.contents().find('html')[0], 1672 "body":self.doc.contents().find('body')[0] 1673 }; 1674 self.getContentSize = function(){ 1675 return { 1676 w:Math.max(self.iframe.html.scrollWidth,self.iframe.body.scrollWidth), 1677 h:Math.max(self.iframe.html.scrollHeight,self.iframe.body.scrollHeight) 1678 } 1679 } 1680 self.docscroll = $(self.iframe.body);//$(this.contentWindow); 1681 } 1682 1683 if (!cap.isios&&self.opt.iframeautoresize&&!self.isiframe) { 1684 self.win.scrollTop(0); // reset position 1685 self.doc.height(""); //reset height to fix browser bug 1686 var hh=Math.max(doc.getElementsByTagName('html')[0].scrollHeight,doc.body.scrollHeight); 1687 self.doc.height(hh); 1688 } 1689 self.lazyResize(30); 1690 1691 if (cap.isie7) self.css($(self.iframe.html),{'overflow-y':'hidden'}); 1692 //self.css($(doc.body),{'overflow-y':'hidden'}); 1693 self.css($(self.iframe.body),{'overflow-y':'hidden'}); 1694 1695 if (cap.isios&&self.haswrapper) { 1696 self.css($(doc.body),{'-webkit-transform':'translate3d(0,0,0)'}); // avoid iFrame content clipping - thanks to http://blog.derraab.com/2012/04/02/avoid-iframe-content-clipping-with-css-transform-on-ios/ 1697 1698 console.log(1); 1699 1700 } 1701 1702 if ('contentWindow' in this) { 1703 self.bind(this.contentWindow,"scroll",self.onscroll); //IE8 & minor 1704 } else { 1705 self.bind(doc,"scroll",self.onscroll); 1706 } 1707 1708 if (self.opt.enablemousewheel) { 1709 self.bind(doc,"mousewheel",self.onmousewheel); 1710 } 1711 1712 if (self.opt.enablekeyboard) self.bind(doc,(cap.isopera)?"keypress":"keydown",self.onkeypress); 1713 1714 if (cap.cantouch||self.opt.touchbehavior) { 1715 self.bind(doc,"mousedown",self.ontouchstart); 1716 self.bind(doc,"mousemove",function(e){self.ontouchmove(e,true)}); 1717 if (self.opt.grabcursorenabled&&cap.cursorgrabvalue) self.css($(doc.body),{'cursor':cap.cursorgrabvalue}); 1718 } 1719 1720 self.bind(doc,"mouseup",self.ontouchend); 1721 1722 if (self.zoom) { 1723 if (self.opt.dblclickzoom) self.bind(doc,'dblclick',self.doZoom); 1724 if (self.ongesturezoom) self.bind(doc,"gestureend",self.ongesturezoom); 1725 } 1726 }; 1727 1728 if (this.doc[0].readyState&&this.doc[0].readyState=="complete"){ 1729 setTimeout(function(){oniframeload.call(self.doc[0],false)},500); 1730 } 1731 self.bind(this.doc,"load",oniframeload); 1732 1733 } 1734 1735 }; 1736 1737 this.showCursor = function(py,px) { 1738 if (self.cursortimeout) { 1739 clearTimeout(self.cursortimeout); 1740 self.cursortimeout = 0; 1741 } 1742 if (!self.rail) return; 1743 if (self.autohidedom) { 1744 self.autohidedom.stop().css({opacity:self.opt.cursoropacitymax}); 1745 self.cursoractive = true; 1746 } 1747 1748 if (!self.rail.drag||self.rail.drag.pt!=1) { 1749 if ((typeof py != "undefined")&&(py!==false)) { 1750 self.scroll.y = Math.round(py * 1/self.scrollratio.y); 1751 } 1752 if (typeof px != "undefined") { 1753 self.scroll.x = Math.round(px * 1/self.scrollratio.x); 1754 } 1755 } 1756 1757 self.cursor.css({height:self.cursorheight,top:self.scroll.y}); 1758 if (self.cursorh) { 1759 (!self.rail.align&&self.rail.visibility) ? self.cursorh.css({width:self.cursorwidth,left:self.scroll.x+self.rail.width}) : self.cursorh.css({width:self.cursorwidth,left:self.scroll.x}); 1760 self.cursoractive = true; 1761 } 1762 1763 if (self.zoom) self.zoom.stop().css({opacity:self.opt.cursoropacitymax}); 1764 }; 1765 1766 this.hideCursor = function(tm) { 1767 if (self.cursortimeout) return; 1768 if (!self.rail) return; 1769 if (!self.autohidedom) return; 1770 self.cursortimeout = setTimeout(function() { 1771 if (!self.rail.active||!self.showonmouseevent) { 1772 self.autohidedom.stop().animate({opacity:self.opt.cursoropacitymin}); 1773 if (self.zoom) self.zoom.stop().animate({opacity:self.opt.cursoropacitymin}); 1774 self.cursoractive = false;
1775 } 1776 self.cursortimeout = 0; 1777 },tm||self.opt.hidecursordelay); 1778 }; 1779 1780 this.noticeCursor = function(tm,py,px) { 1781 self.showCursor(py,px); 1782 if (!self.rail.active) self.hideCursor(tm); 1783 }; 1784 1785 this.getContentSize = 1786 (self.ispage) ? 1787 function(){ 1788 return { 1789 w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth), 1790 h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight) 1791 } 1792 } 1793 : (self.haswrapper) ? 1794 function(){ 1795 return { 1796 w:self.doc.outerWidth()+parseInt(self.win.css('paddingLeft'))+parseInt(self.win.css('paddingRight')), 1797 h:self.doc.outerHeight()+parseInt(self.win.css('paddingTop'))+parseInt(self.win.css('paddingBottom')) 1798 } 1799 } 1800 : function() { 1801 return { 1802 w:self.docscroll[0].scrollWidth, 1803 h:self.docscroll[0].scrollHeight 1804 } 1805 }; 1806 1807 this.onResize = function(e,page) { 1808 1809 if (!self.win) return false; 1810 1811 if (!self.haswrapper&&!self.ispage) { 1812 if (self.win.css('display')=='none') { 1813 if (self.visibility) self.hideRail().hideRailHr(); 1814 return false; 1815 } else { 1816 if (!self.hidden&&!self.visibility) self.showRail().showRailHr(); 1817 } 1818 } 1819 1820 var premaxh = self.page.maxh; 1821 var premaxw = self.page.maxw; 1822 1823 var preview = {h:self.view.h,w:self.view.w}; 1824 1825 self.view = { 1826 w:(self.ispage) ? self.win.width() : parseInt(self.win[0].clientWidth), 1827 h:(self.ispage) ? self.win.height() : parseInt(self.win[0].clientHeight) 1828 }; 1829 1830 self.page = (page) ? page : self.getContentSize(); 1831 1832 self.page.maxh = Math.max(0,self.page.h - self.view.h); 1833 self.page.maxw = Math.max(0,self.page.w - self.view.w); 1834 1835 if ((self.page.maxh==premaxh)&&(self.page.maxw==premaxw)&&(self.view.w==preview.w)) { 1836 // test position 1837 if (!self.ispage) { 1838 var pos = self.win.offset(); 1839 if (self.lastposition) { 1840 var lst = self.lastposition; 1841 if ((lst.top==pos.top)&&(lst.left==pos.left)) return self; //nothing to do 1842 } 1843 self.lastposition = pos; 1844 } else { 1845 return self; //nothing to do 1846 } 1847 } 1848 1849 if (self.page.maxh==0) { 1850 self.hideRail(); 1851 self.scrollvaluemax = 0; 1852 self.scroll.y = 0; 1853 self.scrollratio.y = 0; 1854 self.cursorheight = 0; 1855 self.setScrollTop(0); 1856 self.rail.scrollable = false; 1857 } else { 1858 self.rail.scrollable = true; 1859 } 1860 1861 if (self.page.maxw==0) { 1862 self.hideRailHr(); 1863 self.scrollvaluemaxw = 0; 1864 self.scroll.x = 0; 1865 self.scrollratio.x = 0; 1866 self.cursorwidth = 0; 1867 self.setScrollLeft(0); 1868 self.railh.scrollable = false; 1869 } else { 1870 self.railh.scrollable = true; 1871 } 1872 1873 self.locked = (self.page.maxh==0)&&(self.page.maxw==0); 1874 if (self.locked) { 1875 if (!self.ispage) self.updateScrollBar(self.view); 1876 return false; 1877 } 1878 1879 if (!self.hidden&&!self.visibility) { 1880 self.showRail().showRailHr(); 1881 } 1882 else if (!self.hidden&&!self.railh.visibility) self.showRailHr(); 1883 1884 if (self.istextarea&&self.win.css('resize')&&self.win.css('resize')!='none') self.view.h-=20; 1885 1886 self.cursorheight = Math.min(self.view.h,Math.round(self.view.h * (self.view.h / self.page.h))); 1887 self.cursorheight = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorheight); 1888 1889 self.cursorwidth = Math.min(self.view.w,Math.round(self.view.w * (self.view.w / self.page.w))); 1890 self.cursorwidth = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorwidth); 1891 1892 self.scrollvaluemax = self.view.h-self.cursorheight-self.cursor.hborder; 1893 1894 if (self.railh) { 1895 self.railh.width = (self.page.maxh>0) ? (self.view.w-self.rail.width) : self.view.w; 1896 self.scrollvaluemaxw = self.railh.width-self.cursorwidth-self.cursorh.wborder; 1897 } 1898 1899 if (self.checkrtlmode&&self.railh) { 1900 self.checkrtlmode = false;
1901 if (self.opt.rtlmode&&self.scroll.x==0) self.setScrollLeft(self.page.maxw); 1902 } 1903 1904 if (!self.ispage) self.updateScrollBar(self.view); 1905 1906 self.scrollratio = { 1907 x:(self.page.maxw/self.scrollvaluemaxw), 1908 y:(self.page.maxh/self.scrollvaluemax) 1909 }; 1910 1911 var sy = self.getScrollTop(); 1912 if (sy>self.page.maxh) { 1913 self.doScrollTop(self.page.maxh); 1914 } else { 1915 self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y)); 1916 self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x)); 1917 if (self.cursoractive) self.noticeCursor(); 1918 } 1919 1920 if (self.scroll.y&&(self.getScrollTop()==0)) self.doScrollTo(Math.floor(self.scroll.y*self.scrollratio.y)); 1921 1922 return self; 1923 }; 1924 1925 this.resize = self.onResize; 1926 1927 this.lazyResize = function(tm) { // event debounce 1928 tm = (isNaN(tm)) ? 30 : tm; 1929 self.delayed('resize',self.resize,tm); 1930 return self; 1931 } 1932 1933// modified by MDN https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/wheel 1934 function _modernWheelEvent(dom,name,fn,bubble) { 1935 self._bind(dom,name,function(e){ 1936 var e = (e) ? e : window.event; 1937 var event = { 1938 original: e, 1939 target: e.target || e.srcElement, 1940 type: "wheel", 1941 deltaMode: e.type == "MozMousePixelScroll" ? 0 : 1, 1942 deltaX: 0, 1943 deltaZ: 0, 1944 preventDefault: function() { 1945 e.preventDefault ? e.preventDefault() : e.returnValue = false; 1946 return false; 1947 }, 1948 stopImmediatePropagation: function() { 1949 (e.stopImmediatePropagation) ? e.stopImmediatePropagation() : e.cancelBubble = true; 1950 } 1951 }; 1952 1953 if (name=="mousewheel") { 1954 event.deltaY = - 1/40 * e.wheelDelta; 1955 e.wheelDeltaX && (event.deltaX = - 1/40 * e.wheelDeltaX); 1956 } else { 1957 event.deltaY = e.detail; 1958 } 1959 1960 return fn.call(dom,event); 1961 },bubble); 1962 }; 1963 1964 this._bind = function(el,name,fn,bubble) { // primitive bind 1965 self.events.push({e:el,n:name,f:fn,b:bubble,q:false}); 1966 if (el.addEventListener) { 1967 el.addEventListener(name,fn,bubble||false); 1968 } 1969 else if (el.attachEvent) { 1970 el.attachEvent("on"+name,fn); 1971 } 1972 else { 1973 el["on"+name] = fn; 1974 } 1975 }; 1976 1977 this.jqbind = function(dom,name,fn) { // use jquery bind for non-native events (mouseenter/mouseleave) 1978 self.events.push({e:dom,n:name,f:fn,q:true}); 1979 $(dom).bind(name,fn); 1980 } 1981 1982 this.bind = function(dom,name,fn,bubble) { // touch-oriented & fixing jquery bind 1983 var el = ("jquery" in dom) ? dom[0] : dom; 1984 1985 if (name=='mousewheel') { 1986 if ("onwheel" in self.win) { 1987 self._bind(el,"wheel",fn,bubble||false); 1988 } else { 1989 var wname = (typeof document.onmousewheel != "undefined") ? "mousewheel" : "DOMMouseScroll"; // older IE/Firefox 1990 _modernWheelEvent(el,wname,fn,bubble||false); 1991 if (wname=="DOMMouseScroll") _modernWheelEvent(el,"MozMousePixelScroll",fn,bubble||false); // Firefox legacy 1992 } 1993 } 1994 else if (el.addEventListener) { 1995 if (cap.cantouch && /mouseup|mousedown|mousemove/.test(name)) { // touch device support 1996 var tt=(name=='mousedown')?'touchstart':(name=='mouseup')?'touchend':'touchmove'; 1997 self._bind(el,tt,function(e){ 1998 if (e.touches) { 1999 if (e.touches.length<2) {var ev=(e.touches.length)?e.touches[0]:e;ev.original=e;fn.call(this,ev);} 2000 } 2001 else if (e.changedTouches) {var ev=e.changedTouches[0];ev.original=e;fn.call(this,ev);} //blackberry 2002 },bubble||false); 2003 } 2004 self._bind(el,name,fn,bubble||false); 2005 if (cap.cantouch && name=="mouseup") self._bind(el,"touchcancel",fn,bubble||false); 2006 } 2007 else { 2008 self._bind(el,name,function(e) { 2009 e = e||window.event||false; 2010 if (e) { 2011 if (e.srcElement) e.target=e.srcElement; 2012 } 2013 if (!("pageY" in e)) { 2014 e.pageX = e.clientX + document.documentElement.scrollLeft; 2015 e.pageY = e.clientY + document.documentElement.scrollTop; 2016 } 2017 return ((fn.call(el,e)===false)||bubble===false) ? self.cancelEvent(e) : true; 2018 }); 2019 } 2020 }; 2021 2022 this._unbind = function(el,name,fn,bub) { // primitive unbind 2023 if (el.removeEventListener) { 2024 el.removeEventListener(name,fn,bub); 2025 } 2026 else if (el.detachEvent) { 2027 el.detachEvent('on'+name,fn); 2028 } else { 2029 el['on'+name] = false;
2030 } 2031 }; 2032 2033 this.unbindAll = function() { 2034 for(var a=0;a<self.events.length;a++) { 2035 var r = self.events[a]; 2036 (r.q) ? r.e.unbind(r.n,r.f) : self._unbind(r.e,r.n,r.f,r.b); 2037 } 2038 }; 2039 2040 // Thanks to http://www.switchonthecode.com !! 2041 this.cancelEvent = function(e) { 2042 var e = (e.original) ? e.original : (e) ? e : window.event||false; 2043 if (!e) return false; 2044 if(e.preventDefault) e.preventDefault(); 2045 if(e.stopPropagation) e.stopPropagation(); 2046 if(e.preventManipulation) e.preventManipulation(); //IE10 2047 e.cancelBubble = true; 2048 e.cancel = true; 2049 e.returnValue = false; 2050 return false; 2051 }; 2052 2053 this.stopPropagation = function(e) { 2054 var e = (e.original) ? e.original : (e) ? e : window.event||false; 2055 if (!e) return false; 2056 if (e.stopPropagation) return e.stopPropagation(); 2057 if (e.cancelBubble) e.cancelBubble=true; 2058 return false; 2059 } 2060 2061 this.showRail = function() { 2062 if ((self.page.maxh!=0)&&(self.ispage||self.win.css('display')!='none')) { 2063 self.visibility = true; 2064 self.rail.visibility = true; 2065 self.rail.css('display','block'); 2066 } 2067 return self; 2068 }; 2069 2070 this.showRailHr = function() { 2071 if (!self.railh) return self; 2072 if ((self.page.maxw!=0)&&(self.ispage||self.win.css('display')!='none')) { 2073 self.railh.visibility = true; 2074 self.railh.css('display','block'); 2075 } 2076 return self; 2077 }; 2078 2079 this.hideRail = function() { 2080 self.visibility = false; 2081 self.rail.visibility = false; 2082 self.rail.css('display','none'); 2083 return self; 2084 }; 2085 2086 this.hideRailHr = function() { 2087 if (!self.railh) return self; 2088 self.railh.visibility = false; 2089 self.railh.css('display','none'); 2090 return self; 2091 }; 2092 2093 this.show = function() { 2094 self.hidden = false; 2095 self.locked = false; 2096 return self.showRail().showRailHr(); 2097 }; 2098 2099 this.hide = function() { 2100 self.hidden = true; 2101 self.locked = true; 2102 return self.hideRail().hideRailHr(); 2103 }; 2104 2105 this.toggle = function() { 2106 return (self.hidden) ? self.show() : self.hide(); 2107 }; 2108 2109 this.remove = function() { 2110 self.stop(); 2111 if (self.cursortimeout) clearTimeout(self.cursortimeout); 2112 self.doZoomOut(); 2113 self.unbindAll(); 2114 2115 if (cap.isie9) self.win[0].detachEvent("onpropertychange",self.onAttributeChange); //IE9 DOMAttrModified bug 2116 2117 if (self.observer !== false) self.observer.disconnect(); 2118 if (self.observerremover !== false) self.observerremover.disconnect(); 2119 2120 self.events = null; 2121 2122 if (self.cursor) { 2123 self.cursor.remove(); 2124 } 2125 if (self.cursorh) { 2126 self.cursorh.remove(); 2127 } 2128 if (self.rail) { 2129 self.rail.remove(); 2130 } 2131 if (self.railh) { 2132 self.railh.remove(); 2133 } 2134 if (self.zoom) { 2135 self.zoom.remove(); 2136 } 2137 for(var a=0;a<self.saved.css.length;a++) { 2138 var d=self.saved.css[a]; 2139 d[0].css(d[1],(typeof d[2]=="undefined") ? '' : d[2]); 2140 } 2141 self.saved = false; 2142 self.me.data('__nicescroll',''); //erase all traces 2143 2144 // memory leak fixed by GianlucaGuarini - thanks a lot! 2145 // remove the current nicescroll from the $.nicescroll array & normalize array 2146 var lst = $.nicescroll; 2147 lst.each(function(i){ 2148 if (!this) return; 2149 if(this.id === self.id) { 2150 delete lst[i]; 2151 for(var b=++i;b<lst.length;b++,i++) lst[i]=lst[b]; 2152 lst.length--; 2153 if (lst.length) delete lst[lst.length]; 2154 } 2155 }); 2156 2157 for (var i in self) { 2158 self[i] = null; 2159 delete self[i]; 2160 } 2161 2162 self = null; 2163 2164 }; 2165 2166 this.scrollstart = function(fn) { 2167 this.onscrollstart = fn; 2168 return self; 2169 } 2170 this.scrollend = function(fn) { 2171 this.onscrollend = fn; 2172 return self; 2173 } 2174 this.scrollcancel = function(fn) { 2175 this.onscrollcancel = fn; 2176 return self; 2177 } 2178 2179 this.zoomin = function(fn) { 2180 this.onzoomin = fn; 2181 return self; 2182 } 2183 this.zoomout = function(fn) { 2184 this.onzoomout = fn; 2185 return self; 2186 } 2187 2188 this.isScrollable = function(e) { 2189 var dom = (e.target) ? e.target : e; 2190 if (dom.nodeName == 'OPTION') return true; 2191 while (dom&&(dom.nodeType==1)&&!(/BODY|HTML/.test(dom.nodeName))) { 2192 var dd = $(dom); 2193 var ov = dd.css('overflowY')||dd.css('overflowX')||dd.css('overflow')||''; 2194 if (/scroll|auto/.test(ov)) return (dom.clientHeight!=dom.scrollHeight); 2195 dom = (dom.parentNode) ? dom.parentNode : false; 2196 } 2197 return false;
2198 }; 2199 2200 this.getViewport = function(me) { 2201 var dom = (me&&me.parentNode) ? me.parentNode : false; 2202 while (dom&&(dom.nodeType==1)&&!(/BODY|HTML/.test(dom.nodeName))) { 2203 var dd = $(dom); 2204 var ov = dd.css('overflowY')||dd.css('overflowX')||dd.css('overflow')||''; 2205 if ((/scroll|auto/.test(ov))&&(dom.clientHeight!=dom.scrollHeight)) return dd; 2206 if (dd.getNiceScroll().length>0) return dd; 2207 dom = (dom.parentNode) ? dom.parentNode : false; 2208 } 2209 return false; 2210 }; 2211 2212 function execScrollWheel(e,hr,chkscroll) { 2213 var px,py; 2214 var rt = 1; 2215 2216 if (e.deltaMode==0) { // PIXEL 2217 px = -Math.floor(e.deltaX*(self.opt.mousescrollstep/(18*3))); 2218 py = -Math.floor(e.deltaY*(self.opt.mousescrollstep/(18*3))); 2219 } 2220 else if (e.deltaMode==1) { // LINE 2221 px = -Math.floor(e.deltaX*self.opt.mousescrollstep); 2222 py = -Math.floor(e.deltaY*self.opt.mousescrollstep); 2223 } 2224 2225 if (hr&&self.opt.oneaxismousemode&&(px==0)&&py) { // classic vertical-only mousewheel + browser with x/y support 2226 px = py; 2227 py = 0; 2228 } 2229 2230 if (px) { 2231 if (self.scrollmom) {self.scrollmom.stop()} 2232 self.lastdeltax+=px; 2233 self.debounced("mousewheelx",function(){var dt=self.lastdeltax;self.lastdeltax=0;if(!self.rail.drag){self.doScrollLeftBy(dt)}},120); 2234 } 2235 if (py) { 2236 if (self.opt.nativeparentscrolling&&chkscroll&&!self.ispage&&!self.zoomactive) { 2237 if (py<0) { 2238 if (self.getScrollTop()>=self.page.maxh) return true; 2239 } else { 2240 if (self.getScrollTop()<=0) return true; 2241 } 2242 } 2243 if (self.scrollmom) {self.scrollmom.stop()} 2244 self.lastdeltay+=py; 2245 self.debounced("mousewheely",function(){var dt=self.lastdeltay;self.lastdeltay=0;if(!self.rail.drag){self.doScrollBy(dt)}},120); 2246 } 2247 2248 e.stopImmediatePropagation(); 2249 return e.preventDefault(); 2250// return self.cancelEvent(e); 2251 }; 2252 2253 this.onmousewheel = function(e) { 2254 if (self.locked) { 2255 self.debounced("checkunlock",self.resize,250); 2256 return true; 2257 } 2258 if (self.rail.drag) return self.cancelEvent(e); 2259 2260 if (self.opt.oneaxismousemode=="auto"&&e.deltaX!=0) self.opt.oneaxismousemode = false; // check two-axis mouse support (not very elegant) 2261 2262 if (self.opt.oneaxismousemode&&e.deltaX==0) { 2263 if (!self.rail.scrollable) { 2264 if (self.railh&&self.railh.scrollable) { 2265 return self.onmousewheelhr(e); 2266 } else { 2267 return true; 2268 } 2269 } 2270 } 2271 2272 var nw = +(new Date()); 2273 var chk = false; 2274 if (self.opt.preservenativescrolling&&((self.checkarea+600)<nw)) { 2275// self.checkarea = false; 2276 self.nativescrollingarea = self.isScrollable(e); 2277 chk = true; 2278 } 2279 self.checkarea = nw; 2280 if (self.nativescrollingarea) return true; // this isn't my business 2281// if (self.locked) return self.cancelEvent(e); 2282 var ret = execScrollWheel(e,false,chk); 2283 if (ret) self.checkarea = 0; 2284 return ret; 2285 }; 2286 2287 this.onmousewheelhr = function(e) { 2288 if (self.locked||!self.railh.scrollable) return true; 2289 if (self.rail.drag) return self.cancelEvent(e); 2290 2291 var nw = +(new Date()); 2292 var chk = false; 2293 if (self.opt.preservenativescrolling&&((self.checkarea+600)<nw)) { 2294// self.checkarea = false; 2295 self.nativescrollingarea = self.isScrollable(e); 2296 chk = true; 2297 } 2298 self.checkarea = nw; 2299 if (self.nativescrollingarea) return true; // this isn't my business 2300 if (self.locked) return self.cancelEvent(e); 2301 2302 return execScrollWheel(e,true,chk); 2303 }; 2304 2305 this.stop = function() { 2306 self.cancelScroll(); 2307 if (self.scrollmon) self.scrollmon.stop(); 2308 self.cursorfreezed = false; 2309 self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y)); 2310 self.noticeCursor(); 2311 return self; 2312 }; 2313 2314 this.getTransitionSpeed = function(dif) { 2315 var sp = Math.round(self.opt.scrollspeed*10); 2316 var ex = Math.min(sp,Math.round((dif / 20) * self.opt.scrollspeed)); 2317 return (ex>
231720) ? ex : 0; 2318 } 2319 2320 if (!self.opt.smoothscroll) { 2321 this.doScrollLeft = function(x,spd) { //direct 2322 var y = self.getScrollTop(); 2323 self.doScrollPos(x,y,spd); 2324 } 2325 this.doScrollTop = function(y,spd) { //direct 2326 var x = self.getScrollLeft(); 2327 self.doScrollPos(x,y,spd); 2328 } 2329 this.doScrollPos = function(x,y,spd) { //direct 2330 var nx = (x>self.page.maxw) ? self.page.maxw : x; 2331 if (nx<0) nx=0; 2332 var ny = (y>self.page.maxh) ? self.page.maxh : y; 2333 if (ny<0) ny=0; 2334 self.synched('scroll',function(){ 2335 self.setScrollTop(ny); 2336 self.setScrollLeft(nx); 2337 }); 2338 } 2339 this.cancelScroll = function() {}; // direct 2340 } 2341 else if (self.ishwscroll&&cap.hastransition&&self.opt.usetransition) { 2342 this.prepareTransition = function(dif,istime) { 2343 var ex = (istime) ? ((dif>20)?dif:0) : self.getTransitionSpeed(dif); 2344 var trans = (ex) ? cap.prefixstyle+'transform '+ex+'ms ease-out' : ''; 2345 if (!self.lasttransitionstyle||self.lasttransitionstyle!=trans) { 2346 self.lasttransitionstyle = trans; 2347 self.doc.css(cap.transitionstyle,trans); 2348 } 2349 return ex; 2350 }; 2351 2352 this.doScrollLeft = function(x,spd) { //trans 2353 var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop(); 2354 self.doScrollPos(x,y,spd); 2355 } 2356 2357 this.doScrollTop = function(y,spd) { //trans 2358 var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft(); 2359 self.doScrollPos(x,y,spd); 2360 } 2361 2362 this.doScrollPos = function(x,y,spd) { //trans 2363 2364 var py = self.getScrollTop(); 2365 var px = self.getScrollLeft(); 2366 2367 if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll(); //inverted movement detection 2368 2369 if (self.opt.bouncescroll==false) { 2370 if (y<0) y=0; 2371 else if (y>self.page.maxh) y=self.page.maxh; 2372 if (x<0) x=0; 2373 else if (x>self.page.maxw) x=self.page.maxw; 2374 } 2375 2376 if (self.scrollrunning&&x==self.newscrollx&&y==self.newscrolly) return false; 2377 2378 self.newscrolly = y; 2379 self.newscrollx = x; 2380 2381 self.newscrollspeed = spd||false; 2382 2383 if (self.timer) return false; 2384 2385 self.timer = setTimeout(function(){ 2386 2387 var top = self.getScrollTop(); 2388 var lft = self.getScrollLeft(); 2389 2390 var dst = {}; 2391 dst.x = x-lft; 2392 dst.y = y-top; 2393 dst.px = lft; 2394 dst.py = top; 2395 2396 var dd = Math.round(Math.sqrt(Math.pow(dst.x,2)+Math.pow(dst.y,2))); 2397 2398// var df = (self.newscrollspeed) ? self.newscrollspeed : dd; 2399 2400 var ms = (self.newscrollspeed && self.newscrollspeed>1) ? self.newscrollspeed : self.getTransitionSpeed(dd); 2401 if (self.newscrollspeed&&self.newscrollspeed<=1) ms*=self.newscrollspeed; 2402 2403 self.prepareTransition(ms,true); 2404 2405 if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm); 2406 2407 if (ms>0) { 2408 2409 if (!self.scrollrunning&&self.onscrollstart) { 2410 var info = {"type":"scrollstart","current":{"x":lft,"y":top},"request":{"x":x,"y":y},"end":{"x":self.newscrollx,"y":self.newscrolly},"speed":ms}; 2411 self.onscrollstart.call(self,info); 2412 } 2413 2414 if (cap.transitionend) { 2415 if (!self.scrollendtrapped) { 2416 self.scrollendtrapped = true; 2417 self.bind(self.doc,cap.transitionend,self.onScrollEnd,false); //I have got to do something usefull!! 2418 } 2419 } else { 2420 if (self.scrollendtrapped) clearTimeout(self.scrollendtrapped); 2421 self.scrollendtrapped = setTimeout(self.onScrollEnd,ms); // simulate transitionend event 2422 } 2423 2424 var py = top; 2425 var px = lft; 2426 self.timerscroll = { 2427 bz: new BezierClass(py,self.newscrolly,ms,0,0,0.58,1), 2428 bh: new BezierClass(px,self.newscrollx,ms,0,0,0.58,1) 2429 }; 2430 if (!self.cursorfreezed) self.timerscroll.tm=setInterval(function(){self.showCursor(self.getScrollTop(),self.getScrollLeft())},60); 2431 2432 } 2433 2434 self.synched("doScroll-set",function(){ 2435 self.timer = 0; 2436 if (self.scrollendtrapped) self.scrollrunning = true; 2437 self.setScrollTop(self.newscrolly); 2438 self.setScrollLeft(self.newscrollx); 2439 if (!self.scrollendtrapped) self.onScrollEnd(); 2440 }); 2441 2442 2443 },50); 2444 2445 }; 2446 2447 this.cancelScroll = function() { 2448 if (!self.scrollendtrapped) return true; 2449 var py = self.getScrollTop(); 2450 var px = self.getScrollLeft(); 2451 self.scrollrunning = false;
2452 if (!cap.transitionend) clearTimeout(cap.transitionend); 2453 self.scrollendtrapped = false; 2454 self._unbind(self.doc,cap.transitionend,self.onScrollEnd); 2455 self.prepareTransition(0); 2456 self.setScrollTop(py); // fire event onscroll 2457 if (self.railh) self.setScrollLeft(px); 2458 if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm); 2459 self.timerscroll = false; 2460 2461 self.cursorfreezed = false; 2462 2463 //self.noticeCursor(false,py,px); 2464 self.showCursor(py,px); 2465 return self; 2466 }; 2467 this.onScrollEnd = function() { 2468 if (self.scrollendtrapped) self._unbind(self.doc,cap.transitionend,self.onScrollEnd); 2469 self.scrollendtrapped = false; 2470 self.prepareTransition(0); 2471 if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm); 2472 self.timerscroll = false; 2473 var py = self.getScrollTop(); 2474 var px = self.getScrollLeft(); 2475 self.setScrollTop(py); // fire event onscroll 2476 if (self.railh) self.setScrollLeft(px); // fire event onscroll left 2477 2478 self.noticeCursor(false,py,px); 2479 2480 self.cursorfreezed = false; 2481 2482 if (py<0) py=0 2483 else if (py>self.page.maxh) py=self.page.maxh; 2484 if (px<0) px=0 2485 else if (px>self.page.maxw) px=self.page.maxw; 2486 if((py!=self.newscrolly)||(px!=self.newscrollx)) return self.doScrollPos(px,py,self.opt.snapbackspeed); 2487 2488 if (self.onscrollend&&self.scrollrunning) { 2489 var info = {"type":"scrollend","current":{"x":px,"y":py},"end":{"x":self.newscrollx,"y":self.newscrolly}}; 2490 self.onscrollend.call(self,info); 2491 } 2492 self.scrollrunning = false; 2493 2494 }; 2495 2496 } else { 2497 2498 this.doScrollLeft = function(x,spd) { //no-trans 2499 var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop(); 2500 self.doScrollPos(x,y,spd); 2501 } 2502 2503 this.doScrollTop = function(y,spd) { //no-trans 2504 var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft(); 2505 self.doScrollPos(x,y,spd); 2506 } 2507 2508 this.doScrollPos = function(x,y,spd) { //no-trans 2509 var y = ((typeof y == "undefined")||(y===false)) ? self.getScrollTop(true) : y; 2510 2511 if ((self.timer)&&(self.newscrolly==y)&&(self.newscrollx==x)) return true; 2512 2513 if (self.timer) clearAnimationFrame(self.timer); 2514 self.timer = 0; 2515 2516 var py = self.getScrollTop(); 2517 var px = self.getScrollLeft(); 2518 2519 if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll(); //inverted movement detection 2520 2521 self.newscrolly = y; 2522 self.newscrollx = x; 2523 2524 if (!self.bouncescroll||!self.rail.visibility) { 2525 if (self.newscrolly<0) { 2526 self.newscrolly = 0; 2527 } 2528 else if (self.newscrolly>self.page.maxh) { 2529 self.newscrolly = self.page.maxh; 2530 } 2531 } 2532 if (!self.bouncescroll||!self.railh.visibility) { 2533 if (self.newscrollx<0) { 2534 self.newscrollx = 0; 2535 } 2536 else if (self.newscrollx>self.page.maxw) { 2537 self.newscrollx = self.page.maxw; 2538 } 2539 } 2540 2541 self.dst = {}; 2542 self.dst.x = x-px; 2543 self.dst.y = y-py; 2544 self.dst.px = px; 2545 self.dst.py = py; 2546 2547 var dst = Math.round(Math.sqrt(Math.pow(self.dst.x,2)+Math.pow(self.dst.y,2))); 2548 2549 self.dst.ax = self.dst.x / dst; 2550 self.dst.ay = self.dst.y / dst; 2551 2552 var pa = 0; 2553 var pe = dst; 2554 2555 if (self.dst.x==0) { 2556 pa = py; 2557 pe = y; 2558 self.dst.ay = 1; 2559 self.dst.py = 0; 2560 } else if (self.dst.y==0) { 2561 pa = px; 2562 pe = x; 2563 self.dst.ax = 1; 2564 self.dst.px = 0; 2565 } 2566 2567 var ms = self.getTransitionSpeed(dst); 2568 if (spd&&spd<=1) ms*=spd; 2569 if (ms>0) { 2570 self.bzscroll = (self.bzscroll) ? self.bzscroll.update(pe,ms) : new BezierClass(pa,pe,ms,0,1,0,1); 2571 } else { 2572 self.bzscroll = false;
2573 } 2574 2575 if (self.timer) return; 2576 2577 if ((py==self.page.maxh&&y>=self.page.maxh)||(px==self.page.maxw&&x>=self.page.maxw)) self.checkContentSize(); 2578 2579 var sync = 1; 2580 2581 function scrolling() { 2582 if (self.cancelAnimationFrame) return true; 2583 2584 self.scrollrunning = true; 2585 2586 sync = 1-sync; 2587 if (sync) return (self.timer = setAnimationFrame(scrolling)||1); 2588 2589 var done = 0; 2590 2591 var sc = sy = self.getScrollTop(); 2592 if (self.dst.ay) { 2593 sc = (self.bzscroll) ? self.dst.py + (self.bzscroll.getNow()*self.dst.ay) : self.newscrolly; 2594 var dr=sc-sy; 2595 if ((dr<0&&sc<self.newscrolly)||(dr>0&&sc>self.newscrolly)) sc = self.newscrolly; 2596 self.setScrollTop(sc); 2597 if (sc == self.newscrolly) done=1; 2598 } else { 2599 done=1; 2600 } 2601 2602 var scx = sx = self.getScrollLeft(); 2603 if (self.dst.ax) { 2604 scx = (self.bzscroll) ? self.dst.px + (self.bzscroll.getNow()*self.dst.ax) : self.newscrollx; 2605 var dr=scx-sx; 2606 if ((dr<0&&scx<self.newscrollx)||(dr>0&&scx>self.newscrollx)) scx = self.newscrollx; 2607 self.setScrollLeft(scx); 2608 if (scx == self.newscrollx) done+=1; 2609 } else { 2610 done+=1; 2611 } 2612 2613 if (done==2) { 2614 self.timer = 0; 2615 self.cursorfreezed = false; 2616 self.bzscroll = false; 2617 self.scrollrunning = false; 2618 if (sc<0) sc=0; 2619 else if (sc>self.page.maxh) sc=self.page.maxh; 2620 if (scx<0) scx=0; 2621 else if (scx>self.page.maxw) scx=self.page.maxw; 2622 if ((scx!=self.newscrollx)||(sc!=self.newscrolly)) self.doScrollPos(scx,sc); 2623 else { 2624 if (self.onscrollend) { 2625 var info = {"type":"scrollend","current":{"x":sx,"y":sy},"end":{"x":self.newscrollx,"y":self.newscrolly}}; 2626 self.onscrollend.call(self,info); 2627 } 2628 } 2629 } else { 2630 self.timer = setAnimationFrame(scrolling)||1; 2631 } 2632 }; 2633 self.cancelAnimationFrame=false; 2634 self.timer = 1; 2635 2636 if (self.onscrollstart&&!self.scrollrunning) { 2637 var info = {"type":"scrollstart","current":{"x":px,"y":py},"request":{"x":x,"y":y},"end":{"x":self.newscrollx,"y":self.newscrolly},"speed":ms}; 2638 self.onscrollstart.call(self,info); 2639 } 2640 2641 scrolling(); 2642 2643 if ((py==self.page.maxh&&y>=py)||(px==self.page.maxw&&x>=px)) self.checkContentSize(); 2644 2645 self.noticeCursor(); 2646 }; 2647 2648 this.cancelScroll = function() { 2649 if (self.timer) clearAnimationFrame(self.timer); 2650 self.timer = 0; 2651 self.bzscroll = false; 2652 self.scrollrunning = false; 2653 return self; 2654 }; 2655 2656 } 2657 2658 this.doScrollBy = function(stp,relative) { 2659 var ny = 0; 2660 if (relative) { 2661 ny = Math.floor((self.scroll.y-stp)*self.scrollratio.y) 2662 } else { 2663 var sy = (self.timer) ? self.newscrolly : self.getScrollTop(true); 2664 ny = sy-stp; 2665 } 2666 if (self.bouncescroll) { 2667 var haf = Math.round(self.view.h/2); 2668 if (ny<-haf) ny=-haf 2669 else if (ny>(self.page.maxh+haf)) ny = (self.page.maxh+haf); 2670 } 2671 self.cursorfreezed = false; 2672 2673 py = self.getScrollTop(true); 2674 if (ny<0&&py<=0) return self.noticeCursor(); 2675 else if (ny>self.page.maxh&&py>=self.page.maxh) { 2676 self.checkContentSize(); 2677 return self.noticeCursor(); 2678 } 2679 2680 self.doScrollTop(ny); 2681 }; 2682 2683 this.doScrollLeftBy = function(stp,relative) { 2684 var nx = 0; 2685 if (relative) { 2686 nx = Math.floor((self.scroll.x-stp)*self.scrollratio.x) 2687 } else { 2688 var sx = (self.timer) ? self.newscrollx : self.getScrollLeft(true); 2689 nx = sx-stp; 2690 } 2691 if (self.bouncescroll) { 2692 var haf = Math.round(self.view.w/2); 2693 if (nx<-haf) nx=-haf 2694 else if (nx>(self.page.maxw+haf)) nx = (self.page.maxw+haf); 2695 } 2696 self.cursorfreezed = false; 2697 2698 px = self.getScrollLeft(true); 2699 if (nx<0&&px<=0) return self.noticeCursor(); 2700 else if (nx>self.page.maxw&&px>=self.page.maxw) return self.noticeCursor(); 2701 2702 self.doScrollLeft(nx); 2703 }; 2704 2705 this.doScrollTo = function(pos,relative) { 2706 var ny = (relative) ? Math.round(pos*self.scrollratio.y) : pos; 2707 if (ny<0) ny=0 2708 else if (ny>self.page.maxh) ny = self.page.maxh; 2709 self.cursorfreezed = false;
2710 self.doScrollTop(pos); 2711 }; 2712 2713 this.checkContentSize = function() { 2714 var pg = self.getContentSize(); 2715 if ((pg.h!=self.page.h)||(pg.w!=self.page.w)) self.resize(false,pg); 2716 }; 2717 2718 self.onscroll = function(e) { 2719 if (self.rail.drag) return; 2720 if (!self.cursorfreezed) { 2721 self.synched('scroll',function(){ 2722 self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y)); 2723 if (self.railh) self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x)); 2724 self.noticeCursor(); 2725 }); 2726 } 2727 }; 2728 self.bind(self.docscroll,"scroll",self.onscroll); 2729 2730 this.doZoomIn = function(e) { 2731 if (self.zoomactive) return; 2732 self.zoomactive = true; 2733 2734 self.zoomrestore = { 2735 style:{} 2736 }; 2737 var lst = ['position','top','left','zIndex','backgroundColor','marginTop','marginBottom','marginLeft','marginRight']; 2738 var win = self.win[0].style; 2739 for(var a in lst) { 2740 var pp = lst[a]; 2741 self.zoomrestore.style[pp] = (typeof win[pp] != "undefined") ? win[pp] : ''; 2742 } 2743 2744 self.zoomrestore.style.width = self.win.css('width'); 2745 self.zoomrestore.style.height = self.win.css('height'); 2746 2747 self.zoomrestore.padding = { 2748 w:self.win.outerWidth()-self.win.width(), 2749 h:self.win.outerHeight()-self.win.height() 2750 }; 2751 2752 if (cap.isios4) { 2753 self.zoomrestore.scrollTop = $(window).scrollTop(); 2754 $(window).scrollTop(0); 2755 } 2756 2757 self.win.css({ 2758 "position":(cap.isios4)?"absolute":"fixed", 2759 "top":0, 2760 "left":0, 2761 "z-index":globalmaxzindex+100, 2762 "margin":"0px" 2763 }); 2764 var bkg = self.win.css("backgroundColor"); 2765 if (bkg==""||/transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(bkg)) self.win.css("backgroundColor","#fff"); 2766 self.rail.css({"z-index":globalmaxzindex+101}); 2767 self.zoom.css({"z-index":globalmaxzindex+102}); 2768 self.zoom.css('backgroundPosition','0px -18px'); 2769 self.resizeZoom(); 2770 2771 if (self.onzoomin) self.onzoomin.call(self); 2772 2773 return self.cancelEvent(e); 2774 }; 2775 2776 this.doZoomOut = function(e) { 2777 if (!self.zoomactive) return; 2778 self.zoomactive = false; 2779 2780 self.win.css("margin",""); 2781 self.win.css(self.zoomrestore.style); 2782 2783 if (cap.isios4) { 2784 $(window).scrollTop(self.zoomrestore.scrollTop); 2785 } 2786 2787 self.rail.css({"z-index":self.zindex}); 2788 self.zoom.css({"z-index":self.zindex}); 2789 self.zoomrestore = false; 2790 self.zoom.css('backgroundPosition','0px 0px'); 2791 self.onResize(); 2792 2793 if (self.onzoomout) self.onzoomout.call(self); 2794 2795 return self.cancelEvent(e); 2796 }; 2797 2798 this.doZoom = function(e) { 2799 return (self.zoomactive) ? self.doZoomOut(e) : self.doZoomIn(e); 2800 }; 2801 2802 this.resizeZoom = function() { 2803 if (!self.zoomactive) return; 2804 2805 var py = self.getScrollTop(); //preserve scrolling position 2806 self.win.css({ 2807 width:$(window).width()-self.zoomrestore.padding.w+"px", 2808 height:$(window).height()-self.zoomrestore.padding.h+"px" 2809 }); 2810 self.onResize(); 2811 2812 self.setScrollTop(Math.min(self.page.maxh,py)); 2813 }; 2814 2815 this.init(); 2816 2817 $.nicescroll.push(this); 2818 2819 }; 2820 2821// Inspired by the work of Kin Blas 2822// http://webpro.host.adobe.com/people/jblas/momentum/includes/jquery.momentum.0.7.js 2823 2824 2825 var ScrollMomentumClass2D = function(nc) { 2826 var self = this; 2827 this.nc = nc; 2828 2829 this.lastx = 0; 2830 this.lasty = 0; 2831 this.speedx = 0; 2832 this.speedy = 0; 2833 this.lasttime = 0; 2834 this.steptime = 0; 2835 this.snapx = false; 2836 this.snapy = false; 2837 this.demulx = 0; 2838 this.demuly = 0; 2839 2840 this.lastscrollx = -1; 2841 this.lastscrolly = -1; 2842 2843 this.chkx = 0; 2844 this.chky = 0; 2845 2846 this.timer = 0; 2847 2848 this.time = function() { 2849 return +new Date();//beautifull hack 2850 }; 2851 2852 this.reset = function(px,py) { 2853 self.stop(); 2854 var now = self.time(); 2855 self.steptime = 0; 2856 self.lasttime = now; 2857 self.speedx = 0; 2858 self.speedy = 0; 2859 self.lastx = px; 2860 self.lasty = py; 2861 self.lastscrollx = -1; 2862 self.lastscrolly = -1; 2863 }; 2864 2865 this.update = function(px,py) { 2866 var now = self.time();
vendor: 1,674 bytes, lines 2867-2930
2867 self.steptime = now - self.lasttime; 2868 self.lasttime = now; 2869 var dy = py - self.lasty; 2870 var dx = px - self.lastx; 2871 var sy = self.nc.getScrollTop(); 2872 var sx = self.nc.getScrollLeft(); 2873 var newy = sy + dy; 2874 var newx = sx + dx; 2875 self.snapx = (newx<0)||(newx>self.nc.page.maxw); 2876 self.snapy = (newy<0)||(newy>self.nc.page.maxh); 2877 self.speedx = dx; 2878 self.speedy = dy; 2879 self.lastx = px; 2880 self.lasty = py; 2881 }; 2882 2883 this.stop = function() { 2884 self.nc.unsynched("domomentum2d"); 2885 if (self.timer) clearTimeout(self.timer); 2886 self.timer = 0; 2887 self.lastscrollx = -1; 2888 self.lastscrolly = -1; 2889 }; 2890 2891 this.doSnapy = function(nx,ny) { 2892 var snap = false; 2893 2894 if (ny<0) { 2895 ny=0; 2896 snap=true; 2897 } 2898 else if (ny>self.nc.page.maxh) { 2899 ny=self.nc.page.maxh; 2900 snap=true; 2901 } 2902 2903 if (nx<0) { 2904 nx=0; 2905 snap=true; 2906 } 2907 else if (nx>self.nc.page.maxw) { 2908 nx=self.nc.page.maxw; 2909 snap=true; 2910 } 2911 2912 if (snap) self.nc.doScrollPos(nx,ny,self.nc.opt.snapbackspeed); 2913 }; 2914 2915 this.doMomentum = function(gp) { 2916 var t = self.time(); 2917 var l = (gp) ? t+gp : self.lasttime; 2918 2919 var sl = self.nc.getScrollLeft(); 2920 var st = self.nc.getScrollTop(); 2921 2922 var pageh = self.nc.page.maxh; 2923 var pagew = self.nc.page.maxw; 2924 2925 self.speedx = (pagew>0) ? Math.min(60,self.speedx) : 0; 2926 self.speedy = (pageh>0) ? Math.min(60,self.speedy) : 0; 2927 2928 var chk = l && (t - l) <= 60; 2929 2930 if ((st<0)||(st>pageh)||(sl<0)||(sl>
2930pagew)) chk = false; 2931 2932 var sy = (self.speedy && chk) ? self.speedy : false; 2933 var sx = (self.speedx && chk) ? self.speedx : false; 2934 2935 if (sy||sx) { 2936 var tm = Math.max(16,self.steptime); //timeout granularity 2937 2938 if (tm>50) { // do smooth 2939 var xm = tm/50; 2940 self.speedx*=xm; 2941 self.speedy*=xm; 2942 tm = 50; 2943 } 2944 2945 self.demulxy = 0; 2946 2947 self.lastscrollx = self.nc.getScrollLeft(); 2948 self.chkx = self.lastscrollx; 2949 self.lastscrolly = self.nc.getScrollTop(); 2950 self.chky = self.lastscrolly; 2951 2952 var nx = self.lastscrollx; 2953 var ny = self.lastscrolly; 2954 2955 var onscroll = function(){ 2956 var df = ((self.time()-t)>600) ? 0.04 : 0.02; 2957 2958 if (self.speedx) { 2959 nx = Math.floor(self.lastscrollx - (self.speedx*(1-self.demulxy))); 2960 self.lastscrollx = nx; 2961 if ((nx<0)||(nx>pagew)) df=0.10; 2962 } 2963 2964 if (self.speedy) { 2965 ny = Math.floor(self.lastscrolly - (self.speedy*(1-self.demulxy))); 2966 self.lastscrolly = ny; 2967 if ((ny<0)||(ny>pageh)) df=0.10; 2968 } 2969 2970 self.demulxy = Math.min(1,self.demulxy+df); 2971 2972 self.nc.synched("domomentum2d",function(){ 2973 2974 if (self.speedx) { 2975 var scx = self.nc.getScrollLeft(); 2976 if (scx!=self.chkx) self.stop(); 2977 self.chkx=nx; 2978 self.nc.setScrollLeft(nx); 2979 } 2980 2981 if (self.speedy) { 2982 var scy = self.nc.getScrollTop(); 2983 if (scy!=self.chky) self.stop(); 2984 self.chky=ny; 2985 self.nc.setScrollTop(ny); 2986 } 2987 2988 if(!self.timer) { 2989 self.nc.hideCursor(); 2990 self.doSnapy(nx,ny); 2991 } 2992 2993 }); 2994 2995 if (self.demulxy<1) { 2996 self.timer = setTimeout(onscroll,tm); 2997 } else { 2998 self.stop(); 2999 self.nc.hideCursor(); 3000 self.doSnapy(nx,ny); 3001 } 3002 }; 3003 3004 onscroll(); 3005 3006 } else { 3007 self.doSnapy(self.nc.getScrollLeft(),self.nc.getScrollTop()); 3008 } 3009 3010 } 3011 3012 }; 3013 3014 3015// override jQuery scrollTop 3016 3017 var _scrollTop = jQuery.fn.scrollTop; // preserve original function 3018 3019 jQuery.cssHooks["pageYOffset"] = { 3020 get: function(elem,computed,extra) { 3021 var nice = $.data(elem,'__nicescroll')||false; 3022 return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(elem); 3023 }, 3024 set: function(elem,value) { 3025 var nice = $.data(elem,'__nicescroll')||false; 3026 (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call(elem,value); 3027 return this; 3028 } 3029 }; 3030 3031/* 3032 $.fx.step["scrollTop"] = function(fx){ 3033 $.cssHooks["scrollTop"].set( fx.elem, fx.now + fx.unit ); 3034 }; 3035*/ 3036 3037 jQuery.fn.scrollTop = function(value) { 3038 if (typeof value == "undefined") { 3039 var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false; 3040 return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(this); 3041 } else { 3042 return this.each(function() { 3043 var nice = $.data(this,'__nicescroll')||false; 3044 (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call($(this),value); 3045 }); 3046 } 3047 } 3048 3049// override jQuery scrollLeft 3050 3051 var _scrollLeft = jQuery.fn.scrollLeft; // preserve original function 3052 3053 $.cssHooks.pageXOffset = { 3054 get: function(elem,computed,extra) { 3055 var nice = $.data(elem,'__nicescroll')||false; 3056 return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(elem); 3057 }, 3058 set: function(elem,value) { 3059 var nice = $.data(elem,'__nicescroll')||false; 3060 (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call(elem,value); 3061 return this; 3062 } 3063 }; 3064 3065/* 3066 $.fx.step["scrollLeft"] = function(fx){ 3067 $.cssHooks["scrollLeft"].set( fx.elem, fx.now + fx.unit ); 3068 }; 3069*/ 3070 3071 jQuery.fn.scrollLeft = function(value) { 3072 if (typeof value == "undefined") { 3073 var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;
3074 return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(this); 3075 } else { 3076 return this.each(function() { 3077 var nice = $.data(this,'__nicescroll')||false; 3078 (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call($(this),value); 3079 }); 3080 } 3081 } 3082 3083 var NiceScrollArray = function(doms) { 3084 var self = this; 3085 this.length = 0; 3086 this.name = "nicescrollarray"; 3087 3088 this.each = function(fn) { 3089 for(var a=0,i=0;a<self.length;a++) fn.call(self[a],i++); 3090 return self; 3091 }; 3092 3093 this.push = function(nice) { 3094 self[self.length]=nice; 3095 self.length++; 3096 }; 3097 3098 this.eq = function(idx) { 3099 return self[idx]; 3100 }; 3101 3102 if (doms) { 3103 for(a=0;a<doms.length;a++) { 3104 var nice = $.data(doms[a],'__nicescroll')||false; 3105 if (nice) { 3106 this[this.length]=nice; 3107 this.length++; 3108 } 3109 }; 3110 } 3111 3112 return this; 3113 }; 3114 3115 function mplex(el,lst,fn) { 3116 for(var a=0;a<lst.length;a++) fn(el,lst[a]); 3117 }; 3118 mplex( 3119 NiceScrollArray.prototype, 3120 ['show','hide','toggle','onResize','resize','remove','stop','doScrollPos'], 3121 function(e,n) { 3122 e[n] = function(){ 3123 var args = arguments; 3124 return this.each(function(){ 3125 this[n].apply(this,args); 3126 }); 3127 }; 3128 } 3129 ); 3130 3131 jQuery.fn.getNiceScroll = function(index) { 3132 if (typeof index == "undefined") { 3133 return new NiceScrollArray(this); 3134 } else { 3135 var nice = this[index]&&$.data(this[index],'__nicescroll')||false; 3136 return nice; 3137 } 3138 }; 3139 3140 jQuery.extend(jQuery.expr[':'], { 3141 nicescroll: function(a) { 3142 return ($.data(a,'__nicescroll'))?true:false; 3143 } 3144 }); 3145 3146 $.fn.niceScroll = function(wrapper,opt) { 3147 if (typeof opt=="undefined") { 3148 if ((typeof wrapper=="object")&&!("jquery" in wrapper)) { 3149 opt = wrapper; 3150 wrapper = false; 3151 } 3152 } 3153 var ret = new NiceScrollArray(); 3154 if (typeof opt=="undefined") opt = {}; 3155 3156 if (wrapper||false) { 3157 opt.doc = $(wrapper); 3158 opt.win = $(this); 3159 } 3160 var docundef = !("doc" in opt); 3161 if (!docundef&&!("win" in opt)) opt.win = $(this); 3162 3163 this.each(function() { 3164 var nice = $(this).data('__nicescroll')||false; 3165 if (!nice) { 3166 opt.doc = (docundef) ? $(this) : opt.doc; 3167 nice = new NiceScrollClass(opt,$(this)); 3168 $(this).data('__nicescroll',nice); 3169 } 3170 ret.push(nice); 3171 }); 3172 return (ret.length==1) ? ret[0] : ret; 3173 }; 3174 3175 window.NiceScroll = { 3176 getjQuery:function(){return jQuery} 3177 }; 3178 3179 if (!$.nicescroll) { 3180 $.nicescroll = new NiceScrollArray(); 3181 $.nicescroll.options = _globaloptions; 3182 } 3183 3184})( jQuery ); 3185 ; 3186(function(e){"use strict";e.fn.lightGallery=function(t){var n={mode:"slide",useCSS:true,easing:"linear",speed:1e3,start:0,loop:false,auto:false,pause:4e3,escKey:true,rel:false,lang:{allPhotos:"All photos"},exThumbImage:false,thumbnail:true,caption:false,captionLink:false,desc:false,counter:false,controls:true,hideControlOnEnd:false,mobileSrc:false,mobileSrcMaxWidth:640,swipeThreshold:50,vimeoColor:"CCCCCC",videoAutoplay:true,videoMaxWidth:855,dynamic:false,dynamicEl:[],onOpen:function(){},onSlideBefore:function(){},onSlideAfter:function(){},onSlideNext:function(){},onSlidePrev:function(){},onBeforeClose:function(){},onCloseAfter:function(){}},r=e(this),i,s,o=false,u='<div id="lightGallery-outer"><div id="lightGallery-Gallery"><div id="lightGallery-slider"></div><a id="lightGallery-close" class="close"></a></div></div>',a=document.createTouch!==undefined||"ontouchstart"in window||"onmsgesturechange"in window||navigator.msMaxTouchPoints,f,l,c,h,p,d,v,m,g,y,b,w=false,E=false,S=false;var x=e.extend(true,{},n,t);var T={init:function(){r.each(function(){var t=e(this);if(x.dynamic==true){i=x.dynamicEl;s=x.start;v=s;N.init(s)}else{i=e(this).children();i.click(function(n){if(x.rel==true&&t.data("rel")){var r=t.data("rel");i=e('[data-rel="'+r+'"]').children()}else{i=t.children()}n.preventDefault();n.stopPropagation();s=i.index(this);v=s;N.init(s)})}})}};var N={init:function(){this.start();this.build()},start:function(){this.structure();this.getWidth();this.closeSlide()},build:function(){this.loadContent(s);this.addCaption();this.addDesc();this.counter();this.slideTo();this.buildThumbnail();this.keyPress();this.slide(s);this.touch();this.enableTouch();setTimeout(function(){f.addClass("opacity")},50)},structure:function(){e("body").append(u).addClass("lightGallery");l=e("#lightGallery-outer");f=e("#lightGallery-Gallery");c=f.find("#lightGallery-slider");var t="";if(x.dynamic==true){for(var n=0;n<x.dynamicEl.length;n++){t+='<div class="lightGallery-slide"></div>'}}else{i.each(function(){t+='<div class="lightGallery-slide"></div>'})}c.append(t);h=f.find(".lightGallery-slide")},closeSlide:function(){var t=this;e("#lightGallery-close").bind("click touchend",function(){t.destroy()})},getWidth:function(){var t=function(){y=e(window).width()};e(window).bind("resize.lightGallery",t())},doCss:function(){var e=function(){var e=["transition","MozTransition","WebkitTransition","OTransition","msTransition","KhtmlTransition"];var t=document.documentElement;for(var n=0;n<e.length;n++){if(e[n]in t.style){return true}}};if(x.useCSS&&e()){return true}return false},enableTouch:function(){var t=this;if(a){var n={},r={};e("body").on("touchstart.lightGallery",function(e){r=e.originalEvent.targetTouches[0];n.pageX=e.originalEvent.targetTouches[0].pageX;n.pageY=e.originalEvent.targetTouches[0].pageY});e("body").on("touchmove.lightGallery",function(e){var t=e.originalEvent;r=t.targetTouches[0];e.preventDefault()});e("body").on("touchend.lightGallery",function(e){var i=r.pageX-n.pageX,s=x.swipeThreshold;if(i>=s){t.prevSlide();clearInterval(b)}
3186else if(i<=-s){t.nextSlide();clearInterval(b)}})}},touch:function(){var t,n;var r=this;e(".lightGallery").bind("mousedown",function(e){e.stopPropagation();e.preventDefault();t=e.pageX});e(".lightGallery").bind("mouseup",function(e){e.stopPropagation();e.preventDefault();n=e.pageX;if(n-t>20){r.prevSlide()}else if(t-n>20){r.nextSlide()}})},isVideo:function(e){var t=e.match(/youtube\.com\/watch\?v=([a-zA-Z0-9\-_]+)/);var n=e.match(/vimeo\.com\/([0-9]*)/);if(t||n){return true}},loadVideo:function(e,t,n){var r=e.match(/watch\?v=([a-zA-Z0-9\-_]+)/);var i=e.match(/vimeo\.com\/([0-9]*)/);var s="";if(r){if(x.videoAutoplay===true&&t===true){t="?autoplay=1&rel=0&wmode=opaque"}else{t="?wmode=opaque"}s='<iframe id="video'+n+'" width="560" height="315" src="//www.youtube.com/embed/'+r[1]+t+'" frameborder="0" allowfullscreen></iframe>'}else if(i){if(x.videoAutoplay===true&&t===true){t="autoplay=1&"}else{t=""}s='<iframe id="video'+n+'" width="560" height="315" src="http://player.vimeo.com/video/'+i[1]+"?"+t+"byline=0&portrait=0&color="+x.vimeoColor+'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'}return'<div class="video_cont" style="max-width:'+x.videoMaxWidth+'px !important;"><div class="video">'+s+"</div></div>"},loadContent:function(t){var n=this;var r,s,o,u=i.length-t;var a;n.autoStart();if(x.mobileSrc===true&&y<=x.mobileSrcMaxWidth){if(x.dynamic==true){a=x.dynamicEl[t]["mobileSrc"]}else{a=i.eq(t).attr("data-responsive-src")}}else{if(x.dynamic==true){a=x.dynamicEl[t]["src"]}else{a=i.eq(t).attr("data-src")}}if(!n.isVideo(a)){h.eq(t).prepend('<img src="'+a+'" />');o=e("img")}else{h.eq(t).prepend(n.loadVideo(a,true,t));o=e("iframe");if(x.auto&&x.videoAutoplay===true){clearInterval(b)}}if(i.length>1){h.eq(t).find(o).on("load error",function(){for(r=0;r<=t-1;r++){var e;if(x.mobileSrc===true&&y<=x.mobileSrcMaxWidth){if(x.dynamic==true){e=x.dynamicEl[t-r-1
3186]["mobileSrc"]}else{e=i.eq(t-r-1).attr("data-responsive-src")}}else{if(x.dynamic==true){e=x.dynamicEl[t-r-1]["src"]}else{e=i.eq(t-r-1).attr("data-src")}}if(!n.isVideo(e)){h.eq(t-r-1).prepend('<img src="'+e+'" />')}else{h.eq(t-r-1).prepend(n.loadVideo(e,false,t-r-1))}}for(s=1;s<u;s++){var e;if(x.mobileSrc===true&&y<=x.mobileSrcMaxWidth){if(x.dynamic==true){e=x.dynamicEl[t+s]["mobileSrc"]}else{e=i.eq(t+s).attr("data-responsive-src")}}else{if(x.dynamic==true){e=x.dynamicEl[t+s]["src"]}else{e=i.eq(t+s).attr("data-src")}}if(!n.isVideo(e)){h.eq(t+s).prepend('<img src="'+e+'" />')}else{h.eq(t+s).prepend(n.loadVideo(e,false,t+s))}}})}},addCaption:function(){if(x.caption===true){var e,t=false;for(e=0;e<i.length;e++){if(x.dynamic==true){t=x.dynamicEl[e]["caption"]}else{t=i.eq(e).attr("data-title")}if(typeof t=="undefined"||t==null){t="image "+e+""}if(x.captionLink===true){var n=i.eq(e).attr("data-link");if(typeof n!=="undefined"&&n!==""){n=n}else{n="#"}h.eq(e).append('<div class="info group"><a href="'+n+'" class="title">'+t+"</a></div>")}else{h.eq(e).append('<div class="info group"><span class="title">'+t+"</span></div>")}}}},addDesc:function(){if(x.desc===true){var e,t=false;for(e=0;e<i.length;e++){if(x.dynamic==true){t=x.dynamicEl[e]["desc"]}else{t=i.eq(e).attr("data-desc");}if(typeof t=="undefined"||t==null){t="image "+e+""}if(x.caption===false){h.eq(e).append('<div class="info group"><span class="desc">'+t+"</span></div>")}else{h.eq(e).find(".info").append('<span class="desc">'+t+"</span>")}}}},counter:function(){if(x.counter===true){var t=e("#lightGallery-slider > div").length;f.append("<div id='lightGallery_counter'><span id='lightGallery_counter_current'></span> / <span id='lightGallery_counter_all'>"+t+"</span></div>")}},buildThumbnail:function(){if(x.thumbnail===true&&i.length>1){var t=this;f.append('<div class="thumb_cont"><div class="thumb_info"><span class="close ib"><i class="bUi-iCn-rMv-16" aria-hidden="true"></i></span></div><div class="thumb_inner"></div></div>');m=f.find(".thumb_cont");p.after('<a class="cLthumb"></a>');f.find(".cLthumb").bind("click touchend",function(){m.addClass("open");if(t.doCss()&&x.mode==="slide"){h.eq(s).prevAll().removeClass("nextSlide").addClass("prevSlide");h.eq(s).nextAll().removeClass("prevSlide").addClass("nextSlide")}});f.find(".close").bind("click touchend",function(){m.removeClass("open")});var n=f.find(".thumb_info");var r=f.find(".thumb_inner");var o="";var u;if(x.dynamic==true){for(var a=0;a<x.dynamicEl.length;a++){u=x.dynamicEl[a]["thumb"];o+='<div class="thumb"><img src="'+u+'" /></div>'}}else{i.each(function(){if(x.exThumbImage===false||typeof e(this).attr(x.exThumbImage)=="undefined"||e(this).attr(x.exThumbImage)==null){u=e(this).find("img").attr("src")}else{u=e(this).attr(x.exThumbImage)}o+='<div class="thumb"><img src="'+u+'" /></div>'})}r.append(o);g=r.find(".thumb");g.bind("click touchend",function(){w=true;var n=e(this).index();g.removeClass("active");e(this).addClass("active");t.slide(n);clearInterval(b)});n.prepend('<span class="ib count">'+x.lang.allPhotos+" ("+g.length+")</span>")}},slideTo:function(){var e=this;if(x.controls===true&&i.length>1){f.append('<div id="lightGallery-action"><a id="lightGallery-prev"></a><a id="lightGallery-next"></a></div>');p=f.find("#lightGallery-prev");d=f.find("#lightGallery-next");p.bind("click",function(){e.prevSlide();clearInterval(b)});d.bind("click",function(){e.nextSlide();clearInterval(b)})}},autoStart:function(){var e=this;if(x.auto===true){b=setInterval(function(){if(s+1<i.length){s=s}else{s=-1}s++;e.slide(s)},x.pause)}},keyPress:function(){var t=this;e(window).bind("keyup.lightGallery",function(e){e.preventDefault();e.stopPropagation();if(e.keyCode===37){t.prevSlide();clearInterval(b)}if(e.keyCode===38&&x.thumbnail===true){if(!m.hasClass("open")){if(t.doCss()&&x.mode==="slide"){h.eq(s).prevAll().removeClass("nextSlide").addClass("prevSlide");h.eq(s).nextAll().removeClass("prevSlide").addClass("nextSlide")}m.addClass("open")}}else if(e.keyCode===39){t.nextSlide();clearInterval(b)}if(e.keyCode===40&&x.thumbnail===true){if(m.hasClass("open")){m.removeClass("open")}}else if(x.escKey===true&&e.keyCode===27){if(x.thumbnail===true&&m.hasClass("open")){m.removeClass("open")}else{t.destroy()}}})},nextSlide:function(){var e=this;s=h.index(h.eq(v));if(s+1<i.length){s++;e.slide(s)}else{if(x.loop){s=0;e.slide(s)}else if(x.mode==="fade"&&x.thumbnail===true&&i.length>1){m.addClass("open")}}x.onSlideNext.call(this)},prevSlide:function(){var e=this;s=h.index(h.eq(v));if(s>0){s--;e.slide(s)}else{if(x.loop){s=i.length-1;e.slide(s)}else if(x.mode==="fade"&&x.thumbnail===true&&i.length>1){m.addClass("open")}}x.onSlidePrev.call(this)},slide:function(t){if(o){if(!c.hasClass("on")){c.addClass("on")}if(this.doCss()&&x.speed!==""){if(!c.hasClass("speed")){c.addClass("speed")}if(S===false){c.css("transition-duration",x.speed+"ms");S=true}}if(this.doCss()&&x.easing!==""){if(!c.hasClass("timing")){c.addClass("timing")}if(E===false){c.css("transition-timing-function",x.easing);E=true}}x.onSlideBefore.call(this)}if(x.mode==="slide"){if(this.doCss()&&!c.hasClass("slide")){c.addClass("slide")}if(!this.doCss()&&!o){c.css({left:-t*100+"%"})}else if(!this.doCss()&&o){c.animate({left:-t*100+"%"},x.speed,x.easing)}}else if(x.mode==="fade"){if(this.doCss()&&!c.hasClass("fadeM")){c.addClass("fadeM")}else if(!this.doCss()&&!c.hasClass("animate")){c.addClass("animate")}if(!this.doCss()&&!o){h.fadeOut(100);h.eq(t).fadeIn(100)}else if(!this.doCss()&&o){h.eq(v).fadeOut(x.speed,x.easing);h.eq(t).fadeIn(x.speed,x.easing)}}if(t+1>=i.length&&x.auto&&x.loop===false){clearInterval(b)}
3186h.eq(v).removeClass("current");h.eq(t).addClass("current");if(this.doCss()&&x.mode==="slide"){if(w===false){e(".prevSlide").removeClass("prevSlide");e(".nextSlide").removeClass("nextSlide");h.eq(t-1).addClass("prevSlide");h.eq(t+1).addClass("nextSlide")}else{h.eq(t).prevAll().removeClass("nextSlide").addClass("prevSlide");h.eq(t).nextAll().removeClass("prevSlide").addClass("nextSlide")}}if(x.thumbnail===true&&i.length>1){g.removeClass("active");g.eq(t).addClass("active")}if(x.controls&&x.hideControlOnEnd&&x.loop===false){if(t===0){p.addClass("disabled")}else if(t===i.length-1){d.addClass("disabled")}else{p.add(d).removeClass("disabled")}}v=t;o===false?x.onOpen.call(this):x.onSlideAfter.call(this);o=true;w=false;if(x.counter){e("#lightGallery_counter_current").text(t+1)}},destroy:function(){x.onBeforeClose.call(this);o=false;E=false;S=false;w=false;clearInterval(b);e(".lightGallery").off("mousedown mouseup");e("body").off("touchstart.lightGallery touchmove.lightGallery touchend.lightGallery");e(window).off("resize.lightGallery keyup.lightGallery");f.addClass("fadeM");setTimeout(function(){l.remove();e("body").removeClass("lightGallery")},500);x.onCloseAfter.call(this)}};T.init();return this}})(jQuery); 3187/* 3188 * Thickbox 3.1 - One Box To Rule Them All. 3189 * By Cody Lindley (http://www.codylindley.com) 3190 * Copyright (c) 2007 cody lindley 3191 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php 3192*/ 3193 3194if ( typeof tb_pathToImage != 'string' ) { 3195 var tb_pathToImage = thickboxL10n.loadingAnimation; 3196} 3197 3198/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ 3199 3200//on page load call tb_init 3201jQuery(document).ready(function(){ 3202 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox 3203 imgLoader = new Image();// preload image 3204 imgLoader.src = tb_pathToImage; 3205}); 3206 3207/* 3208 * Add thickbox to href & area elements that have a class of .thickbox. 3209 * Remove the loading indicator when content in an iframe has loaded. 3210 */ 3211function tb_init(domChunk){ 3212 jQuery( 'body' ) 3213 .on( 'click', domChunk, tb_click ) 3214 .on( 'thickbox:iframe:loaded', function() { 3215 jQuery( '#TB_window' ).removeClass( 'thickbox-loading' ); 3216 }); 3217} 3218 3219function tb_click(){ 3220 var t = this.title || this.name || null; 3221 var a = this.href || this.alt; 3222 var g = this.rel || false; 3223 tb_show(t,a,g); 3224 this.blur(); 3225 return false; 3226} 3227 3228function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link 3229 3230 var $closeBtn; 3231 3232 try { 3233 if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 3234 jQuery("body","html").css({height: "100%", width: "100%"}); 3235 jQuery("html").css("overflow","hidden"); 3236 if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6 3237 jQuery("body").append("<iframe id='TB_HideSelect'>"+thickboxL10n.noiframes+"</iframe><div id='TB_overlay'></div><div id='TB_window' class='thickbox-loading'></div>"); 3238 jQuery("#TB_overlay").on( 'click', tb_remove ); 3239 } 3240 }else{//all others 3241 if(document.getElementById("TB_overlay") === null){ 3242 jQuery("body").append("<div id='TB_overlay'></div><div id='TB_window' class='thickbox-loading'></div>"); 3243 jQuery("#TB_overlay").on( 'click', tb_remove ); 3244 jQuery( 'body' ).addClass( 'modal-open' ); 3245 } 3246 } 3247 3248 if(tb_detectMacXFF()){ 3249 jQuery("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash 3250 }else{ 3251 jQuery("#TB_overlay").addClass("TB_overlayBG");//use background and opacity 3252 } 3253 3254 if(caption===null){caption="";} 3255 jQuery("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' width='208' /></div>");//add loader to the page 3256 jQuery('#TB_load').show();//show loader 3257 3258 var baseURL; 3259 if(url.indexOf("?")!==-1){ //ff there is a query string involved 3260 baseURL = url.substr(0, url.indexOf("?")); 3261 }else{ 3262 baseURL = url; 3263 } 3264 3265 var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$|\.webp$|\.avif$/; 3266 var urlType = baseURL.toLowerCase().match(urlString); 3267 3268 if(urlType == '.jpg' || 3269 urlType == '.jpeg' || 3270 urlType == '.png' || 3271 urlType == '.gif' || 3272 urlType == '.bmp' || 3273 urlType == '.webp' || 3274 urlType == '.avif' 3275 ){//code to show images 3276 3277 TB_PrevCaption = ""; 3278 TB_PrevURL = ""; 3279 TB_PrevHTML = ""; 3280 TB_NextCaption = ""; 3281 TB_NextURL = ""; 3282 TB_NextHTML = ""; 3283 TB_imageCount = ""; 3284 TB_FoundURL = false;
3285 if(imageGroup){ 3286 TB_TempArray = jQuery("a[rel="+imageGroup+"]").get(); 3287 for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { 3288 var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); 3289 if (!(TB_TempArray[TB_Counter].href == url)) { 3290 if (TB_FoundURL) { 3291 TB_NextCaption = TB_TempArray[TB_Counter].title; 3292 TB_NextURL = TB_TempArray[TB_Counter].href; 3293 TB_NextHTML = "<span id='TB_next'> <a href='#'>"+thickboxL10n.next+"</a></span>"; 3294 } else { 3295 TB_PrevCaption = TB_TempArray[TB_Counter].title; 3296 TB_PrevURL = TB_TempArray[TB_Counter].href; 3297 TB_PrevHTML = "<span id='TB_prev'> <a href='#'>"+thickboxL10n.prev+"</a></span>"; 3298 } 3299 } else { 3300 TB_FoundURL = true; 3301 TB_imageCount = thickboxL10n.image + ' ' + (TB_Counter + 1) + ' ' + thickboxL10n.of + ' ' + (TB_TempArray.length); 3302 } 3303 } 3304 } 3305 3306 imgPreloader = new Image(); 3307 imgPreloader.onload = function(){ 3308 imgPreloader.onload = null; 3309 3310 // Resizing large images - original by Christian Montoya edited by me. 3311 var pagesize = tb_getPageSize(); 3312 var x = pagesize[0] - 150; 3313 var y = pagesize[1] - 150; 3314 var imageWidth = imgPreloader.width; 3315 var imageHeight = imgPreloader.height; 3316 if (imageWidth > x) { 3317 imageHeight = imageHeight * (x / imageWidth); 3318 imageWidth = x; 3319 if (imageHeight > y) { 3320 imageWidth = imageWidth * (y / imageHeight); 3321 imageHeight = y; 3322 } 3323 } else if (imageHeight > y) { 3324 imageWidth = imageWidth * (y / imageHeight); 3325 imageHeight = y; 3326 if (imageWidth > x) { 3327 imageHeight = imageHeight * (x / imageWidth); 3328 imageWidth = x; 3329 } 3330 } 3331 // End Resizing 3332 3333 TB_WIDTH = imageWidth + 30; 3334 TB_HEIGHT = imageHeight + 60; 3335 jQuery("#TB_window").append("<a href='' id='TB_ImageOff'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><button type='button' id='TB_closeWindowButton'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><span class='tb-close-icon' aria-hidden='true'></span></button></div>"); 3336 3337 jQuery("#TB_closeWindowButton").on( 'click', tb_remove ); 3338 3339 if (!(TB_PrevHTML === "")) { 3340 function goPrev(){ 3341 if(jQuery(document).off("click",goPrev)){jQuery(document).off("click",goPrev);} 3342 jQuery("#TB_window").remove(); 3343 jQuery("body").append("<div id='TB_window'></div>"); 3344 tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); 3345 return false; 3346 } 3347 jQuery("#TB_prev").on( 'click', goPrev ); 3348 } 3349 3350 if (!(TB_NextHTML === "")) { 3351 function goNext(){ 3352 jQuery("#TB_window").remove(); 3353 jQuery("body").append("<div id='TB_window'></div>"); 3354 tb_show(TB_NextCaption, TB_NextURL, imageGroup); 3355 return false; 3356 } 3357 jQuery("#TB_next").on( 'click', goNext ); 3358 3359 } 3360 3361 jQuery(document).on('keydown.thickbox', function(e){ 3362 if ( e.which == 27 ){ // close 3363 tb_remove(); 3364 3365 } else if ( e.which == 190 ){ // display previous image 3366 if(!(TB_NextHTML == "")){ 3367 jQuery(document).off('thickbox'); 3368 goNext(); 3369 } 3370 } else if ( e.which == 188 ){ // display next image 3371 if(!(TB_PrevHTML == "")){ 3372 jQuery(document).off('thickbox'); 3373 goPrev(); 3374 } 3375 } 3376 return false; 3377 }); 3378 3379 tb_position(); 3380 jQuery("#TB_load").remove(); 3381 jQuery("#TB_ImageOff").on( 'click', tb_remove ); 3382 jQuery("#TB_window").css({'visibility':'visible'}); //for safari using css instead of show 3383 }; 3384 3385 imgPreloader.src = url; 3386 }else{//code to show html 3387 3388 var queryString = url.replace(/^[^\?]+\??/,''); 3389 var params = tb_parseQuery( queryString ); 3390 3391 TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no parameters were added to URL 3392 TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no parameters were added to URL 3393 ajaxContentW = TB_WIDTH - 30; 3394 ajaxContentH = TB_HEIGHT - 45; 3395 3396 if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window 3397 urlNoQuery = url.split('TB_'); 3398 jQuery("#TB_iframeContent").remove(); 3399 if(params['modal'] != "true"){//iframe no modal 3400 jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><button type='button' id='TB_closeWindowButton'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><span class='tb-close-icon' aria-hidden='true'></span></button></div></div><iframe frameborder='0' hspace='0' allowtransparency='true' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' >"+thickboxL10n.noiframes+"</iframe>"); 3401 }else{//iframe modal 3402 jQuery("#TB_overlay").off(); 3403 jQuery("#TB_window").append("<iframe frameborder='0' hspace='0' allowtransparency='true' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'>"+thickboxL10n.noiframes+"</iframe>"); 3404 } 3405 }else{// not an iframe, ajax 3406 if(jQuery("#TB_window").css("visibility") != "visible"){ 3407 if(params['modal'] != "true"){//ajax no modal 3408 jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><button type='button' id='TB_closeWindowButton'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><span class='tb-close-icon' aria-hidden='true'></span></button></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>"); 3409 }else{//ajax modal 3410 jQuery("#TB_overlay").off(); 3411 jQuery("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>"); 3412 } 3413 }else{//this means the window is already up, we are just loading new content via ajax 3414 jQuery("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; 3415 jQuery("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; 3416 jQuery("#TB_ajaxContent")[0].scrollTop = 0; 3417 jQuery("#TB_ajaxWindowTitle").html(caption); 3418 } 3419 } 3420 3421 jQuery("#TB_closeWindowButton").on( 'click', tb_remove ); 3422 3423 if(url.indexOf('TB_inline') != -1){ 3424 jQuery("#TB_ajaxContent").append(jQuery('#' + params['inlineId']).children()); 3425 jQuery("#TB_window").on('tb_unload', function () { 3426 jQuery('#' + params['inlineId']).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished 3427 }); 3428 tb_position(); 3429 jQuery("#TB_load").remove(); 3430 jQuery("#TB_window").css({'visibility':'visible'}); 3431 }else if(url.indexOf('TB_iframe') != -1){ 3432 tb_position(); 3433 jQuery("#TB_load").remove(); 3434 jQuery("#TB_window").css({'visibility':'visible'}); 3435 }else{ 3436 var load_url = url; 3437 load_url += -1 === url.indexOf('?') ? '?' : '&'; 3438 jQuery("#TB_ajaxContent").load(load_url += "random=" + (new Date().getTime()),function(){//to do a post change this load method 3439 tb_position(); 3440 jQuery("#TB_load").remove(); 3441 tb_init("#TB_ajaxContent a.thickbox"); 3442 jQuery("#TB_window").css({'visibility':'visible'}); 3443 }); 3444 } 3445 3446 } 3447 3448 if(!params['modal']){ 3449 jQuery(document).on('keydown.thickbox', function(e){ 3450 if ( e.which == 27 ){ // close 3451 tb_remove(); 3452 return false;
3453 } 3454 }); 3455 } 3456 3457 $closeBtn = jQuery( '#TB_closeWindowButton' ); 3458 /* 3459 * If the native Close button icon is visible, move focus on the button 3460 * (e.g. in the Network Admin Themes screen). 3461 * In other admin screens is hidden and replaced by a different icon. 3462 */ 3463 if ( $closeBtn.find( '.tb-close-icon' ).is( ':visible' ) ) { 3464 $closeBtn.trigger( 'focus' ); 3465 } 3466 3467 } catch(e) { 3468 //nothing here 3469 } 3470} 3471 3472//helper functions below 3473function tb_showIframe(){ 3474 jQuery("#TB_load").remove(); 3475 jQuery("#TB_window").css({'visibility':'visible'}).trigger( 'thickbox:iframe:loaded' ); 3476} 3477 3478function tb_remove() { 3479 jQuery("#TB_imageOff").off("click"); 3480 jQuery("#TB_closeWindowButton").off("click"); 3481 jQuery( '#TB_window' ).fadeOut( 'fast', function() { 3482 jQuery( '#TB_window, #TB_overlay, #TB_HideSelect' ).trigger( 'tb_unload' ).off().remove(); 3483 jQuery( 'body' ).trigger( 'thickbox:removed' ); 3484 }); 3485 jQuery( 'body' ).removeClass( 'modal-open' ); 3486 jQuery("#TB_load").remove(); 3487 if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 3488 jQuery("body","html").css({height: "auto", width: "auto"}); 3489 jQuery("html").css("overflow",""); 3490 } 3491 jQuery(document).off('.thickbox'); 3492 return false; 3493} 3494 3495function tb_position() { 3496var isIE6 = typeof document.body.style.maxHeight === "undefined"; 3497jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); 3498 if ( ! isIE6 ) { // take away IE6 3499 jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); 3500 } 3501} 3502 3503function tb_parseQuery ( query ) { 3504 var Params = {}; 3505 if ( ! query ) {return Params;}// return empty object 3506 var Pairs = query.split(/[;&]/); 3507 for ( var i = 0; i < Pairs.length; i++ ) { 3508 var KeyVal = Pairs[i].split('='); 3509 if ( ! KeyVal || KeyVal.length != 2 ) {continue;} 3510 var key = unescape( KeyVal[0] ); 3511 var val = unescape( KeyVal[1] ); 3512 val = val.replace(/\+/g, ' '); 3513 Params[key] = val; 3514 } 3515 return Params; 3516} 3517 3518function tb_getPageSize(){ 3519 var de = document.documentElement; 3520 var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; 3521 var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; 3522 arrayPageSize = [w,h]; 3523 return arrayPageSize; 3524} 3525 3526function tb_detectMacXFF() { 3527 var userAgent = navigator.userAgent.toLowerCase(); 3528 if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { 3529 return true; 3530 } 3531} 3532; 3533/** 3534 * Galleria - v1.6.1 2019-10-17 3535 * 3536 * 3537 * Copyright (c) 2010 - 2019 worse is better UG 3538 * Licensed under the MIT License. 3539 */ 3540 3541 3542!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&module.exports?module.exports=b(a,require("jquery")):a.Galleria=b(a,a.jQuery)}(window,function(a,b,c,d){var e=a.document,f=b(e),g=b(a),h=b,i=Array.prototype,j=!0,k=3e4,l=!1,m=navigator.userAgent.toLowerCase(),n=a.location.hash.replace(/#\//,""),o="file:"==a.location.protocol?"http:":a.location.protocol,p=Math,q=function(){},r=function(){return!1},s=!(a.screen.width>1279&&1==a.devicePixelRatio||a.screen.width>1e3&&a.innerWidth<.9*a.screen.width),t=function(){var a=3,b=e.createElement("div"),c=b.getElementsByTagName("i");do{b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e"}while(c[0]);return a>4?a:e.documentMode||d}(),u=function(){return{html:e.documentElement,body:e.body,head:e.getElementsByTagName("head")[0],title:e.title}},v=a.parent!==a.self,w="data ready thumbnail loadstart loadfinish image play pause progress fullscreen_enter fullscreen_exit idle_enter idle_exit rescale lightbox_open lightbox_close lightbox_image",x=function(){var a=[];return b.each(w.split(" "),function(b,c){a.push(c),/_/.test(c)&&a.push(c.replace(/_/g,""))}),a}(),y=function(a){var c;return"object"!=typeof a?a:(b.each(a,function(d,e){/^[a-z]+_/.test(d)&&(c="",b.each(d.split("_"),function(a,b){c+=a>0?b.substr(0,1).toUpperCase()+b.substr(1):b}),a[c]=e,delete a[d])}),a)},z=function(a){return b.inArray(a,x)>-1?c[a.toUpperCase()]:a},A={youtube:{reg:/https?:\/\/(?:[a-zA_Z]{2,3}.)?(?:youtube\.com\/watch\?)((?:[\w\d\-\_\=]+&(?:amp;)?)*v(?:<[A-Z]+>)?=([0-9a-zA-Z\-\_]+))/i,embed:function(){return o+"//www.youtube.com/embed/"+this.id},get_thumb:function(a){return o+"//img.youtube.com/vi/"+this.id+"/default.jpg"},get_image:function(a){return o+"//img.youtube.com/vi/"+this.id+"/maxresdefault.jpg"}},vimeo:{reg:/https?:\/\/(?:www\.)?(vimeo\.com)\/(?:hd#)?([0-9]+)/i,embed:function(){return o+"//player.vimeo.com/video/"+this.id},getUrl:function(){return o+"//vimeo.com/api/v2/video/"+this.id+".json?callback=?"},get_thumb:function(a){return a[0].thumbnail_medium},get_image:function(a){return a[0].thumbnail_large}},dailymotion:{reg:/https?:\/\/(?:www\.)?(dailymotion\.com)\/video\/([^_]+)/,embed:function(){return o+"//www.dailymotion.com/embed/video/"+this.id},getUrl:function(){return"https://api.dailymotion.com/video/"+this.id+"?fields=thumbnail_240_url,thumbnail_720_url&callback=?"},get_thumb:function(a){return a.thumbnail_240_url},get_image:function(a){return a.thumbnail_720_url}},_inst:[]},B=function(c,d){for(var e=0;e<A._inst.length;e++)if(A._inst[e].id===d&&A._inst[e].type==c)return A._inst[e];this.type=c,this.id=d,this.readys=[],A._inst.push(this);var f=this;b.extend(this,A[c]),_videoThumbs=function(a){f.data=a,b.each(f.readys,function(a,b){b(f.data)}),f.readys=[]},this.hasOwnProperty("getUrl")?b.getJSON(this.getUrl(),_videoThumbs):a.setTimeout(_videoThumbs,400),this.getMedia=function(a,b,c){c=c||q;var d=this,e=function(c){b(d["get_"+a](c))};try{d.data?e(d.data):d.readys.push(e)}catch(a){c()}}},C=function(a){var b;for(var c in A)if((b=a&&A[c].reg&&a.match(A[c].reg))&&b.length)return{id:b[2],provider:c};return!1},D={support:function(){var a=u().html;return!v&&(a.requestFullscreen||a.msRequestFullscreen||a.mozRequestFullScreen||a.webkitRequestFullScreen)}(),callback:q,enter:function(a,b,c){this.instance=a,this.callback=b||q,c=c||u().html,c.requestFullscreen?c.requestFullscreen():c.msRequestFullscreen?c.msRequestFullscreen():c.mozRequestFullScreen?c.mozRequestFullScreen():c.webkitRequestFullScreen&&c.webkitRequestFullScreen()},exit:function(a){this.callback=a||q,e.exitFullscreen?e.exitFullscreen():e.msExitFullscreen?e.msExitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen&&e.webkitCancelFullScreen()},instance:null,listen:function(){if(this.support){var a=function(){if(D.instance){var a=D.instance._fullscreen;e.fullscreen||e.mozFullScreen||e.webkitIsFullScreen||e.msFullscreenElement&&null!==e.msFullscreenElement?a._enter(D.callback):a._exit(D.callback)}};e.addEventListener("fullscreenchange",a,!1),e.addEventListener("MSFullscreenChange",a,!1),e.addEventListener("mozfullscreenchange",a,!1),e.addEventListener("webkitfullscreenchange",a,!1)}}},E=[],F=[],G=!1,H=!1,I=[],J=[],K=function(a){J.push(a),b.each(I,function(b,c){c._options.theme!=a.name&&(c._initialized||c._options.theme)||(c.theme=a,c._init.call(c))})},L=function(){return{clearTimer:function(a){b.each(c.get(),function(){this.clearTimer(a)})},addTimer:function(a){b.each(c.get(),function(){this.addTimer(a)})},array:function(a){return i.slice.call(a,0)},create:function(a,b){b=b||"div";var c=e.createElement(b);return c.className=a,c},removeFromArray:function(a,c){return b.each(a,function(b,d){if(d==c)return a.splice(b,1),!1}),a},getScriptPath:function(a){a=a||b("script:last").attr("src");var c=a.split("/");return 1==c.length?"":(c.pop(),c.join("/")+"/")},animate:function(){var d,f,g,h,i,j,k,l=function(b){var c,d="transition WebkitTransition MozTransition OTransition".split(" ");if(a.opera)return!1;for(c=0;d[c];c++)if(void 0!==b[d[c]])return d[c];return!1}((e.body||e.documentElement).style),m={MozTransition:"transitionend",OTransition:"oTransitionEnd",WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[l],n={_default:[.25,.1,.25,1],galleria:[.645,.045,.355,1],galleriaIn:[.55,.085,.68,.53],galleriaOut:[.25,.46,.45,.94],ease:[.25,0,.25,1],linear:[.25,.25,.75,.75],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]},o=function(a,c,d){var e={};d=d||"transition",b.each("webkit moz ms o".split(" "),function(){e["-"+this+"-"+d]=c}),a.css(e)}
3542,p=function(a){o(a,"none","transition"),c.WEBKIT&&c.TOUCH&&(o(a,"translate3d(0,0,0)","transform"),a.data("revert")&&(a.css(a.data("revert")),a.data("revert",null)))};return function(e,r,s){return s=b.extend({duration:400,complete:q,stop:!1},s),e=b(e),s.duration?l?(s.stop&&(e.off(m),p(e)),d=!1,b.each(r,function(a,b){k=e.css(a),L.parseValue(k)!=L.parseValue(b)&&(d=!0),e.css(a,k)}),d?(f=[],g=s.easing in n?n[s.easing]:n._default,h=" "+s.duration+"ms cubic-bezier("+g.join(",")+")",void a.setTimeout(function(a,d,e,g){return function(){a.one(d,function(a){return function(){p(a),s.complete.call(a[0])}}(a)),c.WEBKIT&&c.TOUCH&&(i={},j=[0,0,0],b.each(["left","top"],function(b,c){c in e&&(j[b]=L.parseValue(e[c])-L.parseValue(a.css(c))+"px",i[c]=e[c],delete e[c])}),(j[0]||j[1])&&(a.data("revert",i),f.push("-webkit-transform"+g),o(a,"translate3d("+j.join(",")+")","transform"))),b.each(e,function(a,b){f.push(a+g)}),o(a,f.join(",")),a.css(e)}}(e,m,r,h),2)):void a.setTimeout(function(){s.complete.call(e[0])},s.duration)):void e.animate(r,s):(e.css(r),void s.complete.call(e[0]))}}(),removeAlpha:function(a){if(a instanceof h&&(a=a[0]),t<9&&a){var b=a.style,c=a.currentStyle,d=c&&c.filter||b.filter||"";/alpha/.test(d)&&(b.filter=d.replace(/alpha\([^)]*\)/i,""))}},forceStyles:function(a,c){a=b(a),a.attr("style")&&a.data("styles",a.attr("style")).removeAttr("style"),a.css(c)},revertStyles:function(){b.each(L.array(arguments),function(a,c){c=b(c),c.removeAttr("style"),c.attr("style",""),c.data("styles")&&c.attr("style",c.data("styles")).data("styles",null)})},moveOut:function(a){L.forceStyles(a,{position:"absolute",left:-1e4})},moveIn:function(){L.revertStyles.apply(L,L.array(arguments))},hide:function(a,c,d){d=d||q;var e=b(a);a=e[0],e.data("opacity")||e.data("opacity",e.css("opacity"));var f={opacity:0}
3542;if(c){var g=t<9&&a?function(){L.removeAlpha(a),a.style.visibility="hidden",d.call(a)}:d;L.animate(a,f,{duration:c,complete:g,stop:!0})}else t<9&&a?(L.removeAlpha(a),a.style.visibility="hidden"):e.css(f)},show:function(a,c,d){d=d||q;var e=b(a);a=e[0];var f=parseFloat(e.data("opacity"))||1,g={opacity:f};if(c){t<9&&(e.css("opacity",0),a.style.visibility="visible");var h=t<9&&a?function(){1==g.opacity&&L.removeAlpha(a),d.call(a)}:d;L.animate(a,g,{duration:c,complete:h,stop:!0})}else t<9&&1==g.opacity&&a?(L.removeAlpha(a),a.style.visibility="visible"):e.css(g)},wait:function(d){c._waiters=c._waiters||[],d=b.extend({until:r,success:q,error:function(){c.raise("Could not complete wait function.")},timeout:3e3},d);var e,f,g,h=L.timestamp(),i=function(){return f=L.timestamp(),e=f-h,L.removeFromArray(c._waiters,g),d.until(e)?(d.success(),!1):"number"==typeof d.timeout&&f>=h+d.timeout?(d.error(),!1):void c._waiters.push(g=a.setTimeout(i,10))};c._waiters.push(g=a.setTimeout(i,10))},toggleQuality:function(a,b){7!==t&&8!==t||!a||"IMG"!=a.nodeName.toUpperCase()||(void 0===b&&(b="nearest-neighbor"===a.style.msInterpolationMode),a.style.msInterpolationMode=b?"bicubic":"nearest-neighbor")},insertStyleTag:function(a,c){if(!c||!b("#"+c).length){var d=e.createElement("style");if(c&&(d.id=c),u().head.appendChild(d),d.styleSheet)d.styleSheet.cssText=a;else{var f=e.createTextNode(a);d.appendChild(f)}}},loadScript:function(a,c){var d=!1,e=b("<script>").attr({src:a,async:!0}).get(0);e.onload=e.onreadystatechange=function(){d||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(d=!0,e.onload=e.onreadystatechange=null,"function"==typeof c&&c.call(this,this))},u().head.appendChild(e)},parseValue:function(a){if("number"==typeof a)return a;if("string"==typeof a){var b=a.match(/\-?\d|\./g);return b&&b.constructor===Array?1*b.join(""):0}return 0},timestamp:function(){return(new Date).getTime()},loadCSS:function(a,f,g){var h,i;if(b("link[rel=stylesheet]").each(function(){if(new RegExp(a).test(this.href))return h=this,!1}),"function"==typeof f&&(g=f,f=d),g=g||q,h)return g.call(h,h),h;if(i=e.styleSheets.length,b("#"+f).length)b("#"+f).attr("href",a),i--;else{h=b("<link>").attr({rel:"stylesheet",href:a,id:f}).get(0);var j=b('link[rel="stylesheet"], style');if(j.length?j.get(0).parentNode.insertBefore(h,j[0]):u().head.appendChild(h),t&&i>=31)return void c.raise("You have reached the browser stylesheet limit (31)",!0)}if("function"==typeof g){var k=b("<s>").attr("id","galleria-loader").hide().appendTo(u().body);L.wait({until:function(){return k.height()>0},success:function(){k.remove(),g.call(h,h)},error:function(){k.remove(),c.raise("Theme CSS could not load after 20 sec. "+(c.QUIRK?"Your browser is in Quirks Mode, please add a correct doctype.":"Please download the latest theme."),!0)},timeout:5e3})}return h}}}(),M=function(a){return L.insertStyleTag(".galleria-videoicon{width:60px;height:60px;position:absolute;top:50%;left:50%;z-index:1;margin:-30px 0 0 -30px;cursor:pointer;background:#000;background:rgba(0,0,0,.8);border-radius:3px;-webkit-transition:all 150ms}.galleria-videoicon i{width:0px;height:0px;border-style:solid;border-width:10px 0 10px 16px;display:block;border-color:transparent transparent transparent #ffffff;margin:20px 0 0 22px}.galleria-image:hover .galleria-videoicon{background:#000}","galleria-videoicon"),b(L.create("galleria-videoicon")).html("<i></i>").appendTo(a).click(function(){b(this).siblings("img").mouseup()})},N=function(){var a=function(a,c,d,e){var f=this.getOptions("easing"),g=this.getStageWidth(),h={left:g*(a.rewind?-1:1)},i={left:0};d?(h.opacity=0,i.opacity=1):h.opacity=1,b(a.next).css(h),L.animate(a.next,i,{duration:a.speed,complete:function(a){return function(){c(),a.css({left:0})}}(b(a.next).add(a.prev)),queue:!1,easing:f}),e&&(a.rewind=!a.rewind),a.prev&&(h={left:0},i={left:g*(a.rewind?1:-1)},d&&(h.opacity=1,i.opacity=0),b(a.prev).css(h),L.animate(a.prev,i,{duration:a.speed,queue:!1,easing:f,complete:function(){b(this).css("opacity",0)}}))};return{active:!1,init:function(a,b,c){N.effects.hasOwnProperty(a)&&N.effects[a].call(this,b,c)},effects:{fade:function(a,c){b(a.next).css({opacity:0,left:0}),L.animate(a.next,{opacity:1},{duration:a.speed,complete:c}),a.prev&&(b(a.prev).css("opacity",1).show(),L.animate(a.prev,{opacity:0}
3542,{duration:a.speed}))},flash:function(a,c){b(a.next).css({opacity:0,left:0}),a.prev?L.animate(a.prev,{opacity:0},{duration:a.speed/2,complete:function(){L.animate(a.next,{opacity:1},{duration:a.speed,complete:c})}}):L.animate(a.next,{opacity:1},{duration:a.speed,complete:c})},pulse:function(a,c){a.prev&&b(a.prev).hide(),b(a.next).css({opacity:0,left:0}).show(),L.animate(a.next,{opacity:1},{duration:a.speed,complete:c})},slide:function(b,c){a.apply(this,L.array(arguments))},fadeslide:function(b,c){a.apply(this,L.array(arguments).concat([!0]))},doorslide:function(b,c){a.apply(this,L.array(arguments).concat([!1,!0]))}}}}();return D.listen(),b.event.special["click:fast"]={propagate:!0,add:function(c){var d=function(a){if(a.touches&&a.touches.length){var b=a.touches[0];return{x:b.pageX,y:b.pageY}}},e={touched:!1,touchdown:!1,coords:{x:0,y:0},evObj:{}};b(this).data({clickstate:e,timer:0}).on("touchstart.fast",function(c){a.clearTimeout(b(this).data("timer")),b(this).data("clickstate",{touched:!0,touchdown:!0,coords:d(c.originalEvent),evObj:c})}).on("touchmove.fast",function(a){var c=d(a.originalEvent),e=b(this).data("clickstate");Math.max(Math.abs(e.coords.x-c.x),Math.abs(e.coords.y-c.y))>6&&b(this).data("clickstate",b.extend(e,{touchdown:!1}))}).on("touchend.fast",function(d){var f=b(this);f.data("clickstate").touchdown&&c.handler.call(this,d),f.data("timer",a.setTimeout(function(){f.data("clickstate",e)},400))}).on("click.fast",function(a){if(b(this).data("clickstate").touched)return!1;b(this).data("clickstate",e),c.handler.call(this,a)})},remove:function(){b(this).off("touchstart.fast touchmove.fast touchend.fast click.fast")}},g.on("orientationchange",function(){b(this).resize()}),c=function(){var h=this;this._options={},this._playing=!1,this._playtime=5e3,this._active=null,this._queue={length:0},this._data=[],this._dom={},this._thumbnails=[],this._layers=[],this._initialized=!1,this._firstrun=!1,this._stageWidth=0,this._stageHeight=0,this._target=d,this._binds=[],this._id=parseInt(1e4*p.random(),10),b.each("container stage images image-nav image-nav-left image-nav-right info info-text info-title info-description thumbnails thumbnails-list thumbnails-container thumb-nav-left thumb-nav-right loader counter tooltip".split(" "),function(a,b){h._dom[b]=L.create("galleria-"+b)}),b.each("current total".split(" "),function(a,b){h._dom[b]=L.create("galleria-"+b,"span")});var i=this._keyboard={keys:{UP:38,DOWN:40,LEFT:37,RIGHT:39,RETURN:13,ESCAPE:27,BACKSPACE:8,SPACE:32},map:{},bound:!1,press:function(a){var b=a.keyCode||a.which;b in i.map&&"function"==typeof i.map[b]&&i.map[b].call(h,a)},attach:function(a){var b,c;for(b in a)a.hasOwnProperty(b)&&(c=b.toUpperCase(),c in i.keys?i.map[i.keys[c]]=a[b]:i.map[c]=a[b]);i.bound||(i.bound=!0,f.on("keydown",i.press))},detach:function(){i.bound=!1,i.map={},f.off("keydown",i.press)}},j=this._controls={0:d,1:d,active:0,swap:function(){j.active=j.active?0:1},getActive:function(){return h._options.swipe?j.slides[h._active]:j[j.active]},getNext:function(){return h._options.swipe?j.slides[h.getNext(h._active)]:j[1-j.active]},slides:[],frames:[],layers:[]},k=this._carousel={next:h.$("thumb-nav-right"),prev:h.$("thumb-nav-left"),width:0,current:0,max:0,hooks:[],update:function(){var a=0,c=0,d=[0];b.each(h._thumbnails,function(e,f){if(f.ready){a+=f.outerWidth||b(f.container).outerWidth(!0);var g=b(f.container).width();a+=g-p.floor(g),d[e+1]=a,c=p.max(c,f.outerHeight||b(f.container).outerHeight(!0))}}),h.$("thumbnails").css({width:a,height:c}),k.max=a,k.hooks=d,k.width=h.$("thumbnails-list").width(),k.setClasses(),h.$("thumbnails-container").toggleClass("galleria-carousel",a>k.width),k.width=h.$("thumbnails-list").width()},bindControls:function(){var a;k.next.on("click:fast",function(b){if(b.preventDefault(),"auto"===h._options.carouselSteps){for(a=k.current;a<k.hooks.length;a++)if(k.hooks[a]-k.hooks[k.current]>k.width){k.set(a-2);break}}else k.set(k.current+h._options.carouselSteps)}),k.prev.on("click:fast",function(b){if(b.preventDefault(),"auto"===h._options.carouselSteps)for(a=k.current;a>=0;a--){if(k.hooks[k.current]-k.hooks[a]>k.width){k.set(a+2);break}if(0===a){k.set(0);break}}else k.set(k.current-h._options.carouselSteps)})},set:function(a){for(a=p.max(a,0);k.hooks[a-1]+k.width>=k.max&&a>=0;)a--;k.current=a,k.animate()},getLast:function(a){return(a||k.current)-1}
3542,follow:function(a){if(0===a||a===k.hooks.length-2)return void k.set(a);for(var b=k.current;k.hooks[b]-k.hooks[k.current]<k.width&&b<=k.hooks.length;)b++;a-1<k.current?k.set(a-1):a+2>b&&k.set(a-b+k.current+2)},setClasses:function(){k.prev.toggleClass("disabled",!k.current),k.next.toggleClass("disabled",k.hooks[k.current]+k.width>=k.max)},animate:function(a){k.setClasses();var c=-1*k.hooks[k.current];isNaN(c)||(h.$("thumbnails").css("left",function(){return b(this).css("left")}),L.animate(h.get("thumbnails"),{left:c},{duration:h._options.carouselSpeed,easing:h._options.easing,queue:!1}))}},l=this._tooltip={initialized:!1,open:!1,timer:"tooltip"+h._id,swapTimer:"swap"+h._id,init:function(){l.initialized=!0;L.insertStyleTag(".galleria-tooltip{padding:3px 8px;max-width:50%;background:#ffe;color:#000;z-index:3;position:absolute;font-size:11px;line-height:1.3;opacity:0;box-shadow:0 0 2px rgba(0,0,0,.4);-moz-box-shadow:0 0 2px rgba(0,0,0,.4);-webkit-box-shadow:0 0 2px rgba(0,0,0,.4);}","galleria-tooltip"),h.$("tooltip").css({opacity:.8,visibility:"visible",display:"none"})},move:function(a){var b=h.getMousePosition(a).x,c=h.getMousePosition(a).y,d=h.$("tooltip"),e=b,f=c,g=d.outerHeight(!0)+1,i=d.outerWidth(!0),j=g+15,k=h.$("container").width()-i-2,l=h.$("container").height()-g-2;isNaN(e)||isNaN(f)||(e+=10,f-=g+8,e=p.max(0,p.min(k,e)),f=p.max(0,p.min(l,f)),c<j&&(f=j),d.css({left:e,top:f}))},bind:function(a,d){if(!c.TOUCH){l.initialized||l.init();var e=function(){h.$("container").off("mousemove",l.move),h.clearTimer(l.timer),h.$("tooltip").stop().animate({opacity:0}
3542,200,function(){h.$("tooltip").hide(),h.addTimer(l.swapTimer,function(){l.open=!1},1e3)})},f=function(a,c){l.define(a,c),b(a).hover(function(){h.clearTimer(l.swapTimer),h.$("container").off("mousemove",l.move).on("mousemove",l.move).trigger("mousemove"),l.show(a),h.addTimer(l.timer,function(){h.$("tooltip").stop().show().animate({opacity:1}),l.open=!0},l.open?0:500)},e).click(e)};"string"==typeof d?f(a in h._dom?h.get(a):a,d):b.each(a,function(a,b){f(h.get(a),b)})}},show:function(c){c=b(c in h._dom?h.get(c):c);var d=c.data("tt"),e=function(b){a.setTimeout(function(a){return function(){l.move(a)}}(b),10),c.off("mouseup",e)};(d="function"==typeof d?d():d)&&(h.$("tooltip").html(d.replace(/\s/," ")),c.on("mouseup",e))},define:function(a,c){if("function"!=typeof c){var d=c;c=function(){return d}}a=b(a in h._dom?h.get(a):a).data("tt",c),l.show(a)}},n=this._fullscreen={scrolled:0,crop:d,active:!1,prev:b(),beforeEnter:function(a){a()},beforeExit:function(a){a()},keymap:h._keyboard.map,parseCallback:function(a,c){return N.active?function(){"function"==typeof a&&a.call(h);var d=h._controls.getActive(),e=h._controls.getNext();h._scaleImage(e),h._scaleImage(d),c&&h._options.trueFullscreen&&b(d.container).add(e.container).trigger("transitionend")}:a},enter:function(b){n.beforeEnter(function(){b=n.parseCallback(b,!0),h._options.trueFullscreen&&D.support?(n.active=!0,L.forceStyles(h.get("container"),{width:"100%",height:"100%"}),h.rescale(),c.MAC?c.SAFARI&&/version\/[1-5]/.test(m)?(h.$("stage").css("opacity",0),a.setTimeout(function(){n.scale(),h.$("stage").css("opacity",1)},4)):(h.$("container").css("opacity",0).addClass("fullscreen"),a.setTimeout(function(){n.scale(),h.$("container").css("opacity",1)},50)):h.$("container").addClass("fullscreen"),g.resize(n.scale),D.enter(h,b,h.get("container"))):(n.scrolled=g.scrollTop(),c.TOUCH||a.scrollTo(0,0),n._enter(b))})},_enter:function(f){n.active=!0,v&&(n.iframe=function(){var d,f=e.referrer,g=e.createElement("a"),h=a.location;return g.href=f,g.protocol!=h.protocol||g.hostname!=h.hostname||g.port!=h.port?(c.raise("Parent fullscreen not available. Iframe protocol, domains and ports must match."),!1):(n.pd=a.parent.document,b(n.pd).find("iframe").each(function(){if((this.contentDocument||this.contentWindow.document)===e)return d=this,!1}),d)}()),L.hide(h.getActiveImage()),v&&n.iframe&&(n.iframe.scrolled=b(a.parent).scrollTop(),a.parent.scrollTo(0,0));var i=h.getData(),j=h._options,k=!h._options.trueFullscreen||!D.support,l={height:"100%",overflow:"hidden",margin:0,padding:0};if(k&&(h.$("container").addClass("fullscreen"),n.prev=h.$("container").prev(),n.prev.length||(n.parent=h.$("container").parent()),h.$("container").appendTo("body"),L.forceStyles(h.get("container"),{position:c.TOUCH?"absolute":"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:1e4}),L.forceStyles(u().html,l),L.forceStyles(u().body,l)),v&&n.iframe&&(L.forceStyles(n.pd.documentElement,l),L.forceStyles(n.pd.body,l),L.forceStyles(n.iframe,b.extend(l,{width:"100%",height:"100%",top:0,left:0,position:"fixed",zIndex:1e4,border:"none"}))),n.keymap=b.extend({},h._keyboard.map),h.attachKeyboard({escape:h.exitFullscreen,right:h.next,left:h.prev}),n.crop=j.imageCrop,j.fullscreenCrop!=d&&(j.imageCrop=j.fullscreenCrop),i&&i.big&&i.image!==i.big){var m=new c.Picture,o=m.isCached(i.big),p=h.getIndex(),q=h._thumbnails[p];h.trigger({type:c.LOADSTART,cached:o,rewind:!1,index:p,imageTarget:h.getActiveImage(),thumbTarget:q,galleriaData:i}),m.load(i.big,function(a){h._scaleImage(a,{complete:function(a){h.trigger({type:c.LOADFINISH,cached:o,index:p,rewind:!1,imageTarget:a.image,thumbTarget:q});var d=h._controls.getActive().image;d&&(b(d).width(a.image.width).height(a.image.height).attr("style",b(a.image).attr("style")),a.image.src.srcset&&b(d).attr("srcset",a.image.src.srcset),a.image.src.sizes&&b(d).attr("sizes",a.image.src.sizes),b(d).attr("src",a.image.src))}})});var r=h.getNext(p),s=new c.Picture,t=h.getData(r);s.preload(h.isFullscreen()&&t.big?t.big:t.image)}h.rescale(function(){h.addTimer(!1,function(){k&&L.show(h.getActiveImage()),"function"==typeof f&&f.call(h),h.rescale()},100),h.trigger(c.FULLSCREEN_ENTER)}),k?g.resize(n.scale):L.show(h.getActiveImage())},scale:function(){h.rescale()}
3542,exit:function(a){n.beforeExit(function(){a=n.parseCallback(a),h._options.trueFullscreen&&D.support?D.exit(a):n._exit(a)})},_exit:function(b){n.active=!1;var d=!h._options.trueFullscreen||!D.support,e=h.$("container").removeClass("fullscreen");if(n.parent?n.parent.prepend(e):e.insertAfter(n.prev),d){L.hide(h.getActiveImage()),L.revertStyles(h.get("container"),u().html,u().body),c.TOUCH||a.scrollTo(0,n.scrolled);var f=h._controls.frames[h._controls.active];f&&f.image&&(f.image.src=f.image.src)}v&&n.iframe&&(L.revertStyles(n.pd.documentElement,n.pd.body,n.iframe),n.iframe.scrolled&&a.parent.scrollTo(0,n.iframe.scrolled)),h.detachKeyboard(),h.attachKeyboard(n.keymap),h._options.imageCrop=n.crop;var i=h.getData().big,j=h._controls.getActive().image;!h.getData().iframe&&j&&i&&i==j.src&&a.setTimeout(function(a){return function(){j.src=a}}(h.getData().image),1),h.rescale(function(){h.addTimer(!1,function(){d&&L.show(h.getActiveImage()),"function"==typeof b&&b.call(h),g.trigger("resize")},50),h.trigger(c.FULLSCREEN_EXIT)}),g.off("resize",n.scale)}},o=this._idle={trunk:[],bound:!1,active:!1,add:function(a,d,e,f){if(a&&!c.TOUCH){o.bound||o.addEvent(),a=b(a),"boolean"==typeof e&&(f=e,e={}),e=e||{};var g,h={};for(g in d)d.hasOwnProperty(g)&&(h[g]=a.css(g));a.data("idle",{from:b.extend(h,e),to:d,complete:!0,busy:!1}),f?a.css(d):o.addTimer(),o.trunk.push(a)}},remove:function(a){a=b(a),b.each(o.trunk,function(b,c){c&&c.length&&!c.not(a).length&&(a.css(a.data("idle").from),o.trunk.splice(b,1))}),o.trunk.length||(o.removeEvent(),h.clearTimer(o.timer))},addEvent:function(){o.bound=!0,h.$("container").on("mousemove click",o.showAll),"hover"==h._options.idleMode&&h.$("container").on("mouseleave",o.hide)},removeEvent:function(){o.bound=!1,h.$("container").on("mousemove click",o.showAll),"hover"==h._options.idleMode&&h.$("container").off("mouseleave",o.hide)},addTimer:function(){"hover"!=h._options.idleMode&&h.addTimer("idle",function(){o.hide()},h._options.idleTime)},hide:function(){if(h._options.idleMode&&!1!==h.getIndex()){h.trigger(c.IDLE_ENTER);var a=o.trunk.length;b.each(o.trunk,function(b,c){var d=c.data("idle");d&&(c.data("idle").complete=!1,L.animate(c,d.to,{duration:h._options.idleSpeed,complete:function(){b==a-1&&(o.active=!1)}}))})}},showAll:function(){h.clearTimer("idle"),b.each(o.trunk,function(a,b){o.show(b)})},show:function(a){var d=a.data("idle");o.active&&(d.busy||d.complete)||(d.busy=!0,h.trigger(c.IDLE_EXIT),h.clearTimer("idle"),L.animate(a,d.from,{duration:h._options.idleSpeed/2,complete:function(){o.active=!0,b(a).data("idle").busy=!1,b(a).data("idle").complete=!0}})),o.addTimer()}},q=this._lightbox={width:0,height:0,initialized:!1,active:null,image:null,elems:{},keymap:!1,init:function(){if(!q.initialized){q.initialized=!0;var a={},d=h._options,e="",f="position:absolute;",g="lightbox-",i={overlay:"position:fixed;display:none;opacity:"+d.overlayOpacity+";filter:alpha(opacity="+100*d.overlayOpacity+");top:0;left:0;width:100%;height:100%;background:"+d.overlayBackground+";z-index:99990",box:"position:fixed;display:none;width:400px;height:400px;top:50%;left:50%;margin-top:-200px;margin-left:-200px;z-index:99991",shadow:f+"background:#000;width:100%;height:100%;",content:f+"background-color:#fff;top:10px;left:10px;right:10px;bottom:10px;overflow:hidden",info:f+"bottom:10px;left:10px;right:10px;color:#444;font:11px/13px arial,sans-serif;height:13px",close:f+"top:10px;right:10px;height:20px;width:20px;background:#fff;text-align:center;cursor:pointer;color:#444;font:16px/22px arial,sans-serif;z-index:99999",image:f+"top:10px;left:10px;right:10px;bottom:30px;overflow:hidden;display:block;",prevholder:f+"width:50%;top:0;bottom:40px;cursor:pointer;",nextholder:f+"width:50%;top:0;bottom:40px;right:-1px;cursor:pointer;",prev:f+"top:50%;margin-top:-20px;height:40px;width:30px;background:#fff;left:20px;display:none;text-align:center;color:#000;font:bold 16px/36px arial,sans-serif",next:f+"top:50%;margin-top:-20px;height:40px;width:30px;background:#fff;right:20px;left:auto;display:none;font:bold 16px/36px arial,sans-serif;text-align:center;color:#000",title:"float:left",counter:"float:right;margin-left:8px;"},j={},k="";k=t>7?t<9?"background:#000;filter:alpha(opacity=0);":"background:rgba(0,0,0,0);":"z-index:99999",i.nextholder+=k,i.prevholder+=k,b.each(i,function(a,b){e+=".galleria-"+g+a+"{"+b+"}"}),e+=".galleria-lightbox-box.iframe .galleria-lightbox-prevholder,.galleria-lightbox-box.iframe .galleria-lightbox-nextholder{width:100px;height:100px;top:50%;
3542margin-top:-70px}",L.insertStyleTag(e,"galleria-lightbox"),b.each("overlay box content shadow title info close prevholder prev nextholder next counter image".split(" "),function(b,c){h.addElement("lightbox-"+c),a[c]=q.elems[c]=h.get("lightbox-"+c)}),q.image=new c.Picture,b.each({box:"shadow content close prevholder nextholder",info:"title counter",content:"info image",prevholder:"prev",nextholder:"next"},function(a,c){var d=[];b.each(c.split(" "),function(a,b){d.push(g+b)}),j[g+a]=d}),h.append(j),b(a.image).append(q.image.container),b(u().body).append(a.overlay,a.box),function(a){a.hover(function(){b(this).css("color","#bbb")},function(){b(this).css("color","#444")})}(b(a.close).on("click:fast",q.hide).html("×")),b.each(["Prev","Next"],function(d,e){var f=b(a[e.toLowerCase()]).html(/v/.test(e)?"‹ ":" ›"),g=b(a[e.toLowerCase()+"holder"]);if(g.on("click:fast",function(){q["show"+e]()}),t<8||c.TOUCH)return void f.show();g.hover(function(){f.show()},function(a){f.stop().fadeOut(200)})}),b(a.overlay).on("click:fast",q.hide),c.IPAD&&(h._options.lightboxTransitionSpeed=0)}},rescale:function(a){var d=p.min(g.width()-40,q.width),e=p.min(g.height()-60,q.height),f=p.min(d/q.width,e/q.height),i=p.round(q.width*f)+40,j=p.round(q.height*f)+60,k={width:i,height:j,"margin-top":-1*p.ceil(j/2),"margin-left":-1*p.ceil(i/2)};a?b(q.elems.box).css(k):b(q.elems.box).animate(k,{duration:h._options.lightboxTransitionSpeed,easing:h._options.easing,complete:function(){var a=q.image,d=h._options.lightboxFadeSpeed;h.trigger({type:c.LIGHTBOX_IMAGE,imageTarget:a.image}),b(a.container).show(),b(a.image).animate({opacity:1},d),L.show(q.elems.info,d)}})},hide:function(){q.image.image=null,g.off("resize",q.rescale),b(q.elems.box).hide().find("iframe").remove(),L.hide(q.elems.info),h.detachKeyboard(),h.attachKeyboard(q.keymap),q.keymap=!1,L.hide(q.elems.overlay,200,function(){b(this).hide().css("opacity",h._options.overlayOpacity),h.trigger(c.LIGHTBOX_CLOSE)})},showNext:function(){q.show(h.getNext(q.active))},showPrev:function(){q.show(h.getPrev(q.active))},show:function(d){q.active=d="number"==typeof d?d:h.getIndex()||0,q.initialized||q.init(),h.trigger(c.LIGHTBOX_OPEN),q.keymap||(q.keymap=b.extend({},h._keyboard.map),h.attachKeyboard({escape:q.hide,right:q.showNext,left:q.showPrev})),g.off("resize",q.rescale);var e,f,i,j=h.getData(d),k=h.getDataLength(),l=h.getNext(d);L.hide(q.elems.info);try{for(i=h._options.preload;i>0;i--)f=new c.Picture,e=h.getData(l),f.preload(e.big?e.big:e.image),l=h.getNext(l)}catch(a){}q.image.isIframe=j.iframe&&!j.image,b(q.elems.box).toggleClass("iframe",q.image.isIframe),b(q.image.container).find(".galleria-videoicon").remove(),q.image.load(j.big||j.image||j.iframe,function(c){if(c.isIframe){var e=b(a).width(),f=b(a).height();if(c.video&&h._options.maxVideoSize){var i=p.min(h._options.maxVideoSize/e,h._options.maxVideoSize/f);i<1&&(e*=i,f*=i)}q.width=e,q.height=f}else q.width=c.original.width,q.height=c.original.height;if(b(c.image).css({width:c.isIframe?"100%":"100.1%",height:c.isIframe?"100%":"100.1%",top:0,bottom:0,zIndex:99998,opacity:0,visibility:"visible"}).parent().height("100%"),q.elems.title.innerHTML=j.title||"",q.elems.counter.innerHTML=d+1+" / "+k,g.resize(q.rescale),q.rescale(),j.image&&j.iframe){if(b(q.elems.box).addClass("iframe"),j.video){var l=M(c.container).hide();a.setTimeout(function(){l.fadeIn(200)},200)}b(c.image).css("cursor","pointer").mouseup(function(a,c){return function(d){b(q.image.container).find(".galleria-videoicon").remove(),d.preventDefault(),c.isIframe=!0,c.load(a.iframe+(a.video?"&autoplay=1":""),{width:"100%",height:t<8?b(q.image.container).height():"100%"})}}(j,c))}}),b(q.elems.overlay).show().css("visibility","visible"),b(q.elems.box).show()}},r=this._timer={trunk:{},add:function(b,c,d,e){if(b=b||(new Date).getTime(),e=e||!1,this.clear(b),e){var f=c;c=function(){f(),r.add(b,c,d)}}this.trunk[b]=a.setTimeout(c,d)},clear:function(b){var c,d=function(b){a.clearTimeout(this.trunk[b]),delete this.trunk[b]};if(b&&b in this.trunk)d.call(this,b);else if(void 0===b)for(c in this.trunk)this.trunk.hasOwnProperty(c)&&d.call(this,c)}};return this},c.prototype={constructor:c,init:function(a,e){if(e=y(e),this._original={target:a,options:e,data:null},this._target=this._dom.target=a.nodeName?a:b(a).get(0),this._original.html=this._target.innerHTML,F.push(this),!this._target)return void c.raise("Target not found",!0);if(this._options={autoplay:!1,carousel:!0,carouselFollow:!0,carouselSpeed:400,carouselSteps:"auto",clicknext:!1,dailymotion:{foreground:"%23EEEEEE",highlight:"%235BCEC5",background:"%23222222",logo:0,hideInfos:1},dataConfig:function(a){return{}},dataSelector:"img",dataSort:!1,dataSource:this._target,debug:d,dummy:d,easing:"galleria",extend:function(a){},fullscreenCrop:d,fullscreenDoubleTap:!0,fullscreenTransition:d,height:0,idleMode:!0,idleTime:3e3,idleSpeed:200,imageCrop:!1,imageMargin:0,imagePan:!1,imagePanSmoothness:12,imagePosition:"50%",imageTimeout:d,initialTransition:d,
3542keepSource:!1,layerFollow:!0,lightbox:!1,lightboxFadeSpeed:200,lightboxTransitionSpeed:200,linkSourceImages:!0,maxScaleRatio:d,maxVideoSize:d,minScaleRatio:d,overlayOpacity:.85,overlayBackground:"#0b0b0b",pauseOnInteraction:!0,popupLinks:!1,preload:2,queue:!0,responsive:!0,show:0,showInfo:!0,showCounter:!0,showImagenav:!0,swipe:"auto",theme:null,thumbCrop:!0,thumbEventType:"click:fast",thumbMargin:0,thumbQuality:"auto",thumbDisplayOrder:!0, 3543thumbPosition:"50%",thumbnails:!0,touchTransition:d,transition:"fade",transitionInitial:d,transitionSpeed:400,trueFullscreen:!0,useCanvas:!1,variation:"",videoPoster:!0,vimeo:{title:0,byline:0,portrait:0,color:"aaaaaa"},wait:5e3,width:"auto",youtube:{modestbranding:1,autohide:1,color:"white",hd:1,rel:0,showinfo:0}},this._options.initialTransition=this._options.initialTransition||this._options.transitionInitial,e&&(!1===e.debug&&(j=!1),"number"==typeof e.imageTimeout&&(k=e.imageTimeout),"string"==typeof e.dummy&&(l=e.dummy),"string"==typeof e.theme&&(this._options.theme=e.theme)),b(this._target).children().hide(),c.QUIRK&&c.raise("Your page is in Quirks mode, Galleria may not render correctly. Please validate your HTML and add a correct doctype."),J.length)if(this._options.theme){for(var f=0;f<J.length;f++)if(this._options.theme===J[f].name){this.theme=J[f];break}}else this.theme=J[0];return"object"==typeof this.theme?this._init():I.push(this),this},_init:function(){var f=this,h=this._options;if(this._initialized)return c.raise("Init failed: Gallery instance already initialized."),this;if(this._initialized=!0,!this.theme)return c.raise("Init failed: No theme found.",!0),this;if(b.extend(!0,h,this.theme.defaults,this._original.options,c.configure.options),h.swipe=function(a){return"enforced"==a||!1!==a&&"disabled"!=a&&!!c.TOUCH}(h.swipe),h.swipe&&(h.clicknext=!1,h.imagePan=!1),function(a){if(!("getContext"in a))return void(a=null);H=H||{elem:a,context:a.getContext("2d"),cache:{},length:0}}(e.createElement("canvas")),this.bind(c.DATA,function(){a.screen&&a.screen.width&&Array.prototype.forEach&&this._data.forEach(function(b){var c="devicePixelRatio"in a?a.devicePixelRatio:1;p.max(a.screen.width,a.screen.height)*c<1024&&(b.big=b.image)}),this._original.data=this._data,this.get("total").innerHTML=this.getDataLength();var b=this.$("container");f._options.height<2&&(f._userRatio=f._ratio=f._options.height);var d={width:0,height:0},e=function(){return f.$("stage").height()};L.wait({until:function(){return d=f._getWH(),b.width(d.width).height(d.height),e()&&d.width&&d.height>50},success:function(){f._width=d.width,f._height=d.height,f._ratio=f._ratio||d.height/d.width,c.WEBKIT?a.setTimeout(function(){f._run()},1):f._run()},error:function(){e()?c.raise("Could not extract sufficient width/height of the gallery container. Traced measures: width:"+d.width+"px, height: "+d.height+"px.",!0):c.raise("Could not extract a stage height from the CSS. Traced height: "+e()+"px.",!0)},timeout:"number"==typeof this._options.wait&&this._options.wait})}),this.append({"info-text":["info-title","info-description"],info:["info-text"],"image-nav":["image-nav-right","image-nav-left"],stage:["images","loader","counter","image-nav"],"thumbnails-list":["thumbnails"],"thumbnails-container":["thumb-nav-left","thumbnails-list","thumb-nav-right"],container:["stage","thumbnails-container","info","tooltip"]}),L.hide(this.$("counter").append(this.get("current"),e.createTextNode(" / "),this.get("total"))),this.setCounter("–"),L.hide(f.get("tooltip")),this.$("container").addClass([c.TOUCH?"touch":"notouch",this._options.variation,"galleria-theme-"+this.theme.name].join(" ")),this._options.swipe||b.each(new Array(2),function(a){var d=new c.Picture;b(d.container).css({position:"absolute",top:0,left:0}).prepend(f._layers[a]=b(L.create("galleria-layer")).css({position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:2})[0]),f.$("images").append(d.container),f._controls[a]=d;var e=new c.Picture;e.isIframe=!0,b(e.container).attr("class","galleria-frame").css({position:"absolute",top:0,left:0,zIndex:4,background:"#000",display:"none"}).appendTo(d.container),f._controls.frames[a]=e}),this.$("images").css({position:"relative",top:0,left:0,width:"100%",height:"100%"}),h.swipe&&(this.$("images").css({position:"absolute",top:0,left:0,width:0,height:"100%"}),this.finger=new c.Finger(this.get("stage"),{onchange:function(a){f.pause().show(a)},oncomplete:function(a){var c=p.max(0,p.min(parseInt(a,10),f.getDataLength()-1)),d=f.getData(c);
3543b(f._thumbnails[c].container).addClass("active").siblings(".active").removeClass("active"),d&&(f.$("images").find(".galleria-frame").css("opacity",0).hide().find("iframe").remove(),f._options.carousel&&f._options.carouselFollow&&f._carousel.follow(c))}}),this.bind(c.RESCALE,function(){this.finger.setup()}),this.$("stage").on("click",function(c){var e=f.getData();if(e){if(e.iframe){f.isPlaying()&&f.pause();var g=f._controls.frames[f._active],h=f._stageWidth,i=f._stageHeight;if(b(g.container).find("iframe").length)return;return b(g.container).css({width:h,height:i,opacity:0}).show().animate({opacity:1},200),void a.setTimeout(function(){g.load(e.iframe+(e.video?"&autoplay=1":""),{width:h,height:i},function(a){f.$("container").addClass("videoplay"),a.scale({width:f._stageWidth,height:f._stageHeight,iframelimit:e.video?f._options.maxVideoSize:d})})},100)}if(e.link)if(f._options.popupLinks){a.open(e.link,"_blank")}else a.location.href=e.link;else;}}),this.bind(c.IMAGE,function(a){f.setCounter(a.index),f.setInfo(a.index);var c=this.getNext(),d=this.getPrev(),e=[d,c];e.push(this.getNext(c),this.getPrev(d),f._controls.slides.length-1);var g=[];b.each(e,function(a,c){-1==b.inArray(c,g)&&g.push(c)}),b.each(g,function(a,c){var d=f.getData(c),e=f._controls.slides[c],g=f.isFullscreen()&&d.big?d.big:d.image||d.iframe;d.iframe&&!d.image&&(e.isIframe=!0),e.ready||f._controls.slides[c].load(g,function(a){a.isIframe||b(a.image).css("visibility","hidden"),f._scaleImage(a,{complete:function(a){a.isIframe||b(a.image).css({opacity:0,visibility:"visible"}).animate({opacity:1},200)}})})})})),this.$("thumbnails, thumbnails-list").css({overflow:"hidden",position:"relative"}),this.$("image-nav-right, image-nav-left").on("click:fast",function(a){h.pauseOnInteraction&&f.pause();var b=/right/.test(this.className)?"next":"prev";f[b]()}).on("click",function(a){a.preventDefault(),(h.clicknext||h.swipe)&&a.stopPropagation()}),b.each(["info","counter","image-nav"],function(a,b){!1===h["show"+b.substr(0,1).toUpperCase()+b.substr(1).replace(/-/,"")]&&L.moveOut(f.get(b.toLowerCase()))}),this.load(),h.keepSource||t||(this._target.innerHTML=""),this.get("errors")&&this.appendChild("target","errors"),this.appendChild("target","container"),h.carousel){var i=0,j=h.show;this.bind(c.THUMBNAIL,function(){this.updateCarousel(),++i==this.getDataLength()&&"number"==typeof j&&j>0&&this._carousel.follow(j)})}return h.responsive&&g.on("resize",function(){f.isFullscreen()||f.resize()}),h.fullscreenDoubleTap&&this.$("stage").on("touchstart",function(){var a,b,c,d,e,g,h=function(a){return a.originalEvent.touches?a.originalEvent.touches[0]:a};return f.$("stage").on("touchmove",function(){a=0}),function(i){if(!/(-left|-right)/.test(i.target.className)){if(g=L.timestamp(),b=h(i).pageX,c=h(i).pageY,i.originalEvent.touches.length<2&&g-a<300&&b-d<20&&c-e<20)return f.toggleFullscreen(),void i.preventDefault();a=g,d=b,e=c}}}()),b.each(c.on.binds,function(a,c){-1==b.inArray(c.hash,f._binds)&&f.bind(c.type,c.callback)}),this},addTimer:function(){return this._timer.add.apply(this._timer,L.array(arguments)),this},clearTimer:function(){return this._timer.clear.apply(this._timer,L.array(arguments)),this},_getWH:function(){var a,c=this.$("container"),d=this.$("target"),e=this,f={};return b.each(["width","height"],function(b,g){e._options[g]&&"number"==typeof e._options[g]?f[g]=e._options[g]:(a=[L.parseValue(c.css(g)),L.parseValue(d.css(g)),c[g](),d[g]()],e["_"+g]||a.splice(a.length,L.parseValue(c.css("min-"+g)),L.parseValue(d.css("min-"+g))),f[g]=p.max.apply(p,a))}),e._userRatio&&(f.height=f.width*e._userRatio),f},_createThumbnails:function(d){this.get("total").innerHTML=this.getDataLength();var f,g,h,i,j=this,k=this._options,l=d?this._data.length-d.length:0,m=l,n=[],o=0,p=t<8?"http://upload.wikimedia.org/wikipedia/commons/c/c0/Blank.gif":"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D",q=function(){var a=j.$("thumbnails").find(".active");return!!a.length&&a.find("img").attr("src")}(),r="string"==typeof k.thumbnails?k.thumbnails.toLowerCase():null,s=function(a){return e.defaultView&&e.defaultView.getComputedStyle?e.defaultView.getComputedStyle(g.container,null)[a]:i.css(a)},u=function(a){k.pauseOnInteraction&&j.pause();var c=b(a.currentTarget).data("index");j.getIndex()!==c&&j.show(c),a.preventDefault()},v=function(a,d){b(a.container).css("visibility","visible"),j.trigger({type:c.THUMBNAIL,thumbTarget:a.image,index:a.data.order,galleriaData:j.getData(a.data.order)}),"function"==typeof d&&d.call(j,a)},w=function(a,c){a.scale({width:a.data.width,height:a.data.height,crop:k.thumbCrop,margin:k.thumbMargin,canvas:k.useCanvas,position:k.thumbPosition,complete:function(a){var d,e,f=["left","top"],g=["Width","Height"];j.getData(a.index);b.each(g,function(c,g){d=g.toLowerCase(),!0===k.thumbCrop&&k.thumbCrop!==d||(e={},e[d]=a[d],b(a.container).css(e),e={},e[f[c]]=0,b(a.image).css(e)),a["outer"+g]=b(a.container)["outer"+g](!0)}),L.toggleQuality(a.image,!0===k.thumbQuality||"auto"===k.thumbQuality&&a.original.width<3*a.width),k.thumbDisplayOrder&&!a.lazy?b.each(n,function(a,b){if(a===o&&b.ready&&!b.displayed)return o++,b.dis
3543played=!0,void v(b,c)}):v(a,c)}})};for(d||(this._thumbnails=[],this.$("thumbnails").empty());this._data[l];l++)h=this._data[l],f=h.thumb||h.image,!0!==k.thumbnails&&"lazy"!=r||!h.thumb&&!h.image?h.iframe&&null!==r||"empty"===r||"numbers"===r?(g={container:L.create("galleria-image"),image:L.create("img","span"),ready:!0,data:{order:l}},"numbers"===r&&b(g.image).text(l+1),h.iframe&&b(g.image).addClass("iframe"),this.$("thumbnails").append(g.container),a.setTimeout(function(a,d,e){return function(){b(e).append(a),j.trigger({type:c.THUMBNAIL,thumbTarget:a,index:d,galleriaData:j.getData(d)})}}(g.image,l,g.container),50+20*l)):g={container:null,image:null}:(g=new c.Picture(l),g.index=l,g.displayed=!1,g.lazy=!1,g.video=!1,this.$("thumbnails").append(g.container),i=b(g.container),i.css("visibility","hidden"),g.data={width:L.parseValue(s("width")),height:L.parseValue(s("height")),order:l,src:f},!0!==k.thumbCrop?i.css({width:"auto",height:"auto"}):i.css({width:g.data.width,height:g.data.height}),"lazy"==r?(i.addClass("lazy"),g.lazy=!0,g.load(p,{height:g.data.height,width:g.data.width})):g.load(f,w),"all"===k.preload&&g.preload(h.image)),b(g.container).add(k.keepSource&&k.linkSourceImages?h.original:null).data("index",l).on(k.thumbEventType,u).data("thumbload",w),q===f&&b(g.container).addClass("active"),this._thumbnails.push(g);return n=this._thumbnails.slice(m),this},lazyLoad:function(a,c){var d=a.constructor==Array?a:[a],e=this,f=0;return b.each(d,function(a,g){if(!(g>e._thumbnails.length-1)){var h=e._thumbnails[g],i=h.data,j=function(){++f==d.length&&"function"==typeof c&&c.call(e)},k=b(h.container).data("thumbload");k&&(h.video?k.call(e,h,j):h.load(i.src,function(a){k.call(e,a,j)}))}}),this},lazyLoadChunks:function(b,c){var d=this.getDataLength(),e=0,f=0,g=[],h=[],i=this;for(c=c||0;e<d;e++)h.push(e),++f!=b&&e!=d-1||(g.push(h),f=0,h=[]);var j=function(b){var d=g.shift();d&&a.setTimeout(function(){i.lazyLoad(d,function(){j(!0)})},c&&b?c:0)};return j(!1),this},_run:function(){var e=this;e._createThumbnails(),L.wait({timeout:1e4,until:function(){return c.OPERA&&e.$("stage").css("display","inline-block"),e._stageWidth=e.$("stage").width(),e._stageHeight=e.$("stage").height(),e._stageWidth&&e._stageHeight>50},success:function(){if(E.push(e),e._options.swipe){var f=e.$("images").width(e.getDataLength()*e._stageWidth);b.each(new Array(e.getDataLength()),function(a){var d=new c.Picture,g=e.getData(a);b(d.container).css({position:"absolute",top:0,left:e._stageWidth*a}).prepend(e._layers[a]=b(L.create("galleria-layer")).css({position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:2})[0]).appendTo(f),g.video&&M(d.container),e._controls.slides.push(d);var h=new c.Picture;h.isIframe=!0,b(h.container).attr("class","galleria-frame").css({position:"absolute",top:0,left:0,zIndex:4,background:"#000",display:"none"}).appendTo(d.container),e._controls.frames.push(h)}),e.finger.setup()}if(L.show(e.get("counter")),e._options.carousel&&e._carousel.bindControl
3543s(),e._options.autoplay&&(e.pause(),"number"==typeof e._options.autoplay&&(e._playtime=e._options.autoplay),e._playing=!0),e._firstrun)return e._options.autoplay&&e.trigger(c.PLAY),void("number"==typeof e._options.show&&e.show(e._options.show));e._firstrun=!0,c.History&&c.History.change(function(b){isNaN(b)?a.history.go(-1):e.show(b,d,!0)}),e.trigger(c.READY),e.theme.init.call(e,e._options),b.each(c.ready.callbacks,function(a,b){"function"==typeof b&&b.call(e,e._options)}),e._options.extend.call(e,e._options),/^[0-9]{1,4}$/.test(n)&&c.History?e.show(n,d,!0):e._data[e._options.show]&&e.show(e._options.show),e._options.autoplay&&e.trigger(c.PLAY)},error:function(){c.raise("Stage width or height is too small to show the gallery. Traced measures: width:"+e._stageWidth+"px, height: "+e._stageHeight+"px.",!0)}})},load:function(a,d,e){var f=this,g=this._options;return this._data=[],this._thumbnails=[],this.$("thumbnails").empty(),"function"==typeof d&&(e=d,d=null),a=a||g.dataSource,d=d||g.dataSelector,e=e||g.dataConfig,b.isPlainObject(a)&&(a=[a]),b.isArray(a)?this.validate(a)?this._data=a:c.raise("Load failed: JSON Array not valid."):(d+=",.video,.iframe",b(a).find(d).each(function(a,c){c=b(c);var d={},g=c.parent(),h=g.attr("href"),i=g.attr("rel");h&&("IMG"==c[0].nodeName||c.hasClass("video"))&&C(h)?d.video=h:h&&c.hasClass("iframe")?d.iframe=h:d.image=h,i&&(d.big=i),d.imagesrcset=g.data("srcset"),d.imagesizes=g.data("sizes"),d.thumbsizes=c.attr("sizes"),d.thumbsrcset=c.attr("srcset"),b.each("big bigsrcset bigsizes title description link layer image imagesrcset imagesizes".split(" "),function(a,b){c.data(b)&&(d[b]=c.data(b).toString())}),c.data("srcset")&&(d.imagesrcset=c.data("srcset")),c.data("sizes")&&(d.imagesizes=c.data("sizes")),d.big||(d.big=d.image,d.bigsrcset=d.imagesrcset,d.bigsizes=d.imagesizes),f._data.push(b.extend({title:c.attr("title")||"",thumb:c.attr("src"),image:c.attr("src"),big:c.attr("src"),description:c.attr("alt")||"",link:c.attr("longdesc"),original:c.get(0)},d,e(c)))})),"function"==typeof g.dataSort?i.sort.call(this._data,g.dataSort):"random"==g.dataSort&&this._data.sort(function(){return p.round(p.random())-.5}),this.getDataLength()&&this._parseData(function(){this.trigger(c.DATA)}),this},_parseData:function(a){var c,e=this,f=!1,g=function(){var c=!0;b.each(e._data,function(a,b){if(b.loading)return c=!1,!1}),c&&!f&&(f=!0,a.call(e))};return b.each(this._data,function(a,f){if(c=e._data[a],b.each("big image thumb".split(" "),function(a,b){f[b]&&(f[b]=new String(f[b]),f[b].srcset=f[b+"srcset"],f[b].sizes=f[b+"sizes"])}),"thumb"in f==!1&&(c.thumb=f.image),f.big||(c.big=f.image),"video"in f){var h=C(f.video);h&&(c.iframe=new B(h.provider,h.id).embed()+function(){if("object"==typeof e._options[h.provider]){var a=[];return b.each(e._options[h.provider],function(b,c){a.push(b+"="+c)}),"youtube"==h.provider&&(a=["wmode=opaque"].concat(a)),"?"+a.join("&")}return""}(),c.thumb&&c.image||b.each(["thumb","image"],function(a,b){if("image"==b&&!e._options.videoPoster)return void(c.image=d);var f=new B(h.provider,h.id);c[b]||(c.loading=!0,f.getMedia(b,function(a,b){return function(c){a[b]=c,"image"!=b||a.big||(a.big=a.image),delete a.loading,g()}}(c,b)))}))}}),g(),this},destroy:function(){return this.$("target").data("galleria",null),this.$("container").off("galleria"),this.get("target").innerHTML=this._original.html,this.clearTimer(),L.removeFromArray(F,this),L.removeFromArray(E,this),A._inst=[],void 0!==c._waiters&&c._waiters.length&&b.each(c._waiters,function(b,c){c&&a.clearTimeout(c)}),this},splice:function(){var b=this,c=L.array(arguments);return a.setTimeout(function(){i.splice.apply(b._data,c),b._parseData(function(){b._createThumbnails()})},2),b},push:function(){var b=this,c=L.array(arguments);return 1==c.length&&c[0].constructor==Array&&(c=c[0]),a.setTimeout(function(){i.push.apply(b._data,c),b._parseData(function(){b._createThumbnails(c)})},2),b},_getActive:function(){return this._controls.getActive()},validate:function(a){return!0},bind:function(a,b){return a=z(a),this.$("container").on(a,this.proxy(b)),this},unbind:function(a){return a=z(a),this.$("container").off(a),this},trigger:function(a){return a="object"==typeof a?b.extend(a,{scope:this}):{type:z(a),scope:this},this.$("container").trigger(a),this},addIdleState:function(a,b,c,d){return this._idle.add.apply(this._idle,L.array(arguments)),this},removeIdleState:function(a){return this._idle.remove.apply(this._idle,L.array(arguments)),this},enterIdleMode:function(){return this._idle.hide(),this},exitIdleMode:function(){return this._idle.showAll(),this},enterFullscreen:function(a){return this._fullscreen.enter.apply(this,L.array(arguments)),this},exitFullscreen:function(a){return this._fullscreen.exit.apply(this,L.array(arguments)),this},toggleFullscreen:function(a){return this._fullscreen[this.isFullscreen()?"exit":"enter"].apply(this,L.array(arguments)),this},bindTooltip:function(a,b){return this._tooltip.bind.apply(this._tooltip,L.array(arguments)),this},defineTooltip:function(a,b){return this._tooltip.define.apply(this._tooltip,L.array(arguments)),this},refreshTooltip:function(a){return this._tooltip.show.apply(this._tooltip,L.array(arguments)),this},openLightbox:function(){return this._lightbox.show.apply(this._lightbox,L.array(arguments)),this},closeLightbox:function(){return this._lightbox.hide.apply(this._lightbox,L.array(arguments)),this},hasVariation:function(a){return b.inArray(a,this._options.variation.split(/\s+/))>-1},getActiveImage:function(){var a=this._getActive();return a?a.image:d},getActiveThumb:function(){return this._thumbnails[this._active].image||d},getMousePosition:function(a){return{x:a.pageX-this.$("container").offset().left,y:a.pageY-this.$("container").offset().top}}
3543,addPan:function(a){if(!1!==this._options.imageCrop){a=b(a||this.getActiveImage());var c=this,d=a.width()/2,e=a.height()/2,f=parseInt(a.css("left"),10),g=parseInt(a.css("top"),10),h=f||0,i=g||0,j=0,k=0,l=!1,m=L.timestamp(),n=0,o=0,q=function(b,c,d){if(b>0&&(o=p.round(p.max(-1*b,p.min(0,c))),n!==o))if(n=o,8===t)a.parent()["scroll"+d](-1*o);else{var e={};e[d.toLowerCase()]=o,a.css(e)}},r=function(a){L.timestamp()-m<50||(l=!0,d=c.getMousePosition(a).x,e=c.getMousePosition(a).y)},s=function(b){l&&(j=a.width()-c._stageWidth,k=a.height()-c._stageHeight,f=d/c._stageWidth*j*-1,g=e/c._stageHeight*k*-1,h+=(f-h)/c._options.imagePanSmoothness,i+=(g-i)/c._options.imagePanSmoothness,q(k,i,"Top"),q(j,h,"Left"))};return 8===t&&(a.parent().scrollTop(-1*i).scrollLeft(-1*h),a.css({top:0,left:0})),this.$("stage").off("mousemove",r).on("mousemove",r),this.addTimer("pan"+c._id,s,50,!0),this}},proxy:function(a,b){return"function"!=typeof a?q:(b=b||this,function(){return a.apply(b,L.array(arguments))})},getThemeName:function(){return this.theme.name},removePan:function(){return this.$("stage").off("mousemove"),this.clearTimer("pan"+this._id),this},addElement:function(a){var c=this._dom;return b.each(L.array(arguments),function(a,b){c[b]=L.create("galleria-"+b)}),this},attachKeyboard:function(a){return this._keyboard.attach.apply(this._keyboard,L.array(arguments)),this},detachKeyboard:function(){return this._keyboard.detach.apply(this._keyboard,L.array(arguments)),this},appendChild:function(a,b){return this.$(a).append(this.get(b)||b),this},prependChild:function(a,b){return this.$(a).prepend(this.get(b)||b),this},remove:function(a){return this.$(L.array(arguments).join(",")).remove(),this},append:function(a){var b,c;for(b in a)if(a.hasOwnProperty(b))if(a[b].constructor===Array)for(c=0;a[b][c];c++)this.appendChild(b,a[b][c]);else this.appendChild(b,a[b]);return this},_scaleImage:function(a,c){if(a=a||this._controls.getActive()){var d,e=function(a){b(a.container).children(":first").css({top:p.max(0,L.parseValue(a.image.style.top)),left
3543:p.max(0,L.parseValue(a.image.style.left)),width:L.parseValue(a.image.width),height:L.parseValue(a.image.height)})};return c=b.extend({width:this._stageWidth,height:this._stageHeight,crop:this._options.imageCrop,max:this._options.maxScaleRatio,min:this._options.minScaleRatio,margin:this._options.imageMargin,position:this._options.imagePosition,iframelimit:this._options.maxVideoSize},c),this._options.layerFollow&&!0!==this._options.imageCrop?"function"==typeof c.complete?(d=c.complete,c.complete=function(){d.call(a,a),e(a)}):c.complete=e:b(a.container).children(":first").css({top:0,left:0}),a.scale(c),this}},updateCarousel:function(){return this._carousel.update(),this},resize:function(a,c){"function"==typeof a&&(c=a,a=d),a=b.extend({width:0,height:0},a);var e=this,f=this.$("container");return b.each(a,function(b,c){c||(f[b]("auto"),a[b]=e._getWH()[b])}),b.each(a,function(a,b){f[a](b)}),this.rescale(c)},rescale:function(a,e,f){var g=this;return"function"==typeof a&&(f=a,a=d),function(){g._stageWidth=a||g.$("stage").width(),g._stageHeight=e||g.$("stage").height(),g._options.swipe?(b.each(g._controls.slides,function(a,c){g._scaleImage(c),b(c.container).css("left",g._stageWidth*a)}),g.$("images").css("width",g._stageWidth*g.getDataLength())):g._scaleImage(),g._options.carousel&&g.updateCarousel(),g._controls.frames[g._controls.active]&&g._controls.frames[g._controls.active].scale({width:g._stageWidth,height:g._stageHeight,iframelimit:g._options.maxVideoSize}),g.trigger(c.RESCALE),"function"==typeof f&&f.call(g)}.call(g),this},refreshImage:function(){return this._scaleImage(),this._options.imagePan&&this.addPan(),this},_preload:function(){if(this._options.preload){var a,b,d,e=this.getNext();try{for(b=this._options.preload;b>0;b--)a=new c.Picture,d=this.getData(e),a.preload(this.isFullscreen()&&d.big?d.big:d.image),e=this.getNext(e)}catch(a){}}},show:function(d,e,f){var g=this._options.swipe;if(g||!(this._queue.length>3||!1===d||!this._options.queue&&this._queue.stalled)){if(d=p.max(0,p.min(parseInt(d,10),this.getDataLength()-1)),e=void 0!==e?!!e:d<this.getIndex(),!(f=f||!1)&&c.History)return void c.History.set(d.toString());if(this.finger&&d!==this._active&&(this.finger.to=-d*this.finger.width,this.finger.index=d),this._active=d,g){var h=this.getData(d),j=this;if(!h)return;var k=this.isFullscreen()&&h.big?h.big:h.image||h.iframe,l=this._controls.slides[d],m=l.isCached(k),n=this._thumbnails[d],o={cached:m,index:d,rewind:e,imageTarget:l.image,thumbTarget:n.image,galleriaData:h};this.trigger(b.extend(o,{type:c.LOADSTART})),j.$("container").removeClass("videoplay");var q=function(){j._layers[d].innerHTML=j.getData().layer||"",j.trigger(b.extend(o,{type:c.LOADFINISH})),j._playCheck()};j._preload(),a.setTimeout(function(){l.ready&&b(l.image).attr("src")==k?(j.trigger(b.extend(o,{type:c.IMAGE})),q()):(h.iframe&&!h.image&&(l.isIframe=!0),l.load(k,function(a){o.imageTarget=a.image,j._scaleImage(a,q).trigger(b.extend(o,{type:c.IMAGE})),q()}))},100)}else i.push.call(this._queue,{index:d,rewind:e}),this._queue.stalled||this._show();return this}},_show:function(){var e=this,f=this._queue[0],g=this.getData(f.index);if(g){var h=this.isFullscreen()&&g.big?g.big:g.image||g.iframe,j=this._controls.getActive(),k=this._controls.getNext(),l=k.isCached(h),m=this._thumbnails[f.index],n=function(){b(k.image).trigger("mouseup")};e.$("container").toggleClass("iframe",!!g.isIframe).removeClass("videoplay");var o=function(f,g,h,j,k){return function(){var l;N.active=!1,L.toggleQuality(g.image,e._options.imageQuality),e._layers[e._controls.active].innerHTML="",b(h.container).css({zIndex:0,opacity:0}).show(),b(h.container).find("iframe, .galleria-videoicon").remove(),b(e._controls.frames[e._controls.active].container).hide(),b(g.container).css({zIndex:1,left:0,top:0}).show(),e._controls.swap(),e._options.imagePan&&e.addPan(g.image),(f.iframe&&f.image||f.link||e._options.lightbox||e._options.clicknext)&&b(g.image).css({cursor:"pointer"}).on("mouseup",function(g){if(!("number"==typeof g.which&&g.which>1)){if(f.iframe){e.isPlaying()&&e.pause();var h=e._controls.frames[e._controls.active],i=e._stageWidth,j=e._stageHeight;return b(h.container).css({width:i,height:j,opacity:0}
3543).show().animate({opacity:1},200),void a.setTimeout(function(){h.load(f.iframe+(f.video?"&autoplay=1":""),{width:i,height:j},function(a){e.$("container").addClass("videoplay"),a.scale({width:e._stageWidth,height:e._stageHeight,iframelimit:f.video?e._options.maxVideoSize:d})})},100)}return e._options.clicknext&&!c.TOUCH?(e._options.pauseOnInteraction&&e.pause(),void e.next()):f.link?void(e._options.popupLinks?l=a.open(f.link,"_blank"):a.location.href=f.link):void(e._options.lightbox&&e.openLightbox())}}),e._playCheck(),e.trigger({type:c.IMAGE,index:j.index,imageTarget:g.image,thumbTarget:k.image,galleriaData:f}),i.shift.call(e._queue),e._queue.stalled=!1,e._queue.length&&e._show()}}(g,k,j,f,m);this._options.carousel&&this._options.carouselFollow&&this._carousel.follow(f.index),e._preload(),L.show(k.container),k.isIframe=g.iframe&&!g.image,b(e._thumbnails[f.index].container).addClass("active").siblings(".active").removeClass("active"),e.trigger({type:c.LOADSTART,cached:l,index:f.index,rewind:f.rewind,imageTarget:k.image,thumbTarget:m.image,galleriaData:g}),e._queue.stalled=!0,k.load(h,function(a){var h=b(e._layers[1-e._controls.active]).html(g.layer||"").hide();e._scaleImage(a,{complete:function(a){"image"in j&&L.toggleQuality(j.image,!1),L.toggleQuality(a.image,!1),e.removePan(),e.setInfo(f.index),e.setCounter(f.index),g.layer&&(h.show(),(g.iframe&&g.image||g.link||e._options.lightbox||e._options.clicknext)&&h.css("cursor","pointer").off("mouseup").mouseup(n)),g.video&&g.image&&M(a.container);var i=e._options.transition;if(b.each({initial:null===j.image,touch:c.TOUCH,fullscreen:e.isFullscreen()},function(a,b){if(b&&e._options[a+"Transition"]!==d)return i=e._options[a+"Transition"],!1}),i in N.effects==!1)o();else{var k={prev:j.container,next:a.container,rewind:f.rewind,speed:e._options.transitionSpeed||400};N.active=!0,N.init.call(e,i,k,o)}e.trigger({type:c.LOADFINISH,cached:l,index:f.index,rewind:f.rewind,imageTarget:a.image,thumbTarget:e._thumbnails[f.index].image,galleriaData:e.getData(f.index)})}})})}},getNext:function(a){return a="number"==typeof a?a:this.getIndex(),a===this.getDataLength()-1?0:a+1},getPrev:function(a){return a="number"==typeof a?a:this.getIndex(),0===a?this.getDataLength()-1:a-1},next:function(){return this.getDataLength()>1&&this.show(this.getNext(),!1),this},prev:function(){return this.getDataLength()>1&&this.show(this.getPrev(),!0),this},get:function(a){return a in this._dom?this._dom[a]:null},getData:function(a){return a in this._data?this._data[a]:this._data[this._active]},getDataLength:function(){return this._data.length},getIndex:function(){return"number"==typeof this._active&&this._active},getStageHeight:function(){return this._stageHeight},getStageWidth:function(){return this._stageWidth},getOptions:function(a){return void 0===a?this._options:this._options[a]},setOptions:function(a,c){return"object"==typeof a?b.extend(this._options,a):this._options[a]=c,this},play:function(a){return this._playing=!0,this._playtime=a||this._playtime,this._playCheck(),this.trigger(c.PLAY),this},pause:function(){return this._playing=!1,this.trigger(c.PAUSE),this},playToggle:function(a){return this._playing?this.pause():this.play(a)},isPlaying:function(){return this._playing},isFullscreen:function(){return this._fullscreen.active},_playCheck:function(){var a=this,b=0,d=L.timestamp(),e="play"+this._id;if(this._playing){this.clearTimer(e);var f=function(){if((b=L.timestamp()-d)>=a._playtime&&a._playing)return a.clearTimer(e),void a.next();a._playing&&(a.trigger({type:c.PROGRESS,percent:p.ceil(b/a._playtime*100),seconds:p.floor(b/1e3),milliseconds:b}),a.addTimer(e,f,20))};a.addTimer(e,f,20)}},setPlaytime:function(a){return this._playtime=a,this},setIndex:function(a){return this._active=a,this},setCounter:function(a){if("number"==typeof a?a++:void 0===a&&(a=this.getIndex()+1),this.get("current").innerHTML=a,t){var b=this.$("counter"),c=b.css("opacity");1===parseInt(c,10)?L.removeAlpha(b[0]):this.$("counter").css("opacity",c)}return this},setInfo:function(a){var c=this,d=this.getData(a);return b.each(["title","description"],function(a,b){var e=c.$("info-"+b);d[b]?e[d[b].length?"show":"hide"]().html(d[b]):e.empty().hide()}),this},hasInfo:function(a){var b,c="title description".split(" ");for(b=0;c[b];b++)if(this.getData(a)[c[b]])return!0;return!1},jQuery:function(a){var c=this,d=[];b.each(a.split(","),function(a,e){e=b.trim(e),c.get(e)&&d.push(e)});var e=b(c.get(d.shift()));return b.each(d,function(a,b){e=e.add(c.get(b))}),e},$:function(a){return this.jQuery.apply(this,L.array(arguments))}},b.each(x,function(a,b){var d=/_/.test(b)?b.replace(/_/g,""):b;c[b.toUpperCase()]="galleria."+d}),b.extend(c,{IE9:9===t,IE8:8===t,IE7:7===t,IE6:6===t,IE:t,WEBKIT:/webkit/.test(m),CHROME:/chrome/.test(m),SAFARI:/safari/.test(m)&&!/chrome/.test(m),QUIRK:t&&e.compatMode&&"BackCompat"===e.compatMode,MAC:/mac/.test(navigator.platform.toLowerCase()),OPERA:!!a.opera,IPHONE:/iphone/.test(m),IPAD:/ipad/.test(m),ANDROID:/android/.test(m),TOUCH:"ontouchstart"in e&&s}),c.addTheme=function(d){d.name||c.raise("No theme name specified"),(!d.version||parseInt(10*c.version)>parseInt(10*d.version))&&c.raise("This version of Galleria requires "+d.name+" theme version "+parseInt(10*c.version)/10+" or later",!0),"object"!=typeof d.defaults?d.defaults={}:d.defaults=y(d.defaults);var e,f,g=!1;return"string"==typeof d.css?(b("link").each(function(a,b){if(e=new RegExp(d.css),e.test(b.href))return g=!0,K(d),!1}),g||b(function(){var h=0,i=function(){b("script").each(function(b,c){e=new RegExp("galleria\\."+d.name.toLowerCase()+"\\."),f=new RegExp("galleria\\.io\\/theme\\/"+d.name.toLowerCase()+"\\/(\\d*\\.*)?(\\d*\\.*)?(\\d*\\/)?js"),(e.test(c.src
3543)||f.test(c.src))&&(g=c.src.replace(/[^\/]*$/,"")+d.css,a.setTimeout(function(){L.loadCSS(g,"galleria-theme-"+d.name,function(){K(d)})},1))}),g||(h++>5?c.raise("No theme CSS loaded"):a.setTimeout(i,500))};i()})):K(d),d},c.loadTheme=function(d,e){if(!b("script").filter(function(){return b(this).attr("src")==d}).length){var f,g=!1;return b(a).on("load",function(){g||(f=a.setTimeout(function(){g||c.raise("Galleria had problems loading theme at "+d+". Please check theme path or load manually.",!0)},2e4))}),L.loadScript(d,function(){g=!0,a.clearTimeout(f)}),c}},c.get=function(a){return F[a]?F[a]:"number"!=typeof a?F:void c.raise("Gallery index "+a+" not found")},c.configure=function(a,d){var e={};return"string"==typeof a&&d?(e[a]=d,a=e):b.extend(e,a),c.configure.options=e,b.each(c.get(),function(a,b){b.setOptions(e)}),c},c.configure.options={},c.on=function(a,d){if(a){d=d||q;var e=a+d.toString().replace(/\s/g,"")+L.timestamp();return b.each(c.get(),function(b,c){c._binds.push(e),c.bind(a,d)}),c.on.binds.push({type:a,callback:d,hash:e}),c}},c.on.binds=[],c.run=function(a,d){return b.isFunction(d)&&(d={extend:d}),b(a||"#galleria").galleria(d),c},c.addTransition=function(a,b){return N.effects[a]=b,c},c.utils=L,c.log=function(){var c=L.array(arguments);if(!("console"in a&&"log"in a.console))return a.alert(c.join("<br>"));try{return a.console.log.apply(a.console,c)}catch(d){b.each(c,function(){a.console.log(this)})}},c.ready=function(a){return"function"!=typeof a?c:(b.each(E,function(b,c){a.call(c,c._options)}),c.ready.callbacks.push(a),c)},c.ready.callbacks=[],c.raise=function(a,c){var d=c?"Fatal error":"Error",e={color:"#fff",position:"absolute",top:0,left:0,zIndex:1e5},f=function(a){var f='<div style="padding:4px;margin:0 0 2px;background:#'+(c?"811":"222")+';">'+(c?"<strong>"+d+": </strong>":"")+a+"</div>";b.each(F,function(){var a=this.$("errors"),b=this.$("target");a.length||(b.css("position","relative"),a=this.addElement("errors").appendChild("target","errors").$("errors").css(e)),a.append(f)}), 3544F.length||b("<div>").css(b.extend(e,{position:"fixed"})).append(f).appendTo(u().body)};if(j){if(f(a),c)throw new Error(d+": "+a)}else if(c){if(G)return;G=!0,c=!1,f("Gallery could not load.")}},c.version=1.61,c.getLoadedThemes=function(){return b.map(J,function(a){return a.name})},c.requires=function(a,b){return b=b||"You need to upgrade Galleria to version "+a+" to use one or more components.",c.version<a&&c.raise(b,!0),c},c.Picture=function(a){this.id=a||null,this.image=null,this.container=L.create("galleria-image"),b(this.container).css({overflow:"hidden",position:"relative"}),this.original={width:0,height:0},this.ready=!1,this.isIframe=!1},c.Picture.prototype={cache:{},show:function(){L.show(this.image)},hide:function(){L.moveOut(this.image)},clear:function(){this.image=null},isCached:function(a){return!!this.cache[a]},preload:function(a){var c=b(new Image).on("load",function(a,b){return function(){b[a]=a}}(a,this.cache));a.srcset&&c.attr("srcset",a.srcset),a.sizes&&c.attr("sizes",a.sizes),c.attr("src",a)},load:function(d,e,f){if("function"==typeof e&&(f=e,e=null),this.isIframe){var g="if"+(new Date).getTime(),h=this.image=b("<iframe>",{src:d,frameborder:0,id:g,allowfullscreen:!0,css:{visibility:"hidden"}})[0];return e&&b(h).css(e),b(this.container).find("iframe,img").remove(),this.container.appendChild(this.image),b("#"+g).on("load",function(c,d){return function(){a.setTimeout(function(){b(c.image).css("visibility","visible"),"function"==typeof d&&d.call(c,c)},10)}}(this,f)),this.container}this.image=new Image,c.IE8&&b(this.image).css("filter","inherit"),c.IE||c.CHROME||c.SAFARI||b(this.image).css("image-rendering","optimizequality");var i=!1,j=!1,k=b(this.container),m=b(this.image),n=function(){i?l?b(this).attr("src",l):c.raise("Image not found: "+d):(i=!0,a.setTimeout(function(a,b){return function(){a.attr("src",b+(b.indexOf("?")>-1?"&":"?")+L.timestamp())}}(b(this),d),50))},o=function(d,f,g){return function(){var h=function(){b(this).off("load"),d.original=e||{height:this.height,width:this.width},c.HAS3D&&(this.style.MozTransform=this.style.webkitTransform="translate3d(0,
35440,0)"),k.append(this),d.cache[g]=g,"function"==typeof f&&a.setTimeout(function(){f.call(d,d)},1)};this.width&&this.height?h.call(this):function(a){L.wait({until:function(){return a.width&&a.height},success:function(){h.call(a)},error:function(){j?c.raise("Could not extract width/height from image: "+a.src+". Traced measures: width:"+a.width+"px, height: "+a.height+"px."):(b(new Image).on("load",o).attr("src",a.src),j=!0)},timeout:100})}(this)}}(this,f,d);return k.find("iframe,img").remove(),m.css("display","block"),L.hide(this.image),b.each("minWidth minHeight maxWidth maxHeight".split(" "),function(a,b){m.css(b,/min/.test(b)?"0":"none")}),m.on("load",o).on("error",n),d.srcset&&m.attr("srcset",d.srcset),d.sizes&&m.attr("sizes",d.sizes),m.attr("src",d),this.container},scale:function(a){var e=this;if(a=b.extend({width:0,height:0,min:d,max:d,margin:0,complete:q,position:"center",crop:!1,canvas:!1,iframelimit:d},a),this.isIframe){var f,g,h=a.width,i=a.height;if(a.iframelimit){var j=p.min(a.iframelimit/h,a.iframelimit/i);j<1?(f=h*j,g=i*j,b(this.image).css({top:i/2-g/2,left:h/2-f/2,position:"absolute"})):b(this.image).css({top:0,left:0})}b(this.image).width(f||h).height(g||i).removeAttr("width").removeAttr("height"),b(this.container).width(h).height(i),a.complete.call(e,e);try{this.image.contentWindow&&b(this.image.contentWindow).trigger("resize")}catch(a){}return this.container}if(!this.image)return this.container;var k,l,m,n=b(e.container);return L.wait({until:function(){return k=a.width||n.width()||L.parseValue(n.css("width")),l=a.height||n.height()||L.parseValue(n.css("height")),k&&l},success:function(){var c=(k-2*a.margin)/e.original.width,d=(l-2*a.margin)/e.original.height,f=p.min(c,d),g=p.max(c,d),h={true:g,width:c,height:d,false:f,landscape:e.original.width>e.original.height?g:f,portrait:e.original.width<e.original.height?g:f},i=h[a.crop.toString()],j="";a.max&&(i=p.min(a.max,i)),a.min&&(i=p.max(a.min,i)),b.each(["width","height"],function(a,c){b(e.image)[c](e[c]=e.image[c]=p.round(e.original[c]*i))}),b(e.container).width(k).height(l),a.canvas&&H&&(H.elem.width=e.width,H.elem.height=e.height,j=e.image.src+":"+e.width+"x"+e.height,e.image.src=H.cache[j]||function(a){H.context.drawImage(e.image,0,0,e.original.width*i,e.original.height*i);try{return m=H.elem.toDataURL(),H.length+=m.length,H.cache[a]=m,m}catch(a){return e.image.src}}(j));var n={},o={},q=function(a,c,d){var f=0;if(/\%/.test(a)){var g=parseInt(a,10)/100,h=e.image[c]||b(e.image)[c]();f=p.ceil(-1*h*g+d*g)}else f=L.parseValue(a);return f},r={top:{top:0},left:{left:0},right:{left:"100%"},bottom:{top:"100%"}};b.each(a.position.toLowerCase().split(" "),function(a,b){"center"===b&&(b="50%"),n[a?"top":"left"]=b}),b.each(n,function(a,c){r.hasOwnProperty(c)&&b.extend(o,r[c])}),n=n.top?b.extend(n,o):o,n=b.extend({top:"50%",left:"50%"},n),b(e.image).css({position:"absolute",top:q(n.top,"height",l),left:q(n.left,"width",k)}),e.show(),e.ready=!0,a.complete.call(e,e)},error:function(){c.raise("Could not scale image: "+e.image.src)},timeout:1e3}),this}},b.extend(b.easing,{galleria:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},galleriaIn:function(a,b,c,d,e){return d*(b/=e)*b+c},galleriaOut:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}}),c.Finger=function(){var d=(p.abs,c.HAS3D=function(){var a,c,d=e.createElement("p"),f=["webkit","O","ms","Moz",""],g=0,h="transform";for(u().html.insertBefore(d,null);f[g];g++)c=f[g]?f[g]+"Transform":h,void 0!==d.style[c]&&(d.style[c]="translate3d(1px,1px,1px)",a=b(d).css(f[g]?"-"+f[g].toLowerCase()+"-"+h:h));return u().html.removeChild(d),void 0!==a&&a.length>0&&"none"!==a}()),g=function(){var b="RequestAnimationFrame";return a.requestAnimationFrame||a["webkit"+b]||a["moz"+b]||a["o"+b]||a["ms"+b]||function(b){a.setTimeout(b,1e3/60)}}(),h=function(c,e){if(this.config={start:0,duration:500,onchange:function(){},oncomplete:function(){},easing:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c}},this.easeout=function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},c.children.length){var f=this;b.extend(this.config,e),this.elem=c,this.child=c.children[0],this.to=this.pos=0,this.touching=!1,this.start={},this.index=this.config.start,this.anim=0,this.easing=this.config.easing,d||(this.child.style.position="absolute",this.elem.style.position="relative"),b.each(["ontouchstart","ontouchmove","ontouchend","setup"],function(a,b){f[b]=function(a){return function(){a.apply(f,arguments)}}(f[b])}),this.setX=function(){var a=f.child.style;if(!d)return void(a.left=f.pos+"px");a.MozTransform=a.webkitTransform=a.transform="translate3d("+f.pos+"px,0,0)"},b(c).on("touchstart",this.ontouchstart),b(a).on("resize",this.setup),b(a).on("orientationchange",this.setup),this.setup(),function a(){g(a),f.loop.call(f)}()}};return h.prototype={constructor:h,setup:function(){this.width=b(this.elem).width(),this.length=p.ceil(b(this.child).width()/this.width),0!==this.index&&(this.index=p.max(0,p.min(this.index,this.length-1)),this.pos=this.to=-this.width*this.index)},setPosition:function(a){this.pos=a,this.to=a},ontouchstart:function(a){var b=a.originalEvent.touches;this.start={pageX:b[0].pageX,pageY:b[0].pageY,time:+new Date},this.isScrolling=null,this.touching=!0,this.deltaX=0,f.on("touchmove",this.ontouchmove),f.on("touchend",this.ontouchend)},ontouchmove:function(a){var b=a.originalEvent.touches;b&&b.length>1||a.scale&&1!==a.scale||(this.deltaX=b[0].pageX-this.start.pageX,null===this.isScrolling&&(this.isScrolling=!!(this.isScrolling||p.abs(this.deltaX)<p.abs(b[0].pageY-this.start.pageY))),this.isScrolling||(a.preventDefault(),this.deltaX/=!this.index&&this.deltaX>0||this.index==this.length-1&&this.deltaX<0?p.abs(this.deltaX)/this.width+1.8:1,this.to=this.deltaX-this.index*this.width),a.stopPropagation())},ontouchend:function(a){this.touching=!1;var b=+new Date-this.start.time<250&&p.abs(this.deltaX)>40||p.abs(this.deltaX)>this.width/2,c=!this.index&&this.deltaX>0||this.index==this.length-1&&this.deltaX<0;this.isScrolling||this.show(this.index+(b&&!c?this.deltaX<0?1:-1:0)),f.off("touchmove",this.ontouchmove),f.off("touchend",this.ontouchend)},show:function(a){a!=this.index?this.config.onchange.call(this,a):this.to=-a*this.width},moveTo:function(a){a!=this.index&&(this.pos=this.to=-a*this.width,this.index=a)},loop:function(){var a=this.to-this.pos,b=1;if(this.width&&a&&(b=p.max(.5,p.min(1.5,p.abs(a/this.width)))),this.touching||p.abs(a)<=1)this.pos=this.to,a=0,this.anim&&!this.touching&&this.config.oncomplete(this.index),this.anim=0,this.easing=this.config.easing;else{this.anim||(this.anim={start:this.pos,time:+new Date,distance:a,factor:b,destination:this.to});var c=+new Date-this.anim.time,d=this.config.duration*this.anim.factor;if(c>d||this.anim.destination!=this.to)return this.anim=0,void(this.easing=this.easeout);this.pos=this.easing(null,c,this.anim.start,this.anim.distance,d)}this.setX()}},h}(),b.fn.galleria=function(a){var d=this.selector;return b(this).length?this.each(function(){b.data(this,"galleria")&&(b.data(this,"galleria").destroy(),b(this).find("*").hide()),b.data(this,"galleria",(new c).init(this,a))}):(b(function(){b(d).length?b(d).galleria(a):c.utils.wait({until:function(){return b(d).length},success:function(){b(d).galleria(a)},error:function(){c.raise('Init failed: Galleria could not find the element "'+d+'".')},timeout:5e3})}),this)},c});;
3545/*! http://responsiveslides.com v1.54 by @viljamis */ 3546(function(c,I,B){c.fn.responsiveSlides=function(l){var a=c.extend({auto:!0,speed:500,timeout:4E3,pager:!1,nav:!1,random:!1,pause:!1,pauseControls:!0,prevText:"Previous",nextText:"Next",maxwidth:"",navContainer:"",manualControls:"",namespace:"rslides",before:c.noop,after:c.noop},l);return this.each(function(){B++;var f=c(this),s,r,t,m,p,q,n=0,e=f.children(),C=e.size(),h=parseFloat(a.speed),D=parseFloat(a.timeout),u=parseFloat(a.maxwidth),g=a.namespace,d=g+B,E=g+"_nav "+d+"_nav",v=g+"_here",j=d+"_on", 3547w=d+"_s",k=c("<ul class='"+g+"_tabs "+d+"_tabs' />"),x={"float":"left",position:"relative",opacity:1,zIndex:2},y={"float":"none",position:"absolute",opacity:0,zIndex:1},F=function(){var b=(document.body||document.documentElement).style,a="transition";if("string"===typeof b[a])return!0;s=["Moz","Webkit","Khtml","O","ms"];var a=a.charAt(0).toUpperCase()+a.substr(1),c;for(c=0;c<s.length;c++)if("string"===typeof b[s[c]+a])return!0;return!1}(),z=function(b){a.before(b);F?(e.removeClass(j).css(y).eq(b).addClass(j).css(x), 3548n=b,setTimeout(function(){a.after(b)},h)):e.stop().fadeOut(h,function(){c(this).removeClass(j).css(y).css("opacity",1)}).eq(b).fadeIn(h,function(){c(this).addClass(j).css(x);a.after(b);n=b})};a.random&&(e.sort(function(){return Math.round(Math.random())-0.5}),f.empty().append(e));e.each(function(a){this.id=w+a});f.addClass(g+" "+d);l&&l.maxwidth&&f.css("max-width",u);e.hide().css(y).eq(0).addClass(j).css(x).show();F&&e.show().css({"-webkit-transition":"opacity "+h+"ms ease-in-out","-moz-transition":"opacity "+ 3549h+"ms ease-in-out","-o-transition":"opacity "+h+"ms ease-in-out",transition:"opacity "+h+"ms ease-in-out"});
3549if(1<e.size()){if(D<h+100)return;if(a.pager&&!a.manualControls){var A=[];e.each(function(a){a+=1;A+="<li><a href='#' class='"+w+a+"'>"+a+"</a></li>"});k.append(A);l.navContainer?c(a.navContainer).append(k):f.after(k)}a.manualControls&&(k=c(a.manualControls),k.addClass(g+"_tabs "+d+"_tabs"));(a.pager||a.manualControls)&&k.find("li").each(function(a){c(this).addClass(w+(a+1))});if(a.pager||a.manualControls)q= 3550k.find("a"),r=function(a){q.closest("li").removeClass(v).eq(a).addClass(v)};a.auto&&(t=function(){p=setInterval(function(){e.stop(!0,!0);var b=n+1<C?n+1:0;(a.pager||a.manualControls)&&r(b);z(b)},D)},t());m=function(){a.auto&&(clearInterval(p),t())};a.pause&&f.hover(function(){clearInterval(p)},function(){m()});if(a.pager||a.manualControls)q.bind("click",function(b){b.preventDefault();a.pauseControls||m();b=q.index(this);n===b||c("."+j).queue("fx").length||(r(b),z(b))}).eq(0).closest("li").addClass(v), 3551a.pauseControls&&q.hover(function(){clearInterval(p)},function(){m()});if(a.nav){g="<a href='#' class='"+E+" prev'>"+a.prevText+"</a><a href='#' class='"+E+" next'>"+a.nextText+"</a>";l.navContainer?c(a.navContainer).append(g):f.after(g);var d=c("."+d+"_nav"),G=d.filter(".prev");d.bind("click",function(b){b.preventDefault();b=c("."+j);if(!b.queue("fx").length){var d=e.index(b);b=d-1;d=d+1<C?n+1:0;z(c(this)[0]===G[0]?b:d);if(a.pager||a.manualControls)r(c(this)[0]===G[0]?b:d);a.pauseControls||m()}}); 3552a.pauseControls&&d.hover(function(){clearInterval(p)},function(){m()})}}if("undefined"===typeof document.body.style.maxWidth&&l.maxwidth){var H=function(){f.css("width","100%");f.width()>u&&f.css("width",u)};H();c(I).bind("resize",function(){H()})}})}})(jQuery,this,0); 3553; 3554var slickr_flickr_slideshow_timer; 3555var slickr_flickr_slideshow_timer_on = false; 3556 3557jQuery.noConflict(); 3558 3559function slickr_flickr_next_slide(obj) { 3560 var j = jQuery(obj); 3561 if (j.children('div').length == 1) return ; 3562 options = j.parent().data("options"); 3563 if (('autoplay' in options) && (options['autoplay'] == false)) return; 3564 var $active = j.children('div.active'); 3565 if ( $active.length == 0 ) $active = j.children('div:last'); 3566 var $next = $active.next().length ? $active.next() : j.children('div:first'); 3567 3568 $active.addClass('last-active'); 3569 $next.css({opacity: 0.0}) 3570 .addClass('active') 3571 .animate({opacity: 1.0}, options['transition'], function() { 3572 $active.removeClass('active last-active'); 3573 }); 3574} 3575 3576function slickr_flickr_next_slides() { 3577 jQuery('.slickr-flickr-slideshow').each(function(index){ 3578 s=jQuery(this); 3579 if (! s.hasClass('responsive')) slickr_flickr_next_slide(s) ; 3580 }); 3581} 3582 3583function slickr_flickr_set_slideshow_height(slideshow,imgheight,divheight) { 3584 var s = jQuery(slideshow); 3585 s.find('div img').css("max-height",imgheight+"px"); 3586 s.css("height", divheight+"px"); 3587} 3588 3589function slickr_flickr_set_slideshow_width(slideshow,width) { 3590 var s = jQuery(slideshow); 3591 s.find('div img').css("max-width",width+"px"); 3592 s.css("width",width+"px"); 3593} 3594 3595function slickr_flickr_set_slideshow_click(slideshow,link,target) { 3596 var s = jQuery(slideshow); 3597 if (link=='next') 3598 s.unbind('click').click( function() { slickr_flickr_next_slide(s) ; }); 3599 else if (link=='toggle') 3600 s.unbind('click').click( function() { slickr_flickr_toggle_slideshows() ; }); 3601 else 3602 if (target == "_self") 3603 s.unbind('click').click( function() { window.location = link.replace(/\\/g, ''); }); 3604 else 3605 s.unbind('click').click( function() { window.open(link.replace(/\\/g, ''),target); }); 3606} 3607 3608function slickr_flickr_toggle_slideshows() { 3609 if (slickr_flickr_slideshow_timer_on) 3610 slickr_flickr_stop_slideshows(); 3611 else 3612 slickr_flickr_start_slideshows(); 3613} 3614 3615function slickr_flickr_stop_slideshows() { 3616 clearTimeout(slickr_flickr_slideshow_timer); 3617 slickr_flickr_slideshow_timer_on = false; 3618} 3619 3620function slickr_flickr_start_slideshows() { 3621 var mindelay = 0; 3622 var mintimeout = 0; 3623 jQuery('.slickr-flickr-slideshow').each(function(index){ 3624 var s =jQuery(this); 3625 options = s.parent().data('options'); 3626 if (options) { 3627 if (s.hasClass('responsive')) { 3628 if (('timeout' in options) && (options['timeout'] != '')) { 3629 timeout = options['timeout']; 3630 if ((!(timeout == undefined)) && ((mintimeout == 0) || (timeout < mintimeout))) mintimeout = timeout; 3631 } 3632 } else { 3633 if (('link' in options) && (options['link'] != '')) slickr_flickr_set_slideshow_click(s,options['link'],options['target']); 3634 if (('width' in options) && (options['width'] != '')) slickr_flickr_set_slideshow_width(s,options['width']); 3635 if (('height' in options) && (options['height'] != '')) { 3636 imgheight = parseInt(options['height']); 3637 divheight = imgheight+ (s.hasClass("nocaptions") ? 0 : 30); 3638 if (s.hasClass("descriptions")) divheight += 50; 3639 slickr_flickr_set_slideshow_height(s,imgheight,divheight); 3640 } 3641 if (('delay' in options) && (options['delay'] != '')) {
3642 delay = options['delay']; 3643 if ((!(delay == undefined)) && ((mindelay == 0) || (delay < mindelay))) mindelay = delay; 3644 } 3645 } 3646 } 3647 }); 3648 if (mindelay > 0) { 3649 slickr_flickr_stop_slideshows(); 3650 slickr_flickr_slideshow_timer = setInterval("slickr_flickr_next_slides()",mindelay); 3651 slickr_flickr_slideshow_timer_on = true; 3652 } 3653 if (mintimeout > 0) { 3654 jQuery('.slickr-flickr-slideshow.responsive').each(function(index){ 3655 var s =jQuery(this); 3656 options = s.parent().data('options'); 3657 if (options) { 3658 options['timeout'] = mintimeout; 3659 s.find('ul').responsiveSlides(options); 3660 } 3661 }); 3662 } 3663 3664} 3665 3666function slickr_flickr_start() { 3667 if (jQuery('.slickr-flickr-galleria').length > 0) { 3668 jQuery(".slickr-flickr-galleria").each(function(index){ 3669 var $options = jQuery(this).parent().data("options"); 3670 var lazy = ('thumbnails' in $options) && ($options['thumbnails'] == 'lazy'); 3671 jQuery(this).galleria($options); 3672 if (lazy) Galleria.ready( function(options) { this.lazyLoadChunks( 10, 200); } ); 3673 }); 3674 } 3675 3676 jQuery(".slickr-flickr-gallery").find('img').hover( 3677 function(){ jQuery(this).addClass('hover');}, 3678 function(){ jQuery(this).removeClass('hover');}); 3679 3680 jQuery(".slickr-flickr-gallery").each( function (index) { 3681 $options = jQuery(this).parent().data("options"); 3682 if ($options && ('border' in $options) && ($options['border'] != '')) { 3683 $id = jQuery(this).parent().attr('id'); 3684 jQuery('<style type="text/css">#'+$id+' img.hover{ background-color:'+$options['border']+'; }</style>').appendTo('head'); 3685 } 3686 if (jQuery(this).hasClass('sf-lightbox')) { 3687 jQuery(this).find('a').each( function (ind) { 3688 jQuery(this).click( function(e) { 3689 e.preventDefault(); 3690 e.stopPropagation(); 3691 var lg = jQuery(this).closest('.sf-lightbox').parent(); 3692 var options = lg.data("options"); 3693 options['start'] = ind; 3694 lg.lightGallery(options); 3695 } ); 3696 }); 3697 } 3698 }); 3699 3700 slickr_flickr_start_slideshows(); 3701 3702};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.