Index: branches/1.0.x/designs/default_design.des.tpl
===================================================================
--- branches/1.0.x/designs/default_design.des.tpl	(revision 15800)
+++ branches/1.0.x/designs/default_design.des.tpl	(revision 15801)
@@ -1,79 +1,79 @@
 <inp2:m_CheckSSL/><inp2:m_DefaultParam columns="2"/>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="<inp2:lang.current_Field name='Locale' db='1'/>">
 <html>
 <head>
 	<!--## includes system elements ##-->
 	<inp2:m_Include template="elements/forms.elm" strip_nl="2"/>
 	<inp2:m_Include template="elements/content_boxes.elm" strip_nl="2"/>
 	<inp2:m_Include template="elements/product_elements.elm" strip_nl="2"/>
 
 	<title><inp2:m_RenderElement name="page_title" default_element="default_page_title" no_editing="1"/></title>
 
-	<link rel="stylesheet" rev="stylesheet" href="<inp2:m_Compress from='all_css'/>" type="text/css" />
+	<!--<link rel="stylesheet" rev="stylesheet" href="<inp2:m_Compress from='all_css'/>" type="text/css" />-->
 
-	<inp2:m_Include template="elements/html_head.elm" strip_nl="2"/>
+	<inp2:m_Include template="elements/html_head.elm"/>
 
 <!--## <script type="text/javascript" src="<inp2:m_Compress from='all_js'/>"></script> ##-->
 
 	<inp2:m_RenderElement name="add_to_head" default_element="default_add_to_head"/>
 </head>
 
 <body>
 	<!--## System tag please do not remove ##-->
 	<inp2:st_EditPage mode="start"/>
 
 		<inp2:m_Include template="elements/header.elm" />
 		<inp2:m_Include template="elements/menu.elm" />
 
 		<div id="content">
 			<div class="padding">
 
 				<inp2:m_if check="m_Param" name="before_content">
 					<inp2:m_RenderElement name="$before_content" />
 				</inp2:m_if>
 
 				<inp2:m_if check="m_Param" name="left_column">
 
 					<div class="leftcol">
 						<inp2:m_RenderElement name="$left_column" />
 					</div>
 
 					<div class="contentcol">
 						<inp2:m_RenderElement name="content" />
 					</div>
 
 				<inp2:m_elseif check="m_Param" name="right_column" />
 
 					<div class="contentcol">
 						<inp2:m_RenderElement name="content" />
 					</div>
 
 					<div class="rightcol">
 						<inp2:m_RenderElement name="$right_column" />
 					</div>
 
 				<inp2:m_else/>
 
 					<inp2:m_RenderElement name="content"/>
 
 				</inp2:m_if>
 
 				<div class="clear"></div>
 
 			</div>
 		</div>
 
 		<inp2:m_Include template="elements/footer_menu.elm" />
 
 		<inp2:m_Include template="elements/footer.elm" />
 
 	<inp2:st_EditPage mode="end"/> <!--## /System tag please do not remove ##-->
 
 	<inp2:m_Include template="elements/tracking.elm" />
 
 	<inp2:m_RenderElement name="add_to_footer" default_element="default_add_to_footer"/>
 </body>
 </html>
\ No newline at end of file
Index: branches/1.0.x/inc/js/colorbox/jquery.colorbox.js
===================================================================
--- branches/1.0.x/inc/js/colorbox/jquery.colorbox.js	(nonexistent)
+++ branches/1.0.x/inc/js/colorbox/jquery.colorbox.js	(revision 15801)
@@ -0,0 +1,1026 @@
+/*!
+	jQuery Colorbox v1.4.15 - 2013-04-22
+	(c) 2013 Jack Moore - jacklmoore.com/colorbox
+	license: http://www.opensource.org/licenses/mit-license.php
+*/
+(function ($, document, window) {
+	var
+	// Default settings object.
+	// See http://jacklmoore.com/colorbox for details.
+	defaults = {
+		transition: "elastic",
+		speed: 300,
+		fadeOut: 300,
+		width: false,
+		initialWidth: "600",
+		innerWidth: false,
+		maxWidth: false,
+		height: false,
+		initialHeight: "450",
+		innerHeight: false,
+		maxHeight: false,
+		scalePhotos: true,
+		scrolling: true,
+		inline: false,
+		html: false,
+		iframe: false,
+		fastIframe: true,
+		photo: false,
+		href: false,
+		title: false,
+		rel: false,
+		opacity: 0.9,
+		preloading: true,
+		className: false,
+
+		// alternate image paths for high-res displays
+		retinaImage: false,
+		retinaUrl: false,
+		retinaSuffix: '@2x.$1',
+
+		// internationalization
+		current: "image {current} of {total}",
+		previous: "previous",
+		next: "next",
+		close: "close",
+		xhrError: "This content failed to load.",
+		imgError: "This image failed to load.",
+
+		open: false,
+		returnFocus: true,
+		reposition: true,
+		loop: true,
+		slideshow: false,
+		slideshowAuto: true,
+		slideshowSpeed: 2500,
+		slideshowStart: "start slideshow",
+		slideshowStop: "stop slideshow",
+		photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i,
+
+		onOpen: false,
+		onLoad: false,
+		onComplete: false,
+		onCleanup: false,
+		onClosed: false,
+		overlayClose: true,
+		escKey: true,
+		arrowKey: true,
+		top: false,
+		bottom: false,
+		left: false,
+		right: false,
+		fixed: false,
+		data: undefined
+	},
+	
+	// Abstracting the HTML and event identifiers for easy rebranding
+	colorbox = 'colorbox',
+	prefix = 'cbox',
+	boxElement = prefix + 'Element',
+	
+	// Events
+	event_open = prefix + '_open',
+	event_load = prefix + '_load',
+	event_complete = prefix + '_complete',
+	event_cleanup = prefix + '_cleanup',
+	event_closed = prefix + '_closed',
+	event_purge = prefix + '_purge',
+
+	// Cached jQuery Object Variables
+	$overlay,
+	$box,
+	$wrap,
+	$content,
+	$topBorder,
+	$leftBorder,
+	$rightBorder,
+	$bottomBorder,
+	$related,
+	$window,
+	$loaded,
+	$loadingBay,
+	$loadingOverlay,
+	$title,
+	$current,
+	$slideshow,
+	$next,
+	$prev,
+	$close,
+	$groupControls,
+	$events = $('<a/>'),
+	
+	// Variables for cached values or use across multiple functions
+	settings,
+	interfaceHeight,
+	interfaceWidth,
+	loadedHeight,
+	loadedWidth,
+	element,
+	index,
+	photo,
+	open,
+	active,
+	closing,
+	loadingTimer,
+	publicMethod,
+	div = "div",
+	className,
+	requests = 0,
+	init;
+
+	// ****************
+	// HELPER FUNCTIONS
+	// ****************
+	
+	// Convenience function for creating new jQuery objects
+	function $tag(tag, id, css) {
+		var element = document.createElement(tag);
+
+		if (id) {
+			element.id = prefix + id;
+		}
+
+		if (css) {
+			element.style.cssText = css;
+		}
+
+		return $(element);
+	}
+	
+	// Get the window height using innerHeight when available to avoid an issue with iOS
+	// http://bugs.jquery.com/ticket/6724
+	function winheight() {
+		return window.innerHeight ? window.innerHeight : $(window).height();
+	}
+
+	// Determine the next and previous members in a group.
+	function getIndex(increment) {
+		var
+		max = $related.length,
+		newIndex = (index + increment) % max;
+		
+		return (newIndex < 0) ? max + newIndex : newIndex;
+	}
+
+	// Convert '%' and 'px' values to integers
+	function setSize(size, dimension) {
+		return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
+	}
+	
+	// Checks an href to see if it is a photo.
+	// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
+	function isImage(settings, url) {
+		return settings.photo || settings.photoRegex.test(url);
+	}
+
+	function retinaUrl(settings, url) {
+		return settings.retinaUrl && window.devicePixelRatio > 1 ? url.replace(settings.photoRegex, settings.retinaSuffix) : url;
+	}
+
+	function trapFocus(e) {
+		if ('contains' in $box[0] && !$box[0].contains(e.target)) {
+			e.stopPropagation();
+			$box.focus();
+		}
+	}
+
+	// Assigns function results to their respective properties
+	function makeSettings() {
+		var i,
+			data = $.data(element, colorbox);
+		
+		if (data == null) {
+			settings = $.extend({}, defaults);
+			if (console && console.log) {
+				console.log('Error: cboxElement missing settings object');
+			}
+		} else {
+			settings = $.extend({}, data);
+		}
+		
+		for (i in settings) {
+			if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
+				settings[i] = settings[i].call(element);
+			}
+		}
+		
+		settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow';
+		settings.href = settings.href || $(element).attr('href');
+		settings.title = settings.title || element.title;
+		
+		if (typeof settings.href === "string") {
+			settings.href = $.trim(settings.href);
+		}
+	}
+
+	function trigger(event, callback) {
+		// for external use
+		$(document).trigger(event);
+
+		// for internal use
+		$events.trigger(event);
+
+		if ($.isFunction(callback)) {
+			callback.call(element);
+		}
+	}
+
+	// Slideshow functionality
+	function slideshow() {
+		var
+		timeOut,
+		className = prefix + "Slideshow_",
+		click = "click." + prefix,
+		clear,
+		set,
+		start,
+		stop;
+		
+		if (settings.slideshow && $related[1]) {
+			clear = function () {
+				clearTimeout(timeOut);
+			};
+
+			set = function () {
+				if (settings.loop || $related[index + 1]) {
+					timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
+				}
+			};
+
+			start = function () {
+				$slideshow
+					.html(settings.slideshowStop)
+					.unbind(click)
+					.one(click, stop);
+
+				$events
+					.bind(event_complete, set)
+					.bind(event_load, clear)
+					.bind(event_cleanup, stop);
+
+				$box.removeClass(className + "off").addClass(className + "on");
+			};
+			
+			stop = function () {
+				clear();
+				
+				$events
+					.unbind(event_complete, set)
+					.unbind(event_load, clear)
+					.unbind(event_cleanup, stop);
+				
+				$slideshow
+					.html(settings.slideshowStart)
+					.unbind(click)
+					.one(click, function () {
+						publicMethod.next();
+						start();
+					});
+
+				$box.removeClass(className + "on").addClass(className + "off");
+			};
+			
+			if (settings.slideshowAuto) {
+				start();
+			} else {
+				stop();
+			}
+		} else {
+			$box.removeClass(className + "off " + className + "on");
+		}
+	}
+
+	function launch(target) {
+		if (!closing) {
+			
+			element = target;
+			
+			makeSettings();
+			
+			$related = $(element);
+			
+			index = 0;
+			
+			if (settings.rel !== 'nofollow') {
+				$related = $('.' + boxElement).filter(function () {
+					var data = $.data(this, colorbox),
+						relRelated;
+
+					if (data) {
+						relRelated =  $(this).data('rel') || data.rel || this.rel;
+					}
+					
+					return (relRelated === settings.rel);
+				});
+				index = $related.index(element);
+				
+				// Check direct calls to Colorbox.
+				if (index === -1) {
+					$related = $related.add(element);
+					index = $related.length - 1;
+				}
+			}
+			
+			$overlay.css({
+				opacity: parseFloat(settings.opacity),
+				cursor: settings.overlayClose ? "pointer" : "auto",
+				visibility: 'visible'
+			}).show();
+			
+
+			if (className) {
+				$box.add($overlay).removeClass(className);
+			}
+			if (settings.className) {
+				$box.add($overlay).addClass(settings.className);
+			}
+			className = settings.className;
+
+			$close.html(settings.close).show();
+
+			if (!open) {
+				open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
+				
+				// Show colorbox so the sizes can be calculated in older versions of jQuery
+				$box.css({visibility:'hidden', display:'block'});
+				
+				$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden').appendTo($content);
+
+				// Cache values needed for size calculations
+				interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
+				interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
+				loadedHeight = $loaded.outerHeight(true);
+				loadedWidth = $loaded.outerWidth(true);
+				
+				
+				// Opens inital empty Colorbox prior to content being loaded.
+				settings.w = setSize(settings.initialWidth, 'x');
+				settings.h = setSize(settings.initialHeight, 'y');
+				publicMethod.position();
+
+				slideshow();
+
+				trigger(event_open, settings.onOpen);
+				
+				$groupControls.add($title).hide();
+
+				$box.focus();
+				
+				// Confine focus to the modal
+				// Uses event capturing that is not supported in IE8-
+				if (document.addEventListener) {
+
+					document.addEventListener('focus', trapFocus, true);
+					
+					$events.one(event_closed, function () {
+						document.removeEventListener('focus', trapFocus, true);
+					});
+				}
+
+				// Return focus on closing
+				if (settings.returnFocus) {
+					$events.one(event_closed, function () {
+						$(element).focus();
+					});
+				}
+			}
+			
+			load();
+		}
+	}
+
+	// Colorbox's markup needs to be added to the DOM prior to being called
+	// so that the browser will go ahead and load the CSS background images.
+	function appendHTML() {
+		if (!$box && document.body) {
+			init = false;
+			$window = $(window);
+			$box = $tag(div).attr({
+				id: colorbox,
+				'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
+				role: 'dialog',
+				tabindex: '-1'
+			}).hide();
+			$overlay = $tag(div, "Overlay").hide();
+			$loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic"));
+			$wrap = $tag(div, "Wrapper");
+			$content = $tag(div, "Content").append(
+				$title = $tag(div, "Title"),
+				$current = $tag(div, "Current"),
+				$prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
+				$next = $('<button type="button"/>').attr({id:prefix+'Next'}),
+				$slideshow = $tag('button', "Slideshow"),
+				$loadingOverlay,
+				$close = $('<button type="button"/>').attr({id:prefix+'Close'})
+			);
+			
+			$wrap.append( // The 3x3 Grid that makes up Colorbox
+				$tag(div).append(
+					$tag(div, "TopLeft"),
+					$topBorder = $tag(div, "TopCenter"),
+					$tag(div, "TopRight")
+				),
+				$tag(div, false, 'clear:left').append(
+					$leftBorder = $tag(div, "MiddleLeft"),
+					$content,
+					$rightBorder = $tag(div, "MiddleRight")
+				),
+				$tag(div, false, 'clear:left').append(
+					$tag(div, "BottomLeft"),
+					$bottomBorder = $tag(div, "BottomCenter"),
+					$tag(div, "BottomRight")
+				)
+			).find('div div').css({'float': 'left'});
+			
+			$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
+			
+			$groupControls = $next.add($prev).add($current).add($slideshow);
+
+			$(document.body).append($overlay, $box.append($wrap, $loadingBay));
+		}
+	}
+
+	// Add Colorbox's event bindings
+	function addBindings() {
+		function clickHandler(e) {
+			// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
+			// See: http://jacklmoore.com/notes/click-events/
+			if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.control)) {
+				e.preventDefault();
+				launch(this);
+			}
+		}
+
+		if ($box) {
+			if (!init) {
+				init = true;
+
+				// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
+				$next.click(function () {
+					publicMethod.next();
+				});
+				$prev.click(function () {
+					publicMethod.prev();
+				});
+				$close.click(function () {
+					publicMethod.close();
+				});
+				$overlay.click(function () {
+					if (settings.overlayClose) {
+						publicMethod.close();
+					}
+				});
+				
+				// Key Bindings
+				$(document).bind('keydown.' + prefix, function (e) {
+					var key = e.keyCode;
+					if (open && settings.escKey && key === 27) {
+						e.preventDefault();
+						publicMethod.close();
+					}
+					if (open && settings.arrowKey && $related[1] && !e.altKey) {
+						if (key === 37) {
+							e.preventDefault();
+							$prev.click();
+						} else if (key === 39) {
+							e.preventDefault();
+							$next.click();
+						}
+					}
+				});
+
+				if ($.isFunction($.fn.on)) {
+					// For jQuery 1.7+
+					$(document).on('click.'+prefix, '.'+boxElement, clickHandler);
+				} else {
+					// For jQuery 1.3.x -> 1.6.x
+					// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.
+					// This is not here for jQuery 1.9, it's here for legacy users.
+					$('.'+boxElement).live('click.'+prefix, clickHandler);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	// Don't do anything if Colorbox already exists.
+	if ($.colorbox) {
+		return;
+	}
+
+	// Append the HTML when the DOM loads
+	$(appendHTML);
+
+
+	// ****************
+	// PUBLIC FUNCTIONS
+	// Usage format: $.colorbox.close();
+	// Usage from within an iframe: parent.jQuery.colorbox.close();
+	// ****************
+	
+	publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
+		var $this = this;
+		
+		options = options || {};
+		
+		appendHTML();
+
+		if (addBindings()) {
+			if ($.isFunction($this)) { // assume a call to $.colorbox
+				$this = $('<a/>');
+				options.open = true;
+			} else if (!$this[0]) { // colorbox being applied to empty collection
+				return $this;
+			}
+			
+			if (callback) {
+				options.onComplete = callback;
+			}
+			
+			$this.each(function () {
+				$.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
+			}).addClass(boxElement);
+			
+			if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
+				launch($this[0]);
+			}
+		}
+		
+		return $this;
+	};
+
+	publicMethod.position = function (speed, loadedCallback) {
+		var
+		css,
+		top = 0,
+		left = 0,
+		offset = $box.offset(),
+		scrollTop,
+		scrollLeft;
+		
+		$window.unbind('resize.' + prefix);
+
+		// remove the modal so that it doesn't influence the document width/height
+		$box.css({top: -9e4, left: -9e4});
+
+		scrollTop = $window.scrollTop();
+		scrollLeft = $window.scrollLeft();
+
+		if (settings.fixed) {
+			offset.top -= scrollTop;
+			offset.left -= scrollLeft;
+			$box.css({position: 'fixed'});
+		} else {
+			top = scrollTop;
+			left = scrollLeft;
+			$box.css({position: 'absolute'});
+		}
+
+		// keeps the top and left positions within the browser's viewport.
+		if (settings.right !== false) {
+			left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
+		} else if (settings.left !== false) {
+			left += setSize(settings.left, 'x');
+		} else {
+			left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
+		}
+		
+		if (settings.bottom !== false) {
+			top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
+		} else if (settings.top !== false) {
+			top += setSize(settings.top, 'y');
+		} else {
+			top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
+		}
+
+		$box.css({top: offset.top, left: offset.left, visibility:'visible'});
+
+		// setting the speed to 0 to reduce the delay between same-sized content.
+		speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
+		
+		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
+		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
+		// it can invoke an obscure IE bug when using iframes.
+		$wrap[0].style.width = $wrap[0].style.height = "9999px";
+		
+		function modalDimensions(that) {
+			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt(that.style.width,10) - interfaceWidth)+'px';
+			$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt(that.style.height,10) - interfaceHeight)+'px';
+		}
+
+		css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
+
+		if(speed===0){ // temporary workaround to side-step jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273)
+			$box.css(css);
+		}
+		$box.dequeue().animate(css, {
+			duration: speed,
+			complete: function () {
+				modalDimensions(this);
+				
+				active = false;
+				
+				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
+				$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
+				$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
+				
+				if (settings.reposition) {
+					setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
+						$window.bind('resize.' + prefix, publicMethod.position);
+					}, 1);
+				}
+
+				if (loadedCallback) {
+					loadedCallback();
+				}
+			},
+			step: function () {
+				modalDimensions(this);
+			}
+		});
+	};
+
+	publicMethod.resize = function (options) {
+		if (open) {
+			options = options || {};
+			
+			if (options.width) {
+				settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
+			}
+			if (options.innerWidth) {
+				settings.w = setSize(options.innerWidth, 'x');
+			}
+			$loaded.css({width: settings.w});
+			
+			if (options.height) {
+				settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
+			}
+			if (options.innerHeight) {
+				settings.h = setSize(options.innerHeight, 'y');
+			}
+			if (!options.innerHeight && !options.height) {
+				$loaded.css({height: "auto"});
+				settings.h = $loaded.height();
+			}
+			$loaded.css({height: settings.h});
+			
+			publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
+		}
+	};
+
+	publicMethod.prep = function (object) {
+		if (!open) {
+			return;
+		}
+		
+		var callback, speed = settings.transition === "none" ? 0 : settings.speed;
+
+		$loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
+
+		$loaded = $tag(div, 'LoadedContent').append(object);
+		
+		function getWidth() {
+			settings.w = settings.w || $loaded.width();
+			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
+			return settings.w;
+		}
+		function getHeight() {
+			settings.h = settings.h || $loaded.height();
+			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
+			return settings.h;
+		}
+		
+		$loaded.hide()
+		.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
+		.css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
+		.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
+		.prependTo($content);
+		
+		$loadingBay.hide();
+		
+		// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
+		
+		$(photo).css({'float': 'none'});
+
+		callback = function () {
+			var total = $related.length,
+				iframe,
+				frameBorder = 'frameBorder',
+				allowTransparency = 'allowTransparency',
+				complete;
+			
+			if (!open) {
+				return;
+			}
+			
+			function removeFilter() { // Needed for IE7 & IE8 in versions of jQuery prior to 1.7.2
+				if ($.support.opacity === false) {
+					$box[0].style.removeAttribute('filter');
+				}
+			}
+			
+			complete = function () {
+				clearTimeout(loadingTimer);
+				$loadingOverlay.hide();
+				trigger(event_complete, settings.onComplete);
+			};
+
+			
+			$title.html(settings.title).add($loaded).show();
+			
+			if (total > 1) { // handle grouping
+				if (typeof settings.current === "string") {
+					$current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
+				}
+				
+				$next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
+				$prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
+				
+				if (settings.slideshow) {
+					$slideshow.show();
+				}
+				
+				// Preloads images within a rel group
+				if (settings.preloading) {
+					$.each([getIndex(-1), getIndex(1)], function(){
+						var src,
+							img,
+							i = $related[this],
+							data = $.data(i, colorbox);
+
+						if (data && data.href) {
+							src = data.href;
+							if ($.isFunction(src)) {
+								src = src.call(i);
+							}
+						} else {
+							src = $(i).attr('href');
+						}
+
+						if (src && isImage(data, src)) {
+							src = retinaUrl(data, src);
+							img = new Image();
+							img.src = src;
+						}
+					});
+				}
+			} else {
+				$groupControls.hide();
+			}
+			
+			if (settings.iframe) {
+				iframe = $tag('iframe')[0];
+				
+				if (frameBorder in iframe) {
+					iframe[frameBorder] = 0;
+				}
+				
+				if (allowTransparency in iframe) {
+					iframe[allowTransparency] = "true";
+				}
+
+				if (!settings.scrolling) {
+					iframe.scrolling = "no";
+				}
+				
+				$(iframe)
+					.attr({
+						src: settings.href,
+						name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
+						'class': prefix + 'Iframe',
+						allowFullScreen : true, // allow HTML5 video to go fullscreen
+						webkitAllowFullScreen : true,
+						mozallowfullscreen : true
+					})
+					.one('load', complete)
+					.appendTo($loaded);
+				
+				$events.one(event_purge, function () {
+					iframe.src = "//about:blank";
+				});
+
+				if (settings.fastIframe) {
+					$(iframe).trigger('load');
+				}
+			} else {
+				complete();
+			}
+			
+			if (settings.transition === 'fade') {
+				$box.fadeTo(speed, 1, removeFilter);
+			} else {
+				removeFilter();
+			}
+		};
+		
+		if (settings.transition === 'fade') {
+			$box.fadeTo(speed, 0, function () {
+				publicMethod.position(0, callback);
+			});
+		} else {
+			publicMethod.position(speed, callback);
+		}
+	};
+
+	function load () {
+		var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
+		
+		active = true;
+		
+		photo = false;
+		
+		element = $related[index];
+		
+		makeSettings();
+		
+		trigger(event_purge);
+		
+		trigger(event_load, settings.onLoad);
+		
+		settings.h = settings.height ?
+				setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
+				settings.innerHeight && setSize(settings.innerHeight, 'y');
+		
+		settings.w = settings.width ?
+				setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
+				settings.innerWidth && setSize(settings.innerWidth, 'x');
+		
+		// Sets the minimum dimensions for use in image scaling
+		settings.mw = settings.w;
+		settings.mh = settings.h;
+		
+		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
+		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
+		if (settings.maxWidth) {
+			settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
+			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
+		}
+		if (settings.maxHeight) {
+			settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
+			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
+		}
+		
+		href = settings.href;
+		
+		loadingTimer = setTimeout(function () {
+			$loadingOverlay.show();
+		}, 100);
+		
+		if (settings.inline) {
+			// Inserts an empty placeholder where inline content is being pulled from.
+			// An event is bound to put inline content back when Colorbox closes or loads new content.
+			$inline = $tag(div).hide().insertBefore($(href)[0]);
+
+			$events.one(event_purge, function () {
+				$inline.replaceWith($loaded.children());
+			});
+
+			prep($(href));
+		} else if (settings.iframe) {
+			// IFrame element won't be added to the DOM until it is ready to be displayed,
+			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
+			prep(" ");
+		} else if (settings.html) {
+			prep(settings.html);
+		} else if (isImage(settings, href)) {
+
+			href = retinaUrl(settings, href);
+
+			$(photo = new Image())
+			.addClass(prefix + 'Photo')
+			.bind('error',function () {
+				settings.title = false;
+				prep($tag(div, 'Error').html(settings.imgError));
+			})
+			.one('load', function () {
+				var percent;
+
+				if (request !== requests) {
+					return;
+				}
+
+				photo.alt = $(element).attr('alt') || $(element).attr('data-alt') || '';
+
+				if (settings.retinaImage && window.devicePixelRatio > 1) {
+					photo.height = photo.height / window.devicePixelRatio;
+					photo.width = photo.width / window.devicePixelRatio;
+				}
+
+				if (settings.scalePhotos) {
+					setResize = function () {
+						photo.height -= photo.height * percent;
+						photo.width -= photo.width * percent;
+					};
+					if (settings.mw && photo.width > settings.mw) {
+						percent = (photo.width - settings.mw) / photo.width;
+						setResize();
+					}
+					if (settings.mh && photo.height > settings.mh) {
+						percent = (photo.height - settings.mh) / photo.height;
+						setResize();
+					}
+				}
+				
+				if (settings.h) {
+					photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
+				}
+				
+				if ($related[1] && (settings.loop || $related[index + 1])) {
+					photo.style.cursor = 'pointer';
+					photo.onclick = function () {
+						publicMethod.next();
+					};
+				}
+
+				photo.style.width = photo.width + 'px';
+				photo.style.height = photo.height + 'px';
+
+				setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
+					prep(photo);
+				}, 1);
+			});
+			
+			setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
+				photo.src = href;
+			}, 1);
+		} else if (href) {
+			$loadingBay.load(href, settings.data, function (data, status) {
+				if (request === requests) {
+					prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
+				}
+			});
+		}
+	}
+		
+	// Navigates to the next page/image in a set.
+	publicMethod.next = function () {
+		if (!active && $related[1] && (settings.loop || $related[index + 1])) {
+			index = getIndex(1);
+			launch($related[index]);
+		}
+	};
+	
+	publicMethod.prev = function () {
+		if (!active && $related[1] && (settings.loop || index)) {
+			index = getIndex(-1);
+			launch($related[index]);
+		}
+	};
+
+	// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
+	publicMethod.close = function () {
+		if (open && !closing) {
+			
+			closing = true;
+			
+			open = false;
+			
+			trigger(event_cleanup, settings.onCleanup);
+			
+			$window.unbind('.' + prefix);
+			
+			$overlay.fadeTo(settings.fadeOut || 0, 0);
+			
+			$box.stop().fadeTo(settings.fadeOut || 0, 0, function () {
+			
+				$box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
+				
+				trigger(event_purge);
+				
+				$loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
+				
+				setTimeout(function () {
+					closing = false;
+					trigger(event_closed, settings.onClosed);
+				}, 1);
+			});
+		}
+	};
+
+	// Removes changes Colorbox made to the document, but does not remove the plugin.
+	publicMethod.remove = function () {
+		if (!$box) { return; }
+
+		$box.stop();
+		$.colorbox.close();
+		$box.stop().remove();
+		$overlay.remove();
+		closing = false;
+		$box = null;
+		$('.' + boxElement)
+			.removeData(colorbox)
+			.removeClass(boxElement);
+
+		$(document).unbind('click.'+prefix);
+	};
+
+	// A method for fetching the current element Colorbox is referencing.
+	// returns a jQuery object.
+	publicMethod.element = function () {
+		return $(element);
+	};
+
+	publicMethod.settings = defaults;
+
+}(jQuery, document, window));

