/***************************************************************************
* Floatbox v3.51
* April 25, 2009
*
* Copyright (c) 2008-2009 Byron McGregor
* Website: http://randomous.com/floatbox
* License: Attribution-Noncommercial-No Derivative Works 3.0 Unported
*          http://creativecommons.org/licenses/by-nc-nd/3.0/
* Use on any commercial site requires purchase and registration.
* See http://randomous.com/floatbox/license for details.
* This comment block must be retained in all deployments and distributions.
***************************************************************************/

function Floatbox() {
this.defaultOptions = {

/***** BEGIN OPTIONS CONFIGURATION *****/
// See docs/options.html for detailed descriptions.
// All options can be overridden with rev/data-fb-options tag or page options (see docs/instructions.html).

/*** <General Options> ***/
theme:            'auto'    ,// 'auto'|'black'|'white'|'blue'|'yellow'|'red'|'custom'
padding:           24       ,// pixels
panelPadding:      8        ,// pixels
overlayOpacity:    55       ,// 0-100
shadowType:       'drop'    ,// 'drop'|'halo'|'none'
shadowSize:        12       ,// 8|12|16|24
roundCorners:     'all'     ,// 'all'|'top'|'none'
cornerRadius:      12       ,// 8|12|20
roundBorder:       1        ,// 0|1
outerBorder:       4        ,// pixels
innerBorder:       1        ,// pixels
autoFitImages:     true     ,// true|false
resizeImages:      true     ,// true|false
autoFitOther:      false    ,// true|false
resizeOther:       false    ,// true|false
resizeTool:       'cursor'  ,// 'cursor'|'topleft'|'both'
infoPos:          'tl'      ,// 'tl'|'tc'|'tr'|'bl'|'bc'|'br'
controlPos:       'tr'      ,// 'tl'|'tr'|'bl'|'br'
centerNav:         false    ,// true|false
boxLeft:          'auto'    ,// 'auto'|pixels|'[-]xx%'
boxTop:           'auto'    ,// 'auto'|pixels|'[-]xx%'
enableDragMove:    true     ,// true|false
stickyDragMove:    true     ,// true|false
enableDragResize:  true     ,// true|false
stickyDragResize:  true     ,// true|false
draggerLocation:  'frame'   ,// 'frame'|'content'
minContentWidth:   140      ,// pixels
minContentHeight:  100      ,// pixels
centerOnResize:    true     ,// true|false
showCaption:       true     ,// true|false
showItemNumber:    true     ,// true|false
showClose:         true     ,// true|false
hideFlash:         true     ,// true|false
hideJava:          true     ,// true|false
disableScroll:     false    ,// true|false
randomOrder:       false    ,// true|false
preloadAll:        true     ,// true|false
autoGallery:       false    ,// true|false
autoTitle:         ''       ,// common caption string to use with autoGallery
printCSS:          ''       ,// path to css file or inline css string to apply to print pages (see showPrint)
language:          'auto'   ,// 'auto'|'en'|... (see the languages folder)
graphicsType:      'auto'   ,// 'auto'|'international'|'english'
/*** </General Options> ***/

/*** <Animation Options> ***/
doAnimations:         true   ,// true|false
resizeDuration:       1.0    ,// 0-10
imageFadeDuration:    1.0    ,// 0-10
overlayFadeDuration:  1.0    ,// 0-10
startAtClick:         true   ,// true|false
zoomImageStart:       true   ,// true|false
liveImageResize:      true   ,// true|false
splitResize:          'auto' ,// 'no'|'auto'|'wh'|'hw'
/*** </Animation Options> ***/

/*** <Navigation Options> ***/
navType:            'both'    ,// 'overlay'|'button'|'both'|'none'
navOverlayWidth:     35       ,// 0-50
navOverlayPos:       30       ,// 0-100
showNavOverlay:     'never'   ,// 'always'|'once'|'never'
showHints:          'once'    ,// 'always'|'once'|'never'
enableWrap:          true     ,// true|false
enableKeyboardNav:   true     ,// true|false
outsideClickCloses:  true     ,// true|false
imageClickCloses:    false    ,// true|false
numIndexLinks:       0        ,// number, -1 = no limit
indexLinksPanel:     'control',// 'info'|'control'
showIndexThumbs:     true     ,// true|false
/*** </Navigation Options> ***/

/*** <Slideshow Options> ***/
doSlideshow:    false  ,// true|false
slideInterval:  4.5    ,// seconds
endTask:        'loop' ,// 'stop'|'exit'|'loop'
showPlayPause:  true   ,// true|false
startPaused:    false  ,// true|false
pauseOnResize:  true   ,// true|false
pauseOnPrev:    true   ,// true|false
pauseOnNext:    false   // true|false
/*** </Slideshow Options> ***/
};

/*** <New Child Window Options> ***/
// Will inherit from the primary floatbox options unless overridden here.
// Add any you like.
this.childOptions = {
padding:             16,
overlayOpacity:      45,
resizeDuration:       3,
imageFadeDuration:    3,
overlayFadeDuration:  0
};
/*** </New Child Window Options> ***/

/*** <Custom Paths> ***/
// Normally leave these blank.
// Floatbox will auto-find folders based on the location of floatbox.js and background-images.
// If you have a custom odd-ball configuration, fill in the details here.
// (Trailing slashes please)
this.customPaths = {
	jsModules: ''   ,// default: <floatbox.js>/modules/
	cssModules: ''  ,// default: <floatbox.js>/modules/
	languages: ''   ,// default: <floatbox.js>/languages/
	graphics: ''     // default: background-image:url(<parsed folder>);
};
/*** </Custom Paths> ***/

/***** END OPTIONS CONFIGURATION *****/
this.init();
}
Floatbox.prototype = {
	magicClass: 'floatbox',
	panelGap: 20,
	infoLinkGap: 16,
	draggerSize: 12,
	controlOpacity: 60,
	showHintsTime: 1600,
	zoomPopBorder: 1,
	controlSpacing: 8,
	minInfoWidth: 80,
	minIndexWidth: 120,
	ctrlJump: 5,
	slowLoadDelay: 750,
	autoFitSpace: 5,
	maxInitialSize: 120,
	minInitialSize: 70,
	defaultWidth: '85%',
	defaultHeight: '82%',
init: function() {
	var t = this;
	t.doc = document;
	t.docEl = t.doc.documentElement;
	t.head = t.doc.getElementsByTagName('head')[0];
	t.bod = t.doc.getElementsByTagName('body')[0];
	t.getGlobalOptions();
	t.currentSet = [];
	t.nodes = [];
	t.hiddenEls = [];
	t.timeouts = {};
	t.pos = {};
	var agent = navigator.userAgent,
		version = navigator.appVersion;
	t.mac = version.indexOf('Macintosh') !== -1;
	if (window.opera) {
		t.opera = true;
		t.operaOld = parseFloat(version) < 9.5;
	} else if (document.all) {
		t.ie = true;
		t.ieOld = parseInt(version.substr(version.indexOf('MSIE') + 5), 10) < 7;
		t.ieXP = parseInt(version.substr(version.indexOf('Windows NT') + 11), 10) < 6;
	} else if (agent.indexOf('Firefox') !== -1) {
		t.ff = true;
		t.ffOld = parseInt(agent.substr(agent.indexOf('Firefox') + 8), 10) < 3;
		t.ffNew = !t.ffOld;
		t.ffMac = t.mac;
	} else if (version.indexOf('WebKit') !== -1) {
		t.webkit = true;
		t.webkitMac = t.mac;
	} else if (agent.indexOf('SeaMonkey') !== -1) {
		t.seaMonkey = true;
	}
	t.browserLanguage = (navigator.language || navigator.userLanguage ||
		navigator.systemLanguage || navigator.browserLanguage || 'en').substring(0, 2);
	t.isChild = !!self.fb;
	if (!t.isChild) {
  		t.parent = t.lastChild = t;
		t.anchors = [];
		t.children = [];
		t.popups = [];
		t.preloads = {};
		var test1 = function(value) { return value; },
			test2 = function(value) { return value && t.doAnimations; },
			test3 = function(value) { return test2(value) && t.resizeDuration; };
		t.modules = {
			enableKeyboardNav: { files: ['keydownHandler.js'], test: test1 },
			enableDragMove: { files: ['mousedownHandler.js'], test: test1 },
			enableDragResize: { files: ['mousedownHandler.js'], test: test1 },
			centerOnResize: { files: ['resizeHandler.js'], test: test1 },
			showPrint: { files: ['printContents.js'], test: test1 },
			imageFadeDuration: { files: ['setOpacity.js'], test: test2 },
			overlayFadeDuration: { files: ['setOpacity.js'], test: test2 },
			resizeDuration: { files: ['setSize.js'], test: test2 },
			startAtClick: { files: ['getLeftTop.js'], test: test3 },
			zoomImageStart: { files: ['getLeftTop.js', 'zoomInOut.js'], test: test3 },
			loaded: {}
		};
		t.jsModulesPath = t.customPaths.jsModules;
		t.cssModulesPath = t.customPaths.cssModules;
		t.languagesPath = t.customPaths.languages;
		if (!(t.jsModulesPath && t.cssModulesPath && t.languagesPath)) {
			var fbPath = t.getPath('script', 'src', /(.*)f(?:loat|rame)box.js(?:\?|$)/i) || '/floatbox/';
			if (!t.jsModulesPath) t.jsModulesPath = fbPath + 'modules/';
			if (!t.cssModulesPath) t.cssModulesPath = fbPath + 'modules/';
			if (!t.languagesPath) t.languagesPath = fbPath + 'languages/';
		}
		t.graphicsPath = t.customPaths.graphics;
		if (!t.graphicsPath) {
			var match,
				node = t.doc.createElement('div');
			node.id = 'fbPathChecker';
			t.bod.appendChild(node);
			if ((match = /(?:url\()?["']?(.*)blank.gif["']?\)?$/i.exec(t.getStyle(node, 'background-image')))) {
				t.graphicsPath = match[1];
			}
			t.bod.removeChild(node);
			delete node;
			if (!t.graphicsPath) t.graphicsPath = (t.getPath('link', 'href', /(.*)floatbox.css(?:\?|$)/i) || '/floatbox/') + 'graphics/';
		}
		t.rtl = t.getStyle(t.bod, 'direction') === 'rtl' || t.getStyle(t.docEl, 'direction') === 'rtl';
  	} else {
		t.parent = fb.lastChild;
		fb.lastChild = t;
		fb.children.push(t);
		t.anchors = fb.anchors;
		t.popups = fb.popups;
		t.preloads = fb.preloads;
		t.modules = fb.modules;
		t.jsModulesPath = fb.jsModulesPath;
		t.cssModulesPath = fb.cssModulesPath;
		t.languagesPath = fb.languagesPath;
		t.graphicsPath = fb.graphicsPath;
		t.strings = fb.strings;
		t.rtl = fb.rtl;
		if (t.parent.isSlideshow) t.parent.setPause(true);
	}
	var path = t.graphicsPath;
	t.resizeUpCursor = path + 'magnify_plus.cur';
	t.resizeDownCursor = path + 'magnify_minus.cur';
	t.notFoundImg = path + '404.jpg';
	t.blank = path + 'blank.gif';
	t.zIndex = {
		base: 90000 + (t.isChild ? 12 * fb.children.length : 0),
		fbOverlay: 1,
		fbBox: 2,
		fbCanvas: 3,
		fbContent: 4,
		fbMainLoader: 5,
		fbLeftNav: 6,
		fbRightNav: 6,
		fbOverlayPrev: 7,
		fbOverlayNext: 7,
		fbResizer: 8,
		fbInfoPanel: 9,
		fbControlPanel: 9,
		fbDragger: 10,
		fbZoomDiv: 11
	};
	var match = /\bautoStart=(.+?)(?:&|$)/i.exec(location.search);
	t.autoHref = match ? match[1] : false;
},
tagAnchors: function(baseEl) {
	var t = this;
	function tag(tagName) {
		var elements = baseEl.getElementsByTagName(tagName);
		for (var i = 0, len = elements.length; i < len; i++) {
			t.tagOneAnchor(elements[i]);
		}
	}
	tag('a');
	tag('area');
	t.getModule('core.js');
	t.getModules(t.defaultOptions, true);
	if (t.popups.length) {
		t.getModule('getLeftTop.js');
		t.getModule('setOpacity.js');
		t.getModule('tagPopup.js');
		if (t.tagPopup) {
			while (t.popups.length) t.tagPopup(t.popups.pop());
		}
	}
	if (t.ieOld) t.getModule('ieOld.js');
},
tagOneAnchor: function(anchor, assumeClass) {
	var t = this,
		isAnchor = !!anchor.getAttribute,
		match;
	if (isAnchor) {
		var a = {
			href: anchor.getAttribute('href') || '',
			rev: anchor.getAttribute('data-fb-options') || anchor.getAttribute('rev') || '',
			rel: anchor.getAttribute('rel') || '',
			title: anchor.getAttribute('title') || '',
			className: anchor.className || '',
			ownerDoc: anchor.ownerDocument,
			anchor: anchor,
			thumb: (anchor.getElementsByTagName('img') || [])[0]
			};
	} else {
		var a = anchor;
		a.anchor = a.thumb = a.ownerDoc = false;
	}
	if ((match = new RegExp('(?:^|\\s)' + t.magicClass + '(\\S*)', 'i').exec(a.className))) {
		a.tagged = true;
		if (match[1]) a.group = match[1];
	}
	if (t.autoGallery && !a.tagged && t.fileType(a.href) === 'img' && a.rel.toLowerCase() !== 'nofloatbox' &&
		a.className.toLowerCase().indexOf('nofloatbox') === -1)
	{
		a.tagged = true;
		a.group = '.autoGallery';
		if (t.autoTitle && !a.title) a.title = t.autoTitle;
	}
	if (!a.tagged) {
		if ((match = /^(?:floatbox|gallery|iframe|slideshow|lytebox|lyteshow|lyteframe|lightbox)(.*)/i.exec(a.rel))) {
			a.tagged = true;
			a.group = match[1];
			if (/^(slide|lyte)show/i.test(a.rel)) {
				a.rev += ' doSlideshow:true';
			} else if (/^(i|lyte)frame/i.test(a.rel)) {
				a.rev += ' type:iframe';
			}
		}
	}
	if (a.thumb && ((match = /(?:^|\s)fbPop(up|down)(?:\s|$)/i.exec(anchor.className)))) {
		a.popup = true;
		a.popupType = match[1];
		t.popups.push(a);
	}
	if (assumeClass) a.tagged = true;
	if (a.tagged) {
		a.options = t.parseOptionString(a.rev);
		a.href = a.options.href || a.href;
		a.group = a.options.group || a.group || '';
		if (!a.href && a.options.showThis !== false) return false;
		a.level = fb.children.length + (fb.lastChild.fbBox && !a.options.sameBox ? 1 : 0);
		var i = t.anchors.length;
		while (i--) {
			var a_i = t.anchors[i];
			if (a_i.href === a.href && a_i.rev === a.rev && a_i.rel === a.rel && a_i.title === a.title && a_i.level === a.level &&
				(a_i.anchor === a.anchor || (a.ownerDoc && a.ownerDoc !== t.doc)))
			{
				a_i.anchor = a.anchor;
				a_i.thumb = a.thumb;
				break;
			}
		}
		if (i === -1) {
			a.type = a.options.type || t.fileType(a.href);
			if (a.type === 'html') {
				a.type = 'iframe';
				var match = /#(\w+)/.exec(a.href);
				if (match) {
					var doc = document;
					if (a.anchor) {
						doc = a.ownerDoc || doc;
					}
					if (doc === document && t.itemToShow && t.itemToShow.anchor) {
						doc = t.itemToShow.ownerDoc || doc;
					}
					var el = doc.getElementById(match[1]);
					if (el) {
						a.type = 'inline';
						a.sourceEl = el;
					}
				}
			}
			t.anchors.push(a);
			t.getModules(a.options, false);
			if (a.type.indexOf('media') === 0) t.getModule('mediaHTML.js');
			if (t.autoHref) {
				if (a.options.showThis !== false && t.autoHref === a.href.substr(a.href.length - t.autoHref.length)) {
					t.autoStart = a;
				}
			} else if (a.options.autoStart === true) {
				t.autoStart = a;
			} else if (a.options.autoStart === 'once') {
				var match = /fbAutoShown=(.+?)(?:;|$)/.exec(document.cookie),
					val = match ? match[1] : '',
					href = escape(a.href);
				if (val.indexOf(href) === -1) {
					t.autoStart = a;
					document.cookie = 'fbAutoShown=' + val + href + '; path=/';
				}
			}
			if (t.ieOld && a.anchor) a.anchor.hideFocus = 'true';
		}
		if (isAnchor) {
			anchor.onclick = function(e) {
				if (!e) {
					var doc = this.ownerDocument;
					e = doc && doc.parentWindow && doc.parentWindow.event;
				}
				if (!(e && (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey)) ||
					a.options.showThis === false || !/img|iframe/.test(a.type))
				{
					if (t.start) t.start(anchor);
					return t.stopEvent(e);
				}
			};
		}
	}
	return a;
},
fileType: function(href) {
	var t = this,
		s = (href || '').toLowerCase(),
		i = s.indexOf('?');
	if (i !== -1) s = s.substr(0, i);
	s = s.substr(s.lastIndexOf('.') + 1);
	if (/^(jpe?g|png|gif|bmp)$/.test(s)) return 'img';
	if (s === 'swf' || /^(http:)?\/\/(www.)?(youtube|dailymotion).com\/(v|swf)\//i.test(href)) return 'media:flash';
	if (/^(mov|mpe?g|movie)$/.test(s)) return 'media:quicktime';
	if (s === 'xap') return 'media:silverlight';
	return 'html';
},
getGlobalOptions: function() {
	var t = this;
	if (!t.isChild) {
		t.setOptions(t.defaultOptions);
		if (typeof setFloatboxOptions === 'function') setFloatboxOptions();
		t.pageOptions = typeof fbPageOptions === 'object' ? fbPageOptions : {};
	} else {
		for (var name in t.defaultOptions) {
			if (t.defaultOptions.hasOwnProperty(name)) t[name] = t.parent[name];
		}
		t.setOptions(t.childOptions);
		t.pageOptions = {};
		for (var name in t.parent.pageOptions) {
			if (t.parent.pageOptions.hasOwnProperty(name)) t.pageOptions[name] = t.parent.pageOptions[name];
		}
		if (typeof fbChildOptions === 'object') {
			for (var name in fbChildOptions) {
				if (fbChildOptions.hasOwnProperty(name)) t.pageOptions[name] = fbChildOptions[name];
			}
		}
	}
	t.setOptions(t.pageOptions);
	if (t.pageOptions.enableCookies) {
		var match = /fbOptions=(.+?)(;|$)/.exec(document.cookie);
		if (match) t.setOptions(t.parseOptionString(match[1]));
	}
	t.setOptions(t.parseOptionString(location.search.substring(1)));
},
parseOptionString: function(str) {
	var t = this;
	if (!str) return {};
	var quotes = [], match,
		rex = /`([^`]*?)`/g;
		rex.lastIndex = 0;
	while ((match = rex.exec(str))) quotes.push(match[1]);
	if (quotes.length) str = str.replace(rex, '``');
	str = str.replace(/\s*[:=]\s*/g, ':');
	str = str.replace(/\s*[;&]\s*/g, ' ');
	str = str.replace(/^\s+|\s+$/g, '');
	str = str.replace(/(:\d+)px\b/gi, function(match, p1) { return p1; });
	var pairs = {},
		aVars = str.split(' '),
		i = aVars.length;
	while (i--) {
		var aThisVar = aVars[i].split(':'),
			name = aThisVar[0],
			value = aThisVar[1];
		if (typeof value === 'string') {
			if (!isNaN(value)) value = +value;
			else if (value === 'true') value = true;
			else if (value === 'false') value = false;
		}
		if (value === '``') value = quotes.pop() || '';
		pairs[name] = value;
	}
	return pairs;
},
setOptions: function(pairs) {
	var t = this;
	for (var name in pairs) {
		if (t.defaultOptions.hasOwnProperty(name)) t[name] = pairs[name];
	}
},
getModule: function(file) {
	var t = this;
	if (t.modules.loaded[file]) return;
	if (file.slice(-3) === '.js') {
		var tag = 'script',
			attr = { type: 'text/javascript', src: t.jsModulesPath + file };
	} else {
		var tag = 'link',
			attr = { rel: 'stylesheet', type: 'text/css', href: t.cssModulesPath + file };
	}
	var el = t.doc.createElement(tag);
	for (var name in attr) {
		if (attr.hasOwnProperty(name)) el.setAttribute(name, attr[name]);
	}
	t.head.appendChild(el);
	t.modules.loaded[file] = true;
},
getModules: function(options, fbValue) {
	var t = this;
	for (var name in options) {
		if (t.modules.hasOwnProperty(name)) {
			var mod = t.modules[name],
				val = fbValue ? t[name] : options[name],
				loaded = 0,
				i = mod.files.length;
			while (i--) {
				if (mod.test(val)) {
					t.getModule(mod.files[i]);
					loaded++;
				}
			}
			if (loaded === mod.files.length) delete t.modules[name];
		}
	}
},
getStyle: function(el, prop) {
	if (!(el && prop)) return '';
	if (el.currentStyle) {
		return el.currentStyle[prop.replace(/-(\w)/g, function(match, p1) { return p1.toUpperCase(); })] || '';
	} else {
		var win = el.ownerDocument.defaultView || el.ownerDocument.parentWindow;
		return (win.getComputedStyle && win.getComputedStyle(el, '').getPropertyValue(prop)) || '';
	}
},
getPath: function(tag, attr, rex) {
	var match,
		els = document.getElementsByTagName(tag),
		i = els.length;
	while(i--) {
		if ((match = rex.exec(els[i][attr]))) return match[1];
	}
	return '';
},
addEvent: function(node, action, func) {
	if (node.addEventListener) {
		node.addEventListener(action, func, false);
	} else if (node.attachEvent) {
		node.attachEvent('on' + action, func);
	} else {
		node['prior' + action] = node['on' + action];
		node['on' + action] = func;
	}
},
removeEvent: function(node, action, func) {
	if (node.removeEventListener) {
		node.removeEventListener(action, func, false);
	} else if (node.detachEvent) {
		node.detachEvent('on' + action, func);
	} else {
		node['on' + action] = node['prior' + action];
		delete node['prior' + action];
	}
},
stopEvent: function(e) {
	if (e) {
		if (e.stopPropagation) e.stopPropagation();
		if (e.preventDefault) e.preventDefault();
		e.cancelBubble = true;
		e.returnValue = false;
	}
	return false;
},
preloadImages: function(href, chain) {
	var t = this;
	setTimeout(function() { t.preloadImages(href, chain); }, 100);
}
};
var fb;
function initfb() {
	if (arguments.callee.done) return;
	var fbWindow = 'self';
	if (self !== parent) {
		try {
			if (self.location.host === parent.location.host && self.location.protocol === parent.location.protocol) fbWindow = 'parent';
		} catch(e) {}
		if (fbWindow === 'parent' && !parent.fb) return setTimeout(initfb, 50);
	}
	arguments.callee.done = true;
	if (document.compatMode === 'BackCompat') {
		alert('Floatbox does not support quirks mode.\nPage needs to have a valid doctype declaration.');
		return;
	}
	fb = (fbWindow === 'self' ? new Floatbox() : parent.fb);
	fb.tagAnchors(self.document.getElementsByTagName('body')[0]);
}
if (document.addEventListener) document.addEventListener('DOMContentLoaded', initfb, false);
(function() {
	/*@cc_on
	if (document.body) {
		try {
			document.createElement('div').doScroll('left');
			return initfb();
		} catch(e) {}
	}
	/*@if (false) @*/
	if (/loaded|complete/.test(document.readyState)) return initfb();
	/*@end @*/
	if (!initfb.done) setTimeout(arguments.callee, 30);
})();
fb_prevOnload = window.onload;
window.onload = function() {
	if (arguments.callee.done) return;
	arguments.callee.done = true;
	if (typeof fb_prevOnload === 'function') fb_prevOnload();
	initfb();
	(function() {
		if (!(self.fb && self.fb.start)) return setTimeout(arguments.callee, 50);
		if (fb.autoStart && fb.autoStart.ownerDoc) {
			if (fb.autoStart.ownerDoc === self.document) setTimeout ( function() { fb.start(fb.autoStart); }, 100);
		} else {
			setTimeout ( function() { if (typeof fb.preloads.count === 'undefined') fb.preloadImages('', true); }, 200);
		}
	})();
};
