1/** 2 * Name: Highslide JS 3 * Version: 4.1.13 (2011-10-06) 4 * Config: default +slideshow +positioning +transitions +viewport +thumbstrip 5 * Author: Torstein Hønsi 6 * Support: www.highslide.com/support 7 * License: www.highslide.com/#license 8 */ 9if (!hs) { var hs = { 10// Language strings 11lang : { 12 cssDirection: 'ltr', 13 loadingText : 'Loading...', 14 loadingTitle : 'Click to cancel', 15 focusTitle : 'Click to bring to front', 16 fullExpandTitle : 'Expand to actual size (f)', 17 creditsText : '', 18 creditsTitle : '', 19 previousText : 'Previous', 20 nextText : 'Next', 21 moveText : 'Move', 22 closeText : 'Close', 23 closeTitle : 'Close (esc)', 24 resizeTitle : 'Resize', 25 playText : 'Play', 26 playTitle : 'Play slideshow (spacebar)', 27 pauseText : 'Pause', 28 pauseTitle : 'Pause slideshow (spacebar)', 29 previousTitle : 'Previous (arrow left)', 30 nextTitle : 'Next (arrow right)', 31 moveTitle : 'Move', 32 fullExpandText : '1:1', 33 number: 'Image %1 of %2', 34 restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' 35}, 36// See http://highslide.com/ref for examples of settings 37graphicsDir : 'highslide/graphics/', 38expandCursor : 'zoomin.cur', // null disables 39restoreCursor : 'zoomout.cur', // null disables 40expandDuration : 250, // milliseconds 41restoreDuration : 250, 42marginLeft : 15, 43marginRight : 15, 44marginTop : 15, 45marginBottom : 15, 46zIndexCounter : 1001, // adjust to other absolutely positioned elements 47loadingOpacity : 0.75, 48allowMultipleInstances: true, 49numberOfImagesToPreload : 5, 50outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only 51outlineStartOffset : 3, // ends at 10 52padToMinWidth : false, // pad the popup width to make room for wide caption 53fullExpandPosition : 'bottom right', 54fullExpandOpacity : 1, 55showCredits : true, // you can set this to false if you want 56creditsHref : 'http://highslide.com/', 57creditsTarget : '_self', 58enableKeyListener : true, 59openerTagNames : ['a'], // Add more to allow slideshow indexing 60transitions : [], 61transitionDuration: 250, 62dimmingOpacity: 0, // Lightbox style dimming background 63dimmingDuration: 50, // 0 for instant dimming 64 65anchor : 'auto', // where the image expands from 66align : 'auto', // position in the client (overrides anchor) 67targetX: null, // the id of a target element 68targetY: null, 69dragByHeading: true, 70minWidth: 200, 71minHeight: 200, 72allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight 73outlineType : 'drop-shadow', // set null to disable outlines 74skin : { 75 controls: 76 '<div class="highslide-controls"><ul>'+ 77 '<li class="highslide-previous">'+ 78 '<a href="#" title="{hs.lang.previousTitle}">'+ 79 '<span>{hs.lang.previousText}</span></a>'+ 80 '</li>'+ 81 '<li class="highslide-play">'+ 82 '<a href="#" title="{hs.lang.playTitle}">'+ 83 '<span>{hs.lang.playText}</span></a>'+ 84 '</li>'+ 85 '<li class="highslide-pause">'+ 86 '<a href="#" title="{hs.lang.pauseTitle}">'+ 87 '<span>{hs.lang.pauseText}</span></a>'+ 88 '</li>'+ 89 '<li class="highslide-next">'+ 90 '<a href="#" title="{hs.lang.nextTitle}">'+ 91 '<span>{hs.lang.nextText}</span></a>'+ 92 '</li>'+ 93 '<li class="highslide-move">'+ 94 '<a href="#" title="{hs.lang.moveTitle}">'+ 95 '<span>{hs.lang.moveText}</span></a>'+ 96 '</li>'+ 97 '<li class="highslide-full-expand">'+ 98 '<a href="#" title="{hs.lang.fullExpandTitle}">'+ 99 '<span>{hs.lang.fullExpandText}</span></a>'+ 100 '</li>'+ 101 '<li class="highslide-close">'+ 102 '<a href="#" title="{hs.lang.closeTitle}" >'+ 103 '<span>{hs.lang.closeText}</span></a>'+ 104 '</li>'+ 105 '</ul></div>' 106}, 107// END OF YOUR SETTINGS 108 109 110// declare internal properties 111preloadTheseImages : [], 112continuePreloading: true, 113expanders : [], 114overrides : [ 115 'allowSizeReduction', 116 'useBox', 117 'anchor', 118 'align', 119 'targetX', 120 'targetY', 121 'outlineType', 122 'outlineWhileAnimating', 123 'captionId', 124 'captionText', 125 'captionEval', 126 'captionOverlay', 127 'headingId', 128 'headingText', 129 'headingEval', 130 'headingOverlay', 131 'creditsPosition', 132 'dragByHeading',
133 'autoplay', 134 'numberPosition', 135 'transitions', 136 'dimmingOpacity', 137 138 'width', 139 'height', 140 141 'wrapperClassName', 142 'minWidth', 143 'minHeight', 144 'maxWidth', 145 'maxHeight', 146 'pageOrigin', 147 'slideshowGroup', 148 'easing', 149 'easingClose', 150 'fadeInOut', 151 'src' 152], 153overlays : [], 154idCounter : 0, 155oPos : { 156 x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], 157 y: ['above', 'top', 'middle', 'bottom', 'below'] 158}, 159mouse: {}, 160headingOverlay: {}, 161captionOverlay: {}, 162timers : [], 163 164slideshows : [], 165 166pendingOutlines : {}, 167clones : {}, 168onReady: [], 169uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : 170 parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), 171ie : (document.all && !window.opera), 172//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? 173safari : /Safari/.test(navigator.userAgent), 174geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), 175 176$ : function (id) { 177 if (id) return document.getElementById(id); 178}, 179 180push : function (arr, val) { 181 arr[arr.length] = val; 182}, 183 184createElement : function (tag, attribs, styles, parent, nopad) { 185 var el = document.createElement(tag); 186 if (attribs) hs.extend(el, attribs); 187 if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); 188 if (styles) hs.setStyles(el, styles); 189 if (parent) parent.appendChild(el); 190 return el; 191}, 192 193extend : function (el, attribs) { 194 for (var x in attribs) el[x] = attribs[x]; 195 return el; 196}, 197 198setStyles : function (el, styles) { 199 for (var x in styles) { 200 if (hs.ieLt9 && x == 'opacity') { 201 if (styles[x] > 0.99) el.style.removeAttribute('filter'); 202 else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; 203 } 204 else el.style[x] = styles[x]; 205 } 206}, 207animate: function(el, prop, opt) { 208 var start, 209 end, 210 unit; 211 if (typeof opt != 'object' || opt === null) { 212 var args = arguments; 213 opt = { 214 duration: args[2], 215 easing: args[3], 216 complete: args[4] 217 }; 218 } 219 if (typeof opt.duration != 'number') opt.duration = 250; 220 opt.easing = Math[opt.easing] || Math.easeInQuad; 221 opt.curAnim = hs.extend({}, prop); 222 for (var name in prop) { 223 var e = new hs.fx(el, opt , name ); 224 225 start = parseFloat(hs.css(el, name)) || 0; 226 end = parseFloat(prop[name]); 227 unit = name != 'opacity' ? 'px' : ''; 228 229 e.custom( start, end, unit ); 230 } 231}, 232css: function(el, prop) { 233 if (el.style[prop]) { 234 return el.style[prop]; 235 } else if (document.defaultView) { 236 return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); 237 238 } else { 239 if (prop == 'opacity') prop = 'filter'; 240 var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; 241 if (prop == 'filter') 242 val = val.replace(/alpha\(opacity=([0-9]+)\)/, 243 function (a, b) { return b / 100 }); 244 return val === '' ? 1 : val; 245 } 246}, 247 248getPageSize : function () { 249 var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' 250 ? d.documentElement : d.body, 251 ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); 252 253 var width = ieLt9 ? iebody.clientWidth : 254 (d.documentElement.clientWidth || self.innerWidth), 255 height = ieLt9 ? iebody.clientHeight : self.innerHeight; 256 hs.page = { 257 width: width, 258 height: height, 259 scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, 260 scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset 261 }; 262 return hs.page; 263}, 264 265getPosition : function(el) { 266 var p = { x: el.offsetLeft, y: el.offsetTop }; 267 while (el.offsetParent) { 268 el = el.offsetParent; 269 p.x += el.offsetLeft; 270 p.y += el.offsetTop; 271 if (el != document.body && el != document.documentElement) { 272 p.x -= el.scrollLeft; 273 p.y -= el.scrollTop; 274 } 275 } 276 return p; 277}, 278 279expand : function(a, params, custom, type) { 280 if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); 281 if (typeof a.getParams == 'function') return params; 282 try { 283 new hs.Expander(a, params, custom); 284 return false; 285 } catch (e) { return true; } 286}, 287getElementByClass : function (el, tagName, className) { 288 var els = el.getElementsByTagName(tagName); 289 for (var i = 0; i < els.length; i++) { 290 if ((new RegExp(className)).test(els[i].className)) { 291 return els[i]; 292 } 293 } 294 return null; 295}, 296replaceLang : function(s) { 297 s = s.replace(/\s/g, ' '); 298 var re = /{hs\.lang\.([^}]+)\}/g, 299 matches = s.match(re), 300 lang; 301 if (matches) for (var i = 0; i < matches.length; i++) { 302 lang = matches[i].replace(re, "$1"); 303 if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); 304 } 305 return s; 306}, 307 308 309focusTopmost : function() { 310 var topZ = 0, 311 topmostKey = -1, 312 expanders = hs.expanders, 313 exp, 314 zIndex; 315 for (var i = 0; i < expanders.length; i++) { 316 exp = expanders[i];
317 if (exp) { 318 zIndex = exp.wrapper.style.zIndex; 319 if (zIndex && zIndex > topZ) { 320 topZ = zIndex; 321 topmostKey = i; 322 } 323 } 324 } 325 if (topmostKey == -1) hs.focusKey = -1; 326 else expanders[topmostKey].focus(); 327}, 328 329getParam : function (a, param) { 330 a.getParams = a.onclick; 331 var p = a.getParams ? a.getParams() : null; 332 a.getParams = null; 333 334 return (p && typeof p[param] != 'undefined') ? p[param] : 335 (typeof hs[param] != 'undefined' ? hs[param] : null); 336}, 337 338getSrc : function (a) { 339 var src = hs.getParam(a, 'src'); 340 if (src) return src; 341 return a.href; 342}, 343 344getNode : function (id) { 345 var node = hs.$(id), clone = hs.clones[id], a = {}; 346 if (!node && !clone) return null; 347 if (!clone) { 348 clone = node.cloneNode(true); 349 clone.id = ''; 350 hs.clones[id] = clone; 351 return node; 352 } else { 353 return clone.cloneNode(true); 354 } 355}, 356 357discardElement : function(d) { 358 if (d) hs.garbageBin.appendChild(d); 359 hs.garbageBin.innerHTML = ''; 360}, 361dim : function(exp) { 362 if (!hs.dimmer) { 363 isNew = true; 364 hs.dimmer = hs.createElement ('div', { 365 className: 'highslide-dimming highslide-viewport-size', 366 owner: '', 367 onclick: function() { 368 369 hs.close(); 370 } 371 }, { 372 visibility: 'visible', 373 opacity: 0 374 }, hs.container, true); 375 376 if (/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)) { 377 var body = document.body; 378 function pixDimmerSize() { 379 hs.setStyles(hs.dimmer, { 380 width: body.scrollWidth +'px', 381 height: body.scrollHeight +'px' 382 }); 383 } 384 pixDimmerSize(); 385 hs.addEventListener(window, 'resize', pixDimmerSize); 386 } 387 } 388 hs.dimmer.style.display = ''; 389 390 var isNew = hs.dimmer.owner == ''; 391 hs.dimmer.owner += '|'+ exp.key; 392 393 if (isNew) { 394 if (hs.geckoMac && hs.dimmingGeckoFix) 395 hs.setStyles(hs.dimmer, { 396 background: 'url('+ hs.graphicsDir + 'geckodimmer.png)', 397 opacity: 1 398 }); 399 else 400 hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration); 401 } 402}, 403undim : function(key) { 404 if (!hs.dimmer) return; 405 if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, ''); 406 407 if ( 408 (typeof key != 'undefined' && hs.dimmer.owner != '') 409 || (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity')) 410 ) return; 411 412 if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none'; 413 else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() { 414 hs.dimmer.style.display = 'none'; 415 }); 416}, 417transit : function (adj, exp) { 418 var last = exp || hs.getExpander(); 419 exp = last; 420 if (hs.upcoming) return false; 421 else hs.last = last; 422 hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 423 try { 424 hs.upcoming = adj; 425 adj.onclick(); 426 } catch (e){ 427 hs.last = hs.upcoming = null; 428 } 429 try { 430 if (!adj || exp.transitions[1] != 'crossfade') 431 exp.close(); 432 } catch (e) {} 433 return false; 434}, 435 436previousOrNext : function (el, op) { 437 var exp = hs.getExpander(el); 438 if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); 439 else return false; 440}, 441 442previous : function (el) { 443 return hs.previousOrNext(el, -1); 444}, 445 446next : function (el) { 447 return hs.previousOrNext(el, 1); 448}, 449 450keyHandler : function(e) { 451 if (!e) e = window.event; 452 if (!e.target) e.target = e.srcElement; // ie 453 if (typeof e.target.form != 'undefined') return true; // form element has focus 454 var exp = hs.getExpander(); 455 456 var op = null; 457 switch (e.keyCode) { 458 case 70: // f 459 if (exp) exp.doFullExpand(); 460 return true; 461 case 32: // Space 462 op = 2; 463 break; 464 case 34: // Page Down 465 case 39: // Arrow right 466 case 40: // Arrow down 467 op = 1; 468 break; 469 case 8: // Backspace 470 case 33: // Page Up 471 case 37: // Arrow left 472 case 38: // Arrow up 473 op = -1; 474 break; 475 case 27: // Escape 476 case 13: // Enter 477 op = 0; 478 } 479 if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 480 if (!hs.enableKeyListener) return true; 481 482 if (e.preventDefault) e.preventDefault(); 483 else e.returnValue = false; 484 if (exp) { 485 if (op == 0) { 486 exp.close(); 487 } else if (op == 2) { 488 if (exp.slideshow) exp.slideshow.hitSpace(); 489 } else { 490 if (exp.slideshow) exp.slideshow.pause(); 491 hs.previousOrNext(exp.key, op); 492 } 493 return false; 494 } 495 } 496 return true; 497}, 498 499 500registerOverlay : function (overlay) { 501 hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); 502}, 503 504 505addSlideshow : function (options) { 506 var sg = options.slideshowGroup; 507 if (typeof sg == 'object') { 508 for (var i = 0; i < sg.length; i++) { 509 var o = {}; 510 for (var x in options) o[x] = options[x]; 511 o.slideshowGroup = sg[i]; 512 hs.push(hs.slideshows, o); 513 } 514 } else { 515 hs.push(hs.slideshows, options); 516 } 517}, 518 519getWrapperKey : function (element, expOnly) { 520 var el, re = /^highslide-wrapper-([0-9]+)$/; 521 // 1. look in open expanders 522 el = element; 523 while (el.parentNode) { 524 if (el.hsKey !== undefined) return el.hsKey; 525 if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); 526 el = el.parentNode; 527 } 528 // 2. look in thumbnail 529 if (!expOnly) { 530 el = element; 531 while (el.parentNode) { 532 if (el.tagName && hs.isHsAnchor(el)) { 533 for (var key = 0; key < hs.expanders.length; key++) { 534 var exp = hs.expanders[key]; 535 if (exp && exp.a == el) return key; 536 } 537 } 538 el = el.parentNode; 539 } 540 } 541 return null; 542}, 543 544getExpander : function (el, expOnly) { 545 if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; 546 if (typeof el == 'number') return hs.expanders[el] || null; 547 if (typeof el == 'string') el = hs.$(el); 548 return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; 549}, 550 551isHsAnchor : function (a) { 552 return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); 553}, 554 555reOrder : function () { 556 for (var i = 0; i < hs.expanders.length; i++)
557 if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); 558}, 559 560mouseClickHandler : function(e) 561{ 562 if (!e) e = window.event; 563 if (e.button > 1) return true; 564 if (!e.target) e.target = e.srcElement; 565 566 var el = e.target; 567 while (el.parentNode 568 && !(/highslide-(image|move|html|resize)/.test(el.className))) 569 { 570 el = el.parentNode; 571 } 572 var exp = hs.getExpander(el); 573 if (exp && (exp.isClosing || !exp.isExpanded)) return true; 574 575 if (exp && e.type == 'mousedown') { 576 if (e.target.form) return true; 577 var match = el.className.match(/highslide-(image|move|resize)/); 578 if (match) { 579 hs.dragArgs = { 580 exp: exp , 581 type: match[1], 582 left: exp.x.pos, 583 width: exp.x.size, 584 top: exp.y.pos, 585 height: exp.y.size, 586 clickX: e.clientX, 587 clickY: e.clientY 588 }; 589 590 591 hs.addEventListener(document, 'mousemove', hs.dragHandler); 592 if (e.preventDefault) e.preventDefault(); // FF 593 594 if (/highslide-(image|html)-blur/.test(exp.content.className)) { 595 exp.focus(); 596 hs.hasFocused = true; 597 } 598 return false; 599 } 600 } else if (e.type == 'mouseup') { 601 602 hs.removeEventListener(document, 'mousemove', hs.dragHandler); 603 604 if (hs.dragArgs) { 605 if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') 606 hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; 607 var hasDragged = hs.dragArgs.hasDragged; 608 609 if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { 610 exp.close(); 611 } 612 else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { 613 hs.dragArgs.exp.doShowHide('hidden'); 614 } 615 hs.hasFocused = false; 616 hs.dragArgs = null; 617 618 } else if (/highslide-image-blur/.test(el.className)) { 619 el.style.cursor = hs.styleRestoreCursor; 620 } 621 } 622 return false; 623}, 624 625dragHandler : function(e) 626{ 627 if (!hs.dragArgs) return true; 628 if (!e) e = window.event; 629 var a = hs.dragArgs, exp = a.exp; 630 631 a.dX = e.clientX - a.clickX; 632 a.dY = e.clientY - a.clickY; 633 634 var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); 635 if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) 636 || (distance > (hs.dragSensitivity || 5)); 637 638 if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { 639 640 if (a.type == 'resize') exp.resize(a); 641 else { 642 exp.moveTo(a.left + a.dX, a.top + a.dY); 643 if (a.type == 'image') exp.content.style.cursor = 'move'; 644 } 645 } 646 return false; 647}, 648 649wrapperMouseHandler : function (e) { 650 try { 651 if (!e) e = window.event; 652 var over = /mouseover/i.test(e.type); 653 if (!e.target) e.target = e.srcElement; // ie 654 if (!e.relatedTarget) e.relatedTarget = 655 over ? e.fromElement : e.toElement; // ie 656 var exp = hs.getExpander(e.target); 657 if (!exp.isExpanded) return; 658 if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp 659 || hs.dragArgs) return; 660 for (var i = 0; i < exp.overlays.length; i++) (function() { 661 var o = hs.$('hsId'+ exp.overlays[i]); 662 if (o && o.hideOnMouseOut) { 663 if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); 664 hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); 665 } 666 })(); 667 } catch (e) {} 668}, 669addEventListener : function (el, event, func) { 670 if (el == document && event == 'ready') { 671 hs.push(hs.onReady, func); 672 } 673 try { 674 el.addEventListener(event, func, false); 675 } catch (e) { 676 try { 677 el.detachEvent('on'+ event, func); 678 el.attachEvent('on'+ event, func); 679 } catch (e) { 680 el['on'+ event] = func; 681 } 682 } 683}, 684 685removeEventListener : function (el, event, func) { 686 try { 687 el.removeEventListener(event, func, false); 688 } catch (e) { 689 try { 690 el.detachEvent('on'+ event, func); 691 } catch (e) { 692 el['on'+ event] = null; 693 } 694 } 695}, 696 697preloadFullImage : function (i) { 698 if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { 699 var img = document.createElement('img'); 700 img.onload = function() { 701 img = null; 702 hs.preloadFullImage(i + 1); 703 }; 704 img.src = hs.preloadTheseImages[i]; 705 } 706}, 707preloadImages : function (number) { 708 if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; 709 710 var arr = hs.getAnchors();
711 for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { 712 hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); 713 } 714 715 // preload outlines 716 if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); 717 else 718 719 hs.preloadFullImage(0); 720 721 // preload cursor 722 if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); 723}, 724 725 726init : function () { 727 if (!hs.container) { 728 729 hs.ieLt7 = hs.ie && hs.uaVersion < 7; 730 hs.ieLt9 = hs.ie && hs.uaVersion < 9; 731 732 hs.getPageSize(); 733 for (var x in hs.langDefaults) { 734 if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; 735 else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') 736 hs.lang[x] = hs.langDefaults[x]; 737 } 738 739 hs.container = hs.createElement('div', { 740 className: 'highslide-container' 741 }, { 742 position: 'absolute', 743 left: 0, 744 top: 0, 745 width: '100%', 746 zIndex: hs.zIndexCounter, 747 direction: 'ltr' 748 }, 749 document.body, 750 true 751 ); 752 hs.loading = hs.createElement('a', { 753 className: 'highslide-loading', 754 title: hs.lang.loadingTitle, 755 innerHTML: hs.lang.loadingText, 756 href: 'javascript:;' 757 }, { 758 position: 'absolute', 759 top: '-9999px', 760 opacity: hs.loadingOpacity, 761 zIndex: 1 762 }, hs.container 763 ); 764 hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); 765 hs.viewport = hs.createElement('div', { 766 className: 'highslide-viewport highslide-viewport-size' 767 }, { 768 visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden' 769 }, hs.container, 1 770 ); 771 772 // http://www.robertpenner.com/easing/ 773 Math.linearTween = function (t, b, c, d) { 774 return c*t/d + b; 775 }; 776 Math.easeInQuad = function (t, b, c, d) { 777 return c*(t/=d)*t + b; 778 }; 779 Math.easeOutQuad = function (t, b, c, d) { 780 return -c *(t/=d)*(t-2) + b; 781 }; 782 783 hs.hideSelects = hs.ieLt7; 784 hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' 785 || (hs.ieLt7 && hs.uaVersion < 5.5)); 786 } 787}, 788ready : function() { 789 if (hs.isReady) return; 790 hs.isReady = true; 791 for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); 792}, 793 794updateAnchors : function() { 795 var el, els, all = [], images = [],groups = {}, re; 796 797 for (var i = 0; i < hs.openerTagNames.length; i++) { 798 els = document.getElementsByTagName(hs.openerTagNames[i]); 799 for (var j = 0; j < els.length; j++) { 800 el = els[j]; 801 re = hs.isHsAnchor(el); 802 if (re) { 803 hs.push(all, el); 804 if (re[0] == 'hs.expand') hs.push(images, el); 805 var g = hs.getParam(el, 'slideshowGroup') || 'none'; 806 if (!groups[g]) groups[g] = []; 807 hs.push(groups[g], el); 808 } 809 } 810 } 811 hs.anchors = { all: all, groups: groups, images: images }; 812 return hs.anchors; 813 814}, 815 816getAnchors : function() { 817 return hs.anchors || hs.updateAnchors(); 818}, 819 820 821close : function(el) { 822 var exp = hs.getExpander(el); 823 if (exp) exp.close(); 824 return false; 825} 826}; // end hs object 827hs.fx = function( elem, options, prop ){ 828 this.options = options; 829 this.elem = elem; 830 this.prop = prop; 831 832 if (!options.orig) options.orig = {}; 833}; 834hs.fx.prototype = { 835 update: function(){ 836 (hs.fx.step[this.prop] || hs.fx.step._default)(this); 837 838 if (this.options.step) 839 this.options.step.call(this.elem, this.now, this); 840 841 }, 842 custom: function(from, to, unit){ 843 this.startTime = (new Date()).getTime(); 844 this.start = from; 845 this.end = to; 846 this.unit = unit;// || this.unit || "px"; 847 this.now = this.start; 848 this.pos = this.state = 0; 849 850 var self = this; 851 function t(gotoEnd){ 852 return self.step(gotoEnd); 853 } 854 855 t.elem = this.elem; 856 857 if ( t() && hs.timers.push(t) == 1 ) { 858 hs.timerId = setInterval(function(){ 859 var timers = hs.timers; 860 861 for ( var i = 0; i < timers.length; i++ ) 862 if ( !timers[i]() ) 863 timers.splice(i--, 1); 864 865 if ( !timers.length ) { 866 clearInterval(hs.timerId); 867 } 868 }, 13); 869 } 870 }, 871 step: function(gotoEnd){ 872 var t = (new Date()).getTime(); 873 if ( gotoEnd || t >= this.options.duration + this.startTime ) { 874 this.now = this.end; 875 this.pos = this.state = 1; 876 this.update(); 877 878 this.options.curAnim[ this.prop ] = true; 879 880 var done = true; 881 for ( var i in this.options.curAnim ) 882 if ( this.options.curAnim[i] !== true ) 883 done = false; 884 885 if ( done ) { 886 if (this.options.complete) this.options.complete.call(this.elem); 887 } 888 return false; 889 } else { 890 var n = t - this.startTime; 891 this.state = n / this.options.duration; 892 this.pos = this.options.easing(n, 0, 1, this.options.duration);
893 this.now = this.start + ((this.end - this.start) * this.pos); 894 this.update(); 895 } 896 return true; 897 } 898 899}; 900 901hs.extend( hs.fx, { 902 step: { 903 904 opacity: function(fx){ 905 hs.setStyles(fx.elem, { opacity: fx.now }); 906 }, 907 908 _default: function(fx){ 909 try { 910 if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) 911 fx.elem.style[ fx.prop ] = fx.now + fx.unit; 912 else 913 fx.elem[ fx.prop ] = fx.now; 914 } catch (e) {} 915 } 916 } 917}); 918 919hs.Outline = function (outlineType, onLoad) { 920 this.onLoad = onLoad; 921 this.outlineType = outlineType; 922 var v = hs.uaVersion, tr; 923 924 this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; 925 if (!outlineType) { 926 if (onLoad) onLoad(); 927 return; 928 } 929 930 hs.init(); 931 this.table = hs.createElement( 932 'table', { 933 cellSpacing: 0 934 }, { 935 visibility: 'hidden', 936 position: 'absolute', 937 borderCollapse: 'collapse', 938 width: 0 939 }, 940 hs.container, 941 true 942 ); 943 var tbody = hs.createElement('tbody', null, null, this.table, 1); 944 945 this.td = []; 946 for (var i = 0; i <= 8; i++) { 947 if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); 948 this.td[i] = hs.createElement('td', null, null, tr, true); 949 var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; 950 hs.setStyles(this.td[i], style); 951 }
952 this.td[4].className = outlineType +' highslide-outline'; 953 954 this.preloadGraphic(); 955}; 956 957hs.Outline.prototype = { 958preloadGraphic : function () { 959 var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; 960 961 var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; 962 this.graphic = hs.createElement('img', null, { position: 'absolute', 963 top: '-9999px' }, appendTo, true); // for onload trigger 964 965 var pThis = this; 966 this.graphic.onload = function() { pThis.onGraphicLoad(); }; 967 968 this.graphic.src = src; 969}, 970 971onGraphicLoad : function () { 972 var o = this.offset = this.graphic.width / 4, 973 pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], 974 dim = { height: (2*o) +'px', width: (2*o) +'px' }; 975 for (var i = 0; i <= 8; i++) { 976 if (pos[i]) { 977 if (this.hasAlphaImageLoader) { 978 var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; 979 var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); 980 hs.createElement ('div', null, { 981 filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", 982 position: 'absolute', 983 width: w, 984 height: this.graphic.height +'px', 985 left: (pos[i][0]*o)+'px', 986 top: (pos[i][1]*o)+'px' 987 }, 988 div, 989 true); 990 } else { 991 hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); 992 } 993 994 if (window.opera && (i == 3 || i ==5)) 995 hs.createElement('div', null, dim, this.td[i], true); 996 997 hs.setStyles (this.td[i], dim); 998 } 999 } 1000 this.graphic = null; 1001 if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); 1002 hs.pendingOutlines[this.outlineType] = this; 1003 if (this.onLoad) this.onLoad(); 1004}, 1005 1006setPosition : function (pos, offset, vis, dur, easing) { 1007 var exp = this.exp, 1008 stl = exp.wrapper.style, 1009 offset = offset || 0, 1010 pos = pos || { 1011 x: exp.x.pos + offset, 1012 y: exp.y.pos + offset, 1013 w: exp.x.get('wsize') - 2 * offset, 1014 h: exp.y.get('wsize') - 2 * offset 1015 }; 1016 if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) 1017 ? 'visible' : 'hidden'; 1018 hs.setStyles(this.table, { 1019 left: (pos.x - this.offset) +'px', 1020 top: (pos.y - this.offset) +'px', 1021 width: (pos.w + 2 * this.offset) +'px' 1022 }); 1023 1024 pos.w -= 2 * this.offset; 1025 pos.h -= 2 * this.offset; 1026 hs.setStyles (this.td[4], { 1027 width: pos.w >= 0 ? pos.w +'px' : 0, 1028 height: pos.h >= 0 ? pos.h +'px' : 0 1029 }); 1030 if (this.hasAlphaImageLoader) this.td[3].style.height 1031 = this.td[5].style.height = this.td[4].style.height; 1032 1033}, 1034 1035destroy : function(hide) { 1036 if (hide) this.table.style.visibility = 'hidden'; 1037 else hs.discardElement(this.table); 1038} 1039}; 1040 1041hs.Dimension = function(exp, dim) { 1042 this.exp = exp; 1043 this.dim = dim; 1044 this.ucwh = dim == 'x' ? 'Width' : 'Height'; 1045 this.wh = this.ucwh.toLowerCase(); 1046 this.uclt = dim == 'x' ? 'Left' : 'Top'; 1047 this.lt = this.uclt.toLowerCase(); 1048 this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; 1049 this.rb = this.ucrb.toLowerCase(); 1050 this.p1 = this.p2 = 0; 1051}; 1052hs.Dimension.prototype = { 1053get : function(key) { 1054 switch (key) { 1055 case 'loadingPos': 1056 return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; 1057 case 'loadingPosXfade': 1058 return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2; 1059 case 'wsize': 1060 return this.size + 2 * this.cb + this.p1 + this.p2; 1061 case 'fitsize': 1062 return this.clientSize - this.marginMin - this.marginMax; 1063 case 'maxsize': 1064 return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; 1065 case 'opos': 1066 return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); 1067 case 'osize': 1068 return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); 1069 case 'imgPad': 1070 return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; 1071 1072 } 1073}, 1074calcBorders: function() { 1075 // correct for borders 1076 this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; 1077 1078 this.marginMax = hs['margin'+ this.ucrb]; 1079}, 1080calcThumb: function() { 1081 this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : 1082 this.exp.el['offset'+ this.ucwh]; 1083 this.tpos = this.exp.tpos[this.dim]; 1084 this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; 1085 if (this.tpos == 0 || this.tpos == -1) { 1086 this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; 1087 }; 1088}, 1089calcExpanded: function() { 1090 var exp = this.exp; 1091 this.justify = 'auto'; 1092 1093 // get alignment 1094 if (exp.align == 'center') this.justify = 'center'; 1095 else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null; 1096 else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max'; 1097 1098 1099 // size and position 1100 this.pos = this.tpos - this.cb + this.tb; 1101 1102 if (this.maxHeight && this.dim == 'x') 1103 exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); 1104 1105 this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); 1106 this.minSize = exp.allowSizeReduction ? 1107 Math.min(exp['min'+ this.ucwh], this.full) :this.full; 1108 if (exp.isImage && exp.useBox) { 1109 this.size = exp[this.wh]; 1110 this.imgSize = this.full; 1111 } 1112 if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; 1113 this.target = exp['target'+ this.dim.toUpperCase()]; 1114 this.marginMin = hs['margin'+ this.uclt]; 1115 this.scroll = hs.page['scroll'+ this.uclt]; 1116 this.clientSize = hs.page[this.wh]; 1117}, 1118setSize: function(i) { 1119 var exp = this.exp; 1120 if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { 1121 this.imgSize = i; 1122 this.size = Math.max(this.size, this.imgSize); 1123 exp.content.style[this.lt] = this.get('imgPad')+'px'; 1124 } else 1125 this.size = i; 1126 1127 exp.content.style[this.wh] = i +'px'; 1128 exp.wrapper.style[this.wh] = this.get('wsize') +'px'; 1129 if (exp.outline) exp.outline.setPosition(); 1130 if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); 1131 if (this.dim == 'x' && exp.slideshow && exp.isImage) { 1132 if (i == this.full) exp.slideshow.disable('full-expand'); 1133 else exp.slideshow.enable('full-expand'); 1134 } 1135}, 1136setPos: function(i) { 1137 this.pos = i; 1138 this.exp.wrapper.style[this.lt] = i +'px'; 1139 1140 if (this.exp.outline) this.exp.outline.setPosition(); 1141 1142} 1143}; 1144 1145hs.Expander = function(a, params, custom, contentType) { 1146 if (document.readyState && hs.ie && !hs.isReady) { 1147 hs.addEventListener(document, 'ready', function() { 1148 new hs.Expander(a, params, custom, contentType); 1149 }); 1150 return; 1151 } 1152 this.a = a; 1153 this.custom = custom; 1154 this.contentType = contentType || 'image'; 1155 this.isImage = !this.isHtml; 1156 1157 hs.continuePreloading = false; 1158 this.overlays = []; 1159 this.last = hs.last; 1160 hs.last = null; 1161 hs.init(); 1162 var key = this.key = hs.expanders.length; 1163 // override inline parameters 1164 for (var i = 0; i < hs.overrides.length; i++) { 1165 var name = hs.overrides[i];
1166 this[name] = params && typeof params[name] != 'undefined' ? 1167 params[name] : hs[name]; 1168 } 1169 if (!this.src) this.src = a.href; 1170 1171 // get thumb 1172 var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; 1173 el = this.thumb = el.getElementsByTagName('img')[0] || el; 1174 this.thumbsUserSetId = el.id || a.id; 1175 1176 // check if already open 1177 for (var i = 0; i < hs.expanders.length; i++) { 1178 if (hs.expanders[i] && hs.expanders[i].a == a 1179 && !(this.last && this.transitions[1] == 'crossfade')) { 1180 hs.expanders[i].focus(); 1181 return false; 1182 } 1183 } 1184 1185 // cancel other 1186 if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { 1187 if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { 1188 hs.expanders[i].cancelLoading(); 1189 } 1190 } 1191 hs.expanders[key] = this; 1192 if (!hs.allowMultipleInstances && !hs.upcoming) { 1193 if (hs.expanders[key-1]) hs.expanders[key-1].close(); 1194 if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) 1195 hs.expanders[hs.focusKey].close(); 1196 } 1197 1198 // initiate metrics 1199 this.el = el; 1200 this.tpos = this.pageOrigin || hs.getPosition(el); 1201 hs.getPageSize(); 1202 var x = this.x = new hs.Dimension(this, 'x'); 1203 x.calcThumb(); 1204 var y = this.y = new hs.Dimension(this, 'y'); 1205 y.calcThumb(); 1206 this.wrapper = hs.createElement( 1207 'div', { 1208 id: 'highslide-wrapper-'+ this.key, 1209 className: 'highslide-wrapper '+ this.wrapperClassName 1210 }, { 1211 visibility: 'hidden', 1212 position: 'absolute', 1213 zIndex: hs.zIndexCounter += 2 1214 }, null, true ); 1215 1216 this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; 1217 if (this.contentType == 'image' && this.outlineWhileAnimating == 2) 1218 this.outlineWhileAnimating = 0; 1219 1220 // get the outline 1221 if (!this.outlineType 1222 || (this.last && this.isImage && this.transitions[1] == 'crossfade')) { 1223 this[this.contentType +'Create'](); 1224 1225 } else if (hs.pendingOutlines[this.outlineType]) { 1226 this.connectOutline(); 1227 this[this.contentType +'Create'](); 1228 1229 } else { 1230 this.showLoading(); 1231 var exp = this; 1232 new hs.Outline(this.outlineType, 1233 function () { 1234 exp.connectOutline(); 1235 exp[exp.contentType +'Create'](); 1236 } 1237 ); 1238 } 1239 return true; 1240}; 1241 1242hs.Expander.prototype = { 1243error : function(e) { 1244 if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); 1245 else window.location.href = this.src; 1246}, 1247 1248connectOutline : function() { 1249 var outline = this.outline = hs.pendingOutlines[this.outlineType]; 1250 outline.exp = this; 1251 outline.table.style.zIndex = this.wrapper.style.zIndex - 1; 1252 hs.pendingOutlines[this.outlineType] = null; 1253}, 1254 1255showLoading : function() { 1256 if (this.onLoadStarted || this.loading) return; 1257 1258 this.loading = hs.loading; 1259 var exp = this; 1260 this.loading.onclick = function() { 1261 exp.cancelLoading(); 1262 }; 1263 var exp = this, 1264 l = this.x.get('loadingPos') +'px', 1265 t = this.y.get('loadingPos') +'px'; 1266 if (!tgt && this.last && this.transitions[1] == 'crossfade') 1267 var tgt = this.last; 1268 if (tgt) { 1269 l = tgt.x.get('loadingPosXfade') +'px'; 1270 t = tgt.y.get('loadingPosXfade') +'px'; 1271 this.loading.style.zIndex = hs.zIndexCounter++; 1272 } 1273 setTimeout(function () { 1274 if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} 1275 , 100); 1276}, 1277 1278imageCreate : function() { 1279 var exp = this; 1280 1281 var img = document.createElement('img'); 1282 this.content = img; 1283 img.onload = function () { 1284 if (hs.expanders[exp.key]) exp.contentLoaded(); 1285 }; 1286 if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; 1287 img.className = 'highslide-image'; 1288 hs.setStyles(img, { 1289 visibility: 'hidden', 1290 display: 'block', 1291 position: 'absolute', 1292 maxWidth: '9999px', 1293 zIndex: 3 1294 }); 1295 img.title = hs.lang.restoreTitle; 1296 if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); 1297 if (hs.ie && hs.flushImgSize) img.src = null; 1298 img.src = this.src; 1299 1300 this.showLoading(); 1301}, 1302 1303contentLoaded : function() { 1304 try { 1305 if (!this.content) return; 1306 this.content.onload = null; 1307 if (this.onLoadStarted) return; 1308 else this.onLoadStarted = true; 1309 1310 var x = this.x, y = this.y; 1311 1312 if (this.loading) { 1313 hs.setStyles(this.loading, { top: '-9999px' }); 1314 this.loading = null; 1315 } 1316 x.full = this.content.width; 1317 y.full = this.content.height; 1318 1319 hs.setStyles(this.content, { 1320 width: x.t +'px', 1321 height: y.t +'px' 1322 }); 1323 this.wrapper.appendChild(this.content); 1324 hs.container.appendChild(this.wrapper); 1325 1326 x.calcBorders(); 1327 y.calcBorders(); 1328 1329 hs.setStyles (this.wrapper, { 1330 left: (x.tpos + x.tb - x.cb) +'px', 1331 top: (y.tpos + x.tb - y.cb) +'px' 1332 }); 1333 1334 1335 this.initSlideshow(); 1336 this.getOverlays(); 1337 1338 var ratio = x.full / y.full; 1339 x.calcExpanded(); 1340 this.justify(x); 1341 1342 y.calcExpanded(); 1343 this.justify(y); 1344 if (this.overlayBox) this.sizeOverlayBox(0, 1); 1345 1346 1347 if (this.allowSizeReduction) { 1348 this.correctRatio(ratio); 1349 var ss = this.slideshow; 1350 if (ss && this.last && ss.controls && ss.fixedControls) { 1351 var pos = ss.overlayOptions.position || '', p; 1352 for (var dim in hs.oPos) for (var i = 0; i < 5; i++) { 1353 p = this[dim]; 1354 if (pos.match(hs.oPos[dim][i])) { 1355 p.pos = this.last[dim].pos 1356 + (this.last[dim].p1 - p.p1) 1357 + (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i]; 1358 if (ss.fixedControls == 'fit') { 1359 if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax) 1360 p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2; 1361 if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; 1362 } 1363 } 1364 } 1365 } 1366 if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { 1367 this.createFullExpand(); 1368 if (this.overlays.length == 1) this.sizeOverlayBox(); 1369 } 1370 } 1371 this.show(); 1372 1373 } catch (e) { 1374 this.error(e); 1375 } 1376}, 1377 1378justify : function (p, moveOnly) { 1379 var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; 1380 1381 if (tgt && tgt.match(/ /)) { 1382 tgtArr = tgt.split(' '); 1383 tgt = tgtArr[0]; 1384 } 1385 if (tgt && hs.$(tgt)) { 1386 p.pos = hs.getPosition(hs.$(tgt))[dim]; 1387 if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) 1388 p.pos += parseInt(tgtArr[1]); 1389 if (p.size < p.minSize) p.size = p.minSize; 1390 1391 } else if (p.justify == 'auto' || p.justify == 'center') { 1392 1393 var hasMovedMin = false; 1394 1395 var allowReduce = p.exp.allowSizeReduction; 1396 if (p.justify == 'center') 1397 p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2); 1398 else 1399 p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); 1400 if (p.pos < p.scroll + p.marginMin) { 1401 p.pos = p.scroll + p.marginMin; 1402 hasMovedMin = true; 1403 } 1404 if (!moveOnly && p.size < p.minSize) { 1405 p.size = p.minSize; 1406 allowReduce = false; 1407 } 1408 if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { 1409 if (!moveOnly && hasMovedMin && allowReduce) { 1410 p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize'));
1411 } else if (p.get('wsize') < p.get('fitsize')) { 1412 p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); 1413 } else { // image larger than viewport 1414 p.pos = p.scroll + p.marginMin; 1415 if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); 1416 } 1417 } 1418 1419 if (!moveOnly && p.size < p.minSize) { 1420 p.size = p.minSize; 1421 allowReduce = false; 1422 } 1423 1424 1425 } else if (p.justify == 'max') { 1426 p.pos = Math.floor(p.pos - p.size + p.t); 1427 } 1428 1429 1430 if (p.pos < p.marginMin) { 1431 var tmpMin = p.pos; 1432 p.pos = p.marginMin; 1433 1434 if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); 1435 1436 } 1437}, 1438 1439correctRatio : function(ratio) { 1440 var x = this.x, 1441 y = this.y, 1442 changed = false, 1443 xSize = Math.min(x.full, x.size), 1444 ySize = Math.min(y.full, y.size), 1445 useBox = (this.useBox || hs.padToMinWidth); 1446 1447 if (xSize / ySize > ratio) { // width greater 1448 xSize = ySize * ratio; 1449 if (xSize < x.minSize) { // below minWidth 1450 xSize = x.minSize; 1451 ySize = xSize / ratio; 1452 } 1453 changed = true; 1454 1455 } else if (xSize / ySize < ratio) { // height greater 1456 ySize = xSize / ratio; 1457 changed = true; 1458 } 1459 1460 if (hs.padToMinWidth && x.full < x.minSize) { 1461 x.imgSize = x.full; 1462 y.size = y.imgSize = y.full; 1463 } else if (this.useBox) { 1464 x.imgSize = xSize; 1465 y.imgSize = ySize; 1466 } else { 1467 x.size = xSize; 1468 y.size = ySize; 1469 } 1470 changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); 1471 if (useBox && y.size < y.imgSize) { 1472 y.imgSize = y.size; 1473 x.imgSize = y.size * ratio; 1474 } 1475 if (changed || useBox) { 1476 x.pos = x.tpos - x.cb + x.tb; 1477 x.minSize = x.size; 1478 this.justify(x, true); 1479 1480 y.pos = y.tpos - y.cb + y.tb; 1481 y.minSize = y.size; 1482 this.justify(y, true); 1483 if (this.overlayBox) this.sizeOverlayBox(); 1484 } 1485 1486 1487}, 1488fitOverlayBox : function(ratio, changed) { 1489 var x = this.x, y = this.y; 1490 if (this.overlayBox) { 1491 while (y.size > this.minHeight && x.size > this.minWidth 1492 && y.get('wsize') > y.get('fitsize')) { 1493 y.size -= 10; 1494 if (ratio) x.size = y.size * ratio; 1495 this.sizeOverlayBox(0, 1); 1496 changed = true; 1497 } 1498 } 1499 return changed; 1500}, 1501 1502show : function () { 1503 var x = this.x, y = this.y; 1504 this.doShowHide('hidden'); 1505 if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb(); 1506 1507 // Apply size change 1508 this.changeSize( 1509 1, { 1510 wrapper: { 1511 width : x.get('wsize'), 1512 height : y.get('wsize'), 1513 left: x.pos, 1514 top: y.pos 1515 }, 1516 content: { 1517 left: x.p1 + x.get('imgPad'), 1518 top: y.p1 + y.get('imgPad'), 1519 width:x.imgSize ||x.size, 1520 height:y.imgSize ||y.size 1521 } 1522 }, 1523 hs.expandDuration 1524 ); 1525}, 1526 1527changeSize : function(up, to, dur) { 1528 // transition 1529 var trans = this.transitions, 1530 other = up ? (this.last ? this.last.a : null) : hs.upcoming, 1531 t = (trans[1] && other 1532 && hs.getParam(other, 'transitions')[1] == trans[1]) ? 1533 trans[1] : trans[0]; 1534 1535 if (this[t] && t != 'expand') { 1536 this[t](up, to); 1537 return; 1538 } 1539 1540 if (this.outline && !this.outlineWhileAnimating) { 1541 if (up) this.outline.setPosition(); 1542 else this.outline.destroy(); 1543 } 1544 1545 1546 if (!up) this.destroyOverlays(); 1547 1548 var exp = this, 1549 x = exp.x, 1550 y = exp.y, 1551 easing = this.easing; 1552 if (!up) easing = this.easingClose || easing; 1553 var after = up ? 1554 function() { 1555 1556 if (exp.outline) exp.outline.table.style.visibility = "visible"; 1557 setTimeout(function() { 1558 exp.afterExpand(); 1559 }, 50); 1560 } : 1561 function() { 1562 exp.afterClose(); 1563 }; 1564 if (up) hs.setStyles( this.wrapper, { 1565 width: x.t +'px', 1566 height: y.t +'px' 1567 }); 1568 if (this.fadeInOut) { 1569 hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); 1570 hs.extend(to.wrapper, { opacity: up }); 1571 } 1572 hs.animate( this.wrapper, to.wrapper, { 1573 duration: dur, 1574 easing: easing, 1575 step: function(val, args) { 1576 if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { 1577 var fac = up ? args.pos : 1 - args.pos; 1578 var pos = { 1579 w: x.t + (x.get('wsize') - x.t) * fac, 1580 h: y.t + (y.get('wsize') - y.t) * fac, 1581 x: x.tpos + (x.pos - x.tpos) * fac, 1582 y: y.tpos + (y.pos - y.tpos) * fac 1583 }; 1584 exp.outline.setPosition(pos, 0, 1); 1585 } 1586 } 1587 }); 1588 hs.animate( this.content, to.content, dur, easing, after); 1589 if (up) { 1590 this.wrapper.style.visibility = 'visible'; 1591 this.content.style.visibility = 'visible';
1592 this.a.className += ' highslide-active-anchor'; 1593 } 1594}, 1595 1596 1597 1598fade : function(up, to) { 1599 this.outlineWhileAnimating = false; 1600 var exp = this, t = up ? hs.expandDuration : 0; 1601 1602 if (up) { 1603 hs.animate(this.wrapper, to.wrapper, 0); 1604 hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' }); 1605 hs.animate(this.content, to.content, 0); 1606 this.content.style.visibility = 'visible'; 1607 1608 hs.animate(this.wrapper, { opacity: 1 }, t, null, 1609 function() { exp.afterExpand(); }); 1610 } 1611 1612 if (this.outline) { 1613 this.outline.table.style.zIndex = this.wrapper.style.zIndex; 1614 var dir = up || -1, 1615 offset = this.outline.offset, 1616 startOff = up ? 3 : offset, 1617 endOff = up? offset : 3; 1618 for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) { 1619 (function() { 1620 var o = up ? endOff - i : startOff - i; 1621 setTimeout(function() { 1622 exp.outline.setPosition(0, o, 1); 1623 }, t); 1624 })(); 1625 } 1626 } 1627 1628 1629 if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50); 1630 else { 1631 setTimeout( function() { 1632 if (exp.outline) exp.outline.destroy(exp.preserveContent); 1633 1634 exp.destroyOverlays(); 1635 1636 hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){ 1637 exp.afterClose(); 1638 }); 1639 }, t); 1640 } 1641}, 1642crossfade : function (up, to, from) { 1643 if (!up) return; 1644 var exp = this, 1645 last = this.last, 1646 x = this.x, 1647 y = this.y, 1648 lastX = last.x, 1649 lastY = last.y, 1650 wrapper = this.wrapper, 1651 content = this.content, 1652 overlayBox = this.overlayBox; 1653 hs.removeEventListener(document, 'mousemove', hs.dragHandler); 1654 1655 hs.setStyles(content, { 1656 width: (x.imgSize || x.size) +'px', 1657 height: (y.imgSize || y.size) +'px' 1658 }); 1659 if (overlayBox) overlayBox.style.overflow = 'visible'; 1660 this.outline = last.outline; 1661 if (this.outline) this.outline.exp = exp; 1662 last.outline = null; 1663 var fadeBox = hs.createElement('div', { 1664 className: 'highslide-'+ this.contentType 1665 }, { 1666 position: 'absolute', 1667 zIndex: 4, 1668 overflow: 'hidden', 1669 display: 'none' 1670 } 1671 ); 1672 var names = { oldImg: last, newImg: this }; 1673 for (var n in names) { 1674 this[n] = names[n].content.cloneNode(1); 1675 hs.setStyles(this[n], { 1676 position: 'absolute', 1677 border: 0, 1678 visibility: 'visible' 1679 }); 1680 fadeBox.appendChild(this[n]); 1681 } 1682 wrapper.appendChild(fadeBox); 1683 if (overlayBox) { 1684 overlayBox.className = ''; 1685 wrapper.appendChild(overlayBox); 1686 } 1687 fadeBox.style.display = ''; 1688 last.content.style.display = 'none'; 1689 1690 1691 if (hs.safari && hs.uaVersion < 525) { 1692 this.wrapper.style.visibility = 'visible'; 1693 } 1694 hs.animate(wrapper, { 1695 width: x.size 1696 }, { 1697 duration: hs.transitionDuration, 1698 step: function(val, args) { 1699 var pos = args.pos, 1700 invPos = 1 - pos; 1701 var prop, 1702 size = {}, 1703 props = ['pos', 'size', 'p1', 'p2']; 1704 for (var n in props) { 1705 prop = props[n]; 1706 size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]); 1707 size['y'+ prop] = Math.round(invPos * lastY[prop] + pos * y[prop]); 1708 size.ximgSize = Math.round( 1709 invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size)); 1710 size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad')); 1711 size.yimgSize = Math.round( 1712 invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size)); 1713 size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad')); 1714 } 1715 if (exp.outline) exp.outline.setPosition({ 1716 x: size.xpos, 1717 y: size.ypos, 1718 w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, 1719 h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb 1720 }); 1721 last.wrapper.style.clip = 'rect(' 1722 + (size.ypos - lastY.pos)+'px, ' 1723 + (size.xsize + size.xp1 + size.xp2 + size.xpos + 2 * lastX.cb - lastX.pos) +'px, ' 1724 + (size.ysize + size.yp1 + size.yp2 + size.ypos + 2 * lastY.cb - lastY.pos) +'px, ' 1725 + (size.xpos - lastX.pos)+'px)'; 1726 1727 hs.setStyles(content, { 1728 top: (size.yp1 + y.get('imgPad')) +'px', 1729 left: (size.xp1 + x.get('imgPad')) +'px', 1730 marginTop: (y.pos - size.ypos) +'px', 1731 marginLeft: (x.pos - size.xpos) +'px' 1732 }); 1733 hs.setStyles(wrapper, { 1734 top: size.ypos +'px', 1735 left: size.xpos +'px', 1736 width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px',
1737 height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px' 1738 }); 1739 hs.setStyles(fadeBox, { 1740 width: (size.ximgSize || size.xsize) + 'px', 1741 height: (size.yimgSize || size.ysize) +'px', 1742 left: (size.xp1 + size.ximgPad) +'px', 1743 top: (size.yp1 + size.yimgPad) +'px', 1744 visibility: 'visible' 1745 }); 1746 1747 hs.setStyles(exp.oldImg, { 1748 top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px', 1749 left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px' 1750 }); 1751 1752 hs.setStyles(exp.newImg, { 1753 opacity: pos, 1754 top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px', 1755 left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px' 1756 }); 1757 if (overlayBox) hs.setStyles(overlayBox, { 1758 width: size.xsize + 'px', 1759 height: size.ysize +'px', 1760 left: (size.xp1 + x.cb) +'px', 1761 top: (size.yp1 + y.cb) +'px' 1762 }); 1763 }, 1764 complete: function () { 1765 wrapper.style.visibility = content.style.visibility = 'visible'; 1766 content.style.display = 'block'; 1767 hs.discardElement(fadeBox); 1768 exp.afterExpand(); 1769 last.afterClose(); 1770 exp.last = null; 1771 } 1772 1773 }); 1774}, 1775reuseOverlay : function(o, el) { 1776 if (!this.last) return false; 1777 for (var i = 0; i < this.last.overlays.length; i++) { 1778 var oDiv = hs.$('hsId'+ this.last.overlays[i]); 1779 if (oDiv && oDiv.hsId == o.hsId) { 1780 this.genOverlayBox(); 1781 oDiv.reuse = this.key; 1782 hs.push(this.overlays, this.last.overlays[i]); 1783 return true; 1784 } 1785 } 1786 return false; 1787}, 1788 1789 1790afterExpand : function() { 1791 this.isExpanded = true; 1792 this.focus(); 1793 if (this.dimmingOpacity) hs.dim(this); 1794 if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; 1795 this.prepareNextOutline(); 1796 var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; 1797 this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') 1798 && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); 1799 if (this.overlayBox) this.showOverlays(); 1800 1801}, 1802 1803 1804prepareNextOutline : function() { 1805 var key = this.key; 1806 var outlineType = this.outlineType; 1807 new hs.Outline(outlineType, 1808 function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); 1809}, 1810 1811 1812preloadNext : function() { 1813 var next = this.getAdjacentAnchor(1); 1814 if (next && next.onclick.toString().match(/hs\.expand/)) 1815 var img = hs.createElement('img', { src: hs.getSrc(next) }); 1816}, 1817 1818 1819getAdjacentAnchor : function(op) { 1820 var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; 1821 if (as && !as[current + op] && this.slideshow && this.slideshow.repeat) { 1822 if (op == 1) return as[0]; 1823 else if (op == -1) return as[as.length-1]; 1824 } 1825 return (as && as[current + op]) || null; 1826}, 1827 1828getAnchorIndex : function() { 1829 var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; 1830 if (arr) for (var i = 0; i < arr.length; i++) { 1831 if (arr[i] == this.a) return i; 1832 } 1833 return null; 1834}, 1835 1836 1837getNumber : function() { 1838 if (this[this.numberPosition]) { 1839 var arr = hs.anchors.groups[this.slideshowGroup || 'none']; 1840 if (arr) { 1841 var s = hs.lang.number.replace('%1', this.getAnchorIndex() + 1).replace('%2', arr.length); 1842 this[this.numberPosition].innerHTML = 1843 '<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML; 1844 } 1845 } 1846}, 1847initSlideshow : function() { 1848 if (!this.last) { 1849 for (var i = 0; i < hs.slideshows.length; i++) { 1850 var ss = hs.slideshows[i], sg = ss.slideshowGroup; 1851 if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) 1852 this.slideshow = new hs.Slideshow(this.key, ss); 1853 } 1854 } else { 1855 this.slideshow = this.last.slideshow; 1856 } 1857 var ss = this.slideshow; 1858 if (!ss) return; 1859 var key = ss.expKey = this.key; 1860 1861 ss.checkFirstAndLast(); 1862 ss.disable('full-expand'); 1863 if (ss.controls) { 1864 this.createOverlay(hs.extend(ss.overlayOptions || {}, { 1865 overlayId: ss.controls, 1866 hsId: 'controls', 1867 zIndex: 5 1868 })); 1869 } 1870 if (ss.thumbstrip) ss.thumbstrip.add(this); 1871 if (!this.last && this.autoplay) ss.play(true); 1872 if (ss.autoplay) { 1873 ss.autoplay = setTimeout(function() { 1874 hs.next(key); 1875 }, (ss.interval || 500)); 1876 } 1877}, 1878 1879cancelLoading : function() { 1880 hs.discardElement (this.wrapper); 1881 hs.expanders[this.key] = null; 1882 if (hs.upcoming == this.a) hs.upcoming = null; 1883 hs.undim(this.key); 1884 if (this.loading) hs.loading.style.left = '-9999px'; 1885}, 1886 1887writeCredits : function () { 1888 if (this.credits) return; 1889 this.credits = hs.createElement('a', { 1890 href: hs.creditsHref, 1891 target: hs.creditsTarget, 1892 className: 'highslide-credits', 1893 innerHTML: hs.lang.creditsText, 1894 title: hs.lang.creditsTitle 1895 }); 1896 this.createOverlay({ 1897 overlayId: this.credits, 1898 position: this.creditsPosition || 'top left', 1899 hsId: 'credits' 1900 }); 1901}, 1902 1903getInline : function(types, addOverlay) { 1904 for (var i = 0; i < types.length; i++) { 1905 var type = types[i], s = null; 1906 if (!this[type +'Id'] && this.thumbsUserSetId) 1907 this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; 1908 if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']);
1909 if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { 1910 s = eval(this[type +'Eval']); 1911 } catch (e) {} 1912 if (!this[type] && this[type +'Text']) { 1913 s = this[type +'Text']; 1914 } 1915 if (!this[type] && !s) { 1916 this[type] = hs.getNode(this.a['_'+ type + 'Id']); 1917 if (!this[type]) { 1918 var next = this.a.nextSibling; 1919 while (next && !hs.isHsAnchor(next)) { 1920 if ((new RegExp('highslide-'+ type)).test(next.className || null)) { 1921 if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; 1922 this[type] = hs.getNode(next.id); 1923 break; 1924 } 1925 next = next.nextSibling; 1926 } 1927 } 1928 } 1929 if (!this[type] && !s && this.numberPosition == type) s = '\n'; 1930 1931 if (!this[type] && s) this[type] = hs.createElement('div', 1932 { className: 'highslide-'+ type, innerHTML: s } ); 1933 1934 if (addOverlay && this[type]) { 1935 var o = { position: (type == 'heading') ? 'above' : 'below' }; 1936 for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; 1937 o.overlayId = this[type]; 1938 this.createOverlay(o); 1939 } 1940 } 1941}, 1942 1943 1944// on end move and resize 1945doShowHide : function(visibility) { 1946 if (hs.hideSelects) this.showHideElements('SELECT', visibility); 1947 if (hs.hideIframes) this.showHideElements('IFRAME', visibility); 1948 if (hs.geckoMac) this.showHideElements('*', visibility); 1949}, 1950showHideElements : function (tagName, visibility) { 1951 var els = document.getElementsByTagName(tagName); 1952 var prop = tagName == '*' ? 'overflow' : 'visibility'; 1953 for (var i = 0; i < els.length; i++) { 1954 if (prop == 'visibility' || (document.defaultView.getComputedStyle( 1955 els[i], "").getPropertyValue('overflow') == 'auto' 1956 || els[i].getAttribute('hidden-by') != null)) { 1957 var hiddenBy = els[i].getAttribute('hidden-by'); 1958 if (visibility == 'visible' && hiddenBy) { 1959 hiddenBy = hiddenBy.replace('['+ this.key +']', ''); 1960 els[i].setAttribute('hidden-by', hiddenBy); 1961 if (!hiddenBy) els[i].style[prop] = els[i].origProp; 1962 } else if (visibility == 'hidden') { // hide if behind 1963 var elPos = hs.getPosition(els[i]); 1964 elPos.w = els[i].offsetWidth; 1965 elPos.h = els[i].offsetHeight; 1966 if (!this.dimmingOpacity) { // hide all if dimming 1967 1968 var clearsX = (elPos.x + elPos.w < this.x.get('opos') 1969 || elPos.x > this.x.get('opos') + this.x.get('osize')); 1970 var clearsY = (elPos.y + elPos.h < this.y.get('opos') 1971 || elPos.y > this.y.get('opos') + this.y.get('osize')); 1972 } 1973 var wrapperKey = hs.getWrapperKey(els[i]); 1974 if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image 1975 if (!hiddenBy) { 1976 els[i].setAttribute('hidden-by', '['+ this.key +']'); 1977 els[i].origProp = els[i].style[prop]; 1978 els[i].style[prop] = 'hidden'; 1979 1980 } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { 1981 els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); 1982 } 1983 } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) 1984 && wrapperKey != this.key) { // on move 1985 els[i].setAttribute('hidden-by', ''); 1986 els[i].style[prop] = els[i].origProp || ''; 1987 } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { 1988 els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); 1989 } 1990 1991 } 1992 } 1993 } 1994}, 1995 1996focus : function() { 1997 this.wrapper.style.zIndex = hs.zIndexCounter += 2; 1998 // blur others 1999 for (var i = 0; i < hs.expanders.length; i++) { 2000 if (hs.expanders[i] && i == hs.focusKey) { 2001 var blurExp = hs.expanders[i]; 2002 blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; 2003 blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; 2004 blurExp.content.title = hs.lang.focusTitle; 2005 } 2006 } 2007 2008 // focus this 2009 if (this.outline) this.outline.table.style.zIndex 2010 = this.wrapper.style.zIndex - 1; 2011 this.content.className = 'highslide-'+ this.contentType; 2012 this.content.title = hs.lang.restoreTitle; 2013 2014 if (hs.restoreCursor) { 2015 hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; 2016 if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; 2017 this.content.style.cursor = hs.styleRestoreCursor; 2018 } 2019 2020 hs.focusKey = this.key; 2021 hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 2022}, 2023moveTo: function(x, y) { 2024 this.x.setPos(x); 2025 this.y.setPos(y); 2026}, 2027resize : function (e) { 2028 var w, h, r = e.width / e.height; 2029 w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); 2030 if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; 2031 h = w / r; 2032 if (h < Math.min(this.minHeight, this.y.full)) { 2033 h = Math.min(this.minHeight, this.y.full); 2034 if (this.isImage) w = h * r; 2035 } 2036 this.resizeTo(w, h); 2037}, 2038resizeTo: function(w, h) { 2039 this.y.setSize(h); 2040 this.x.setSize(w); 2041 this.wrapper.style.height = this.y.get('wsize') +'px'; 2042}, 2043 2044close : function() { 2045 if (this.isClosing || !this.isExpanded) return; 2046 if (this.transitions[1] == 'crossfade' && hs.upcoming) { 2047 hs.getExpander(hs.upcoming).cancelLoading(); 2048 hs.upcoming = null; 2049 } 2050 this.isClosing = true; 2051 if (this.slideshow && !hs.upcoming) this.slideshow.pause(); 2052 2053 hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 2054 2055 try { 2056 this.content.style.cursor = 'default'; 2057 this.changeSize( 2058 0, { 2059 wrapper: { 2060 width : this.x.t, 2061 height : this.y.t,
2062 left: this.x.tpos - this.x.cb + this.x.tb, 2063 top: this.y.tpos - this.y.cb + this.y.tb 2064 }, 2065 content: { 2066 left: 0, 2067 top: 0, 2068 width: this.x.t, 2069 height: this.y.t 2070 } 2071 }, hs.restoreDuration 2072 ); 2073 } catch (e) { this.afterClose(); } 2074}, 2075 2076createOverlay : function (o) { 2077 var el = o.overlayId, 2078 relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position)); 2079 if (typeof el == 'string') el = hs.getNode(el); 2080 if (o.html) el = hs.createElement('div', { innerHTML: o.html }); 2081 if (!el || typeof el == 'string') return; 2082 el.style.display = 'block'; 2083 o.hsId = o.hsId || o.overlayId; 2084 if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return; 2085 this.genOverlayBox(); 2086 var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; 2087 if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; 2088 var overlay = hs.createElement( 2089 'div', { 2090 id: 'hsId'+ hs.idCounter++, 2091 hsId: o.hsId 2092 }, { 2093 position: 'absolute', 2094 visibility: 'hidden', 2095 width: width, 2096 direction: hs.lang.cssDirection || '', 2097 opacity: 0 2098 }, 2099 relToVP ? hs.viewport :this.overlayBox, 2100 true 2101 ); 2102 if (relToVP) overlay.hsKey = this.key; 2103 2104 overlay.appendChild(el); 2105 hs.extend(overlay, { 2106 opacity: 1, 2107 offsetX: 0, 2108 offsetY: 0, 2109 dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 2110 }); 2111 hs.extend(overlay, o); 2112 2113 2114 if (this.gotOverlays) { 2115 this.positionOverlay(overlay); 2116 if (!overlay.hideOnMouseOut || this.mouseIsOver) 2117 hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); 2118 } 2119 hs.push(this.overlays, hs.idCounter - 1); 2120}, 2121positionOverlay : function(overlay) { 2122 var p = overlay.position || 'middle center', 2123 relToVP = (overlay.relativeTo == 'viewport'), 2124 offX = overlay.offsetX, 2125 offY = overlay.offsetY; 2126 if (relToVP) { 2127 hs.viewport.style.display = 'block'; 2128 overlay.hsKey = this.key; 2129 if (overlay.offsetWidth > overlay.parentNode.offsetWidth) 2130 overlay.style.width = '100%'; 2131 } else 2132 if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); 2133 if (/left$/.test(p)) overlay.style.left = offX +'px'; 2134 2135 if (/center$/.test(p)) hs.setStyles (overlay, { 2136 left: '50%', 2137 marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' 2138 }); 2139 2140 if (/right$/.test(p)) overlay.style.right = - offX +'px'; 2141 2142 if (/^leftpanel$/.test(p)) { 2143 hs.setStyles(overlay, { 2144 right: '100%', 2145 marginRight: this.x.cb +'px', 2146 top: - this.y.cb +'px', 2147 bottom: - this.y.cb +'px', 2148 overflow: 'auto' 2149 }); 2150 this.x.p1 = overlay.offsetWidth; 2151 2152 } else if (/^rightpanel$/.test(p)) { 2153 hs.setStyles(overlay, { 2154 left: '100%', 2155 marginLeft: this.x.cb +'px', 2156 top: - this.y.cb +'px', 2157 bottom: - this.y.cb +'px', 2158 overflow: 'auto' 2159 }); 2160 this.x.p2 = overlay.offsetWidth; 2161 } 2162 var parOff = overlay.parentNode.offsetHeight; 2163 overlay.style.height = 'auto'; 2164 if (relToVP && overlay.offsetHeight > parOff) 2165 overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%'; 2166 2167 if (/^top/.test(p)) overlay.style.top = offY +'px'; 2168 if (/^middle/.test(p)) hs.setStyles (overlay, { 2169 top: '50%', 2170 marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' 2171 }); 2172 if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; 2173 if (/^above$/.test(p)) { 2174 hs.setStyles(overlay, { 2175 left: (- this.x.p1 - this.x.cb) +'px', 2176 right: (- this.x.p2 - this.x.cb) +'px', 2177 bottom: '100%', 2178 marginBottom: this.y.cb +'px', 2179 width: 'auto' 2180 }); 2181 this.y.p1 = overlay.offsetHeight; 2182 2183 } else if (/^below$/.test(p)) { 2184 hs.setStyles(overlay, { 2185 position: 'relative', 2186 left: (- this.x.p1 - this.x.cb) +'px', 2187 right: (- this.x.p2 - this.x.cb) +'px', 2188 top: '100%', 2189 marginTop: this.y.cb +'px', 2190 width: 'auto' 2191 }); 2192 this.y.p2 = overlay.offsetHeight; 2193 overlay.style.position = 'absolute'; 2194 } 2195}, 2196 2197getOverlays : function() { 2198 this.getInline(['heading', 'caption'], true); 2199 this.getNumber(); 2200 if (this.heading && this.dragByHeading) this.heading.className += ' highsli
2200de-move'; 2201 if (hs.showCredits) this.writeCredits(); 2202 for (var i = 0; i < hs.overlays.length; i++) { 2203 var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; 2204 if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) 2205 || (sg && sg === this.slideshowGroup)) { 2206 this.createOverlay(o); 2207 } 2208 } 2209 var os = []; 2210 for (var i = 0; i < this.overlays.length; i++) { 2211 var o = hs.$('hsId'+ this.overlays[i]); 2212 if (/panel$/.test(o.position)) this.positionOverlay(o); 2213 else hs.push(os, o); 2214 } 2215 for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); 2216 this.gotOverlays = true; 2217}, 2218genOverlayBox : function() { 2219 if (!this.overlayBox) this.overlayBox = hs.createElement ( 2220 'div', { 2221 className: this.wrapperClassName 2222 }, { 2223 position : 'absolute', 2224 width: (this.x.size || (this.useBox ? this.width : null) 2225 || this.x.full) +'px', 2226 height: (this.y.size || this.y.full) +'px', 2227 visibility : 'hidden', 2228 overflow : 'hidden', 2229 zIndex : hs.ie ? 4 : 'auto' 2230 }, 2231 hs.container, 2232 true 2233 ); 2234}, 2235sizeOverlayBox : function(doWrapper, doPanels) { 2236 var overlayBox = this.overlayBox, 2237 x = this.x, 2238 y = this.y; 2239 hs.setStyles( overlayBox, { 2240 width: x.size +'px', 2241 height: y.size +'px' 2242 }); 2243 if (doWrapper || doPanels) { 2244 for (var i = 0; i < this.overlays.length; i++) { 2245 var o = hs.$('hsId'+ this.overlays[i]); 2246 var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); 2247 if (o && /^(above|below)$/.test(o.position)) { 2248 if (ie6) { 2249 o.style.width = (overlayBox.offsetWidth + 2 * x.cb 2250 + x.p1 + x.p2) +'px'; 2251 } 2252 y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; 2253 } 2254 if (o && ie6 && /^(left|right)panel$/.test(o.position)) { 2255 o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; 2256 } 2257 } 2258 } 2259 if (doWrapper) { 2260 hs.setStyles(this.content, { 2261 top: y.p1 +'px' 2262 }); 2263 hs.setStyles(overlayBox, { 2264 top: (y.p1 + y.cb) +'px' 2265 }); 2266 } 2267}, 2268 2269showOverlays : function() { 2270 var b = this.overlayBox; 2271 b.className = ''; 2272 hs.setStyles(b, { 2273 top: (this.y.p1 + this.y.cb) +'px', 2274 left: (this.x.p1 + this.x.cb) +'px', 2275 overflow : 'visible' 2276 }); 2277 if (hs.safari) b.style.visibility = 'visible'; 2278 this.wrapper.appendChild (b); 2279 for (var i = 0; i < this.overlays.length; i++) { 2280 var o = hs.$('hsId'+ this.overlays[i]); 2281 o.style.zIndex = o.zIndex || 4; 2282 if (!o.hideOnMouseOut || this.mouseIsOver) { 2283 o.style.visibility = 'visible'; 2284 hs.setStyles(o, { visibility: 'visible', display: '' }); 2285 hs.animate(o, { opacity: o.opacity }, o.dur); 2286 } 2287 } 2288}, 2289 2290destroyOverlays : function() { 2291 if (!this.overlays.length) return; 2292 if (this.slideshow) { 2293 var c = this.slideshow.controls; 2294 if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c); 2295 } 2296 for (var i = 0; i < this.overlays.length; i++) { 2297 var o = hs.$('hsId'+ this.overlays[i]); 2298 if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o); 2299 } 2300 hs.discardElement(this.overlayBox); 2301}, 2302 2303 2304 2305createFullExpand : function () { 2306 if (this.slideshow && this.slideshow.controls) { 2307 this.slideshow.enable('full-expand'); 2308 return; 2309 } 2310 this.fullExpandLabel = hs.createElement( 2311 'a', { 2312 href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', 2313 title: hs.lang.fullExpandTitle, 2314 className: 'highslide-full-expand' 2315 } 2316 ); 2317 2318 this.createOverlay({ 2319 overlayId: this.fullExpandLabel, 2320 position: hs.fullExpandPosition, 2321 hideOnMouseOut: true, 2322 opacity: hs.fullExpandOpacity 2323 }); 2324}, 2325 2326doFullExpand : function () { 2327 try { 2328 if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); 2329 2330 this.focus(); 2331 var xSize = this.x.size, 2332 ySize = this.y.size; 2333 this.resizeTo(this.x.full, this.y.full); 2334 2335 var xpos = this.x.pos - (this.x.size - xSize) / 2; 2336 if (xpos < hs.marginLeft) xpos = hs.marginLeft; 2337 2338 var ypos = this.y.pos - (this.y.size - ySize) / 2; 2339 if (ypos < hs.marginTop) ypos = hs.marginTop; 2340 2341 this.moveTo(xpos, ypos); 2342 this.doShowHide('hidden'); 2343 2344 } catch (e) { 2345 this.error(e); 2346 } 2347}, 2348 2349 2350afterClose : function () {
2351 this.a.className = this.a.className.replace('highslide-active-anchor', ''); 2352 2353 this.doShowHide('visible'); 2354 if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); 2355 2356 hs.discardElement(this.wrapper); 2357 this.destroyOverlays(); 2358 if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none'; 2359 2360 if (this.dimmingOpacity) hs.undim(this.key); 2361 hs.expanders[this.key] = null; 2362 hs.reOrder(); 2363} 2364 2365}; 2366 2367 2368hs.Slideshow = function (expKey, options) { 2369 if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors(); 2370 this.expKey = expKey; 2371 for (var x in options) this[x] = options[x]; 2372 if (this.useControls) this.getControls(); 2373 if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this); 2374}; 2375hs.Slideshow.prototype = { 2376getControls: function() { 2377 this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, 2378 null, hs.container); 2379 2380 var buttons = ['play', 'pause', 'previous', 'next', 'move', 'full-expand', 'close']; 2381 this.btn = {}; 2382 var pThis = this; 2383 for (var i = 0; i < buttons.length; i++) { 2384 this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]); 2385 this.enable(buttons[i]); 2386 } 2387 this.btn.pause.style.display = 'none'; 2388 //this.disable('full-expand'); 2389}, 2390checkFirstAndLast: function() { 2391 if (this.repeat || !this.controls) return; 2392 var exp = hs.expanders[this.expKey], 2393 cur = exp.getAnchorIndex(), 2394 re = /disabled$/; 2395 if (cur == 0) 2396 this.disable('previous'); 2397 else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className)) 2398 this.enable('previous'); 2399 if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) { 2400 this.disable('next'); 2401 this.disable('play'); 2402 } else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) { 2403 this.enable('next'); 2404 this.enable('play'); 2405 } 2406}, 2407enable: function(btn) { 2408 if (!this.btn) return; 2409 var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/; 2410 a.onclick = function() { 2411 sls[btn](); 2412 return false; 2413 }; 2414 if (re.test(a.className)) a.className = a.className.replace(re, ''); 2415}, 2416disable: function(btn) { 2417 if (!this.btn) return; 2418 var a = this.btn[btn].getElementsByTagName('a')[0]; 2419 a.onclick = function() { return false; }; 2420 if (!/disabled$/.test(a.className)) a.className += ' disabled'; 2421}, 2422hitSpace: function() { 2423 if (this.autoplay) this.pause(); 2424 else this.play(); 2425}, 2426play: function(wait) { 2427 if (this.btn) { 2428 this.btn.play.style.display = 'none'; 2429 this.btn.pause.style.display = ''; 2430 } 2431 2432 this.autoplay = true; 2433 if (!wait) hs.next(this.expKey); 2434}, 2435pause: function() { 2436 if (this.btn) { 2437 this.btn.pause.style.display = 'none'; 2438 this.btn.play.style.display = ''; 2439 } 2440 2441 clearTimeout(this.autoplay); 2442 this.autoplay = null; 2443}, 2444previous: function() { 2445 this.pause(); 2446 hs.previous(this.btn.previous); 2447}, 2448next: function() { 2449 this.pause(); 2450 hs.next(this.btn.next); 2451}, 2452move: function() {}, 2453'full-expand': function() { 2454 hs.getExpander().doFullExpand(); 2455}, 2456close: function() { 2457 hs.close(this.btn.close); 2458} 2459}; 2460hs.Thumbstrip = function(slideshow) { 2461 function add (exp) { 2462 hs.extend(options || {}, { 2463 overlayId: dom, 2464 hsId: 'thumbstrip', 2465 className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '') 2466 }); 2467 if (hs.ieLt7) options.fade = 0; 2468 exp.createOverlay(options); 2469 hs.setStyles(dom.parentNode, { overflow: 'hidden' }); 2470 }; 2471 2472 function scroll (delta) { 2473 selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7)); 2474 }; 2475 2476 function selectThumb (i, scrollBy) { 2477 if (i === undefined) for (var j = 0; j < group.length; j++) { 2478 if (group[j] == hs.expanders[slideshow.expKey].a) { 2479 i = j; 2480 break; 2481 } 2482 } 2483 if (i === undefined) return; 2484 var as = dom.getElementsByTagName('a'), 2485 active = as[i], 2486 cell = active.parentNode, 2487 left = isX ? 'Left' : 'Top', 2488 right = isX ? 'Right' : 'Bottom', 2489 width = isX ? 'Width' : 'Height', 2490 offsetLeft = 'offset' + left, 2491 offsetWidth = 'offset' + width, 2492 overlayWidth = div.parentNode.parentNode[offsetWidth], 2493 minTblPos = overlayWidth - table[offsetWidth], 2494 curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0, 2495 tblPos = curTblPos, 2496 mgnRight = 20; 2497 if (scrollBy !== undefined) { 2498 tblPos = curTblPos - scrollBy; 2499 2500 if (minTblPos > 0) minTblPos = 0; 2501 if (tblPos > 0) tblPos = 0; 2502 if (tblPos < minTblPos) tblPos = minTblPos; 2503 2504 2505 } else { 2506 for (var j = 0; j < as.length; j++) as[j].className = ''; 2507 active.className = 'highslide-active-anchor'; 2508 var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft], 2509 activeRight = cell[offsetLeft] + cell[offsetWidth] + 2510 (as[i + 1] ? as[i + 1].parentNode[offsetWidth] : 0); 2511 if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight; 2512 else if (activeLeft < -curTblPos) tblPos = -activeLeft; 2513 } 2514 var markerPos = cell[offsetLeft] + (cell[offsetWidth] - marker[offsetWidth]) / 2 + tblPos;
2515 hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad'); 2516 hs.animate(marker, isX ? { left: markerPos } : { top: markerPos }, null, 'easeOutQuad'); 2517 scrollUp.style.display = tblPos < 0 ? 'block' : 'none'; 2518 scrollDown.style.display = (tblPos > minTblPos) ? 'block' : 'none'; 2519 2520 }; 2521 2522 2523 // initialize 2524 var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'], 2525 options = slideshow.thumbstrip, 2526 mode = options.mode || 'horizontal', 2527 floatMode = (mode == 'float'), 2528 tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'], 2529 isX = (mode == 'horizontal'), 2530 dom = hs.createElement('div', { 2531 className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode, 2532 innerHTML: 2533 '<div class="highslide-thumbstrip-inner">'+ 2534 '<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+ 2535 '<div class="highslide-scroll-up"><div></div></div>'+ 2536 '<div class="highslide-scroll-down"><div></div></div>'+ 2537 '<div class="highslide-marker"><div></div></div>' 2538 }, { 2539 display: 'none' 2540 }, hs.container), 2541 domCh = dom.childNodes, 2542 div = domCh[0], 2543 scrollUp = domCh[1], 2544 scrollDown = domCh[2], 2545 marker = domCh[3], 2546 table = div.firstChild, 2547 tbody = dom.getElementsByTagName(tree[1])[0], 2548 tr; 2549 for (var i = 0; i < group.length; i++) { 2550 if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody); 2551 (function(){ 2552 var a = group[i], 2553 cell = hs.createElement(tree[3], null, null, tr), 2554 pI = i; 2555 hs.createElement('a', { 2556 href: a.href, 2557 title: a.title, 2558 onclick: function() { 2559 if (/highslide-active-anchor/.test(this.className)) return false; 2560 hs.getExpander(this).focus(); 2561 return hs.transit(a); 2562 }, 2563 innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML 2564 }, null, cell); 2565 })(); 2566 } 2567 if (!floatMode) { 2568 scrollUp.onclick = function () { scroll(-1); }; 2569 scrollDown.onclick = function() { scroll(1); }; 2570 hs.addEventListener(tbody, document.onmousewheel !== undefined ? 2571 'mousewheel' : 'DOMMouseScroll', function(e) { 2572 var delta = 0; 2573 e = e || window.event; 2574 if (e.wheelDelta) { 2575 delta = e.wheelDelta/120; 2576 if (hs.opera) delta = -delta; 2577 } else if (e.detail) { 2578 delta = -e.detail/3; 2579 } 2580 if (delta) scroll(-delta * 0.2); 2581 if (e.preventDefault) e.preventDefault(); 2582 e.returnValue = false; 2583 }); 2584 } 2585 2586 return { 2587 add: add, 2588 selectThumb: selectThumb 2589 } 2590}; 2591hs.langDefaults = hs.lang; 2592// history 2593var HsExpander = hs.Expander; 2594if (hs.ie && window == window.top) { 2595 (function () { 2596 try { 2597 document.documentElement.doScroll('left'); 2598 } catch (e) { 2599 setTimeout(arguments.callee, 50); 2600 return; 2601 } 2602 hs.ready(); 2603 })(); 2604} 2605hs.addEventListener(document, 'DOMContentLoaded', hs.ready); 2606hs.addEventListener(window, 'load', hs.ready); 2607 2608// set handlers 2609hs.addEventListener(document, 'ready', function() {
2610 if (hs.expandCursor || hs.dimmingOpacity) { 2611 var style = hs.createElement('style', { type: 'text/css' }, null, 2612 document.getElementsByTagName('HEAD')[0]), 2613 backCompat = document.compatMode == 'BackCompat'; 2614 2615 2616 function addRule(sel, dec) { 2617 if (hs.ie && (hs.uaVersion < 9 || backCompat)) { 2618 var last = document.styleSheets[document.styleSheets.length - 1]; 2619 if (typeof(last.addRule) == "object") last.addRule(sel, dec); 2620 } else { 2621 style.appendChild(document.createTextNode(sel + " {" + dec + "}")); 2622 } 2623 } 2624 function fix(prop) { 2625 return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + 2626 ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; 2627 } 2628 if (hs.expandCursor) addRule ('.highslide img', 2629 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); 2630 addRule ('.highslide-viewport-size', 2631 hs.ie && (hs.uaVersion < 7 || backCompat) ? 2632 'position: absolute; '+ 2633 'left:'+ fix('scrollLeft') + 2634 'top:'+ fix('scrollTop') + 2635 'width:'+ fix('clientWidth') + 2636 'height:'+ fix('clientHeight') : 2637 'position: fixed; width: 100%; height: 100%; left: 0; top: 0'); 2638 } 2639}); 2640hs.addEventListener(window, 'resize', function() { 2641 hs.getPageSize(); 2642 if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) { 2643 var node = hs.viewport.childNodes[i], 2644 exp = hs.getExpander(node); 2645 exp.positionOverlay(node); 2646 if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb(); 2647 } 2648}); 2649hs.addEventListener(document, 'mousemove', function(e) { 2650 hs.mouse = { x: e.clientX, y: e.clientY }; 2651}); 2652hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); 2653hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); 2654 2655hs.addEventListener(document, 'ready', hs.getAnchors); 2656hs.addEventListener(window, 'load', hs.preloadImages); 2657}
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.