Property changes on: branches/1.0.x/inc/js/colorbox/jquery.colorbox.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/colorbox/images/loading_background.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/colorbox/images/loading_background.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/colorbox/images/border.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/colorbox/images/border.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/colorbox/images/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/colorbox/images/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/colorbox/images/overlay.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/colorbox/images/overlay.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/colorbox/images/controls.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/colorbox/images/controls.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/colorbox/jquery.colorbox.css
===================================================================
--- branches/1.0.x/inc/js/colorbox/jquery.colorbox.css	(nonexistent)
+++ branches/1.0.x/inc/js/colorbox/jquery.colorbox.css	(revision 15801)
@@ -0,0 +1,69 @@
+/*
+    Colorbox Core Style:
+    The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
+
+/*
+    User Style:
+    Change the following styles to modify the appearance of Colorbox.  They are
+    ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:url(@templates_base@/inc/js/colorbox/images/overlay.png) repeat 0 0;}
+#colorbox{outline:0;}
+    #cboxTopLeft{width:21px; height:21px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -101px 0;}
+    #cboxTopRight{width:21px; height:21px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -130px 0;}
+    #cboxBottomLeft{width:21px; height:21px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -101px -29px;}
+    #cboxBottomRight{width:21px; height:21px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -130px -29px;}
+    #cboxMiddleLeft{width:21px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) left top repeat-y;}
+    #cboxMiddleRight{width:21px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) right top repeat-y;}
+    #cboxTopCenter{height:21px; background:url(@templates_base@/inc/js/colorbox/images/border.png) 0 0 repeat-x;}
+    #cboxBottomCenter{height:21px; background:url(@templates_base@/inc/js/colorbox/images/border.png) 0 -29px repeat-x;}
+    #cboxContent{background:#fff; overflow:hidden;}
+        .cboxIframe{background:#fff;}
+        #cboxError{padding:50px; border:1px solid #ccc;}
+        #cboxLoadedContent{margin-bottom:28px;}
+        #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
+        #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
+        #cboxLoadingOverlay{background:url(@templates_base@/inc/js/colorbox/images/loading_background.png) no-repeat center center;}
+        #cboxLoadingGraphic{background:url(@templates_base@/inc/js/colorbox/images/loading.gif) no-repeat center center;}
+
+        /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+        #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
+
+        /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+        #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
+        #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
+        #cboxPrevious{position:absolute; bottom:0; left:0; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxPrevious:hover{background-position:-75px -25px;}
+        #cboxNext{position:absolute; bottom:0; left:27px; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxNext:hover{background-position:-50px -25px;}
+        #cboxClose{position:absolute; bottom:0; right:0; background:url(@templates_base@/inc/js/colorbox/images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxClose:hover{background-position:-25px -25px;}
+
+/*
+  The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+  when an alpha filter (opacity change) is set on the element or ancestor element.  This style is not applied to or needed in IE9.
+  See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
\ No newline at end of file

Property changes on: branches/1.0.x/inc/js/colorbox/jquery.colorbox.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/form_manager.js
===================================================================
--- branches/1.0.x/inc/js/form_manager.js	(revision 15800)
+++ branches/1.0.x/inc/js/form_manager.js	(revision 15801)
@@ -1,610 +1,890 @@
 function FormManager() { }
 
 FormManager.init = function ($settings) {
 	$.ajaxSetup( {cache: false} );
 
 	this.url = '';
 	this.fieldMask = '#PREFIX#[#ID#][#FIELD_NAME#]';
 
 	this.noErrorsHTML = '';
 	this.checkTimeout = 1000;
 	this.pendingChecks = {};
 
 	this.fields = {};
 	this.errors = {};
 	this.fieldTypes = {};
 	this.forms = {};
 	this.fieldWatermarks = {};
 
 	this.xhrRequests = [];
+	this.windowScope = 'a.form-manager-window, area.form-manager-window, input.form-manager-window';
+	this.windowManager = undefined;
 
 	$.extend(this, $settings);
-}
+
+	if ( this.windowManager === undefined ) {
+		this.windowManager = new FormManager_WindowManagerExample();
+	}
+
+	$(document).ready(function () {
+		FormManager.windowManager.init(FormManager.windowScope);
+	});
+};
 
 FormManager.resetFields = function ($prefix) {
 	this.fields[$prefix] = [];
-}
+};
 
 FormManager.registerField = function ($prefix, $field, $watermark, $field_type) {
 	// fields are registered before form -> store them in separate array
 	if (!this.fields[$prefix]) {
 		this.fields[$prefix] = [];
 	}
 
 	if ($watermark === undefined) {
 		$watermark = '';
 	}
 
 	this.fieldWatermarks[$prefix + '_' + $field] = $watermark;
 
 	this.fields[$prefix].push($field);
 
 	if ($field_type !== undefined) {
 		this.fieldTypes[$prefix + '_' + $field] = $field_type;
 	}
-}
+};
 
 FormManager.unregisterField = function ($prefix, $field) {
 	var $field_index = array_search($field, this.fields[$prefix]);
 
 	this.fields[$prefix].splice($field_index, 1);
 
 	delete this.fieldWatermarks[$prefix + '_' + $field];
 	delete this.fieldTypes[$prefix + '_' + $field];
-}
-
+};
 
 FormManager.getFieldMask = function ($prefix) {
 	return this.fieldMask.replace('#PREFIX#', $prefix).replace('#ID#', this.form_param($prefix, 'id'));
-}
+};
 
 FormManager.getField = function ($prefix, $field, $prepend, $append) {
 	if ($prepend === undefined) {
 		$prepend = '';
 	}
 
 	if ($append === undefined) {
 		$append = '';
 	}
 
 	var $control_id = this.getFieldMask($prefix).replace('#FIELD_NAME#', $field);
 
 	return document.getElementById($prepend + $control_id + $append);
-}
+};
 
 FormManager.getBlurFields = function ($prefix, $field) {
 	var $field_mask = this.getFieldMask($prefix);
 
 	switch ( this.fieldTypes[$prefix + '_' + $field] ) {
 		case 'swf_upload':
 			return this.getField($prefix, $field, undefined, '[json]');
 			break;
 
 		case 'date':
 			$field += '_date';
 			break;
 
 		case 'radio':
 			return $("input[name='" + jq($field_mask.replace('#FIELD_NAME#', $field)) + "']");
 			break;
 
 		case 'checkbox':
 			return get_control($field_mask, $field, undefined, '_cb');
 			break;
 
 		case 'checkboxes':
 			return $("input[id^='" + jq($field_mask.replace('#FIELD_NAME#', $field)) + "_']");
 			break;
 
 		case 'cc_expiration':
 			return $('select', this.getCell($prefix, $field, 'field'));
 			break;
 	}
 
 	return this.getField($prefix, $field);
-}
+};
 
 FormManager.registerForm = function ($settings) {
 	var $defaults = {
 		url: false,					// url for form submission
 		template: '',				// template to use instead of empty string
 		prefix: '',					// unit prefix, used in the form
 		enabled: true,				// form submit enabled
 		enabledTimer: null,			// timer that performs form-resubmit countdown
 		save_event: '',				// event to use for form data processing
 		id: 0,						// id of item being add/edited on a form
 		form_id: '',				// form id to work with
 		before_close: '',			// before window close callback
 		validation_failure: '',		// on validate failure callback
-		immediate_validation: true	// perfom validation on blur
-	}
+		immediate_validation: true	// perform validation on blur
+	};
 
 	this.forms[$settings.prefix] = {};
 	$.extend(this.forms[$settings.prefix], $defaults, $settings);
 
 	$(document).trigger('FormManager.Form.Ready', [$settings.prefix]);
 
-	// when form is registred, then all it's fields should also be registred
+	// when form is registered, then all it's fields should also be registered
 
 	if ( !this.form_param($settings.prefix, 'immediate_validation') ) {
 		return ;
 	}
 
 	var $me = this;
 
 	$( this.fields[$settings.prefix] ).each(
 		function () {
 			var $blur_fields = $( $me.getBlurFields($settings.prefix, this) ),
 				$event_name = $blur_fields.length == 1 ? 'blur' : 'click';
 
 			$blur_fields[$event_name](
 				function ($e) {
 					$me.checkField(this);
 				}
 			);
 		}
 	);
 
 	for (var $error_field in this.errors[$settings.prefix]) {
 		this.setFieldStatus($settings.prefix, $error_field, this.errors[$settings.prefix][$error_field]);
 	}
 
 	// custom: begin
 	$('input[title], select[title], textarea[title]', '#' + this.forms[$settings.prefix].form_id).qtip(
 		{
 			style: {
 				classes: 'ui-tooltip-light ui-tooltip-shadow'
 			},
 			position: {
 				my: 'left center',
 				at: 'right center'
 			},
 			show: {
 				event: 'focus'
 			}
 		}
 	);
 
 	$('img.help-icon', '#' + this.forms[$settings.prefix].form_id ).qtip(
 		{
 			style: {
 				classes: 'ui-tooltip-light ui-tooltip-shadow'
 			},
 			position: {
 				my: 'bottom left',
 				at: 'top center'
 			}
 		}
 	);
 	// custom: end
-}
+};
 
 FormManager.getURL = function ($prefix, $template, $event, $params) {
 	var $url = this.getUrlMask($prefix);
 
 	if ($template === undefined) {
 		$template = this.form_param($prefix, 'template');
 	}
 
 	$url = $url.replace('#TEMPLATE#', $template);
 
 	if ($event !== undefined) {
 		$url += ($url.indexOf('?') == -1 ? '?' : '&') + 'events[' + $prefix + ']=' + $event;
 	}
 
 	if ( typeof($params) == 'object' ) {
 		for (key in $params) {
 			$url += ($url.indexOf('?') == -1 ? '?' : '&') + key + '=' + $params[key];
 		}
 	}
 
 	return $url;
-}
+};
 
 FormManager.getUrlMask = function ($prefix) {
 	// 1. look in form config
 	var $url = this.form_param($prefix, 'url');
 
 	if ( !$url ) {
 		// 2. look at 'action' attribute of a form
 		$url = this.getForm($prefix).attr('action');
 	}
 
 	if ( !$url ) {
 		// 3. use global fallback url
 		$url = this.url;
 	}
 
 	return $url;
 };
 
 FormManager.processResponse = function ($prefix, $data, $add_params) {
 	// enable form back
 //	alert('enabling for for [' + $prefix + '] in processResponse');
 
 	if ( $add_params !== undefined ) {
 		$add_params.response = $data;
 	}
 	else {
 		$add_params = {response: $data};
 	}
 
 	this.clearErrors($prefix);
 	this.processUploadFields($prefix, $data);
 
 	if ($data.status == 'OK') {
 		var $next_template = this.getNextTemplate($prefix, $data);
 
 		if ( $next_template || $data.do_refresh || $data.redirect_to ) {
 			var $before_close = this.getFormParamOverride($prefix, 'before_close', $add_params);
 
 			if ( $.isFunction($before_close) ) {
 				$before_close.call(this, $data, $add_params);
 			}
 
 			if ( $next_template ) {
 				// load another template instead of current form
-				$('#TB_ajaxContent').html('').load( this.getURL($prefix, $next_template, undefined, $data.params) );
+				$(this.windowManager.getContentSelector())
+				.html('')
+				.load(this.getURL($prefix, $next_template, undefined, $data.params), function () {
+					$(document).trigger('FormManager.WindowManager.Ready');
+				});
 			}
 			else if ( $data.do_refresh ) {
 				// refresh whole page
 				window.location.reload(true);
 			}
 			else if ( $data.redirect_to ) {
 				// redirect to given page
 				window.location.assign($data.redirect_to);
 			}
 		}
 		else {
 			// close form without refreshing the page
 			this.closeForm($prefix, $data, $add_params);
 		}
 	}
 	else {
 		// set new errors
 		for ($field in $data.field_errors) {
 			this.setFieldStatus($prefix, $field, $data.field_errors[$field]);
 		}
 
 		var $validation_failure = this.form_param($prefix, 'validation_failure');
 
 		if ( $.isFunction($validation_failure) ) {
 			$validation_failure.call(this, $data, $add_params);
 		}
 	}
 
 	this.enableForm($prefix, true);
 
 //	var $me = this;
 //	setTimeout(function () { $me.enableForm($prefix, true); }, 1000);
-}
+};
 
 /**
  * Clear errors from all from fields
  *
  * @param $prefix
  */
 FormManager.clearErrors = function ($prefix) {
 	var $fields = this.fields[$prefix];
 
 	if (typeof($fields) == 'undefined') {
 		$fields = [];
 	}
 
 	this.errors[$prefix] = {};
 
 	for (var $i = 0; $i < $fields.length; $i++) {
 		this.setFieldStatus($prefix, $fields[$i]);
 	}
-}
+};
 
 FormManager.getNextTemplate = function ($prefix, $responce) {
 	if ( $responce.next_template && $responce.next_template != '' ) {
 		return $responce.next_template;
 	}
 	else if ( this.form_param($prefix, 'next_template') ) {
 		return this.form_param($prefix, 'next_template');
 	}
 
 	return false;
-}
+};
 
 FormManager.getCell = function ($prefix, $field_name, $cell_type) {
 	$field_name = $field_name.replace(/_(date|time)$/, '');
 
 	return this.getField($prefix, $field_name, undefined, '_' + $cell_type + '_cell');
-}
+};
 
 FormManager.setFieldStatus = function ($prefix, $field_name, $error_msg) {
-	var field_cell = this.getCell($prefix, $field_name, 'field');
-	var status_cell = this.getCell($prefix, $field_name, 'status');
+	var field_cell = $(this.getCell($prefix, $field_name, 'field'));
+	var status_cell = $(this.getCell($prefix, $field_name, 'status'));
 
 	if ( $error_msg === undefined || !$error_msg ) {
 		$error_msg = '';
 	}
 
-	if ( !field_cell ) {
+	if ( field_cell.length == 0 ) {
 		if (!this.errors[$prefix]) {
 			this.errors[$prefix] = {};
 		}
 
 		this.errors[$prefix][$field_name] = $error_msg;
 
 		/*if(typeof console === 'object') {
 			console.log('FormManager: Error field "' + $field_name + '" missing.');
 		}*/
 
 		return ;
 	}
 
 	if ($error_msg === undefined || !$error_msg) {
 		// show OK
-		$(field_cell).parents('p:first').removeClass('error'); //.addClass('ok');
-		$(status_cell)/*.removeClass('field-error')*/.html(this.noErrorsHTML);
+		field_cell.parents('p:first').removeClass('error'); //.addClass('ok');
+		status_cell/*.removeClass('field-error')*/.html(this.noErrorsHTML);
 
 		var $fields = this.fields[$prefix];
 
 		for (var $i = 0; $i < $fields.length; $i++) {
 			if ( this.fieldHasError($prefix, $fields[$i]) ) {
 				return ;
 			}
 		}
 	}
 	else {
 		// show error message
-		$(field_cell).parents('p:first')/*.removeClass('ok')*/.addClass('error');
-		$(status_cell)/*.addClass('field-error')*/.html($error_msg);
+		field_cell.parents('p:first')/*.removeClass('ok')*/.addClass('error');
+		status_cell/*.addClass('field-error')*/.html($error_msg);
 	}
-}
+};
 
 FormManager.fieldHasError = function ($prefix, $field) {
 	var status_cell = this.getField($prefix, $field, undefined, '_status_cell');
 
 	return $.trim( $(status_cell).html() ) != $.trim( this.noErrorsHTML );
-}
+};
 
 FormManager.checkField = function ($input, $delayed) {
 	if ( !$input.id.match(/^(.*?)\[.*?\]\[(.*?)\].*?$/) ) {
 		return ;
 	}
 
 	var $prefix = RegExp.$1;
 	var $field = RegExp.$2.replace(/(_date|_time)$/, '');
 
 	if ( $field.match(/(.*)(Month|Year)$/) && this.fieldTypes[$prefix + '_' + RegExp.$1 + 'Date'] == 'cc_expiration' ) {
 		$field = RegExp.$1 + 'Date';
 	}
 
 	if ( this.pendingChecks[$field] ) {
 		clearTimeout( this.pendingChecks[$field] );
 		delete this.pendingChecks[$field];
 	}
 
 	var $me = this;
 
 	this.pendingChecks[$field] = setTimeout(
 		function () {
 			$me.validateField($prefix, $field, $input)
 		},
 		($delayed === true ? this.checkTimeout : 0)
 	);
-}
+};
 
 FormManager.validateField = function ($prefix, $field, $input) {
 	var	$me = this,
 		form = this.getForm($prefix);
 
 	var $request = $.post(
 		this.getURL($prefix, undefined, 'OnValidateField') + '&field=' + encodeURIComponent($field) + '&' + $input.name + '=' + encodeURIComponent($input.value),
 		this._getFormFields($prefix),
 		function ($data) {
 			$data = eval('(' + $data + ')');
 			$me.setFieldStatus($prefix, $field, $data.status == 'OK' ? undefined : $data.status);
 			$me.processUploadFields($prefix, $data);
 
 			$("input[type='submit']", form).attr('disabled', !$.isArray($data.other_errors) ); // custom
 		}
 	);
 
 	this.xhrRequests.push($request);
 };
 
 FormManager.processUploadFields = function ($prefix, $response) {
 	if ( $response['uploader_info'] === undefined || $.isArray($response['uploader_info']) ) {
 		// no data (event don't support that) OR empty array (no uploader fields on form)
 		return;
 	}
 
 	var	$field_mask = this.getFieldMask($prefix);
 
 	$.each($response['uploader_info'], function ($field_name, $field_data) {
 		var $uploader_id = $field_mask.replace('#FIELD_NAME#', $field_name);
 
 		$(document).trigger('UploadsManager.Uploader.' + crc32($uploader_id), ['refreshQueue', $field_data]);
 	});
 };
 
 FormManager.form_param = function ($prefix, $param, $value) {
 	if ( this.forms[$prefix] === undefined ) {
 		return '';
 	}
 
 	if ($value === undefined) {
 		return this.forms[$prefix][$param];
 	}
 
 	this.forms[$prefix][$param] = $value;
-}
+};
 
 FormManager.getFormParamOverride = function ($prefix, $param, $overrides) {
 	if ( $overrides[$param] !== undefined ) {
 		return $overrides[$param];
 	}
 
 	return this.form_param($prefix, $param);
-}
+};
 
 /* === related to form opening/closing/submitting === */
 FormManager.openForm = function ($prefix, $template, $width, $height, $source_form, $params) {
 	var $url = this.getURL($prefix, $template, undefined, $params);
 
-	$url += ($url.indexOf('?') == -1 ? '?' : '&') + 'width=' + $width + '&height=' + $height + '&modal=true';
-
-	var $tb_settings = {url: $url};
-
-	if ($source_form !== undefined) {
-		$tb_settings.postParams = $($source_form).serialize();
-	}
-
-	TB.show($tb_settings);
-}
+	this.windowManager.open($url, $width, $height, $source_form);
+};
 
 FormManager.validateAll = function ($prefix, $status) {
 	var $fields = this.fields[$prefix];
 
 	for (var $i = 0; $i < $fields.length; $i++) {
 		this.setFieldStatus($prefix, $fields[$i], $status);
 	}
-}
+};
 
 FormManager.closeForm = function ($prefix, $data, $add_params) {
 	if ( $data === undefined ) {
 		$data = {};
 	}
 
 	if ( $add_params === undefined ) {
 		$add_params = {};
 	}
 
 	var $before_close = this.getFormParamOverride($prefix, 'before_close', $add_params);
 
 	this.cancelXHRRequests();
 	this.validateAll($prefix);
 
 	if ( $.isFunction($before_close) ) {
 		var $result = $before_close.call(this, $data, $add_params);
 
 		if ($result === false) {
 			return;
 		}
 	}
 
-	TB.remove();
-}
+	this.windowManager.close();
+};
 
 FormManager._getFormFields = function ($prefix) {
 	var	$old_values = {},
 		$fields = this.fields[$prefix];
 
 	if (typeof($fields) == 'undefined') {
 		$fields = [];
 	}
 
 	// remove watermarks from input fields
 	for (var $i = 0; $i < $fields.length; $i++) {
 		var	$control = this.getField($prefix, $fields[$i]),
 			$watermark = this.fieldWatermarks[ $prefix + '_' + $fields[$i] ];
 
 		if ( $control ) {
 			$old_values[$fields[$i]] = $control.value;
 
 			if ( $watermark !== undefined && $control.value == $watermark ) {
 				$control.value = '';
 			}
 		}
 	}
 
 	var	$form_fields = this.getForm($prefix).serialize();
 
 	// restore original values into input fields
 	for (var $i = 0; $i < $fields.length; $i++) {
 		var $control = this.getField($prefix, $fields[$i]);
 
 		if ( $control ) {
 			$control.value = $old_values[$fields[$i]];
 		}
 	}
 
 	return $form_fields;
-}
+};
 
 FormManager.getForm = function ($prefix) {
 	var $form_id = this.form_param($prefix, 'form_id');
 
 	return $('#' + jq($form_id));
 };
 
 FormManager.enableForm = function ($prefix, $enabled) {
 	if ($enabled === undefined) {
 		$enabled = true;
 	}
 
 	if ($enabled) {
 		clearTimeout( this.form_param($prefix, 'enabledTimer') );
 		this.form_param($prefix, 'enabledTimer', null);
 	}
 	else {
 		var $me = this;
 
 		// set timer for 10 seconds to enable form back (just in case if ajax responce fails)
 		var $timer = setTimeout(
 			function () {
 //				alert('enabling for for [' + $prefix + '] in setTimeout');
 				$me.enableForm($prefix, true);
 			}
 			, 10000
 		);
 
 		this.form_param($prefix, 'enabledTimer', $timer);
 	}
 
 	this.form_param($prefix, 'enabled', $enabled);
-}
+};
 
 FormManager.cancelXHRRequests = function () {
 	while ( this.xhrRequests.length > 0 ) {
 		this.xhrRequests.shift().abort();
 	}
-}
+};
 
 FormManager.submitForm = function ($prefix, $add_params) {
 	if ( !this.form_param($prefix, 'enabled') ) {
 		return ;
 	}
 
 	// disable form
 	this.enableForm($prefix, false);
 
 	var $me = this;
 	this.cancelXHRRequests();
 
 	$.post(
 		this.getURL( $prefix, undefined, this.form_param($prefix, 'save_event') ),
 		this._getFormFields($prefix),
 		function ($data) {
-			var $redirect = TB.parseRedirect($data);
+			var $redirect = FormManager.parseRedirect($data);
 
 			if ( $redirect !== false ) {
 				window.location.href = $redirect;
 
 				return ;
 			}
 
 			$me.processResponse($prefix, eval('(' + $data + ')'), $add_params);
 		}
 	)
-}
+};
 
 FormManager.beforeClose = function () {
 	this.cancelXHRRequests();
 
 	for (var $prefix in this.forms) {
 		var $before_close = this.form_param($prefix, 'before_close');
 
 		this.clearErrors($prefix);
 
 		if ( $.isFunction($before_close) ) {
 			$before_close.call(this, {}, {});
 		}
 	}
-}
\ No newline at end of file
+};
+
+FormManager.parseRedirect = function ($data) {
+	var $match_redirect = new RegExp('^#redirect#(.*?)($|\\s.*)').exec($data);
+
+	if ( $match_redirect != null ) {
+		// redirect to external template requested
+		return $match_redirect[1];
+	}
+
+	return false;
+};
+
+FormManager.parseQueryString = function ($url) {
+	var $query_string = {};
+
+	$url.replace(
+		new RegExp('([^?=&]+)(=([^&]*))?', 'g'),
+		function($0, $1, $2, $3) {
+			$query_string[$1] = decodeURIComponent($3);
+		}
+	);
+
+	return $query_string;
+};
+
+/* ==================================================================== */
+
+function FormManager_WindowManagerExample() {
+
+}
+
+FormManager_WindowManagerExample.prototype.init = function ($window_scope, $context) {
+	throw 'FormManager_WindowManagerExample: Please use other window manager.';
+};
+
+FormManager_WindowManagerExample.prototype.open = function ($url, $width, $height, $source_form) {
+
+};
+
+FormManager_WindowManagerExample.prototype.getDefaultOptions = function ($url, $width, $height) {
+
+};
+
+FormManager_WindowManagerExample.prototype.close = function () {
+
+};
+
+FormManager_WindowManagerExample.prototype.getContentSelector = function () {
+
+};
+
+/* ==================================================================== */
+
+function FormManager_WindowManagerThickBox() {
+	this.lastWindowScope = '';
+}
+
+FormManager_WindowManagerThickBox.prototype.init = function ($window_scope, $context) {
+	var $me = this;
+
+	$(this.getWindowScope($window_scope), $context).click(function ($e) {
+		var $options = $me.getDefaultOptions(this.href || this.alt);
+
+		$.extend($options, {
+			caption: this.title || this.name || null,
+			imageGroup: this.rel || false
+		});
+
+		TB.show($options);
+		this.blur();
+
+		$e.preventDefault();
+	});
+};
+
+FormManager_WindowManagerThickBox.prototype.getWindowScope = function ($window_scope) {
+	if ( $window_scope !== undefined ) {
+		this.lastWindowScope = $window_scope;
+
+		return $window_scope;
+	}
+
+	return this.lastWindowScope;
+};
+
+FormManager_WindowManagerThickBox.prototype.open = function ($url, $width, $height, $source_form) {
+	$url += ($url.indexOf('?') == -1 ? '?' : '&') + 'width=' + $width + '&height=' + $height + '&modal=true';
+
+	var $options = this.getDefaultOptions($url, $width, $height);
+
+	if ( $source_form !== undefined ) {
+		$options.postParams = $($source_form).serialize();
+	}
+
+	TB.show($options);
+};
+
+FormManager_WindowManagerThickBox.prototype.getDefaultOptions = function ($url, $width, $height) {
+	var $me = this;
+
+	return {
+		url: $url,
+		onAfterShow: function () {
+			$me.init(undefined, $me.getContentSelector());
+
+			// document.ready equivalent for ajax loaded windows
+			$(document).trigger('FormManager.WindowManager.Ready');
+		}
+	};
+};
+
+FormManager_WindowManagerThickBox.prototype.close = function () {
+	TB.remove();
+};
+
+FormManager_WindowManagerThickBox.prototype.getContentSelector = function () {
+	return '#TB_ajaxContent';
+};
+
+/* ==================================================================== */
+
+function FormManager_WindowManagerColorBox() {
+	this.lastWindowScope = '';
+}
+
+FormManager_WindowManagerColorBox.prototype.init = function ($window_scope, $context) {
+	var $me = this;
+
+	$(this.getWindowScope($window_scope), $context).each(function () {
+		var $url = this.href || this.alt,
+			$query_string = FormManager.parseQueryString($url),
+			$options = $me.getDefaultOptions(
+				this.href || this.alt,
+				$query_string['width'] !== undefined ? $query_string['width'] : false,
+				$query_string['height'] !== undefined ? $query_string['height'] : false
+			);
+
+		$.extend($options, {
+			title: this.title || this.name || false
+		});
+
+		$(this).colorbox($options);
+	});
+};
+
+FormManager_WindowManagerColorBox.prototype.getWindowScope = function ($window_scope) {
+	if ( $window_scope !== undefined ) {
+		this.lastWindowScope = $window_scope;
+
+		return $window_scope;
+	}
+
+	return this.lastWindowScope;
+};
+
+FormManager_WindowManagerColorBox.prototype.open = function ($url, $width, $height, $source_form) {
+	var $options = this.getDefaultOptions($url, $width, $height);
+
+	$.extend($options, {
+		// modal analog
+		escKey: false,
+		overlayClose: false
+	});
+
+	if ( $source_form !== undefined ) {
+		$options.data = $($source_form).serialize();
+	}
+
+	$.colorbox($options);
+};
+
+FormManager_WindowManagerColorBox.prototype.getDefaultOptions = function ($url, $width, $height) {
+	var $me = this;
+
+	return {
+		href: $url,
+
+		innerWidth: $width,
+		innerHeight: $height,
+
+		onComplete: function () {
+			$me.init(undefined, $me.getContentSelector());
+
+			// document.ready equivalent for ajax loaded windows
+			$(document).trigger('FormManager.WindowManager.Ready');
+		}
+	};
+};
+
+FormManager_WindowManagerColorBox.prototype.close = function () {
+	$.colorbox.close();
+};
+
+FormManager_WindowManagerColorBox.prototype.getContentSelector = function () {
+	return '#cboxLoadedContent';
+};
+
+/* ==================================================================== */
+
+function FormManager_WindowManagerFancyBox() {
+	this.lastWindowScope = '';
+}
+FormManager_WindowManagerFancyBox.prototype.init = function ($window_scope, $context) {
+	var $me = this;
+
+	$(this.getWindowScope($window_scope), $context).each(function () {
+		var $url = this.href || this.alt,
+			$query_string = FormManager.parseQueryString($url),
+			$options = $me.getDefaultOptions(
+				$url,
+				$query_string['width'] !== undefined ? $query_string['width'] : false,
+				$query_string['height'] !== undefined ? $query_string['height'] : false
+			);
+
+		$.extend($options, {
+			title: this.title || this.name || false
+		});
+
+		$(this).fancybox($options);
+	});
+};
+
+FormManager_WindowManagerFancyBox.prototype.getWindowScope = function ($window_scope) {
+	if ( $window_scope !== undefined ) {
+		this.lastWindowScope = $window_scope;
+
+		return $window_scope;
+	}
+
+	return this.lastWindowScope;
+};
+
+FormManager_WindowManagerFancyBox.prototype.open = function ($url, $width, $height, $source_form) {
+	var $options = this.getDefaultOptions($url, $width, $height);
+
+	$.extend($options, {
+		modal: true
+	});
+
+	if ($source_form !== undefined) {
+		$options['ajax'] = {
+			data: $($source_form).serialize()
+		};
+	}
+
+	$.fancybox.open($options);
+};
+
+FormManager_WindowManagerFancyBox.prototype.getDefaultOptions = function ($url, $width, $height) {
+	var $me = this;
+
+	return {
+		href: $url,
+		type : $.fancybox.isImage($url) ? 'image' : 'ajax',
+
+		width: $width,
+		height: $height,
+		autoSize: false,
+
+		afterShow: function () {
+			$me.init(undefined, $me.getContentSelector());
+
+			// document.ready equivalent for ajax loaded windows
+			$(document).trigger('FormManager.WindowManager.Ready');
+		}
+	};
+};
+
+FormManager_WindowManagerFancyBox.prototype.close = function () {
+	$.fancybox.close();
+};
+
+FormManager_WindowManagerFancyBox.prototype.getContentSelector = function () {
+	return '.fancybox-inner';
+};
Index: branches/1.0.x/inc/js/fancybox/jquery.fancybox.js
===================================================================
--- branches/1.0.x/inc/js/fancybox/jquery.fancybox.js	(nonexistent)
+++ branches/1.0.x/inc/js/fancybox/jquery.fancybox.js	(revision 15801)
@@ -0,0 +1,1983 @@
+/*!
+ * fancyBox - jQuery Plugin
+ * version: 2.1.4 (Thu, 10 Jan 2013)
+ * @requires jQuery v1.6 or later
+ *
+ * Examples at http://fancyapps.com/fancybox/
+ * License: www.fancyapps.com/fancybox/#license
+ *
+ * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
+ *
+ */
+
+(function (window, document, $, undefined) {
+	"use strict";
+
+	var W = $(window),
+		D = $(document),
+		F = $.fancybox = function () {
+			F.open.apply( this, arguments );
+		},
+		IE =  navigator.userAgent.match(/msie/),
+		didUpdate = null,
+		isTouch	  = document.createTouch !== undefined,
+
+		isQuery	= function(obj) {
+			return obj && obj.hasOwnProperty && obj instanceof $;
+		},
+		isString = function(str) {
+			return str && $.type(str) === "string";
+		},
+		isPercentage = function(str) {
+			return isString(str) && str.indexOf('%') > 0;
+		},
+		isScrollable = function(el) {
+			return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));
+		},
+		getScalar = function(orig, dim) {
+			var value = parseInt(orig, 10) || 0;
+
+			if (dim && isPercentage(orig)) {
+				value = F.getViewport()[ dim ] / 100 * value;
+			}
+
+			return Math.ceil(value);
+		},
+		getValue = function(value, dim) {
+			return getScalar(value, dim) + 'px';
+		};
+
+	$.extend(F, {
+		// The current version of fancyBox
+		version: '2.1.4',
+
+		defaults: {
+			padding : 15,
+			margin  : 20,
+
+			width     : 800,
+			height    : 600,
+			minWidth  : 100,
+			minHeight : 100,
+			maxWidth  : 9999,
+			maxHeight : 9999,
+
+			autoSize   : true,
+			autoHeight : false,
+			autoWidth  : false,
+
+			autoResize  : true,
+			autoCenter  : !isTouch,
+			fitToView   : true,
+			aspectRatio : false,
+			topRatio    : 0.5,
+			leftRatio   : 0.5,
+
+			scrolling : 'auto', // 'auto', 'yes' or 'no'
+			wrapCSS   : '',
+
+			arrows     : true,
+			closeBtn   : true,
+			closeClick : false,
+			nextClick  : false,
+			mouseWheel : true,
+			autoPlay   : false,
+			playSpeed  : 3000,
+			preload    : 3,
+			modal      : false,
+			loop       : true,
+
+			ajax  : {
+				dataType : 'html',
+				headers  : { 'X-fancyBox': true }
+			},
+			iframe : {
+				scrolling : 'auto',
+				preload   : true
+			},
+			swf : {
+				wmode: 'transparent',
+				allowfullscreen   : 'true',
+				allowscriptaccess : 'always'
+			},
+
+			keys  : {
+				next : {
+					13 : 'left', // enter
+					34 : 'up',   // page down
+					39 : 'left', // right arrow
+					40 : 'up'    // down arrow
+				},
+				prev : {
+					8  : 'right',  // backspace
+					33 : 'down',   // page up
+					37 : 'right',  // left arrow
+					38 : 'down'    // up arrow
+				},
+				close  : [27], // escape key
+				play   : [32], // space - start/stop slideshow
+				toggle : [70]  // letter "f" - toggle fullscreen
+			},
+
+			direction : {
+				next : 'left',
+				prev : 'right'
+			},
+
+			scrollOutside  : true,
+
+			// Override some properties
+			index   : 0,
+			type    : null,
+			href    : null,
+			content : null,
+			title   : null,
+
+			// HTML templates
+			tpl: {
+				wrap     : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',
+				image    : '<img class="fancybox-image" src="{href}" alt="" />',
+				iframe   : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>',
+				error    : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
+				closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',
+				next     : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
+				prev     : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
+			},
+
+			// Properties for each animation type
+			// Opening fancyBox
+			openEffect  : 'fade', // 'elastic', 'fade' or 'none'
+			openSpeed   : 250,
+			openEasing  : 'swing',
+			openOpacity : true,
+			openMethod  : 'zoomIn',
+
+			// Closing fancyBox
+			closeEffect  : 'fade', // 'elastic', 'fade' or 'none'
+			closeSpeed   : 250,
+			closeEasing  : 'swing',
+			closeOpacity : true,
+			closeMethod  : 'zoomOut',
+
+			// Changing next gallery item
+			nextEffect : 'elastic', // 'elastic', 'fade' or 'none'
+			nextSpeed  : 250,
+			nextEasing : 'swing',
+			nextMethod : 'changeIn',
+
+			// Changing previous gallery item
+			prevEffect : 'elastic', // 'elastic', 'fade' or 'none'
+			prevSpeed  : 250,
+			prevEasing : 'swing',
+			prevMethod : 'changeOut',
+
+			// Enable default helpers
+			helpers : {
+				overlay : true,
+				title   : true
+			},
+
+			// Callbacks
+			onCancel     : $.noop, // If canceling
+			beforeLoad   : $.noop, // Before loading
+			afterLoad    : $.noop, // After loading
+			beforeShow   : $.noop, // Before changing in current item
+			afterShow    : $.noop, // After opening
+			beforeChange : $.noop, // Before changing gallery item
+			beforeClose  : $.noop, // Before closing
+			afterClose   : $.noop  // After closing
+		},
+
+		//Current state
+		group    : {}, // Selected group
+		opts     : {}, // Group options
+		previous : null,  // Previous element
+		coming   : null,  // Element being loaded
+		current  : null,  // Currently loaded element
+		isActive : false, // Is activated
+		isOpen   : false, // Is currently open
+		isOpened : false, // Have been fully opened at least once
+
+		wrap  : null,
+		skin  : null,
+		outer : null,
+		inner : null,
+
+		player : {
+			timer    : null,
+			isActive : false
+		},
+
+		// Loaders
+		ajaxLoad   : null,
+		imgPreload : null,
+
+		// Some collections
+		transitions : {},
+		helpers     : {},
+
+		/*
+		 *	Static methods
+		 */
+
+		open: function (group, opts) {
+			if (!group) {
+				return;
+			}
+
+			if (!$.isPlainObject(opts)) {
+				opts = {};
+			}
+
+			// Close if already active
+			if (false === F.close(true)) {
+				return;
+			}
+
+			// Normalize group
+			if (!$.isArray(group)) {
+				group = isQuery(group) ? $(group).get() : [group];
+			}
+
+			// Recheck if the type of each element is `object` and set content type (image, ajax, etc)
+			$.each(group, function(i, element) {
+				var obj = {},
+					href,
+					title,
+					content,
+					type,
+					rez,
+					hrefParts,
+					selector;
+
+				if ($.type(element) === "object") {
+					// Check if is DOM element
+					if (element.nodeType) {
+						element = $(element);
+					}
+
+					if (isQuery(element)) {
+						obj = {
+							href    : element.data('fancybox-href') || element.attr('href'),
+							title   : element.data('fancybox-title') || element.attr('title'),
+							isDom   : true,
+							element : element
+						};
+
+						if ($.metadata) {
+							$.extend(true, obj, element.metadata());
+						}
+
+					} else {
+						obj = element;
+					}
+				}
+
+				href  = opts.href  || obj.href || (isString(element) ? element : null);
+				title = opts.title !== undefined ? opts.title : obj.title || '';
+
+				content = opts.content || obj.content;
+				type    = content ? 'html' : (opts.type  || obj.type);
+
+				if (!type && obj.isDom) {
+					type = element.data('fancybox-type');
+
+					if (!type) {
+						rez  = element.prop('class').match(/fancybox\.(\w+)/);
+						type = rez ? rez[1] : null;
+					}
+				}
+
+				if (isString(href)) {
+					// Try to guess the content type
+					if (!type) {
+						if (F.isImage(href)) {
+							type = 'image';
+
+						} else if (F.isSWF(href)) {
+							type = 'swf';
+
+						} else if (href.charAt(0) === '#') {
+							type = 'inline';
+
+						} else if (isString(element)) {
+							type    = 'html';
+							content = element;
+						}
+					}
+
+					// Split url into two pieces with source url and content selector, e.g,
+					// "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
+					if (type === 'ajax') {
+						hrefParts = href.split(/\s+/, 2);
+						href      = hrefParts.shift();
+						selector  = hrefParts.shift();
+					}
+				}
+
+				if (!content) {
+					if (type === 'inline') {
+						if (href) {
+							content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
+
+						} else if (obj.isDom) {
+							content = element;
+						}
+
+					} else if (type === 'html') {
+						content = href;
+
+					} else if (!type && !href && obj.isDom) {
+						type    = 'inline';
+						content = element;
+					}
+				}
+
+				$.extend(obj, {
+					href     : href,
+					type     : type,
+					content  : content,
+					title    : title,
+					selector : selector
+				});
+
+				group[ i ] = obj;
+			});
+
+			// Extend the defaults
+			F.opts = $.extend(true, {}, F.defaults, opts);
+
+			// All options are merged recursive except keys
+			if (opts.keys !== undefined) {
+				F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
+			}
+
+			F.group = group;
+
+			return F._start(F.opts.index);
+		},
+
+		// Cancel image loading or abort ajax request
+		cancel: function () {
+			var coming = F.coming;
+
+			if (!coming || false === F.trigger('onCancel')) {
+				return;
+			}
+
+			F.hideLoading();
+
+			if (F.ajaxLoad) {
+				F.ajaxLoad.abort();
+			}
+
+			F.ajaxLoad = null;
+
+			if (F.imgPreload) {
+				F.imgPreload.onload = F.imgPreload.onerror = null;
+			}
+
+			if (coming.wrap) {
+				coming.wrap.stop(true, true).trigger('onReset').remove();
+			}
+
+			F.coming = null;
+
+			// If the first item has been canceled, then clear everything
+			if (!F.current) {
+				F._afterZoomOut( coming );
+			}
+		},
+
+		// Start closing animation if is open; remove immediately if opening/closing
+		close: function (event) {
+			F.cancel();
+
+			if (false === F.trigger('beforeClose')) {
+				return;
+			}
+
+			F.unbindEvents();
+
+			if (!F.isActive) {
+				return;
+			}
+
+			if (!F.isOpen || event === true) {
+				$('.fancybox-wrap').stop(true).trigger('onReset').remove();
+
+				F._afterZoomOut();
+
+			} else {
+				F.isOpen = F.isOpened = false;
+				F.isClosing = true;
+
+				$('.fancybox-item, .fancybox-nav').remove();
+
+				F.wrap.stop(true, true).removeClass('fancybox-opened');
+
+				F.transitions[ F.current.closeMethod ]();
+			}
+		},
+
+		// Manage slideshow:
+		//   $.fancybox.play(); - toggle slideshow
+		//   $.fancybox.play( true ); - start
+		//   $.fancybox.play( false ); - stop
+		play: function ( action ) {
+			var clear = function () {
+					clearTimeout(F.player.timer);
+				},
+				set = function () {
+					clear();
+
+					if (F.current && F.player.isActive) {
+						F.player.timer = setTimeout(F.next, F.current.playSpeed);
+					}
+				},
+				stop = function () {
+					clear();
+
+					$('body').unbind('.player');
+
+					F.player.isActive = false;
+
+					F.trigger('onPlayEnd');
+				},
+				start = function () {
+					if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
+						F.player.isActive = true;
+
+						$('body').bind({
+							'afterShow.player onUpdate.player'   : set,
+							'onCancel.player beforeClose.player' : stop,
+							'beforeLoad.player' : clear
+						});
+
+						set();
+
+						F.trigger('onPlayStart');
+					}
+				};
+
+			if (action === true || (!F.player.isActive && action !== false)) {
+				start();
+			} else {
+				stop();
+			}
+		},
+
+		// Navigate to next gallery item
+		next: function ( direction ) {
+			var current = F.current;
+
+			if (current) {
+				if (!isString(direction)) {
+					direction = current.direction.next;
+				}
+
+				F.jumpto(current.index + 1, direction, 'next');
+			}
+		},
+
+		// Navigate to previous gallery item
+		prev: function ( direction ) {
+			var current = F.current;
+
+			if (current) {
+				if (!isString(direction)) {
+					direction = current.direction.prev;
+				}
+
+				F.jumpto(current.index - 1, direction, 'prev');
+			}
+		},
+
+		// Navigate to gallery item by index
+		jumpto: function ( index, direction, router ) {
+			var current = F.current;
+
+			if (!current) {
+				return;
+			}
+
+			index = getScalar(index);
+
+			F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];
+			F.router    = router || 'jumpto';
+
+			if (current.loop) {
+				if (index < 0) {
+					index = current.group.length + (index % current.group.length);
+				}
+
+				index = index % current.group.length;
+			}
+
+			if (current.group[ index ] !== undefined) {
+				F.cancel();
+
+				F._start(index);
+			}
+		},
+
+		// Center inside viewport and toggle position type to fixed or absolute if needed
+		reposition: function (e, onlyAbsolute) {
+			var current = F.current,
+				wrap    = current ? current.wrap : null,
+				pos;
+
+			if (wrap) {
+				pos = F._getPosition(onlyAbsolute);
+
+				if (e && e.type === 'scroll') {
+					delete pos.position;
+
+					wrap.stop(true, true).animate(pos, 200);
+
+				} else {
+					wrap.css(pos);
+
+					current.pos = $.extend({}, current.dim, pos);
+				}
+			}
+		},
+
+		update: function (e) {
+			var type = (e && e.type),
+				anyway = !type || type === 'orientationchange';
+
+			if (anyway) {
+				clearTimeout(didUpdate);
+
+				didUpdate = null;
+			}
+
+			if (!F.isOpen || didUpdate) {
+				return;
+			}
+
+			didUpdate = setTimeout(function() {
+				var current = F.current;
+
+				if (!current || F.isClosing) {
+					return;
+				}
+
+				F.wrap.removeClass('fancybox-tmp');
+
+				if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
+					F._setDimension();
+				}
+
+				if (!(type === 'scroll' && current.canShrink)) {
+					F.reposition(e);
+				}
+
+				F.trigger('onUpdate');
+
+				didUpdate = null;
+
+			}, (anyway && !isTouch ? 0 : 300));
+		},
+
+		// Shrink content to fit inside viewport or restore if resized
+		toggle: function ( action ) {
+			if (F.isOpen) {
+				F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;
+
+				// Help browser to restore document dimensions
+				if (isTouch) {
+					F.wrap.removeAttr('style').addClass('fancybox-tmp');
+
+					F.trigger('onUpdate');
+				}
+
+				F.update();
+			}
+		},
+
+		hideLoading: function () {
+			D.unbind('.loading');
+
+			$('#fancybox-loading').remove();
+		},
+
+		showLoading: function () {
+			var el, viewport;
+
+			F.hideLoading();
+
+			el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
+
+			// If user will press the escape-button, the request will be canceled
+			D.bind('keydown.loading', function(e) {
+				if ((e.which || e.keyCode) === 27) {
+					e.preventDefault();
+
+					F.cancel();
+				}
+			});
+
+			if (!F.defaults.fixed) {
+				viewport = F.getViewport();
+
+				el.css({
+					position : 'absolute',
+					top  : (viewport.h * 0.5) + viewport.y,
+					left : (viewport.w * 0.5) + viewport.x
+				});
+			}
+		},
+
+		getViewport: function () {
+			var locked = (F.current && F.current.locked) || false,
+				rez    = {
+					x: W.scrollLeft(),
+					y: W.scrollTop()
+				};
+
+			if (locked) {
+				rez.w = locked[0].clientWidth;
+				rez.h = locked[0].clientHeight;
+
+			} else {
+				// See http://bugs.jquery.com/ticket/6724
+				rez.w = isTouch && window.innerWidth  ? window.innerWidth  : W.width();
+				rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();
+			}
+
+			return rez;
+		},
+
+		// Unbind the keyboard / clicking actions
+		unbindEvents: function () {
+			if (F.wrap && isQuery(F.wrap)) {
+				F.wrap.unbind('.fb');
+			}
+
+			D.unbind('.fb');
+			W.unbind('.fb');
+		},
+
+		bindEvents: function () {
+			var current = F.current,
+				keys;
+
+			if (!current) {
+				return;
+			}
+
+			// Changing document height on iOS devices triggers a 'resize' event,
+			// that can change document height... repeating infinitely
+			W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);
+
+			keys = current.keys;
+
+			if (keys) {
+				D.bind('keydown.fb', function (e) {
+					var code   = e.which || e.keyCode,
+						target = e.target || e.srcElement;
+
+					// Skip esc key if loading, because showLoading will cancel preloading
+					if (code === 27 && F.coming) {
+						return false;
+					}
+
+					// Ignore key combinations and key events within form elements
+					if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
+						$.each(keys, function(i, val) {
+							if (current.group.length > 1 && val[ code ] !== undefined) {
+								F[ i ]( val[ code ] );
+
+								e.preventDefault();
+								return false;
+							}
+
+							if ($.inArray(code, val) > -1) {
+								F[ i ] ();
+
+								e.preventDefault();
+								return false;
+							}
+						});
+					}
+				});
+			}
+
+			if ($.fn.mousewheel && current.mouseWheel) {
+				F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {
+					var target = e.target || null,
+						parent = $(target),
+						canScroll = false;
+
+					while (parent.length) {
+						if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
+							break;
+						}
+
+						canScroll = isScrollable( parent[0] );
+						parent    = $(parent).parent();
+					}
+
+					if (delta !== 0 && !canScroll) {
+						if (F.group.length > 1 && !current.canShrink) {
+							if (deltaY > 0 || deltaX > 0) {
+								F.prev( deltaY > 0 ? 'down' : 'left' );
+
+							} else if (deltaY < 0 || deltaX < 0) {
+								F.next( deltaY < 0 ? 'up' : 'right' );
+							}
+
+							e.preventDefault();
+						}
+					}
+				});
+			}
+		},
+
+		trigger: function (event, o) {
+			var ret, obj = o || F.coming || F.current;
+
+			if (!obj) {
+				return;
+			}
+
+			if ($.isFunction( obj[event] )) {
+				ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
+			}
+
+			if (ret === false) {
+				return false;
+			}
+
+			if (obj.helpers) {
+				$.each(obj.helpers, function (helper, opts) {
+					if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
+						opts = $.extend(true, {}, F.helpers[helper].defaults, opts);
+
+						F.helpers[helper][event](opts, obj);
+					}
+				});
+			}
+
+			$.event.trigger(event + '.fb');
+		},
+
+		isImage: function (str) {
+			return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i);
+		},
+
+		isSWF: function (str) {
+			return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);
+		},
+
+		_start: function (index) {
+			var coming = {},
+				obj,
+				href,
+				type,
+				margin,
+				padding;
+
+			index = getScalar( index );
+			obj   = F.group[ index ] || null;
+
+			if (!obj) {
+				return false;
+			}
+
+			coming = $.extend(true, {}, F.opts, obj);
+
+			// Convert margin and padding properties to array - top, right, bottom, left
+			margin  = coming.margin;
+			padding = coming.padding;
+
+			if ($.type(margin) === 'number') {
+				coming.margin = [margin, margin, margin, margin];
+			}
+
+			if ($.type(padding) === 'number') {
+				coming.padding = [padding, padding, padding, padding];
+			}
+
+			// 'modal' propery is just a shortcut
+			if (coming.modal) {
+				$.extend(true, coming, {
+					closeBtn   : false,
+					closeClick : false,
+					nextClick  : false,
+					arrows     : false,
+					mouseWheel : false,
+					keys       : null,
+					helpers: {
+						overlay : {
+							closeClick : false
+						}
+					}
+				});
+			}
+
+			// 'autoSize' property is a shortcut, too
+			if (coming.autoSize) {
+				coming.autoWidth = coming.autoHeight = true;
+			}
+
+			if (coming.width === 'auto') {
+				coming.autoWidth = true;
+			}
+
+			if (coming.height === 'auto') {
+				coming.autoHeight = true;
+			}
+
+			/*
+			 * Add reference to the group, so it`s possible to access from callbacks, example:
+			 * afterLoad : function() {
+			 *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
+			 * }
+			 */
+
+			coming.group  = F.group;
+			coming.index  = index;
+
+			// Give a chance for callback or helpers to update coming item (type, title, etc)
+			F.coming = coming;
+
+			if (false === F.trigger('beforeLoad')) {
+				F.coming = null;
+
+				return;
+			}
+
+			type = coming.type;
+			href = coming.href;
+
+			if (!type) {
+				F.coming = null;
+
+				//If we can not determine content type then drop silently or display next/prev item if looping through gallery
+				if (F.current && F.router && F.router !== 'jumpto') {
+					F.current.index = index;
+
+					return F[ F.router ]( F.direction );
+				}
+
+				return false;
+			}
+
+			F.isActive = true;
+
+			if (type === 'image' || type === 'swf') {
+				coming.autoHeight = coming.autoWidth = false;
+				coming.scrolling  = 'visible';
+			}
+
+			if (type === 'image') {
+				coming.aspectRatio = true;
+			}
+
+			if (type === 'iframe' && isTouch) {
+				coming.scrolling = 'scroll';
+			}
+
+			// Build the neccessary markup
+			coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );
+
+			$.extend(coming, {
+				skin  : $('.fancybox-skin',  coming.wrap),
+				outer : $('.fancybox-outer', coming.wrap),
+				inner : $('.fancybox-inner', coming.wrap)
+			});
+
+			$.each(["Top", "Right", "Bottom", "Left"], function(i, v) {
+				coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
+			});
+
+			F.trigger('onReady');
+
+			// Check before try to load; 'inline' and 'html' types need content, others - href
+			if (type === 'inline' || type === 'html') {
+				if (!coming.content || !coming.content.length) {
+					return F._error( 'content' );
+				}
+
+			} else if (!href) {
+				return F._error( 'href' );
+			}
+
+			if (type === 'image') {
+				F._loadImage();
+
+			} else if (type === 'ajax') {
+				F._loadAjax();
+
+			} else if (type === 'iframe') {
+				F._loadIframe();
+
+			} else {
+				F._afterLoad();
+			}
+		},
+
+		_error: function ( type ) {
+			$.extend(F.coming, {
+				type       : 'html',
+				autoWidth  : true,
+				autoHeight : true,
+				minWidth   : 0,
+				minHeight  : 0,
+				scrolling  : 'no',
+				hasError   : type,
+				content    : F.coming.tpl.error
+			});
+
+			F._afterLoad();
+		},
+
+		_loadImage: function () {
+			// Reset preload image so it is later possible to check "complete" property
+			var img = F.imgPreload = new Image();
+
+			img.onload = function () {
+				this.onload = this.onerror = null;
+
+				F.coming.width  = this.width;
+				F.coming.height = this.height;
+
+				F._afterLoad();
+			};
+
+			img.onerror = function () {
+				this.onload = this.onerror = null;
+
+				F._error( 'image' );
+			};
+
+			img.src = F.coming.href;
+
+			if (img.complete !== true) {
+				F.showLoading();
+			}
+		},
+
+		_loadAjax: function () {
+			var coming = F.coming;
+
+			F.showLoading();
+
+			F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
+				url: coming.href,
+				error: function (jqXHR, textStatus) {
+					if (F.coming && textStatus !== 'abort') {
+						F._error( 'ajax', jqXHR );
+
+					} else {
+						F.hideLoading();
+					}
+				},
+				success: function (data, textStatus) {
+					if (textStatus === 'success') {
+						coming.content = data;
+
+						F._afterLoad();
+					}
+				}
+			}));
+		},
+
+		_loadIframe: function() {
+			var coming = F.coming,
+				iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))
+					.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)
+					.attr('src', coming.href);
+
+			// This helps IE
+			$(coming.wrap).bind('onReset', function () {
+				try {
+					$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();
+				} catch (e) {}
+			});
+
+			if (coming.iframe.preload) {
+				F.showLoading();
+
+				iframe.one('load', function() {
+					$(this).data('ready', 1);
+
+					// iOS will lose scrolling if we resize
+					if (!isTouch) {
+						$(this).bind('load.fb', F.update);
+					}
+
+					// Without this trick:
+					//   - iframe won't scroll on iOS devices
+					//   - IE7 sometimes displays empty iframe
+					$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
+
+					F._afterLoad();
+				});
+			}
+
+			coming.content = iframe.appendTo( coming.inner );
+
+			if (!coming.iframe.preload) {
+				F._afterLoad();
+			}
+		},
+
+		_preloadImages: function() {
+			var group   = F.group,
+				current = F.current,
+				len     = group.length,
+				cnt     = current.preload ? Math.min(current.preload, len - 1) : 0,
+				item,
+				i;
+
+			for (i = 1; i <= cnt; i += 1) {
+				item = group[ (current.index + i ) % len ];
+
+				if (item.type === 'image' && item.href) {
+					new Image().src = item.href;
+				}
+			}
+		},
+
+		_afterLoad: function () {
+			var coming   = F.coming,
+				previous = F.current,
+				placeholder = 'fancybox-placeholder',
+				current,
+				content,
+				type,
+				scrolling,
+				href,
+				embed;
+
+			F.hideLoading();
+
+			if (!coming || F.isActive === false) {
+				return;
+			}
+
+			if (false === F.trigger('afterLoad', coming, previous)) {
+				coming.wrap.stop(true).trigger('onReset').remove();
+
+				F.coming = null;
+
+				return;
+			}
+
+			if (previous) {
+				F.trigger('beforeChange', previous);
+
+				previous.wrap.stop(true).removeClass('fancybox-opened')
+					.find('.fancybox-item, .fancybox-nav')
+					.remove();
+			}
+
+			F.unbindEvents();
+
+			current   = coming;
+			content   = coming.content;
+			type      = coming.type;
+			scrolling = coming.scrolling;
+
+			$.extend(F, {
+				wrap  : current.wrap,
+				skin  : current.skin,
+				outer : current.outer,
+				inner : current.inner,
+				current  : current,
+				previous : previous
+			});
+
+			href = current.href;
+
+			switch (type) {
+				case 'inline':
+				case 'ajax':
+				case 'html':
+					if (current.selector) {
+						content = $('<div>').html(content).find(current.selector);
+
+					} else if (isQuery(content)) {
+						if (!content.data(placeholder)) {
+							content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() );
+						}
+
+						content = content.show().detach();
+
+						current.wrap.bind('onReset', function () {
+							if ($(this).find(content).length) {
+								content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
+							}
+						});
+					}
+				break;
+
+				case 'image':
+					content = current.tpl.image.replace('{href}', href);
+				break;
+
+				case 'swf':
+					content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>';
+					embed   = '';
+
+					$.each(current.swf, function(name, val) {
+						content += '<param name="' + name + '" value="' + val + '"></param>';
+						embed   += ' ' + name + '="' + val + '"';
+					});
+
+					content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>';
+				break;
+			}
+
+			if (!(isQuery(content) && content.parent().is(current.inner))) {
+				current.inner.append( content );
+			}
+
+			// Give a chance for helpers or callbacks to update elements
+			F.trigger('beforeShow');
+
+			// Set scrolling before calculating dimensions
+			current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
+
+			// Set initial dimensions and start position
+			F._setDimension();
+
+			F.reposition();
+
+			F.isOpen = false;
+			F.coming = null;
+
+			F.bindEvents();
+
+			if (!F.isOpened) {
+				$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
+
+			} else if (previous.prevMethod) {
+				F.transitions[ previous.prevMethod ]();
+			}
+
+			F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
+
+			F._preloadImages();
+		},
+
+		_setDimension: function () {
+			var viewport   = F.getViewport(),
+				steps      = 0,
+				canShrink  = false,
+				canExpand  = false,
+				wrap       = F.wrap,
+				skin       = F.skin,
+				inner      = F.inner,
+				current    = F.current,
+				width      = current.width,
+				height     = current.height,
+				minWidth   = current.minWidth,
+				minHeight  = current.minHeight,
+				maxWidth   = current.maxWidth,
+				maxHeight  = current.maxHeight,
+				scrolling  = current.scrolling,
+				scrollOut  = current.scrollOutside ? current.scrollbarWidth : 0,
+				margin     = current.margin,
+				wMargin    = getScalar(margin[1] + margin[3]),
+				hMargin    = getScalar(margin[0] + margin[2]),
+				wPadding,
+				hPadding,
+				wSpace,
+				hSpace,
+				origWidth,
+				origHeight,
+				origMaxWidth,
+				origMaxHeight,
+				ratio,
+				width_,
+				height_,
+				maxWidth_,
+				maxHeight_,
+				iframe,
+				body;
+
+			// Reset dimensions so we could re-check actual size
+			wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
+
+			wPadding = getScalar(skin.outerWidth(true)  - skin.width());
+			hPadding = getScalar(skin.outerHeight(true) - skin.height());
+
+			// Any space between content and viewport (margin, padding, border, title)
+			wSpace = wMargin + wPadding;
+			hSpace = hMargin + hPadding;
+
+			origWidth  = isPercentage(width)  ? (viewport.w - wSpace) * getScalar(width)  / 100 : width;
+			origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
+
+			if (current.type === 'iframe') {
+				iframe = current.content;
+
+				if (current.autoHeight && iframe.data('ready') === 1) {
+					try {
+						if (iframe[0].contentWindow.document.location) {
+							inner.width( origWidth ).height(9999);
+
+							body = iframe.contents().find('body');
+
+							if (scrollOut) {
+								body.css('overflow-x', 'hidden');
+							}
+
+							origHeight = body.height();
+						}
+
+					} catch (e) {}
+				}
+
+			} else if (current.autoWidth || current.autoHeight) {
+				inner.addClass( 'fancybox-tmp' );
+
+				// Set width or height in case we need to calculate only one dimension
+				if (!current.autoWidth) {
+					inner.width( origWidth );
+				}
+
+				if (!current.autoHeight) {
+					inner.height( origHeight );
+				}
+
+				if (current.autoWidth) {
+					origWidth = inner.width();
+				}
+
+				if (current.autoHeight) {
+					origHeight = inner.height();
+				}
+
+				inner.removeClass( 'fancybox-tmp' );
+			}
+
+			width  = getScalar( origWidth );
+			height = getScalar( origHeight );
+
+			ratio  = origWidth / origHeight;
+
+			// Calculations for the content
+			minWidth  = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
+			maxWidth  = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
+
+			minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
+			maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
+
+			// These will be used to determine if wrap can fit in the viewport
+			origMaxWidth  = maxWidth;
+			origMaxHeight = maxHeight;
+
+			if (current.fitToView) {
+				maxWidth  = Math.min(viewport.w - wSpace, maxWidth);
+				maxHeight = Math.min(viewport.h - hSpace, maxHeight);
+			}
+
+			maxWidth_  = viewport.w - wMargin;
+			maxHeight_ = viewport.h - hMargin;
+
+			if (current.aspectRatio) {
+				if (width > maxWidth) {
+					width  = maxWidth;
+					height = getScalar(width / ratio);
+				}
+
+				if (height > maxHeight) {
+					height = maxHeight;
+					width  = getScalar(height * ratio);
+				}
+
+				if (width < minWidth) {
+					width  = minWidth;
+					height = getScalar(width / ratio);
+				}
+
+				if (height < minHeight) {
+					height = minHeight;
+					width  = getScalar(height * ratio);
+				}
+
+			} else {
+				width = Math.max(minWidth, Math.min(width, maxWidth));
+
+				if (current.autoHeight && current.type !== 'iframe') {
+					inner.width( width );
+
+					height = inner.height();
+				}
+
+				height = Math.max(minHeight, Math.min(height, maxHeight));
+			}
+
+			// Try to fit inside viewport (including the title)
+			if (current.fitToView) {
+				inner.width( width ).height( height );
+
+				wrap.width( width + wPadding );
+
+				// Real wrap dimensions
+				width_  = wrap.width();
+				height_ = wrap.height();
+
+				if (current.aspectRatio) {
+					while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
+						if (steps++ > 19) {
+							break;
+						}
+
+						height = Math.max(minHeight, Math.min(maxHeight, height - 10));
+						width  = getScalar(height * ratio);
+
+						if (width < minWidth) {
+							width  = minWidth;
+							height = getScalar(width / ratio);
+						}
+
+						if (width > maxWidth) {
+							width  = maxWidth;
+							height = getScalar(width / ratio);
+						}
+
+						inner.width( width ).height( height );
+
+						wrap.width( width + wPadding );
+
+						width_  = wrap.width();
+						height_ = wrap.height();
+					}
+
+				} else {
+					width  = Math.max(minWidth,  Math.min(width,  width  - (width_  - maxWidth_)));
+					height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
+				}
+			}
+
+			if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
+				width += scrollOut;
+			}
+
+			inner.width( width ).height( height );
+
+			wrap.width( width + wPadding );
+
+			width_  = wrap.width();
+			height_ = wrap.height();
+
+			canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
+			canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
+
+			$.extend(current, {
+				dim : {
+					width	: getValue( width_ ),
+					height	: getValue( height_ )
+				},
+				origWidth  : origWidth,
+				origHeight : origHeight,
+				canShrink  : canShrink,
+				canExpand  : canExpand,
+				wPadding   : wPadding,
+				hPadding   : hPadding,
+				wrapSpace  : height_ - skin.outerHeight(true),
+				skinSpace  : skin.height() - height
+			});
+
+			if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
+				inner.height('auto');
+			}
+		},
+
+		_getPosition: function (onlyAbsolute) {
+			var current  = F.current,
+				viewport = F.getViewport(),
+				margin   = current.margin,
+				width    = F.wrap.width()  + margin[1] + margin[3],
+				height   = F.wrap.height() + margin[0] + margin[2],
+				rez      = {
+					position: 'absolute',
+					top  : margin[0],
+					left : margin[3]
+				};
+
+			if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
+				rez.position = 'fixed';
+
+			} else if (!current.locked) {
+				rez.top  += viewport.y;
+				rez.left += viewport.x;
+			}
+
+			rez.top  = getValue(Math.max(rez.top,  rez.top  + ((viewport.h - height) * current.topRatio)));
+			rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width)  * current.leftRatio)));
+
+			return rez;
+		},
+
+		_afterZoomIn: function () {
+			var current = F.current;
+
+			if (!current) {
+				return;
+			}
+
+			F.isOpen = F.isOpened = true;
+
+			F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
+
+			F.update();
+
+			// Assign a click event
+			if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
+				F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
+					if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
+						e.preventDefault();
+
+						F[ current.closeClick ? 'close' : 'next' ]();
+					}
+				});
+			}
+
+			// Create a close button
+			if (current.closeBtn) {
+				$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
+					e.preventDefault();
+
+					F.close();
+				});
+			}
+
+			// Create navigation arrows
+			if (current.arrows && F.group.length > 1) {
+				if (current.loop || current.index > 0) {
+					$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
+				}
+
+				if (current.loop || current.index < F.group.length - 1) {
+					$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
+				}
+			}
+
+			F.trigger('afterShow');
+
+			// Stop the slideshow if this is the last item
+			if (!current.loop && current.index === current.group.length - 1) {
+				F.play( false );
+
+			} else if (F.opts.autoPlay && !F.player.isActive) {
+				F.opts.autoPlay = false;
+
+				F.play();
+			}
+		},
+
+		_afterZoomOut: function ( obj ) {
+			obj = obj || F.current;
+
+			$('.fancybox-wrap').trigger('onReset').remove();
+
+			$.extend(F, {
+				group  : {},
+				opts   : {},
+				router : false,
+				current   : null,
+				isActive  : false,
+				isOpened  : false,
+				isOpen    : false,
+				isClosing : false,
+				wrap   : null,
+				skin   : null,
+				outer  : null,
+				inner  : null
+			});
+
+			F.trigger('afterClose', obj);
+		}
+	});
+
+	/*
+	 *	Default transitions
+	 */
+
+	F.transitions = {
+		getOrigPosition: function () {
+			var current  = F.current,
+				element  = current.element,
+				orig     = current.orig,
+				pos      = {},
+				width    = 50,
+				height   = 50,
+				hPadding = current.hPadding,
+				wPadding = current.wPadding,
+				viewport = F.getViewport();
+
+			if (!orig && current.isDom && element.is(':visible')) {
+				orig = element.find('img:first');
+
+				if (!orig.length) {
+					orig = element;
+				}
+			}
+
+			if (isQuery(orig)) {
+				pos = orig.offset();
+
+				if (orig.is('img')) {
+					width  = orig.outerWidth();
+					height = orig.outerHeight();
+				}
+
+			} else {
+				pos.top  = viewport.y + (viewport.h - height) * current.topRatio;
+				pos.left = viewport.x + (viewport.w - width)  * current.leftRatio;
+			}
+
+			if (F.wrap.css('position') === 'fixed' || current.locked) {
+				pos.top  -= viewport.y;
+				pos.left -= viewport.x;
+			}
+
+			pos = {
+				top     : getValue(pos.top  - hPadding * current.topRatio),
+				left    : getValue(pos.left - wPadding * current.leftRatio),
+				width   : getValue(width  + wPadding),
+				height  : getValue(height + hPadding)
+			};
+
+			return pos;
+		},
+
+		step: function (now, fx) {
+			var ratio,
+				padding,
+				value,
+				prop       = fx.prop,
+				current    = F.current,
+				wrapSpace  = current.wrapSpace,
+				skinSpace  = current.skinSpace;
+
+			if (prop === 'width' || prop === 'height') {
+				ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
+
+				if (F.isClosing) {
+					ratio = 1 - ratio;
+				}
+
+				padding = prop === 'width' ? current.wPadding : current.hPadding;
+				value   = now - padding;
+
+				F.skin[ prop ](  getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) ) );
+				F.inner[ prop ]( getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
+			}
+		},
+
+		zoomIn: function () {
+			var current  = F.current,
+				startPos = current.pos,
+				effect   = current.openEffect,
+				elastic  = effect === 'elastic',
+				endPos   = $.extend({opacity : 1}, startPos);
+
+			// Remove "position" property that breaks older IE
+			delete endPos.position;
+
+			if (elastic) {
+				startPos = this.getOrigPosition();
+
+				if (current.openOpacity) {
+					startPos.opacity = 0.1;
+				}
+
+			} else if (effect === 'fade') {
+				startPos.opacity = 0.1;
+			}
+
+			F.wrap.css(startPos).animate(endPos, {
+				duration : effect === 'none' ? 0 : current.openSpeed,
+				easing   : current.openEasing,
+				step     : elastic ? this.step : null,
+				complete : F._afterZoomIn
+			});
+		},
+
+		zoomOut: function () {
+			var current  = F.current,
+				effect   = current.closeEffect,
+				elastic  = effect === 'elastic',
+				endPos   = {opacity : 0.1};
+
+			if (elastic) {
+				endPos = this.getOrigPosition();
+
+				if (current.closeOpacity) {
+					endPos.opacity = 0.1;
+				}
+			}
+
+			F.wrap.animate(endPos, {
+				duration : effect === 'none' ? 0 : current.closeSpeed,
+				easing   : current.closeEasing,
+				step     : elastic ? this.step : null,
+				complete : F._afterZoomOut
+			});
+		},
+
+		changeIn: function () {
+			var current   = F.current,
+				effect    = current.nextEffect,
+				startPos  = current.pos,
+				endPos    = { opacity : 1 },
+				direction = F.direction,
+				distance  = 200,
+				field;
+
+			startPos.opacity = 0.1;
+
+			if (effect === 'elastic') {
+				field = direction === 'down' || direction === 'up' ? 'top' : 'left';
+
+				if (direction === 'down' || direction === 'right') {
+					startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
+					endPos[ field ]   = '+=' + distance + 'px';
+
+				} else {
+					startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
+					endPos[ field ]   = '-=' + distance + 'px';
+				}
+			}
+
+			// Workaround for http://bugs.jquery.com/ticket/12273
+			if (effect === 'none') {
+				F._afterZoomIn();
+
+			} else {
+				F.wrap.css(startPos).animate(endPos, {
+					duration : current.nextSpeed,
+					easing   : current.nextEasing,
+					complete : F._afterZoomIn
+				});
+			}
+		},
+
+		changeOut: function () {
+			var previous  = F.previous,
+				effect    = previous.prevEffect,
+				endPos    = { opacity : 0.1 },
+				direction = F.direction,
+				distance  = 200;
+
+			if (effect === 'elastic') {
+				endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
+			}
+
+			previous.wrap.animate(endPos, {
+				duration : effect === 'none' ? 0 : previous.prevSpeed,
+				easing   : previous.prevEasing,
+				complete : function () {
+					$(this).trigger('onReset').remove();
+				}
+			});
+		}
+	};
+
+	/*
+	 *	Overlay helper
+	 */
+
+	F.helpers.overlay = {
+		defaults : {
+			closeClick : true,  // if true, fancyBox will be closed when user clicks on the overlay
+			speedOut   : 200,   // duration of fadeOut animation
+			showEarly  : true,  // indicates if should be opened immediately or wait until the content is ready
+			css        : {},    // custom CSS properties
+			locked     : !isTouch,  // if true, the content will be locked into overlay
+			fixed      : true   // if false, the overlay CSS position property will not be set to "fixed"
+		},
+
+		overlay : null,   // current handle
+		fixed   : false,  // indicates if the overlay has position "fixed"
+
+		// Public methods
+		create : function(opts) {
+			opts = $.extend({}, this.defaults, opts);
+
+			if (this.overlay) {
+				this.close();
+			}
+
+			this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( 'body' );
+			this.fixed   = false;
+
+			if (opts.fixed && F.defaults.fixed) {
+				this.overlay.addClass('fancybox-overlay-fixed');
+
+				this.fixed = true;
+			}
+		},
+
+		open : function(opts) {
+			var that = this;
+
+			opts = $.extend({}, this.defaults, opts);
+
+			if (this.overlay) {
+				this.overlay.unbind('.overlay').width('auto').height('auto');
+
+			} else {
+				this.create(opts);
+			}
+
+			if (!this.fixed) {
+				W.bind('resize.overlay', $.proxy( this.update, this) );
+
+				this.update();
+			}
+
+			if (opts.closeClick) {
+				this.overlay.bind('click.overlay', function(e) {
+					if ($(e.target).hasClass('fancybox-overlay')) {
+						if (F.isActive) {
+							F.close();
+						} else {
+							that.close();
+						}
+					}
+				});
+			}
+
+			this.overlay.css( opts.css ).show();
+		},
+
+		close : function() {
+			$('.fancybox-overlay').remove();
+
+			W.unbind('resize.overlay');
+
+			this.overlay = null;
+
+			if (this.margin !== false) {
+				$('body').css('margin-right', this.margin);
+
+				this.margin = false;
+			}
+
+			if (this.el) {
+				this.el.removeClass('fancybox-lock');
+			}
+		},
+
+		// Private, callbacks
+
+		update : function () {
+			var width = '100%', offsetWidth;
+
+			// Reset width/height so it will not mess
+			this.overlay.width(width).height('100%');
+
+			// jQuery does not return reliable result for IE
+			if (IE) {
+				offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
+
+				if (D.width() > offsetWidth) {
+					width = D.width();
+				}
+
+			} else if (D.width() > W.width()) {
+				width = D.width();
+			}
+
+			this.overlay.width(width).height(D.height());
+		},
+
+		// This is where we can manipulate DOM, because later it would cause iframes to reload
+		onReady : function (opts, obj) {
+			$('.fancybox-overlay').stop(true, true);
+
+			if (!this.overlay) {
+				this.margin = D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false;
+				this.el     = document.all && !document.querySelector ? $('html') : $('body');
+
+				this.create(opts);
+			}
+
+			if (opts.locked && this.fixed) {
+				obj.locked = this.overlay.append( obj.wrap );
+				obj.fixed  = false;
+			}
+
+			if (opts.showEarly === true) {
+				this.beforeShow.apply(this, arguments);
+			}
+		},
+
+		beforeShow : function(opts, obj) {
+			if (obj.locked) {
+				this.el.addClass('fancybox-lock');
+
+				if (this.margin !== false) {
+					$('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth);
+				}
+			}
+
+			this.open(opts);
+		},
+
+		onUpdate : function() {
+			if (!this.fixed) {
+				this.update();
+			}
+		},
+
+		afterClose: function (opts) {
+			// Remove overlay if exists and fancyBox is not opening
+			// (e.g., it is not being open using afterClose callback)
+			if (this.overlay && !F.isActive) {
+				this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
+			}
+		}
+	};
+
+	/*
+	 *	Title helper
+	 */
+
+	F.helpers.title = {
+		defaults : {
+			type     : 'float', // 'float', 'inside', 'outside' or 'over',
+			position : 'bottom' // 'top' or 'bottom'
+		},
+
+		beforeShow: function (opts) {
+			var current = F.current,
+				text    = current.title,
+				type    = opts.type,
+				title,
+				target;
+
+			if ($.isFunction(text)) {
+				text = text.call(current.element, current);
+			}
+
+			if (!isString(text) || $.trim(text) === '') {
+				return;
+			}
+
+			title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">' + text + '</div>');
+
+			switch (type) {
+				case 'inside':
+					target = F.skin;
+				break;
+
+				case 'outside':
+					target = F.wrap;
+				break;
+
+				case 'over':
+					target = F.inner;
+				break;
+
+				default: // 'float'
+					target = F.skin;
+
+					title.appendTo('body');
+
+					if (IE) {
+						title.width( title.width() );
+					}
+
+					title.wrapInner('<span class="child"></span>');
+
+					//Increase bottom margin so this title will also fit into viewport
+					F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
+				break;
+			}
+
+			title[ (opts.position === 'top' ? 'prependTo'  : 'appendTo') ](target);
+		}
+	};
+
+	// jQuery plugin initialization
+	$.fn.fancybox = function (options) {
+		var index,
+			that     = $(this),
+			selector = this.selector || '',
+			run      = function(e) {
+				var what = $(this).blur(), idx = index, relType, relVal;
+
+				if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
+					relType = options.groupAttr || 'data-fancybox-group';
+					relVal  = what.attr(relType);
+
+					if (!relVal) {
+						relType = 'rel';
+						relVal  = what.get(0)[ relType ];
+					}
+
+					if (relVal && relVal !== '' && relVal !== 'nofollow') {
+						what = selector.length ? $(selector) : that;
+						what = what.filter('[' + relType + '="' + relVal + '"]');
+						idx  = what.index(this);
+					}
+
+					options.index = idx;
+
+					// Stop an event from bubbling if everything is fine
+					if (F.open(what, options) !== false) {
+						e.preventDefault();
+					}
+				}
+			};
+
+		options = options || {};
+		index   = options.index || 0;
+
+		if (!selector || options.live === false) {
+			that.unbind('click.fb-start').bind('click.fb-start', run);
+
+		} else {
+			D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
+		}
+
+		this.filter('[data-fancybox-start=1]').trigger('click');
+
+		return this;
+	};
+
+	// Tests that need a body at doc ready
+	D.ready(function() {
+		if ( $.scrollbarWidth === undefined ) {
+			// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
+			$.scrollbarWidth = function() {
+				var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),
+					child  = parent.children(),
+					width  = child.innerWidth() - child.height( 99 ).innerWidth();
+
+				parent.remove();
+
+				return width;
+			};
+		}
+
+		if ( $.support.fixedPosition === undefined ) {
+			$.support.fixedPosition = (function() {
+				var elem  = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'),
+					fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
+
+				elem.remove();
+
+				return fixed;
+			}());
+		}
+
+		$.extend(F.defaults, {
+			scrollbarWidth : $.scrollbarWidth(),
+			fixed  : $.support.fixedPosition,
+			parent : $('body')
+		});
+	});
+
+}(window, document, jQuery));
\ No newline at end of file

