mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	
		
			
	
	
		
			2482 lines
		
	
	
		
			71 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			2482 lines
		
	
	
		
			71 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | /**  | ||
|  |  * Name:    Highslide JS | ||
|  |  * Version: 4.1.13 (2011-10-06) | ||
|  |  * Config:  default +inline +ajax +iframe +flash | ||
|  |  * Author:  Torstein Hønsi | ||
|  |  * Support: www.highslide.com/support | ||
|  |  * License: www.highslide.com/#license | ||
|  |  */ | ||
|  | if (!hs) { var hs = { | ||
|  | // Language strings
 | ||
|  | lang : { | ||
|  | 	cssDirection: 'ltr', | ||
|  | 	loadingText : 'Loading...', | ||
|  | 	loadingTitle : 'Click to cancel', | ||
|  | 	focusTitle : 'Click to bring to front', | ||
|  | 	fullExpandTitle : 'Expand to actual size (f)', | ||
|  | 	creditsText : 'Powered by <i>Highslide JS</i>', | ||
|  | 	creditsTitle : 'Go to the Highslide JS homepage', | ||
|  | 	previousText : 'Previous', | ||
|  | 	nextText : 'Next',  | ||
|  | 	moveText : 'Move', | ||
|  | 	closeText : 'Close',  | ||
|  | 	closeTitle : 'Close (esc)',  | ||
|  | 	resizeTitle : 'Resize', | ||
|  | 	playText : 'Play', | ||
|  | 	playTitle : 'Play slideshow (spacebar)', | ||
|  | 	pauseText : 'Pause', | ||
|  | 	pauseTitle : 'Pause slideshow (spacebar)', | ||
|  | 	previousTitle : 'Previous (arrow left)', | ||
|  | 	nextTitle : 'Next (arrow right)', | ||
|  | 	moveTitle : 'Move', | ||
|  | 	fullExpandText : '1:1', | ||
|  | 	restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' | ||
|  | }, | ||
|  | // See http://highslide.com/ref for examples of settings  
 | ||
|  | graphicsDir : 'highslide/graphics/', | ||
|  | expandCursor : 'zoomin.cur', // null disables
 | ||
|  | restoreCursor : 'zoomout.cur', // null disables
 | ||
|  | expandDuration : 250, // milliseconds
 | ||
|  | restoreDuration : 250, | ||
|  | marginLeft : 15, | ||
|  | marginRight : 15, | ||
|  | marginTop : 15, | ||
|  | marginBottom : 15, | ||
|  | zIndexCounter : 1001, // adjust to other absolutely positioned elements
 | ||
|  | loadingOpacity : 0.75, | ||
|  | allowMultipleInstances: true, | ||
|  | numberOfImagesToPreload : 5, | ||
|  | outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only 
 | ||
|  | outlineStartOffset : 3, // ends at 10
 | ||
|  | padToMinWidth : false, // pad the popup width to make room for wide caption
 | ||
|  | fullExpandPosition : 'bottom right', | ||
|  | fullExpandOpacity : 1, | ||
|  | showCredits : true, // you can set this to false if you want
 | ||
|  | creditsHref : 'http://highslide.com/', | ||
|  | creditsTarget : '_self', | ||
|  | enableKeyListener : true, | ||
|  | openerTagNames : ['a'], // Add more to allow slideshow indexing
 | ||
|  | 
 | ||
|  | allowWidthReduction : false, | ||
|  | allowHeightReduction : true, | ||
|  | preserveContent : true, // Preserve changes made to the content and position of HTML popups.
 | ||
|  | objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion.
 | ||
|  | cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup.
 | ||
|  | dragByHeading: true, | ||
|  | minWidth: 200, | ||
|  | minHeight: 200, | ||
|  | allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight
 | ||
|  | outlineType : 'drop-shadow', // set null to disable outlines
 | ||
|  | skin : { | ||
|  | 	contentWrapper: | ||
|  | 		'<div class="highslide-header"><ul>'+ | ||
|  | 			'<li class="highslide-previous">'+ | ||
|  | 				'<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+ | ||
|  | 				'<span>{hs.lang.previousText}</span></a>'+ | ||
|  | 			'</li>'+ | ||
|  | 			'<li class="highslide-next">'+ | ||
|  | 				'<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+ | ||
|  | 				'<span>{hs.lang.nextText}</span></a>'+ | ||
|  | 			'</li>'+ | ||
|  | 			'<li class="highslide-move">'+ | ||
|  | 				'<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+ | ||
|  | 				'<span>{hs.lang.moveText}</span></a>'+ | ||
|  | 			'</li>'+ | ||
|  | 			'<li class="highslide-close">'+ | ||
|  | 				'<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+ | ||
|  | 				'<span>{hs.lang.closeText}</span></a>'+ | ||
|  | 			'</li>'+ | ||
|  | 		'</ul></div>'+ | ||
|  | 		'<div class="highslide-body"></div>'+ | ||
|  | 		'<div class="highslide-footer"><div>'+ | ||
|  | 			'<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+ | ||
|  | 		'</div></div>' | ||
|  | }, | ||
|  | // END OF YOUR SETTINGS
 | ||
|  | 
 | ||
|  | 
 | ||
|  | // declare internal properties
 | ||
|  | preloadTheseImages : [], | ||
|  | continuePreloading: true, | ||
|  | expanders : [], | ||
|  | overrides : [ | ||
|  | 	'allowSizeReduction', | ||
|  | 	'useBox', | ||
|  | 	'outlineType', | ||
|  | 	'outlineWhileAnimating', | ||
|  | 	'captionId', | ||
|  | 	'captionText', | ||
|  | 	'captionEval', | ||
|  | 	'captionOverlay', | ||
|  | 	'headingId', | ||
|  | 	'headingText', | ||
|  | 	'headingEval', | ||
|  | 	'headingOverlay', | ||
|  | 	'creditsPosition', | ||
|  | 	'dragByHeading', | ||
|  | 	 | ||
|  | 	'width', | ||
|  | 	'height', | ||
|  | 	 | ||
|  | 	'contentId', | ||
|  | 	'allowWidthReduction', | ||
|  | 	'allowHeightReduction', | ||
|  | 	'preserveContent', | ||
|  | 	'maincontentId', | ||
|  | 	'maincontentText', | ||
|  | 	'maincontentEval', | ||
|  | 	'objectType',	 | ||
|  | 	'cacheAjax',	 | ||
|  | 	'objectWidth', | ||
|  | 	'objectHeight', | ||
|  | 	'objectLoadTime',	 | ||
|  | 	'swfOptions', | ||
|  | 	'wrapperClassName', | ||
|  | 	'minWidth', | ||
|  | 	'minHeight', | ||
|  | 	'maxWidth', | ||
|  | 	'maxHeight', | ||
|  | 	'pageOrigin', | ||
|  | 	'slideshowGroup', | ||
|  | 	'easing', | ||
|  | 	'easingClose', | ||
|  | 	'fadeInOut', | ||
|  | 	'src' | ||
|  | ], | ||
|  | overlays : [], | ||
|  | idCounter : 0, | ||
|  | oPos : { | ||
|  | 	x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], | ||
|  | 	y: ['above', 'top', 'middle', 'bottom', 'below'] | ||
|  | }, | ||
|  | mouse: {}, | ||
|  | headingOverlay: {}, | ||
|  | captionOverlay: {}, | ||
|  | swfOptions: { flashvars: {}, params: {}, attributes: {} }, | ||
|  | timers : [], | ||
|  | 
 | ||
|  | pendingOutlines : {}, | ||
|  | sleeping : [], | ||
|  | preloadTheseAjax : [], | ||
|  | cacheBindings : [], | ||
|  | cachedGets : {}, | ||
|  | clones : {}, | ||
|  | onReady: [], | ||
|  | uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : | ||
|  | 	parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), | ||
|  | ie : (document.all && !window.opera), | ||
|  | //ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant?
 | ||
|  | safari : /Safari/.test(navigator.userAgent), | ||
|  | geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), | ||
|  | 
 | ||
|  | $ : function (id) { | ||
|  | 	if (id) return document.getElementById(id); | ||
|  | }, | ||
|  | 
 | ||
|  | push : function (arr, val) { | ||
|  | 	arr[arr.length] = val; | ||
|  | }, | ||
|  | 
 | ||
|  | createElement : function (tag, attribs, styles, parent, nopad) { | ||
|  | 	var el = document.createElement(tag); | ||
|  | 	if (attribs) hs.extend(el, attribs); | ||
|  | 	if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); | ||
|  | 	if (styles) hs.setStyles(el, styles); | ||
|  | 	if (parent) parent.appendChild(el);	 | ||
|  | 	return el; | ||
|  | }, | ||
|  | 
 | ||
|  | extend : function (el, attribs) { | ||
|  | 	for (var x in attribs) el[x] = attribs[x]; | ||
|  | 	return el; | ||
|  | }, | ||
|  | 
 | ||
|  | setStyles : function (el, styles) { | ||
|  | 	for (var x in styles) { | ||
|  | 		if (hs.ieLt9 && x == 'opacity') { | ||
|  | 			if (styles[x] > 0.99) el.style.removeAttribute('filter'); | ||
|  | 			else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; | ||
|  | 		} | ||
|  | 		else el.style[x] = styles[x];		 | ||
|  | 	} | ||
|  | }, | ||
|  | animate: function(el, prop, opt) { | ||
|  | 	var start, | ||
|  | 		end, | ||
|  | 		unit; | ||
|  | 	if (typeof opt != 'object' || opt === null) { | ||
|  | 		var args = arguments; | ||
|  | 		opt = { | ||
|  | 			duration: args[2], | ||
|  | 			easing: args[3], | ||
|  | 			complete: args[4] | ||
|  | 		}; | ||
|  | 	} | ||
|  | 	if (typeof opt.duration != 'number') opt.duration = 250; | ||
|  | 	opt.easing = Math[opt.easing] || Math.easeInQuad; | ||
|  | 	opt.curAnim = hs.extend({}, prop); | ||
|  | 	for (var name in prop) { | ||
|  | 		var e = new hs.fx(el, opt , name ); | ||
|  | 		 | ||
|  | 		start = parseFloat(hs.css(el, name)) || 0; | ||
|  | 		end = parseFloat(prop[name]); | ||
|  | 		unit = name != 'opacity' ? 'px' : ''; | ||
|  | 		 | ||
|  | 		e.custom( start, end, unit ); | ||
|  | 	}	 | ||
|  | }, | ||
|  | css: function(el, prop) { | ||
|  | 	if (el.style[prop]) { | ||
|  | 		return el.style[prop]; | ||
|  | 	} else if (document.defaultView) { | ||
|  | 		return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); | ||
|  | 
 | ||
|  | 	} else { | ||
|  | 		if (prop == 'opacity') prop = 'filter'; | ||
|  | 		var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; | ||
|  | 		if (prop == 'filter')  | ||
|  | 			val = val.replace(/alpha\(opacity=([0-9]+)\)/,  | ||
|  | 				function (a, b) { return b / 100 }); | ||
|  | 		return val === '' ? 1 : val; | ||
|  | 	}  | ||
|  | }, | ||
|  | 
 | ||
|  | getPageSize : function () { | ||
|  | 	var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat'  | ||
|  | 		? d.documentElement : d.body, | ||
|  | 		ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); | ||
|  | 	 | ||
|  | 	var width = ieLt9 ? iebody.clientWidth :  | ||
|  | 			(d.documentElement.clientWidth || self.innerWidth), | ||
|  | 		height = ieLt9 ? iebody.clientHeight : self.innerHeight; | ||
|  | 	hs.page = { | ||
|  | 		width: width, | ||
|  | 		height: height,		 | ||
|  | 		scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, | ||
|  | 		scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset | ||
|  | 	}; | ||
|  | 	return hs.page; | ||
|  | }, | ||
|  | 
 | ||
