/***************************************************************************

* 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:          'bl'      ,// 'tl'|'tc'|'tr'|'bl'|'bc'|'br'

controlPos:       'br'      ,// 'tl'|'tr'|'bl'|'br'

centerNav:         false    ,// true|false

boxLeft:          'auto'    ,// 'auto'|pixels|'[-]xx%'

boxTop:           'auto'    ,// 'auto'|pixels|'[-]xx%'

enableDragMove:    false    ,// true|false

stickyDragMove:    true     ,// true|false

enableDragResize:  false    ,// 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:         'ro'    ,// 'auto'|'en'|... (see the languages folder)

graphicsType:     'auto'    ,// 'auto'|'international'|'english'

/*** </General Options> ***/



/*** <Animation Options> ***/

doAnimations:         true   ,// true|false

resizeDuration:       3.5    ,// 0-10

imageFadeDuration:    3      ,// 0-10

overlayFadeDuration:  4      ,// 0-10

startAtClick:         true   ,// true|false

zoomImageStart:       true   ,// true|false

liveImageResize:      true   ,// true|false

splitResize:         'no'    ,// '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:       'exit'  ,// '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);

		}

	})();

};