Property changes on: branches/1.0.x/inc/js/fancybox/jquery.fancybox.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/fancybox/images/fancybox_sprite.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/fancybox/images/fancybox_sprite.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/fancybox/images/fancybox_loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/fancybox/images/fancybox_loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/fancybox/images/blank.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/fancybox/images/blank.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/fancybox/images/fancybox_overlay.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/fancybox/images/fancybox_overlay.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/fancybox/jquery.fancybox.css
===================================================================
--- branches/1.0.x/inc/js/fancybox/jquery.fancybox.css	(nonexistent)
+++ branches/1.0.x/inc/js/fancybox/jquery.fancybox.css	(revision 15801)
@@ -0,0 +1,249 @@
+/*! fancyBox v2.1.4 fancyapps.com | fancyapps.com/fancybox/#license */
+.fancybox-wrap,
+.fancybox-skin,
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-image,
+.fancybox-wrap iframe,
+.fancybox-wrap object,
+.fancybox-nav,
+.fancybox-nav span,
+.fancybox-tmp
+{
+	padding: 0;
+	margin: 0;
+	border: 0;
+	outline: none;
+	vertical-align: top;
+}
+
+.fancybox-wrap {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 8020;
+}
+
+.fancybox-skin {
+	position: relative;
+	background: #f9f9f9;
+	color: #444;
+	text-shadow: none;
+	-webkit-border-radius: 4px;
+	   -moz-border-radius: 4px;
+	        border-radius: 4px;
+}
+
+.fancybox-opened {
+	z-index: 8030;
+}
+
+.fancybox-opened .fancybox-skin {
+	-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+	   -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+	        box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+}
+
+.fancybox-outer, .fancybox-inner {
+	position: relative;
+}
+
+.fancybox-inner {
+	overflow: hidden;
+}
+
+.fancybox-type-iframe .fancybox-inner {
+	-webkit-overflow-scrolling: touch;
+}
+
+.fancybox-error {
+	color: #444;
+	font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+	margin: 0;
+	padding: 15px;
+	white-space: nowrap;
+}
+
+.fancybox-image, .fancybox-iframe {
+	display: block;
+	width: 100%;
+	height: 100%;
+}
+
+.fancybox-image {
+	max-width: 100%;
+	max-height: 100%;
+}
+
+#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+	background-image: url('@templates_base@/inc/js/fancybox/images/fancybox_sprite.png');
+}
+
+#fancybox-loading {
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	margin-top: -22px;
+	margin-left: -22px;
+	background-position: 0 -108px;
+	opacity: 0.8;
+	cursor: pointer;
+	z-index: 8060;
+}
+
+#fancybox-loading div {
+	width: 44px;
+	height: 44px;
+	background: url('@templates_base@/inc/js/fancybox/images/fancybox_loading.gif') center center no-repeat;
+}
+
+.fancybox-close {
+	position: absolute;
+	top: -18px;
+	right: -18px;
+	width: 36px;
+	height: 36px;
+	cursor: pointer;
+	z-index: 8040;
+}
+
+.fancybox-nav {
+	position: absolute;
+	top: 0;
+	width: 40%;
+	height: 100%;
+	cursor: pointer;
+	text-decoration: none;
+	background: transparent url('@templates_base@/inc/js/fancybox/images/blank.gif'); /* helps IE */
+	-webkit-tap-highlight-color: rgba(0,0,0,0);
+	z-index: 8040;
+}
+
+.fancybox-prev {
+	left: 0;
+}
+
+.fancybox-next {
+	right: 0;
+}
+
+.fancybox-nav span {
+	position: absolute;
+	top: 50%;
+	width: 36px;
+	height: 34px;
+	margin-top: -18px;
+	cursor: pointer;
+	z-index: 8040;
+	visibility: hidden;
+}
+
+.fancybox-prev span {
+	left: 10px;
+	background-position: 0 -36px;
+}
+
+.fancybox-next span {
+	right: 10px;
+	background-position: 0 -72px;
+}
+
+.fancybox-nav:hover span {
+	visibility: visible;
+}
+
+.fancybox-tmp {
+	position: absolute;
+	top: -99999px;
+	left: -99999px;
+	visibility: hidden;
+	max-width: 99999px;
+	max-height: 99999px;
+	overflow: visible !important;
+}
+
+/* Overlay helper */
+
+.fancybox-lock {
+	overflow: hidden;
+}
+
+.fancybox-overlay {
+	position: absolute;
+	top: 0;
+	left: 0;
+	overflow: hidden;
+	display: none;
+	z-index: 8010;
+	background: url('@templates_base@/inc/js/fancybox/images/fancybox_overlay.png');
+}
+
+.fancybox-overlay-fixed {
+	position: fixed;
+	bottom: 0;
+	right: 0;
+}
+
+.fancybox-lock .fancybox-overlay {
+	overflow: auto;
+	overflow-y: scroll;
+}
+
+/* Title helper */
+
+.fancybox-title {
+	visibility: hidden;
+	font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+	position: relative;
+	text-shadow: none;
+	z-index: 8050;
+}
+
+.fancybox-opened .fancybox-title {
+	visibility: visible;
+}
+
+.fancybox-title-float-wrap {
+	position: absolute;
+	bottom: 0;
+	right: 50%;
+	margin-bottom: -35px;
+	z-index: 8050;
+	text-align: center;
+}
+
+.fancybox-title-float-wrap .child {
+	display: inline-block;
+	margin-right: -100%;
+	padding: 2px 20px;
+	background: transparent; /* Fallback for web browsers that doesn't support RGBa */
+	background: rgba(0, 0, 0, 0.8);
+	-webkit-border-radius: 15px;
+	   -moz-border-radius: 15px;
+	        border-radius: 15px;
+	text-shadow: 0 1px 2px #222;
+	color: #FFF;
+	font-weight: bold;
+	line-height: 24px;
+	white-space: nowrap;
+}
+
+.fancybox-title-outside-wrap {
+	position: relative;
+	margin-top: 10px;
+	color: #fff;
+}
+
+.fancybox-title-inside-wrap {
+	padding-top: 10px;
+}
+
+.fancybox-title-over-wrap {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	color: #fff;
+	padding: 10px;
+	background: #000;
+	background: rgba(0, 0, 0, .8);
+}
\ No newline at end of file

