1/** 2 * Name: Highslide JS 3 * Version: 5.0.0 (2016-05-24) 4 * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash 5 * Author: Torstein Hønsi 6 * Support: www.highslide.com/support 7 * License: MIT 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 : 'Powered by <i>Highslide JS</i>', 18 creditsTitle : 'Go to the Highslide JS homepage', 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 : '/img/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', 'area'], // Add more to allow slideshow indexing 60transitions : [], 61transitionDuration: 250, 62dimmingOpacity: 0, // Lightbox style dimming background 63dimmingDuration: 50, // 0 for instant dimming 64 65allowWidthReduction : false, 66allowHeightReduction : true, 67preserveContent : true, // Preserve changes made to the content and position of HTML popups. 68objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion. 69cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup. 70anchor : 'auto', // where the image expands from 71align : 'auto', // position in the client (overrides anchor) 72targetX: null, // the id of a target element 73targetY: null, 74dragByHeading: true, 75minWidth: 200, 76minHeight: 200, 77allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight 78outlineType : 'drop-shadow', // set null to disable outlines 79skin : { 80 controls: 81 '<div class="highslide-controls"><ul>'+ 82 '<li class="highslide-previous">'+ 83 '<a href="#" title="{hs.lang.previousTitle}">'+ 84 '<span>{hs.lang.previousText}</span></a>'+ 85 '</li>'+ 86 '<li class="highslide-play">'+ 87 '<a href="#" title="{hs.lang.playTitle}">'+ 88 '<span>{hs.lang.playText}</span></a>'+ 89 '</li>'+ 90 '<li class="highslide-pause">'+ 91 '<a href="#" title="{hs.lang.pauseTitle}">'+ 92 '<span>{hs.lang.pauseText}</span></a>'+ 93 '</li>'+ 94 '<li class="highslide-next">'+ 95 '<a href="#" title="{hs.lang.nextTitle}">'+ 96 '<span>{hs.lang.nextText}</span></a>'+ 97 '</li>'+ 98 '<li class="highslide-move">'+ 99 '<a href="#" title="{hs.lang.moveTitle}">'+ 100 '<span>{hs.lang.moveText}</span></a>'+ 101 '</li>'+ 102 '<li class="highslide-full-expand">'+ 103 '<a href="#" title="{hs.lang.fullExpandTitle}">'+ 104 '<span>{hs.lang.fullExpandText}</span></a>'+ 105 '</li>'+ 106 '<li class="highslide-close">'+ 107 '<a href="#" title="{hs.lang.closeTitle}" >'+ 108 '<span>{hs.lang.closeText}</span></a>'+ 109 '</li>'+ 110 '</ul></div>' 111 , 112 contentWrapper:
113 '<div class="highslide-header"><ul>'+ 114 '<li class="highslide-previous">'+ 115 '<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+ 116 '<span>{hs.lang.previousText}</span></a>'+ 117 '</li>'+ 118 '<li class="highslide-next">'+ 119 '<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+ 120 '<span>{hs.lang.nextText}</span></a>'+ 121 '</li>'+ 122 '<li class="highslide-move">'+ 123 '<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+ 124 '<span>{hs.lang.moveText}</span></a>'+ 125 '</li>'+ 126 '<li class="highslide-close">'+ 127 '<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+ 128 '<span>{hs.lang.closeText}</span></a>'+ 129 '</li>'+ 130 '</ul></div>'+ 131 '<div class="highslide-body"></div>'+ 132 '<div class="highslide-footer"><div>'+ 133 '<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+ 134 '</div></div>' 135}, 136// END OF YOUR SETTINGS 137 138 139// declare internal properties 140preloadTheseImages : [], 141continuePreloading: true, 142expanders : [], 143overrides : [ 144 'allowSizeReduction', 145 'useBox', 146 'anchor', 147 'align', 148 'targetX', 149 'targetY', 150 'outlineType', 151 'outlineWhileAnimating', 152 'captionId', 153 'captionText', 154 'captionEval', 155 'captionOverlay', 156 'headingId', 157 'headingText', 158 'headingEval', 159 'headingOverlay', 160 'creditsPosition', 161 'dragByHeading', 162 'autoplay', 163 'numberPosition', 164 'transitions', 165 'dimmingOpacity', 166 167 'width', 168 'height', 169 170 'contentId', 171 'allowWidthReduction', 172 'allowHeightReduction', 173 'preserveContent', 174 'maincontentId', 175 'maincontentText', 176 'maincontentEval', 177 'objectType', 178 'cacheAjax', 179 'objectWidth', 180 'objectHeight', 181 'objectLoadTime', 182 'swfOptions', 183 'wrapperClassName', 184 'minWidth', 185 'minHeight', 186 'maxWidth', 187 'maxHeight', 188 'pageOrigin', 189 'slideshowGroup', 190 'easing', 191 'easingClose', 192 'fadeInOut', 193 'src' 194], 195overlays : [], 196idCounter : 0, 197oPos : { 198 x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], 199 y: ['above', 'top', 'middle', 'bottom', 'below'] 200}, 201mouse: {}, 202headingOverlay: {}, 203captionOverlay: {}, 204swfOptions: { flashvars: {}, params: {}, attributes: {} }, 205timers : [], 206 207slideshows : [], 208 209pendingOutlines : {}, 210sleeping : [], 211preloadTheseAjax : [], 212cacheBindings : [], 213cachedGets : {}, 214clones : {}, 215onReady: [], 216uaVersion: document.documentMode || parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), 217ie : (document.all && !window.opera), 218//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? 219safari : /Safari/.test(navigator.userAgent), 220geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), 221 222$ : function (id) { 223 if (id) return document.getElementById(id); 224}, 225 226push : function (arr, val) { 227 arr[arr.length] = val; 228}, 229 230createElement : function (tag, attribs, styles, parent, nopad) { 231 var el = document.createElement(tag); 232 if (attribs) hs.extend(el, attribs); 233 if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); 234 if (styles) hs.setStyles(el, styles); 235 if (parent) parent.appendChild(el); 236 return el; 237}, 238 239extend : function (el, attribs) { 240 for (var x in attribs) el[x] = attribs[x]; 241 return el; 242}, 243 244setStyles : function (el, styles) { 245 for (var x in styles) { 246 if (hs.ieLt9 && x == 'opacity') { 247 if (styles[x] > 0.99) el.style.removeAttribute('filter'); 248 else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; 249 } 250 else el.style[x] = styles[x]; 251 } 252}, 253animate: function(el, prop, opt) { 254 var start, 255 end, 256 unit; 257 if (typeof opt != 'object' || opt === null) { 258 var args = arguments; 259 opt = { 260 duration: args[2], 261 easing: args[3], 262 complete: args[4] 263 }; 264 } 265 if (typeof opt.duration != 'number') opt.duration = 250; 266 opt.easing = Math[opt.easing] || Math.easeInQuad; 267 opt.curAnim = hs.extend({}, prop); 268 for (var name in prop) { 269 var e = new hs.fx(el, opt , name ); 270 271 start = parseFloat(hs.css(el, name)) || 0; 272 end = parseFloat(prop[name]); 273 unit = name != 'opacity' ? 'px' : ''; 274 275 e.custom( start, end, unit ); 276 } 277}, 278css: function(el, prop) { 279 if (el.style[prop]) { 280 return el.style[prop]; 281 } else if (document.defaultView) { 282 return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); 283 284 } else { 285 if (prop == 'opacity') prop = 'filter'; 286 var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; 287 if (prop == 'filter') 288 val = val.replace(/alpha\(opacity=([0-9]+)\)/, 289 function (a, b) { return b / 100 }); 290 return val === '' ? 1 : val; 291 } 292}, 293 294getPageSize : function () { 295 var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' 296 ? d.documentElement : d.body, 297 ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); 298 299 var width = ieLt9 ? iebody.clientWidth : 300 (d.documentElement.clientWidth || self.innerWidth),
301 height = ieLt9 ? iebody.clientHeight : self.innerHeight; 302 hs.page = { 303 width: width, 304 height: height, 305 scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, 306 scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset 307 }; 308 return hs.page; 309}, 310 311getPosition : function(el) { 312 if (/area/i.test(el.tagName)) { 313 var imgs = document.getElementsByTagName('img'); 314 for (var i = 0; i < imgs.length; i++) { 315 var u = imgs[i].useMap; 316 if (u && u.replace(/^.*?#/, '') == el.parentNode.name) { 317 el = imgs[i]; 318 break; 319 } 320 } 321 } 322 var p = { x: el.offsetLeft, y: el.offsetTop }; 323 while (el.offsetParent) { 324 el = el.offsetParent; 325 p.x += el.offsetLeft; 326 p.y += el.offsetTop; 327 if (el != document.body && el != document.documentElement) { 328 p.x -= el.scrollLeft; 329 p.y -= el.scrollTop; 330 } 331 } 332 return p; 333}, 334 335expand : function(a, params, custom, type) { 336 if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); 337 if (typeof a.getParams == 'function') return params; 338 if (type == 'html') { 339 for (var i = 0; i < hs.sleeping.length; i++) { 340 if (hs.sleeping[i] && hs.sleeping[i].a == a) { 341 hs.sleeping[i].awake(); 342 hs.sleeping[i] = null; 343 return false; 344 } 345 } 346 hs.hasHtmlExpanders = true; 347 } 348 try { 349 new hs.Expander(a, params, custom, type); 350 return false; 351 } catch (e) { return true; } 352}, 353 354htmlExpand : function(a, params, custom) { 355 return hs.expand(a, params, custom, 'html'); 356}, 357 358getSelfRendered : function() { 359 return hs.createElement('div', { 360 className: 'highslide-html-content', 361 innerHTML: hs.replaceLang(hs.skin.contentWrapper) 362 }); 363}, 364getElementByClass : function (el, tagName, className) { 365 var els = el.getElementsByTagName(tagName); 366 for (var i = 0; i < els.length; i++) { 367 if ((new RegExp(className)).test(els[i].className)) { 368 return els[i]; 369 } 370 } 371 return null; 372}, 373replaceLang : function(s) { 374 s = s.replace(/\s/g, ' '); 375 var re = /{hs\.lang\.([^}]+)\}/g, 376 matches = s.match(re), 377 lang; 378 if (matches) for (var i = 0; i < matches.length; i++) { 379 lang = matches[i].replace(re, "$1"); 380 if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); 381 } 382 return s; 383}, 384 385 386setClickEvents : function () { 387 var els = document.getElementsByTagName('a'); 388 for (var i = 0; i < els.length; i++) { 389 var type = hs.isUnobtrusiveAnchor(els[i]); 390 if (type && !els[i].hsHasSetClick) { 391 (function(){ 392 var t = type; 393 if (hs.fireEvent(hs, 'onSetClickEvent', { element: els[i], type: t })) { 394 els[i].onclick =(type == 'image') ?function() { return hs.expand(this) }: 395 function() { return hs.htmlExpand(this, { objectType: t } );}; 396 } 397 })(); 398 els[i].hsHasSetClick = true; 399 } 400 } 401 hs.getAnchors(); 402}, 403isUnobtrusiveAnchor: function(el) { 404 if (el.rel == 'highslide') return 'image'; 405 else if (el.rel == 'highslide-ajax') return 'ajax'; 406 else if (el.rel == 'highslide-iframe') return 'iframe'; 407 else if (el.rel == 'highslide-swf') return 'swf'; 408}, 409 410getCacheBinding : function (a) { 411 for (var i = 0; i < hs.cacheBindings.length; i++) { 412 if (hs.cacheBindings[i][0] == a) { 413 var c = hs.cacheBindings[i][1]; 414 hs.cacheBindings[i][1] = c.cloneNode(1); 415 return c; 416 } 417 } 418 return null; 419}, 420 421preloadAjax : function (e) { 422 var arr = hs.getAnchors(); 423 for (var i = 0; i < arr.htmls.length; i++) { 424 var a = arr.htmls[i]; 425 if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax')) 426 hs.push(hs.preloadTheseAjax, a); 427 } 428 429 hs.preloadAjaxElement(0); 430}, 431 432preloadAjaxElement : function (i) { 433 if (!hs.preloadTheseAjax[i]) return; 434 var a = hs.preloadTheseAjax[i]; 435 var cache = hs.getNode(hs.getParam(a, 'contentId')); 436 if (!cache) cache = hs.getSelfRendered(); 437 var ajax = new hs.Ajax(a, cache, 1); 438 ajax.onError = function () { }; 439 ajax.onLoad = function () { 440 hs.push(hs.cacheBindings, [a, cache]); 441 hs.preloadAjaxElement(i + 1); 442 }; 443 ajax.run(); 444}, 445 446focusTopmost : function() { 447 var topZ = 0, 448 topmostKey = -1, 449 expanders = hs.expanders, 450 exp, 451 zIndex; 452 for (var i = 0; i < expanders.length; i++) { 453 exp = expanders[i];
454 if (exp) { 455 zIndex = exp.wrapper.style.zIndex; 456 if (zIndex && zIndex > topZ) { 457 topZ = zIndex; 458 topmostKey = i; 459 } 460 } 461 } 462 if (topmostKey == -1) hs.focusKey = -1; 463 else expanders[topmostKey].focus(); 464}, 465 466getParam : function (a, param) { 467 a.getParams = a.onclick; 468 var p = a.getParams ? a.getParams() : null; 469 a.getParams = null; 470 471 return (p && typeof p[param] != 'undefined') ? p[param] : 472 (typeof hs[param] != 'undefined' ? hs[param] : null); 473}, 474 475getSrc : function (a) { 476 var src = hs.getParam(a, 'src'); 477 if (src) return src; 478 return a.href; 479}, 480 481getNode : function (id) { 482 var node = hs.$(id), clone = hs.clones[id], a = {}; 483 if (!node && !clone) return null; 484 if (!clone) { 485 clone = node.cloneNode(true); 486 clone.id = ''; 487 hs.clones[id] = clone; 488 return node; 489 } else { 490 return clone.cloneNode(true); 491 } 492}, 493 494discardElement : function(d) { 495 if (d) hs.garbageBin.appendChild(d); 496 hs.garbageBin.innerHTML = ''; 497}, 498dim : function(exp) { 499 if (!hs.dimmer) { 500 isNew = true; 501 hs.dimmer = hs.createElement ('div', { 502 className: 'highslide-dimming highslide-viewport-size', 503 owner: '', 504 onclick: function() { 505 if (hs.fireEvent(hs, 'onDimmerClick')) 506 507 hs.close(); 508 } 509 }, { 510 visibility: 'visible', 511 opacity: 0 512 }, hs.container, true); 513 514 if (/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)) { 515 var body = document.body; 516 function pixDimmerSize() { 517 hs.setStyles(hs.dimmer, { 518 width: body.scrollWidth +'px', 519 height: body.scrollHeight +'px' 520 }); 521 } 522 pixDimmerSize(); 523 hs.addEventListener(window, 'resize', pixDimmerSize); 524 } 525 } 526 hs.dimmer.style.display = ''; 527 528 var isNew = hs.dimmer.owner == ''; 529 hs.dimmer.owner += '|'+ exp.key; 530 531 if (isNew) { 532 if (hs.geckoMac && hs.dimmingGeckoFix) 533 hs.setStyles(hs.dimmer, { 534 background: 'url('+ hs.graphicsDir + 'geckodimmer.png)', 535 opacity: 1 536 }); 537 else 538 hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration); 539 } 540}, 541undim : function(key) { 542 if (!hs.dimmer) return; 543 if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, ''); 544 545 if ( 546 (typeof key != 'undefined' && hs.dimmer.owner != '') 547 || (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity')) 548 ) return; 549 550 if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none'; 551 else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() { 552 hs.dimmer.style.display = 'none'; 553 }); 554}, 555transit : function (adj, exp) { 556 var last = exp || hs.getExpander(); 557 exp = last; 558 if (hs.upcoming) return false; 559 else hs.last = last; 560 hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 561 try { 562 hs.upcoming = adj; 563 adj.onclick(); 564 } catch (e){ 565 hs.last = hs.upcoming = null; 566 } 567 try { 568 if (!adj || exp.transitions[1] != 'crossfade') 569 exp.close(); 570 } catch (e) {} 571 return false; 572}, 573 574previousOrNext : function (el, op) { 575 var exp = hs.getExpander(el); 576 if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); 577 else return false; 578}, 579 580previous : function (el) { 581 return hs.previousOrNext(el, -1); 582}, 583 584next : function (el) { 585 return hs.previousOrNext(el, 1); 586}, 587 588keyHandler : function(e) { 589 if (!e) e = window.event; 590 if (!e.target) e.target = e.srcElement; // ie 591 if (typeof e.target.form != 'undefined') return true; // form element has focus 592 if (!hs.fireEvent(hs, 'onKeyDown', e)) return true; 593 var exp = hs.getExpander(); 594 595 var op = null; 596 switch (e.keyCode) { 597 case 70: // f 598 if (exp) exp.doFullExpand(); 599 return true; 600 case 32: // Space 601 op = 2; 602 break; 603 case 34: // Page Down 604 case 39: // Arrow right 605 case 40: // Arrow down 606 op = 1; 607 break; 608 case 8: // Backspace 609 case 33: // Page Up 610 case 37: // Arrow left 611 case 38: // Arrow up 612 op = -1; 613 break; 614 case 27: // Escape 615 case 13: // Enter 616 op = 0; 617 } 618 if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 619 if (!hs.enableKeyListener) return true; 620 621 if (e.preventDefault) e.preventDefault(); 622 else e.returnValue = false; 623 if (exp) { 624 if (op == 0) { 625 exp.close(); 626 } else if (op == 2) { 627 if (exp.slideshow) exp.slideshow.hitSpace(); 628 } else { 629 if (exp.slideshow) exp.slideshow.pause(); 630 hs.previousOrNext(exp.key, op); 631 } 632 return false; 633 } 634 } 635 return true; 636}, 637 638 639registerOverlay : function (overlay) { 640 hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); 641}, 642 643 644addSlideshow : function (options) { 645 var sg = options.slideshowGroup; 646 if (typeof sg == 'object') { 647 for (var i = 0; i < sg.length; i++) { 648 var o = {}; 649 for (var x in options) o[x] = options[x]; 650 o.slideshowGroup = sg[i]; 651 hs.push(hs.slideshows, o); 652 } 653 } else { 654 hs.push(hs.slideshows, options); 655 } 656}, 657 658getWrapperKey : function (element, expOnly) { 659 var el, re = /^highslide-wrapper-([0-9]+)$/; 660 // 1. look in open expanders 661 el = element; 662 while (el.parentNode) { 663 if (el.hsKey !== undefined) return el.hsKey; 664 if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); 665 el = el.parentNode; 666 } 667 // 2. look in thumbnail 668 if (!expOnly) { 669 el = element; 670 while (el.parentNode) { 671 if (el.tagName && hs.isHsAnchor(el)) { 672 for (var key = 0; key < hs.expanders.length; key++) { 673 var exp = hs.expanders[key]; 674 if (exp && exp.a == el) return key; 675 } 676 } 677 el = el.parentNode; 678 } 679 } 680 return null; 681}, 682 683getExpander : function (el, expOnly) { 684 if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; 685 if (typeof el == 'number') return hs.expanders[el] || null; 686 if (typeof el == 'string') el = hs.$(el); 687 return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; 688}, 689 690isHsAnchor : function (a) { 691 return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); 692}, 693 694reOrder : function () { 695 for (var i = 0; i < hs.expanders.length; i++)
696 if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); 697}, 698fireEvent : function (obj, evt, args) { 699 return obj && obj[evt] ? (obj[evt](obj, args) !== false) : true; 700}, 701 702mouseClickHandler : function(e) 703{ 704 if (!e) e = window.event; 705 if (e.button > 1) return true; 706 if (!e.target) e.target = e.srcElement; 707 708 var el = e.target; 709 while (el.parentNode 710 && !(/highslide-(image|move|html|resize)/.test(el.className))) 711 { 712 el = el.parentNode; 713 } 714 var exp = hs.getExpander(el); 715 if (exp && (exp.isClosing || !exp.isExpanded)) return true; 716 717 if (exp && e.type == 'mousedown') { 718 if (e.target.form) return true; 719 var match = el.className.match(/highslide-(image|move|resize)/); 720 if (match) { 721 hs.dragArgs = { 722 exp: exp , 723 type: match[1], 724 left: exp.x.pos, 725 width: exp.x.size, 726 top: exp.y.pos, 727 height: exp.y.size, 728 clickX: e.clientX, 729 clickY: e.clientY 730 }; 731 732 733 hs.addEventListener(document, 'mousemove', hs.dragHandler); 734 if (e.preventDefault) e.preventDefault(); // FF 735 736 if (/highslide-(image|html)-blur/.test(exp.content.className)) { 737 exp.focus(); 738 hs.hasFocused = true; 739 } 740 return false; 741 } 742 else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) { 743 exp.focus(); 744 exp.doShowHide('hidden'); 745 } 746 } else if (e.type == 'mouseup') { 747 748 hs.removeEventListener(document, 'mousemove', hs.dragHandler); 749 750 if (hs.dragArgs) { 751 if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') 752 hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; 753 var hasDragged = hs.dragArgs.hasDragged; 754 755 if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { 756 if (hs.fireEvent(exp, 'onImageClick')) 757 exp.close(); 758 } 759 else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { 760 hs.dragArgs.exp.doShowHide('hidden'); 761 } 762 763 if (hs.dragArgs.exp.releaseMask) 764 hs.dragArgs.exp.releaseMask.style.display = 'none'; 765 766 if (hasDragged) hs.fireEvent(hs.dragArgs.exp, 'onDrop', hs.dragArgs); 767 hs.hasFocused = false; 768 hs.dragArgs = null; 769 770 } else if (/highslide-image-blur/.test(el.className)) { 771 el.style.cursor = hs.styleRestoreCursor; 772 } 773 } 774 return false; 775}, 776 777dragHandler : function(e) 778{ 779 if (!hs.dragArgs) return true; 780 if (!e) e = window.event; 781 var a = hs.dragArgs, exp = a.exp; 782 if (exp.iframe) { 783 if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null, 784 { position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px', 785 left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4, background: (hs.ieLt9 ? 'white' : 'none'), 786 opacity: 0.01 }, 787 exp.wrapper, true); 788 if (exp.releaseMask.style.display == 'none') 789 exp.releaseMask.style.display = ''; 790 } 791 792 a.dX = e.clientX - a.clickX; 793 a.dY = e.clientY - a.clickY; 794 795 var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); 796 if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) 797 || (distance > (hs.dragSensitivity || 5)); 798 799 if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { 800 if (!hs.fireEvent(exp, 'onDrag', a)) return false; 801 802 if (a.type == 'resize') exp.resize(a); 803 else { 804 exp.moveTo(a.left + a.dX, a.top + a.dY); 805 if (a.type == 'image') exp.content.style.cursor = 'move'; 806 } 807 } 808 return false; 809}, 810 811wrapperMouseHandler : function (e) { 812 try { 813 if (!e) e = window.event; 814 var over = /mouseover/i.test(e.type); 815 if (!e.target) e.target = e.srcElement; // ie 816 if (!e.relatedTarget) e.relatedTarget = 817 over ? e.fromElement : e.toElement; // ie 818 var exp = hs.getExpander(e.target); 819 if (!exp.isExpanded) return; 820 if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp 821 || hs.dragArgs) return; 822 hs.fireEvent(exp, over ? 'onMouseOver' : 'onMouseOut', e); 823 for (var i = 0; i < exp.overlays.length; i++) (function() { 824 var o = hs.$('hsId'+ exp.overlays[i]); 825 if (o && o.hideOnMouseOut) { 826 if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); 827 hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); 828 } 829 })(); 830 } catch (e) {} 831}, 832addEventListener : function (el, event, func) { 833 if (el == document && event == 'ready') { 834 hs.push(hs.onReady, func); 835 } 836 try { 837 el.addEventListener(event, func, false); 838 } catch (e) { 839 try { 840 el.detachEvent('on'+ event, func); 841 el.attachEvent('on'+ event, func); 842 } catch (e) { 843 el['on'+ event] = func; 844 } 845 } 846}, 847 848removeEventListener : function (el, event, func) { 849 try { 850 el.removeEventListener(event, func, false); 851 } catch (e) { 852 try { 853 el.detachEvent('on'+ event, func); 854 } catch (e) { 855 el['on'+ event] = null; 856 } 857 } 858}, 859 860preloadFullImage : function (i) { 861 if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { 862 var img = document.createElement('img'); 863 img.onload = function() { 864 img = null; 865 hs.preloadFullImage(i + 1); 866 }; 867 img.src = hs.preloadTheseImages[i]; 868 } 869}, 870preloadImages : function (number) { 871 if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; 872 873 var arr = hs.getAnchors();
874 for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { 875 hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); 876 } 877 878 // preload outlines 879 if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); 880 else 881 882 hs.preloadFullImage(0); 883 884 // preload cursor 885 if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); 886}, 887 888 889init : function () { 890 if (!hs.container) { 891 892 hs.ieLt7 = hs.ie && hs.uaVersion < 7; 893 hs.ieLt9 = hs.ie && hs.uaVersion < 9; 894 895 hs.getPageSize(); 896 hs.ie6SSL = hs.ieLt7 && location.protocol == 'https:'; 897 for (var x in hs.langDefaults) { 898 if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; 899 else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') 900 hs.lang[x] = hs.langDefaults[x]; 901 } 902 903 hs.container = hs.createElement('div', { 904 className: 'highslide-container' 905 }, { 906 position: 'absolute', 907 left: 0, 908 top: 0, 909 width: '100%', 910 zIndex: hs.zIndexCounter, 911 direction: 'ltr' 912 }, 913 document.body, 914 true 915 ); 916 hs.loading = hs.createElement('a', { 917 className: 'highslide-loading', 918 title: hs.lang.loadingTitle, 919 innerHTML: hs.lang.loadingText, 920 href: 'javascript:;' 921 }, { 922 position: 'absolute', 923 top: '-9999px', 924 opacity: hs.loadingOpacity, 925 zIndex: 1 926 }, hs.container 927 ); 928 hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); 929 hs.viewport = hs.createElement('div', { 930 className: 'highslide-viewport highslide-viewport-size' 931 }, { 932 visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden' 933 }, hs.container, 1 934 ); 935 hs.clearing = hs.createElement('div', null, 936 { clear: 'both', paddingTop: '1px' }, null, true); 937 938 // http://www.robertpenner.com/easing/ 939 Math.linearTween = function (t, b, c, d) { 940 return c*t/d + b; 941 }; 942 Math.easeInQuad = function (t, b, c, d) { 943 return c*(t/=d)*t + b; 944 }; 945 Math.easeOutQuad = function (t, b, c, d) { 946 return -c *(t/=d)*(t-2) + b; 947 }; 948 949 hs.hideSelects = hs.ieLt7; 950 hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' 951 || (hs.ieLt7 && hs.uaVersion < 5.5)); 952 hs.fireEvent(this, 'onActivate'); 953 } 954}, 955ready : function() { 956 if (hs.isReady) return; 957 hs.isReady = true; 958 for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); 959}, 960 961updateAnchors : function() { 962 var el, els, all = [], images = [], htmls = [],groups = {}, re; 963 964 for (var i = 0; i < hs.openerTagNames.length; i++) { 965 els = document.getElementsByTagName(hs.openerTagNames[i]); 966 for (var j = 0; j < els.length; j++) { 967 el = els[j]; 968 re = hs.isHsAnchor(el); 969 if (re) { 970 hs.push(all, el); 971 if (re[0] == 'hs.expand') hs.push(images, el); 972 else if (re[0] == 'hs.htmlExpand') hs.push(htmls, el); 973 var g = hs.getParam(el, 'slideshowGroup') || 'none'; 974 if (!groups[g]) groups[g] = []; 975 hs.push(groups[g], el); 976 } 977 } 978 } 979 hs.anchors = { all: all, groups: groups, images: images, htmls: htmls }; 980 return hs.anchors; 981 982}, 983 984getAnchors : function() { 985 return hs.anchors || hs.updateAnchors(); 986}, 987 988 989close : function(el) { 990 var exp = hs.getExpander(el); 991 if (exp) exp.close(); 992 return false; 993} 994}; // end hs object 995hs.fx = function( elem, options, prop ){ 996 this.options = options; 997 this.elem = elem; 998 this.prop = prop; 999 1000 if (!options.orig) options.orig = {}; 1001}; 1002hs.fx.prototype = { 1003 update: function(){ 1004 (hs.fx.step[this.prop] || hs.fx.step._default)(this); 1005 1006 if (this.options.step) 1007 this.options.step.call(this.elem, this.now, this); 1008 1009 }, 1010 custom: function(from, to, unit){ 1011 this.startTime = (new Date()).getTime(); 1012 this.start = from; 1013 this.end = to; 1014 this.unit = unit;// || this.unit || "px"; 1015 this.now = this.start; 1016 this.pos = this.state = 0; 1017 1018 var self = this; 1019 function t(gotoEnd){ 1020 return self.step(gotoEnd); 1021 } 1022 1023 t.elem = this.elem; 1024 1025 if ( t() && hs.timers.push(t) == 1 ) { 1026 hs.timerId = setInterval(function(){ 1027 var timers = hs.timers; 1028 1029 for ( var i = 0; i < timers.length; i++ ) 1030 if ( !timers[i]() ) 1031 timers.splice(i--, 1); 1032 1033 if ( !timers.length ) { 1034 clearInterval(hs.timerId); 1035 } 1036 }, 13); 1037 } 1038 }, 1039 step: function(gotoEnd){ 1040 var t = (new Date()).getTime(); 1041 if ( gotoEnd || t >= this.options.duration + this.startTime ) { 1042 this.now = this.end; 1043 this.pos = this.state = 1; 1044 this.update(); 1045 1046 this.options.curAnim[ this.prop ] = true; 1047 1048 var done = true; 1049 for ( var i in this.options.curAnim ) 1050 if ( this.options.curAnim[i] !== true ) 1051 done = false; 1052 1053 if ( done ) { 1054 if (this.options.complete) this.options.complete.call(this.elem); 1055 } 1056 return false; 1057 } else { 1058 var n = t - this.startTime; 1059 this.state = n / this.options.duration; 1060 this.pos = this.options.easing(n, 0, 1, this.options.duration);
1061 this.now = this.start + ((this.end - this.start) * this.pos); 1062 this.update(); 1063 } 1064 return true; 1065 } 1066 1067}; 1068 1069hs.extend( hs.fx, { 1070 step: { 1071 1072 opacity: function(fx){ 1073 hs.setStyles(fx.elem, { opacity: fx.now }); 1074 }, 1075 1076 _default: function(fx){ 1077 try { 1078 if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) 1079 fx.elem.style[ fx.prop ] = fx.now + fx.unit; 1080 else 1081 fx.elem[ fx.prop ] = fx.now; 1082 } catch (e) {} 1083 } 1084 } 1085}); 1086 1087hs.Outline = function (outlineType, onLoad) { 1088 this.onLoad = onLoad; 1089 this.outlineType = outlineType; 1090 var v = hs.uaVersion, tr; 1091 1092 this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; 1093 if (!outlineType) { 1094 if (onLoad) onLoad(); 1095 return; 1096 } 1097 1098 hs.init(); 1099 this.table = hs.createElement( 1100 'table', { 1101 cellSpacing: 0 1102 }, { 1103 visibility: 'hidden', 1104 position: 'absolute', 1105 borderCollapse: 'collapse', 1106 width: 0 1107 }, 1108 hs.container, 1109 true 1110 ); 1111 var tbody = hs.createElement('tbody', null, null, this.table, 1); 1112 1113 this.td = []; 1114 for (var i = 0; i <= 8; i++) { 1115 if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); 1116 this.td[i] = hs.createElement('td', null, null, tr, true); 1117 var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; 1118 hs.setStyles(this.td[i], style); 1119 }
1120 this.td[4].className = outlineType +' highslide-outline'; 1121 1122 this.preloadGraphic(); 1123}; 1124 1125hs.Outline.prototype = { 1126preloadGraphic : function () { 1127 var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; 1128 1129 var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; 1130 this.graphic = hs.createElement('img', null, { position: 'absolute', 1131 top: '-9999px' }, appendTo, true); // for onload trigger 1132 1133 var pThis = this; 1134 this.graphic.onload = function() { pThis.onGraphicLoad(); }; 1135 1136 this.graphic.src = src; 1137}, 1138 1139onGraphicLoad : function () { 1140 var o = this.offset = this.graphic.width / 4, 1141 pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], 1142 dim = { height: (2*o) +'px', width: (2*o) +'px' }; 1143 for (var i = 0; i <= 8; i++) { 1144 if (pos[i]) { 1145 if (this.hasAlphaImageLoader) { 1146 var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; 1147 var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); 1148 hs.createElement ('div', null, { 1149 filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", 1150 position: 'absolute', 1151 width: w, 1152 height: this.graphic.height +'px', 1153 left: (pos[i][0]*o)+'px', 1154 top: (pos[i][1]*o)+'px' 1155 }, 1156 div, 1157 true); 1158 } else { 1159 hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); 1160 } 1161 1162 if (window.opera && (i == 3 || i ==5)) 1163 hs.createElement('div', null, dim, this.td[i], true); 1164 1165 hs.setStyles (this.td[i], dim); 1166 } 1167 } 1168 this.graphic = null; 1169 if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); 1170 hs.pendingOutlines[this.outlineType] = this; 1171 if (this.onLoad) this.onLoad(); 1172}, 1173 1174setPosition : function (pos, offset, vis, dur, easing) { 1175 var exp = this.exp, 1176 stl = exp.wrapper.style, 1177 offset = offset || 0, 1178 pos = pos || { 1179 x: exp.x.pos + offset, 1180 y: exp.y.pos + offset, 1181 w: exp.x.get('wsize') - 2 * offset, 1182 h: exp.y.get('wsize') - 2 * offset 1183 }; 1184 if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) 1185 ? 'visible' : 'hidden'; 1186 hs.setStyles(this.table, { 1187 left: (pos.x - this.offset) +'px', 1188 top: (pos.y - this.offset) +'px', 1189 width: (pos.w + 2 * this.offset) +'px' 1190 }); 1191 1192 pos.w -= 2 * this.offset; 1193 pos.h -= 2 * this.offset; 1194 hs.setStyles (this.td[4], { 1195 width: pos.w >= 0 ? pos.w +'px' : 0, 1196 height: pos.h >= 0 ? pos.h +'px' : 0 1197 }); 1198 if (this.hasAlphaImageLoader) this.td[3].style.height 1199 = this.td[5].style.height = this.td[4].style.height; 1200 1201}, 1202 1203destroy : function(hide) { 1204 if (hide) this.table.style.visibility = 'hidden'; 1205 else hs.discardElement(this.table); 1206} 1207}; 1208 1209hs.Dimension = function(exp, dim) { 1210 this.exp = exp; 1211 this.dim = dim; 1212 this.ucwh = dim == 'x' ? 'Width' : 'Height'; 1213 this.wh = this.ucwh.toLowerCase(); 1214 this.uclt = dim == 'x' ? 'Left' : 'Top'; 1215 this.lt = this.uclt.toLowerCase(); 1216 this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; 1217 this.rb = this.ucrb.toLowerCase(); 1218 this.p1 = this.p2 = 0; 1219}; 1220hs.Dimension.prototype = { 1221get : function(key) { 1222 switch (key) { 1223 case 'loadingPos': 1224 return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; 1225 case 'loadingPosXfade': 1226 return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2; 1227 case 'wsize': 1228 return this.size + 2 * this.cb + this.p1 + this.p2; 1229 case 'fitsize': 1230 return this.clientSize - this.marginMin - this.marginMax; 1231 case 'maxsize': 1232 return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; 1233 case 'opos': 1234 return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); 1235 case 'osize': 1236 return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); 1237 case 'imgPad': 1238 return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; 1239 1240 } 1241}, 1242calcBorders: function() { 1243 // correct for borders 1244 this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; 1245 1246 this.marginMax = hs['margin'+ this.ucrb]; 1247}, 1248calcThumb: function() { 1249 this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : 1250 this.exp.el['offset'+ this.ucwh]; 1251 this.tpos = this.exp.tpos[this.dim]; 1252 this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; 1253 if (this.tpos == 0 || this.tpos == -1) { 1254 this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; 1255 }; 1256}, 1257calcExpanded: function() { 1258 var exp = this.exp; 1259 this.justify = 'auto'; 1260 1261 // get alignment 1262 if (exp.align == 'center') this.justify = 'center'; 1263 else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null; 1264 else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max'; 1265 1266 1267 // size and position 1268 this.pos = this.tpos - this.cb + this.tb; 1269 1270 if (this.maxHeight && this.dim == 'x') 1271 exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); 1272 1273 this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); 1274 this.minSize = exp.allowSizeReduction ? 1275 Math.min(exp['min'+ this.ucwh], this.full) :this.full; 1276 if (exp.isImage && exp.useBox) { 1277 this.size = exp[this.wh]; 1278 this.imgSize = this.full; 1279 } 1280 if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; 1281 this.target = exp['target'+ this.dim.toUpperCase()]; 1282 this.marginMin = hs['margin'+ this.uclt]; 1283 this.scroll = hs.page['scroll'+ this.uclt]; 1284 this.clientSize = hs.page[this.wh]; 1285}, 1286setSize: function(i) { 1287 var exp = this.exp; 1288 if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { 1289 this.imgSize = i; 1290 this.size = Math.max(this.size, this.imgSize); 1291 exp.content.style[this.lt] = this.get('imgPad')+'px'; 1292 } else 1293 this.size = i; 1294 1295 exp.content.style[this.wh] = i +'px'; 1296 exp.wrapper.style[this.wh] = this.get('wsize') +'px'; 1297 if (exp.outline) exp.outline.setPosition(); 1298 if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px'; 1299 if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try { 1300 exp.iDoc.body.style.overflow = 'auto'; 1301 } catch (e) {} 1302 if (exp.isHtml) { 1303 var d = exp.scrollerDiv; 1304 if (this.sizeDiff === undefined) 1305 this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh]; 1306 d.style[this.wh] = (this.size - this.sizeDiff) +'px'; 1307 1308 if (this.dim == 'x') exp.mediumContent.style.width = 'auto'; 1309 if (exp.body) exp.body.style[this.wh] = 'auto'; 1310 } 1311 if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); 1312 if (this.dim == 'x' && exp.slideshow && exp.isImage) { 1313 if (i == this.full) exp.slideshow.disable('full-expand'); 1314 else exp.slideshow.enable('full-expand'); 1315 } 1316}, 1317setPos: function(i) { 1318 this.pos = i; 1319 this.exp.wrapper.style[this.lt] = i +'px'; 1320 1321 if (this.exp.outline) this.exp.outline.setPosition(); 1322 1323} 1324}; 1325 1326hs.Expander = function(a, params, custom, contentType) { 1327 if (document.readyState && hs.ie && !hs.isReady) { 1328 hs.addEventListener(document, 'ready', function() { 1329 new hs.Expander(a, params, custom, contentType); 1330 }); 1331 return; 1332 } 1333 this.a = a; 1334 this.custom = custom; 1335 this.contentType = contentType || 'image'; 1336 this.isHtml = (contentType == 'html'); 1337 this.isImage = !this.isHtml; 1338 1339 hs.continuePreloading = false; 1340 this.overlays = []; 1341 this.last = hs.last; 1342 hs.last = null; 1343 hs.init(); 1344 var key = this.key = hs.expanders.length; 1345 // override inline parameters 1346 for (var i = 0; i < hs.overrides.length; i++) { 1347 var name = hs.overrides[i];
1348 this[name] = params && typeof params[name] != 'undefined' ? 1349 params[name] : hs[name]; 1350 } 1351 if (!this.src) this.src = a.href; 1352 1353 // get thumb 1354 var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; 1355 el = this.thumb = el.getElementsByTagName('img')[0] || el; 1356 this.thumbsUserSetId = el.id || a.id; 1357 if (!hs.fireEvent(this, 'onInit')) return true; 1358 1359 // check if already open 1360 for (var i = 0; i < hs.expanders.length; i++) { 1361 if (hs.expanders[i] && hs.expanders[i].a == a 1362 && !(this.last && this.transitions[1] == 'crossfade')) { 1363 hs.expanders[i].focus(); 1364 return false; 1365 } 1366 } 1367 1368 // cancel other 1369 if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { 1370 if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { 1371 hs.expanders[i].cancelLoading(); 1372 } 1373 } 1374 hs.expanders[key] = this; 1375 if (!hs.allowMultipleInstances && !hs.upcoming) { 1376 if (hs.expanders[key-1]) hs.expanders[key-1].close(); 1377 if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) 1378 hs.expanders[hs.focusKey].close(); 1379 } 1380 1381 // initiate metrics 1382 this.el = el; 1383 this.tpos = this.pageOrigin || hs.getPosition(el); 1384 hs.getPageSize(); 1385 var x = this.x = new hs.Dimension(this, 'x'); 1386 x.calcThumb(); 1387 var y = this.y = new hs.Dimension(this, 'y'); 1388 y.calcThumb(); 1389 if (/area/i.test(el.tagName)) this.getImageMapAreaCorrection(el); 1390 this.wrapper = hs.createElement( 1391 'div', { 1392 id: 'highslide-wrapper-'+ this.key, 1393 className: 'highslide-wrapper '+ this.wrapperClassName 1394 }, { 1395 visibility: 'hidden', 1396 position: 'absolute', 1397 zIndex: hs.zIndexCounter += 2 1398 }, null, true ); 1399 1400 this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; 1401 if (this.contentType == 'image' && this.outlineWhileAnimating == 2) 1402 this.outlineWhileAnimating = 0; 1403 1404 // get the outline 1405 if (!this.outlineType 1406 || (this.last && this.isImage && this.transitions[1] == 'crossfade')) { 1407 this[this.contentType +'Create'](); 1408 1409 } else if (hs.pendingOutlines[this.outlineType]) { 1410 this.connectOutline(); 1411 this[this.contentType +'Create'](); 1412 1413 } else { 1414 this.showLoading(); 1415 var exp = this; 1416 new hs.Outline(this.outlineType, 1417 function () { 1418 exp.connectOutline(); 1419 exp[exp.contentType +'Create'](); 1420 } 1421 ); 1422 } 1423 return true; 1424}; 1425 1426hs.Expander.prototype = { 1427error : function(e) { 1428 if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); 1429 else window.location.href = this.src; 1430}, 1431 1432connectOutline : function() { 1433 var outline = this.outline = hs.pendingOutlines[this.outlineType]; 1434 outline.exp = this; 1435 outline.table.style.zIndex = this.wrapper.style.zIndex - 1; 1436 hs.pendingOutlines[this.outlineType] = null; 1437}, 1438 1439showLoading : function() { 1440 if (this.onLoadStarted || this.loading) return; 1441 1442 this.loading = hs.loading; 1443 var exp = this; 1444 this.loading.onclick = function() { 1445 exp.cancelLoading(); 1446 }; 1447 1448 1449 if (!hs.fireEvent(this, 'onShowLoading')) return; 1450 var exp = this, 1451 l = this.x.get('loadingPos') +'px', 1452 t = this.y.get('loadingPos') +'px'; 1453 if (!tgt && this.last && this.transitions[1] == 'crossfade') 1454 var tgt = this.last; 1455 if (tgt) { 1456 l = tgt.x.get('loadingPosXfade') +'px'; 1457 t = tgt.y.get('loadingPosXfade') +'px'; 1458 this.loading.style.zIndex = hs.zIndexCounter++; 1459 } 1460 setTimeout(function () { 1461 if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} 1462 , 100); 1463}, 1464 1465imageCreate : function() { 1466 var exp = this; 1467 1468 var img = document.createElement('img'); 1469 this.content = img; 1470 img.onload = function () { 1471 if (hs.expanders[exp.key]) exp.contentLoaded(); 1472 }; 1473 if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; 1474 img.className = 'highslide-image'; 1475 hs.setStyles(img, { 1476 visibility: 'hidden', 1477 display: 'block', 1478 position: 'absolute', 1479 maxWidth: '9999px', 1480 zIndex: 3 1481 }); 1482 img.title = hs.lang.restoreTitle; 1483 if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); 1484 if (hs.ie && hs.flushImgSize) img.src = null; 1485 img.src = this.src; 1486 1487 this.showLoading(); 1488}, 1489 1490htmlCreate : function () { 1491 if (!hs.fireEvent(this, 'onBeforeGetContent')) return; 1492 1493 this.content = hs.getCacheBinding(this.a); 1494 if (!this.content) 1495 this.content = hs.getNode(this.contentId); 1496 if (!this.content) 1497 this.content = hs.getSelfRendered(); 1498 this.getInline(['maincontent']); 1499 if (this.maincontent) { 1500 var body = hs.getElementByClass(this.content, 'div', 'highslide-body'); 1501 if (body) body.appendChild(this.maincontent); 1502 this.maincontent.style.display = 'block'; 1503 } 1504 hs.fireEvent(this, 'onAfterGetContent'); 1505 1506 var innerContent = this.innerContent = this.content; 1507 1508 if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent); 1509 1510 // the content tree 1511 hs.container.appendChild(this.wrapper); 1512 hs.setStyles( this.wrapper, { 1513 position: 'static', 1514 padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px' 1515 }); 1516 this.content = hs.createElement( 1517 'div', { 1518 className: 'highslide-html' 1519 }, { 1520 position: 'relative', 1521 zIndex: 3, 1522 height: 0, 1523 overflow: 'hidden' 1524 }, 1525 this.wrapper 1526 ); 1527 this.mediumContent = hs.createElement('div', null, null, this.content, 1); 1528 this.mediumContent.appendChild(innerContent); 1529 1530 hs.setStyles (innerContent, { 1531 position: 'relative', 1532 display: 'block', 1533 direction: hs.lang.cssDirection || '' 1534 }); 1535 if (this.width) innerContent.style.width = this.width +'px'; 1536 if (this.height) hs.setStyles(innerContent, { 1537 height: this.height +'px', 1538 overflow: 'hidden' 1539 }); 1540 if (innerContent.offsetWidth < this.minWidth) 1541 innerContent.style.width = this.minWidth +'px'; 1542 1543 1544 1545 if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) { 1546 this.showLoading(); 1547 var exp = this; 1548 var ajax = new hs.Ajax(this.a, innerContent); 1549 ajax.src = this.src;
1550 ajax.onLoad = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); }; 1551 ajax.onError = function () { location.href = exp.src; }; 1552 ajax.run(); 1553 } 1554 else 1555 1556 if (this.objectType == 'iframe' && this.objectLoadTime == 'before') { 1557 this.writeExtendedContent(); 1558 } 1559 else 1560 this.contentLoaded(); 1561}, 1562 1563contentLoaded : function() { 1564 try { 1565 if (!this.content) return; 1566 this.content.onload = null; 1567 if (this.onLoadStarted) return; 1568 else this.onLoadStarted = true; 1569 1570 var x = this.x, y = this.y; 1571 1572 if (this.loading) { 1573 hs.setStyles(this.loading, { top: '-9999px' }); 1574 this.loading = null; 1575 hs.fireEvent(this, 'onHideLoading'); 1576 } 1577 if (this.isImage) { 1578 x.full = this.content.width; 1579 y.full = this.content.height; 1580 1581 hs.setStyles(this.content, { 1582 width: x.t +'px', 1583 height: y.t +'px' 1584 }); 1585 this.wrapper.appendChild(this.content); 1586 hs.container.appendChild(this.wrapper); 1587 } else if (this.htmlGetSize) this.htmlGetSize(); 1588 1589 x.calcBorders(); 1590 y.calcBorders(); 1591 1592 hs.setStyles (this.wrapper, { 1593 left: (x.tpos + x.tb - x.cb) +'px', 1594 top: (y.tpos + x.tb - y.cb) +'px' 1595 }); 1596 1597 1598 this.initSlideshow(); 1599 this.getOverlays(); 1600 1601 var ratio = x.full / y.full; 1602 x.calcExpanded(); 1603 this.justify(x); 1604 1605 y.calcExpanded(); 1606 this.justify(y); 1607 if (this.isHtml) this.htmlSizeOperations(); 1608 if (this.overlayBox) this.sizeOverlayBox(0, 1); 1609 1610 1611 if (this.allowSizeReduction) { 1612 if (this.isImage) 1613 this.correctRatio(ratio); 1614 else this.fitOverlayBox(); 1615 var ss = this.slideshow; 1616 if (ss && this.last && ss.controls && ss.fixedControls) { 1617 var pos = ss.overlayOptions.position || '', p; 1618 for (var dim in hs.oPos) for (var i = 0; i < 5; i++) { 1619 p = this[dim]; 1620 if (pos.match(hs.oPos[dim][i])) { 1621 p.pos = this.last[dim].pos 1622 + (this.last[dim].p1 - p.p1) 1623 + (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i]; 1624 if (ss.fixedControls == 'fit') { 1625 if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax) 1626 p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2; 1627 if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; 1628 } 1629 } 1630 } 1631 } 1632 if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { 1633 this.createFullExpand(); 1634 if (this.overlays.length == 1) this.sizeOverlayBox(); 1635 } 1636 } 1637 this.show(); 1638 1639 } catch (e) { 1640 this.error(e); 1641 } 1642}, 1643 1644 1645setObjContainerSize : function(parent, auto) { 1646 var c = hs.getElementByClass(parent, 'DIV', 'highslide-body'); 1647 if (/(iframe|swf)/.test(this.objectType)) { 1648 if (this.objectWidth) c.style.width = this.objectWidth +'px'; 1649 if (this.objectHeight) c.style.height = this.objectHeight +'px'; 1650 } 1651}, 1652 1653writeExtendedContent : function () { 1654 if (this.hasExtendedContent) return; 1655 var exp = this; 1656 this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); 1657 if (this.objectType == 'iframe') { 1658 this.showLoading(); 1659 var ruler = hs.clearing.cloneNode(1); 1660 this.body.appendChild(ruler); 1661 this.newWidth = this.innerContent.offsetWidth; 1662 if (!this.objectWidth) this.objectWidth = ruler.offsetWidth; 1663 var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight, 1664 h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom, 1665 onload = this.objectLoadTime == 'before' ? 1666 ' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : ''; 1667 this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" ' 1668 +' style="width:'+ this.objectWidth +'px; height:'+ h +'px" ' 1669 + onload +' src="'+ this.src +'" allowfullscreen></iframe>'; 1670 this.ruler = this.body.getElementsByTagName('div')[0]; 1671 this.iframe = this.body.getElementsByTagName('iframe')[0]; 1672 1673 if (this.objectLoadTime == 'after') this.correctIframeSize(); 1674 1675 } 1676 if (this.objectType == 'swf') { 1677 this.body.id = this.body.id || 'hs-flash-id-' + this.key; 1678 var a = this.swfOptions; 1679 if (!a.params) a.params = {}; 1680 if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent'; 1681 if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, 1682 a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes); 1683 } 1684 this.hasExtendedContent = true; 1685}, 1686htmlGetSize : function() { 1687 if (this.iframe && !this.objectHeight) { // loadtime before 1688 this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px'; 1689 } 1690 this.innerContent.appendChild(hs.clearing); 1691 if (!this.x.full) this.x.full = this.innerContent.offsetWidth; 1692 this.y.full = this.innerContent.offsetHeight; 1693 this.innerContent.removeChild(hs.clearing); 1694 if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug 1695 this.newHeight = parseInt(this.innerContent.currentStyle.height); 1696 } 1697 hs.setStyles( this.wrapper, { position: 'absolute', padding: '0'}); 1698 hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'}); 1699 1700}, 1701 1702getIframePageHeight : function() { 1703 var h; 1704 try { 1705 var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document; 1706 var clearing = doc.createElement('div'); 1707 clearing.style.clear = 'both'; 1708 doc.body.appendChild(clearing); 1709 h = clearing.offsetTop; 1710 if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop) 1711 + parseInt(doc.body.currentStyle.marginBottom) - 1; 1712 } catch (e) { // other domain 1713 h = 300; 1714 } 1715 return h; 1716}, 1717correctIframeSize : function () { 1718 var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth; 1719 hs.discardElement(this.ruler); 1720 if (wDiff < 0) wDiff = 0; 1721 1722 var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight; 1723 if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try { 1724 this.iDoc.body.style.overflow = 'hidden'; 1725 } catch (e) {} 1726 hs.setStyles(this.iframe, { 1727 width: Math.abs(this.x.size - wDiff) +'px', 1728 height: Math.abs(this.y.size - hDiff) +'px' 1729 }); 1730 hs.setStyles(this.body, { 1731 width: this.iframe.style.width, 1732 height: this.iframe.style.height 1733 }); 1734 1735 this.scrollingContent = this.iframe; 1736 this.scrollerDiv = this.scrollingContent; 1737 1738}, 1739htmlSizeOperations : function () { 1740 1741 this.setObjContainerSize(this.innerContent); 1742 1743 1744 if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeE
1744xtendedContent(); 1745 1746 // handle minimum size 1747 if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full; 1748 if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full; 1749 this.scrollerDiv = this.innerContent; 1750 hs.setStyles(this.mediumContent, { 1751 position: 'relative', 1752 width: this.x.size +'px' 1753 }); 1754 hs.setStyles(this.innerContent, { 1755 border: 'none', 1756 width: 'auto', 1757 height: 'auto' 1758 }); 1759 var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); 1760 if (node && !/(iframe|swf)/.test(this.objectType)) { 1761 var cNode = node; // wrap to get true size 1762 node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true); 1763 cNode.parentNode.insertBefore(node, cNode); 1764 node.appendChild(hs.clearing); // IE6 1765 node.appendChild(cNode); 1766 1767 var wDiff = this.innerContent.offsetWidth - node.offsetWidth; 1768 var hDiff = this.innerContent.offsetHeight - node.offsetHeight; 1769 node.removeChild(hs.clearing); 1770 1771 var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug 1772 hs.setStyles(node, { 1773 width: (this.x.size - wDiff - kdeBugCorr) +'px', 1774 height: (this.y.size - hDiff) +'px', 1775 overflow: 'auto', 1776 position: 'relative' 1777 } 1778 ); 1779 if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight) { 1780 node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px'; 1781 } 1782 this.scrollingContent = node; 1783 this.scrollerDiv = this.scrollingContent; 1784 } 1785 if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize(); 1786 if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content; 1787 1788 if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) { 1789 this.x.size += 17; // room for scrollbars 1790 } 1791 if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) { 1792 setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", 1793 hs.expandDuration); 1794 } 1795}, 1796 1797getImageMapAreaCorrection : function(area) { 1798 var c = area.coords.split(','); 1799 for (var i = 0; i < c.length; i++) c[i] = parseInt(c[i]); 1800 1801 if (area.shape.toLowerCase() == 'circle') { 1802 this.x.tpos += c[0] - c[2]; 1803 this.y.tpos += c[1] - c[2]; 1804 this.x.t = this.y.t = 2 * c[2]; 1805 } else { 1806 var maxX, maxY, minX = maxX = c[0], minY = maxY = c[1]; 1807 for (var i = 0; i < c.length; i++) { 1808 if (i % 2 == 0) { 1809 minX = Math.min(minX, c[i]); 1810 maxX = Math.max(maxX, c[i]); 1811 } else { 1812 minY = Math.min(minY, c[i]); 1813 maxY = Math.max(maxY, c[i]); 1814 } 1815 } 1816 this.x.tpos += minX; 1817 this.x.t = maxX - minX; 1818 this.y.tpos += minY; 1819 this.y.t = maxY - minY; 1820 } 1821}, 1822justify : function (p, moveOnly) { 1823 var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; 1824 1825 if (tgt && tgt.match(/ /)) { 1826 tgtArr = tgt.split(' '); 1827 tgt = tgtArr[0]; 1828 } 1829 if (tgt && hs.$(tgt)) { 1830 p.pos = hs.getPosition(hs.$(tgt))[dim]; 1831 if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) 1832 p.pos += parseInt(tgtArr[1]); 1833 if (p.size < p.minSize) p.size = p.minSize; 1834 1835 } else if (p.justify == 'auto' || p.justify == 'center') { 1836 1837 var hasMovedMin = false; 1838 1839 var allowReduce = p.exp.allowSizeReduction; 1840 if (p.justify == 'center') 1841 p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2); 1842 else 1843 p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); 1844 if (p.pos < p.scroll + p.marginMin) { 1845 p.pos = p.scroll + p.marginMin; 1846 hasMovedMin = true; 1847 } 1848 if (!moveOnly && p.size < p.minSize) { 1849 p.size = p.minSize; 1850 allowReduce = false; 1851 } 1852 if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { 1853 if (!moveOnly && hasMovedMin && allowReduce) { 1854 p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); 1855 } else if (p.get('wsize') < p.get('fitsize')) { 1856 p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); 1857 } else { // image larger than viewport 1858 p.pos = p.scroll + p.marginMin; 1859 if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); 1860 } 1861 } 1862 1863 if (!moveOnly && p.size < p.minSize) { 1864 p.size = p.minSize; 1865 allowReduce = false; 1866 } 1867 1868 1869 } else if (p.justify == 'max') { 1870 p.pos = Math.floor(p.pos - p.size + p.t); 1871 } 1872 1873 1874 if (p.pos < p.marginMin) { 1875 var tmpMin = p.pos; 1876 p.pos = p.marginMin; 1877 1878 if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); 1879 1880 } 1881}, 1882
1883correctRatio : function(ratio) { 1884 var x = this.x, 1885 y = this.y, 1886 changed = false, 1887 xSize = Math.min(x.full, x.size), 1888 ySize = Math.min(y.full, y.size), 1889 useBox = (this.useBox || hs.padToMinWidth); 1890 1891 if (xSize / ySize > ratio) { // width greater 1892 xSize = ySize * ratio; 1893 if (xSize < x.minSize) { // below minWidth 1894 xSize = x.minSize; 1895 ySize = xSize / ratio; 1896 } 1897 changed = true; 1898 1899 } else if (xSize / ySize < ratio) { // height greater 1900 ySize = xSize / ratio; 1901 changed = true; 1902 } 1903 1904 if (hs.padToMinWidth && x.full < x.minSize) { 1905 x.imgSize = x.full; 1906 y.size = y.imgSize = y.full; 1907 } else if (this.useBox) { 1908 x.imgSize = xSize; 1909 y.imgSize = ySize; 1910 } else { 1911 x.size = xSize; 1912 y.size = ySize; 1913 } 1914 changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); 1915 if (useBox && y.size < y.imgSize) { 1916 y.imgSize = y.size; 1917 x.imgSize = y.size * ratio; 1918 } 1919 if (changed || useBox) { 1920 x.pos = x.tpos - x.cb + x.tb; 1921 x.minSize = x.size; 1922 this.justify(x, true); 1923 1924 y.pos = y.tpos - y.cb + y.tb; 1925 y.minSize = y.size; 1926 this.justify(y, true); 1927 if (this.overlayBox) this.sizeOverlayBox(); 1928 } 1929 1930 1931}, 1932fitOverlayBox : function(ratio, changed) { 1933 var x = this.x, y = this.y; 1934 if (this.overlayBox && (this.isImage || this.allowHeightReduction)) { 1935 while (y.size > this.minHeight && x.size > this.minWidth 1936 && y.get('wsize') > y.get('fitsize')) { 1937 y.size -= 10; 1938 if (ratio) x.size = y.size * ratio; 1939 this.sizeOverlayBox(0, 1); 1940 changed = true; 1941 } 1942 } 1943 return changed; 1944}, 1945 1946reflow : function () { 1947 if (this.scrollerDiv) { 1948 var h = /iframe/i.test(this.scrollerDiv.tagName) ? (this.getIframePageHeight() + 1) +'px' : 'auto'; 1949 if (this.body) this.body.style.height = h; 1950 this.scrollerDiv.style.height = h; 1951 this.y.setSize(this.innerContent.offsetHeight); 1952 } 1953}, 1954 1955show : function () { 1956 var x = this.x, y = this.y; 1957 this.doShowHide('hidden'); 1958 hs.fireEvent(this, 'onBeforeExpand'); 1959 if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb(); 1960 1961 // Apply size change 1962 this.changeSize( 1963 1, { 1964 wrapper: { 1965 width : x.get('wsize'), 1966 height : y.get('wsize'), 1967 left: x.pos, 1968 top: y.pos 1969 }, 1970 content: { 1971 left: x.p1 + x.get('imgPad'), 1972 top: y.p1 + y.get('imgPad'), 1973 width:x.imgSize ||x.size, 1974 height:y.imgSize ||y.size 1975 } 1976 }, 1977 hs.expandDuration 1978 ); 1979}, 1980 1981changeSize : function(up, to, dur) { 1982 // transition 1983 var trans = this.transitions, 1984 other = up ? (this.last ? this.last.a : null) : hs.upcoming, 1985 t = (trans[1] && other 1986 && hs.getParam(other, 'transitions')[1] == trans[1]) ? 1987 trans[1] : trans[0]; 1988 1989 if (this[t] && t != 'expand') { 1990 this[t](up, to); 1991 return; 1992 } 1993 1994 if (this.outline && !this.outlineWhileAnimating) { 1995 if (up) this.outline.setPosition(); 1996 else this.outline.destroy( 1997 (this.isHtml && this.preserveContent)); 1998 } 1999 2000 2001 if (!up) this.destroyOverlays(); 2002 2003 var exp = this, 2004 x = exp.x, 2005 y = exp.y, 2006 easing = this.easing; 2007 if (!up) easing = this.easingClose || easing; 2008 var after = up ? 2009 function() { 2010 2011 if (exp.outline) exp.outline.table.style.visibility = "visible"; 2012 setTimeout(function() { 2013 exp.afterExpand(); 2014 }, 50); 2015 } : 2016 function() { 2017 exp.afterClose(); 2018 }; 2019 if (up) hs.setStyles( this.wrapper, { 2020 width: x.t +'px', 2021 height: y.t +'px' 2022 }); 2023 if (up && this.isHtml) { 2024 hs.setStyles(this.wrapper, { 2025 left: (x.tpos - x.cb + x.tb) +'px', 2026 top: (y.tpos - y.cb + y.tb) +'px' 2027 }); 2028 } 2029 if (this.fadeInOut) { 2030 hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); 2031 hs.extend(to.wrapper, { opacity: up }); 2032 } 2033 hs.animate( this.wrapper, to.wrapper, { 2034 duration: dur, 2035 easing: easing, 2036 step: function(val, args) { 2037 if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { 2038 var fac = up ? args.pos : 1 - args.pos; 2039 var pos = { 2040 w: x.t + (x.get('wsize') - x.t) * fac, 2041 h: y.t + (y.get('wsize') - y.t) * fac, 2042 x: x.tpos + (x.pos - x.tpos) * fac, 2043 y: y.tpos + (y.pos - y.tpos) * fac 2044 }; 2045 exp.outline.setPosition(pos, 0, 1); 2046 } 2047 if (exp.isHtml) { 2048 if (args.prop == 'left') 2049 exp.mediumContent.style.left = (x.pos - val) +'px'; 2050 if (args.prop == 'top') 2051 exp.mediumContent.style.top = (y.pos - val) +'px'; 2052 } 2053 } 2054 }); 2055 hs.animate( this.content, to.content, dur, easing, after); 2056 if (up) { 2057 this.wrapper.style.visibility = 'visible'; 2058 this.content.style.visibility = 'visible'; 2059 if (this.isHtml) this.innerContent.style.visibility = 'visible';
2060 this.a.className += ' highslide-active-anchor'; 2061 } 2062}, 2063 2064 2065 2066fade : function(up, to) { 2067 this.outlineWhileAnimating = false; 2068 var exp = this, t = up ? hs.expandDuration : 0; 2069 2070 if (up) { 2071 hs.animate(this.wrapper, to.wrapper, 0); 2072 hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' }); 2073 hs.animate(this.content, to.content, 0); 2074 this.content.style.visibility = 'visible'; 2075 2076 hs.animate(this.wrapper, { opacity: 1 }, t, null, 2077 function() { exp.afterExpand(); }); 2078 } 2079 2080 if (this.outline) { 2081 this.outline.table.style.zIndex = this.wrapper.style.zIndex; 2082 var dir = up || -1, 2083 offset = this.outline.offset, 2084 startOff = up ? 3 : offset, 2085 endOff = up? offset : 3; 2086 for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) { 2087 (function() { 2088 var o = up ? endOff - i : startOff - i; 2089 setTimeout(function() { 2090 exp.outline.setPosition(0, o, 1); 2091 }, t); 2092 })(); 2093 } 2094 } 2095 2096 2097 if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50); 2098 else { 2099 setTimeout( function() { 2100 if (exp.outline) exp.outline.destroy(exp.preserveContent); 2101 2102 exp.destroyOverlays(); 2103 2104 hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){ 2105 exp.afterClose(); 2106 }); 2107 }, t); 2108 } 2109}, 2110crossfade : function (up, to, from) { 2111 if (!up) return; 2112 var exp = this, 2113 last = this.last, 2114 x = this.x, 2115 y = this.y, 2116 lastX = last.x, 2117 lastY = last.y, 2118 wrapper = this.wrapper, 2119 content = this.content, 2120 overlayBox = this.overlayBox; 2121 hs.removeEventListener(document, 'mousemove', hs.dragHandler); 2122 2123 hs.setStyles(content, { 2124 width: (x.imgSize || x.size) +'px', 2125 height: (y.imgSize || y.size) +'px' 2126 }); 2127 if (overlayBox) overlayBox.style.overflow = 'visible'; 2128 this.outline = last.outline; 2129 if (this.outline) this.outline.exp = exp; 2130 last.outline = null; 2131 var fadeBox = hs.createElement('div', { 2132 className: 'highslide-'+ this.contentType 2133 }, { 2134 position: 'absolute', 2135 zIndex: 4, 2136 overflow: 'hidden', 2137 display: 'none' 2138 } 2139 ); 2140 var names = { oldImg: last, newImg: this }; 2141 for (var n in names) { 2142 this[n] = names[n].content.cloneNode(!names[n].iframe); // #11 2143 hs.setStyles(this[n], { 2144 position: 'absolute', 2145 border: 0, 2146 visibility: 'visible' 2147 }); 2148 fadeBox.appendChild(this[n]); 2149 } 2150 wrapper.appendChild(fadeBox); 2151 if (this.isHtml) hs.setStyles(this.mediumContent, { 2152 left: 0, 2153 top: 0 2154 }); 2155 if (overlayBox) { 2156 overlayBox.className = ''; 2157 wrapper.appendChild(overlayBox); 2158 } 2159 fadeBox.style.display = ''; 2160 last.content.style.display = 'none'; 2161 2162 2163 if (hs.safari && hs.uaVersion < 525) { 2164 this.wrapper.style.visibility = 'visible'; 2165 } 2166 hs.animate(wrapper, { 2167 width: x.size 2168 }, { 2169 duration: hs.transitionDuration, 2170 step: function(val, args) { 2171 var pos = args.pos, 2172 invPos = 1 - pos; 2173 var prop, 2174 size = {}, 2175 props = ['pos', 'size', 'p1', 'p2']; 2176 for (var n in props) { 2177 prop = props[n]; 2178 size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]); 2179 size['y'+ prop] = Math.round(invPos * lastY[prop] + pos * y[prop]); 2180 size.ximgSize = Math.round( 2181 invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size)); 2182 size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad')); 2183 size.yimgSize = Math.round( 2184 invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size)); 2185 size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad')); 2186 } 2187 if (exp.outline) exp.outline.setPosition({ 2188 x: size.xpos, 2189 y: size.ypos, 2190 w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, 2191 h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb 2192 }); 2193 last.wrapper.style.clip = 'rect(' 2194 + (size.ypos - lastY.pos)+'px, ' 2195 + (size.xsize + size.xp1 + size.xp2 + size.xpos + 2 * lastX.cb - lastX.pos) +'px, ' 2196 + (size.ysize + size.yp1 + size.yp2 + size.ypos + 2 * lastY.cb - lastY.pos) +'px, ' 2197 + (size.xpos - lastX.pos)+'px)'; 2198 2199 hs.setStyles(content, { 2200 top: (size.yp1 + y.get('imgPad')) +'px', 2201 left: (size.xp1 + x.get('imgPad')) +'px', 2202 marginTop: (y.pos - size.ypos) +'px', 2203 marginLeft: (x.pos - size.xpos) +'px' 2204 }); 2205 hs.setStyles(wrapper, { 2206 top: size.ypos +'px', 2207 left: size.xpos +'px', 2208 width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px',
2209 height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px' 2210 }); 2211 hs.setStyles(fadeBox, { 2212 width: (size.ximgSize || size.xsize) + 'px', 2213 height: (size.yimgSize || size.ysize) +'px', 2214 left: (size.xp1 + size.ximgPad) +'px', 2215 top: (size.yp1 + size.yimgPad) +'px', 2216 visibility: 'visible' 2217 }); 2218 2219 hs.setStyles(exp.oldImg, { 2220 top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px', 2221 left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px' 2222 }); 2223 2224 hs.setStyles(exp.newImg, { 2225 opacity: pos, 2226 top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px', 2227 left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px' 2228 }); 2229 if (overlayBox) hs.setStyles(overlayBox, { 2230 width: size.xsize + 'px', 2231 height: size.ysize +'px', 2232 left: (size.xp1 + x.cb) +'px', 2233 top: (size.yp1 + y.cb) +'px' 2234 }); 2235 }, 2236 complete: function () { 2237 wrapper.style.visibility = content.style.visibility = 'visible'; 2238 content.style.display = 'block'; 2239 hs.discardElement(fadeBox); 2240 exp.afterExpand(); 2241 if (last.isHtml) last.htmlPrepareClose(); // #11 2242 last.afterClose(); 2243 exp.last = null; 2244 } 2245 2246 }); 2247}, 2248reuseOverlay : function(o, el) { 2249 if (!this.last) return false; 2250 for (var i = 0; i < this.last.overlays.length; i++) { 2251 var oDiv = hs.$('hsId'+ this.last.overlays[i]); 2252 if (oDiv && oDiv.hsId == o.hsId) { 2253 this.genOverlayBox(); 2254 oDiv.reuse = this.key; 2255 hs.push(this.overlays, this.last.overlays[i]); 2256 return true; 2257 } 2258 } 2259 return false; 2260}, 2261 2262 2263afterExpand : function() { 2264 this.isExpanded = true; 2265 this.focus(); 2266 2267 if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent(); 2268 if (this.iframe) { 2269 try { 2270 var exp = this, 2271 doc = this.iframe.contentDocument || this.iframe.contentWindow.document; 2272 hs.addEventListener(doc, 'mousedown', function () { 2273 if (hs.focusKey != exp.key) exp.focus(); 2274 }); 2275 } catch(e) {} 2276 if (hs.ie && typeof this.isClosing != 'boolean') // first open 2277 this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout 2278 } 2279 if (this.dimmingOpacity) hs.dim(this); 2280 if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; 2281 this.prepareNextOutline(); 2282 var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; 2283 this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') 2284 && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); 2285 if (this.overlayBox) this.showOverlays(); 2286 hs.fireEvent(this, 'onAfterExpand'); 2287 2288}, 2289 2290 2291prepareNextOutline : function() { 2292 var key = this.key; 2293 var outlineType = this.outlineType; 2294 new hs.Outline(outlineType, 2295 function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); 2296}, 2297 2298 2299preloadNext : function() { 2300 var next = this.getAdjacentAnchor(1); 2301 if (next && next.onclick.toString().match(/hs\.expand/)) 2302 var img = hs.createElement('img', { src: hs.getSrc(next) }); 2303}, 2304 2305 2306getAdjacentAnchor : function(op) { 2307 var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; 2308 if (as && !as[current + op] && this.slideshow && this.slideshow.repeat) { 2309 if (op == 1) return as[0]; 2310 else if (op == -1) return as[as.length-1]; 2311 } 2312 return (as && as[current + op]) || null; 2313}, 2314 2315getAnchorIndex : function() { 2316 var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; 2317 if (arr) for (var i = 0; i < arr.length; i++) { 2318 if (arr[i] == this.a) return i; 2319 } 2320 return null; 2321}, 2322 2323 2324getNumber : function() { 2325 if (this[this.numberPosition]) { 2326 var arr = hs.anchors.groups[this.slideshowGroup || 'none']; 2327 if (arr) { 2328 var s = hs.lang.number.replace('%1', this.getAnchorIndex() + 1).replace('%2', arr.length); 2329 this[this.numberPosition].innerHTML = 2330 '<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML; 2331 } 2332 } 2333}, 2334initSlideshow : function() { 2335 if (!this.last) { 2336 for (var i = 0; i < hs.slideshows.length; i++) { 2337 var ss = hs.slideshows[i], sg = ss.slideshowGroup; 2338 if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) 2339 this.slideshow = new hs.Slideshow(this.key, ss); 2340 } 2341 } else { 2342 this.slideshow = this.last.slideshow; 2343 } 2344 var ss = this.slideshow; 2345 if (!ss) return; 2346 var key = ss.expKey = this.key; 2347 2348 ss.checkFirstAndLast(); 2349 ss.disable('full-expand'); 2350 if (ss.controls) { 2351 this.createOverlay(hs.extend(ss.overlayOptions || {}, { 2352 overlayId: ss.controls, 2353 hsId: 'controls', 2354 zIndex: 5 2355 })); 2356 } 2357 if (ss.thumbstrip) ss.thumbstrip.add(this); 2358 if (!this.last && this.autoplay) ss.play(true); 2359 if (ss.autoplay) { 2360 ss.autoplay = setTimeout(function() { 2361 hs.next(key); 2362 }, (ss.interval || 500)); 2363 } 2364}, 2365 2366cancelLoading : function() { 2367 hs.discardElement (this.wrapper); 2368 hs.expanders[this.key] = null; 2369 if (hs.upcoming == this.a) hs.upcoming = null; 2370 hs.undim(this.key); 2371 if (this.loading) hs.loading.style.left = '-9999px'; 2372 hs.fireEvent(this, 'onHideLoading'); 2373}, 2374 2375writeCredits : function () { 2376 if (this.credits) return; 2377 this.credits = hs.createElement('a', { 2378 href: hs.creditsHref, 2379 target: hs.creditsTarget, 2380 className: 'highslide-credits', 2381 innerHTML: hs.lang.creditsText, 2382 title: hs.lang.creditsTitle 2383 }); 2384 this.createOverlay({ 2385 overlayId: this.credits, 2386 position: this.creditsPosition || 'top left', 2387 hsId: 'credits' 2388 }); 2389}, 2390 2391getInline : function(types, addOverlay) { 2392 for (var i = 0; i < types.length; i++) { 2393 var type = types[i], s = null; 2394 if (type == 'caption' && !hs.fireEvent(this, 'onBeforeGetCaption')) return; 2395 else if (type == 'heading' && !hs.fireEvent(this, 'onBeforeGetHeading')) return; 2396 if (!this[type +'Id'] && this.thumbsUserSetId) 2397 this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; 2398 if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); 2399 if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { 2400 s = eval(this[type +'Eval']); 2401 } catch (e) {} 2402 if (!this[type] && this[type +'Text']) { 2403 s = this[type +'Text']; 2404 } 2405 if (!this[type] && !s) { 2406 this[type] = hs.getNode(this.a['_'+ type + 'Id']); 2407 if (!this[type]) { 2408 var next = this.a.nextSibling; 2409 while (next && !hs.isHsAnchor(next)) {
2410 if ((new RegExp('highslide-'+ type)).test(next.className || null)) { 2411 if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; 2412 this[type] = hs.getNode(next.id); 2413 break; 2414 } 2415 next = next.nextSibling; 2416 } 2417 } 2418 } 2419 if (!this[type] && !s && this.numberPosition == type) s = '\n'; 2420 2421 if (!this[type] && s) this[type] = hs.createElement('div', 2422 { className: 'highslide-'+ type, innerHTML: s } ); 2423 2424 if (addOverlay && this[type]) { 2425 var o = { position: (type == 'heading') ? 'above' : 'below' }; 2426 for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; 2427 o.overlayId = this[type]; 2428 this.createOverlay(o); 2429 } 2430 } 2431}, 2432 2433 2434// on end move and resize 2435doShowHide : function(visibility) { 2436 if (hs.hideSelects) this.showHideElements('SELECT', visibility); 2437 if (hs.hideIframes) this.showHideElements('IFRAME', visibility); 2438 if (hs.geckoMac) this.showHideElements('*', visibility); 2439}, 2440showHideElements : function (tagName, visibility) { 2441 var els = document.getElementsByTagName(tagName); 2442 var prop = tagName == '*' ? 'overflow' : 'visibility'; 2443 for (var i = 0; i < els.length; i++) { 2444 if (prop == 'visibility' || (document.defaultView.getComputedStyle( 2445 els[i], "").getPropertyValue('overflow') == 'auto' 2446 || els[i].getAttribute('hidden-by') != null)) { 2447 var hiddenBy = els[i].getAttribute('hidden-by'); 2448 if (visibility == 'visible' && hiddenBy) { 2449 hiddenBy = hiddenBy.replace('['+ this.key +']', ''); 2450 els[i].setAttribute('hidden-by', hiddenBy); 2451 if (!hiddenBy) els[i].style[prop] = els[i].origProp; 2452 } else if (visibility == 'hidden') { // hide if behind 2453 var elPos = hs.getPosition(els[i]); 2454 elPos.w = els[i].offsetWidth; 2455 elPos.h = els[i].offsetHeight; 2456 if (!this.dimmingOpacity) { // hide all if dimming 2457 2458 var clearsX = (elPos.x + elPos.w < this.x.get('opos') 2459 || elPos.x > this.x.get('opos') + this.x.get('osize')); 2460 var clearsY = (elPos.y + elPos.h < this.y.get('opos') 2461 || elPos.y > this.y.get('opos') + this.y.get('osize')); 2462 } 2463 var wrapperKey = hs.getWrapperKey(els[i]); 2464 if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image 2465 if (!hiddenBy) { 2466 els[i].setAttribute('hidden-by', '['+ this.key +']'); 2467 els[i].origProp = els[i].style[prop]; 2468 els[i].style[prop] = 'hidden'; 2469 2470 } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { 2471 els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); 2472 } 2473 } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) 2474 && wrapperKey != this.key) { // on move 2475 els[i].setAttribute('hidden-by', ''); 2476 els[i].style[prop] = els[i].origProp || ''; 2477 } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { 2478 els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); 2479 } 2480 2481 } 2482 } 2483 } 2484}, 2485 2486focus : function() { 2487 this.wrapper.style.zIndex = hs.zIndexCounter += 2; 2488 // blur others 2489 for (var i = 0; i < hs.expanders.length; i++) { 2490 if (hs.expanders[i] && i == hs.focusKey) { 2491 var blurExp = hs.expanders[i]; 2492 blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; 2493 if (blurExp.isImage) { 2494 blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; 2495 blurExp.content.title = hs.lang.focusTitle; 2496 } 2497 hs.fireEvent(blurExp, 'onBlur'); 2498 } 2499 } 2500 2501 // focus this 2502 if (this.outline) this.outline.table.style.zIndex 2503 = this.wrapper.style.zIndex - 1; 2504 this.content.className = 'highslide-'+ this.contentType; 2505 if (this.isImage) { 2506 this.content.title = hs.lang.restoreTitle; 2507 2508 if (hs.restoreCursor) { 2509 hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; 2510 if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; 2511 this.content.style.cursor = hs.styleRestoreCursor; 2512 } 2513 } 2514 hs.focusKey = this.key; 2515 hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 2516 hs.fireEvent(this, 'onFocus'); 2517}, 2518moveTo: function(x, y) { 2519 this.x.setPos(x); 2520 this.y.setPos(y); 2521}, 2522resize : function (e) { 2523 var w, h, r = e.width / e.height; 2524 w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); 2525 if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; 2526 h = this.isHtml ? e.height + e.dY : w / r; 2527 if (h < Math.min(this.minHeight, this.y.full)) { 2528 h = Math.min(this.minHeight, this.y.full); 2529 if (this.isImage) w = h * r; 2530 } 2531 this.resizeTo(w, h); 2532}, 2533resizeTo: function(w, h) { 2534 this.y.setSize(h); 2535 this.x.setSize(w); 2536 this.wrapper.style.height = this.y.get('wsize') +'px'; 2537}, 2538 2539close : function() { 2540 if (this.isClosing || !this.isExpanded) return; 2541 if (this.transitions[1] == 'crossfade' && hs.upcoming) { 2542 hs.getExpander(hs.upcoming).cancelLoading(); 2543 hs.upcoming = null; 2544 } 2545 if (!hs.fireEvent(this, 'onBeforeClose')) return; 2546 this.isClosing = true; 2547 if (this.slideshow && !hs.upcoming) this.slideshow.pause(); 2548 2549 hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); 2550 2551 try { 2552 if (this.isHtml) this.htmlPrepareClose(); 2553 this.content.style.cursor = 'default'; 2554 this.changeSize( 2555 0, { 2556 wrapper: { 2557 width : this.x.t, 2558 height : this.y.t,
2559 left: this.x.tpos - this.x.cb + this.x.tb, 2560 top: this.y.tpos - this.y.cb + this.y.tb 2561 }, 2562 content: { 2563 left: 0, 2564 top: 0, 2565 width: this.x.t, 2566 height: this.y.t 2567 } 2568 }, hs.restoreDuration 2569 ); 2570 } catch (e) { this.afterClose(); } 2571}, 2572 2573htmlPrepareClose : function() { 2574 if (hs.geckoMac) { // bad redraws 2575 if (!hs.mask) hs.mask = hs.createElement('div', null, 2576 { position: 'absolute' }, hs.container); 2577 hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px', 2578 left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' }); 2579 } 2580 if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {} 2581 2582 if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject(); 2583 if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) 2584 this.scrollerDiv.style.overflow = 'hidden'; 2585}, 2586 2587destroyObject : function () { 2588 if (hs.ie && this.iframe) 2589 try { 2590 this.iframe.contentWindow.document.body.innerHTML = ''; 2591 } catch (e) { 2592 this.iframe.src = ''; 2593 } 2594 if (this.objectType == 'swf') swfobject.removeSWF(this.body.id); 2595 this.body.innerHTML = ''; 2596}, 2597 2598sleep : function() { 2599 if (this.outline) this.outline.table.style.display = 'none'; 2600 this.releaseMask = null; 2601 this.wrapper.style.display = 'none'; 2602 this.isExpanded = false; 2603 hs.push(hs.sleeping, this); 2604}, 2605 2606awake : function() {try { 2607 2608 hs.expanders[this.key] = this; 2609 2610 if (!hs.allowMultipleInstances &&hs.focusKey != this.key) { 2611 try { hs.expanders[hs.focusKey].close(); } catch (e){} 2612 } 2613 2614 var z = hs.zIndexCounter++, stl = { display: '', zIndex: z }; 2615 hs.setStyles (this.wrapper, stl); 2616 this.isClosing = false; 2617 2618 var o = this.outline || 0; 2619 if (o) { 2620 if (!this.outlineWhileAnimating) stl.visibility = 'hidden'; 2621 hs.setStyles (o.table, stl); 2622 } 2623 if (this.slideshow) { 2624 this.initSlideshow(); 2625 } 2626 2627 this.show(); 2628} catch (e) {} 2629 2630 2631}, 2632 2633createOverlay : function (o) { 2634 var el = o.overlayId, 2635 relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position)); 2636 if (typeof el == 'string') el = hs.getNode(el); 2637 if (o.html) el = hs.createElement('div', { innerHTML: o.html }); 2638 if (!el || typeof el == 'string') return; 2639 if (!hs.fireEvent(this, 'onCreateOverlay', { overlay: el })) return; 2640 el.style.display = 'block'; 2641 o.hsId = o.hsId || o.overlayId; 2642 if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return; 2643 this.genOverlayBox(); 2644 var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; 2645 if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; 2646 var overlay = hs.createElement( 2647 'div', { 2648 id: 'hsId'+ hs.idCounter++, 2649 hsId: o.hsId 2650 }, { 2651 position: 'absolute', 2652 visibility: 'hidden', 2653 width: width, 2654 direction: hs.lang.cssDirection || '', 2655 opacity: 0 2656 }, 2657 relToVP ? hs.viewport :this.overlayBox, 2658 true 2659 ); 2660 if (relToVP) overlay.hsKey = this.key; 2661 2662 overlay.appendChild(el); 2663 hs.extend(overlay, { 2664 opacity: 1, 2665 offsetX: 0, 2666 offsetY: 0, 2667 dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 2668 }); 2669 hs.extend(overlay, o); 2670 2671 2672 if (this.gotOverlays) { 2673 this.positionOverlay(overlay); 2674 if (!overlay.hideOnMouseOut || this.mouseIsOver) 2675 hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); 2676 } 2677 hs.push(this.overlays, hs.idCounter - 1); 2678}, 2679positionOverlay : function(overlay) { 2680 var p = overlay.position || 'middle center', 2681 relToVP = (overlay.relativeTo == 'viewport'), 2682 offX = overlay.offsetX, 2683 offY = overlay.offsetY; 2684 if (relToVP) { 2685 hs.viewport.style.display = 'block'; 2686 overlay.hsKey = this.key; 2687 if (overlay.offsetWidth > overlay.parentNode.offsetWidth) 2688 overlay.style.width = '100%'; 2689 } else 2690 if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); 2691 if (/left$/.test(p)) overlay.style.left = offX +'px'; 2692 2693 if (/center$/.test(p)) hs.setStyles (overlay, { 2694 left: '50%', 2695 marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' 2696 }); 2697 2698 if (/right$/.test(p)) overlay.style.right = - offX +'px'; 2699 2700 if (/^leftpanel$/.test(p)) { 2701 hs.setStyles(overlay, { 2702 right: '100%', 2703 marginRight: this.x.cb +'px', 2704 top: - this.y.cb +'px', 2705 bottom: - this.y.cb +'px', 2706 overflow: 'auto' 2707 }); 2708 this.x.p1 = overlay.offsetWidth; 2709 2710 } else if (/^rightpanel$/.test(p)) { 2711 hs.setStyles(overlay, { 2712 left: '100%', 2713 marginLeft: this.x.cb +'px', 2714 top: - this.y.cb +'px', 2715 bottom: - this.y.cb +'px', 2716 overflow: 'auto' 2717 }); 2718 this.x.p2 = overlay.offsetWidth; 2719 } 2720 var parOff = overlay.parentNode.offsetHeight; 2721 overlay.style.height = 'auto'; 2722 if (relToVP && overlay.offsetHeight > parOff) 2723 overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%'; 2724 2725 if (/^top/.test(p)) overlay.style.top = offY +'px'; 2726 if (/^middle/.test(p)) hs.setStyles (overlay, { 2727 top: '50%', 2728 marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' 2729 }); 2730 if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; 2731 if (/^above$/.test(p)) { 2732 hs.setStyles(overlay, { 2733 left: (- this.x.p1 - this.x.cb) +'px', 2734 right: (- this.x.p2 - this.x.cb) +'px', 2735 bottom: '100%', 2736 marginBottom: this.y.cb +'px', 2737 width: 'auto' 2738 }); 2739 this.y.p1 = overlay.offsetHeight; 2740 2741 } else if (/^below$/.test(p)) { 2742 hs.setStyles(overlay, { 2743 position: 'relative', 2744 left: (- this.x.p1 - this.x.cb) +'px', 2745 right: (- this.x.p2 - this.x.cb) +'px', 2746 top: '100%', 2747 marginTop: this.y.cb +'px', 2748 width: 'auto' 2749 }); 2750 this.y.p2 = overlay.offsetHeight; 2751 overlay.style.position = 'absolute'; 2752 } 2753}, 2754 2755getOverlays : function() { 2756 this.getInline(['heading', 'caption'], true); 2757 this.getNumber(); 2758 if (this.caption) hs.fireEvent(this, 'onAfterGetCaption'); 2759 if (this.heading) hs.fireEvent(this, 'onAfterGetHeading'); 2760 if (this.heading && this.dragByHeading) this.heading.className += ' highsli
2760de-move'; 2761 if (hs.showCredits) this.writeCredits(); 2762 for (var i = 0; i < hs.overlays.length; i++) { 2763 var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; 2764 if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) 2765 || (sg && sg === this.slideshowGroup)) { 2766 if (this.isImage || (this.isHtml && o.useOnHtml)) 2767 this.createOverlay(o); 2768 } 2769 } 2770 var os = []; 2771 for (var i = 0; i < this.overlays.length; i++) { 2772 var o = hs.$('hsId'+ this.overlays[i]); 2773 if (/panel$/.test(o.position)) this.positionOverlay(o); 2774 else hs.push(os, o); 2775 } 2776 for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); 2777 this.gotOverlays = true; 2778}, 2779genOverlayBox : function() { 2780 if (!this.overlayBox) this.overlayBox = hs.createElement ( 2781 'div', { 2782 className: this.wrapperClassName 2783 }, { 2784 position : 'absolute', 2785 width: (this.x.size || (this.useBox ? this.width : null) 2786 || this.x.full) +'px', 2787 height: (this.y.size || this.y.full) +'px', 2788 visibility : 'hidden', 2789 overflow : 'hidden', 2790 zIndex : hs.ie ? 4 : 'auto' 2791 }, 2792 hs.container, 2793 true 2794 ); 2795}, 2796sizeOverlayBox : function(doWrapper, doPanels) { 2797 var overlayBox = this.overlayBox, 2798 x = this.x, 2799 y = this.y; 2800 hs.setStyles( overlayBox, { 2801 width: x.size +'px', 2802 height: y.size +'px' 2803 }); 2804 if (doWrapper || doPanels) { 2805 for (var i = 0; i < this.overlays.length; i++) { 2806 var o = hs.$('hsId'+ this.overlays[i]); 2807 var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); 2808 if (o && /^(above|below)$/.test(o.position)) { 2809 if (ie6) { 2810 o.style.width = (overlayBox.offsetWidth + 2 * x.cb 2811 + x.p1 + x.p2) +'px'; 2812 } 2813 y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; 2814 } 2815 if (o && ie6 && /^(left|right)panel$/.test(o.position)) { 2816 o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; 2817 } 2818 } 2819 } 2820 if (doWrapper) { 2821 hs.setStyles(this.content, { 2822 top: y.p1 +'px' 2823 }); 2824 hs.setStyles(overlayBox, { 2825 top: (y.p1 + y.cb) +'px' 2826 }); 2827 } 2828}, 2829 2830showOverlays : function() { 2831 var b = this.overlayBox; 2832 b.className = ''; 2833 hs.setStyles(b, { 2834 top: (this.y.p1 + this.y.cb) +'px', 2835 left: (this.x.p1 + this.x.cb) +'px', 2836 overflow : 'visible' 2837 }); 2838 if (hs.safari) b.style.visibility = 'visible'; 2839 this.wrapper.appendChild (b); 2840 for (var i = 0; i < this.overlays.length; i++) { 2841 var o = hs.$('hsId'+ this.overlays[i]); 2842 o.style.zIndex = o.zIndex || 4; 2843 if (!o.hideOnMouseOut || this.mouseIsOver) { 2844 o.style.visibility = 'visible'; 2845 hs.setStyles(o, { visibility: 'visible', display: '' }); 2846 hs.animate(o, { opacity: o.opacity }, o.dur); 2847 } 2848 } 2849}, 2850 2851destroyOverlays : function() { 2852 if (!this.overlays.length) return; 2853 if (this.slideshow) { 2854 var c = this.slideshow.controls; 2855 if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c); 2856 } 2857 for (var i = 0; i < this.overlays.length; i++) { 2858 var o = hs.$('hsId'+ this.overlays[i]); 2859 if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o); 2860 } 2861 if (this.isHtml && this.preserveContent) { 2862 this.overlayBox.style.top = '-9999px'; 2863 hs.container.appendChild(this.overlayBox); 2864 } else 2865 hs.discardElement(this.overlayBox); 2866}, 2867 2868 2869 2870createFullExpand : function () { 2871 if (this.slideshow && this.slideshow.controls) { 2872 this.slideshow.enable('full-expand'); 2873 return; 2874 } 2875 this.fullExpandLabel = hs.createElement( 2876 'a', { 2877 href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', 2878 title: hs.lang.fullExpandTitle, 2879 className: 'highslide-full-expand' 2880 } 2881 ); 2882 if (!hs.fireEvent(this, 'onCreateFullExpand')) return; 2883 2884 this.createOverlay({ 2885 overlayId: this.fullExpandLabel, 2886 position: hs.fullExpandPosition, 2887 hideOnMouseOut: true, 2888 opacity: hs.fullExpandOpacity 2889 }); 2890}, 2891 2892doFullExpand : function () { 2893 try { 2894 if (!hs.fireEvent(this, 'onDoFullExpand')) return; 2895 if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); 2896 2897 this.focus(); 2898 var xSize = this.x.size, 2899 ySize = this.y.size; 2900 this.resizeTo(this.x.full, this.y.full); 2901 2902 var xpos = this.x.pos - (this.x.size - xSize) / 2; 2903 if (xpos < hs.marginLeft) xpos = hs.marginLeft; 2904 2905 var ypos = this.y.pos - (this.y.size - ySize) / 2; 2906 if (ypos < hs.marginTop) ypos = hs.marginTop; 2907 2908 this.moveTo(xpos, ypos); 2909 this.doShowHide('hidden'); 2910 2911 } catch (e) { 2912 this.error(e); 2913 } 2914}, 2915 2916 2917afterClose : function () {
2918 this.a.className = this.a.className.replace('highslide-active-anchor', ''); 2919 2920 this.doShowHide('visible'); 2921 2922 if (this.isHtml && this.preserveContent 2923 && this.transitions[1] != 'crossfade') { 2924 this.sleep(); 2925 } else { 2926 if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); 2927 if (this.iframe && this.objectLoadTime != 'after') this.destroyObject(); 2928 hs.discardElement(this.wrapper); 2929 } 2930 if (hs.mask) hs.mask.style.display = 'none'; 2931 this.destroyOverlays(); 2932 if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none'; 2933 2934 if (this.dimmingOpacity) hs.undim(this.key); 2935 hs.fireEvent(this, 'onAfterClose'); 2936 hs.expanders[this.key] = null; 2937 hs.reOrder(); 2938} 2939 2940}; 2941 2942 2943// hs.Ajax object prototype 2944hs.Ajax = function (a, content, pre) { 2945 this.a = a; 2946 this.content = content; 2947 this.pre = pre; 2948}; 2949 2950hs.Ajax.prototype = { 2951run : function () { 2952 var xhr; 2953 if (!this.src) this.src = hs.getSrc(this.a); 2954 if (this.src.match('#')) { 2955 var arr = this.src.split('#'); 2956 this.src = arr[0]; 2957 this.id = arr[1]; 2958 } 2959 if (hs.cachedGets[this.src]) { 2960 this.cachedGet = hs.cachedGets[this.src]; 2961 if (this.id) this.getElementContent(); 2962 else this.loadHTML(); 2963 return; 2964 } 2965 try { xhr = new XMLHttpRequest(); } 2966 catch (e) { 2967 try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } 2968 catch (e) { 2969 try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } 2970 catch (e) { this.onError(); } 2971 } 2972 } 2973 var pThis = this; 2974 xhr.onreadystatechange = function() { 2975 if(pThis.xhr.readyState == 4) { 2976 if (pThis.id) pThis.getElementContent(); 2977 else pThis.loadHTML(); 2978 } 2979 }; 2980 var src = this.src; 2981 this.xhr = xhr; 2982 if (hs.forceAjaxReload) 2983 src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime()); 2984 xhr.open('GET', src, true); 2985 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 2986 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 2987 xhr.send(null); 2988}, 2989 2990getElementContent : function() { 2991 hs.init(); 2992 var attribs = window.opera || hs.ie6SSL ? { src: 'about:blank' } : null; 2993 2994 this.iframe = hs.createElement('iframe', attribs, 2995 { position: 'absolute', top: '-9999px' }, hs.container); 2996 2997 this.loadHTML(); 2998}, 2999 3000loadHTML : function() { 3001 var s = this.cachedGet || this.xhr.responseText, 3002 regBody; 3003 if (this.pre) hs.cachedGets[this.src] = s; 3004 if (!hs.ie || hs.uaVersion >= 5.5) { 3005 s = s.replace(new RegExp('<link[^>]*>', 'gi'), '') 3006 .replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), ''); 3007 if (this.iframe) { 3008 var doc = this.iframe.contentDocument; 3009 if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document; 3010 if (!doc) { // Opera 3011 var pThis = this; 3012 setTimeout(function() { pThis.loadHTML(); }, 25); 3013 return; 3014 } 3015 doc.open(); 3016 doc.write(s); 3017 doc.close(); 3018 try { s = doc.getElementById(this.id).innerHTML; } catch (e) { 3019 try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera 3020 } 3021 hs.discardElement(this.iframe); 3022 } else { 3023 regBody = /(<body[^>]*>|<\/body>)/ig; 3024 if (regBody.test(s)) s = s.split(regBody)[hs.ieLt9 ? 1 : 2]; 3025 3026 } 3027 } 3028 hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s; 3029 this.onLoad(); 3030 for (var x in this) this[x] = null; 3031} 3032}; 3033 3034 3035hs.Slideshow = function (expKey, options) { 3036 if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors(); 3037 this.expKey = expKey; 3038 for (var x in options) this[x] = options[x]; 3039 if (this.useControls) this.getControls(); 3040 if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this); 3041}; 3042hs.Slideshow.prototype = { 3043getControls: function() { 3044 this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, 3045 null, hs.container); 3046 3047 var buttons = ['play', 'pause', 'previous', 'next', 'move', 'full-expand', 'close']; 3048 this.btn = {}; 3049 var pThis = this; 3050 for (var i = 0; i < buttons.length; i++) { 3051 this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]); 3052 this.enable(buttons[i]); 3053 } 3054 this.btn.pause.style.display = 'none'; 3055 //this.disable('full-expand'); 3056}, 3057checkFirstAndLast: function() { 3058 if (this.repeat || !this.controls) return; 3059 var exp = hs.expanders[this.expKey], 3060 cur = exp.getAnchorIndex(), 3061 re = /disabled$/; 3062 if (cur == 0) 3063 this.disable('previous'); 3064 else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className)) 3065 this.enable('previous'); 3066 if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) { 3067 this.disable('next'); 3068 this.disable('play'); 3069 } else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) { 3070 this.enable('next'); 3071 this.enable('play'); 3072 } 3073},
3074enable: function(btn) { 3075 if (!this.btn) return; 3076 var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/; 3077 a.onclick = function() { 3078 sls[btn](); 3079 return false; 3080 }; 3081 if (re.test(a.className)) a.className = a.className.replace(re, ''); 3082}, 3083disable: function(btn) { 3084 if (!this.btn) return; 3085 var a = this.btn[btn].getElementsByTagName('a')[0]; 3086 a.onclick = function() { return false; }; 3087 if (!/disabled$/.test(a.className)) a.className += ' disabled'; 3088}, 3089hitSpace: function() { 3090 if (this.autoplay) this.pause(); 3091 else this.play(); 3092}, 3093play: function(wait) { 3094 if (this.btn) { 3095 this.btn.play.style.display = 'none'; 3096 this.btn.pause.style.display = ''; 3097 } 3098 3099 this.autoplay = true; 3100 if (!wait) hs.next(this.expKey); 3101}, 3102pause: function() { 3103 if (this.btn) { 3104 this.btn.pause.style.display = 'none'; 3105 this.btn.play.style.display = ''; 3106 } 3107 3108 clearTimeout(this.autoplay); 3109 this.autoplay = null; 3110}, 3111previous: function() { 3112 this.pause(); 3113 hs.previous(this.btn.previous); 3114}, 3115next: function() { 3116 this.pause(); 3117 hs.next(this.btn.next); 3118}, 3119move: function() {}, 3120'full-expand': function() { 3121 hs.getExpander().doFullExpand(); 3122}, 3123close: function() { 3124 hs.close(this.btn.close); 3125} 3126}; 3127hs.Thumbstrip = function(slideshow) { 3128 function add (exp) { 3129 hs.extend(options || {}, { 3130 overlayId: dom, 3131 hsId: 'thumbstrip', 3132 className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '') 3133 }); 3134 if (hs.ieLt7) options.fade = 0; 3135 exp.createOverlay(options); 3136 hs.setStyles(dom.parentNode, { overflow: 'hidden' }); 3137 }; 3138 3139 function scroll (delta) { 3140 selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7)); 3141 }; 3142 3143 function selectThumb (i, scrollBy) { 3144 if (i === undefined) for (var j = 0; j < group.length; j++) { 3145 if (group[j] == hs.expanders[slideshow.expKey].a) { 3146 i = j; 3147 break; 3148 } 3149 } 3150 if (i === undefined) return; 3151 var as = dom.getElementsByTagName('a'), 3152 active = as[i], 3153 cell = active.parentNode, 3154 left = isX ? 'Left' : 'Top', 3155 right = isX ? 'Right' : 'Bottom', 3156 width = isX ? 'Width' : 'Height', 3157 offsetLeft = 'offset' + left, 3158 offsetWidth = 'offset' + width, 3159 overlayWidth = div.parentNode.parentNode[offsetWidth], 3160 minTblPos = overlayWidth - table[offsetWidth], 3161 curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0, 3162 tblPos = curTblPos, 3163 mgnRight = 20; 3164 if (scrollBy !== undefined) { 3165 tblPos = curTblPos - scrollBy; 3166 3167 if (minTblPos > 0) minTblPos = 0; 3168 if (tblPos > 0) tblPos = 0; 3169 if (tblPos < minTblPos) tblPos = minTblPos; 3170 3171 3172 } else { 3173 for (var j = 0; j < as.length; j++) as[j].className = ''; 3174 active.className = 'highslide-active-anchor'; 3175 var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft], 3176 activeRight = cell[offsetLeft] + cell[offsetWidth] + 3177 (as[i + 1] ? as[i + 1].parentNode[offsetWidth] : 0); 3178 if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight; 3179 else if (activeLeft < -curTblPos) tblPos = -activeLeft; 3180 } 3181 var markerPos = cell[offsetLeft] + (cell[offsetWidth] - marker[offsetWidth]) / 2 + tblPos; 3182 hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad'); 3183 hs.animate(marker, isX ? { left: markerPos } : { top: markerPos }, null, 'easeOutQuad'); 3184 scrollUp.style.display = tblPos < 0 ? 'block' : 'none'; 3185 scrollDown.style.display = (tblPos > minTblPos) ? 'block' : 'none'; 3186 3187 }; 3188 3189 3190 // initialize 3191 var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'], 3192 options = slideshow.thumbstrip, 3193 mode = options.mode || 'horizontal', 3194 floatMode = (mode == 'float'), 3195 tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'], 3196 isX = (mode == 'horizontal'), 3197 dom = hs.createElement('div', { 3198 className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode, 3199 innerHTML: 3200 '<div class="highslide-thumbstrip-inner">'+ 3201 '<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+
3202 '<div class="highslide-scroll-up"><div></div></div>'+ 3203 '<div class="highslide-scroll-down"><div></div></div>'+ 3204 '<div class="highslide-marker"><div></div></div>' 3205 }, { 3206 display: 'none' 3207 }, hs.container), 3208 domCh = dom.childNodes, 3209 div = domCh[0], 3210 scrollUp = domCh[1], 3211 scrollDown = domCh[2], 3212 marker = domCh[3], 3213 table = div.firstChild, 3214 tbody = dom.getElementsByTagName(tree[1])[0], 3215 tr; 3216 for (var i = 0; i < group.length; i++) { 3217 if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody); 3218 (function(){ 3219 var a = group[i], 3220 cell = hs.createElement(tree[3], null, null, tr), 3221 pI = i; 3222 hs.createElement('a', { 3223 href: a.href, 3224 title: a.title, 3225 onclick: function() { 3226 if (/highslide-active-anchor/.test(this.className)) return false; 3227 hs.getExpander(this).focus(); 3228 return hs.transit(a); 3229 }, 3230 innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML 3231 }, null, cell); 3232 })(); 3233 } 3234 if (!floatMode) { 3235 scrollUp.onclick = function () { scroll(-1); }; 3236 scrollDown.onclick = function() { scroll(1); }; 3237 hs.addEventListener(tbody, document.onmousewheel !== undefined ? 3238 'mousewheel' : 'DOMMouseScroll', function(e) { 3239 var delta = 0; 3240 e = e || window.event; 3241 if (e.wheelDelta) { 3242 delta = e.wheelDelta/120; 3243 if (hs.opera) delta = -delta; 3244 } else if (e.detail) { 3245 delta = -e.detail/3; 3246 } 3247 if (delta) scroll(-delta * 0.2); 3248 if (e.preventDefault) e.preventDefault(); 3249 e.returnValue = false; 3250 }); 3251 } 3252 3253 return { 3254 add: add, 3255 selectThumb: selectThumb 3256 } 3257}; 3258hs.langDefaults = hs.lang; 3259// history 3260var HsExpander = hs.Expander; 3261if (hs.ie && window == window.top) { 3262 (function () { 3263 try { 3264 document.documentElement.doScroll('left'); 3265 } catch (e) { 3266 setTimeout(arguments.callee, 50); 3267 return; 3268 } 3269 hs.ready(); 3270 })(); 3271} 3272hs.addEventListener(document, 'DOMContentLoaded', hs.ready); 3273hs.addEventListener(window, 'load', hs.ready); 3274 3275// set handlers 3276hs.addEventListener(document, 'ready', function() {
3277 if (hs.expandCursor || hs.dimmingOpacity) { 3278 var style = hs.createElement('style', { type: 'text/css' }, null, 3279 document.getElementsByTagName('HEAD')[0]), 3280 backCompat = document.compatMode == 'BackCompat'; 3281 3282 3283 function addRule(sel, dec) { 3284 if (hs.ie && (hs.uaVersion < 9 || backCompat)) { 3285 var last = document.styleSheets[document.styleSheets.length - 1]; 3286 if (typeof(last.addRule) == "object") last.addRule(sel, dec); 3287 } else { 3288 style.appendChild(document.createTextNode(sel + " {" + dec + "}")); 3289 } 3290 } 3291 function fix(prop) { 3292 return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + 3293 ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; 3294 } 3295 if (hs.expandCursor) addRule ('.highslide img', 3296 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); 3297 addRule ('.highslide-viewport-size', 3298 hs.ie && (hs.uaVersion < 7 || backCompat) ? 3299 'position: absolute; '+ 3300 'left:'+ fix('scrollLeft') + 3301 'top:'+ fix('scrollTop') + 3302 'width:'+ fix('clientWidth') + 3303 'height:'+ fix('clientHeight') : 3304 'position: fixed; width: 100%; height: 100%; left: 0; top: 0'); 3305 } 3306}); 3307hs.addEventListener(window, 'resize', function() { 3308 hs.getPageSize(); 3309 if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) { 3310 var node = hs.viewport.childNodes[i], 3311 exp = hs.getExpander(node); 3312 exp.positionOverlay(node); 3313 if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb(); 3314 } 3315}); 3316hs.addEventListener(document, 'mousemove', function(e) { 3317 hs.mouse = { x: e.clientX, y: e.clientY }; 3318}); 3319hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); 3320hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); 3321hs.addEventListener(document, 'ready', hs.setClickEvents); 3322hs.addEventListener(window, 'load', hs.preloadImages); 3323hs.addEventListener(window, 'load', hs.preloadAjax); 3324}
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.