|  | getPosition : function(el)	{ | ||
|  | 	var p = { x: el.offsetLeft, y: el.offsetTop }; | ||
|  | 	while (el.offsetParent)	{ | ||
|  | 		el = el.offsetParent; | ||
|  | 		p.x += el.offsetLeft; | ||
|  | 		p.y += el.offsetTop; | ||
|  | 		if (el != document.body && el != document.documentElement) { | ||
|  | 			p.x -= el.scrollLeft; | ||
|  | 			p.y -= el.scrollTop; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return p; | ||
|  | }, | ||
|  | 
 | ||
|  | expand : function(a, params, custom, type) { | ||
|  | 	if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); | ||
|  | 	if (typeof a.getParams == 'function') return params; | ||
|  | 	if (type == 'html') { | ||
|  | 		for (var i = 0; i < hs.sleeping.length; i++) { | ||
|  | 			if (hs.sleeping[i] && hs.sleeping[i].a == a) { | ||
|  | 				hs.sleeping[i].awake(); | ||
|  | 				hs.sleeping[i] = null; | ||
|  | 				return false; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		hs.hasHtmlExpanders = true; | ||
|  | 	}	 | ||
|  | 	try {	 | ||
|  | 		new hs.Expander(a, params, custom, type); | ||
|  | 		return false; | ||
|  | 	} catch (e) { return true; } | ||
|  | }, | ||
|  | 
 | ||
|  | htmlExpand : function(a, params, custom) { | ||
|  | 	return hs.expand(a, params, custom, 'html'); | ||
|  | }, | ||
|  | 
 | ||
|  | getSelfRendered : function() { | ||
|  | 	return hs.createElement('div', {  | ||
|  | 		className: 'highslide-html-content',  | ||
|  | 		innerHTML: hs.replaceLang(hs.skin.contentWrapper)  | ||
|  | 	}); | ||
|  | }, | ||
|  | getElementByClass : function (el, tagName, className) { | ||
|  | 	var els = el.getElementsByTagName(tagName); | ||
|  | 	for (var i = 0; i < els.length; i++) { | ||
|  |     	if ((new RegExp(className)).test(els[i].className)) { | ||
|  | 			return els[i]; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return null; | ||
|  | }, | ||
|  | replaceLang : function(s) { | ||
|  | 	s = s.replace(/\s/g, ' '); | ||
|  | 	var re = /{hs\.lang\.([^}]+)\}/g, | ||
|  | 		matches = s.match(re), | ||
|  | 		lang; | ||
|  | 	if (matches) for (var i = 0; i < matches.length; i++) { | ||
|  | 		lang = matches[i].replace(re, "$1"); | ||
|  | 		if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); | ||
|  | 	} | ||
|  | 	return s; | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | getCacheBinding : function (a) { | ||
|  | 	for (var i = 0; i < hs.cacheBindings.length; i++) { | ||
|  | 		if (hs.cacheBindings[i][0] == a) { | ||
|  | 			var c = hs.cacheBindings[i][1]; | ||
|  | 			hs.cacheBindings[i][1] = c.cloneNode(1); | ||
|  | 			return c; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return null; | ||
|  | }, | ||
|  | 
 | ||
|  | preloadAjax : function (e) { | ||
|  | 	var arr = hs.getAnchors(); | ||
|  | 	for (var i = 0; i < arr.htmls.length; i++) { | ||
|  | 		var a = arr.htmls[i]; | ||
|  | 		if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax')) | ||
|  | 			hs.push(hs.preloadTheseAjax, a); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	hs.preloadAjaxElement(0); | ||
|  | }, | ||
|  | 
 | ||
|  | preloadAjaxElement : function (i) { | ||
|  | 	if (!hs.preloadTheseAjax[i]) return; | ||
|  | 	var a = hs.preloadTheseAjax[i]; | ||
|  | 	var cache = hs.getNode(hs.getParam(a, 'contentId')); | ||
|  | 	if (!cache) cache = hs.getSelfRendered(); | ||
|  | 	var ajax = new hs.Ajax(a, cache, 1);	 | ||
|  |    	ajax.onError = function () { }; | ||
|  |    	ajax.onLoad = function () { | ||
|  |    		hs.push(hs.cacheBindings, [a, cache]); | ||
|  |    		hs.preloadAjaxElement(i + 1); | ||
|  |    	}; | ||
|  |    	ajax.run(); | ||
|  | }, | ||
|  | 
 | ||
|  | focusTopmost : function() { | ||
|  | 	var topZ = 0,  | ||
|  | 		topmostKey = -1, | ||
|  | 		expanders = hs.expanders, | ||
|  | 		exp, | ||
|  | 		zIndex; | ||
|  | 	for (var i = 0; i < expanders.length; i++) { | ||
|  | 		exp = expanders[i]; | ||
|  | 		if (exp) { | ||
|  | 			zIndex = exp.wrapper.style.zIndex; | ||
|  | 			if (zIndex && zIndex > topZ) { | ||
|  | 				topZ = zIndex;				 | ||
|  | 				topmostKey = i; | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	if (topmostKey == -1) hs.focusKey = -1; | ||
|  | 	else expanders[topmostKey].focus(); | ||
|  | }, | ||
|  | 
 | ||
|  | getParam : function (a, param) { | ||
|  | 	a.getParams = a.onclick; | ||
|  | 	var p = a.getParams ? a.getParams() : null; | ||
|  | 	a.getParams = null; | ||
|  | 	 | ||
|  | 	return (p && typeof p[param] != 'undefined') ? p[param] :  | ||
|  | 		(typeof hs[param] != 'undefined' ? hs[param] : null); | ||
|  | }, | ||
|  | 
 | ||
|  | getSrc : function (a) { | ||
|  | 	var src = hs.getParam(a, 'src'); | ||
|  | 	if (src) return src; | ||
|  | 	return a.href; | ||
|  | }, | ||
|  | 
 | ||
|  | getNode : function (id) { | ||
|  | 	var node = hs.$(id), clone = hs.clones[id], a = {}; | ||
|  | 	if (!node && !clone) return null; | ||
|  | 	if (!clone) { | ||
|  | 		clone = node.cloneNode(true); | ||
|  | 		clone.id = ''; | ||
|  | 		hs.clones[id] = clone; | ||
|  | 		return node; | ||
|  | 	} else { | ||
|  | 		return clone.cloneNode(true); | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | discardElement : function(d) { | ||
|  | 	if (d) hs.garbageBin.appendChild(d); | ||
|  | 	hs.garbageBin.innerHTML = ''; | ||
|  | }, | ||
|  | transit : function (adj, exp) { | ||
|  | 	var last = exp || hs.getExpander(); | ||
|  | 	exp = last; | ||
|  | 	if (hs.upcoming) return false; | ||
|  | 	else hs.last = last; | ||
|  | 	hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); | ||
|  | 	try { | ||
|  | 		hs.upcoming = adj; | ||
|  | 		adj.onclick(); 		 | ||
|  | 	} catch (e){ | ||
|  | 		hs.last = hs.upcoming = null; | ||
|  | 	} | ||
|  | 	try { | ||
|  | 		exp.close(); | ||
|  | 	} catch (e) {} | ||
|  | 	return false; | ||
|  | }, | ||
|  | 
 | ||
|  | previousOrNext : function (el, op) { | ||
|  | 	var exp = hs.getExpander(el); | ||
|  | 	if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); | ||
|  | 	else return false; | ||
|  | }, | ||
|  | 
 | ||
|  | previous : function (el) { | ||
|  | 	return hs.previousOrNext(el, -1); | ||
|  | }, | ||
|  | 
 | ||
|  | next : function (el) { | ||
|  | 	return hs.previousOrNext(el, 1);	 | ||
|  | }, | ||
|  | 
 | ||
|  | keyHandler : function(e) { | ||
|  | 	if (!e) e = window.event; | ||
|  | 	if (!e.target) e.target = e.srcElement; // ie
 | ||
|  | 	if (typeof e.target.form != 'undefined') return true; // form element has focus
 | ||
|  | 	var exp = hs.getExpander(); | ||
|  | 	 | ||
|  | 	var op = null; | ||
|  | 	switch (e.keyCode) { | ||
|  | 		case 70: // f
 | ||
|  | 			if (exp) exp.doFullExpand(); | ||
|  | 			return true; | ||
|  | 		case 32: // Space
 | ||
|  | 		case 34: // Page Down
 | ||
|  | 		case 39: // Arrow right
 | ||
|  | 		case 40: // Arrow down
 | ||
|  | 			op = 1; | ||
|  | 			break; | ||
|  | 		case 8:  // Backspace
 | ||
|  | 		case 33: // Page Up
 | ||
|  | 		case 37: // Arrow left
 | ||
|  | 		case 38: // Arrow up
 | ||
|  | 			op = -1; | ||
|  | 			break; | ||
|  | 		case 27: // Escape
 | ||
|  | 		case 13: // Enter
 | ||
|  | 			op = 0; | ||
|  | 	} | ||
|  | 	if (op !== null) {hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); | ||
|  | 		if (!hs.enableKeyListener) return true; | ||
|  | 		 | ||
|  | 		if (e.preventDefault) e.preventDefault(); | ||
|  |     	else e.returnValue = false; | ||
|  |     	if (exp) { | ||
|  | 			if (op == 0) { | ||
|  | 				exp.close(); | ||
|  | 			} else { | ||
|  | 				hs.previousOrNext(exp.key, op); | ||
|  | 			} | ||
|  | 			return false; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return true; | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | registerOverlay : function (overlay) { | ||
|  | 	hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | getWrapperKey : function (element, expOnly) { | ||
|  | 	var el, re = /^highslide-wrapper-([0-9]+)$/; | ||
|  | 	// 1. look in open expanders
 | ||
|  | 	el = element; | ||
|  | 	while (el.parentNode)	{ | ||
|  | 		if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); | ||
|  | 		el = el.parentNode; | ||
|  | 	} | ||
|  | 	// 2. look in thumbnail
 | ||
|  | 	if (!expOnly) { | ||
|  | 		el = element; | ||
|  | 		while (el.parentNode)	{ | ||
|  | 			if (el.tagName && hs.isHsAnchor(el)) { | ||
|  | 				for (var key = 0; key < hs.expanders.length; key++) { | ||
|  | 					var exp = hs.expanders[key]; | ||
|  | 					if (exp && exp.a == el) return key; | ||
|  | 				} | ||
|  | 			} | ||
|  | 			el = el.parentNode; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return null;  | ||
|  | }, | ||
|  | 
 | ||
|  | getExpander : function (el, expOnly) { | ||
|  | 	if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; | ||
|  | 	if (typeof el == 'number') return hs.expanders[el] || null; | ||
|  | 	if (typeof el == 'string') el = hs.$(el); | ||
|  | 	return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; | ||
|  | }, | ||
|  | 
 | ||
|  | isHsAnchor : function (a) { | ||
|  | 	return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); | ||
|  | }, | ||
|  | 
 | ||
|  | reOrder : function () { | ||
|  | 	for (var i = 0; i < hs.expanders.length; i++) | ||
|  | 		if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); | ||
|  | }, | ||
|  | 
 | ||
|  | mouseClickHandler : function(e)  | ||
|  | {	 | ||
|  | 	if (!e) e = window.event; | ||
|  | 	if (e.button > 1) return true; | ||
|  | 	if (!e.target) e.target = e.srcElement; | ||
|  | 	 | ||
|  | 	var el = e.target; | ||
|  | 	while (el.parentNode | ||
|  | 		&& !(/highslide-(image|move|html|resize)/.test(el.className))) | ||
|  | 	{ | ||
|  | 		el = el.parentNode; | ||
|  | 	} | ||
|  | 	var exp = hs.getExpander(el); | ||
|  | 	if (exp && (exp.isClosing || !exp.isExpanded)) return true; | ||
|  | 		 | ||
|  | 	if (exp && e.type == 'mousedown') { | ||
|  | 		if (e.target.form) return true; | ||
|  | 		var match = el.className.match(/highslide-(image|move|resize)/); | ||
|  | 		if (match) { | ||
|  | 			hs.dragArgs = {  | ||
|  | 				exp: exp ,  | ||
|  | 				type: match[1],  | ||
|  | 				left: exp.x.pos,  | ||
|  | 				width: exp.x.size,  | ||
|  | 				top: exp.y.pos,  | ||
|  | 				height: exp.y.size,  | ||
|  | 				clickX: e.clientX,  | ||
|  | 				clickY: e.clientY | ||
|  | 			}; | ||
|  | 			 | ||
|  | 			 | ||
|  | 			hs.addEventListener(document, 'mousemove', hs.dragHandler); | ||
|  | 			if (e.preventDefault) e.preventDefault(); // FF
 | ||
|  | 			 | ||
|  | 			if (/highslide-(image|html)-blur/.test(exp.content.className)) { | ||
|  | 				exp.focus(); | ||
|  | 				hs.hasFocused = true; | ||
|  | 			} | ||
|  | 			return false; | ||
|  | 		} | ||
|  | 		else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) { | ||
|  | 			exp.focus(); | ||
|  | 			exp.doShowHide('hidden'); | ||
|  | 		} | ||
|  | 	} else if (e.type == 'mouseup') { | ||
|  | 		 | ||
|  | 		hs.removeEventListener(document, 'mousemove', hs.dragHandler); | ||
|  | 		 | ||
|  | 		if (hs.dragArgs) { | ||
|  | 			if (hs.styleRestoreCursor && hs.dragArgs.type == 'image')  | ||
|  | 				hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; | ||
|  | 			var hasDragged = hs.dragArgs.hasDragged; | ||
|  | 			 | ||
|  | 			if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { | ||
|  | 				exp.close(); | ||
|  | 			}  | ||
|  | 			else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { | ||
|  | 				hs.dragArgs.exp.doShowHide('hidden'); | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if (hs.dragArgs.exp.releaseMask)  | ||
|  | 				hs.dragArgs.exp.releaseMask.style.display = 'none'; | ||
|  | 			hs.hasFocused = false; | ||
|  | 			hs.dragArgs = null; | ||
|  | 		 | ||
|  | 		} else if (/highslide-image-blur/.test(el.className)) { | ||
|  | 			el.style.cursor = hs.styleRestoreCursor;		 | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return false; | ||
|  | }, | ||
|  | 
 | ||
|  | dragHandler : function(e) | ||
|  | { | ||
|  | 	if (!hs.dragArgs) return true; | ||
|  | 	if (!e) e = window.event; | ||
|  | 	var a = hs.dragArgs, exp = a.exp; | ||
|  | 	if (exp.iframe) {		 | ||
|  | 		if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null,  | ||
|  | 			{ position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px',  | ||
|  | 				left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4,	background: (hs.ieLt9 ? 'white' : 'none'),  | ||
|  | 				opacity: 0.01 },  | ||
|  | 			exp.wrapper, true); | ||
|  | 		if (exp.releaseMask.style.display == 'none') | ||
|  | 			exp.releaseMask.style.display = ''; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	a.dX = e.clientX - a.clickX; | ||
|  | 	a.dY = e.clientY - a.clickY;	 | ||
|  | 	 | ||
|  | 	var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); | ||
|  | 	if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) | ||
|  | 		|| (distance > (hs.dragSensitivity || 5)); | ||
|  | 	 | ||
|  | 	if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { | ||
|  | 		 | ||
|  | 		if (a.type == 'resize') exp.resize(a); | ||
|  | 		else { | ||
|  | 			exp.moveTo(a.left + a.dX, a.top + a.dY); | ||
|  | 			if (a.type == 'image') exp.content.style.cursor = 'move'; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return false; | ||
|  | }, | ||
|  | 
 | ||
|  | wrapperMouseHandler : function (e) { | ||
|  | 	try { | ||
|  | 		if (!e) e = window.event; | ||
|  | 		var over = /mouseover/i.test(e.type);  | ||
|  | 		if (!e.target) e.target = e.srcElement; // ie
 | ||
|  | 		if (!e.relatedTarget) e.relatedTarget =  | ||
|  | 			over ? e.fromElement : e.toElement; // ie
 | ||
|  | 		var exp = hs.getExpander(e.target); | ||
|  | 		if (!exp.isExpanded) return; | ||
|  | 		if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp  | ||
|  | 			|| hs.dragArgs) return; | ||
|  | 		for (var i = 0; i < exp.overlays.length; i++) (function() { | ||
|  | 			var o = hs.$('hsId'+ exp.overlays[i]); | ||
|  | 			if (o && o.hideOnMouseOut) { | ||
|  | 				if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); | ||
|  | 				hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); | ||
|  | 			} | ||
|  | 		})();	 | ||
|  | 	} catch (e) {} | ||
|  | }, | ||
|  | addEventListener : function (el, event, func) { | ||
|  | 	if (el == document && event == 'ready') { | ||
|  | 		hs.push(hs.onReady, func); | ||
|  | 	} | ||
|  | 	try { | ||
|  | 		el.addEventListener(event, func, false); | ||
|  | 	} catch (e) { | ||
|  | 		try { | ||
|  | 			el.detachEvent('on'+ event, func); | ||
|  | 			el.attachEvent('on'+ event, func); | ||
|  | 		} catch (e) { | ||
|  | 			el['on'+ event] = func; | ||
|  | 		} | ||
|  | 	}  | ||
|  | }, | ||
|  | 
 | ||
|  | removeEventListener : function (el, event, func) { | ||
|  | 	try { | ||
|  | 		el.removeEventListener(event, func, false); | ||
|  | 	} catch (e) { | ||
|  | 		try { | ||
|  | 			el.detachEvent('on'+ event, func); | ||
|  | 		} catch (e) { | ||
|  | 			el['on'+ event] = null; | ||
|  | 		} | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | preloadFullImage : function (i) { | ||
|  | 	if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { | ||
|  | 		var img = document.createElement('img'); | ||
|  | 		img.onload = function() {  | ||
|  | 			img = null; | ||
|  | 			hs.preloadFullImage(i + 1); | ||
|  | 		}; | ||
|  | 		img.src = hs.preloadTheseImages[i]; | ||
|  | 	} | ||
|  | }, | ||
|  | preloadImages : function (number) { | ||
|  | 	if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; | ||
|  | 	 | ||
|  | 	var arr = hs.getAnchors(); | ||
|  | 	for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { | ||
|  | 		hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	// preload outlines
 | ||
|  | 	if (hs.outlineType)	new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); | ||
|  | 	else | ||
|  | 	 | ||
|  | 	hs.preloadFullImage(0); | ||
|  | 	 | ||
|  | 	// preload cursor
 | ||
|  | 	if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | init : function () { | ||
|  | 	if (!hs.container) { | ||
|  | 	 | ||
|  | 		hs.ieLt7 = hs.ie && hs.uaVersion < 7; | ||
|  | 		hs.ieLt9 = hs.ie && hs.uaVersion < 9; | ||
|  | 		 | ||
|  | 		hs.getPageSize(); | ||
|  | 		hs.ie6SSL = hs.ieLt7 && location.protocol == 'https:'; | ||
|  | 		for (var x in hs.langDefaults) { | ||
|  | 			if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; | ||
|  | 			else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined')  | ||
|  | 				hs.lang[x] = hs.langDefaults[x]; | ||
|  | 		} | ||
|  | 		 | ||
|  | 		hs.container = hs.createElement('div', { | ||
|  | 				className: 'highslide-container' | ||
|  | 			}, { | ||
|  | 				position: 'absolute', | ||
|  | 				left: 0,  | ||
|  | 				top: 0,  | ||
|  | 				width: '100%',  | ||
|  | 				zIndex: hs.zIndexCounter, | ||
|  | 				direction: 'ltr' | ||
|  | 			},  | ||
|  | 			document.body, | ||
|  | 			true | ||
|  | 		); | ||
|  | 		hs.loading = hs.createElement('a', { | ||
|  | 				className: 'highslide-loading', | ||
|  | 				title: hs.lang.loadingTitle, | ||
|  | 				innerHTML: hs.lang.loadingText, | ||
|  | 				href: 'javascript:;' | ||
|  | 			}, { | ||
|  | 				position: 'absolute', | ||
|  | 				top: '-9999px', | ||
|  | 				opacity: hs.loadingOpacity, | ||
|  | 				zIndex: 1 | ||
|  | 			}, hs.container | ||
|  | 		); | ||
|  | 		hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); | ||
|  | 		hs.clearing = hs.createElement('div', null,  | ||
|  | 			{ clear: 'both', paddingTop: '1px' }, null, true); | ||
|  | 		 | ||
|  | 		// http://www.robertpenner.com/easing/ 
 | ||
|  | 		Math.linearTween = function (t, b, c, d) { | ||
|  | 			return c*t/d + b; | ||
|  | 		}; | ||
|  | 		Math.easeInQuad = function (t, b, c, d) { | ||
|  | 			return c*(t/=d)*t + b; | ||
|  | 		}; | ||
|  | 		 | ||
|  | 		hs.hideSelects = hs.ieLt7; | ||
|  | 		hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE'  | ||
|  | 			|| (hs.ieLt7 && hs.uaVersion < 5.5)); | ||
|  | 	} | ||
|  | }, | ||
|  | ready : function() { | ||
|  | 	if (hs.isReady) return; | ||
|  | 	hs.isReady = true; | ||
|  | 	for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); | ||
|  | }, | ||
|  | 
 | ||
|  | updateAnchors : function() { | ||
|  | 	var el, els, all = [], images = [], htmls = [],groups = {}, re; | ||
|  | 		 | ||
|  | 	for (var i = 0; i < hs.openerTagNames.length; i++) { | ||
|  | 		els = document.getElementsByTagName(hs.openerTagNames[i]); | ||
|  | 		for (var j = 0; j < els.length; j++) { | ||
|  | 			el = els[j]; | ||
|  | 			re = hs.isHsAnchor(el); | ||
|  | 			if (re) { | ||
|  | 				hs.push(all, el); | ||
|  | 				if (re[0] == 'hs.expand') hs.push(images, el); | ||
|  | 				else if (re[0] == 'hs.htmlExpand') hs.push(htmls, el); | ||
|  | 				var g = hs.getParam(el, 'slideshowGroup') || 'none'; | ||
|  | 				if (!groups[g]) groups[g] = []; | ||
|  | 				hs.push(groups[g], el); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	hs.anchors = { all: all, groups: groups, images: images, htmls: htmls }; | ||
|  | 	return hs.anchors; | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | getAnchors : function() { | ||
|  | 	return hs.anchors || hs.updateAnchors(); | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | close : function(el) { | ||
|  | 	var exp = hs.getExpander(el); | ||
|  | 	if (exp) exp.close(); | ||
|  | 	return false; | ||
|  | } | ||
|  | }; // end hs object
 | ||
|  | hs.fx = function( elem, options, prop ){ | ||
|  | 	this.options = options; | ||
|  | 	this.elem = elem; | ||
|  | 	this.prop = prop; | ||
|  | 
 | ||
|  | 	if (!options.orig) options.orig = {}; | ||
|  | }; | ||
|  | hs.fx.prototype = { | ||
|  | 	update: function(){ | ||
|  | 		(hs.fx.step[this.prop] || hs.fx.step._default)(this); | ||
|  | 		 | ||
|  | 		if (this.options.step) | ||
|  | 			this.options.step.call(this.elem, this.now, this); | ||
|  | 
 | ||
|  | 	}, | ||
|  | 	custom: function(from, to, unit){ | ||
|  | 		this.startTime = (new Date()).getTime(); | ||
|  | 		this.start = from; | ||
|  | 		this.end = to; | ||
|  | 		this.unit = unit;// || this.unit || "px";
 | ||
|  | 		this.now = this.start; | ||
|  | 		this.pos = this.state = 0; | ||
|  | 
 | ||
|  | 		var self = this; | ||
|  | 		function t(gotoEnd){ | ||
|  | 			return self.step(gotoEnd); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		t.elem = this.elem; | ||
|  | 
 | ||
|  | 		if ( t() && hs.timers.push(t) == 1 ) { | ||
|  | 			hs.timerId = setInterval(function(){ | ||
|  | 				var timers = hs.timers; | ||
|  | 
 | ||
|  | 				for ( var i = 0; i < timers.length; i++ ) | ||
|  | 					if ( !timers[i]() ) | ||
|  | 						timers.splice(i--, 1); | ||
|  | 
 | ||
|  | 				if ( !timers.length ) { | ||
|  | 					clearInterval(hs.timerId); | ||
|  | 				} | ||
|  | 			}, 13); | ||
|  | 		} | ||
|  | 	}, | ||
|  | 	step: function(gotoEnd){ | ||
|  | 		var t = (new Date()).getTime(); | ||
|  | 		if ( gotoEnd || t >= this.options.duration + this.startTime ) { | ||
|  | 			this.now = this.end; | ||
|  | 			this.pos = this.state = 1; | ||
|  | 			this.update(); | ||
|  | 
 | ||
|  | 			this.options.curAnim[ this.prop ] = true; | ||
|  | 
 | ||
|  | 			var done = true; | ||
|  | 			for ( var i in this.options.curAnim ) | ||
|  | 				if ( this.options.curAnim[i] !== true ) | ||
|  | 					done = false; | ||
|  | 
 | ||
|  | 			if ( done ) { | ||
|  | 				if (this.options.complete) this.options.complete.call(this.elem); | ||
|  | 			} | ||
|  | 			return false; | ||
|  | 		} else { | ||
|  | 			var n = t - this.startTime; | ||
|  | 			this.state = n / this.options.duration; | ||
|  | 			this.pos = this.options.easing(n, 0, 1, this.options.duration); | ||
|  | 			this.now = this.start + ((this.end - this.start) * this.pos); | ||
|  | 			this.update(); | ||
|  | 		} | ||
|  | 		return true; | ||
|  | 	} | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | hs.extend( hs.fx, { | ||
|  | 	step: { | ||
|  | 
 | ||
|  | 		opacity: function(fx){ | ||
|  | 			hs.setStyles(fx.elem, { opacity: fx.now }); | ||
|  | 		}, | ||
|  | 
 | ||
|  | 		_default: function(fx){ | ||
|  | 			try { | ||
|  | 				if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) | ||
|  | 					fx.elem.style[ fx.prop ] = fx.now + fx.unit; | ||
|  | 				else | ||
|  | 					fx.elem[ fx.prop ] = fx.now; | ||
|  | 			} catch (e) {} | ||
|  | 		} | ||
|  | 	} | ||
|  | }); | ||
|  | 
 | ||
|  | hs.Outline =  function (outlineType, onLoad) { | ||
|  | 	this.onLoad = onLoad; | ||
|  | 	this.outlineType = outlineType; | ||
|  | 	var v = hs.uaVersion, tr; | ||
|  | 	 | ||
|  | 	this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; | ||
|  | 	if (!outlineType) { | ||
|  | 		if (onLoad) onLoad(); | ||
|  | 		return; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	hs.init(); | ||
|  | 	this.table = hs.createElement( | ||
|  | 		'table', {  | ||
|  | 			cellSpacing: 0  | ||
|  | 		}, { | ||
|  | 			visibility: 'hidden', | ||
|  | 			position: 'absolute', | ||
|  | 			borderCollapse: 'collapse', | ||
|  | 			width: 0 | ||
|  | 		}, | ||
|  | 		hs.container, | ||
|  | 		true | ||
|  | 	); | ||
|  | 	var tbody = hs.createElement('tbody', null, null, this.table, 1); | ||
|  | 	 | ||
|  | 	this.td = []; | ||
|  | 	for (var i = 0; i <= 8; i++) { | ||
|  | 		if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); | ||
|  | 		this.td[i] = hs.createElement('td', null, null, tr, true); | ||
|  | 		var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; | ||
|  | 		hs.setStyles(this.td[i], style); | ||
|  | 	} | ||
|  | 	this.td[4].className = outlineType +' highslide-outline'; | ||
|  | 	 | ||
|  | 	this.preloadGraphic();  | ||
|  | }; | ||
|  | 
 | ||
|  | hs.Outline.prototype = { | ||
|  | preloadGraphic : function () { | ||
|  | 	var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; | ||
|  | 				 | ||
|  | 	var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; | ||
|  | 	this.graphic = hs.createElement('img', null, { position: 'absolute',  | ||
|  | 		top: '-9999px' }, appendTo, true); // for onload trigger
 | ||
|  | 	 | ||
|  | 	var pThis = this; | ||
|  | 	this.graphic.onload = function() { pThis.onGraphicLoad(); }; | ||
|  | 	 | ||
|  | 	this.graphic.src = src; | ||
|  | }, | ||
|  | 
 | ||
|  | onGraphicLoad : function () { | ||
|  | 	var o = this.offset = this.graphic.width / 4, | ||
|  | 		pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], | ||
|  | 		dim = { height: (2*o) +'px', width: (2*o) +'px' }; | ||
|  | 	for (var i = 0; i <= 8; i++) { | ||
|  | 		if (pos[i]) { | ||
|  | 			if (this.hasAlphaImageLoader) { | ||
|  | 				var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; | ||
|  | 				var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); | ||
|  | 				hs.createElement ('div', null, {  | ||
|  | 						filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')",  | ||
|  | 						position: 'absolute', | ||
|  | 						width: w,  | ||
|  | 						height: this.graphic.height +'px', | ||
|  | 						left: (pos[i][0]*o)+'px', | ||
|  | 						top: (pos[i][1]*o)+'px' | ||
|  | 					},  | ||
|  | 				div, | ||
|  | 				true); | ||
|  | 			} else { | ||
|  | 				hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if (window.opera && (i == 3 || i ==5))  | ||
|  | 				hs.createElement('div', null, dim, this.td[i], true); | ||
|  | 			 | ||
|  | 			hs.setStyles (this.td[i], dim); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	this.graphic = null; | ||
|  | 	if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); | ||
|  | 	hs.pendingOutlines[this.outlineType] = this; | ||
|  | 	if (this.onLoad) this.onLoad(); | ||
|  | }, | ||
|  | 	 | ||
|  | setPosition : function (pos, offset, vis, dur, easing) { | ||
|  | 	var exp = this.exp, | ||
|  | 		stl = exp.wrapper.style, | ||
|  | 		offset = offset || 0, | ||
|  | 		pos = pos || { | ||
|  | 			x: exp.x.pos + offset, | ||
|  | 			y: exp.y.pos + offset, | ||
|  | 			w: exp.x.get('wsize') - 2 * offset, | ||
|  | 			h: exp.y.get('wsize') - 2 * offset | ||
|  | 		}; | ||
|  | 	if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset)  | ||
|  | 		? 'visible' : 'hidden'; | ||
|  | 	hs.setStyles(this.table, { | ||
|  | 		left: (pos.x - this.offset) +'px', | ||
|  | 		top: (pos.y - this.offset) +'px', | ||
|  | 		width: (pos.w + 2 * this.offset) +'px' | ||
|  | 	}); | ||
|  | 	 | ||
|  | 	pos.w -= 2 * this.offset; | ||
|  | 	pos.h -= 2 * this.offset; | ||
|  | 	hs.setStyles (this.td[4], { | ||
|  | 		width: pos.w >= 0 ? pos.w +'px' : 0, | ||
|  | 		height: pos.h >= 0 ? pos.h +'px' : 0 | ||
|  | 	}); | ||
|  | 	if (this.hasAlphaImageLoader) this.td[3].style.height  | ||
|  | 		= this.td[5].style.height = this.td[4].style.height;	 | ||
|  | 	 | ||
|  | }, | ||
|  | 	 | ||
|  | destroy : function(hide) { | ||
|  | 	if (hide) this.table.style.visibility = 'hidden'; | ||
|  | 	else hs.discardElement(this.table); | ||
|  | } | ||
|  | }; | ||
|  | 
 | ||
|  | hs.Dimension = function(exp, dim) { | ||
|  | 	this.exp = exp; | ||
|  | 	this.dim = dim; | ||
|  | 	this.ucwh = dim == 'x' ? 'Width' : 'Height'; | ||
|  | 	this.wh = this.ucwh.toLowerCase(); | ||
|  | 	this.uclt = dim == 'x' ? 'Left' : 'Top'; | ||
|  | 	this.lt = this.uclt.toLowerCase(); | ||
|  | 	this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; | ||
|  | 	this.rb = this.ucrb.toLowerCase(); | ||
|  | 	this.p1 = this.p2 = 0; | ||
|  | }; | ||
|  | hs.Dimension.prototype = { | ||
|  | get : function(key) { | ||
|  | 	switch (key) { | ||
|  | 		case 'loadingPos': | ||
|  | 			return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; | ||
|  | 		case 'wsize': | ||
|  | 			return this.size + 2 * this.cb + this.p1 + this.p2; | ||
|  | 		case 'fitsize': | ||
|  | 			return this.clientSize - this.marginMin - this.marginMax; | ||
|  | 		case 'maxsize': | ||
|  | 			return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; | ||
|  | 		case 'opos': | ||
|  | 			return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); | ||
|  | 		case 'osize': | ||
|  | 			return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); | ||
|  | 		case 'imgPad': | ||
|  | 			return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; | ||
|  | 		 | ||
|  | 	} | ||
|  | }, | ||
|  | calcBorders: function() { | ||
|  | 	// correct for borders
 | ||
|  | 	this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; | ||
|  | 	 | ||
|  | 	this.marginMax = hs['margin'+ this.ucrb]; | ||
|  | }, | ||
|  | calcThumb: function() { | ||
|  | 	this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) :  | ||
|  | 		this.exp.el['offset'+ this.ucwh]; | ||
|  | 	this.tpos = this.exp.tpos[this.dim]; | ||
|  | 	this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; | ||
|  | 	if (this.tpos == 0 || this.tpos == -1) { | ||
|  | 		this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt];		 | ||
|  | 	}; | ||
|  | }, | ||
|  | calcExpanded: function() { | ||
|  | 	var exp = this.exp; | ||
|  | 	this.justify = 'auto'; | ||
|  | 	 | ||
|  | 	 | ||
|  | 	// size and position
 | ||
|  | 	this.pos = this.tpos - this.cb + this.tb; | ||
|  | 	 | ||
|  | 	if (this.maxHeight && this.dim == 'x') | ||
|  | 		exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full);  | ||
|  | 		 | ||
|  | 	this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); | ||
|  | 	this.minSize = exp.allowSizeReduction ?  | ||
|  | 		Math.min(exp['min'+ this.ucwh], this.full) :this.full; | ||
|  | 	if (exp.isImage && exp.useBox)	{ | ||
|  | 		this.size = exp[this.wh]; | ||
|  | 		this.imgSize = this.full; | ||
|  | 	} | ||
|  | 	if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; | ||
|  | 	this.marginMin = hs['margin'+ this.uclt]; | ||
|  | 	this.scroll = hs.page['scroll'+ this.uclt]; | ||
|  | 	this.clientSize = hs.page[this.wh]; | ||
|  | }, | ||
|  | setSize: function(i) { | ||
|  | 	var exp = this.exp; | ||
|  | 	if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { | ||
|  | 		this.imgSize = i; | ||
|  | 		this.size = Math.max(this.size, this.imgSize); | ||
|  | 		exp.content.style[this.lt] = this.get('imgPad')+'px'; | ||
|  | 	} else | ||
|  | 	this.size = i; | ||
|  | 	 | ||
|  | 	exp.content.style[this.wh] = i +'px'; | ||
|  | 	exp.wrapper.style[this.wh] = this.get('wsize') +'px'; | ||
|  | 	if (exp.outline) exp.outline.setPosition(); | ||
|  | 	if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px'; | ||
|  | 	if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try { | ||
|  | 		exp.iDoc.body.style.overflow = 'auto'; | ||
|  | 	} catch (e) {} | ||
|  | 	if (exp.isHtml) { | ||
|  | 		var d = exp.scrollerDiv; | ||
|  | 		if (this.sizeDiff === undefined) | ||
|  | 			this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh]; | ||
|  | 		d.style[this.wh] = (this.size - this.sizeDiff) +'px'; | ||
|  | 			 | ||
|  | 		if (this.dim == 'x') exp.mediumContent.style.width = 'auto'; | ||
|  | 		if (exp.body) exp.body.style[this.wh] = 'auto'; | ||
|  | 	} | ||
|  | 	if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); | ||
|  | }, | ||
|  | setPos: function(i) { | ||
|  | 	this.pos = i; | ||
|  | 	this.exp.wrapper.style[this.lt] = i +'px';	 | ||
|  | 	 | ||
|  | 	if (this.exp.outline) this.exp.outline.setPosition(); | ||
|  | 	 | ||
|  | } | ||
|  | }; | ||
|  | 
 | ||
|  | hs.Expander = function(a, params, custom, contentType) { | ||
|  | 	if (document.readyState && hs.ie && !hs.isReady) { | ||
|  | 		hs.addEventListener(document, 'ready', function() { | ||
|  | 			new hs.Expander(a, params, custom, contentType); | ||
|  | 		}); | ||
|  | 		return; | ||
|  | 	}  | ||
|  | 	this.a = a; | ||
|  | 	this.custom = custom; | ||
|  | 	this.contentType = contentType || 'image'; | ||
|  | 	this.isHtml = (contentType == 'html'); | ||
|  | 	this.isImage = !this.isHtml; | ||
|  | 	 | ||
|  | 	hs.continuePreloading = false; | ||
|  | 	this.overlays = []; | ||
|  | 	hs.init(); | ||
|  | 	var key = this.key = hs.expanders.length; | ||
|  | 	// override inline parameters
 | ||
|  | 	for (var i = 0; i < hs.overrides.length; i++) { | ||
|  | 		var name = hs.overrides[i]; | ||
|  | 		this[name] = params && typeof params[name] != 'undefined' ? | ||
|  | 			params[name] : hs[name]; | ||
|  | 	} | ||
|  | 	if (!this.src) this.src = a.href; | ||
|  | 	 | ||
|  | 	// get thumb
 | ||
|  | 	var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; | ||
|  | 	el = this.thumb = el.getElementsByTagName('img')[0] || el; | ||
|  | 	this.thumbsUserSetId = el.id || a.id; | ||
|  | 	 | ||
|  | 	// check if already open
 | ||
|  | 	for (var i = 0; i < hs.expanders.length; i++) { | ||
|  | 		if (hs.expanders[i] && hs.expanders[i].a == a) { | ||
|  | 			hs.expanders[i].focus(); | ||
|  | 			return false; | ||
|  | 		} | ||
|  | 	}	 | ||
|  | 
 | ||
|  | 	// cancel other
 | ||
|  | 	if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { | ||
|  | 		if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { | ||
|  | 			hs.expanders[i].cancelLoading(); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	hs.expanders[key] = this; | ||
|  | 	if (!hs.allowMultipleInstances && !hs.upcoming) { | ||
|  | 		if (hs.expanders[key-1]) hs.expanders[key-1].close(); | ||
|  | 		if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) | ||
|  | 			hs.expanders[hs.focusKey].close(); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	// initiate metrics
 | ||
|  | 	this.el = el; | ||
|  | 	this.tpos = this.pageOrigin || hs.getPosition(el); | ||
|  | 	hs.getPageSize(); | ||
|  | 	var x = this.x = new hs.Dimension(this, 'x'); | ||
|  | 	x.calcThumb(); | ||
|  | 	var y = this.y = new hs.Dimension(this, 'y'); | ||
|  | 	y.calcThumb(); | ||
|  | 	this.wrapper = hs.createElement( | ||
|  | 		'div', { | ||
|  | 			id: 'highslide-wrapper-'+ this.key, | ||
|  | 			className: 'highslide-wrapper '+ this.wrapperClassName | ||
|  | 		}, { | ||
|  | 			visibility: 'hidden', | ||
|  | 			position: 'absolute', | ||
|  | 			zIndex: hs.zIndexCounter += 2 | ||
|  | 		}, null, true ); | ||
|  | 	 | ||
|  | 	this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; | ||
|  | 	if (this.contentType == 'image' && this.outlineWhileAnimating == 2) | ||
|  | 		this.outlineWhileAnimating = 0; | ||
|  | 	 | ||
|  | 	// get the outline
 | ||
|  | 	if (!this.outlineType) { | ||
|  | 		this[this.contentType +'Create'](); | ||
|  | 	 | ||
|  | 	} else if (hs.pendingOutlines[this.outlineType]) { | ||
|  | 		this.connectOutline(); | ||
|  | 		this[this.contentType +'Create'](); | ||
|  | 	 | ||
|  | 	} else { | ||
|  | 		this.showLoading(); | ||
|  | 		var exp = this; | ||
|  | 		new hs.Outline(this.outlineType,  | ||
|  | 			function () { | ||
|  | 				exp.connectOutline(); | ||
|  | 				exp[exp.contentType +'Create'](); | ||
|  | 			}  | ||
|  | 		); | ||
|  | 	} | ||
|  | 	return true; | ||
|  | }; | ||
|  | 
 | ||
|  | hs.Expander.prototype = { | ||
|  | error : function(e) { | ||
|  | 	if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); | ||
|  | 	else window.location.href = this.src; | ||
|  | }, | ||
|  | 
 | ||
|  | connectOutline : function() { | ||
|  | 	var outline = this.outline = hs.pendingOutlines[this.outlineType]; | ||
|  | 	outline.exp = this; | ||
|  | 	outline.table.style.zIndex = this.wrapper.style.zIndex - 1; | ||
|  | 	hs.pendingOutlines[this.outlineType] = null; | ||
|  | }, | ||
|  | 
 | ||
|  | showLoading : function() { | ||
|  | 	if (this.onLoadStarted || this.loading) return; | ||
|  | 	 | ||
|  | 	this.loading = hs.loading; | ||
|  | 	var exp = this; | ||
|  | 	this.loading.onclick = function() { | ||
|  | 		exp.cancelLoading(); | ||
|  | 	}; | ||
|  | 	var exp = this,  | ||
|  | 		l = this.x.get('loadingPos') +'px', | ||
|  | 		t = this.y.get('loadingPos') +'px'; | ||
|  | 	setTimeout(function () {  | ||
|  | 		if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} | ||
|  | 	, 100); | ||
|  | }, | ||
|  | 
 | ||
|  | imageCreate : function() { | ||
|  | 	var exp = this; | ||
|  | 	 | ||
|  | 	var img = document.createElement('img'); | ||
|  |     this.content = img; | ||
|  |     img.onload = function () { | ||
|  |     	if (hs.expanders[exp.key]) exp.contentLoaded();  | ||
|  | 	}; | ||
|  |     if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; | ||
|  |     img.className = 'highslide-image'; | ||
|  |     hs.setStyles(img, { | ||
|  |     	visibility: 'hidden', | ||
|  |     	display: 'block', | ||
|  |     	position: 'absolute', | ||
|  | 		maxWidth: '9999px', | ||
|  | 		zIndex: 3 | ||
|  | 	}); | ||
|  |     img.title = hs.lang.restoreTitle; | ||
|  | 	if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); | ||
|  |     if (hs.ie && hs.flushImgSize) img.src = null; | ||
|  | 	img.src = this.src; | ||
|  | 	 | ||
|  | 	this.showLoading(); | ||
|  | }, | ||
|  | 
 | ||
|  | htmlCreate : function () { | ||
|  | 	 | ||
|  | 	this.content = hs.getCacheBinding(this.a); | ||
|  | 	if (!this.content)  | ||
|  | 		this.content = hs.getNode(this.contentId); | ||
|  | 	if (!this.content)  | ||
|  | 		this.content = hs.getSelfRendered(); | ||
|  | 	this.getInline(['maincontent']); | ||
|  | 	if (this.maincontent) { | ||
|  | 		var body = hs.getElementByClass(this.content, 'div', 'highslide-body'); | ||
|  | 		if (body) body.appendChild(this.maincontent); | ||
|  | 		this.maincontent.style.display = 'block'; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	var innerContent = this.innerContent = this.content; | ||
|  | 	 | ||
|  | 	if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent); | ||
|  | 	 | ||
|  | 	// the content tree
 | ||
|  | 	hs.container.appendChild(this.wrapper); | ||
|  | 	hs.setStyles( this.wrapper, {  | ||
|  | 		position: 'static', | ||
|  | 		padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px' | ||
|  | 	}); | ||
|  | 	this.content = hs.createElement( | ||
|  |     	'div', { | ||
|  |     		className: 'highslide-html'  | ||
|  |     	}, { | ||
|  | 			position: 'relative', | ||
|  | 			zIndex: 3, | ||
|  | 			height: 0, | ||
|  | 			overflow: 'hidden' | ||
|  | 		}, | ||
|  | 		this.wrapper | ||
|  | 	); | ||
|  | 	this.mediumContent = hs.createElement('div', null, null, this.content, 1); | ||
|  | 	this.mediumContent.appendChild(innerContent); | ||
|  | 	 | ||
|  | 	hs.setStyles (innerContent, {  | ||
|  | 		position: 'relative', | ||
|  | 		display: 'block', | ||
|  | 		direction: hs.lang.cssDirection || '' | ||
|  | 	}); | ||
|  | 	if (this.width) innerContent.style.width = this.width +'px'; | ||
|  | 	if (this.height) hs.setStyles(innerContent, { | ||
|  | 		height: this.height +'px', | ||
|  | 		overflow: 'hidden' | ||
|  | 	}); | ||
|  | 	if (innerContent.offsetWidth < this.minWidth) | ||
|  | 		innerContent.style.width = this.minWidth +'px'; | ||
|  | 		 | ||
|  | 	 | ||
|  |      | ||
|  | 	if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) { | ||
|  | 		this.showLoading(); | ||
|  |     	var exp = this; | ||
|  |     	var ajax = new hs.Ajax(this.a, innerContent); | ||
|  | 		ajax.src = this.src; | ||
|  |     	ajax.onLoad = function () {	if (hs.expanders[exp.key]) exp.contentLoaded(); }; | ||
|  |     	ajax.onError = function () { location.href = exp.src; }; | ||
|  |     	ajax.run(); | ||
|  | 	} | ||
|  |     else | ||
|  |      | ||
|  |     if (this.objectType == 'iframe' && this.objectLoadTime == 'before') { | ||
|  | 		this.writeExtendedContent(); | ||
|  | 	} | ||
|  |     else | ||
|  |     	this.contentLoaded(); | ||
|  | }, | ||
|  | 
 | ||
|  | contentLoaded : function() { | ||
|  | 	try {	 | ||
|  | 		if (!this.content) return; | ||
|  | 		this.content.onload = null; | ||
|  | 		if (this.onLoadStarted) return; | ||
|  | 		else this.onLoadStarted = true; | ||
|  | 		 | ||
|  | 		var x = this.x, y = this.y; | ||
|  | 		 | ||
|  | 		if (this.loading) { | ||
|  | 			hs.setStyles(this.loading, { top: '-9999px' }); | ||
|  | 			this.loading = null; | ||
|  | 		} | ||
|  | 		if (this.isImage) {	 | ||
|  | 			x.full = this.content.width; | ||
|  | 			y.full = this.content.height; | ||
|  | 			 | ||
|  | 			hs.setStyles(this.content, { | ||
|  | 				width: x.t +'px', | ||
|  | 				height: y.t +'px' | ||
|  | 			}); | ||
|  | 			this.wrapper.appendChild(this.content); | ||
|  | 			hs.container.appendChild(this.wrapper); | ||
|  | 		} else if (this.htmlGetSize) this.htmlGetSize(); | ||
|  | 		 | ||
|  | 		x.calcBorders(); | ||
|  | 		y.calcBorders(); | ||
|  | 		 | ||
|  | 		hs.setStyles (this.wrapper, { | ||
|  | 			left: (x.tpos + x.tb - x.cb) +'px', | ||
|  | 			top: (y.tpos + x.tb - y.cb) +'px' | ||
|  | 		}); | ||
|  | 		this.getOverlays(); | ||
|  | 		 | ||
|  | 		var ratio = x.full / y.full; | ||
|  | 		x.calcExpanded(); | ||
|  | 		this.justify(x); | ||
|  | 		 | ||
|  | 		y.calcExpanded(); | ||
|  | 		this.justify(y); | ||
|  | 		if (this.isHtml) this.htmlSizeOperations(); | ||
|  | 		if (this.overlayBox) this.sizeOverlayBox(0, 1); | ||
|  | 
 | ||
|  | 		 | ||
|  | 		if (this.allowSizeReduction) { | ||
|  | 			if (this.isImage) | ||
|  | 				this.correctRatio(ratio); | ||
|  | 			else this.fitOverlayBox(); | ||
|  | 			if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { | ||
|  | 				this.createFullExpand(); | ||
|  | 				if (this.overlays.length == 1) this.sizeOverlayBox(); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		this.show(); | ||
|  | 		 | ||
|  | 	} catch (e) { | ||
|  | 		this.error(e); | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | setObjContainerSize : function(parent, auto) { | ||
|  | 	var c = hs.getElementByClass(parent, 'DIV', 'highslide-body'); | ||
|  | 	if (/(iframe|swf)/.test(this.objectType)) { | ||
|  | 		if (this.objectWidth) c.style.width = this.objectWidth +'px'; | ||
|  | 		if (this.objectHeight) c.style.height = this.objectHeight +'px'; | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | writeExtendedContent : function () { | ||
|  | 	if (this.hasExtendedContent) return; | ||
|  | 	var exp = this; | ||
|  | 	this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); | ||
|  | 	if (this.objectType == 'iframe') { | ||
|  | 		this.showLoading(); | ||
|  | 		var ruler = hs.clearing.cloneNode(1); | ||
|  | 		this.body.appendChild(ruler); | ||
|  | 		this.newWidth = this.innerContent.offsetWidth; | ||
|  | 		if (!this.objectWidth) this.objectWidth = ruler.offsetWidth; | ||
|  | 		var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight, | ||
|  | 			h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom, | ||
|  | 			onload = this.objectLoadTime == 'before' ?  | ||
|  | 				' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : ''; | ||
|  | 		this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" ' | ||
|  | 			+' style="width:'+ this.objectWidth +'px; height:'+ h +'px" ' | ||
|  | 			+ onload +' src="'+ this.src +'" ></iframe>'; | ||
|  | 		this.ruler = this.body.getElementsByTagName('div')[0]; | ||
|  | 		this.iframe = this.body.getElementsByTagName('iframe')[0]; | ||
|  | 		 | ||
|  | 		if (this.objectLoadTime == 'after') this.correctIframeSize(); | ||
|  | 		 | ||
|  | 	} | ||
|  | 	if (this.objectType == 'swf') { | ||
|  | 		this.body.id = this.body.id || 'hs-flash-id-' + this.key; | ||
|  | 		var a = this.swfOptions; | ||
|  | 		if (!a.params) a.params = {}; | ||
|  | 		if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent'; | ||
|  | 		if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight,  | ||
|  | 			a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes); | ||
|  | 	} | ||
|  | 	this.hasExtendedContent = true; | ||
|  | }, | ||
|  | htmlGetSize : function() { | ||
|  | 	if (this.iframe && !this.objectHeight) { // loadtime before
 | ||
|  | 		this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px'; | ||
|  | 	} | ||
|  | 	this.innerContent.appendChild(hs.clearing); | ||
|  | 	if (!this.x.full) this.x.full = this.innerContent.offsetWidth; | ||
|  |     this.y.full = this.innerContent.offsetHeight; | ||
|  |     this.innerContent.removeChild(hs.clearing); | ||
|  |     if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug
 | ||
|  | 		this.newHeight = parseInt(this.innerContent.currentStyle.height); | ||
|  | 	} | ||
|  | 	hs.setStyles( this.wrapper, { position: 'absolute',	padding: '0'}); | ||
|  | 	hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'}); | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | getIframePageHeight : function() { | ||
|  | 	var h; | ||
|  | 	try { | ||
|  | 		var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document; | ||
|  | 		var clearing = doc.createElement('div'); | ||
|  | 		clearing.style.clear = 'both'; | ||
|  | 		doc.body.appendChild(clearing); | ||
|  | 		h = clearing.offsetTop; | ||
|  | 		if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop)  | ||
|  | 			+ parseInt(doc.body.currentStyle.marginBottom) - 1; | ||
|  | 	} catch (e) { // other domain
 | ||
|  | 		h = 300; | ||
|  | 	} | ||
|  | 	return h; | ||
|  | }, | ||
|  | correctIframeSize : function () { | ||
|  | 	var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth; | ||
|  | 	hs.discardElement(this.ruler); | ||
|  | 	if (wDiff < 0) wDiff = 0; | ||
|  | 	 | ||
|  | 	var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight; | ||
|  | 	if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try { | ||
|  | 		this.iDoc.body.style.overflow = 'hidden'; | ||
|  | 	} catch (e) {} | ||
|  | 	hs.setStyles(this.iframe, {  | ||
|  | 		width: Math.abs(this.x.size - wDiff) +'px',  | ||
|  | 		height: Math.abs(this.y.size - hDiff) +'px' | ||
|  | 	}); | ||
|  |     hs.setStyles(this.body, {  | ||
|  | 		width: this.iframe.style.width,  | ||
|  |     	height: this.iframe.style.height | ||
|  | 	}); | ||
|  |     	 | ||
|  |     this.scrollingContent = this.iframe; | ||
|  |     this.scrollerDiv = this.scrollingContent; | ||
|  | 	 | ||
|  | }, | ||
|  | htmlSizeOperations : function () { | ||
|  | 	 | ||
|  | 	this.setObjContainerSize(this.innerContent); | ||
|  | 	 | ||
|  | 	 | ||
|  | 	if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent();	 | ||
|  | 	 | ||
|  |     // handle minimum size
 | ||
|  |     if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full; | ||
|  |     if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full; | ||
|  | 	this.scrollerDiv = this.innerContent; | ||
|  |     hs.setStyles(this.mediumContent, {  | ||
|  | 		position: 'relative', | ||
|  | 		width: this.x.size +'px' | ||
|  | 	}); | ||
|  |     hs.setStyles(this.innerContent, {  | ||
|  |     	border: 'none', | ||
|  |     	width: 'auto', | ||
|  |     	height: 'auto' | ||
|  |     }); | ||
|  | 	var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); | ||
|  |     if (node && !/(iframe|swf)/.test(this.objectType)) { | ||
|  |     	var cNode = node; // wrap to get true size
 | ||
|  |     	node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true); | ||
|  |     	cNode.parentNode.insertBefore(node, cNode); | ||
|  |     	node.appendChild(hs.clearing); // IE6
 | ||
|  |     	node.appendChild(cNode); | ||
|  |     	 | ||
|  |     	var wDiff = this.innerContent.offsetWidth - node.offsetWidth; | ||
|  |     	var hDiff = this.innerContent.offsetHeight - node.offsetHeight; | ||
|  | 		node.removeChild(hs.clearing); | ||
|  |     	 | ||
|  |     	var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug
 | ||
|  |     	hs.setStyles(node, {  | ||
|  |     			width: (this.x.size - wDiff - kdeBugCorr) +'px',  | ||
|  |     			height: (this.y.size - hDiff) +'px', | ||
|  |     			overflow: 'auto',  | ||
|  |     			position: 'relative'  | ||
|  |     		}  | ||
|  |     	); | ||
|  | 		if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight)	{ | ||
|  |     		node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px'; | ||
|  | 		} | ||
|  |     	this.scrollingContent = node; | ||
|  |     	this.scrollerDiv = this.scrollingContent; | ||
|  | 	} | ||
|  |     if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize(); | ||
|  |     if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content; | ||
|  | 	 | ||
|  | 	if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) { | ||
|  | 		this.x.size += 17; // room for scrollbars
 | ||
|  | 	} | ||
|  | 	if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) { | ||
|  | 		setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", | ||
|  | 			 hs.expandDuration); | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | justify : function (p, moveOnly) { | ||
|  | 	var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; | ||
|  | 	 | ||
|  | 		var hasMovedMin = false; | ||
|  | 		 | ||
|  | 		var allowReduce = p.exp.allowSizeReduction; | ||
|  | 			p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); | ||
|  | 		if (p.pos < p.scroll + p.marginMin) { | ||
|  | 			p.pos = p.scroll + p.marginMin; | ||
|  | 			hasMovedMin = true;		 | ||
|  | 		} | ||
|  | 		if (!moveOnly && p.size < p.minSize) { | ||
|  | 			p.size = p.minSize; | ||
|  | 			allowReduce = false; | ||
|  | 		} | ||
|  | 		if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { | ||
|  | 			if (!moveOnly && hasMovedMin && allowReduce) { | ||
|  | 				p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); | ||
|  | 			} else if (p.get('wsize') < p.get('fitsize')) { | ||
|  | 				p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); | ||
|  | 			} else { // image larger than viewport
 | ||
|  | 				p.pos = p.scroll + p.marginMin; | ||
|  | 				if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); | ||
|  | 			}			 | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if (!moveOnly && p.size < p.minSize) { | ||
|  | 			p.size = p.minSize; | ||
|  | 			allowReduce = false; | ||
|  | 		} | ||
|  | 		 | ||
|  | 	 | ||
|  | 		 | ||
|  | 	if (p.pos < p.marginMin) { | ||
|  | 		var tmpMin = p.pos; | ||
|  | 		p.pos = p.marginMin;  | ||
|  | 		 | ||
|  | 		if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); | ||
|  | 		 | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | correctRatio : function(ratio) { | ||
|  | 	var x = this.x,  | ||
|  | 		y = this.y, | ||
|  | 		changed = false, | ||
|  | 		xSize = Math.min(x.full, x.size), | ||
|  | 		ySize = Math.min(y.full, y.size), | ||
|  | 		useBox = (this.useBox || hs.padToMinWidth); | ||
|  | 	 | ||
|  | 	if (xSize / ySize > ratio) { // width greater
 | ||
|  | 		xSize = ySize * ratio; | ||
|  | 		if (xSize < x.minSize) { // below minWidth
 | ||
|  | 			xSize = x.minSize; | ||
|  | 			ySize = xSize / ratio; | ||
|  | 		} | ||
|  | 		changed = true; | ||
|  | 	 | ||
|  | 	} else if (xSize / ySize < ratio) { // height greater
 | ||
|  | 		ySize = xSize / ratio; | ||
|  | 		changed = true; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	if (hs.padToMinWidth && x.full < x.minSize) { | ||
|  | 		x.imgSize = x.full; | ||
|  | 		y.size = y.imgSize = y.full; | ||
|  | 	} else if (this.useBox) { | ||
|  | 		x.imgSize = xSize; | ||
|  | 		y.imgSize = ySize; | ||
|  | 	} else { | ||
|  | 		x.size = xSize; | ||
|  | 		y.size = ySize; | ||
|  | 	} | ||
|  | 	changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); | ||
|  | 	if (useBox && y.size < y.imgSize) { | ||
|  | 		y.imgSize = y.size; | ||
|  | 		x.imgSize = y.size * ratio; | ||
|  | 	} | ||
|  | 	if (changed || useBox) { | ||
|  | 		x.pos = x.tpos - x.cb + x.tb; | ||
|  | 		x.minSize = x.size; | ||
|  | 		this.justify(x, true); | ||
|  | 	 | ||
|  | 		y.pos = y.tpos - y.cb + y.tb; | ||
|  | 		y.minSize = y.size; | ||
|  | 		this.justify(y, true); | ||
|  | 		if (this.overlayBox) this.sizeOverlayBox(); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	 | ||
|  | }, | ||
|  | fitOverlayBox : function(ratio, changed) { | ||
|  | 	var x = this.x, y = this.y; | ||
|  | 	if (this.overlayBox && (this.isImage || this.allowHeightReduction)) { | ||
|  | 		while (y.size > this.minHeight && x.size > this.minWidth  | ||
|  | 				&&  y.get('wsize') > y.get('fitsize')) { | ||
|  | 			y.size -= 10; | ||
|  | 			if (ratio) x.size = y.size * ratio; | ||
|  | 			this.sizeOverlayBox(0, 1); | ||
|  | 			changed = true; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return changed; | ||
|  | }, | ||
|  | 
 | ||
|  | show : function () { | ||
|  | 	var x = this.x, y = this.y; | ||
|  | 	this.doShowHide('hidden'); | ||
|  | 	 | ||
|  | 	// Apply size change
 | ||
|  | 	this.changeSize( | ||
|  | 		1, { | ||
|  | 			wrapper: { | ||
|  | 				width : x.get('wsize'), | ||
|  | 				height : y.get('wsize'), | ||
|  | 				left: x.pos, | ||
|  | 				top: y.pos | ||
|  | 			}, | ||
|  | 			content: { | ||
|  | 				left: x.p1 + x.get('imgPad'), | ||
|  | 				top: y.p1 + y.get('imgPad'), | ||
|  | 				width:x.imgSize ||x.size, | ||
|  | 				height:y.imgSize ||y.size | ||
|  | 			} | ||
|  | 		}, | ||
|  | 		hs.expandDuration | ||
|  | 	); | ||
|  | }, | ||
|  | 
 | ||
|  | changeSize : function(up, to, dur) { | ||
|  | 	 | ||
|  | 	if (this.outline && !this.outlineWhileAnimating) { | ||
|  | 		if (up) this.outline.setPosition(); | ||
|  | 		else this.outline.destroy( | ||
|  | 				(this.isHtml && this.preserveContent)); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	 | ||
|  | 	if (!up) this.destroyOverlays(); | ||
|  | 	 | ||
|  | 	var exp = this, | ||
|  | 		x = exp.x, | ||
|  | 		y = exp.y, | ||
|  | 		easing = this.easing; | ||
|  | 	if (!up) easing = this.easingClose || easing; | ||
|  | 	var after = up ? | ||
|  | 		function() { | ||
|  | 				 | ||
|  | 			if (exp.outline) exp.outline.table.style.visibility = "visible"; | ||
|  | 			setTimeout(function() { | ||
|  | 				exp.afterExpand(); | ||
|  | 			}, 50); | ||
|  | 		} : | ||
|  | 		function() { | ||
|  | 			exp.afterClose(); | ||
|  | 		}; | ||
|  | 	if (up) hs.setStyles( this.wrapper, { | ||
|  | 		width: x.t +'px', | ||
|  | 		height: y.t +'px' | ||
|  | 	}); | ||
|  | 	if (up && this.isHtml) { | ||
|  | 		hs.setStyles(this.wrapper, { | ||
|  | 			left: (x.tpos - x.cb + x.tb) +'px', | ||
|  | 			top: (y.tpos - y.cb + y.tb) +'px' | ||
|  | 		}); | ||
|  | 	} | ||
|  | 	if (this.fadeInOut) { | ||
|  | 		hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); | ||
|  | 		hs.extend(to.wrapper, { opacity: up }); | ||
|  | 	} | ||
|  | 	hs.animate( this.wrapper, to.wrapper, { | ||
|  | 		duration: dur, | ||
|  | 		easing: easing, | ||
|  | 		step: function(val, args) { | ||
|  | 			if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { | ||
|  | 				var fac = up ? args.pos : 1 - args.pos; | ||
|  | 				var pos = { | ||
|  | 					w: x.t + (x.get('wsize') - x.t) * fac, | ||
|  | 					h: y.t + (y.get('wsize') - y.t) * fac, | ||
|  | 					x: x.tpos + (x.pos - x.tpos) * fac, | ||
|  | 					y: y.tpos + (y.pos - y.tpos) * fac | ||
|  | 				}; | ||
|  | 				exp.outline.setPosition(pos, 0, 1);				 | ||
|  | 			} | ||
|  | 			if (exp.isHtml) {	 | ||
|  | 				if (args.prop == 'left')  | ||
|  | 					exp.mediumContent.style.left = (x.pos - val) +'px'; | ||
|  | 				if (args.prop == 'top')  | ||
|  | 					exp.mediumContent.style.top = (y.pos - val) +'px'; | ||
|  | 			} | ||
|  | 		} | ||
|  | 	}); | ||
|  | 	hs.animate( this.content, to.content, dur, easing, after); | ||
|  | 	if (up) { | ||
|  | 		this.wrapper.style.visibility = 'visible'; | ||
|  | 		this.content.style.visibility = 'visible'; | ||
|  | 		if (this.isHtml) this.innerContent.style.visibility = 'visible'; | ||
|  | 		this.a.className += ' highslide-active-anchor'; | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | afterExpand : function() { | ||
|  | 	this.isExpanded = true;	 | ||
|  | 	this.focus(); | ||
|  | 	 | ||
|  | 	if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent(); | ||
|  | 	if (this.iframe) { | ||
|  | 		try { | ||
|  | 			var exp = this, | ||
|  | 				doc = this.iframe.contentDocument || this.iframe.contentWindow.document; | ||
|  | 			hs.addEventListener(doc, 'mousedown', function () { | ||
|  | 				if (hs.focusKey != exp.key) exp.focus(); | ||
|  | 			}); | ||
|  | 		} catch(e) {} | ||
|  | 		if (hs.ie && typeof this.isClosing != 'boolean') // first open 
 | ||
|  | 			this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout
 | ||
|  | 	} | ||
|  | 	if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; | ||
|  | 	this.prepareNextOutline(); | ||
|  | 	var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; | ||
|  | 	this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') | ||
|  | 		&& this.y.pos < mY && mY < this.y.pos + this.y.get('wsize');	 | ||
|  | 	if (this.overlayBox) this.showOverlays(); | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | prepareNextOutline : function() { | ||
|  | 	var key = this.key; | ||
|  | 	var outlineType = this.outlineType; | ||
|  | 	new hs.Outline(outlineType,  | ||
|  | 		function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | preloadNext : function() { | ||
|  | 	var next = this.getAdjacentAnchor(1); | ||
|  | 	if (next && next.onclick.toString().match(/hs\.expand/))  | ||
|  | 		var img = hs.createElement('img', { src: hs.getSrc(next) }); | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | getAdjacentAnchor : function(op) { | ||
|  | 	var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; | ||
|  | 	return (as && as[current + op]) || null; | ||
|  | }, | ||
|  | 
 | ||
|  | getAnchorIndex : function() { | ||
|  | 	var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; | ||
|  | 	if (arr) for (var i = 0; i < arr.length; i++) { | ||
|  | 		if (arr[i] == this.a) return i;  | ||
|  | 	} | ||
|  | 	return null; | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | cancelLoading : function() { | ||
|  | 	hs.discardElement (this.wrapper); | ||
|  | 	hs.expanders[this.key] = null; | ||
|  | 	if (this.loading) hs.loading.style.left = '-9999px'; | ||
|  | }, | ||
|  | 
 | ||
|  | writeCredits : function () { | ||
|  | 	this.credits = hs.createElement('a', { | ||
|  | 		href: hs.creditsHref, | ||
|  | 		target: hs.creditsTarget, | ||
|  | 		className: 'highslide-credits', | ||
|  | 		innerHTML: hs.lang.creditsText, | ||
|  | 		title: hs.lang.creditsTitle | ||
|  | 	}); | ||
|  | 	this.createOverlay({  | ||
|  | 		overlayId: this.credits,  | ||
|  | 		position: this.creditsPosition || 'top left'  | ||
|  | 	}); | ||
|  | }, | ||
|  | 
 | ||
|  | getInline : function(types, addOverlay) { | ||
|  | 	for (var i = 0; i < types.length; i++) { | ||
|  | 		var type = types[i], s = null; | ||
|  | 		if (!this[type +'Id'] && this.thumbsUserSetId)   | ||
|  | 			this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; | ||
|  | 		if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); | ||
|  | 		if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { | ||
|  | 			s = eval(this[type +'Eval']); | ||
|  | 		} catch (e) {} | ||
|  | 		if (!this[type] && this[type +'Text']) { | ||
|  | 			s = this[type +'Text']; | ||
|  | 		} | ||
|  | 		if (!this[type] && !s) { | ||
|  | 			this[type] = hs.getNode(this.a['_'+ type + 'Id']); | ||
|  | 			if (!this[type]) { | ||
|  | 				var next = this.a.nextSibling; | ||
|  | 				while (next && !hs.isHsAnchor(next)) { | ||
|  | 					if ((new RegExp('highslide-'+ type)).test(next.className || null)) { | ||
|  | 						if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; | ||
|  | 						this[type] = hs.getNode(next.id); | ||
|  | 						break; | ||
|  | 					} | ||
|  | 					next = next.nextSibling; | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if (!this[type] && s) this[type] = hs.createElement('div',  | ||
|  | 				{ className: 'highslide-'+ type, innerHTML: s } ); | ||
|  | 		 | ||
|  | 		if (addOverlay && this[type]) { | ||
|  | 			var o = { position: (type == 'heading') ? 'above' : 'below' }; | ||
|  | 			for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; | ||
|  | 			o.overlayId = this[type]; | ||
|  | 			this.createOverlay(o); | ||
|  | 		} | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | // on end move and resize
 | ||
|  | doShowHide : function(visibility) { | ||
|  | 	if (hs.hideSelects) this.showHideElements('SELECT', visibility); | ||
|  | 	if (hs.hideIframes) this.showHideElements('IFRAME', visibility); | ||
|  | 	if (hs.geckoMac) this.showHideElements('*', visibility); | ||
|  | }, | ||
|  | showHideElements : function (tagName, visibility) { | ||
|  | 	var els = document.getElementsByTagName(tagName); | ||
|  | 	var prop = tagName == '*' ? 'overflow' : 'visibility'; | ||
|  | 	for (var i = 0; i < els.length; i++) { | ||
|  | 		if (prop == 'visibility' || (document.defaultView.getComputedStyle( | ||
|  | 				els[i], "").getPropertyValue('overflow') == 'auto' | ||
|  | 				|| els[i].getAttribute('hidden-by') != null)) { | ||
|  | 			var hiddenBy = els[i].getAttribute('hidden-by'); | ||
|  | 			if (visibility == 'visible' && hiddenBy) { | ||
|  | 				hiddenBy = hiddenBy.replace('['+ this.key +']', ''); | ||
|  | 				els[i].setAttribute('hidden-by', hiddenBy); | ||
|  | 				if (!hiddenBy) els[i].style[prop] = els[i].origProp; | ||
|  | 			} else if (visibility == 'hidden') { // hide if behind
 | ||
|  | 				var elPos = hs.getPosition(els[i]); | ||
|  | 				elPos.w = els[i].offsetWidth; | ||
|  | 				elPos.h = els[i].offsetHeight; | ||
|  | 			 | ||
|  | 				 | ||
|  | 					var clearsX = (elPos.x + elPos.w < this.x.get('opos')  | ||
|  | 						|| elPos.x > this.x.get('opos') + this.x.get('osize')); | ||
|  | 					var clearsY = (elPos.y + elPos.h < this.y.get('opos')  | ||
|  | 						|| elPos.y > this.y.get('opos') + this.y.get('osize')); | ||
|  | 				var wrapperKey = hs.getWrapperKey(els[i]); | ||
|  | 				if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image
 | ||
|  | 					if (!hiddenBy) { | ||
|  | 						els[i].setAttribute('hidden-by', '['+ this.key +']'); | ||
|  | 						els[i].origProp = els[i].style[prop]; | ||
|  | 						els[i].style[prop] = 'hidden'; | ||
|  | 						 | ||
|  | 					} else if (hiddenBy.indexOf('['+ this.key +']') == -1) { | ||
|  | 						els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); | ||
|  | 					} | ||
|  | 				} else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) | ||
|  | 						&& wrapperKey != this.key) { // on move
 | ||
|  | 					els[i].setAttribute('hidden-by', ''); | ||
|  | 					els[i].style[prop] = els[i].origProp || ''; | ||
|  | 				} else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { | ||
|  | 					els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); | ||
|  | 				} | ||
|  | 						 | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | focus : function() { | ||
|  | 	this.wrapper.style.zIndex = hs.zIndexCounter += 2; | ||
|  | 	// blur others
 | ||
|  | 	for (var i = 0; i < hs.expanders.length; i++) { | ||
|  | 		if (hs.expanders[i] && i == hs.focusKey) { | ||
|  | 			var blurExp = hs.expanders[i]; | ||
|  | 			blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; | ||
|  | 			if (blurExp.isImage) { | ||
|  | 				blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; | ||
|  | 				blurExp.content.title = hs.lang.focusTitle;	 | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	 | ||
|  | 	// focus this
 | ||
|  | 	if (this.outline) this.outline.table.style.zIndex  | ||
|  | 		= this.wrapper.style.zIndex - 1; | ||
|  | 	this.content.className = 'highslide-'+ this.contentType; | ||
|  | 	if (this.isImage) { | ||
|  | 		this.content.title = hs.lang.restoreTitle; | ||
|  | 		 | ||
|  | 		if (hs.restoreCursor) { | ||
|  | 			hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; | ||
|  | 			if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; | ||
|  | 			this.content.style.cursor = hs.styleRestoreCursor; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	hs.focusKey = this.key;	 | ||
|  | 	hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);	 | ||
|  | }, | ||
|  | moveTo: function(x, y) { | ||
|  | 	this.x.setPos(x); | ||
|  | 	this.y.setPos(y); | ||
|  | }, | ||
|  | resize : function (e) { | ||
|  | 	var w, h, r = e.width / e.height; | ||
|  | 	w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); | ||
|  | 	if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; | ||
|  | 	h = this.isHtml ? e.height + e.dY : w / r; | ||
|  | 	if (h < Math.min(this.minHeight, this.y.full)) { | ||
|  | 		h = Math.min(this.minHeight, this.y.full); | ||
|  | 		if (this.isImage) w = h * r; | ||
|  | 	} | ||
|  | 	this.resizeTo(w, h); | ||
|  | }, | ||
|  | resizeTo: function(w, h) { | ||
|  | 	this.y.setSize(h); | ||
|  | 	this.x.setSize(w); | ||
|  | 	this.wrapper.style.height = this.y.get('wsize') +'px'; | ||
|  | }, | ||
|  | 
 | ||
|  | close : function() { | ||
|  | 	if (this.isClosing || !this.isExpanded) return; | ||
|  | 	this.isClosing = true; | ||
|  | 	 | ||
|  | 	hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); | ||
|  | 	 | ||
|  | 	try { | ||
|  | 		if (this.isHtml) this.htmlPrepareClose(); | ||
|  | 		this.content.style.cursor = 'default'; | ||
|  | 		this.changeSize( | ||
|  | 			0, { | ||
|  | 				wrapper: { | ||
|  | 					width : this.x.t, | ||
|  | 					height : this.y.t, | ||
|  | 					left: this.x.tpos - this.x.cb + this.x.tb, | ||
|  | 					top: this.y.tpos - this.y.cb + this.y.tb | ||
|  | 				}, | ||
|  | 				content: { | ||
|  | 					left: 0, | ||
|  | 					top: 0, | ||
|  | 					width: this.x.t, | ||
|  | 					height: this.y.t | ||
|  | 				} | ||
|  | 			}, hs.restoreDuration | ||
|  | 		); | ||
|  | 	} catch (e) { this.afterClose(); } | ||
|  | }, | ||
|  | 
 | ||
|  | htmlPrepareClose : function() { | ||
|  | 	if (hs.geckoMac) { // bad redraws
 | ||
|  | 		if (!hs.mask) hs.mask = hs.createElement('div', null,  | ||
|  | 			{ position: 'absolute' }, hs.container); | ||
|  | 		hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px',  | ||
|  | 			left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' });			 | ||
|  | 	} | ||
|  | 	if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {} | ||
|  | 	 | ||
|  | 	if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject();		 | ||
|  | 	if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent)  | ||
|  | 		this.scrollerDiv.style.overflow = 'hidden'; | ||
|  | }, | ||
|  | 
 | ||
|  | destroyObject : function () { | ||
|  | 	if (hs.ie && this.iframe) | ||
|  | 		try { this.iframe.contentWindow.document.body.innerHTML = ''; } catch (e) {} | ||
|  | 	if (this.objectType == 'swf') swfobject.removeSWF(this.body.id); | ||
|  | 	this.body.innerHTML = ''; | ||
|  | }, | ||
|  | 
 | ||
|  | sleep : function() { | ||
|  | 	if (this.outline) this.outline.table.style.display = 'none'; | ||
|  | 	this.releaseMask = null; | ||
|  | 	this.wrapper.style.display = 'none'; | ||
|  | 	this.isExpanded = false; | ||
|  | 	hs.push(hs.sleeping, this); | ||
|  | }, | ||
|  | 
 | ||
|  | awake : function() {try { | ||
|  | 	 | ||
|  | 	hs.expanders[this.key] = this; | ||
|  | 	 | ||
|  | 	if (!hs.allowMultipleInstances &&hs.focusKey != this.key) {	 | ||
|  | 		try { hs.expanders[hs.focusKey].close(); } catch (e){} | ||
|  | 	} | ||
|  | 	 | ||
|  | 	var z = hs.zIndexCounter++, stl = { display: '', zIndex: z }; | ||
|  | 	hs.setStyles (this.wrapper, stl); | ||
|  | 	this.isClosing = false; | ||
|  | 	 | ||
|  | 	var o = this.outline || 0; | ||
|  | 	if (o) { | ||
|  | 		if (!this.outlineWhileAnimating) stl.visibility = 'hidden'; | ||
|  | 		hs.setStyles (o.table, stl);		 | ||
|  | 	} | ||
|  | 		 | ||
|  | 	this.show(); | ||
|  | } catch (e) {} | ||
|  | 
 | ||
|  | 
 | ||
|  | }, | ||
|  | 
 | ||
|  | createOverlay : function (o) { | ||
|  | 	var el = o.overlayId; | ||
|  | 	if (typeof el == 'string') el = hs.getNode(el); | ||
|  | 	if (o.html) el = hs.createElement('div', { innerHTML: o.html }); | ||
|  | 	if (!el || typeof el == 'string') return; | ||
|  | 	el.style.display = 'block'; | ||
|  | 	this.genOverlayBox(); | ||
|  | 	var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; | ||
|  | 	if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; | ||
|  | 	var overlay = hs.createElement( | ||
|  | 		'div', { | ||
|  | 			id: 'hsId'+ hs.idCounter++, | ||
|  | 			hsId: o.hsId | ||
|  | 		}, { | ||
|  | 			position: 'absolute', | ||
|  | 			visibility: 'hidden', | ||
|  | 			width: width, | ||
|  | 			direction: hs.lang.cssDirection || '', | ||
|  | 			opacity: 0 | ||
|  | 		},this.overlayBox, | ||
|  | 		true | ||
|  | 	); | ||
|  | 	 | ||
|  | 	overlay.appendChild(el); | ||
|  | 	hs.extend(overlay, { | ||
|  | 		opacity: 1, | ||
|  | 		offsetX: 0, | ||
|  | 		offsetY: 0, | ||
|  | 		dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 | ||
|  | 	}); | ||
|  | 	hs.extend(overlay, o); | ||
|  | 	 | ||
|  | 		 | ||
|  | 	if (this.gotOverlays) { | ||
|  | 		this.positionOverlay(overlay); | ||
|  | 		if (!overlay.hideOnMouseOut || this.mouseIsOver)  | ||
|  | 			hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); | ||
|  | 	} | ||
|  | 	hs.push(this.overlays, hs.idCounter - 1); | ||
|  | }, | ||
|  | positionOverlay : function(overlay) { | ||
|  | 	var p = overlay.position || 'middle center', | ||
|  | 		offX = overlay.offsetX, | ||
|  | 		offY = overlay.offsetY; | ||
|  | 	if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); | ||
|  | 	if (/left$/.test(p)) overlay.style.left = offX +'px';  | ||
|  | 	 | ||
|  | 	if (/center$/.test(p))	hs.setStyles (overlay, {  | ||
|  | 		left: '50%', | ||
|  | 		marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' | ||
|  | 	});	 | ||
|  | 	 | ||
|  | 	if (/right$/.test(p)) overlay.style.right = - offX +'px'; | ||
|  | 		 | ||
|  | 	if (/^leftpanel$/.test(p)) {  | ||
|  | 		hs.setStyles(overlay, { | ||
|  | 			right: '100%', | ||
|  | 			marginRight: this.x.cb +'px', | ||
|  | 			top: - this.y.cb +'px', | ||
|  | 			bottom: - this.y.cb +'px', | ||
|  | 			overflow: 'auto' | ||
|  | 		});		  | ||
|  | 		this.x.p1 = overlay.offsetWidth; | ||
|  | 	 | ||
|  | 	} else if (/^rightpanel$/.test(p)) { | ||
|  | 		hs.setStyles(overlay, { | ||
|  | 			left: '100%', | ||
|  | 			marginLeft: this.x.cb +'px', | ||
|  | 			top: - this.y.cb +'px', | ||
|  | 			bottom: - this.y.cb +'px', | ||
|  | 			overflow: 'auto' | ||
|  | 		}); | ||
|  | 		this.x.p2 = overlay.offsetWidth; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (/^top/.test(p)) overlay.style.top = offY +'px';  | ||
|  | 	if (/^middle/.test(p))	hs.setStyles (overlay, {  | ||
|  | 		top: '50%',  | ||
|  | 		marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' | ||
|  | 	});	 | ||
|  | 	if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; | ||
|  | 	if (/^above$/.test(p)) { | ||
|  | 		hs.setStyles(overlay, { | ||
|  | 			left: (- this.x.p1 - this.x.cb) +'px', | ||
|  | 			right: (- this.x.p2 - this.x.cb) +'px', | ||
|  | 			bottom: '100%', | ||
|  | 			marginBottom: this.y.cb +'px', | ||
|  | 			width: 'auto' | ||
|  | 		}); | ||
|  | 		this.y.p1 = overlay.offsetHeight; | ||
|  | 	 | ||
|  | 	} else if (/^below$/.test(p)) { | ||
|  | 		hs.setStyles(overlay, { | ||
|  | 			position: 'relative', | ||
|  | 			left: (- this.x.p1 - this.x.cb) +'px', | ||
|  | 			right: (- this.x.p2 - this.x.cb) +'px', | ||
|  | 			top: '100%', | ||
|  | 			marginTop: this.y.cb +'px', | ||
|  | 			width: 'auto' | ||
|  | 		}); | ||
|  | 		this.y.p2 = overlay.offsetHeight; | ||
|  | 		overlay.style.position = 'absolute'; | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | getOverlays : function() {	 | ||
|  | 	this.getInline(['heading', 'caption'], true); | ||
|  | 	if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; | ||
|  | 	if (hs.showCredits) this.writeCredits(); | ||
|  | 	for (var i = 0; i < hs.overlays.length; i++) { | ||
|  | 		var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; | ||
|  | 		if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) | ||
|  | 				|| (sg && sg === this.slideshowGroup)) { | ||
|  | 			if (this.isImage || (this.isHtml && o.useOnHtml)) | ||
|  | 			this.createOverlay(o); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	var os = []; | ||
|  | 	for (var i = 0; i < this.overlays.length; i++) { | ||
|  | 		var o = hs.$('hsId'+ this.overlays[i]); | ||
|  | 		if (/panel$/.test(o.position)) this.positionOverlay(o); | ||
|  | 		else hs.push(os, o); | ||
|  | 	} | ||
|  | 	for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); | ||
|  | 	this.gotOverlays = true; | ||
|  | }, | ||
|  | genOverlayBox : function() { | ||
|  | 	if (!this.overlayBox) this.overlayBox = hs.createElement ( | ||
|  | 		'div', { | ||
|  | 			className: this.wrapperClassName | ||
|  | 		}, { | ||
|  | 			position : 'absolute', | ||
|  | 			width: (this.x.size || (this.useBox ? this.width : null)  | ||
|  | 				|| this.x.full) +'px', | ||
|  | 			height: (this.y.size || this.y.full) +'px', | ||
|  | 			visibility : 'hidden', | ||
|  | 			overflow : 'hidden', | ||
|  | 			zIndex : hs.ie ? 4 : 'auto' | ||
|  | 		}, | ||
|  | 		hs.container, | ||
|  | 		true | ||
|  | 	); | ||
|  | }, | ||
|  | sizeOverlayBox : function(doWrapper, doPanels) { | ||
|  | 	var overlayBox = this.overlayBox,  | ||
|  | 		x = this.x, | ||
|  | 		y = this.y; | ||
|  | 	hs.setStyles( overlayBox, { | ||
|  | 		width: x.size +'px',  | ||
|  | 		height: y.size +'px' | ||
|  | 	}); | ||
|  | 	if (doWrapper || doPanels) { | ||
|  | 		for (var i = 0; i < this.overlays.length; i++) { | ||
|  | 			var o = hs.$('hsId'+ this.overlays[i]); | ||
|  | 			var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); | ||
|  | 			if (o && /^(above|below)$/.test(o.position)) { | ||
|  | 				if (ie6) { | ||
|  | 					o.style.width = (overlayBox.offsetWidth + 2 * x.cb | ||
|  | 						+ x.p1 + x.p2) +'px'; | ||
|  | 				} | ||
|  | 				y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; | ||
|  | 			} | ||
|  | 			if (o && ie6 && /^(left|right)panel$/.test(o.position)) { | ||
|  | 				o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	if (doWrapper) { | ||
|  | 		hs.setStyles(this.content, { | ||
|  | 			top: y.p1 +'px' | ||
|  | 		}); | ||
|  | 		hs.setStyles(overlayBox, { | ||
|  | 			top: (y.p1 + y.cb) +'px' | ||
|  | 		}); | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | showOverlays : function() { | ||
|  | 	var b = this.overlayBox; | ||
|  | 	b.className = ''; | ||
|  | 	hs.setStyles(b, { | ||
|  | 		top: (this.y.p1 + this.y.cb) +'px', | ||
|  | 		left: (this.x.p1 + this.x.cb) +'px', | ||
|  | 		overflow : 'visible' | ||
|  | 	}); | ||
|  | 	if (hs.safari) b.style.visibility = 'visible'; | ||
|  | 	this.wrapper.appendChild (b); | ||
|  | 	for (var i = 0; i < this.overlays.length; i++) { | ||
|  | 		var o = hs.$('hsId'+ this.overlays[i]); | ||
|  | 		o.style.zIndex = o.zIndex || 4; | ||
|  | 		if (!o.hideOnMouseOut || this.mouseIsOver) { | ||
|  | 			o.style.visibility = 'visible'; | ||
|  | 			hs.setStyles(o, { visibility: 'visible', display: '' }); | ||
|  | 			hs.animate(o, { opacity: o.opacity }, o.dur); | ||
|  | 		} | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | destroyOverlays : function() { | ||
|  | 	if (!this.overlays.length) return; | ||
|  | 	if (this.isHtml && this.preserveContent) { | ||
|  | 		this.overlayBox.style.top = '-9999px'; | ||
|  | 		hs.container.appendChild(this.overlayBox); | ||
|  | 	} else | ||
|  | 	hs.discardElement(this.overlayBox); | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | createFullExpand : function () { | ||
|  | 	this.fullExpandLabel = hs.createElement( | ||
|  | 		'a', { | ||
|  | 			href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', | ||
|  | 			title: hs.lang.fullExpandTitle, | ||
|  | 			className: 'highslide-full-expand' | ||
|  | 		} | ||
|  | 	); | ||
|  | 	 | ||
|  | 	this.createOverlay({  | ||
|  | 		overlayId: this.fullExpandLabel,  | ||
|  | 		position: hs.fullExpandPosition,  | ||
|  | 		hideOnMouseOut: true,  | ||
|  | 		opacity: hs.fullExpandOpacity | ||
|  | 	}); | ||
|  | }, | ||
|  | 
 | ||
|  | doFullExpand : function () { | ||
|  | 	try { | ||
|  | 		if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); | ||
|  | 		 | ||
|  | 		this.focus(); | ||
|  | 		var xSize = this.x.size, | ||
|  |         	ySize = this.y.size; | ||
|  |         this.resizeTo(this.x.full, this.y.full); | ||
|  |         | ||
|  |         var xpos = this.x.pos - (this.x.size - xSize) / 2; | ||
|  |         if (xpos < hs.marginLeft) xpos = hs.marginLeft; | ||
|  |         | ||
|  |         var ypos = this.y.pos - (this.y.size - ySize) / 2; | ||
|  |         if (ypos < hs.marginTop) ypos = hs.marginTop; | ||
|  |         | ||
|  |         this.moveTo(xpos, ypos); | ||
|  | 		this.doShowHide('hidden'); | ||
|  | 	 | ||
|  | 	} catch (e) { | ||
|  | 		this.error(e); | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | 
 | ||
|  | afterClose : function () { | ||
|  | 	this.a.className = this.a.className.replace('highslide-active-anchor', ''); | ||
|  | 	 | ||
|  | 	this.doShowHide('visible');	 | ||
|  | 	 | ||
|  | 	if (this.isHtml && this.preserveContent) { | ||
|  | 		this.sleep(); | ||
|  | 	} else { | ||
|  | 		if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); | ||
|  | 	 | ||
|  | 		hs.discardElement(this.wrapper); | ||
|  | 	} | ||
|  | 	if (hs.mask) hs.mask.style.display = 'none'; | ||
|  | 	 | ||
|  | 	hs.expanders[this.key] = null;		 | ||
|  | 	hs.reOrder(); | ||
|  | } | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | // hs.Ajax object prototype
 | ||
|  | hs.Ajax = function (a, content, pre) { | ||
|  | 	this.a = a; | ||
|  | 	this.content = content; | ||
|  | 	this.pre = pre; | ||
|  | }; | ||
|  | 
 | ||
|  | hs.Ajax.prototype = { | ||
|  | run : function () { | ||
|  | 	var xhr; | ||
|  | 	if (!this.src) this.src = hs.getSrc(this.a); | ||
|  | 	if (this.src.match('#')) { | ||
|  | 		var arr = this.src.split('#'); | ||
|  | 		this.src = arr[0]; | ||
|  | 		this.id = arr[1]; | ||
|  | 	} | ||
|  | 	if (hs.cachedGets[this.src]) { | ||
|  | 		this.cachedGet = hs.cachedGets[this.src]; | ||
|  | 		if (this.id) this.getElementContent(); | ||
|  | 		else this.loadHTML(); | ||
|  | 		return; | ||
|  | 	} | ||
|  | 	try { xhr = new XMLHttpRequest(); } | ||
|  | 	catch (e) { | ||
|  | 		try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } | ||
|  | 		catch (e) { | ||
|  | 			try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } | ||
|  | 			catch (e) { this.onError(); } | ||
|  | 		} | ||
|  | 	} | ||
|  | 	var pThis = this;  | ||
|  | 	xhr.onreadystatechange = function() { | ||
|  | 		if(pThis.xhr.readyState == 4) { | ||
|  | 			if (pThis.id) pThis.getElementContent(); | ||
|  | 			else pThis.loadHTML(); | ||
|  | 		} | ||
|  | 	}; | ||
|  | 	var src = this.src; | ||
|  | 	this.xhr = xhr; | ||
|  | 	if (hs.forceAjaxReload)  | ||
|  | 		src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime()); | ||
|  | 	xhr.open('GET', src, true); | ||
|  | 	xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); | ||
|  | 	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | ||
|  | 	xhr.send(null); | ||
|  | }, | ||
|  | 
 | ||
|  | getElementContent : function() { | ||
|  | 	hs.init(); | ||
|  | 	var attribs = window.opera || hs.ie6SSL ? { src: 'about:blank' } : null; | ||
|  | 	 | ||
|  | 	this.iframe = hs.createElement('iframe', attribs,  | ||
|  | 		{ position: 'absolute', top: '-9999px' }, hs.container); | ||
|  | 		 | ||
|  | 	this.loadHTML(); | ||
|  | }, | ||
|  | 
 | ||
|  | loadHTML : function() { | ||
|  | 	var s = this.cachedGet || this.xhr.responseText, | ||
|  | 		regBody; | ||
|  | 	if (this.pre) hs.cachedGets[this.src] = s; | ||
|  | 	if (!hs.ie || hs.uaVersion >= 5.5) { | ||
|  | 		s = s.replace(new RegExp('<link[^>]*>', 'gi'), '') | ||
|  | 			.replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), ''); | ||
|  | 		if (this.iframe) { | ||
|  | 			var doc = this.iframe.contentDocument; | ||
|  | 			if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document; | ||
|  | 			if (!doc) { // Opera
 | ||
|  | 				var pThis = this; | ||
|  | 				setTimeout(function() {	pThis.loadHTML(); }, 25); | ||
|  | 				return; | ||
|  | 			} | ||
|  | 			doc.open(); | ||
|  | 			doc.write(s); | ||
|  | 			doc.close(); | ||
|  | 			try { s = doc.getElementById(this.id).innerHTML; } catch (e) { | ||
|  | 				try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera
 | ||
|  | 			} | ||
|  | 			hs.discardElement(this.iframe); | ||
|  | 		} else { | ||
|  | 			regBody = /(<body[^>]*>|<\/body>)/ig; | ||
|  | 			if (regBody.test(s)) s = s.split(regBody)[hs.ieLt9 ? 1 : 2]; | ||
|  | 			 | ||
|  | 		} | ||
|  | 	} | ||
|  | 	hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s; | ||
|  | 	this.onLoad(); | ||
|  | 	for (var x in this) this[x] = null; | ||
|  | } | ||
|  | }; | ||
|  | hs.langDefaults = hs.lang; | ||
|  | // history
 | ||
|  | var HsExpander = hs.Expander; | ||
|  | if (hs.ie && window == window.top) { | ||
|  | 	(function () { | ||
|  | 		try { | ||
|  | 			document.documentElement.doScroll('left'); | ||
|  | 		} catch (e) { | ||
|  | 			setTimeout(arguments.callee, 50); | ||
|  | 			return; | ||
|  | 		} | ||
|  | 		hs.ready(); | ||
|  | 	})(); | ||
|  | } | ||
|  | hs.addEventListener(document, 'DOMContentLoaded', hs.ready); | ||
|  | hs.addEventListener(window, 'load', hs.ready); | ||
|  | 
 | ||
|  | // set handlers
 | ||
|  | hs.addEventListener(document, 'ready', function() { | ||
|  | 	if (hs.expandCursor) { | ||
|  | 		var style = hs.createElement('style', { type: 'text/css' }, null,  | ||
|  | 			document.getElementsByTagName('HEAD')[0]),  | ||
|  | 			backCompat = document.compatMode == 'BackCompat'; | ||
|  | 			 | ||
|  | 		 | ||
|  | 		function addRule(sel, dec) { | ||
|  | 			if (hs.ie && (hs.uaVersion < 9 || backCompat)) { | ||
|  | 				var last = document.styleSheets[document.styleSheets.length - 1]; | ||
|  | 				if (typeof(last.addRule) == "object") last.addRule(sel, dec); | ||
|  | 			} else { | ||
|  | 				style.appendChild(document.createTextNode(sel + " {" + dec + "}")); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		function fix(prop) { | ||
|  | 			return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + | ||
|  | 				' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; | ||
|  | 		} | ||
|  | 		if (hs.expandCursor) addRule ('.highslide img',  | ||
|  | 			'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); | ||
|  | 	} | ||
|  | }); | ||
|  | hs.addEventListener(window, 'resize', function() { | ||
|  | 	hs.getPageSize(); | ||
|  | }); | ||
|  | hs.addEventListener(document, 'mousemove', function(e) { | ||
|  | 	hs.mouse = { x: e.clientX, y: e.clientY	}; | ||
|  | }); | ||
|  | hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); | ||
|  | hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); | ||
|  | 
 | ||
|  | hs.addEventListener(document, 'ready', hs.getAnchors); | ||
|  | hs.addEventListener(window, 'load', hs.preloadImages); | ||
|  | hs.addEventListener(window, 'load', hs.preloadAjax); | ||
|  | } |