Property changes on: branches/1.0.x/inc/js/fancybox/jquery.fancybox.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/thickbox/loadingAnimation.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/thickbox/loadingAnimation.gif
___________________________________________________________________
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/thickbox/images/loadingAnimation.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: branches/1.0.x/inc/js/thickbox/images/loadingAnimation.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/1.0.x/inc/js/thickbox/thickbox.js
===================================================================
--- branches/1.0.x/inc/js/thickbox/thickbox.js	(revision 15800)
+++ branches/1.0.x/inc/js/thickbox/thickbox.js	(revision 15801)
@@ -1,459 +1,459 @@
 /*
  * Thickbox 3.1 - One Box To Rule Them All.
  * By Cody Lindley (http://www.codylindley.com)
  * Copyright (c) 2007 cody lindley
  * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
 */
 
 // on page load call TB.init
 $(document).ready(
 	function() {
 		// pass where to apply thickbox
 		TB.init('a.thickbox, area.thickbox, input.thickbox');
 
 		// preload image
 		TB.imgLoader = new Image();
-		TB.imgLoader.src = $base_url + 'inc/js/thickbox/loadingAnimation.gif';
+		TB.imgLoader.src = $base_url + 'inc/js/thickbox/images/loadingAnimation.gif';
 	}
 );
 
 function TB () {
 	this.imgLoader = null;
-	this.pathToImage = $base_url + 'inc/js/thickbox/loadingAnimation.gif';
+	this.pathToImage = $base_url + 'inc/js/thickbox/images/loadingAnimation.gif';
 
 	this.Width = null;
 	this.Height = null;
 }
 
 //add thickbox to href & area elements that have a class of .thickbox
 TB.init = function (domChunk) {
 	$(domChunk).click(
 		function() {
 			var t = this.title || this.name || null;
 			var a = this.href || this.alt;
 			var g = this.rel || false;
 
 			TB.show( {caption: t, url: a, imageGroup: g} );
 			this.blur();
 			return false;
 		}
 	);
 }
 
 // function called when the user clicks on a thickbox link
 TB.show = function (params) {
 
 //	caption, url, imageGroup, onDataReceived, onAfterShow, postParams
 
 	try {
 		if (typeof document.body.style.maxHeight === 'undefined') {
 			// if IE 6
 			$('body', 'html').css( {height: '100%', width: '100%'} );
 			$('html').css('overflow', 'hidden');
 
 			if (document.getElementById('TB_HideSelect') === null) {
 				// iframe to hide select elements in ie6
 				$('body').append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
 				$('#TB_overlay').click(TB.remove);
 			}
 		} else {
 			// all others
 			if (document.getElementById('TB_overlay') === null) {
 				$('body').append("<div id='TB_overlay'></div><div id='TB_window'></div>");
 				$('#TB_overlay').click(TB.remove);
 			}
 		}
 
 		$('#TB_overlay').addClass('TB_overlayBG'); // use background and opacity
 
 		if (params.caption === null) {
 			params.caption = '';
 		}
 
 		$('body').append("<div id='TB_load'><img src='" + TB.imgLoader.src + "' /></div>"); // add loader to the page
 		$('#TB_load').show(); // show loader
 
 		var baseURL;
 		if (params.url.indexOf('?') !== -1) {
 			// ff there is a query string involved
 			baseURL = params.url.substr(0, params.url.indexOf('?'));
 		} else {
 			baseURL = params.url;
 		}
 
 		var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
 		var url_params = {};
 
 		if ( baseURL.toLowerCase().match(urlString) ) {
 			TB.processImages(params, urlString);
 		} else {
 			var queryString = params.url.replace(/^[^\?]+\??/,'');
 			url_params = TB.parseQuery(queryString);
 
 			TB.processDialog(params, url_params);
 		}
 
 		if (url_params['modal'] != 'true') {
 			$(document).bind(
 				'keyup',
 				function(e){
 					if (e.which == 27){
 						// close
 						TB.remove();
 					}
 				}
 			);
 		}
 	} catch(e) {
 		//nothing here
 	}
 }
 
 // helper functions below
 TB.processImages = function (params, urlString) {
 	// code to show images
 	var TB_PrevCaption = '';
 	var TB_PrevURL = '';
 	var TB_PrevHTML = '';
 	var TB_NextCaption = '';
 	var TB_NextURL = '';
 	var TB_NextHTML = '';
 	var TB_imageCount = '';
 	var TB_FoundURL = false;
 
 	if (params.imageGroup) {
 		// scan images in group to create Prev/Next links
 		var TB_TempArray = $('a[rel=' + params.imageGroup + ']').get();
 		for (var TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === '')); TB_Counter++) {
 			var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
 			if (!(TB_TempArray[TB_Counter].href == params.url)) {
 				if (TB_FoundURL) {
 					TB_NextCaption = TB_TempArray[TB_Counter].title;
 					TB_NextURL = TB_TempArray[TB_Counter].href;
 					TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>";
 				} else {
 					TB_PrevCaption = TB_TempArray[TB_Counter].title;
 					TB_PrevURL = TB_TempArray[TB_Counter].href;
 					TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Prev</a></span>";
 				}
 			} else {
 				TB_FoundURL = true;
 				TB_imageCount = 'Image ' + (TB_Counter + 1) + ' of ' + TB_TempArray.length;
 			}
 		}
 	}
 
 	var imgPreloader = new Image();
 	$(imgPreloader).bind(
 		'load',
 		function() {
 			$(this).unbind('load');
 			var $image_size = TB.scaleImage.call(TB, this);
 
 			TB.Width = $image_size.width + 30;
 			TB.Height = $image_size.height + 60;
 			$('#TB_window').append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='" + params.url + "' width='" + $image_size.width + "' height='" + $image_size.height + "' alt='" + params.caption + "'/></a>" + "<div id='TB_caption'>" + params.caption + "<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div>");
 			$('#TB_closeWindowButton').click(TB.remove);
 
 			if (TB_PrevHTML !== '') {
 				function goPrev() {
 					$('#TB_window').remove();
 					$('body').append("<div id='TB_window'></div>");
 					TB.show( {caption: TB_PrevCaption, url: TB_PrevURL, imageGroup: params.imageGroup} );
 					return false;
 				}
 
 				$('#TB_prev').click(goPrev);
 			}
 
 			if (TB_NextHTML !== '') {
 				function goNext() {
 					$('#TB_window').remove();
 					$('body').append("<div id='TB_window'></div>");
 					TB.show( {caption: TB_NextCaption, url: TB_NextURL, imageGroup: params.imageGroup} );
 					return false;
 				}
 
 				$('#TB_next').click(goNext);
 
 			}
 
 			$(document).bind(
 				'keydown',
 				function(e) {
 					var keycode = e.which;
 
 					if (keycode == 27) { // close
 						TB.remove();
 					} else if (keycode == 190) {
 						// display previous image
 						if (TB_NextHTML != '') {
 							$(this).unbind('keydown');
 							goNext();
 						}
 					} else if (keycode == 188) {
 						// display next image
 						if(TB_PrevHTML != ''){
 							$(this).unbind('keydown');
 							goPrev();
 						}
 					}
 				}
 			);
 
 			// show image after it's loaded
 			TB.position();
 			$('#TB_load').remove();
 			$('#TB_ImageOff').click(TB.remove);
 			$('#TB_window').css('display', 'block'); // for safari using css instead of show
 		}
 	);
 
 	imgPreloader.src = params.url;
 }
 
 TB.scaleImage = function ($image) {
 	// resizing large images - orginal by Christian Montoya edited by me
 	var pagesize = TB.getPageSize();
 	var x = pagesize[0] - 150;
 	var y = pagesize[1] - 150;
 
 	var imageWidth = $image.width;
 	var imageHeight = $image.height;
 
 	if (imageWidth > x) {
 		imageHeight = imageHeight * (x / imageWidth);
 		imageWidth = x;
 		if (imageHeight > y) {
 			imageWidth = imageWidth * (y / imageHeight);
 			imageHeight = y;
 		}
 	} else if (imageHeight > y) {
 		imageWidth = imageWidth * (y / imageHeight);
 		imageHeight = y;
 		if (imageWidth > x) {
 			imageHeight = imageHeight * (x / imageWidth);
 			imageWidth = x;
 		}
 	}
 
 	return {width: imageWidth, height: imageHeight};
 }
 
 TB.processDialog = function (params, url_params) {
 	// code to show html
 
 	// window size is global
 	TB.Width = (url_params['width'] * 1) || 630; // 17 - #TB_Window left&right padding
 	TB.Height = (url_params['height'] * 1) || 440; // 14 - #TB_Window top&bottom padding
 
 	var ajaxContentW = TB.Width /*+ 17*2*/ - (50*2 + 9*2); // #TB_ajaxContent left&right padding - left&right border
 	var ajaxContentH = TB.Height /*+ 14*2*/ - (40*2 /*+ 9*2*/); // #TB_ajaxContent top&bottom padding
 
 	var $window_title = '';
 
 	if (params.url.indexOf('TB_iframe') != -1) {
 		// either iframe or ajax window
 		urlNoQuery = params.url.split('TB_');
 		$('#TB_iframeContent').remove();
 
 		if (url_params['modal'] != 'true') {
 			// iframe no modal
 			$window_title = "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + params.caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div></div>";
 
 			$('#TB_window').append($window_title + "<iframe frameborder='0' hspace='0' src='" + urlNoQuery[0] + "' id='TB_iframeContent' name='TB_iframeContent" + Math.round(Math.random() * 1000) + "' onload='TB.showIframe()' style='width:" + (ajaxContentW + 29) + "px;height:" + (ajaxContentH + 17) + "px;' > </iframe>");
 		}else{
 			// iframe modal
 			$('#TB_overlay').unbind();
 			$('#TB_window').append("<iframe frameborder='0' hspace='0' src='" + urlNoQuery[0] + "' id='TB_iframeContent' name='TB_iframeContent" + Math.round(Math.random() * 1000) + "' onload='TB.showIframe()' style='width:" + (ajaxContentW + 29) + "px;height:" + (ajaxContentH + 17) + "px;'> </iframe>");
 		}
 	} else {
 		// not an iframe, ajax
 		if ($('#TB_window').css('display') != 'block') {
 			if (url_params['modal'] != 'true') {
 				// ajax no modal
 //				$window_title = "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + params.caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>close</a> or Esc Key</div></div>";
 				$window_title = "<div id='TB_closeAjaxWindow'><span id='TB_closeWindowButton'>close [Esc]</span></div>";
 
 				$('#TB_window').append($window_title + "<div id='TB_ajaxContent' style='width:" + ajaxContentW + "px;height:" + ajaxContentH + "px'></div>");
 			} else {
 				// ajax modal
 				$('#TB_overlay').unbind();
 				$('#TB_window').append("<div id='TB_ajaxContent' class='TB_modal' style='width:" + ajaxContentW + "px;height:" + ajaxContentH + "px;'></div>");
 			}
 		} else {
 			// this means the window is already up, we are just loading new content via ajax
 			$('#TB_ajaxContent')[0].style.width = ajaxContentW + 'px';
 			$('#TB_ajaxContent')[0].style.height = ajaxContentH + 'px';
 			$('#TB_ajaxContent')[0].scrollTop = 0;
 			$('#TB_ajaxWindowTitle').html(params.caption);
 		}
 	}
 
 	$('#TB_closeWindowButton').click(TB.remove);
 
 	if (params.url.indexOf('TB_inline') != -1) {
 		$('#TB_ajaxContent').html( $('#' + url_params['inlineId']).html() );
 		$('#TB_window').unload(
 			function () {
 				// move elements back when you're finished
 				$('#' + url_params['inlineId']).html( $('#TB_ajaxContent').html() );
 			}
 		);
 
 		TB.position();
 		$('#TB_load').remove();
 		$('#TB_window').css('display', 'block');
 	} else if (params.url.indexOf('TB_iframe') != -1) {
 		TB.position();
 
 		if ($.browser.safari) {
 			// safari needs help because it will not fire iframe onload
 			$('#TB_load').remove();
 			$('#TB_window').css('display', 'block');
 		}
 	} else {
 		var $content_url = params.url + '&random=' + (new Date().getTime());
 
 		if (params.postParams === undefined) {
 			$.get(
 				$content_url,
 				function ($data) {
 					TB.onDataReceived($data, params);
 				}
 			);
 		}
 		else {
 			$.post(
 				$content_url,
 				params.postParams,
 				function ($data) {
 					TB.onDataReceived($data, params);
 				}
 			);
 		}
 
 		/*$('#TB_ajaxContent').load(
 			params.url += '&random=' + (new Date().getTime()),
 			params.postParams,
 			function() {
 				//to do a post change this load method
 				TB.position();
 				$('#TB_load').remove();
 				TB.init('#TB_ajaxContent a.thickbox');
 				$('#TB_window').css('display', 'block');
 
 				if ( $.isFunction(params.showCallback) ) {
 					params.showCallback();
 				}
 			}
 		);*/
 	}
 }
 
 TB.parseRedirect = function ($data) {
 	var $match_redirect = new RegExp('^#redirect#(.*?)($|\\s.*)').exec($data);
 	if ($match_redirect != null) {
 		// redirect to external template requested
 		return $match_redirect[1];
 	}
 
 	return false;
 }
 
 TB.onDataReceived = function ($data, $params) {
 	if ( $.isFunction($params.onDataReceived) ) {
 		$data = $params.onDataReceived($data);
 		if ($data === false) {
 			// this callback even could prevent redirect action
 			// callback requested to stop processing
 			return ;
 		}
 	}
 
 	var $redirect = TB.parseRedirect($data);
 	if ($redirect !== false) {
 		window.location.href = $redirect;
 		return ;
 	}
 
 	$('#TB_ajaxContent').html($data);
 
 	TB.position();
 	$('#TB_load').remove();
 	TB.init('#TB_ajaxContent a.thickbox');
 	$('#TB_window').css('display', 'block');
 
 	if ( $.isFunction($params.onAfterShow) ) {
 		$params.onAfterShow();
 	}
 }
 
 TB.showIframe = function () {
 	$('#TB_load').remove();
 	$('#TB_window').css('display', 'block');
 }
 
 TB.remove = function () {
  	$('#TB_imageOff').unbind('click');
 	$('#TB_closeWindowButton').unbind('click');
 
 	$('#TB_window').fadeOut(
 		'fast',
 		function(){
 			$('#TB_window,#TB_overlay,#TB_HideSelect')/*.trigger('unload')*/.unbind().remove();
 		}
 	);
 
 	$('#TB_load').remove();
 	if (typeof document.body.style.maxHeight == 'undefined') {
 		// if IE 6
 		$('body','html').css( {height: 'auto', width: 'auto'} );
 		$('html').css('overflow', '');
 	}
 
 	$(document).unbind('keydown').unbind('keyup');
 
 	return false;
 }
 
 TB.position = function () {
 	$('#TB_window').css( {marginLeft: '-' + parseInt(TB.Width / 2) + 'px', width: TB.Width + 'px'} );
 
 	if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) {
 		// take away IE6
 		$('#TB_window').css( {marginTop: '-' + parseInt(TB.Height / 2) + 'px'} );
 	}
 }
 
 TB.parseQuery = function (query) {
 	var Params = {};
 	if (!query) {
 		// return empty object
 		return Params;
 	}
 
 	var Pairs = query.split(/[;&]/);
 
 	for (var i = 0; i < Pairs.length; i++ ) {
 		var KeyVal = Pairs[i].split('=');
 		if (!KeyVal || KeyVal.length != 2) {
 			continue;
 		}
 
 		var key = unescape( KeyVal[0] );
 		var val = unescape( KeyVal[1] );
 		val = val.replace(/\+/g, ' ');
 		Params[key] = val;
 	}
 
 	return Params;
 }
 
 TB.getPageSize = function () {
 	var de = document.documentElement;
 	var w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
 	var h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
 
 	return [w, h];
 }
\ No newline at end of file
Index: branches/1.0.x/elements/html_head.elm.tpl
===================================================================
--- branches/1.0.x/elements/html_head.elm.tpl	(revision 15800)
+++ branches/1.0.x/elements/html_head.elm.tpl	(revision 15801)
@@ -1,76 +1,82 @@
 <inp2:m_if check="c.current_Field" name="MetaKeywords">
 	<meta name="Keywords" content="<inp2:c.current_Field name='MetaKeywords'/>"/>
 <inp2:m_else/>
 	<meta name="Keywords" content="<inp2:m_GetConfig name='Category_MetaKey'/>"/>
 </inp2:m_if>
 <inp2:m_if check="c.current_Field" name="MetaDescription">
 	<meta name="Description" content="<inp2:c.current_Field name='MetaDescription'/>"/>
 <inp2:m_else/>
 	<meta name="Description" content="<inp2:m_GetConfig name='Category_MetaDesc'/>"/>
 </inp2:m_if>
 <meta name="author" content="<inp2:m_GetConfig name='Site_Name' html_escape='1'/>"/>
-<meta http-equiv="content-type" content="text/html; charset=<inp2:lang.current_Field name='Charset'/>" />
+<meta http-equiv="content-type" content="text/html; charset=<inp2:m_GetConst name='CHARSET'/>" />
 
 <link rel="icon" href="<inp2:m_BaseURL/>favicon.ico" type="image/x-icon" />
 <link rel="shortcut icon" href="<inp2:m_BaseURL/>favicon.ico" type="image/x-icon" />
 
-<link rel="stylesheet" type="text/css" href="<inp2:m_Compress files='inc/reset.css|inc/styles.css|inc/flexslider.css|inc/modal.css|inc/jquery.gzoom.css|inc/pikachoose.css|inc/qtip.css'/>" media="all" charset="<inp2:lang.current_Field name='Charset'/>"/>
+<link rel="stylesheet" type="text/css" href="<inp2:m_Compress files='inc/reset.css|inc/styles.css|inc/flexslider.css|inc/modal.css|inc/jquery.gzoom.css|inc/pikachoose.css|inc/qtip.css'/>" media="all" charset="<inp2:m_GetConst name='CHARSET'/>"/>
 
 <!-- including "inc/profile.css" will break logged-in user's menu -->
 
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/ui/jquery.ui.all.css" charset="utf-8" />
 
 <!--##
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/reset.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/styles.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/category.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/flexslider.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/modal.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/details.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/jquery.gzoom.css" charset="utf-8" />
 <link type="text/css" rel="stylesheet" href="<inp2:m_TemplatesBase />inc/pikachoose.css" charset="utf-8" />
 ##-->
 
 <!--## JS FOR ADMIN ##-->
 <inp2:st_EditingScripts/>
 
 <script type="text/javascript">
 	var $base_url = '<inp2:m_TemplatesBase/>';
 </script>
 
 <!--## JS FOR FRONT ##-->
 <inp2:m_ifnot check="m_GetConst" name="EDITING_MODE">
 	<!--## EXCLUDE THIS JS WHEN IN ADMIN ##-->
 	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
 
-	<link rel="stylesheet" type="text/css" href="<inp2:m_Compress files='/inc/js/thickbox/thickbox.css'/>"/>
+	<link rel="stylesheet" type="text/css" href="<inp2:m_Compress files='inc/js/thickbox/thickbox.css'/>"/>
 	<script src="<inp2:m_Compress files='inc/js/thickbox/thickbox.js'/>" type="text/javascript"></script>
+
+	<!--<link rel="stylesheet" type="text/css" href="<inp2:m_Compress files='inc/js/colorbox/jquery.colorbox.css'/>"/>-->
+	<!--<script src="<inp2:m_Compress files='inc/js/colorbox/jquery.colorbox.js'/>" type="text/javascript"></script>-->
+
+	<!--<link rel="stylesheet" type="text/css" href="<inp2:m_Compress files='inc/js/fancybox/jquery.fancybox.css'/>"/>-->
+	<!--<script src="<inp2:m_Compress files='inc/js/fancybox/jquery.fancybox.js'/>" type="text/javascript"></script>-->
 </inp2:m_ifnot>
 
 <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js" type="text/javascript"></script>
 
 <script src="<inp2:m_TemplatesBase />inc/js/ui/jquery.ui.core.min.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/ui/jquery.ui.widget.min.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/ui/jquery.ui.accordion.min.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/jquery.flexslider-min.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/jquery.scripts.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/tinybox.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/jquery.qtip.min.js" type="text/javascript"></script>
 <script src="<inp2:m_TemplatesBase />inc/js/form_manager.js" type="text/javascript"></script>
 
 <script type="text/javascript">
 	var aRatingManager = new RatingManager('<inp2:m_Link template="index" events[#PREFIX#]="OnMakeVote" rating="#VOTE#" id="#ID#" no_amp="1" size="#SIZE#"/>');
 
-	FormManager.init(
-		{
-			url: '<inp2:m_Link template="#TEMPLATE#" js_escape="1" __NO_REWRITE__="1" no_amp="1"/>',
-			noErrorsHTML: ''
-		}
-	);
+	FormManager.init({
+		url: '<inp2:m_Link template="#TEMPLATE#" js_escape="1" __NO_REWRITE__="1" no_amp="1"/>',
+		windowManager: new FormManager_WindowManagerThickBox()
+//		windowManager: new FormManager_WindowManagerColorBox()
+//		windowManager: new FormManager_WindowManagerFancyBox()
+	});
 </script>
 
 <inp2:m_Comment>
 <!--[if lt IE 9]>
 
 <![endif]-->
 </inp2:m_Comment>
\ No newline at end of file