// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery-1.3.2.js
/*!
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){

var 
	// Will speed up references to window, and allows munging its name.
	window = this,
	// Will speed up references to undefined, and allows munging its name.
	undefined,
	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,
	// Map over the $ in case of overwrite
	_$ = window.$,

	jQuery = window.jQuery = window.$ = function( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		return new jQuery.fn.init( selector, context );
	},

	// A simple way to check for HTML strings or ID strings
	// (both of which we optimize for)
	quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
	// Is it a simple selector
	isSimple = /^.[^:#\[\.,]*$/;

jQuery.fn = jQuery.prototype = {
	init: function( selector, context ) {
		// Make sure that a selection was provided
		selector = selector || document;

		// Handle $(DOMElement)
		if ( selector.nodeType ) {
			this[0] = selector;
			this.length = 1;
			this.context = selector;
			return this;
		}
		// Handle HTML strings
		if ( typeof selector === "string" ) {
			// Are we dealing with HTML string or an ID?
			var match = quickExpr.exec( selector );

			// Verify a match, and that no context was specified for #id
			if ( match && (match[1] || !context) ) {

				// HANDLE: $(html) -> $(array)
				if ( match[1] )
					selector = jQuery.clean( [ match[1] ], context );

				// HANDLE: $("#id")
				else {
					var elem = document.getElementById( match[3] );

					// Handle the case where IE and Opera return items
					// by name instead of ID
					if ( elem && elem.id != match[3] )
						return jQuery().find( selector );

					// Otherwise, we inject the element directly into the jQuery object
					var ret = jQuery( elem || [] );
					ret.context = document;
					ret.selector = selector;
					return ret;
				}

			// HANDLE: $(expr, [context])
			// (which is just equivalent to: $(content).find(expr)
			} else
				return jQuery( context ).find( selector );

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( jQuery.isFunction( selector ) )
			return jQuery( document ).ready( selector );

		// Make sure that old selector state is passed along
		if ( selector.selector && selector.context ) {
			this.selector = selector.selector;
			this.context = selector.context;
		}

		return this.setArray(jQuery.isArray( selector ) ?
			selector :
			jQuery.makeArray(selector));
	},

	// Start with an empty selector
	selector: "",

	// The current version of jQuery being used
	jquery: "1.3.2",

	// The number of elements contained in the matched element set
	size: function() {
		return this.length;
	},

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
		return num === undefined ?

			// Return a 'clean' array
			Array.prototype.slice.call( this ) :

			// Return just the object
			this[ num ];
	},

	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems, name, selector ) {
		// Build a new jQuery matched element set
		var ret = jQuery( elems );

		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;

		ret.context = this.context;

		if ( name === "find" )
			ret.selector = this.selector + (this.selector ? " " : "") + selector;
		else if ( name )
			ret.selector = this.selector + "." + name + "(" + selector + ")";

		// Return the newly-formed element set
		return ret;
	},

	// Force the current matched set of elements to become
	// the specified array of elements (destroying the stack in the process)
	// You should use pushStack() in order to do this, but maintain the stack
	setArray: function( elems ) {
		// Resetting the length to 0, then using the native Array push
		// is a super-fast way to populate an object with array-like properties
		this.length = 0;
		Array.prototype.push.apply( this, elems );

		return this;
	},

	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	// Determine the position of an element within
	// the matched set of elements
	index: function( elem ) {
		// Locate the position of the desired element
		return jQuery.inArray(
			// If it receives a jQuery object, the first element is used
			elem && elem.jquery ? elem[0] : elem
		, this );
	},

	attr: function( name, value, type ) {
		var options = name;

		// Look for the case where we're accessing a style value
		if ( typeof name === "string" )
			if ( value === undefined )
				return this[0] && jQuery[ type || "attr" ]( this[0], name );

			else {
				options = {};
				options[ name ] = value;
			}

		// Check to see if we're setting style values
		return this.each(function(i){
			// Set all the styles
			for ( name in options )
				jQuery.attr(
					type ?
						this.style :
						this,
					name, jQuery.prop( this, options[ name ], type, i, name )
				);
		});
	},

	css: function( key, value ) {
		// ignore negative width and height values
		if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
			value = undefined;
		return this.attr( key, value, "curCSS" );
	},

	text: function( text ) {
		if ( typeof text !== "object" && text != null )
			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );

		var ret = "";

		jQuery.each( text || this, function(){
			jQuery.each( this.childNodes, function(){
				if ( this.nodeType != 8 )
					ret += this.nodeType != 1 ?
						this.nodeValue :
						jQuery.fn.text( [ this ] );
			});
		});

		return ret;
	},

	wrapAll: function( html ) {
		if ( this[0] ) {
			// The elements to wrap the target around
			var wrap = jQuery( html, this[0].ownerDocument ).clone();

			if ( this[0].parentNode )
				wrap.insertBefore( this[0] );

			wrap.map(function(){
				var elem = this;

				while ( elem.firstChild )
					elem = elem.firstChild;

				return elem;
			}).append(this);
		}

		return this;
	},

	wrapInner: function( html ) {
		return this.each(function(){
			jQuery( this ).contents().wrapAll( html );
		});
	},

	wrap: function( html ) {
		return this.each(function(){
			jQuery( this ).wrapAll( html );
		});
	},

	append: function() {
		return this.domManip(arguments, true, function(elem){
			if (this.nodeType == 1)
				this.appendChild( elem );
		});
	},

	prepend: function() {
		return this.domManip(arguments, true, function(elem){
			if (this.nodeType == 1)
				this.insertBefore( elem, this.firstChild );
		});
	},

	before: function() {
		return this.domManip(arguments, false, function(elem){
			this.parentNode.insertBefore( elem, this );
		});
	},

	after: function() {
		return this.domManip(arguments, false, function(elem){
			this.parentNode.insertBefore( elem, this.nextSibling );
		});
	},

	end: function() {
		return this.prevObject || jQuery( [] );
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: [].push,
	sort: [].sort,
	splice: [].splice,

	find: function( selector ) {
		if ( this.length === 1 ) {
			var ret = this.pushStack( [], "find", selector );
			ret.length = 0;
			jQuery.find( selector, this[0], ret );
			return ret;
		} else {
			return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
				return jQuery.find( selector, elem );
			})), "find", selector );
		}
	},

	clone: function( events ) {
		// Do the clone
		var ret = this.map(function(){
			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
				// IE copies events bound via attachEvent when
				// using cloneNode. Calling detachEvent on the
				// clone will also remove the events from the orignal
				// In order to get around this, we use innerHTML.
				// Unfortunately, this means some modifications to
				// attributes in IE that are actually only stored
				// as properties will not be copied (such as the
				// the name attribute on an input).
				var html = this.outerHTML;
				if ( !html ) {
					var div = this.ownerDocument.createElement("div");
					div.appendChild( this.cloneNode(true) );
					html = div.innerHTML;
				}

				return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
			} else
				return this.cloneNode(true);
		});

		// Copy the events from the original to the clone
		if ( events === true ) {
			var orig = this.find("*").andSelf(), i = 0;

			ret.find("*").andSelf().each(function(){
				if ( this.nodeName !== orig[i].nodeName )
					return;

				var events = jQuery.data( orig[i], "events" );

				for ( var type in events ) {
					for ( var handler in events[ type ] ) {
						jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
					}
				}

				i++;
			});
		}

		// Return the cloned set
		return ret;
	},

	filter: function( selector ) {
		return this.pushStack(
			jQuery.isFunction( selector ) &&
			jQuery.grep(this, function(elem, i){
				return selector.call( elem, i );
			}) ||

			jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
				return elem.nodeType === 1;
			}) ), "filter", selector );
	},

	closest: function( selector ) {
		var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
			closer = 0;

		return this.map(function(){
			var cur = this;
			while ( cur && cur.ownerDocument ) {
				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
					jQuery.data(cur, "closest", closer);
					return cur;
				}
				cur = cur.parentNode;
				closer++;
			}
		});
	},

	not: function( selector ) {
		if ( typeof selector === "string" )
			// test special case where just one selector is passed in
			if ( isSimple.test( selector ) )
				return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
			else
				selector = jQuery.multiFilter( selector, this );

		var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
		return this.filter(function() {
			return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
		});
	},

	add: function( selector ) {
		return this.pushStack( jQuery.unique( jQuery.merge(
			this.get(),
			typeof selector === "string" ?
				jQuery( selector ) :
				jQuery.makeArray( selector )
		)));
	},

	is: function( selector ) {
		return !!selector && jQuery.multiFilter( selector, this ).length > 0;
	},

	hasClass: function( selector ) {
		return !!selector && this.is( "." + selector );
	},

	val: function( value ) {
		if ( value === undefined ) {			
			var elem = this[0];

			if ( elem ) {
				if( jQuery.nodeName( elem, 'option' ) )
					return (elem.attributes.value || {}).specified ? elem.value : elem.text;
				
				// We need to handle select boxes special
				if ( jQuery.nodeName( elem, "select" ) ) {
					var index = elem.selectedIndex,
						values = [],
						options = elem.options,
						one = elem.type == "select-one";

					// Nothing was selected
					if ( index < 0 )
						return null;

					// Loop through all the selected options
					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
						var option = options[ i ];

						if ( option.selected ) {
							// Get the specifc value for the option
							value = jQuery(option).val();

							// We don't need an array for one selects
							if ( one )
								return value;

							// Multi-Selects return an array
							values.push( value );
						}
					}

					return values;				
				}

				// Everything else, we just grab the value
				return (elem.value || "").replace(/\r/g, "");

			}

			return undefined;
		}

		if ( typeof value === "number" )
			value += '';

		return this.each(function(){
			if ( this.nodeType != 1 )
				return;

			if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
				this.checked = (jQuery.inArray(this.value, value) >= 0 ||
					jQuery.inArray(this.name, value) >= 0);

			else if ( jQuery.nodeName( this, "select" ) ) {
				var values = jQuery.makeArray(value);

				jQuery( "option", this ).each(function(){
					this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
						jQuery.inArray( this.text, values ) >= 0);
				});

				if ( !values.length )
					this.selectedIndex = -1;

			} else
				this.value = value;
		});
	},

	html: function( value ) {
		return value === undefined ?
			(this[0] ?
				this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
				null) :
			this.empty().append( value );
	},

	replaceWith: function( value ) {
		return this.after( value ).remove();
	},

	eq: function( i ) {
		return this.slice( i, +i + 1 );
	},

	slice: function() {
		return this.pushStack( Array.prototype.slice.apply( this, arguments ),
			"slice", Array.prototype.slice.call(arguments).join(",") );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function(elem, i){
			return callback.call( elem, i, elem );
		}));
	},

	andSelf: function() {
		return this.add( this.prevObject );
	},

	domManip: function( args, table, callback ) {
		if ( this[0] ) {
			var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
				scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
				first = fragment.firstChild;

			if ( first )
				for ( var i = 0, l = this.length; i < l; i++ )
					callback.call( root(this[i], first), this.length > 1 || i > 0 ?
							fragment.cloneNode(true) : fragment );
		
			if ( scripts )
				jQuery.each( scripts, evalScript );
		}

		return this;
		
		function root( elem, cur ) {
			return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
				(elem.getElementsByTagName("tbody")[0] ||
				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
				elem;
		}
	}
};

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

function evalScript( i, elem ) {
	if ( elem.src )
		jQuery.ajax({
			url: elem.src,
			async: false,
			dataType: "script"
		});

	else
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

	if ( elem.parentNode )
		elem.parentNode.removeChild( elem );
}

function now(){
	return +new Date;
}

jQuery.extend = jQuery.fn.extend = function() {
	// copy reference to target object
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !jQuery.isFunction(target) )
		target = {};

	// extend jQuery itself if only one argument is passed
	if ( length == i ) {
		target = this;
		--i;
	}

	for ( ; i < length; i++ )
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null )
			// Extend the base object
			for ( var name in options ) {
				var src = target[ name ], copy = options[ name ];

				// Prevent never-ending loop
				if ( target === copy )
					continue;

				// Recurse if we're merging object values
				if ( deep && copy && typeof copy === "object" && !copy.nodeType )
					target[ name ] = jQuery.extend( deep, 
						// Never move original objects, clone them
						src || ( copy.length != null ? [ ] : { } )
					, copy );

				// Don't bring in undefined values
				else if ( copy !== undefined )
					target[ name ] = copy;

			}

	// Return the modified object
	return target;
};

// exclude the following css properties to add px
var	exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
	// cache defaultView
	defaultView = document.defaultView || {},
	toString = Object.prototype.toString;

jQuery.extend({
	noConflict: function( deep ) {
		window.$ = _$;

		if ( deep )
			window.jQuery = _jQuery;

		return jQuery;
	},

	// See test/unit/core.js for details concerning isFunction.
	// Since version 1.3, DOM methods and functions like alert
	// aren't supported. They return false on IE (#2968).
	isFunction: function( obj ) {
		return toString.call(obj) === "[object Function]";
	},

	isArray: function( obj ) {
		return toString.call(obj) === "[object Array]";
	},

	// check if an element is in a (or is an) XML document
	isXMLDoc: function( elem ) {
		return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
			!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
	},

	// Evalulates a script in a global context
	globalEval: function( data ) {
		if ( data && /\S/.test(data) ) {
			// Inspired by code by Andrea Giammarchi
			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
			var head = document.getElementsByTagName("head")[0] || document.documentElement,
				script = document.createElement("script");

			script.type = "text/javascript";
			if ( jQuery.support.scriptEval )
				script.appendChild( document.createTextNode( data ) );
			else
				script.text = data;

			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
			// This arises when a base node is used (#2709).
			head.insertBefore( script, head.firstChild );
			head.removeChild( script );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
	},

	// args is for internal usage only
	each: function( object, callback, args ) {
		var name, i = 0, length = object.length;

		if ( args ) {
			if ( length === undefined ) {
				for ( name in object )
					if ( callback.apply( object[ name ], args ) === false )
						break;
			} else
				for ( ; i < length; )
					if ( callback.apply( object[ i++ ], args ) === false )
						break;

		// A special, fast, case for the most common use of each
		} else {
			if ( length === undefined ) {
				for ( name in object )
					if ( callback.call( object[ name ], name, object[ name ] ) === false )
						break;
			} else
				for ( var value = object[0];
					i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
		}

		return object;
	},

	prop: function( elem, value, type, i, name ) {
		// Handle executable functions
		if ( jQuery.isFunction( value ) )
			value = value.call( elem, i );

		// Handle passing in a number to a CSS property
		return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
			value + "px" :
			value;
	},

	className: {
		// internal only, use addClass("class")
		add: function( elem, classNames ) {
			jQuery.each((classNames || "").split(/\s+/), function(i, className){
				if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
					elem.className += (elem.className ? " " : "") + className;
			});
		},

		// internal only, use removeClass("class")
		remove: function( elem, classNames ) {
			if (elem.nodeType == 1)
				elem.className = classNames !== undefined ?
					jQuery.grep(elem.className.split(/\s+/), function(className){
						return !jQuery.className.has( classNames, className );
					}).join(" ") :
					"";
		},

		// internal only, use hasClass("class")
		has: function( elem, className ) {
			return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
		}
	},

	// A method for quickly swapping in/out CSS properties to get correct calculations
	swap: function( elem, options, callback ) {
		var old = {};
		// Remember the old values, and insert the new ones
		for ( var name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}

		callback.call( elem );

		// Revert the old values
		for ( var name in options )
			elem.style[ name ] = old[ name ];
	},

	css: function( elem, name, force, extra ) {
		if ( name == "width" || name == "height" ) {
			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];

			function getWH() {
				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;

				if ( extra === "border" )
					return;

				jQuery.each( which, function() {
					if ( !extra )
						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
					if ( extra === "margin" )
						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
					else
						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
				});
			}

			if ( elem.offsetWidth !== 0 )
				getWH();
			else
				jQuery.swap( elem, props, getWH );

			return Math.max(0, Math.round(val));
		}

		return jQuery.curCSS( elem, name, force );
	},

	curCSS: function( elem, name, force ) {
		var ret, style = elem.style;

		// We need to handle opacity special in IE
		if ( name == "opacity" && !jQuery.support.opacity ) {
			ret = jQuery.attr( style, "opacity" );

			return ret == "" ?
				"1" :
				ret;
		}

		// Make sure we're using the right name for getting the float value
		if ( name.match( /float/i ) )
			name = styleFloat;

		if ( !force && style && style[ name ] )
			ret = style[ name ];

		else if ( defaultView.getComputedStyle ) {

			// Only "float" is needed here
			if ( name.match( /float/i ) )
				name = "float";

			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();

			var computedStyle = defaultView.getComputedStyle( elem, null );

			if ( computedStyle )
				ret = computedStyle.getPropertyValue( name );

			// We should always get a number back from opacity
			if ( name == "opacity" && ret == "" )
				ret = "1";

		} else if ( elem.currentStyle ) {
			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
				return letter.toUpperCase();
			});

			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

			// From the awesome hack by Dean Edwards
			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

			// If we're not dealing with a regular pixel number
			// but a number that has a weird ending, we need to convert it to pixels
			if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
				// Remember the original values
				var left = style.left, rsLeft = elem.runtimeStyle.left;

				// Put in the new values to get a computed value out
				elem.runtimeStyle.left = elem.currentStyle.left;
				style.left = ret || 0;
				ret = style.pixelLeft + "px";

				// Revert the changed values
				style.left = left;
				elem.runtimeStyle.left = rsLeft;
			}
		}

		return ret;
	},

	clean: function( elems, context, fragment ) {
		context = context || document;

		// !context.createElement fails in IE with an error but returns typeof 'object'
		if ( typeof context.createElement === "undefined" )
			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;

		// If a single string is passed in and it's a single tag
		// just do a createElement and skip the rest
		if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
			var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
			if ( match )
				return [ context.createElement( match[1] ) ];
		}

		var ret = [], scripts = [], div = context.createElement("div");

		jQuery.each(elems, function(i, elem){
			if ( typeof elem === "number" )
				elem += '';

			if ( !elem )
				return;

			// Convert html string into DOM nodes
			if ( typeof elem === "string" ) {
				// Fix "XHTML"-style tags in all browsers
				elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
						all :
						front + "></" + tag + ">";
				});

				// Trim whitespace, otherwise indexOf won't work as expected
				var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();

				var wrap =
					// option or optgroup
					!tags.indexOf("<opt") &&
					[ 1, "<select multiple='multiple'>", "</select>" ] ||

					!tags.indexOf("<leg") &&
					[ 1, "<fieldset>", "</fieldset>" ] ||

					tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
					[ 1, "<table>", "</table>" ] ||

					!tags.indexOf("<tr") &&
					[ 2, "<table><tbody>", "</tbody></table>" ] ||

				 	// <thead> matched above
					(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
					[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||

					!tags.indexOf("<col") &&
					[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||

					// IE can't serialize <link> and <script> tags normally
					!jQuery.support.htmlSerialize &&
					[ 1, "div<div>", "</div>" ] ||

					[ 0, "", "" ];

				// Go to html and back, then peel off extra wrappers
				div.innerHTML = wrap[1] + elem + wrap[2];

				// Move to the right depth
				while ( wrap[0]-- )
					div = div.lastChild;

				// Remove IE's autoinserted <tbody> from table fragments
				if ( !jQuery.support.tbody ) {

					// String was a <table>, *may* have spurious <tbody>
					var hasBody = /<tbody/i.test(elem),
						tbody = !tags.indexOf("<table") && !hasBody ?
							div.firstChild && div.firstChild.childNodes :

						// String was a bare <thead> or <tfoot>
						wrap[1] == "<table>" && !hasBody ?
							div.childNodes :
							[];

					for ( var j = tbody.length - 1; j >= 0 ; --j )
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
							tbody[ j ].parentNode.removeChild( tbody[ j ] );

					}

				// IE completely kills leading whitespace when innerHTML is used
				if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
					div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
				
				elem = jQuery.makeArray( div.childNodes );
			}

			if ( elem.nodeType )
				ret.push( elem );
			else
				ret = jQuery.merge( ret, elem );

		});

		if ( fragment ) {
			for ( var i = 0; ret[i]; i++ ) {
				if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
				} else {
					if ( ret[i].nodeType === 1 )
						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
					fragment.appendChild( ret[i] );
				}
			}
			
			return scripts;
		}

		return ret;
	},

	attr: function( elem, name, value ) {
		// don't set attributes on text and comment nodes
		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
			return undefined;

		var notxml = !jQuery.isXMLDoc( elem ),
			// Whether we are setting (or getting)
			set = value !== undefined;

		// Try to normalize/fix the name
		name = notxml && jQuery.props[ name ] || name;

		// Only do all the following if this is a node (faster for style)
		// IE elem.getAttribute passes even for style
		if ( elem.tagName ) {

			// These attributes require special treatment
			var special = /href|src|style/.test( name );

			// Safari mis-reports the default selected property of a hidden option
			// Accessing the parent's selectedIndex property fixes it
			if ( name == "selected" && elem.parentNode )
				elem.parentNode.selectedIndex;

			// If applicable, access the attribute via the DOM 0 way
			if ( name in elem && notxml && !special ) {
				if ( set ){
					// We can't allow the type property to be changed (since it causes problems in IE)
					if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
						throw "type property can't be changed";

					elem[ name ] = value;
				}

				// browsers index elements by id/name on forms, give priority to attributes.
				if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
					return elem.getAttributeNode( name ).nodeValue;

				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
				if ( name == "tabIndex" ) {
					var attributeNode = elem.getAttributeNode( "tabIndex" );
					return attributeNode && attributeNode.specified
						? attributeNode.value
						: elem.nodeName.match(/(button|input|object|select|textarea)/i)
							? 0
							: elem.nodeName.match(/^(a|area)$/i) && elem.href
								? 0
								: undefined;
				}

				return elem[ name ];
			}

			if ( !jQuery.support.style && notxml &&  name == "style" )
				return jQuery.attr( elem.style, "cssText", value );

			if ( set )
				// convert the value to a string (all browsers do this but IE) see #1070
				elem.setAttribute( name, "" + value );

			var attr = !jQuery.support.hrefNormalized && notxml && special
					// Some attributes require a special call on IE
					? elem.getAttribute( name, 2 )
					: elem.getAttribute( name );

			// Non-existent attributes return null, we normalize to undefined
			return attr === null ? undefined : attr;
		}

		// elem is actually elem.style ... set the style

		// IE uses filters for opacity
		if ( !jQuery.support.opacity && name == "opacity" ) {
			if ( set ) {
				// IE has trouble with opacity if it does not have layout
				// Force it by setting the zoom level
				elem.zoom = 1;

				// Set the alpha filter to set the opacity
				elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
					(parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
			}

			return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
				(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
				"";
		}

		name = name.replace(/-([a-z])/ig, function(all, letter){
			return letter.toUpperCase();
		});

		if ( set )
			elem[ name ] = value;

		return elem[ name ];
	},

	trim: function( text ) {
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},

	makeArray: function( array ) {
		var ret = [];

		if( array != null ){
			var i = array.length;
			// The window, strings (and functions) also have 'length'
			if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
				ret[0] = array;
			else
				while( i )
					ret[--i] = array[i];
		}

		return ret;
	},

	inArray: function( elem, array ) {
		for ( var i = 0, length = array.length; i < length; i++ )
		// Use === because on IE, window == document
			if ( array[ i ] === elem )
				return i;

		return -1;
	},

	merge: function( first, second ) {
		// We have to loop this way because IE & Opera overwrite the length
		// expando of getElementsByTagName
		var i = 0, elem, pos = first.length;
		// Also, we need to make sure that the correct elements are being returned
		// (IE returns comment nodes in a '*' query)
		if ( !jQuery.support.getAll ) {
			while ( (elem = second[ i++ ]) != null )
				if ( elem.nodeType != 8 )
					first[ pos++ ] = elem;

		} else
			while ( (elem = second[ i++ ]) != null )
				first[ pos++ ] = elem;

		return first;
	},

	unique: function( array ) {
		var ret = [], done = {};

		try {

			for ( var i = 0, length = array.length; i < length; i++ ) {
				var id = jQuery.data( array[ i ] );

				if ( !done[ id ] ) {
					done[ id ] = true;
					ret.push( array[ i ] );
				}
			}

		} catch( e ) {
			ret = array;
		}

		return ret;
	},

	grep: function( elems, callback, inv ) {
		var ret = [];

		// Go through the array, only saving the items
		// that pass the validator function
		for ( var i = 0, length = elems.length; i < length; i++ )
			if ( !inv != !callback( elems[ i ], i ) )
				ret.push( elems[ i ] );

		return ret;
	},

	map: function( elems, callback ) {
		var ret = [];

		// Go through the array, translating each of the items to their
		// new value (or values).
		for ( var i = 0, length = elems.length; i < length; i++ ) {
			var value = callback( elems[ i ], i );

			if ( value != null )
				ret[ ret.length ] = value;
		}

		return ret.concat.apply( [], ret );
	}
});

// Use of jQuery.browser is deprecated.
// It's included for backwards compatibility and plugins,
// although they should work to migrate away.

var userAgent = navigator.userAgent.toLowerCase();

// Figure out what browser is being used
jQuery.browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

jQuery.each({
	parent: function(elem){return elem.parentNode;},
	parents: function(elem){return jQuery.dir(elem,"parentNode");},
	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
	children: function(elem){return jQuery.sibling(elem.firstChild);},
	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
	jQuery.fn[ name ] = function( selector ) {
		var ret = jQuery.map( this, fn );

		if ( selector && typeof selector == "string" )
			ret = jQuery.multiFilter( selector, ret );

		return this.pushStack( jQuery.unique( ret ), name, selector );
	};
});

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function(name, original){
	jQuery.fn[ name ] = function( selector ) {
		var ret = [], insert = jQuery( selector );

		for ( var i = 0, l = insert.length; i < l; i++ ) {
			var elems = (i > 0 ? this.clone(true) : this).get();
			jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
			ret = ret.concat( elems );
		}

		return this.pushStack( ret, name, selector );
	};
});

jQuery.each({
	removeAttr: function( name ) {
		jQuery.attr( this, name, "" );
		if (this.nodeType == 1)
			this.removeAttribute( name );
	},

	addClass: function( classNames ) {
		jQuery.className.add( this, classNames );
	},

	removeClass: function( classNames ) {
		jQuery.className.remove( this, classNames );
	},

	toggleClass: function( classNames, state ) {
		if( typeof state !== "boolean" )
			state = !jQuery.className.has( this, classNames );
		jQuery.className[ state ? "add" : "remove" ]( this, classNames );
	},

	remove: function( selector ) {
		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
			// Prevent memory leaks
			jQuery( "*", this ).add([this]).each(function(){
				jQuery.event.remove(this);
				jQuery.removeData(this);
			});
			if (this.parentNode)
				this.parentNode.removeChild( this );
		}
	},

	empty: function() {
		// Remove element nodes and prevent memory leaks
		jQuery(this).children().remove();

		// Remove any remaining nodes
		while ( this.firstChild )
			this.removeChild( this.firstChild );
	}
}, function(name, fn){
	jQuery.fn[ name ] = function(){
		return this.each( fn, arguments );
	};
});

// Helper function used by the dimensions and offset modules
function num(elem, prop) {
	return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
}
var expando = "jQuery" + now(), uuid = 0, windowData = {};

jQuery.extend({
	cache: {},

	data: function( elem, name, data ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		// Compute a unique ID for the element
		if ( !id )
			id = elem[ expando ] = ++uuid;

		// Only generate the data cache if we're
		// trying to access or manipulate it
		if ( name && !jQuery.cache[ id ] )
			jQuery.cache[ id ] = {};

		// Prevent overriding the named cache with undefined values
		if ( data !== undefined )
			jQuery.cache[ id ][ name ] = data;

		// Return the named cache data, or the ID for the element
		return name ?
			jQuery.cache[ id ][ name ] :
			id;
	},

	removeData: function( elem, name ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		// If we want to remove a specific section of the element's data
		if ( name ) {
			if ( jQuery.cache[ id ] ) {
				// Remove the section of cache data
				delete jQuery.cache[ id ][ name ];

				// If we've removed all the data, remove the element's cache
				name = "";

				for ( name in jQuery.cache[ id ] )
					break;

				if ( !name )
					jQuery.removeData( elem );
			}

		// Otherwise, we want to remove all of the element's data
		} else {
			// Clean up the element expando
			try {
				delete elem[ expando ];
			} catch(e){
				// IE has trouble directly removing the expando
				// but it's ok with using removeAttribute
				if ( elem.removeAttribute )
					elem.removeAttribute( expando );
			}

			// Completely remove the data cache
			delete jQuery.cache[ id ];
		}
	},
	queue: function( elem, type, data ) {
		if ( elem ){
	
			type = (type || "fx") + "queue";
	
			var q = jQuery.data( elem, type );
	
			if ( !q || jQuery.isArray(data) )
				q = jQuery.data( elem, type, jQuery.makeArray(data) );
			else if( data )
				q.push( data );
	
		}
		return q;
	},

	dequeue: function( elem, type ){
		var queue = jQuery.queue( elem, type ),
			fn = queue.shift();
		
		if( !type || type === "fx" )
			fn = queue[0];
			
		if( fn !== undefined )
			fn.call(elem);
	}
});

jQuery.fn.extend({
	data: function( key, value ){
		var parts = key.split(".");
		parts[1] = parts[1] ? "." + parts[1] : "";

		if ( value === undefined ) {
			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

			if ( data === undefined && this.length )
				data = jQuery.data( this[0], key );

			return data === undefined && parts[1] ?
				this.data( parts[0] ) :
				data;
		} else
			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
				jQuery.data( this, key, value );
			});
	},

	removeData: function( key ){
		return this.each(function(){
			jQuery.removeData( this, key );
		});
	},
	queue: function(type, data){
		if ( typeof type !== "string" ) {
			data = type;
			type = "fx";
		}

		if ( data === undefined )
			return jQuery.queue( this[0], type );

		return this.each(function(){
			var queue = jQuery.queue( this, type, data );
			
			 if( type == "fx" && queue.length == 1 )
				queue[0].call(this);
		});
	},
	dequeue: function(type){
		return this.each(function(){
			jQuery.dequeue( this, type );
		});
	}
});/*!
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
	done = 0,
	toString = Object.prototype.toString;

var Sizzle = function(selector, context, results, seed) {
	results = results || [];
	context = context || document;

	if ( context.nodeType !== 1 && context.nodeType !== 9 )
		return [];
	
	if ( !selector || typeof selector !== "string" ) {
		return results;
	}

	var parts = [], m, set, checkSet, check, mode, extra, prune = true;
	
	// Reset the position of the chunker regexp (start from head)
	chunker.lastIndex = 0;
	
	while ( (m = chunker.exec(selector)) !== null ) {
		parts.push( m[1] );
		
		if ( m[2] ) {
			extra = RegExp.rightContext;
			break;
		}
	}

	if ( parts.length > 1 && origPOS.exec( selector ) ) {
		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
			set = posProcess( parts[0] + parts[1], context );
		} else {
			set = Expr.relative[ parts[0] ] ?
				[ context ] :
				Sizzle( parts.shift(), context );

			while ( parts.length ) {
				selector = parts.shift();

				if ( Expr.relative[ selector ] )
					selector += parts.shift();

				set = posProcess( selector, set );
			}
		}
	} else {
		var ret = seed ?
			{ expr: parts.pop(), set: makeArray(seed) } :
			Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
		set = Sizzle.filter( ret.expr, ret.set );

		if ( parts.length > 0 ) {
			checkSet = makeArray(set);
		} else {
			prune = false;
		}

		while ( parts.length ) {
			var cur = parts.pop(), pop = cur;

			if ( !Expr.relative[ cur ] ) {
				cur = "";
			} else {
				pop = parts.pop();
			}

			if ( pop == null ) {
				pop = context;
			}

			Expr.relative[ cur ]( checkSet, pop, isXML(context) );
		}
	}

	if ( !checkSet ) {
		checkSet = set;
	}

	if ( !checkSet ) {
		throw "Syntax error, unrecognized expression: " + (cur || selector);
	}

	if ( toString.call(checkSet) === "[object Array]" ) {
		if ( !prune ) {
			results.push.apply( results, checkSet );
		} else if ( context.nodeType === 1 ) {
			for ( var i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
					results.push( set[i] );
				}
			}
		} else {
			for ( var i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
					results.push( set[i] );
				}
			}
		}
	} else {
		makeArray( checkSet, results );
	}

	if ( extra ) {
		Sizzle( extra, context, results, seed );

		if ( sortOrder ) {
			hasDuplicate = false;
			results.sort(sortOrder);

			if ( hasDuplicate ) {
				for ( var i = 1; i < results.length; i++ ) {
					if ( results[i] === results[i-1] ) {
						results.splice(i--, 1);
					}
				}
			}
		}
	}

	return results;
};

Sizzle.matches = function(expr, set){
	return Sizzle(expr, null, null, set);
};

Sizzle.find = function(expr, context, isXML){
	var set, match;

	if ( !expr ) {
		return [];
	}

	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
		var type = Expr.order[i], match;
		
		if ( (match = Expr.match[ type ].exec( expr )) ) {
			var left = RegExp.leftContext;

			if ( left.substr( left.length - 1 ) !== "\\" ) {
				match[1] = (match[1] || "").replace(/\\/g, "");
				set = Expr.find[ type ]( match, context, isXML );
				if ( set != null ) {
					expr = expr.replace( Expr.match[ type ], "" );
					break;
				}
			}
		}
	}

	if ( !set ) {
		set = context.getElementsByTagName("*");
	}

	return {set: set, expr: expr};
};

Sizzle.filter = function(expr, set, inplace, not){
	var old = expr, result = [], curLoop = set, match, anyFound,
		isXMLFilter = set && set[0] && isXML(set[0]);

	while ( expr && set.length ) {
		for ( var type in Expr.filter ) {
			if ( (match = Expr.match[ type ].exec( expr )) != null ) {
				var filter = Expr.filter[ type ], found, item;
				anyFound = false;

				if ( curLoop == result ) {
					result = [];
				}

				if ( Expr.preFilter[ type ] ) {
					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

					if ( !match ) {
						anyFound = found = true;
					} else if ( match === true ) {
						continue;
					}
				}

				if ( match ) {
					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
						if ( item ) {
							found = filter( item, match, i, curLoop );
							var pass = not ^ !!found;

							if ( inplace && found != null ) {
								if ( pass ) {
									anyFound = true;
								} else {
									curLoop[i] = false;
								}
							} else if ( pass ) {
								result.push( item );
								anyFound = true;
							}
						}
					}
				}

				if ( found !== undefined ) {
					if ( !inplace ) {
						curLoop = result;
					}

					expr = expr.replace( Expr.match[ type ], "" );

					if ( !anyFound ) {
						return [];
					}

					break;
				}
			}
		}

		// Improper expression
		if ( expr == old ) {
			if ( anyFound == null ) {
				throw "Syntax error, unrecognized expression: " + expr;
			} else {
				break;
			}
		}

		old = expr;
	}

	return curLoop;
};

var Expr = Sizzle.selectors = {
	order: [ "ID", "NAME", "TAG" ],
	match: {
		ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
		CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
		TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
		PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
	},
	attrMap: {
		"class": "className",
		"for": "htmlFor"
	},
	attrHandle: {
		href: function(elem){
			return elem.getAttribute("href");
		}
	},
	relative: {
		"+": function(checkSet, part, isXML){
			var isPartStr = typeof part === "string",
				isTag = isPartStr && !/\W/.test(part),
				isPartStrNotTag = isPartStr && !isTag;

			if ( isTag && !isXML ) {
				part = part.toUpperCase();
			}

			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
				if ( (elem = checkSet[i]) ) {
					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

					checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
						elem || false :
						elem === part;
				}
			}

			if ( isPartStrNotTag ) {
				Sizzle.filter( part, checkSet, true );
			}
		},
		">": function(checkSet, part, isXML){
			var isPartStr = typeof part === "string";

			if ( isPartStr && !/\W/.test(part) ) {
				part = isXML ? part : part.toUpperCase();

				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
					var elem = checkSet[i];
					if ( elem ) {
						var parent = elem.parentNode;
						checkSet[i] = parent.nodeName === part ? parent : false;
					}
				}
			} else {
				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
					var elem = checkSet[i];
					if ( elem ) {
						checkSet[i] = isPartStr ?
							elem.parentNode :
							elem.parentNode === part;
					}
				}

				if ( isPartStr ) {
					Sizzle.filter( part, checkSet, true );
				}
			}
		},
		"": function(checkSet, part, isXML){
			var doneName = done++, checkFn = dirCheck;

			if ( !part.match(/\W/) ) {
				var nodeCheck = part = isXML ? part : part.toUpperCase();
				checkFn = dirNodeCheck;
			}

			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
		},
		"~": function(checkSet, part, isXML){
			var doneName = done++, checkFn = dirCheck;

			if ( typeof part === "string" && !part.match(/\W/) ) {
				var nodeCheck = part = isXML ? part : part.toUpperCase();
				checkFn = dirNodeCheck;
			}

			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
		}
	},
	find: {
		ID: function(match, context, isXML){
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				return m ? [m] : [];
			}
		},
		NAME: function(match, context, isXML){
			if ( typeof context.getElementsByName !== "undefined" ) {
				var ret = [], results = context.getElementsByName(match[1]);

				for ( var i = 0, l = results.length; i < l; i++ ) {
					if ( results[i].getAttribute("name") === match[1] ) {
						ret.push( results[i] );
					}
				}

				return ret.length === 0 ? null : ret;
			}
		},
		TAG: function(match, context){
			return context.getElementsByTagName(match[1]);
		}
	},
	preFilter: {
		CLASS: function(match, curLoop, inplace, result, not, isXML){
			match = " " + match[1].replace(/\\/g, "") + " ";

			if ( isXML ) {
				return match;
			}

			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
				if ( elem ) {
					if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
						if ( !inplace )
							result.push( elem );
					} else if ( inplace ) {
						curLoop[i] = false;
					}
				}
			}

			return false;
		},
		ID: function(match){
			return match[1].replace(/\\/g, "");
		},
		TAG: function(match, curLoop){
			for ( var i = 0; curLoop[i] === false; i++ ){}
			return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
		},
		CHILD: function(match){
			if ( match[1] == "nth" ) {
				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
					match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

				// calculate the numbers (first)n+(last) including if they are negative
				match[2] = (test[1] + (test[2] || 1)) - 0;
				match[3] = test[3] - 0;
			}

			// TODO: Move to normal caching system
			match[0] = done++;

			return match;
		},
		ATTR: function(match, curLoop, inplace, result, not, isXML){
			var name = match[1].replace(/\\/g, "");
			
			if ( !isXML && Expr.attrMap[name] ) {
				match[1] = Expr.attrMap[name];
			}

			if ( match[2] === "~=" ) {
				match[4] = " " + match[4] + " ";
			}

			return match;
		},
		PSEUDO: function(match, curLoop, inplace, result, not){
			if ( match[1] === "not" ) {
				// If we're dealing with a complex expression, or a simple one
				if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
					match[3] = Sizzle(match[3], null, null, curLoop);
				} else {
					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
					if ( !inplace ) {
						result.push.apply( result, ret );
					}
					return false;
				}
			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
				return true;
			}
			
			return match;
		},
		POS: function(match){
			match.unshift( true );
			return match;
		}
	},
	filters: {
		enabled: function(elem){
			return elem.disabled === false && elem.type !== "hidden";
		},
		disabled: function(elem){
			return elem.disabled === true;
		},
		checked: function(elem){
			return elem.checked === true;
		},
		selected: function(elem){
			// Accessing this property makes selected-by-default
			// options in Safari work properly
			elem.parentNode.selectedIndex;
			return elem.selected === true;
		},
		parent: function(elem){
			return !!elem.firstChild;
		},
		empty: function(elem){
			return !elem.firstChild;
		},
		has: function(elem, i, match){
			return !!Sizzle( match[3], elem ).length;
		},
		header: function(elem){
			return /h\d/i.test( elem.nodeName );
		},
		text: function(elem){
			return "text" === elem.type;
		},
		radio: function(elem){
			return "radio" === elem.type;
		},
		checkbox: function(elem){
			return "checkbox" === elem.type;
		},
		file: function(elem){
			return "file" === elem.type;
		},
		password: function(elem){
			return "password" === elem.type;
		},
		submit: function(elem){
			return "submit" === elem.type;
		},
		image: function(elem){
			return "image" === elem.type;
		},
		reset: function(elem){
			return "reset" === elem.type;
		},
		button: function(elem){
			return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
		},
		input: function(elem){
			return /input|select|textarea|button/i.test(elem.nodeName);
		}
	},
	setFilters: {
		first: function(elem, i){
			return i === 0;
		},
		last: function(elem, i, match, array){
			return i === array.length - 1;
		},
		even: function(elem, i){
			return i % 2 === 0;
		},
		odd: function(elem, i){
			return i % 2 === 1;
		},
		lt: function(elem, i, match){
			return i < match[3] - 0;
		},
		gt: function(elem, i, match){
			return i > match[3] - 0;
		},
		nth: function(elem, i, match){
			return match[3] - 0 == i;
		},
		eq: function(elem, i, match){
			return match[3] - 0 == i;
		}
	},
	filter: {
		PSEUDO: function(elem, match, i, array){
			var name = match[1], filter = Expr.filters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			} else if ( name === "contains" ) {
				return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
			} else if ( name === "not" ) {
				var not = match[3];

				for ( var i = 0, l = not.length; i < l; i++ ) {
					if ( not[i] === elem ) {
						return false;
					}
				}

				return true;
			}
		},
		CHILD: function(elem, match){
			var type = match[1], node = elem;
			switch (type) {
				case 'only':
				case 'first':
					while (node = node.previousSibling)  {
						if ( node.nodeType === 1 ) return false;
					}
					if ( type == 'first') return true;
					node = elem;
				case 'last':
					while (node = node.nextSibling)  {
						if ( node.nodeType === 1 ) return false;
					}
					return true;
				case 'nth':
					var first = match[2], last = match[3];

					if ( first == 1 && last == 0 ) {
						return true;
					}
					
					var doneName = match[0],
						parent = elem.parentNode;
	
					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
						var count = 0;
						for ( node = parent.firstChild; node; node = node.nextSibling ) {
							if ( node.nodeType === 1 ) {
								node.nodeIndex = ++count;
							}
						} 
						parent.sizcache = doneName;
					}
					
					var diff = elem.nodeIndex - last;
					if ( first == 0 ) {
						return diff == 0;
					} else {
						return ( diff % first == 0 && diff / first >= 0 );
					}
			}
		},
		ID: function(elem, match){
			return elem.nodeType === 1 && elem.getAttribute("id") === match;
		},
		TAG: function(elem, match){
			return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
		},
		CLASS: function(elem, match){
			return (" " + (elem.className || elem.getAttribute("class")) + " ")
				.indexOf( match ) > -1;
		},
		ATTR: function(elem, match){
			var name = match[1],
				result = Expr.attrHandle[ name ] ?
					Expr.attrHandle[ name ]( elem ) :
					elem[ name ] != null ?
						elem[ name ] :
						elem.getAttribute( name ),
				value = result + "",
				type = match[2],
				check = match[4];

			return result == null ?
				type === "!=" :
				type === "=" ?
				value === check :
				type === "*=" ?
				value.indexOf(check) >= 0 :
				type === "~=" ?
				(" " + value + " ").indexOf(check) >= 0 :
				!check ?
				value && result !== false :
				type === "!=" ?
				value != check :
				type === "^=" ?
				value.indexOf(check) === 0 :
				type === "$=" ?
				value.substr(value.length - check.length) === check :
				type === "|=" ?
				value === check || value.substr(0, check.length + 1) === check + "-" :
				false;
		},
		POS: function(elem, match, i, array){
			var name = match[2], filter = Expr.setFilters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			}
		}
	}
};

var origPOS = Expr.match.POS;

for ( var type in Expr.match ) {
	Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
}

var makeArray = function(array, results) {
	array = Array.prototype.slice.call( array );

	if ( results ) {
		results.push.apply( results, array );
		return results;
	}
	
	return array;
};

// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
try {
	Array.prototype.slice.call( document.documentElement.childNodes );

// Provide a fallback method if it does not work
} catch(e){
	makeArray = function(array, results) {
		var ret = results || [];

		if ( toString.call(array) === "[object Array]" ) {
			Array.prototype.push.apply( ret, array );
		} else {
			if ( typeof array.length === "number" ) {
				for ( var i = 0, l = array.length; i < l; i++ ) {
					ret.push( array[i] );
				}
			} else {
				for ( var i = 0; array[i]; i++ ) {
					ret.push( array[i] );
				}
			}
		}

		return ret;
	};
}

var sortOrder;

if ( document.documentElement.compareDocumentPosition ) {
	sortOrder = function( a, b ) {
		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( "sourceIndex" in document.documentElement ) {
	sortOrder = function( a, b ) {
		var ret = a.sourceIndex - b.sourceIndex;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( document.createRange ) {
	sortOrder = function( a, b ) {
		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
		aRange.selectNode(a);
		aRange.collapse(true);
		bRange.selectNode(b);
		bRange.collapse(true);
		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
}

// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
	// We're going to inject a fake input element with a specified name
	var form = document.createElement("form"),
		id = "script" + (new Date).getTime();
	form.innerHTML = "<input name='" + id + "'/>";

	// Inject it into the root element, check its status, and remove it quickly
	var root = document.documentElement;
	root.insertBefore( form, root.firstChild );

	// The workaround has to do additional checks after a getElementById
	// Which slows things down for other browsers (hence the branching)
	if ( !!document.getElementById( id ) ) {
		Expr.find.ID = function(match, context, isXML){
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
			}
		};

		Expr.filter.ID = function(elem, match){
			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
			return elem.nodeType === 1 && node && node.nodeValue === match;
		};
	}

	root.removeChild( form );
})();

(function(){
	// Check to see if the browser returns only elements
	// when doing getElementsByTagName("*")

	// Create a fake element
	var div = document.createElement("div");
	div.appendChild( document.createComment("") );

	// Make sure no comments are found
	if ( div.getElementsByTagName("*").length > 0 ) {
		Expr.find.TAG = function(match, context){
			var results = context.getElementsByTagName(match[1]);

			// Filter out possible comments
			if ( match[1] === "*" ) {
				var tmp = [];

				for ( var i = 0; results[i]; i++ ) {
					if ( results[i].nodeType === 1 ) {
						tmp.push( results[i] );
					}
				}

				results = tmp;
			}

			return results;
		};
	}

	// Check to see if an attribute returns normalized href attributes
	div.innerHTML = "<a href='#'></a>";
	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
			div.firstChild.getAttribute("href") !== "#" ) {
		Expr.attrHandle.href = function(elem){
			return elem.getAttribute("href", 2);
		};
	}
})();

if ( document.querySelectorAll ) (function(){
	var oldSizzle = Sizzle, div = document.createElement("div");
	div.innerHTML = "<p class='TEST'></p>";

	// Safari can't handle uppercase or unicode characters when
	// in quirks mode.
	if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
		return;
	}
	
	Sizzle = function(query, context, extra, seed){
		context = context || document;

		// Only use querySelectorAll on non-XML documents
		// (ID selectors don't work in non-HTML documents)
		if ( !seed && context.nodeType === 9 && !isXML(context) ) {
			try {
				return makeArray( context.querySelectorAll(query), extra );
			} catch(e){}
		}
		
		return oldSizzle(query, context, extra, seed);
	};

	Sizzle.find = oldSizzle.find;
	Sizzle.filter = oldSizzle.filter;
	Sizzle.selectors = oldSizzle.selectors;
	Sizzle.matches = oldSizzle.matches;
})();

if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
	var div = document.createElement("div");
	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

	// Opera can't find a second classname (in 9.6)
	if ( div.getElementsByClassName("e").length === 0 )
		return;

	// Safari caches class attributes, doesn't catch changes (in 3.2)
	div.lastChild.className = "e";

	if ( div.getElementsByClassName("e").length === 1 )
		return;

	Expr.order.splice(1, 0, "CLASS");
	Expr.find.CLASS = function(match, context, isXML) {
		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
			return context.getElementsByClassName(match[1]);
		}
	};
})();

function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	var sibDir = dir == "previousSibling" && !isXML;
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];
		if ( elem ) {
			if ( sibDir && elem.nodeType === 1 ){
				elem.sizcache = doneName;
				elem.sizset = i;
			}
			elem = elem[dir];
			var match = false;

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 && !isXML ){
					elem.sizcache = doneName;
					elem.sizset = i;
				}

				if ( elem.nodeName === cur ) {
					match = elem;
					break;
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	var sibDir = dir == "previousSibling" && !isXML;
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];
		if ( elem ) {
			if ( sibDir && elem.nodeType === 1 ) {
				elem.sizcache = doneName;
				elem.sizset = i;
			}
			elem = elem[dir];
			var match = false;

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 ) {
					if ( !isXML ) {
						elem.sizcache = doneName;
						elem.sizset = i;
					}
					if ( typeof cur !== "string" ) {
						if ( elem === cur ) {
							match = true;
							break;
						}

					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
						match = elem;
						break;
					}
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

var contains = document.compareDocumentPosition ?  function(a, b){
	return a.compareDocumentPosition(b) & 16;
} : function(a, b){
	return a !== b && (a.contains ? a.contains(b) : true);
};

var isXML = function(elem){
	return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
		!!elem.ownerDocument && isXML( elem.ownerDocument );
};

var posProcess = function(selector, context){
	var tmpSet = [], later = "", match,
		root = context.nodeType ? [context] : context;

	// Position selectors must be done after the filter
	// And so must :not(positional) so we move all PSEUDOs to the end
	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
		later += match[0];
		selector = selector.replace( Expr.match.PSEUDO, "" );
	}

	selector = Expr.relative[selector] ? selector + "*" : selector;

	for ( var i = 0, l = root.length; i < l; i++ ) {
		Sizzle( selector, root[i], tmpSet );
	}

	return Sizzle.filter( later, tmpSet );
};

// EXPOSE
jQuery.find = Sizzle;
jQuery.filter = Sizzle.filter;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;

Sizzle.selectors.filters.hidden = function(elem){
	return elem.offsetWidth === 0 || elem.offsetHeight === 0;
};

Sizzle.selectors.filters.visible = function(elem){
	return elem.offsetWidth > 0 || elem.offsetHeight > 0;
};

Sizzle.selectors.filters.animated = function(elem){
	return jQuery.grep(jQuery.timers, function(fn){
		return elem === fn.elem;
	}).length;
};

jQuery.multiFilter = function( expr, elems, not ) {
	if ( not ) {
		expr = ":not(" + expr + ")";
	}

	return Sizzle.matches(expr, elems);
};

jQuery.dir = function( elem, dir ){
	var matched = [], cur = elem[dir];
	while ( cur && cur != document ) {
		if ( cur.nodeType == 1 )
			matched.push( cur );
		cur = cur[dir];
	}
	return matched;
};

jQuery.nth = function(cur, result, dir, elem){
	result = result || 1;
	var num = 0;

	for ( ; cur; cur = cur[dir] )
		if ( cur.nodeType == 1 && ++num == result )
			break;

	return cur;
};

jQuery.sibling = function(n, elem){
	var r = [];

	for ( ; n; n = n.nextSibling ) {
		if ( n.nodeType == 1 && n != elem )
			r.push( n );
	}

	return r;
};

return;

window.Sizzle = Sizzle;

})();
/*
 * A number of helper functions used for managing events.
 * Many of the ideas behind this code originated from
 * Dean Edwards' addEvent library.
 */
jQuery.event = {

	// Bind an event to an element
	// Original by Dean Edwards
	add: function(elem, types, handler, data) {
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		// For whatever reason, IE has trouble passing the window object
		// around, causing it to be cloned in the process
		if ( elem.setInterval && elem != window )
			elem = window;

		// Make sure that the function being executed has a unique ID
		if ( !handler.guid )
			handler.guid = this.guid++;

		// if data is passed, bind to handler
		if ( data !== undefined ) {
			// Create temporary function pointer to original handler
			var fn = handler;

			// Create unique handler function, wrapped around original handler
			handler = this.proxy( fn );

			// Store data in unique handler
			handler.data = data;
		}

		// Init the element's event structure
		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
				// Handle the second event of a trigger and when
				// an event is called after a page has unloaded
				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
					jQuery.event.handle.apply(arguments.callee.elem, arguments) :
					undefined;
			});
		// Add elem as a property of the handle function
		// This is to prevent a memory leak with non-native
		// event in IE.
		handle.elem = elem;

		// Handle multiple events separated by a space
		// jQuery(...).bind("mouseover mouseout", fn);
		jQuery.each(types.split(/\s+/), function(index, type) {
			// Namespaced event handlers
			var namespaces = type.split(".");
			type = namespaces.shift();
			handler.type = namespaces.slice().sort().join(".");

			// Get the current list of functions bound to this event
			var handlers = events[type];
			
			if ( jQuery.event.specialAll[type] )
				jQuery.event.specialAll[type].setup.call(elem, data, namespaces);

			// Init the event handler queue
			if (!handlers) {
				handlers = events[type] = {};

				// Check for a special event handler
				// Only use addEventListener/attachEvent if the special
				// events handler returns false
				if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
					// Bind the global event handler to the element
					if (elem.addEventListener)
						elem.addEventListener(type, handle, false);
					else if (elem.attachEvent)
						elem.attachEvent("on" + type, handle);
				}
			}

			// Add the function to the element's handler list
			handlers[handler.guid] = handler;

			// Keep track of which events have been used, for global triggering
			jQuery.event.global[type] = true;
		});

		// Nullify elem to prevent memory leaks in IE
		elem = null;
	},

	guid: 1,
	global: {},

	// Detach an event or set of events from an element
	remove: function(elem, types, handler) {
		// don't do events on text and comment nodes
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		var events = jQuery.data(elem, "events"), ret, index;

		if ( events ) {
			// Unbind all events for the element
			if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
				for ( var type in events )
					this.remove( elem, type + (types || "") );
			else {
				// types is actually an event object here
				if ( types.type ) {
					handler = types.handler;
					types = types.type;
				}

				// Handle multiple events seperated by a space
				// jQuery(...).unbind("mouseover mouseout", fn);
				jQuery.each(types.split(/\s+/), function(index, type){
					// Namespaced event handlers
					var namespaces = type.split(".");
					type = namespaces.shift();
					var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");

					if ( events[type] ) {
						// remove the given handler for the given type
						if ( handler )
							delete events[type][handler.guid];

						// remove all handlers for the given type
						else
							for ( var handle in events[type] )
								// Handle the removal of namespaced events
								if ( namespace.test(events[type][handle].type) )
									delete events[type][handle];
									
						if ( jQuery.event.specialAll[type] )
							jQuery.event.specialAll[type].teardown.call(elem, namespaces);

						// remove generic event handler if no more handlers exist
						for ( ret in events[type] ) break;
						if ( !ret ) {
							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {
								if (elem.removeEventListener)
									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
								else if (elem.detachEvent)
									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
							}
							ret = null;
							delete events[type];
						}
					}
				});
			}

			// Remove the expando if it's no longer used
			for ( ret in events ) break;
			if ( !ret ) {
				var handle = jQuery.data( elem, "handle" );
				if ( handle ) handle.elem = null;
				jQuery.removeData( elem, "events" );
				jQuery.removeData( elem, "handle" );
			}
		}
	},

	// bubbling is internal
	trigger: function( event, data, elem, bubbling ) {
		// Event object or event type
		var type = event.type || event;

		if( !bubbling ){
			event = typeof event === "object" ?
				// jQuery.Event object
				event[expando] ? event :
				// Object literal
				jQuery.extend( jQuery.Event(type), event ) :
				// Just the event type (string)
				jQuery.Event(type);

			if ( type.indexOf("!") >= 0 ) {
				event.type = type = type.slice(0, -1);
				event.exclusive = true;
			}

			// Handle a global trigger
			if ( !elem ) {
				// Don't bubble custom events when global (to avoid too much overhead)
				event.stopPropagation();
				// Only trigger if we've ever bound an event for it
				if ( this.global[type] )
					jQuery.each( jQuery.cache, function(){
						if ( this.events && this.events[type] )
							jQuery.event.trigger( event, data, this.handle.elem );
					});
			}

			// Handle triggering a single element

			// don't do events on text and comment nodes
			if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
				return undefined;
			
			// Clean up in case it is reused
			event.result = undefined;
			event.target = elem;
			
			// Clone the incoming data, if any
			data = jQuery.makeArray(data);
			data.unshift( event );
		}

		event.currentTarget = elem;

		// Trigger the event, it is assumed that "handle" is a function
		var handle = jQuery.data(elem, "handle");
		if ( handle )
			handle.apply( elem, data );

		// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
		if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
			event.result = false;

		// Trigger the native events (except for clicks on links)
		if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
			this.triggered = true;
			try {
				elem[ type ]();
			// prevent IE from throwing an error for some hidden elements
			} catch (e) {}
		}

		this.triggered = false;

		if ( !event.isPropagationStopped() ) {
			var parent = elem.parentNode || elem.ownerDocument;
			if ( parent )
				jQuery.event.trigger(event, data, parent, true);
		}
	},

	handle: function(event) {
		// returned undefined or false
		var all, handlers;

		event = arguments[0] = jQuery.event.fix( event || window.event );
		event.currentTarget = this;
		
		// Namespaced event handlers
		var namespaces = event.type.split(".");
		event.type = namespaces.shift();

		// Cache this now, all = true means, any handler
		all = !namespaces.length && !event.exclusive;
		
		var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");

		handlers = ( jQuery.data(this, "events") || {} )[event.type];

		for ( var j in handlers ) {
			var handler = handlers[j];

			// Filter the functions by class
			if ( all || namespace.test(handler.type) ) {
				// Pass in a reference to the handler function itself
				// So that we can later remove it
				event.handler = handler;
				event.data = handler.data;

				var ret = handler.apply(this, arguments);

				if( ret !== undefined ){
					event.result = ret;
					if ( ret === false ) {
						event.preventDefault();
						event.stopPropagation();
					}
				}

				if( event.isImmediatePropagationStopped() )
					break;

			}
		}
	},

	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),

	fix: function(event) {
		if ( event[expando] )
			return event;

		// store a copy of the original event object
		// and "clone" to set read-only properties
		var originalEvent = event;
		event = jQuery.Event( originalEvent );

		for ( var i = this.props.length, prop; i; ){
			prop = this.props[ --i ];
			event[ prop ] = originalEvent[ prop ];
		}

		// Fix target property, if necessary
		if ( !event.target )
			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

		// check if target is a textnode (safari)
		if ( event.target.nodeType == 3 )
			event.target = event.target.parentNode;

		// Add relatedTarget, if necessary
		if ( !event.relatedTarget && event.fromElement )
			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

		// Calculate pageX/Y if missing and clientX/Y available
		if ( event.pageX == null && event.clientX != null ) {
			var doc = document.documentElement, body = document.body;
			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
			event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
		}

		// Add which for key events
		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
			event.which = event.charCode || event.keyCode;

		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
		if ( !event.metaKey && event.ctrlKey )
			event.metaKey = event.ctrlKey;

		// Add which for click: 1 == left; 2 == middle; 3 == right
		// Note: button is not normalized, so don't use it
		if ( !event.which && event.button )
			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

		return event;
	},

	proxy: function( fn, proxy ){
		proxy = proxy || function(){ return fn.apply(this, arguments); };
		// Set the guid of unique handler to the same of original handler, so it can be removed
		proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
		// So proxy can be declared as an argument
		return proxy;
	},

	special: {
		ready: {
			// Make sure the ready event is setup
			setup: bindReady,
			teardown: function() {}
		}
	},
	
	specialAll: {
		live: {
			setup: function( selector, namespaces ){
				jQuery.event.add( this, namespaces[0], liveHandler );
			},
			teardown:  function( namespaces ){
				if ( namespaces.length ) {
					var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
					
					jQuery.each( (jQuery.data(this, "events").live || {}), function(){
						if ( name.test(this.type) )
							remove++;
					});
					
					if ( remove < 1 )
						jQuery.event.remove( this, namespaces[0], liveHandler );
				}
			}
		}
	}
};

jQuery.Event = function( src ){
	// Allow instantiation without the 'new' keyword
	if( !this.preventDefault )
		return new jQuery.Event(src);
	
	// Event object
	if( src && src.type ){
		this.originalEvent = src;
		this.type = src.type;
	// Event type
	}else
		this.type = src;

	// timeStamp is buggy for some events on Firefox(#3843)
	// So we won't rely on the native value
	this.timeStamp = now();
	
	// Mark it as fixed
	this[expando] = true;
};

function returnFalse(){
	return false;
}
function returnTrue(){
	return true;
}

// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	preventDefault: function() {
		this.isDefaultPrevented = returnTrue;

		var e = this.originalEvent;
		if( !e )
			return;
		// if preventDefault exists run it on the original event
		if (e.preventDefault)
			e.preventDefault();
		// otherwise set the returnValue property of the original event to false (IE)
		e.returnValue = false;
	},
	stopPropagation: function() {
		this.isPropagationStopped = returnTrue;

		var e = this.originalEvent;
		if( !e )
			return;
		// if stopPropagation exists run it on the original event
		if (e.stopPropagation)
			e.stopPropagation();
		// otherwise set the cancelBubble property of the original event to true (IE)
		e.cancelBubble = true;
	},
	stopImmediatePropagation:function(){
		this.isImmediatePropagationStopped = returnTrue;
		this.stopPropagation();
	},
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse
};
// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function(event) {
	// Check if mouse(over|out) are still within the same parent element
	var parent = event.relatedTarget;
	// Traverse up the tree
	while ( parent && parent != this )
		try { parent = parent.parentNode; }
		catch(e) { parent = this; }
	
	if( parent != this ){
		// set the correct event type
		event.type = event.data;
		// handle event if we actually just moused on to a non sub-element
		jQuery.event.handle.apply( this, arguments );
	}
};
	
jQuery.each({ 
	mouseover: 'mouseenter', 
	mouseout: 'mouseleave'
}, function( orig, fix ){
	jQuery.event.special[ fix ] = {
		setup: function(){
			jQuery.event.add( this, orig, withinElement, fix );
		},
		teardown: function(){
			jQuery.event.remove( this, orig, withinElement );
		}
	};			   
});

jQuery.fn.extend({
	bind: function( type, data, fn ) {
		return type == "unload" ? this.one(type, data, fn) : this.each(function(){
			jQuery.event.add( this, type, fn || data, fn && data );
		});
	},

	one: function( type, data, fn ) {
		var one = jQuery.event.proxy( fn || data, function(event) {
			jQuery(this).unbind(event, one);
			return (fn || data).apply( this, arguments );
		});
		return this.each(function(){
			jQuery.event.add( this, type, one, fn && data);
		});
	},

	unbind: function( type, fn ) {
		return this.each(function(){
			jQuery.event.remove( this, type, fn );
		});
	},

	trigger: function( type, data ) {
		return this.each(function(){
			jQuery.event.trigger( type, data, this );
		});
	},

	triggerHandler: function( type, data ) {
		if( this[0] ){
			var event = jQuery.Event(type);
			event.preventDefault();
			event.stopPropagation();
			jQuery.event.trigger( event, data, this[0] );
			return event.result;
		}		
	},

	toggle: function( fn ) {
		// Save reference to arguments for access in closure
		var args = arguments, i = 1;

		// link all the functions, so any of them can unbind this click handler
		while( i < args.length )
			jQuery.event.proxy( fn, args[i++] );

		return this.click( jQuery.event.proxy( fn, function(event) {
			// Figure out which function to execute
			this.lastToggle = ( this.lastToggle || 0 ) % i;

			// Make sure that clicks stop
			event.preventDefault();

			// and execute the function
			return args[ this.lastToggle++ ].apply( this, arguments ) || false;
		}));
	},

	hover: function(fnOver, fnOut) {
		return this.mouseenter(fnOver).mouseleave(fnOut);
	},

	ready: function(fn) {
		// Attach the listeners
		bindReady();

		// If the DOM is already ready
		if ( jQuery.isReady )
			// Execute the function immediately
			fn.call( document, jQuery );

		// Otherwise, remember the function for later
		else
			// Add the function to the wait list
			jQuery.readyList.push( fn );

		return this;
	},
	
	live: function( type, fn ){
		var proxy = jQuery.event.proxy( fn );
		proxy.guid += this.selector + type;

		jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );

		return this;
	},
	
	die: function( type, fn ){
		jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
		return this;
	}
});

function liveHandler( event ){
	var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
		stop = true,
		elems = [];

	jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
		if ( check.test(fn.type) ) {
			var elem = jQuery(event.target).closest(fn.data)[0];
			if ( elem )
				elems.push({ elem: elem, fn: fn });
		}
	});

	elems.sort(function(a,b) {
		return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
	});
	
	jQuery.each(elems, function(){
		if ( this.fn.call(this.elem, event, this.fn.data) === false )
			return (stop = false);
	});

	return stop;
}

function liveConvert(type, selector){
	return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
}

jQuery.extend({
	isReady: false,
	readyList: [],
	// Handle when the DOM is ready
	ready: function() {
		// Make sure that the DOM is not already loaded
		if ( !jQuery.isReady ) {
			// Remember that the DOM is ready
			jQuery.isReady = true;

			// If there are functions bound, to execute
			if ( jQuery.readyList ) {
				// Execute all of them
				jQuery.each( jQuery.readyList, function(){
					this.call( document, jQuery );
				});

				// Reset the list of functions
				jQuery.readyList = null;
			}

			// Trigger any bound ready events
			jQuery(document).triggerHandler("ready");
		}
	}
});

var readyBound = false;

function bindReady(){
	if ( readyBound ) return;
	readyBound = true;

	// Mozilla, Opera and webkit nightlies currently support this event
	if ( document.addEventListener ) {
		// Use the handy event callback
		document.addEventListener( "DOMContentLoaded", function(){
			document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
			jQuery.ready();
		}, false );

	// If IE event model is used
	} else if ( document.attachEvent ) {
		// ensure firing before onload,
		// maybe late but safe also for iframes
		document.attachEvent("onreadystatechange", function(){
			if ( document.readyState === "complete" ) {
				document.detachEvent( "onreadystatechange", arguments.callee );
				jQuery.ready();
			}
		});

		// If IE and not an iframe
		// continually check to see if the document is ready
		if ( document.documentElement.doScroll && window == window.top ) (function(){
			if ( jQuery.isReady ) return;

			try {
				// If IE is used, use the trick by Diego Perini
				// http://javascript.nwbox.com/IEContentLoaded/
				document.documentElement.doScroll("left");
			} catch( error ) {
				setTimeout( arguments.callee, 0 );
				return;
			}

			// and execute any waiting functions
			jQuery.ready();
		})();
	}

	// A fallback to window.onload, that will always work
	jQuery.event.add( window, "load", jQuery.ready );
}

jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
	"mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
	"change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){

	// Handle event binding
	jQuery.fn[name] = function(fn){
		return fn ? this.bind(name, fn) : this.trigger(name);
	};
});

// Prevent memory leaks in IE
// And prevent errors on refresh with events like mouseover in other browsers
// Window isn't included so as not to unbind existing unload events
jQuery( window ).bind( 'unload', function(){ 
	for ( var id in jQuery.cache )
		// Skip the window
		if ( id != 1 && jQuery.cache[ id ].handle )
			jQuery.event.remove( jQuery.cache[ id ].handle.elem );
}); 
(function(){

	jQuery.support = {};

	var root = document.documentElement,
		script = document.createElement("script"),
		div = document.createElement("div"),
		id = "script" + (new Date).getTime();

	div.style.display = "none";
	div.innerHTML = '   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';

	var all = div.getElementsByTagName("*"),
		a = div.getElementsByTagName("a")[0];

	// Can't get basic test support
	if ( !all || !all.length || !a ) {
		return;
	}

	jQuery.support = {
		// IE strips leading whitespace when .innerHTML is used
		leadingWhitespace: div.firstChild.nodeType == 3,
		
		// Make sure that tbody elements aren't automatically inserted
		// IE will insert them into empty tables
		tbody: !div.getElementsByTagName("tbody").length,
		
		// Make sure that you can get all elements in an <object> element
		// IE 7 always returns no results
		objectAll: !!div.getElementsByTagName("object")[0]
			.getElementsByTagName("*").length,
		
		// Make sure that link elements get serialized correctly by innerHTML
		// This requires a wrapper element in IE
		htmlSerialize: !!div.getElementsByTagName("link").length,
		
		// Get the style information from getAttribute
		// (IE uses .cssText insted)
		style: /red/.test( a.getAttribute("style") ),
		
		// Make sure that URLs aren't manipulated
		// (IE normalizes it by default)
		hrefNormalized: a.getAttribute("href") === "/a",
		
		// Make sure that element opacity exists
		// (IE uses filter instead)
		opacity: a.style.opacity === "0.5",
		
		// Verify style float existence
		// (IE uses styleFloat instead of cssFloat)
		cssFloat: !!a.style.cssFloat,

		// Will be defined later
		scriptEval: false,
		noCloneEvent: true,
		boxModel: null
	};
	
	script.type = "text/javascript";
	try {
		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
	} catch(e){}

	root.insertBefore( script, root.firstChild );
	
	// Make sure that the execution of code works by injecting a script
	// tag with appendChild/createTextNode
	// (IE doesn't support this, fails, and uses .text instead)
	if ( window[ id ] ) {
		jQuery.support.scriptEval = true;
		delete window[ id ];
	}

	root.removeChild( script );

	if ( div.attachEvent && div.fireEvent ) {
		div.attachEvent("onclick", function(){
			// Cloning a node shouldn't copy over any
			// bound event handlers (IE does this)
			jQuery.support.noCloneEvent = false;
			div.detachEvent("onclick", arguments.callee);
		});
		div.cloneNode(true).fireEvent("onclick");
	}

	// Figure out if the W3C box model works as expected
	// document.body must exist before we can do this
	jQuery(function(){
		var div = document.createElement("div");
		div.style.width = div.style.paddingLeft = "1px";

		document.body.appendChild( div );
		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
		document.body.removeChild( div ).style.display = 'none';
	});
})();

var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";

jQuery.props = {
	"for": "htmlFor",
	"class": "className",
	"float": styleFloat,
	cssFloat: styleFloat,
	styleFloat: styleFloat,
	readonly: "readOnly",
	maxlength: "maxLength",
	cellspacing: "cellSpacing",
	rowspan: "rowSpan",
	tabindex: "tabIndex"
};
jQuery.fn.extend({
	// Keep a copy of the old load
	_load: jQuery.fn.load,

	load: function( url, params, callback ) {
		if ( typeof url !== "string" )
			return this._load( url );

		var off = url.indexOf(" ");
		if ( off >= 0 ) {
			var selector = url.slice(off, url.length);
			url = url.slice(0, off);
		}

		// Default to a GET request
		var type = "GET";

		// If the second parameter was provided
		if ( params )
			// If it's a function
			if ( jQuery.isFunction( params ) ) {
				// We assume that it's the callback
				callback = params;
				params = null;

			// Otherwise, build a param string
			} else if( typeof params === "object" ) {
				params = jQuery.param( params );
				type = "POST";
			}

		var self = this;

		// Request the remote document
		jQuery.ajax({
			url: url,
			type: type,
			dataType: "html",
			data: params,
			complete: function(res, status){
				// If successful, inject the HTML into all the matched elements
				if ( status == "success" || status == "notmodified" )
					// See if a selector was specified
					self.html( selector ?
						// Create a dummy div to hold the results
						jQuery("<div/>")
							// inject the contents of the document in, removing the scripts
							// to avoid any 'Permission Denied' errors in IE
							.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))

							// Locate the specified elements
							.find(selector) :

						// If not, just inject the full result
						res.responseText );

				if( callback )
					self.each( callback, [res.responseText, status, res] );
			}
		});
		return this;
	},

	serialize: function() {
		return jQuery.param(this.serializeArray());
	},
	serializeArray: function() {
		return this.map(function(){
			return this.elements ? jQuery.makeArray(this.elements) : this;
		})
		.filter(function(){
			return this.name && !this.disabled &&
				(this.checked || /select|textarea/i.test(this.nodeName) ||
					/text|hidden|password|search/i.test(this.type));
		})
		.map(function(i, elem){
			var val = jQuery(this).val();
			return val == null ? null :
				jQuery.isArray(val) ?
					jQuery.map( val, function(val, i){
						return {name: elem.name, value: val};
					}) :
					{name: elem.name, value: val};
		}).get();
	}
});

// Attach a bunch of functions for handling common AJAX events
jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
	jQuery.fn[o] = function(f){
		return this.bind(o, f);
	};
});

var jsc = now();

jQuery.extend({
  
	get: function( url, data, callback, type ) {
		// shift arguments if data argument was ommited
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = null;
		}

		return jQuery.ajax({
			type: "GET",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	getScript: function( url, callback ) {
		return jQuery.get(url, null, callback, "script");
	},

	getJSON: function( url, data, callback ) {
		return jQuery.get(url, data, callback, "json");
	},

	post: function( url, data, callback, type ) {
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = {};
		}

		return jQuery.ajax({
			type: "POST",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	ajaxSetup: function( settings ) {
		jQuery.extend( jQuery.ajaxSettings, settings );
	},

	ajaxSettings: {
		url: location.href,
		global: true,
		type: "GET",
		contentType: "application/x-www-form-urlencoded",
		processData: true,
		async: true,
		/*
		timeout: 0,
		data: null,
		username: null,
		password: null,
		*/
		// Create the request object; Microsoft failed to properly
		// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
		// This function can be overriden by calling jQuery.ajaxSetup
		xhr:function(){
			return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		},
		accepts: {
			xml: "application/xml, text/xml",
			html: "text/html",
			script: "text/javascript, application/javascript",
			json: "application/json, text/javascript",
			text: "text/plain",
			_default: "*/*"
		}
	},

	// Last-Modified header cache for next request
	lastModified: {},

	ajax: function( s ) {
		// Extend the settings, but re-extend 's' so that it can be
		// checked again later (in the test suite, specifically)
		s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));

		var jsonp, jsre = /=\?(&|$)/g, status, data,
			type = s.type.toUpperCase();

		// convert data if not already a string
		if ( s.data && s.processData && typeof s.data !== "string" )
			s.data = jQuery.param(s.data);

		// Handle JSONP Parameter Callbacks
		if ( s.dataType == "jsonp" ) {
			if ( type == "GET" ) {
				if ( !s.url.match(jsre) )
					s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
			} else if ( !s.data || !s.data.match(jsre) )
				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
			s.dataType = "json";
		}

		// Build temporary JSONP function
		if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
			jsonp = "jsonp" + jsc++;

			// Replace the =? sequence both in the query string and the data
			if ( s.data )
				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

			// We need to make sure
			// that a JSONP style response is executed properly
			s.dataType = "script";

			// Handle JSONP-style loading
			window[ jsonp ] = function(tmp){
				data = tmp;
				success();
				complete();
				// Garbage collect
				window[ jsonp ] = undefined;
				try{ delete window[ jsonp ]; } catch(e){}
				if ( head )
					head.removeChild( script );
			};
		}

		if ( s.dataType == "script" && s.cache == null )
			s.cache = false;

		if ( s.cache === false && type == "GET" ) {
			var ts = now();
			// try replacing _= if it is there
			var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
			// if nothing was replaced, add timestamp to the end
			s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
		}

		// If data is available, append data to url for get requests
		if ( s.data && type == "GET" ) {
			s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;

			// IE likes to send both get and post data, prevent this
			s.data = null;
		}

		// Watch for a new set of requests
		if ( s.global && ! jQuery.active++ )
			jQuery.event.trigger( "ajaxStart" );

		// Matches an absolute URL, and saves the domain
		var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );

		// If we're requesting a remote document
		// and trying to load JSON or Script with a GET
		if ( s.dataType == "script" && type == "GET" && parts
			&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){

			var head = document.getElementsByTagName("head")[0];
			var script = document.createElement("script");
			script.src = s.url;
			if (s.scriptCharset)
				script.charset = s.scriptCharset;

			// Handle Script loading
			if ( !jsonp ) {
				var done = false;

				// Attach handlers for all browsers
				script.onload = script.onreadystatechange = function(){
					if ( !done && (!this.readyState ||
							this.readyState == "loaded" || this.readyState == "complete") ) {
						done = true;
						success();
						complete();

						// Handle memory leak in IE
						script.onload = script.onreadystatechange = null;
						head.removeChild( script );
					}
				};
			}

			head.appendChild(script);

			// We handle everything using the script element injection
			return undefined;
		}

		var requestDone = false;

		// Create the request object
		var xhr = s.xhr();

		// Open the socket
		// Passing null username, generates a login popup on Opera (#2865)
		if( s.username )
			xhr.open(type, s.url, s.async, s.username, s.password);
		else
			xhr.open(type, s.url, s.async);

		// Need an extra try/catch for cross domain requests in Firefox 3
		try {
			// Set the correct header, if data is being sent
			if ( s.data )
				xhr.setRequestHeader("Content-Type", s.contentType);

			// Set the If-Modified-Since header, if ifModified mode.
			if ( s.ifModified )
				xhr.setRequestHeader("If-Modified-Since",
					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );

			// Set header so the called script knows that it's an XMLHttpRequest
			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

			// Set the Accepts header for the server, depending on the dataType
			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
				s.accepts[ s.dataType ] + ", */*" :
				s.accepts._default );
		} catch(e){}

		// Allow custom headers/mimetypes and early abort
		if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
			// Handle the global AJAX counter
			if ( s.global && ! --jQuery.active )
				jQuery.event.trigger( "ajaxStop" );
			// close opended socket
			xhr.abort();
			return false;
		}

		if ( s.global )
			jQuery.event.trigger("ajaxSend", [xhr, s]);

		// Wait for a response to come back
		var onreadystatechange = function(isTimeout){
			// The request was aborted, clear the interval and decrement jQuery.active
			if (xhr.readyState == 0) {
				if (ival) {
					// clear poll interval
					clearInterval(ival);
					ival = null;
					// Handle the global AJAX counter
					if ( s.global && ! --jQuery.active )
						jQuery.event.trigger( "ajaxStop" );
				}
			// The transfer is complete and the data is available, or the request timed out
			} else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
				requestDone = true;

				// clear poll interval
				if (ival) {
					clearInterval(ival);
					ival = null;
				}

				status = isTimeout == "timeout" ? "timeout" :
					!jQuery.httpSuccess( xhr ) ? "error" :
					s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
					"success";

				if ( status == "success" ) {
					// Watch for, and catch, XML document parse errors
					try {
						// process the data (runs the xml through httpData regardless of callback)
						data = jQuery.httpData( xhr, s.dataType, s );
					} catch(e) {
						status = "parsererror";
					}
				}

				// Make sure that the request was successful or notmodified
				if ( status == "success" ) {
					// Cache Last-Modified header, if ifModified mode.
					var modRes;
					try {
						modRes = xhr.getResponseHeader("Last-Modified");
					} catch(e) {} // swallow exception thrown by FF if header is not available

					if ( s.ifModified && modRes )
						jQuery.lastModified[s.url] = modRes;

					// JSONP handles its own success callback
					if ( !jsonp )
						success();
				} else
					jQuery.handleError(s, xhr, status);

				// Fire the complete handlers
				complete();

				if ( isTimeout )
					xhr.abort();

				// Stop memory leaks
				if ( s.async )
					xhr = null;
			}
		};

		if ( s.async ) {
			// don't attach the handler to the request, just poll it instead
			var ival = setInterval(onreadystatechange, 13);

			// Timeout checker
			if ( s.timeout > 0 )
				setTimeout(function(){
					// Check to see if the request is still happening
					if ( xhr && !requestDone )
						onreadystatechange( "timeout" );
				}, s.timeout);
		}

		// Send the data
		try {
			xhr.send(s.data);
		} catch(e) {
			jQuery.handleError(s, xhr, null, e);
		}

		// firefox 1.5 doesn't fire statechange for sync requests
		if ( !s.async )
			onreadystatechange();

		function success(){
			// If a local callback was specified, fire it and pass it the data
			if ( s.success )
				s.success( data, status );

			// Fire the global callback
			if ( s.global )
				jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
		}

		function complete(){
			// Process result
			if ( s.complete )
				s.complete(xhr, status);

			// The request was completed
			if ( s.global )
				jQuery.event.trigger( "ajaxComplete", [xhr, s] );

			// Handle the global AJAX counter
			if ( s.global && ! --jQuery.active )
				jQuery.event.trigger( "ajaxStop" );
		}

		// return XMLHttpRequest to allow aborting the request etc.
		return xhr;
	},

	handleError: function( s, xhr, status, e ) {
		// If a local callback was specified, fire it
		if ( s.error ) s.error( xhr, status, e );

		// Fire the global callback
		if ( s.global )
			jQuery.event.trigger( "ajaxError", [xhr, s, e] );
	},

	// Counter for holding the number of active queries
	active: 0,

	// Determines if an XMLHttpRequest was successful or not
	httpSuccess: function( xhr ) {
		try {
			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
			return !xhr.status && location.protocol == "file:" ||
				( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
		} catch(e){}
		return false;
	},

	// Determines if an XMLHttpRequest returns NotModified
	httpNotModified: function( xhr, url ) {
		try {
			var xhrRes = xhr.getResponseHeader("Last-Modified");

			// Firefox always returns 200. check Last-Modified date
			return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
		} catch(e){}
		return false;
	},

	httpData: function( xhr, type, s ) {
		var ct = xhr.getResponseHeader("content-type"),
			xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
			data = xml ? xhr.responseXML : xhr.responseText;

		if ( xml && data.documentElement.tagName == "parsererror" )
			throw "parsererror";
			
		// Allow a pre-filtering function to sanitize the response
		// s != null is checked to keep backwards compatibility
		if( s && s.dataFilter )
			data = s.dataFilter( data, type );

		// The filter can actually parse the response
		if( typeof data === "string" ){

			// If the type is "script", eval it in global context
			if ( type == "script" )
				jQuery.globalEval( data );

			// Get the JavaScript object, if JSON is used.
			if ( type == "json" )
				data = window["eval"]("(" + data + ")");
		}
		
		return data;
	},

	// Serialize an array of form elements or a set of
	// key/values into a query string
	param: function( a ) {
		var s = [ ];

		function add( key, value ){
			s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
		};

		// If an array was passed in, assume that it is an array
		// of form elements
		if ( jQuery.isArray(a) || a.jquery )
			// Serialize the form elements
			jQuery.each( a, function(){
				add( this.name, this.value );
			});

		// Otherwise, assume that it's an object of key/value pairs
		else
			// Serialize the key/values
			for ( var j in a )
				// If the value is an array then the key names need to be repeated
				if ( jQuery.isArray(a[j]) )
					jQuery.each( a[j], function(){
						add( j, this );
					});
				else
					add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );

		// Return the resulting serialization
		return s.join("&").replace(/%20/g, "+");
	}

});
var elemdisplay = {},
	timerId,
	fxAttrs = [
		// height animations
		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
		// width animations
		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
		// opacity animations
		[ "opacity" ]
	];

function genFx( type, num ){
	var obj = {};
	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
		obj[ this ] = type;
	});
	return obj;
}

jQuery.fn.extend({
	show: function(speed,callback){
		if ( speed ) {
			return this.animate( genFx("show", 3), speed, callback);
		} else {
			for ( var i = 0, l = this.length; i < l; i++ ){
				var old = jQuery.data(this[i], "olddisplay");
				
				this[i].style.display = old || "";
				
				if ( jQuery.css(this[i], "display") === "none" ) {
					var tagName = this[i].tagName, display;
					
					if ( elemdisplay[ tagName ] ) {
						display = elemdisplay[ tagName ];
					} else {
						var elem = jQuery("<" + tagName + " />").appendTo("body");
						
						display = elem.css("display");
						if ( display === "none" )
							display = "block";
						
						elem.remove();
						
						elemdisplay[ tagName ] = display;
					}
					
					jQuery.data(this[i], "olddisplay", display);
				}
			}

			// Set the display of the elements in a second loop
			// to avoid the constant reflow
			for ( var i = 0, l = this.length; i < l; i++ ){
				this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
			}
			
			return this;
		}
	},

	hide: function(speed,callback){
		if ( speed ) {
			return this.animate( genFx("hide", 3), speed, callback);
		} else {
			for ( var i = 0, l = this.length; i < l; i++ ){
				var old = jQuery.data(this[i], "olddisplay");
				if ( !old && old !== "none" )
					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
			}

			// Set the display of the elements in a second loop
			// to avoid the constant reflow
			for ( var i = 0, l = this.length; i < l; i++ ){
				this[i].style.display = "none";
			}

			return this;
		}
	},

	// Save the old toggle function
	_toggle: jQuery.fn.toggle,

	toggle: function( fn, fn2 ){
		var bool = typeof fn === "boolean";

		return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
			this._toggle.apply( this, arguments ) :
			fn == null || bool ?
				this.each(function(){
					var state = bool ? fn : jQuery(this).is(":hidden");
					jQuery(this)[ state ? "show" : "hide" ]();
				}) :
				this.animate(genFx("toggle", 3), fn, fn2);
	},

	fadeTo: function(speed,to,callback){
		return this.animate({opacity: to}, speed, callback);
	},

	animate: function( prop, speed, easing, callback ) {
		var optall = jQuery.speed(speed, easing, callback);

		return this[ optall.queue === false ? "each" : "queue" ](function(){
		
			var opt = jQuery.extend({}, optall), p,
				hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
				self = this;
	
			for ( p in prop ) {
				if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
					return opt.complete.call(this);

				if ( ( p == "height" || p == "width" ) && this.style ) {
					// Store display property
					opt.display = jQuery.css(this, "display");

					// Make sure that nothing sneaks out
					opt.overflow = this.style.overflow;
				}
			}

			if ( opt.overflow != null )
				this.style.overflow = "hidden";

			opt.curAnim = jQuery.extend({}, prop);

			jQuery.each( prop, function(name, val){
				var e = new jQuery.fx( self, opt, name );

				if ( /toggle|show|hide/.test(val) )
					e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
				else {
					var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
						start = e.cur(true) || 0;

					if ( parts ) {
						var end = parseFloat(parts[2]),
							unit = parts[3] || "px";

						// We need to compute starting value
						if ( unit != "px" ) {
							self.style[ name ] = (end || 1) + unit;
							start = ((end || 1) / e.cur(true)) * start;
							self.style[ name ] = start + unit;
						}

						// If a +=/-= token was provided, we're doing a relative animation
						if ( parts[1] )
							end = ((parts[1] == "-=" ? -1 : 1) * end) + start;

						e.custom( start, end, unit );
					} else
						e.custom( start, val, "" );
				}
			});

			// For JS strict compliance
			return true;
		});
	},

	stop: function(clearQueue, gotoEnd){
		var timers = jQuery.timers;

		if (clearQueue)
			this.queue([]);

		this.each(function(){
			// go in reverse order so anything added to the queue during the loop is ignored
			for ( var i = timers.length - 1; i >= 0; i-- )
				if ( timers[i].elem == this ) {
					if (gotoEnd)
						// force the next step to be the last
						timers[i](true);
					timers.splice(i, 1);
				}
		});

		// start the next in the queue if the last step wasn't forced
		if (!gotoEnd)
			this.dequeue();

		return this;
	}

});

// Generate shortcuts for custom animations
jQuery.each({
	slideDown: genFx("show", 1),
	slideUp: genFx("hide", 1),
	slideToggle: genFx("toggle", 1),
	fadeIn: { opacity: "show" },
	fadeOut: { opacity: "hide" }
}, function( name, props ){
	jQuery.fn[ name ] = function( speed, callback ){
		return this.animate( props, speed, callback );
	};
});

jQuery.extend({

	speed: function(speed, easing, fn) {
		var opt = typeof speed === "object" ? speed : {
			complete: fn || !fn && easing ||
				jQuery.isFunction( speed ) && speed,
			duration: speed,
			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
		};

		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;

		// Queueing
		opt.old = opt.complete;
		opt.complete = function(){
			if ( opt.queue !== false )
				jQuery(this).dequeue();
			if ( jQuery.isFunction( opt.old ) )
				opt.old.call( this );
		};

		return opt;
	},

	easing: {
		linear: function( p, n, firstNum, diff ) {
			return firstNum + diff * p;
		},
		swing: function( p, n, firstNum, diff ) {
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
		}
	},

	timers: [],

	fx: function( elem, options, prop ){
		this.options = options;
		this.elem = elem;
		this.prop = prop;

		if ( !options.orig )
			options.orig = {};
	}

});

jQuery.fx.prototype = {

	// Simple function for setting a style value
	update: function(){
		if ( this.options.step )
			this.options.step.call( this.elem, this.now, this );

		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

		// Set display property to block for height/width animations
		if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
			this.elem.style.display = "block";
	},

	// Get the current size
	cur: function(force){
		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
			return this.elem[ this.prop ];

		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
	},

	// Start an animation from one number to another
	custom: function(from, to, unit){
		this.startTime = now();
		this.start = from;
		this.end = to;
		this.unit = unit || this.unit || "px";
		this.now = this.start;
		this.pos = this.state = 0;

		var self = this;
		function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;

		if ( t() && jQuery.timers.push(t) && !timerId ) {
			timerId = setInterval(function(){
				var timers = jQuery.timers;

				for ( var i = 0; i < timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval( timerId );
					timerId = undefined;
				}
			}, 13);
		}
	},

	// Simple 'show' function
	show: function(){
		// Remember where we started, so that we can go back to it later
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.show = true;

		// Begin the animation
		// Make sure that we start at a small width/height to avoid any
		// flash of content
		this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());

		// Start by showing the element
		jQuery(this.elem).show();
	},

	// Simple 'hide' function
	hide: function(){
		// Remember where we started, so that we can go back to it later
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.hide = true;

		// Begin the animation
		this.custom(this.cur(), 0);
	},

	// Each step of an animation
	step: function(gotoEnd){
		var t = now();

		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
			this.now = this.end;
			this.pos = this.state = 1;
			this.update();

			this.options.curAnim[ this.prop ] = true;

			var done = true;
			for ( var i in this.options.curAnim )
				if ( this.options.curAnim[i] !== true )
					done = false;

			if ( done ) {
				if ( this.options.display != null ) {
					// Reset the overflow
					this.elem.style.overflow = this.options.overflow;

					// Reset the display
					this.elem.style.display = this.options.display;
					if ( jQuery.css(this.elem, "display") == "none" )
						this.elem.style.display = "block";
				}

				// Hide the element if the "hide" operation was done
				if ( this.options.hide )
					jQuery(this.elem).hide();

				// Reset the properties, if the item has been hidden or shown
				if ( this.options.hide || this.options.show )
					for ( var p in this.options.curAnim )
						jQuery.attr(this.elem.style, p, this.options.orig[p]);
					
				// Execute the complete function
				this.options.complete.call( this.elem );
			}

			return false;
		} else {
			var n = t - this.startTime;
			this.state = n / this.options.duration;

			// Perform the easing function, defaults to swing
			this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
			this.now = this.start + ((this.end - this.start) * this.pos);

			// Perform the next step of the animation
			this.update();
		}

		return true;
	}

};

jQuery.extend( jQuery.fx, {
	speeds:{
		slow: 600,
 		fast: 200,
 		// Default speed
 		_default: 400
	},
	step: {

		opacity: function(fx){
			jQuery.attr(fx.elem.style, "opacity", fx.now);
		},

		_default: function(fx){
			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
			else
				fx.elem[ fx.prop ] = fx.now;
		}
	}
});
if ( document.documentElement["getBoundingClientRect"] )
	jQuery.fn.offset = function() {
		if ( !this[0] ) return { top: 0, left: 0 };
		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
		var box  = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
			top  = box.top  + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
			left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
		return { top: top, left: left };
	};
else 
	jQuery.fn.offset = function() {
		if ( !this[0] ) return { top: 0, left: 0 };
		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
		jQuery.offset.initialized || jQuery.offset.initialize();

		var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
			body = doc.body, defaultView = doc.defaultView,
			prevComputedStyle = defaultView.getComputedStyle(elem, null),
			top = elem.offsetTop, left = elem.offsetLeft;

		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
			computedStyle = defaultView.getComputedStyle(elem, null);
			top -= elem.scrollTop, left -= elem.scrollLeft;
			if ( elem === offsetParent ) {
				top += elem.offsetTop, left += elem.offsetLeft;
				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
					top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
					left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
			}
			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
				top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
				left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
			prevComputedStyle = computedStyle;
		}

		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
			top  += body.offsetTop,
			left += body.offsetLeft;

		if ( prevComputedStyle.position === "fixed" )
			top  += Math.max(docElem.scrollTop, body.scrollTop),
			left += Math.max(docElem.scrollLeft, body.scrollLeft);

		return { top: top, left: left };
	};

jQuery.offset = {
	initialize: function() {
		if ( this.initialized ) return;
		var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
			html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';

		rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
		for ( prop in rules ) container.style[prop] = rules[prop];

		container.innerHTML = html;
		body.insertBefore(container, body.firstChild);
		innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;

		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);

		innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);

		body.style.marginTop = '1px';
		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
		body.style.marginTop = bodyMarginTop;

		body.removeChild(container);
		this.initialized = true;
	},

	bodyOffset: function(body) {
		jQuery.offset.initialized || jQuery.offset.initialize();
		var top = body.offsetTop, left = body.offsetLeft;
		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
			top  += parseInt( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0,
			left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
		return { top: top, left: left };
	}
};


jQuery.fn.extend({
	position: function() {
		var left = 0, top = 0, results;

		if ( this[0] ) {
			// Get *real* offsetParent
			var offsetParent = this.offsetParent(),

			// Get correct offsets
			offset       = this.offset(),
			parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();

			// Subtract element margins
			// note: when an element has margin: auto the offsetLeft and marginLeft 
			// are the same in Safari causing offset.left to incorrectly be 0
			offset.top  -= num( this, 'marginTop'  );
			offset.left -= num( this, 'marginLeft' );

			// Add offsetParent borders
			parentOffset.top  += num( offsetParent, 'borderTopWidth'  );
			parentOffset.left += num( offsetParent, 'borderLeftWidth' );

			// Subtract the two offsets
			results = {
				top:  offset.top  - parentOffset.top,
				left: offset.left - parentOffset.left
			};
		}

		return results;
	},

	offsetParent: function() {
		var offsetParent = this[0].offsetParent || document.body;
		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
			offsetParent = offsetParent.offsetParent;
		return jQuery(offsetParent);
	}
});


// Create scrollLeft and scrollTop methods
jQuery.each( ['Left', 'Top'], function(i, name) {
	var method = 'scroll' + name;
	
	jQuery.fn[ method ] = function(val) {
		if (!this[0]) return null;

		return val !== undefined ?

			// Set the scroll offset
			this.each(function() {
				this == window || this == document ?
					window.scrollTo(
						!i ? val : jQuery(window).scrollLeft(),
						 i ? val : jQuery(window).scrollTop()
					) :
					this[ method ] = val;
			}) :

			// Return the scroll offset
			this[0] == window || this[0] == document ?
				self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
					jQuery.boxModel && document.documentElement[ method ] ||
					document.body[ method ] :
				this[0][ method ];
	};
});
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
jQuery.each([ "Height", "Width" ], function(i, name){

	var tl = i ? "Left"  : "Top",  // top or left
		br = i ? "Right" : "Bottom", // bottom or right
		lower = name.toLowerCase();

	// innerHeight and innerWidth
	jQuery.fn["inner" + name] = function(){
		return this[0] ?
			jQuery.css( this[0], lower, false, "padding" ) :
			null;
	};

	// outerHeight and outerWidth
	jQuery.fn["outer" + name] = function(margin) {
		return this[0] ?
			jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
			null;
	};
	
	var type = name.toLowerCase();

	jQuery.fn[ type ] = function( size ) {
		// Get window width or height
		return this[0] == window ?
			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
			document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
			document.body[ "client" + name ] :

			// Get document width or height
			this[0] == document ?
				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
				Math.max(
					document.documentElement["client" + name],
					document.body["scroll" + name], document.documentElement["scroll" + name],
					document.body["offset" + name], document.documentElement["offset" + name]
				) :

				// Get or set width or height on the element
				size === undefined ?
					// Get width or height on the element
					(this.length ? jQuery.css( this[0], type ) : null) :

					// Set the width or height on the element (default to pixels if value is unitless)
					this.css( type, typeof size === "string" ? size : size + "px" );
	};

});
})();
// End of script: OpenQuarters.WebQuarters.Core.Web.jquery-1.3.2.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.json.js
(function($){function toIntegersAtLease(n)
{return n<10?'0'+n:n;}
Date.prototype.toJSON=function(date)
{return this.getUTCFullYear()+'-'+
toIntegersAtLease(this.getUTCMonth())+'-'+
toIntegersAtLease(this.getUTCDate());};var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'}
$.quoteString=function(string)
{if(escapeable.test(string))
{return'"'+string.replace(escapeable,function(a)
{var c=meta[a];if(typeof c==='string'){return c;}
c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"'}
return'"'+string+'"';}
$.toJSON=function(o,compact)
{var type=typeof(o);if(type=="undefined")
return"undefined";else if(type=="number"||type=="boolean")
return o+"";else if(o===null)
return"null";if(type=="string")
{return $.quoteString(o);}
if(type=="object"&&typeof o.toJSON=="function")
return o.toJSON(compact);if(type!="function"&&typeof(o.length)=="number")
{var ret=[];for(var i=0;i<o.length;i++){ret.push($.toJSON(o[i],compact));}
if(compact)
return"["+ret.join(",")+"]";else
return"["+ret.join(", ")+"]";}
if(type=="function"){/*throw new TypeError("Unable to convert object of type 'function' to json.");*/}
ret=[];for(var k in o){var name;var type=typeof(k);if(type=="number")
name='"'+k+'"';else if(type=="string")
name=$.quoteString(k);else
continue;val=$.toJSON(o[k],compact);if(typeof(val)!="string"){continue;}
if(compact)
ret.push(name+":"+val);else
ret.push(name+": "+val);}
return"{"+ret.join(", ")+"}";}
$.compactJSON=function(o)
{return $.toJSON(o,true);}
$.evalJSON=function(src)
{return eval("("+src+")");}
$.secureEvalJSON=function(src)
{var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered))
return eval("("+src+")");else
throw new SyntaxError("Error parsing JSON, source is not valid.");}})(jQuery);// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.json.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.WebQuarters.common.js
$.postJSON = function(url, data, callback) {
    return $.post(url, data, callback, "json");
};

$.getJSON = function(url, data, callback) {
    return $.get(url, data, callback, "json");
};

$.getTranslations = function(references, callback) {
    $.postJSON("/cms/translations", { references: $.compactJSON(references) }, function(json) {
        callback(json);
    });
};

$.hasPermission = function(permission, value, callback) {
    $.postJSON("/cms/account/hasPermission", { permission: permission, value: value }, function(r) {
        callback(r);
    });
};

function Guid(options) {
    this.options = options || {};
    this.chars = this.options.chars || Guid.constants.alphanumerics;
    this.epoch = this.options.epoch || Guid.constants.epoch1970;
    this.counterSequenceLength = this.options.counterSequenceLength || 1;
    this.randomSequenceLength = this.options.randomSequenceLength || 2;
}

Guid.prototype.generate = function() {
    var now = (new Date()).getTime() - this.epoch;
    var guid = this.baseN(now);

    this.counterSeq = (now == this.lastTimestampUsed ? this.counterSeq + 1 : 1);
    guid += this.counterSeq;

    for (var i = 0; i < this.randomSequenceLength; i++) {
        guid += this.chars[Math.floor(Math.random() * this.chars.length)];
    }

    this.lastTimestampUsed = now;

    return guid;
}

Guid.prototype.baseN = function(val) {
    if (val == 0) return "";
    var rightMost = val % this.chars.length;
    var rightMostChar = this.chars[rightMost];
    var remaining = Math.floor(val / this.chars.length);
    return this.baseN(remaining) + rightMostChar;
}

Guid.constants = {};
Guid.constants.numbers = "0123456789";
Guid.constants.alphas = "abcdefghijklmnopqrstuvwxyz";
Guid.constants.lowerAlphanumerics = "0123456789abcdefghijklmnopqrstuvwxyz";
Guid.constants.alphanumerics = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// http://tools.ietf.org/html/rfc1924
Guid.constants.base85 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+-;<=>?@^_`{|}~";

Guid.constants.epoch1970 = (new Date(0));
Guid.constants.epoch = function(year) { return (new Date("Jan 1 " + year)).getTime(); }

var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;

function pad(str, len, pad, dir) {

    if (typeof (len) == "undefined") { var len = 0; }
    if (typeof (pad) == "undefined") { var pad = ' '; }
    if (typeof (dir) == "undefined") { var dir = STR_PAD_RIGHT; }

    if (len + 1 >= $(str).length) {

        switch (dir) {

            case STR_PAD_LEFT:
                str = Array(len + 1 - $(str).length).join(pad) + str;
                break;

            case STR_PAD_BOTH:
                var right = Math.ceil((padlen = len - $(str).length) / 2);
                var left = padlen - right;
                str = Array(left + 1).join(pad) + str + Array(right + 1).join(pad);
                break;

            default:
                str = str + Array(len + 1 - $(str).length).join(pad);
                break;

        } // switch

    }

    return str;

}

function padLeft(ContentToSize, PadLength, PadChar) {
    var PaddedString = ContentToSize.toString();
    for (i = ContentToSize.length + 1; i <= PadLength; i++) {
        PaddedString = PadChar + PaddedString;
    }
    return PaddedString;
}
// End of script: OpenQuarters.WebQuarters.Core.Web.WebQuarters.common.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.ui.js
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(u(D){p C=D.fn.2m;D.fn.2m=u(){D("*",k).2l(k).3x("2m");19 C.1K(k,1T)};u B(E){u G(H){p I=H.2Q;19(I.4E!="6m"&&I.ah!="3h")}p F=G(E);(F&&D.1E(D.lq(E,"3g"),u(){19(F=G(k))}));19 F}D.23(D.lk[":"],{1w:u(F,G,E){19 D.1w(F,E[3])},g9:u(F,G,E){p H=F.3n.4T();19(F.ht>=0&&(("a"==H&&F.4G)||(/1z|5b|aW|43/.1P(H)&&"3h"!=F.4h&&!F.1I))&&B(F))}});D.2w={dx:8,l8:20,eE:kc,lm:17,lg:46,b2:40,km:35,ey:13,e8:27,ko:36,ly:45,dw:37,lv:eS,kf:ls,kY:l5,l6:mh,mi:mj,ke:me,md:34,m7:33,k9:m9,eK:39,mv:16,ev:32,b1:9,b3:38};u A(H,I,J,G){u F(L){p K=D[H][I][L]||[];19(2E K=="4w"?K.74(/,?\\s+/):K)}p E=F("b6");if(G.1t==1&&2E G[0]=="4w"){E=E.6l(F("hE"))}19(D.9i(J,E)!=-1)}D.3T=u(F,E){p G=F.74(".")[0];F=F.74(".")[1];D.fn[F]=u(K){p I=(2E K=="4w"),J=a2.5k.7Q.1O(1T,1);if(I&&K.fV(0,1)=="9M"){19 k}if(I&&A(G,F,K,J)){p H=D.1w(k[0],F);19(H?H[K].1K(H,J):2i)}19 k.1E(u(){p L=D.1w(k,F);(!L&&!I&&D.1w(k,F,22 D[G][F](k,K)));(L&&I&&D.7Y(L[K])&&L[K].1K(L,J))})};D[G][F]=u(J,I){p H=k;k.8v=F;k.dR=D[G][F].mz||F;k.hP=G+"-"+F;k.v=D.23({},D.3T.4k,D[G][F].4k,D.hk&&D.hk.4u(J)[F],I);k.1d=D(J).1M("ck."+F,u(M,K,L){19 H.6f(K,L)}).1M("fe."+F,u(L,K){19 H.gn(K)}).1M("2m",u(){19 H.3s()});k.57()};D[G][F].5k=D.23({},D.3T.5k,E);D[G][F].hE="8L"};D.3T.5k={57:u(){},3s:u(){k.1d.4r(k.8v)},8L:u(G,H){p F=G,E=k;if(2E G=="4w"){if(H===2i){19 k.gn(G)}F={};F[G]=H}D.1E(F,u(I,J){E.6f(I,J)})},gn:u(E){19 k.v[E]},6f:u(E,F){k.v[E]=F;if(E=="1I"){k.1d[F?"1x":"1G"](k.hP+"-1I")}},9P:u(){k.6f("1I",1h)},8G:u(){k.6f("1I",1q)},4i:u(F,H,G){p E=(F==k.dR?F:k.dR+F);H=H||D.4H.lG({4h:E,1s:k.1d[0]});19 k.1d.3x(E,[H,G],k.v[F])}};D.3T.4k={1I:1h};D.1a={2Y:{2l:u(F,G,I){p H=D.1a[F].5k;1S(p E in I){H.6B[E]=H.6B[E]||[];H.6B[E].4o([G,I[E]])}},1O:u(E,G,F){p I=E.6B[G];if(!I){19}1S(p H=0;H<I.1t;H++){if(E.v[I[H][0]]){I[H][1].1K(E.1d,F)}}}},b5:{},1e:u(E){if(D.1a.b5[E]){19 D.1a.b5[E]}p F=D(\'<1v 2e="1a-lQ">\').1x(E).1e({1p:"2H",1c:"-hK",1b:"-hK",4E:"7l"}).31("1Y");D.1a.b5[E]=!!((!(/4c|4Y/).1P(F.1e("2Z"))||(/^[1-9]/).1P(F.1e("1g"))||(/^[1-9]/).1P(F.1e("1f"))||!(/6m/).1P(F.1e("eb"))||!(/7C|gG\\(0, 0, 0, 0\\)/).1P(F.1e("7a"))));cP{D("1Y").4u(0).cr(F.4u(0))}cS(G){}19 D.1a.b5[E]},8Y:u(E){19 D(E).2S("6T","on").1e("hl","6m").1M("hr.1a",u(){19 1h})},lR:u(E){19 D(E).2S("6T","fc").1e("hl","").2G("hr.1a")},aU:u(H,F){if(D(H).1e("2W")=="3h"){19 1h}p E=(F&&F=="1b")?"2B":"2p",G=1h;if(H[E]>0){19 1q}H[E]=1;G=(H[E]>0);H[E]=0;19 G}};D.1a.5C={a0:u(){p E=k;k.1d.1M("5d."+k.8v,u(F){19 E.dM(F)});if(D.2j.44){k.hs=k.1d.2S("6T");k.1d.2S("6T","on")}k.m4=1h},a1:u(){k.1d.2G("."+k.8v);(D.2j.44&&k.1d.2S("6T",k.hs))},dM:u(G){(k.7V&&k.bh(G));k.du=G;p F=k,H=(G.lZ==1),E=(2E k.v.7r=="4w"?D(G.1s).5F().2l(G.1s).3H(k.v.7r).1t:1h);if(!H||E||!k.9e(G)){19 1q}k.db=!k.v.6A;if(!k.db){k.lU=5E(u(){F.db=1q},k.v.6A)}if(k.fi(G)&&k.ej(G)){k.7V=(k.7H(G)!==1h);if(!k.7V){G.6X();19 1q}}k.dI=u(I){19 F.hu(I)};k.dJ=u(I){19 F.bh(I)};D(1l).1M("6Y."+k.8v,k.dI).1M("5V."+k.8v,k.dJ);19 1h},hu:u(E){if(D.2j.44&&!E.43){19 k.bh(E)}if(k.7V){k.6N(E);19 1h}if(k.fi(E)&&k.ej(E)){k.7V=(k.7H(k.du,E)!==1h);(k.7V?k.6N(E):k.bh(E))}19!k.7V},bh:u(E){D(1l).2G("6Y."+k.8v,k.dI).2G("5V."+k.8v,k.dJ);if(k.7V){k.7V=1h;k.7I(E)}19 1h},fi:u(E){19(1k.1H(1k.3Y(k.du.3z-E.3z),1k.3Y(k.du.3f-E.3f))>=k.v.3G)},ej:u(E){19 k.db},7H:u(E){},6N:u(E){},7I:u(E){},9e:u(E){19 1q}};D.1a.5C.4k={7r:1n,3G:1,6A:0}})(1L);(u(A){A.3T("1a.2x",A.23({},A.1a.5C,{hU:u(C){p B=!k.v.29||!A(k.v.29,k.1d).1t?1q:1h;A(k.v.29,k.1d).2O("*").87().1E(u(){if(k==C.1s){B=1q}});19 B},cx:u(){p C=k.v;p B=A.7Y(C.1u)?A(C.1u.1K(k.1d[0],[e])):(C.1u=="84"?k.1d.84():k.1d);if(!B.5F("1Y").1t){B.31((C.31=="1B"?k.1d[0].3g:C.31))}if(B[0]!=k.1d[0]&&!(/(6C|2H)/).1P(B.1e("1p"))){B.1e("1p","2H")}19 B},57:u(){if(k.v.1u=="82"&&!(/^(?:r|a|f)/).1P(k.1d.1e("1p"))){k.1d[0].2Q.1p="2C"}(k.v.ak&&k.1d.1x(k.v.ak+"-2x"));(k.v.1I&&k.1d.1x("1a-2x-1I"));k.a0()},9e:u(B){p C=k.v;if(k.1u||C.1I||A(B.1s).is(".1a-1C-29")){19 1h}k.29=k.hU(B);if(!k.29){19 1h}19 1q},7H:u(D){p E=k.v;k.1u=k.cx();if(A.1a.3b){A.1a.3b.3R=k}k.3N={1b:(1m(k.1d.1e("93"),10)||0),1c:(1m(k.1d.1e("8u"),10)||0)};k.61=k.1u.1e("1p");k.1i=k.1d.1i();k.1i={1c:k.1i.1c-k.3N.1c,1b:k.1i.1b-k.3N.1b};k.1i.2o={1b:D.3z-k.1i.1b,1c:D.3f-k.1i.1c};k.i0();k.3k=k.1u.3k();p B=k.3k.1i();if(k.3k[0]==1l.1Y&&A.2j.m1){B={1c:0,1b:0}}k.1i.1B={1c:B.1c+(1m(k.3k.1e("6Z"),10)||0),1b:B.1b+(1m(k.3k.1e("79"),10)||0)};if(k.61=="2C"){p C=k.1d.1p();k.1i.2C={1c:C.1c-(1m(k.1u.1e("1c"),10)||0)+k.8K.2p(),1b:C.1b-(1m(k.1u.1e("1b"),10)||0)+k.8D.2B()}}1j{k.1i.2C={1c:0,1b:0}}k.3t=k.8X(D);k.fh();if(E.6L){k.i6(E.6L)}A.23(k,{f6:(k.61=="2H"&&(!k.8K[0].52||(/(2z|1Y)/i).1P(k.8K[0].52))),eu:(k.61=="2H"&&(!k.8D[0].52||(/(2z|1Y)/i).1P(k.8D[0].52))),f8:k.8K[0]!=k.3k[0]&&!(k.8K[0]==1l&&(/(1Y|2z)/i).1P(k.3k[0].52)),ek:k.8D[0]!=k.3k[0]&&!(k.8D[0]==1l&&(/(1Y|2z)/i).1P(k.3k[0].52))});if(E.1U){k.i1()}k.24("2A",D);k.fh();if(A.1a.3b&&!E.cp){A.1a.3b.bB(k,D)}k.1u.1x("1a-2x-aj");k.6N(D);19 1q},i0:u(){k.8K=u(B){do{if(/4c|4v/.1P(B.1e("2W"))||(/4c|4v/).1P(B.1e("2W-y"))){19 B}B=B.1B()}4V(B[0].3g);19 A(1l)}(k.1u);k.8D=u(B){do{if(/4c|4v/.1P(B.1e("2W"))||(/4c|4v/).1P(B.1e("2W-x"))){19 B}B=B.1B()}4V(B[0].3g);19 A(1l)}(k.1u)},i6:u(B){if(B.1b!=2i){k.1i.2o.1b=B.1b+k.3N.1b}if(B.3O!=2i){k.1i.2o.1b=k.2y.1f-B.3O+k.3N.1b}if(B.1c!=2i){k.1i.2o.1c=B.1c+k.3N.1c}if(B.3X!=2i){k.1i.2o.1c=k.2y.1g-B.3X+k.3N.1c}},fh:u(){k.2y={1f:k.1u.4b(),1g:k.1u.3p()}},i1:u(){p E=k.v;if(E.1U=="1B"){E.1U=k.1u[0].3g}if(E.1U=="1l"||E.1U=="3o"){k.1U=[0-k.1i.2C.1b-k.1i.1B.1b,0-k.1i.2C.1c-k.1i.1B.1c,A(E.1U=="1l"?1l:3o).1f()-k.1i.2C.1b-k.1i.1B.1b-k.2y.1f-k.3N.1b-(1m(k.1d.1e("8E"),10)||0),(A(E.1U=="1l"?1l:3o).1g()||1l.1Y.3g.5B)-k.1i.2C.1c-k.1i.1B.1c-k.2y.1g-k.3N.1c-(1m(k.1d.1e("7Z"),10)||0)]}if(!(/^(1l|3o|1B)$/).1P(E.1U)){p C=A(E.1U)[0];p D=A(E.1U).1i();p B=(A(C).1e("2W")!="3h");k.1U=[D.1b+(1m(A(C).1e("79"),10)||0)-k.1i.2C.1b-k.1i.1B.1b,D.1c+(1m(A(C).1e("6Z"),10)||0)-k.1i.2C.1c-k.1i.1B.1c,D.1b+(B?1k.1H(C.9c,C.4D):C.4D)-(1m(A(C).1e("79"),10)||0)-k.1i.2C.1b-k.1i.1B.1b-k.2y.1f-k.3N.1b-(1m(k.1d.1e("8E"),10)||0),D.1c+(B?1k.1H(C.5B,C.3D):C.3D)-(1m(A(C).1e("6Z"),10)||0)-k.1i.2C.1c-k.1i.1B.1c-k.2y.1g-k.3N.1c-(1m(k.1d.1e("7Z"),10)||0)]}},5p:u(C,D){if(!D){D=k.1p}p B=C=="2H"?1:-1;19{1c:(D.1c+k.1i.2C.1c*B+k.1i.1B.1c*B-(k.61=="6C"||k.f6||k.f8?0:k.8K.2p())*B+(k.61=="6C"?A(1l).2p():0)*B+k.3N.1c*B),1b:(D.1b+k.1i.2C.1b*B+k.1i.1B.1b*B-(k.61=="6C"||k.eu||k.ek?0:k.8D.2B())*B+(k.61=="6C"?A(1l).2B():0)*B+k.3N.1b*B)}},8X:u(E){p F=k.v;p B={1c:(E.3f-k.1i.2o.1c-k.1i.2C.1c-k.1i.1B.1c+(k.61=="6C"||k.f6||k.f8?0:k.8K.2p())-(k.61=="6C"?A(1l).2p():0)),1b:(E.3z-k.1i.2o.1b-k.1i.2C.1b-k.1i.1B.1b+(k.61=="6C"||k.eu||k.ek?0:k.8D.2B())-(k.61=="6C"?A(1l).2B():0))};if(!k.3t){19 B}if(k.1U){if(B.1b<k.1U[0]){B.1b=k.1U[0]}if(B.1c<k.1U[1]){B.1c=k.1U[1]}if(B.1b>k.1U[2]){B.1b=k.1U[2]}if(B.1c>k.1U[3]){B.1c=k.1U[3]}}if(F.3r){p D=k.3t.1c+1k.2T((B.1c-k.3t.1c)/F.3r[1])*F.3r[1];B.1c=k.1U?(!(D<k.1U[1]||D>k.1U[3])?D:(!(D<k.1U[1])?D-F.3r[1]:D+F.3r[1])):D;p C=k.3t.1b+1k.2T((B.1b-k.3t.1b)/F.3r[0])*F.3r[0];B.1b=k.1U?(!(C<k.1U[0]||C>k.1U[2])?C:(!(C<k.1U[0])?C-F.3r[0]:C+F.3r[0])):C}19 B},6N:u(B){k.1p=k.8X(B);k.49=k.5p("2H");k.1p=k.24("51",B)||k.1p;if(!k.v.2P||k.v.2P!="y"){k.1u[0].2Q.1b=k.1p.1b+"px"}if(!k.v.2P||k.v.2P!="x"){k.1u[0].2Q.1c=k.1p.1c+"px"}if(A.1a.3b){A.1a.3b.51(k,B)}19 1h},7I:u(C){p D=1h;if(A.1a.3b&&!k.v.cp){p D=A.1a.3b.7K(k,C)}if((k.v.6U=="mb"&&!D)||(k.v.6U=="m8"&&D)||k.v.6U===1q||(A.7Y(k.v.6U)&&k.v.6U.1O(k.1d,D))){p B=k;A(k.1u).26(k.3t,1m(k.v.l7,10)||aX,u(){B.24("3d",C);B.an()})}1j{k.24("3d",C);k.an()}19 1h},an:u(){k.1u.1G("1a-2x-aj");if(k.v.1u!="82"&&!k.ar){k.1u.2m()}k.1u=1n;k.ar=1h},6B:{},br:u(B){19{1u:k.1u,1p:k.1p,aK:k.49,v:k.v}},24:u(C,B){A.1a.2Y.1O(k,C,[B,k.br()]);if(C=="51"){k.49=k.5p("2H")}19 k.1d.3x(C=="51"?C:"51"+C,[B,k.br()],k.v[C])},3s:u(){if(!k.1d.1w("2x")){19}k.1d.4r("2x").2G(".2x").1G("1a-2x 1a-2x-aj 1a-2x-1I");k.a1()}}));A.23(A.1a.2x,{4k:{31:"1B",2P:1h,7r:":1z",6A:0,3G:1,1u:"82",71:"4Y",ak:"1a"}});A.1a.2Y.2l("2x","2Z",{2A:u(D,C){p B=A("1Y");if(B.1e("2Z")){C.v.av=B.1e("2Z")}B.1e("2Z",C.v.2Z)},3d:u(C,B){if(B.v.av){A("1Y").1e("2Z",B.v.av)}}});A.1a.2Y.2l("2x","2U",{2A:u(D,C){p B=A(C.1u);if(B.1e("2U")){C.v.ay=B.1e("2U")}B.1e("2U",C.v.2U)},3d:u(C,B){if(B.v.ay){A(B.1u).1e("2U",B.v.ay)}}});A.1a.2Y.2l("2x","1Z",{2A:u(D,C){p B=A(C.1u);if(B.1e("1Z")){C.v.ax=B.1e("1Z")}B.1e("1Z",C.v.1Z)},3d:u(C,B){if(B.v.ax){A(B.1u).1e("1Z",B.v.ax)}}});A.1a.2Y.2l("2x","bu",{2A:u(C,B){A(B.v.bu===1q?"aT":B.v.bu).1E(u(){A(\'<1v 2e="1a-2x-bu" 2Q="bv: #la;"></1v>\').1e({1f:k.4D+"px",1g:k.3D+"px",1p:"2H",1Z:"0.lb",2U:b7}).1e(A(k).1i()).31("1Y")})},3d:u(C,B){A("1v.1a-2x-bu").1E(u(){k.3g.cr(k)})}});A.1a.2Y.2l("2x","4v",{2A:u(D,C){p E=C.v;p B=A(k).1w("2x");E.4y=E.4y||20;E.4A=E.4A||20;B.4f=u(F){do{if(/4c|4v/.1P(F.1e("2W"))||(/4c|4v/).1P(F.1e("2W-y"))){19 F}F=F.1B()}4V(F[0].3g);19 A(1l)}(k);B.41=u(F){do{if(/4c|4v/.1P(F.1e("2W"))||(/4c|4v/).1P(F.1e("2W-x"))){19 F}F=F.1B()}4V(F[0].3g);19 A(1l)}(k);if(B.4f[0]!=1l&&B.4f[0].52!="86"){B.aw=B.4f.1i()}if(B.41[0]!=1l&&B.41[0].52!="86"){B.9W=B.41.1i()}},51:u(E,D){p F=D.v,B=1h;p C=A(k).1w("2x");if(C.4f[0]!=1l&&C.4f[0].52!="86"){if((C.aw.1c+C.4f[0].3D)-E.3f<F.4y){C.4f[0].2p=B=C.4f[0].2p+F.4A}if(E.3f-C.aw.1c<F.4y){C.4f[0].2p=B=C.4f[0].2p-F.4A}}1j{if(E.3f-A(1l).2p()<F.4y){B=A(1l).2p(A(1l).2p()-F.4A)}if(A(3o).1g()-(E.3f-A(1l).2p())<F.4y){B=A(1l).2p(A(1l).2p()+F.4A)}}if(C.41[0]!=1l&&C.41[0].52!="86"){if((C.9W.1b+C.41[0].4D)-E.3z<F.4y){C.41[0].2B=B=C.41[0].2B+F.4A}if(E.3z-C.9W.1b<F.4y){C.41[0].2B=B=C.41[0].2B-F.4A}}1j{if(E.3z-A(1l).2B()<F.4y){B=A(1l).2B(A(1l).2B()-F.4A)}if(A(3o).1f()-(E.3z-A(1l).2B())<F.4y){B=A(1l).2B(A(1l).2B()+F.4A)}}if(B!==1h){A.1a.3b.bB(C,E)}}});A.1a.2Y.2l("2x","78",{2A:u(D,C){p B=A(k).1w("2x");B.5M=[];A(C.v.78.4N!=9O?(C.v.78.2b||":1w(2x)"):C.v.78).1E(u(){p F=A(k);p E=F.1i();if(k!=B.1d[0]){B.5M.4o({2V:k,1f:F.4b(),1g:F.3p(),1c:E.1c,1b:E.1b})}})},51:u(P,K){p E=A(k).1w("2x");p Q=K.v.lu||20;p O=K.aK.1b,N=O+E.2y.1f,D=K.aK.1c,C=D+E.2y.1g;1S(p M=E.5M.1t-1;M>=0;M--){p L=E.5M[M].1b,J=L+E.5M[M].1f,I=E.5M[M].1c,S=I+E.5M[M].1g;if(!((L-Q<O&&O<J+Q&&I-Q<D&&D<S+Q)||(L-Q<O&&O<J+Q&&I-Q<C&&C<S+Q)||(L-Q<N&&N<J+Q&&I-Q<D&&D<S+Q)||(L-Q<N&&N<J+Q&&I-Q<C&&C<S+Q))){if(E.5M[M].dr){(E.v.78.h2&&E.v.78.h2.1O(E.1d,1n,A.23(E.br(),{h6:E.5M[M].2V})))}E.5M[M].dr=1h;5Y}if(K.v.h0!="ll"){p B=1k.3Y(I-C)<=Q;p R=1k.3Y(S-D)<=Q;p G=1k.3Y(L-N)<=Q;p H=1k.3Y(J-O)<=Q;if(B){K.1p.1c=E.5p("2C",{1c:I-E.2y.1g,1b:0}).1c}if(R){K.1p.1c=E.5p("2C",{1c:S,1b:0}).1c}if(G){K.1p.1b=E.5p("2C",{1c:0,1b:L-E.2y.1f}).1b}if(H){K.1p.1b=E.5p("2C",{1c:0,1b:J}).1b}}p F=(B||R||G||H);if(K.v.h0!="lp"){p B=1k.3Y(I-D)<=Q;p R=1k.3Y(S-C)<=Q;p G=1k.3Y(L-O)<=Q;p H=1k.3Y(J-N)<=Q;if(B){K.1p.1c=E.5p("2C",{1c:I,1b:0}).1c}if(R){K.1p.1c=E.5p("2C",{1c:S-E.2y.1g,1b:0}).1c}if(G){K.1p.1b=E.5p("2C",{1c:0,1b:L}).1b}if(H){K.1p.1b=E.5p("2C",{1c:0,1b:J-E.2y.1f}).1b}}if(!E.5M[M].dr&&(B||R||G||H||F)){(E.v.78.78&&E.v.78.78.1O(E.1d,1n,A.23(E.br(),{h6:E.5M[M].2V})))}E.5M[M].dr=(B||R||G||H||F)}}});A.1a.2Y.2l("2x","iT",{2A:u(D,C){p B=A(k).1w("2x");B.cW=[];A(C.v.iT).1E(u(){if(A.1w(k,"3a")){p E=A.1w(k,"3a");B.cW.4o({2q:E,kl:E.v.6U});E.cu();E.24("9X",D,B)}})},3d:u(D,C){p B=A(k).1w("2x");A.1E(B.cW,u(){if(k.2q.az){k.2q.az=0;B.ar=1q;k.2q.ar=1h;if(k.kl){k.2q.v.6U=1q}k.2q.7I(D);k.2q.1d.3x("mn",[D,A.23(k.2q.1a(),{jg:B.1d})],k.2q.v.kP);k.2q.v.1u=k.2q.v.eQ}1j{k.2q.24("bS",D,B)}})},51:u(F,E){p D=A(k).1w("2x"),B=k;p C=u(K){p H=K.1b,J=H+K.1f,I=K.1c,G=I+K.1g;19(H<(k.49.1b+k.1i.2o.1b)&&(k.49.1b+k.1i.2o.1b)<J&&I<(k.49.1c+k.1i.2o.1c)&&(k.49.1c+k.1i.2o.1c)<G)};A.1E(D.cW,u(G){if(C.1O(D,k.2q.5L)){if(!k.2q.az){k.2q.az=1;k.2q.21=A(B).84().31(k.2q.1d).1w("3a-2V",1q);k.2q.v.eQ=k.2q.v.1u;k.2q.v.1u=u(){19 E.1u[0]};F.1s=k.2q.21[0];k.2q.9e(F,1q);k.2q.7H(F,1q,1q);k.2q.1i.2o.1c=D.1i.2o.1c;k.2q.1i.2o.1b=D.1i.2o.1b;k.2q.1i.1B.1b-=D.1i.1B.1b-k.2q.1i.1B.1b;k.2q.1i.1B.1c-=D.1i.1B.1c-k.2q.1i.1B.1c;D.24("m6",F)}if(k.2q.21){k.2q.6N(F)}}1j{if(k.2q.az){k.2q.az=0;k.2q.ar=1q;k.2q.v.6U=1h;k.2q.7I(F,1q);k.2q.v.1u=k.2q.v.eQ;k.2q.21.2m();if(k.2q.3I){k.2q.3I.2m()}D.24("lL",F)}}})}});A.1a.2Y.2l("2x","8l",{2A:u(D,B){p C=A.lK(A(B.v.8l.lM)).76(u(F,E){19(1m(A(F).1e("2U"),10)||B.v.8l.1V)-(1m(A(E).1e("2U"),10)||B.v.8l.1V)});A(C).1E(u(E){k.2Q.2U=B.v.8l.1V+E});k[0].2Q.2U=B.v.8l.1V+C.1t}})})(1L);(u(A){A.3T("1a.5O",{6f:u(B,C){if(B=="5N"){k.v.5N=C&&A.7Y(C)?C:u(D){19 D.is(5N)}}1j{A.3T.5k.6f.1K(k,1T)}},57:u(){p C=k.v,B=C.5N;k.6r=0;k.8x=1;k.v.5N=k.v.5N&&A.7Y(k.v.5N)?k.v.5N:u(D){19 D.is(B)};k.b0={1f:k.1d[0].4D,1g:k.1d[0].3D};A.1a.3b.8C[k.v.71]=A.1a.3b.8C[k.v.71]||[];A.1a.3b.8C[k.v.71].4o(k);(k.v.ak&&k.1d.1x(k.v.ak+"-5O"))},6B:{},1a:u(B){19{2x:(B.21||B.1d),1u:B.1u,1p:B.1p,aK:B.49,v:k.v,1d:k.1d}},3s:u(){p B=A.1a.3b.8C[k.v.71];1S(p C=0;C<B.1t;C++){if(B[C]==k){B.cI(C,1)}}k.1d.1G("1a-5O-1I").4r("5O").2G(".5O")},dQ:u(C){p B=A.1a.3b.3R;if(!B||(B.21||B.1d)[0]==k.1d[0]){19}if(k.v.5N.1O(k.1d,(B.21||B.1d))){A.1a.2Y.1O(k,"4z",[C,k.1a(B)]);k.1d.3x("lN",[C,k.1a(B)],k.v.4z)}},f0:u(C){p B=A.1a.3b.3R;if(!B||(B.21||B.1d)[0]==k.1d[0]){19}if(k.v.5N.1O(k.1d,(B.21||B.1d))){A.1a.2Y.1O(k,"ba",[C,k.1a(B)]);k.1d.3x("lD",[C,k.1a(B)],k.v.ba)}},kJ:u(D,C){p B=C||A.1a.3b.3R;if(!B||(B.21||B.1d)[0]==k.1d[0]){19 1h}p E=1h;k.1d.2O(":1w(5O)").8F(".1a-2x-aj").1E(u(){p F=A.1w(k,"5O");if(F.v.kj&&A.1a.9y(B,A.23(F,{1i:F.1d.1i()}),F.v.5W)){E=1q;19 1h}});if(E){19 1h}if(k.v.5N.1O(k.1d,(B.21||B.1d))){A.1a.2Y.1O(k,"7K",[D,k.1a(B)]);k.1d.3x("7K",[D,k.1a(B)],k.v.7K);19 k.1d}19 1h},kM:u(C){p B=A.1a.3b.3R;A.1a.2Y.1O(k,"9X",[C,k.1a(B)]);if(B){k.1d.3x("lC",[C,k.1a(B)],k.v.9X)}},kK:u(C){p B=A.1a.3b.3R;A.1a.2Y.1O(k,"bS",[C,k.1a(B)]);if(B){k.1d.3x("m2",[C,k.1a(B)],k.v.bS)}}});A.23(A.1a.5O,{4k:{1I:1h,5W:"9y",71:"4Y",ak:"1a"}});A.1a.9y=u(L,F,J){if(!F.1i){19 1h}p D=(L.49||L.1p.2H).1b,C=D+L.2y.1f,I=(L.49||L.1p.2H).1c,H=I+L.2y.1g;p E=F.1i.1b,B=E+F.b0.1f,K=F.1i.1c,G=K+F.b0.1g;6d(J){1J"jP":19(E<D&&C<B&&K<I&&H<G);1R;1J"9y":19(E<D+(L.2y.1f/2)&&C-(L.2y.1f/2)<B&&K<I+(L.2y.1g/2)&&H-(L.2y.1g/2)<G);1R;1J"ga":19(E<((L.49||L.1p.2H).1b+(L.8Z||L.1i.2o).1b)&&((L.49||L.1p.2H).1b+(L.8Z||L.1i.2o).1b)<B&&K<((L.49||L.1p.2H).1c+(L.8Z||L.1i.2o).1c)&&((L.49||L.1p.2H).1c+(L.8Z||L.1i.2o).1c)<G);1R;1J"go":19((I>=K&&I<=G)||(H>=K&&H<=G)||(I<K&&H>G))&&((D>=E&&D<=B)||(C>=E&&C<=B)||(D<E&&C>B));1R;4Y:19 1h;1R}};A.1a.3b={3R:1n,8C:{"4Y":[]},bB:u(E,H){p B=A.1a.3b.8C[E.v.71];p F=H?H.4h:1n;p G=(E.21||E.1d).2O(":1w(5O)").87();kV:1S(p D=0;D<B.1t;D++){if(B[D].v.1I||(E&&!B[D].v.5N.1O(B[D].1d,(E.21||E.1d)))){5Y}1S(p C=0;C<G.1t;C++){if(G[C]==B[D].1d[0]){B[D].b0.1g=0;5Y kV}}B[D].4j=B[D].1d.1e("4E")!="6m";if(!B[D].4j){5Y}B[D].1i=B[D].1d.1i();B[D].b0={1f:B[D].1d[0].4D,1g:B[D].1d[0].3D};if(F=="m3"||F=="lV"){B[D].kM.1O(B[D],H)}}},7K:u(B,C){p D=1h;A.1E(A.1a.3b.8C[B.v.71],u(){if(!k.v){19}if(!k.v.1I&&k.4j&&A.1a.9y(B,k,k.v.5W)){D=k.kJ.1O(k,C)}if(!k.v.1I&&k.4j&&k.v.5N.1O(k.1d,(B.21||B.1d))){k.8x=1;k.6r=0;k.kK.1O(k,C)}});19 D},51:u(B,C){if(B.v.bC){A.1a.3b.bB(B,C)}A.1E(A.1a.3b.8C[B.v.71],u(){if(k.v.1I||k.k0||!k.4j){19}p E=A.1a.9y(B,k,k.v.5W);p G=!E&&k.6r==1?"8x":(E&&k.6r==0?"6r":1n);if(!G){19}p F;if(k.v.kj){p D=k.1d.5F(":1w(5O):eq(0)");if(D.1t){F=A.1w(D[0],"5O");F.k0=(G=="6r"?1:0)}}if(F&&G=="6r"){F.6r=0;F.8x=1;F.f0.1O(F,C)}k[G]=1;k[G=="8x"?"6r":"8x"]=0;k[G=="6r"?"dQ":"f0"].1O(k,C);if(F&&G=="8x"){F.8x=0;F.6r=1;F.dQ.1O(F,C)}})}};A.1a.2Y.2l("5O","d3",{9X:u(C,B){A(k).1x(B.v.d3)},bS:u(C,B){A(k).1G(B.v.d3)},7K:u(C,B){A(k).1G(B.v.d3)}});A.1a.2Y.2l("5O","d6",{4z:u(C,B){A(k).1x(B.v.d6)},ba:u(C,B){A(k).1G(B.v.d6)},7K:u(C,B){A(k).1G(B.v.d6)}})})(1L);(u(A){A.3T("1a.1C",A.23({},A.1a.5C,{57:u(){p M=k,N=k.v;p Q=k.1d.1e("1p");k.e3=k.1d;k.1d.1x("1a-1C").1e({1p:/7x/.1P(Q)?"2C":Q});A.23(N,{aO:!!(N.6w),1u:N.1u||N.5P||N.26?N.1u||"lT":1n,7n:N.7n===1q?"1a-1C-bI-29":N.7n});p H="cG j7 #lY";N.iS={"1a-1C":{4E:"7l"},"1a-1C-29":{1p:"2H",bv:"#j6",gX:"0.cG"},"1a-1C-n":{2Z:"n-2K",1g:"66",1b:"3y",3O:"3y",e6:H},"1a-1C-s":{2Z:"s-2K",1g:"66",1b:"3y",3O:"3y",ei:H},"1a-1C-e":{2Z:"e-2K",1f:"66",1c:"3y",3X:"3y",ea:H},"1a-1C-w":{2Z:"w-2K",1f:"66",1c:"3y",3X:"3y",e9:H},"1a-1C-4Q":{2Z:"4Q-2K",1f:"66",1g:"66",ea:H,ei:H},"1a-1C-4R":{2Z:"4R-2K",1f:"66",1g:"66",ei:H,e9:H},"1a-1C-ne":{2Z:"ne-2K",1f:"66",1g:"66",ea:H,e6:H},"1a-1C-nw":{2Z:"nw-2K",1f:"66",1g:"66",e9:H,e6:H}};N.ee={"1a-1C-29":{bv:"#j6",dj:"cG j7 #m0",1g:"k1",1f:"k1"},"1a-1C-n":{2Z:"n-2K",1c:"3y",1b:"45%"},"1a-1C-s":{2Z:"s-2K",3X:"3y",1b:"45%"},"1a-1C-e":{2Z:"e-2K",3O:"3y",1c:"45%"},"1a-1C-w":{2Z:"w-2K",1b:"3y",1c:"45%"},"1a-1C-4Q":{2Z:"4Q-2K",3O:"3y",3X:"3y"},"1a-1C-4R":{2Z:"4R-2K",1b:"3y",3X:"3y"},"1a-1C-nw":{2Z:"nw-2K",1b:"3y",1c:"3y"},"1a-1C-ne":{2Z:"ne-2K",3O:"3y",1c:"3y"}};N.e4=k.1d[0].3n;if(N.e4.3U(/lH|aW|1z|5b|43|am/i)){p B=k.1d;if(/2C/.1P(B.1e("1p"))&&A.2j.63){B.1e({1p:"2C",1c:"4c",1b:"4c"})}B.7U(A(\'<1v 2e="1a-bM"	2Q="2W: 3h;"></1v>\').1e({1p:B.1e("1p"),1f:B.4b(),1g:B.3p(),1c:B.1e("1c"),1b:B.1e("1b")}));p J=k.1d;k.1d=k.1d.1B();k.1d.1w("1C",k);k.1d.1e({93:J.1e("93"),8u:J.1e("8u"),8E:J.1e("8E"),7Z:J.1e("7Z")});J.1e({93:0,8u:0,8E:0,7Z:0});if(A.2j.bL&&N.6X){J.1e("2K","6m")}N.7m=J.1e({1p:"7x",kk:1,4E:"7l"});k.1d.1e({4P:J.1e("4P")});k.aF()}if(!N.3Q){N.3Q=!A(".1a-1C-29",k.1d).1t?"e,s,4Q":{n:".1a-1C-n",e:".1a-1C-e",s:".1a-1C-s",w:".1a-1C-w",4Q:".1a-1C-4Q",4R:".1a-1C-4R",ne:".1a-1C-ne",nw:".1a-1C-nw"}}if(N.3Q.4N==9O){N.2U=N.2U||b7;if(N.3Q=="lF"){N.3Q="n,e,s,w,4Q,4R,ne,nw"}p O=N.3Q.74(",");N.3Q={};p G={29:"1p: 2H; 4E: 6m; 2W:3h;",n:"1c: 8t; 1f:2c%;",e:"3O: 8t; 1g:2c%;",s:"3X: 8t; 1f:2c%;",w:"1b: 8t; 1g:2c%;",4Q:"3X: 8t; 3O: 3y;",4R:"3X: 8t; 1b: 3y;",ne:"1c: 8t; 3O: 3y;",nw:"1c: 8t; 1b: 3y;"};1S(p R=0;R<O.1t;R++){p S=A.ad(O[R]),L=N.iS,F="1a-1C-"+S,C=!A.1a.1e(F)&&!N.7n,P=A.1a.1e("1a-1C-bI-29"),T=A.23(L[F],L["1a-1C-29"]),D=A.23(N.ee[F],!P?N.ee["1a-1C-29"]:{});p K=/4R|4Q|ne|nw/.1P(S)?{2U:++N.2U}:{};p I=(C?G[S]:""),E=A([\'<1v 2e="1a-1C-29 \',F,\'" 2Q="\',I,G.29,\'"></1v>\'].6M("")).1e(K);N.3Q[S]=".1a-1C-"+S;k.1d.5g(E.1e(C?T:{}).1e(N.7n?D:{}).1x(N.7n?"1a-1C-bI-29":"").1x(N.7n))}if(N.7n){k.1d.1x("1a-1C-bI").1e(!A.1a.1e("1a-1C-bI")?{}:{})}}k.iB=u(Y){Y=Y||k.1d;1S(p V in N.3Q){if(N.3Q[V].4N==9O){N.3Q[V]=A(N.3Q[V],k.1d).1N()}if(N.7C){N.3Q[V].1e({1Z:0})}if(k.1d.is(".1a-bM")&&N.e4.3U(/aW|1z|5b|43/i)){p W=A(N.3Q[V],k.1d),X=0;X=/4R|ne|nw|4Q|n|s/.1P(V)?W.3p():W.4b();p U=["bt",/ne|nw|n/.1P(V)?"lI":/4Q|4R|s/.1P(V)?"lJ":/^e$/.1P(V)?"lO":"lP"].6M("");if(!N.7C){Y.1e(U,X)}k.aF()}if(!A(N.3Q[V]).1t){5Y}}};k.iB(k.1d);N.9E=A(".1a-1C-29",M.1d);if(N.8Y){N.9E.1E(u(U,V){A.1a.8Y(V)})}N.9E.hL(u(){if(!N.dz){if(k.6x){p U=k.6x.3U(/1a-1C-(4Q|4R|ne|nw|n|e|s|w)/i)}M.2P=N.2P=U&&U[1]?U[1]:"4Q"}});if(N.jK){N.9E.1Q();A(M.1d).1x("1a-1C-dY").c5(u(){A(k).1G("1a-1C-dY");N.9E.1N()},u(){if(!N.dz){A(k).1x("1a-1C-dY");N.9E.1Q()}})}k.a0()},6B:{},1a:u(){19{e3:k.e3,1d:k.1d,1u:k.1u,1p:k.1p,1D:k.1D,v:k.v,5U:k.5U,3t:k.3t}},24:u(C,B){A.1a.2Y.1O(k,C,[B,k.1a()]);if(C!="2K"){k.1d.3x(["2K",C].6M(""),[B,k.1a()],k.v[C])}},3s:u(){p D=k.1d,C=D.9U(".1a-1C").4u(0);k.a1();p B=u(E){A(E).1G("1a-1C 1a-1C-1I").4r("1C").2G(".1C").2O(".1a-1C-29").2m()};B(D);if(D.is(".1a-bM")&&C){D.1B().5g(A(C).1e({1p:D.1e("1p"),1f:D.4b(),1g:D.3p(),1c:D.1e("1c"),1b:D.1e("1b")})).3l().2m();B(C)}},9e:u(D){if(k.v.1I){19 1h}p C=1h;1S(p B in k.v.3Q){if(A(k.v.3Q[B])[0]==D.1s){C=1q}}if(!C){19 1h}19 1q},7H:u(I){p C=k.v,B=k.1d.1p(),D=k.1d,H=u(M){19 1m(M,10)||0},G=A.2j.44&&A.2j.8p<7;C.dz=1q;C.e2={1c:A(1l).2p(),1b:A(1l).2B()};if(D.is(".1a-2x")||(/2H/).1P(D.1e("1p"))){p J=A.2j.44&&!C.1U&&(/2H/).1P(D.1e("1p"))&&!(/2C/).1P(D.1B().1e("1p"));p K=J?C.e2.1c:0,F=J?C.e2.1b:0;D.1e({1p:"2H",1c:(B.1c+K),1b:(B.1b+F)})}if(A.2j.63&&/2C/.1P(D.1e("1p"))){D.1e({1p:"2C",1c:"4c",1b:"4c"})}k.jM();p L=H(k.1u.1e("1b")),E=H(k.1u.1e("1c"));if(C.1U){L+=A(C.1U).2B()||0;E+=A(C.1U).2p()||0}k.1i=k.1u.1i();k.1p={1b:L,1c:E};k.1D=C.1u||G?{1f:D.4b(),1g:D.3p()}:{1f:D.1f(),1g:D.1g()};k.5U=C.1u||G?{1f:D.4b(),1g:D.3p()}:{1f:D.1f(),1g:D.1g()};k.3t={1b:L,1c:E};k.8I={1f:D.4b()-D.1f(),1g:D.3p()-D.1g()};k.iz={1b:I.3z,1c:I.3f};C.6w=(2E C.6w=="8A")?C.6w:((k.5U.1f/k.5U.1g)||1);if(C.gq){A("1Y").1e("2Z",k.2P+"-2K")}k.24("2A",I);19 1q},6N:u(I){p D=k.1u,C=k.v,J={},M=k,F=k.iz,K=k.2P;p N=(I.3z-F.1b)||0,L=(I.3f-F.1c)||0;p E=k.4I[K];if(!E){19 1h}p H=E.1K(k,[I,N,L]),G=A.2j.44&&A.2j.8p<7,B=k.8I;if(C.aO||I.aa){H=k.iR(H,I)}H=k.iN(H,I);k.24("2K",I);D.1e({1c:k.1p.1c+"px",1b:k.1p.1b+"px",1f:k.1D.1f+"px",1g:k.1D.1g+"px"});if(!C.1u&&C.7m){k.aF()}k.gm(H);k.1d.3x("2K",[I,k.1a()],k.v.2K);19 1h},7I:u(I){k.v.dz=1h;p E=k.v,H=u(M){19 1m(M,10)||0},K=k;if(E.1u){p D=E.7m,B=D&&(/aW/i).1P(D.4u(0).3n),C=B&&A.1a.aU(D.4u(0),"1b")?0:K.8I.1g,G=B?0:K.8I.1f;p L={1f:(K.1D.1f-G),1g:(K.1D.1g-C)},F=(1m(K.1d.1e("1b"),10)+(K.1p.1b-K.3t.1b))||1n,J=(1m(K.1d.1e("1c"),10)+(K.1p.1c-K.3t.1c))||1n;if(!E.26){k.1d.1e(A.23(L,{1c:J,1b:F}))}if(E.1u&&!E.26){k.aF()}}if(E.gq){A("1Y").1e("2Z","4c")}k.24("3d",I);if(E.1u){k.1u.2m()}19 1h},gm:u(B){p C=k.v;k.1i=k.1u.1i();if(B.1b){k.1p.1b=B.1b}if(B.1c){k.1p.1c=B.1c}if(B.1g){k.1D.1g=B.1g}if(B.1f){k.1D.1f=B.1f}},iR:u(D,E){p F=k.v,G=k.1p,C=k.1D,B=k.2P;if(D.1g){D.1f=(C.1g*F.6w)}1j{if(D.1f){D.1g=(C.1f/F.6w)}}if(B=="4R"){D.1b=G.1b+(C.1f-D.1f);D.1c=1n}if(B=="nw"){D.1c=G.1c+(C.1g-D.1g);D.1b=G.1b+(C.1f-D.1f)}19 D},iN:u(H,I){p F=k.1u,E=k.v,N=E.aO||I.aa,M=k.2P,P=H.1f&&E.8i&&E.8i<H.1f,J=H.1g&&E.7c&&E.7c<H.1g,D=H.1f&&E.7h&&E.7h>H.1f,O=H.1g&&E.7d&&E.7d>H.1g;if(D){H.1f=E.7h}if(O){H.1g=E.7d}if(P){H.1f=E.8i}if(J){H.1g=E.7c}p C=k.3t.1b+k.5U.1f,L=k.1p.1c+k.1D.1g;p G=/4R|nw|w/.1P(M),B=/nw|ne|n/.1P(M);if(D&&G){H.1b=C-E.7h}if(P&&G){H.1b=C-E.8i}if(O&&B){H.1c=L-E.7d}if(J&&B){H.1c=L-E.7c}p K=!H.1f&&!H.1g;if(K&&!H.1b&&H.1c){H.1c=1n}1j{if(K&&!H.1c&&H.1b){H.1b=1n}}19 H},aF:u(){p F=k.v;if(!F.7m){19}p D=F.7m,C=k.1u||k.1d;if(!F.9N){p B=[D.1e("6Z"),D.1e("bX"),D.1e("ch"),D.1e("79")],E=[D.1e("eL"),D.1e("f9"),D.1e("ew"),D.1e("fa")];F.9N=A.7B(B,u(G,I){p H=1m(G,10)||0,J=1m(E[I],10)||0;19 H+J})}D.1e({1g:(C.1g()-F.9N[0]-F.9N[2])+"px",1f:(C.1f()-F.9N[1]-F.9N[3])+"px"})},jM:u(){p C=k.1d,F=k.v;k.gt=C.1i();if(F.1u){k.1u=k.1u||A(\'<1v 2Q="2W:3h;"></1v>\');p B=A.2j.44&&A.2j.8p<7,D=(B?1:0),E=(B?2:-1);k.1u.1x(F.1u).1e({1f:C.4b()+E,1g:C.3p()+E,1p:"2H",1b:k.gt.1b-D+"px",1c:k.gt.1c-D+"px",2U:++F.2U});k.1u.31("1Y");if(F.8Y){A.1a.8Y(k.1u.4u(0))}}1j{k.1u=C}},4I:{e:u(D,C,B){19{1f:k.5U.1f+C}},w:u(F,C,B){p G=k.v,D=k.5U,E=k.3t;19{1b:E.1b+C,1f:D.1f-C}},n:u(F,C,B){p G=k.v,D=k.5U,E=k.3t;19{1c:E.1c+B,1g:D.1g-B}},s:u(D,C,B){19{1g:k.5U.1g+B}},4Q:u(D,C,B){19 A.23(k.4I.s.1K(k,1T),k.4I.e.1K(k,[D,C,B]))},4R:u(D,C,B){19 A.23(k.4I.s.1K(k,1T),k.4I.w.1K(k,[D,C,B]))},ne:u(D,C,B){19 A.23(k.4I.n.1K(k,1T),k.4I.e.1K(k,[D,C,B]))},nw:u(D,C,B){19 A.23(k.4I.n.1K(k,1T),k.4I.w.1K(k,[D,C,B]))}}}));A.23(A.1a.1C,{4k:{7r:":1z",3G:1,6A:0,6X:1q,7C:1h,7h:10,7d:10,6w:1h,8Y:1q,gq:1q,jK:1h,7n:1h}});A.1a.2Y.2l("1C","1U",{2A:u(I,K){p E=K.v,M=A(k).1w("1C"),G=M.1d;p C=E.1U,F=(C ma A)?C.4u(0):(/1B/.1P(C))?G.1B().4u(0):C;if(!F){19}M.fr=A(F);if(/1l/.1P(C)||C==1l){M.aZ={1b:0,1c:0};M.cY={1b:0,1c:0};M.9V={1d:A(1l),1b:0,1c:0,1f:A(1l).1f(),1g:A(1l).1g()||1l.1Y.3g.5B}}1j{M.aZ=A(F).1i();M.cY=A(F).1p();M.dk={1g:A(F).7v(),1f:A(F).9m()};p J=M.aZ,B=M.dk.1g,H=M.dk.1f,D=(A.1a.aU(F,"1b")?F.9c:H),L=(A.1a.aU(F)?F.5B:B);M.9V={1d:F,1b:J.1b,1c:J.1c,1f:D,1g:L}}},2K:u(H,K){p E=K.v,N=A(k).1w("1C"),C=N.dk,J=N.aZ,G=N.1D,I=N.1p,L=E.aO||H.aa,B={1c:0,1b:0},D=N.fr;if(D[0]!=1l&&/7x/.1P(D.1e("1p"))){B=N.cY}if(I.1b<(E.1u?J.1b:B.1b)){N.1D.1f=N.1D.1f+(E.1u?(N.1p.1b-J.1b):(N.1p.1b-B.1b));if(L){N.1D.1g=N.1D.1f/E.6w}N.1p.1b=E.1u?J.1b:B.1b}if(I.1c<(E.1u?J.1c:0)){N.1D.1g=N.1D.1g+(E.1u?(N.1p.1c-J.1c):N.1p.1c);if(L){N.1D.1f=N.1D.1g*E.6w}N.1p.1c=E.1u?J.1c:0}p F=(E.1u?N.1i.1b-J.1b:(N.1p.1b-B.1b))+N.8I.1f,M=(E.1u?N.1i.1c-J.1c:N.1p.1c)+N.8I.1g;if(F+N.1D.1f>=N.9V.1f){N.1D.1f=N.9V.1f-F;if(L){N.1D.1g=N.1D.1f/E.6w}}if(M+N.1D.1g>=N.9V.1g){N.1D.1g=N.9V.1g-M;if(L){N.1D.1f=N.1D.1g*E.6w}}},3d:u(G,J){p C=J.v,L=A(k).1w("1C"),H=L.1p,I=L.aZ,B=L.cY,D=L.fr;p E=A(L.1u),M=E.1i(),K=E.9m(),F=E.7v();if(C.1u&&!C.26&&/2C/.1P(D.1e("1p"))){A(k).1e({1b:(M.1b-I.1b),1c:(M.1c-I.1c),1f:K,1g:F})}if(C.1u&&!C.26&&/7x/.1P(D.1e("1p"))){A(k).1e({1b:B.1b+(M.1b-I.1b),1c:B.1c+(M.1c-I.1c),1f:K,1g:F})}}});A.1a.2Y.2l("1C","3r",{2K:u(H,J){p D=J.v,L=A(k).1w("1C"),G=L.1D,E=L.5U,F=L.3t,K=L.2P,I=D.aO||H.aa;D.3r=2E D.3r=="8A"?[D.3r,D.3r]:D.3r;p C=1k.2T((G.1f-E.1f)/(D.3r[0]||1))*(D.3r[0]||1),B=1k.2T((G.1g-E.1g)/(D.3r[1]||1))*(D.3r[1]||1);if(/^(4Q|s|e)$/.1P(K)){L.1D.1f=E.1f+C;L.1D.1g=E.1g+B}1j{if(/^(ne)$/.1P(K)){L.1D.1f=E.1f+C;L.1D.1g=E.1g+B;L.1p.1c=F.1c-B}1j{if(/^(4R)$/.1P(K)){L.1D.1f=E.1f+C;L.1D.1g=E.1g+B;L.1p.1b=F.1b-C}1j{L.1D.1f=E.1f+C;L.1D.1g=E.1g+B;L.1p.1c=F.1c-B;L.1p.1b=F.1b-C}}}}});A.1a.2Y.2l("1C","26",{3d:u(I,K){p F=K.v,L=A(k).1w("1C");p E=F.7m,B=E&&(/aW/i).1P(E.4u(0).3n),C=B&&A.1a.aU(E.4u(0),"1b")?0:L.8I.1g,H=B?0:L.8I.1f;p D={1f:(L.1D.1f-H),1g:(L.1D.1g-C)},G=(1m(L.1d.1e("1b"),10)+(L.1p.1b-L.3t.1b))||1n,J=(1m(L.1d.1e("1c"),10)+(L.1p.1c-L.3t.1c))||1n;L.1d.26(A.23(D,J&&G?{1c:J,1b:G}:{}),{1W:F.l0||"dn",2g:F.lw||"bA",dv:u(){p M={1f:1m(L.1d.1e("1f"),10),1g:1m(L.1d.1e("1g"),10),1c:1m(L.1d.1e("1c"),10),1b:1m(L.1d.1e("1b"),10)};if(E){E.1e({1f:M.1f,1g:M.1g})}L.gm(M);L.24("26",I)}})}});A.1a.2Y.2l("1C","5P",{2A:u(E,D){p F=D.v,B=A(k).1w("1C"),G=F.7m,C=B.1D;if(!G){B.5P=B.1d.84()}1j{B.5P=G.84()}B.5P.1e({1Z:0.25,4E:"7l",1p:"2C",1g:C.1g,1f:C.1f,4P:0,1b:0,1c:0}).1x("1a-1C-5P").1x(2E F.5P=="4w"?F.5P:"");B.5P.31(B.1u)},2K:u(D,C){p E=C.v,B=A(k).1w("1C"),F=E.7m;if(B.5P){B.5P.1e({1p:"2C",1g:B.1D.1g,1f:B.1D.1f})}},3d:u(D,C){p E=C.v,B=A(k).1w("1C"),F=E.7m;if(B.5P&&B.1u){B.1u.4u(0).cr(B.5P.4u(0))}}});A.1a.2Y.2l("1C","6Q",{2A:u(E,C){p F=C.v,B=A(k).1w("1C"),D=u(G){A(G).1E(u(){A(k).1w("1C-g4",{1f:1m(A(k).1f(),10),1g:1m(A(k).1g(),10),1b:1m(A(k).1e("1b"),10),1c:1m(A(k).1e("1c"),10)})})};if(2E(F.6Q)=="7z"){if(F.6Q.1t){F.6Q=F.6Q[0];D(F.6Q)}1j{A.1E(F.6Q,u(G,H){D(G)})}}1j{D(F.6Q)}},2K:u(F,E){p G=E.v,C=A(k).1w("1C"),D=C.5U,I=C.3t;p H={1g:(C.1D.1g-D.1g)||0,1f:(C.1D.1f-D.1f)||0,1c:(C.1p.1c-I.1c)||0,1b:(C.1p.1b-I.1b)||0},B=u(J,K){A(J).1E(u(){p N=A(k).1w("1C-g4"),M={},L=K&&K.1t?K:["1f","1g","1c","1b"];A.1E(L||["1f","1g","1c","1b"],u(O,Q){p P=(N[Q]||0)+(H[Q]||0);if(P&&P>=0){M[Q]=P||1n}});A(k).1e(M)})};if(2E(G.6Q)=="7z"){A.1E(G.6Q,u(J,K){B(J,K)})}1j{B(G.6Q)}},3d:u(C,B){A(k).4r("1C-g4-2A")}})})(1L);(u(A){A.3T("1a.48",A.23({},A.1a.5C,{57:u(){p B=k;k.1d.1x("1a-48");k.fE=1h;p C;k.aH=u(){C=A(B.v.3H,B.1d[0]);C.1E(u(){p D=A(k);p E=D.1i();A.1w(k,"48-2V",{1d:k,$1d:D,1b:E.1b,1c:E.1c,3O:E.1b+D.1f(),3X:E.1c+D.1g(),8N:1h,2a:D.4n("1a-2a"),5j:D.4n("1a-5j"),4p:D.4n("1a-4p")})})};k.aH();k.cR=C.1x("1a-lh");k.a0();k.1u=A(1l.iA("1v")).1e({dj:"cG lt ii"}).1x("1a-48-1u")},6o:u(){if(k.v.1I){k.9P()}1j{k.8G()}},3s:u(){k.1d.1G("1a-48 1a-48-1I").4r("48").2G(".48");k.a1()},7H:u(E){p C=k;k.g0=[E.3z,E.3f];if(k.v.1I){19}p D=k.v;k.cR=A(D.3H,k.1d[0]);k.1d.3x("l4",[E,{48:k.1d[0],v:D}],D.2A);A("1Y").5g(k.1u);k.1u.1e({"z-3J":2c,1p:"2H",1b:E.hN,1c:E.kZ,1f:0,1g:0});if(D.jN){k.aH()}k.cR.3H(".1a-2a").1E(u(){p F=A.1w(k,"48-2V");F.8N=1q;if(!E.g5){F.$1d.1G("1a-2a");F.2a=1h;F.$1d.1x("1a-4p");F.4p=1q;C.1d.3x("fG",[E,{48:C.1d[0],4p:F.1d,v:D}],D.4p)}});p B=1h;A(E.1s).5F().87().1E(u(){if(A.1w(k,"48-2V")){B=1q}});19 k.v.kX?!B:1q},6N:u(I){p C=k;k.fE=1q;if(k.v.1I){19}p E=k.v;p D=k.g0[0],H=k.g0[1],B=I.3z,G=I.3f;if(D>B){p F=B;B=D;D=F}if(H>G){p F=G;G=H;H=F}k.1u.1e({1b:D,1c:H,1f:B-D,1g:G-H});k.cR.1E(u(){p J=A.1w(k,"48-2V");if(!J||J.1d==C.1d[0]){19}p K=1h;if(E.5W=="go"){K=(!(J.1b>B||J.3O<D||J.1c>G||J.3X<H))}1j{if(E.5W=="jP"){K=(J.1b>D&&J.3O<B&&J.1c>H&&J.3X<G)}}if(K){if(J.2a){J.$1d.1G("1a-2a");J.2a=1h}if(J.4p){J.$1d.1G("1a-4p");J.4p=1h}if(!J.5j){J.$1d.1x("1a-5j");J.5j=1q;C.1d.3x("mg",[I,{48:C.1d[0],5j:J.1d,v:E}],E.5j)}}1j{if(J.5j){if(I.g5&&J.8N){J.$1d.1G("1a-5j");J.5j=1h;J.$1d.1x("1a-2a");J.2a=1q}1j{J.$1d.1G("1a-5j");J.5j=1h;if(J.8N){J.$1d.1x("1a-4p");J.4p=1q}C.1d.3x("fG",[I,{48:C.1d[0],4p:J.1d,v:E}],E.4p)}}if(J.2a){if(!I.g5&&!J.8N){J.$1d.1G("1a-2a");J.2a=1h;J.$1d.1x("1a-4p");J.4p=1q;C.1d.3x("fG",[I,{48:C.1d[0],4p:J.1d,v:E}],E.4p)}}}});19 1h},7I:u(D){p B=k;k.fE=1h;p C=k.v;A(".1a-4p",k.1d[0]).1E(u(){p E=A.1w(k,"48-2V");E.$1d.1G("1a-4p");E.4p=1h;E.8N=1h;B.1d.3x("lB",[D,{48:B.1d[0],jO:E.1d,v:C}],C.jO)});A(".1a-5j",k.1d[0]).1E(u(){p E=A.1w(k,"48-2V");E.$1d.1G("1a-5j").1x("1a-2a");E.5j=1h;E.2a=1q;E.8N=1q;B.1d.3x("mw",[D,{48:B.1d[0],2a:E.1d,v:C}],C.2a)});k.1d.3x("mx",[D,{48:B.1d[0],v:k.v}],k.v.3d);k.1u.2m();19 1h}}));A.23(A.1a.48,{4k:{3G:1,6A:0,7r:":1z",31:"1Y",jN:1q,3H:"*",5W:"go"}})})(1L);(u(B){u A(E,D){p C=B.2j.bL&&B.2j.8p<mt;if(E.c1&&!C){19 E.c1(D)}if(E.c0){19!!(E.c0(D)&16)}4V(D=D.3g){if(D==E){19 1q}}19 1h}B.3T("1a.3a",B.23({},B.1a.5C,{57:u(){p C=k.v;k.5L={};k.1d.1x("1a-3a");k.aH();k.7D=k.2b.1t?(/1b|3O/).1P(k.2b[0].2V.1e("eX")):1h;k.1i=k.1d.1i();k.a0()},6B:{},1a:u(C){19{1u:(C||k)["1u"],3I:(C||k)["3I"]||B([]),1p:(C||k)["1p"],aK:(C||k)["49"],v:k.v,1d:k.1d,2V:(C||k)["21"],jg:C?C.1d:1n}},24:u(F,E,C,D){B.1a.2Y.1O(k,F,[E,k.1a(C)]);if(!D){k.1d.3x(F=="76"?F:"76"+F,[E,k.1a(C)],k.v[F])}},k8:u(E){p C=k.ge(E&&E.iJ);p D=[];E=E||{};B(C).1E(u(){p F=(B(k.2V||k).2S(E.mq||"id")||"").3U(E.iL||(/(.+)[-=9M](.+)/));if(F){D.4o((E.6H||F[1]+"[]")+"="+(E.6H&&E.iL?F[1]:F[2]))}});19 D.6M("&")},k7:u(E){p C=k.ge(E&&E.iJ);p D=[];C.1E(u(){D.4o(B(k).2S(E.2S||"id"))});19 D},iC:u(L){p E=k.49.1b,D=E+k.2y.1f,K=k.49.1c,J=K+k.2y.1g;p F=L.1b,C=F+L.1f,M=L.1c,I=M+L.1g;p N=k.1i.2o.1c,H=k.1i.2o.1b;p G=(K+N)>M&&(K+N)<I&&(E+H)>F&&(E+H)<C;if(k.v.5W=="ga"||k.v.mr||(k.v.5W=="ex"&&k.2y[k.7D?"1f":"1g"]>L[k.7D?"1f":"1g"])){19 G}1j{19(F<E+(k.2y.1f/2)&&D-(k.2y.1f/2)<C&&M<K+(k.2y.1g/2)&&J-(k.2y.1g/2)<I)}},j3:u(N){p E=k.49.1b,D=E+k.2y.1f,L=k.49.1c,J=L+k.2y.1g;p F=N.1b,C=F+N.1f,O=N.1c,I=O+N.1g;p P=k.1i.2o.1c,H=k.1i.2o.1b;p G=(L+P)>O&&(L+P)<I&&(E+H)>F&&(E+H)<C;if(k.v.5W=="ga"||(k.v.5W=="ex"&&k.2y[k.7D?"1f":"1g"]>N[k.7D?"1f":"1g"])){if(!G){19 1h}if(k.7D){if((E+H)>F&&(E+H)<F+N.1f/2){19 2}if((E+H)>F+N.1f/2&&(E+H)<C){19 1}}1j{p M=N.1g;p K=L-k.dA.1c<0?2:1;if(K==1&&(L+P)<O+M/2){19 2}1j{if(K==2&&(L+P)>O+M/2){19 1}}}}1j{if(!(F<E+(k.2y.1f/2)&&D-(k.2y.1f/2)<C&&O<L+(k.2y.1g/2)&&J-(k.2y.1g/2)<I)){19 1h}if(k.7D){if(D>F&&E<F){19 2}if(E<C&&D>C){19 1}}1j{if(J>O&&L<O){19 1}if(L<I&&J>I){19 2}}}19 1h},aH:u(){k.cu();k.bC()},ge:u(H){p D=k;p C=[];p F=[];if(k.v.9K&&H){1S(p G=k.v.9K.1t-1;G>=0;G--){p J=B(k.v.9K[G]);1S(p E=J.1t-1;E>=0;E--){p I=B.1w(J[E],"3a");if(I&&I!=k&&!I.v.1I){F.4o([B.7Y(I.v.2b)?I.v.2b.1O(I.1d):B(I.v.2b,I.1d).8F(".1a-3a-1u"),I])}}}}F.4o([B.7Y(k.v.2b)?k.v.2b.1O(k.1d,1n,{v:k.v,2V:k.21}):B(k.v.2b,k.1d).8F(".1a-3a-1u"),k]);1S(p G=F.1t-1;G>=0;G--){F[G][0].1E(u(){C.4o(k)})}19 B(C)},j8:u(){p E=k.21.2O(":1w(3a-2V)");1S(p D=0;D<k.2b.1t;D++){1S(p C=0;C<E.1t;C++){if(E[C]==k.2b[D].2V[0]){k.2b.cI(D,1)}}}},cu:u(){k.2b=[];k.2N=[k];p D=k.2b;p C=k;p F=[[B.7Y(k.v.2b)?k.v.2b.1O(k.1d,1n,{v:k.v,2V:k.21}):B(k.v.2b,k.1d),k]];if(k.v.9K){1S(p G=k.v.9K.1t-1;G>=0;G--){p I=B(k.v.9K[G]);1S(p E=I.1t-1;E>=0;E--){p H=B.1w(I[E],"3a");if(H&&H!=k&&!H.v.1I){F.4o([B.7Y(H.v.2b)?H.v.2b.1O(H.1d):B(H.v.2b,H.1d),H]);k.2N.4o(H)}}}}1S(p G=F.1t-1;G>=0;G--){F[G][0].1E(u(){B.1w(k,"3a-2V",F[G][1]);D.4o({2V:B(k),2q:F[G][1],1f:0,1g:0,1b:0,1c:0})})}},bC:u(D){if(k.3k){p C=k.3k.1i();k.1i.1B={1c:C.1c+k.bz.1c,1b:C.1b+k.bz.1b}}1S(p F=k.2b.1t-1;F>=0;F--){if(k.2b[F].2q!=k.9A&&k.9A&&k.2b[F].2V[0]!=k.21[0]){5Y}p E=k.v.iG?B(k.v.iG,k.2b[F].2V):k.2b[F].2V;if(!D){k.2b[F].1f=E[0].4D;k.2b[F].1g=E[0].3D}p G=E.1i();k.2b[F].1b=G.1b;k.2b[F].1c=G.1c}if(k.v.gp&&k.v.gp.iy){k.v.gp.iy.1O(k)}1j{1S(p F=k.2N.1t-1;F>=0;F--){p G=k.2N[F].1d.1i();k.2N[F].5L.1b=G.1b;k.2N[F].5L.1c=G.1c;k.2N[F].5L.1f=k.2N[F].1d.4b();k.2N[F].5L.1g=k.2N[F].1d.3p()}}},3s:u(){k.1d.1G("1a-3a 1a-3a-1I").4r("3a").2G(".3a");k.a1();1S(p C=k.2b.1t-1;C>=0;C--){k.2b[C].2V.4r("3a-2V")}},j4:u(E){p C=E||k,F=C.v;if(!F.3I||F.3I.4N==9O){p D=F.3I;F.3I={1d:u(){p G=B(1l.iA(C.21[0].3n)).1x(D||"1a-3a-3I")[0];if(!D){G.2Q.ah="3h";1l.1Y.cw(G);G.iF=C.21[0].iF;1l.1Y.cr(G)}19 G},bU:u(G,H){if(D&&!F.ks){19}if(!H.1g()){H.1g(C.21.7v()-1m(C.21.1e("eL")||0,10)-1m(C.21.1e("ew")||0,10))}if(!H.1f()){H.1f(C.21.9m()-1m(C.21.1e("fa")||0,10)-1m(C.21.1e("f9")||0,10))}}}}C.3I=B(F.3I.1d.1O(C.1d,C.21));C.21.1B()[0].cw(C.3I[0]);C.3I[0].3g.bo(C.3I[0],C.21[0]);F.3I.bU(C,C.3I)},j1:u(F){1S(p D=k.2N.1t-1;D>=0;D--){if(k.iC(k.2N[D].5L)){if(!k.2N[D].5L.4z){if(k.9A!=k.2N[D]){p I=lE;p H=1n;p E=k.49[k.2N[D].7D?"1b":"1c"];1S(p C=k.2b.1t-1;C>=0;C--){if(!A(k.2N[D].1d[0],k.2b[C].2V[0])){5Y}p G=k.2b[C][k.2N[D].7D?"1b":"1c"];if(1k.3Y(G-E)<I){I=1k.3Y(G-E);H=k.2b[C]}}if(!H&&!k.v.kh){5Y}k.9A=k.2N[D];H?k.v.cA.1O(k,F,H,1n,1q):k.v.cA.1O(k,F,1n,k.2N[D].1d,1q);k.24("5z",F);k.2N[D].24("5z",F,k);k.v.3I.bU(k.9A,k.3I)}k.2N[D].24("4z",F,k);k.2N[D].5L.4z=1}}1j{if(k.2N[D].5L.4z){k.2N[D].24("ba",F,k);k.2N[D].5L.4z=0}}}},9e:u(G,F){if(k.v.1I||k.v.4h=="7x"){19 1h}k.cu();p E=1n,D=k,C=B(G.1s).5F().1E(u(){if(B.1w(k,"3a-2V")==D){E=B(k);19 1h}});if(B.1w(G.1s,"3a-2V")==D){E=B(G.1s)}if(!E){19 1h}if(k.v.29&&!F){p H=1h;B(k.v.29,E).2O("*").87().1E(u(){if(k==G.1s){H=1q}});if(!H){19 1h}}k.21=E;k.j8();19 1q},cx:u(D){p E=k.v;p C=2E E.1u=="u"?B(E.1u.1K(k.1d[0],[D,k.21])):(E.1u=="82"?k.21:k.21.84());if(!C.5F("1Y").1t){B(E.31!="1B"?E.31:k.21[0].3g)[0].cw(C[0])}19 C},7H:u(G,I,K){p C=k.v;k.9A=k;k.bC();k.1u=k.cx(G);k.3N={1b:(1m(k.21.1e("93"),10)||0),1c:(1m(k.21.1e("8u"),10)||0)};k.1i=k.21.1i();k.1i={1c:k.1i.1c-k.3N.1c,1b:k.1i.1b-k.3N.1b};k.1i.2o={1b:G.3z-k.1i.1b,1c:G.3f-k.1i.1c};k.3k=k.1u.3k();p E=k.3k.1i();k.bz={1c:(1m(k.3k.1e("6Z"),10)||0),1b:(1m(k.3k.1e("79"),10)||0)};k.1i.1B={1c:E.1c+k.bz.1c,1b:E.1b+k.bz.1b};k.dA=k.3t=k.8X(G);k.eW={6e:k.21.6e()[0],1B:k.21.1B()[0]};k.2y={1f:k.1u.4b(),1g:k.1u.3p()};if(C.1u=="82"){k.kz={1p:k.21.1e("1p"),1c:k.21.1e("1c"),1b:k.21.1e("1b"),6z:k.21.1e("6z")}}1j{k.21.1Q()}k.1u.1e({1p:"2H",6z:"6I"}).1x("1a-3a-1u");k.j4();k.24("2A",G);if(!k.lS){k.2y={1f:k.1u.4b(),1g:k.1u.3p()}}if(C.6L){if(C.6L.1b!=2i){k.1i.2o.1b=C.6L.1b}if(C.6L.3O!=2i){k.1i.2o.1b=k.2y.1f-C.6L.3O}if(C.6L.1c!=2i){k.1i.2o.1c=C.6L.1c}if(C.6L.3X!=2i){k.1i.2o.1c=k.2y.1g-C.6L.3X}}if(C.1U){if(C.1U=="1B"){C.1U=k.1u[0].3g}if(C.1U=="1l"||C.1U=="3o"){k.1U=[0-k.1i.1B.1b,0-k.1i.1B.1c,B(C.1U=="1l"?1l:3o).1f()-k.1i.1B.1b-k.2y.1f-k.3N.1b-(1m(k.1d.1e("8E"),10)||0),(B(C.1U=="1l"?1l:3o).1g()||1l.1Y.3g.5B)-k.1i.1B.1c-k.2y.1g-k.3N.1c-(1m(k.1d.1e("7Z"),10)||0)]}if(!(/^(1l|3o|1B)$/).1P(C.1U)){p D=B(C.1U)[0];p J=B(C.1U).1i();p H=(B(D).1e("2W")!="3h");k.1U=[J.1b+(1m(B(D).1e("79"),10)||0)-k.1i.1B.1b,J.1c+(1m(B(D).1e("6Z"),10)||0)-k.1i.1B.1c,J.1b+(H?1k.1H(D.9c,D.4D):D.4D)-(1m(B(D).1e("79"),10)||0)-k.1i.1B.1b-k.2y.1f-k.3N.1b-(1m(k.21.1e("8E"),10)||0),J.1c+(H?1k.1H(D.5B,D.3D):D.3D)-(1m(B(D).1e("6Z"),10)||0)-k.1i.1B.1c-k.2y.1g-k.3N.1c-(1m(k.21.1e("7Z"),10)||0)]}}if(!K){1S(p F=k.2N.1t-1;F>=0;F--){k.2N[F].24("9X",G,k)}}if(B.1a.3b){B.1a.3b.3R=k}if(B.1a.3b&&!C.cp){B.1a.3b.bB(k,G)}k.aj=1q;k.6N(G);19 1q},5p:u(D,E){if(!E){E=k.1p}p C=D=="2H"?1:-1;19{1c:(E.1c+k.1i.1B.1c*C-(k.3k[0]==1l.1Y?0:k.3k[0].2p)*C+k.3N.1c*C),1b:(E.1b+k.1i.1B.1b*C-(k.3k[0]==1l.1Y?0:k.3k[0].2B)*C+k.3N.1b*C)}},8X:u(F){p G=k.v;p C={1c:(F.3f-k.1i.2o.1c-k.1i.1B.1c+(k.3k[0]==1l.1Y?0:k.3k[0].2p)),1b:(F.3z-k.1i.2o.1b-k.1i.1B.1b+(k.3k[0]==1l.1Y?0:k.3k[0].2B))};if(!k.3t){19 C}if(k.1U){if(C.1b<k.1U[0]){C.1b=k.1U[0]}if(C.1c<k.1U[1]){C.1c=k.1U[1]}if(C.1b>k.1U[2]){C.1b=k.1U[2]}if(C.1c>k.1U[3]){C.1c=k.1U[3]}}if(G.3r){p E=k.3t.1c+1k.2T((C.1c-k.3t.1c)/G.3r[1])*G.3r[1];C.1c=k.1U?(!(E<k.1U[1]||E>k.1U[3])?E:(!(E<k.1U[1])?E-G.3r[1]:E+G.3r[1])):E;p D=k.3t.1b+1k.2T((C.1b-k.3t.1b)/G.3r[0])*G.3r[0];C.1b=k.1U?(!(D<k.1U[0]||D>k.1U[2])?D:(!(D<k.1U[0])?D-G.3r[0]:D+G.3r[0])):D}19 C},6N:u(D){k.1p=k.8X(D);k.49=k.5p("2H");B.1a.2Y.1O(k,"76",[D,k.1a()]);k.49=k.5p("2H");k.1u[0].2Q.1b=k.1p.1b+"px";k.1u[0].2Q.1c=k.1p.1c+"px";1S(p C=k.2b.1t-1;C>=0;C--){p E=k.j3(k.2b[C]);if(!E){5Y}if(k.2b[C].2V[0]!=k.21[0]&&k.3I[E==1?"4K":"6e"]()[0]!=k.2b[C].2V[0]&&!A(k.3I[0],k.2b[C].2V[0])&&(k.v.4h=="lX-lW"?!A(k.1d[0],k.2b[C].2V[0]):1q)){k.dA=k.8X(D);k.7P=E==1?"5c":"4U";k.v.cA.1O(k,D,k.2b[C]);k.24("5z",D);1R}}k.j1(D);if(B.1a.3b){B.1a.3b.51(k,D)}k.1d.3x("76",[D,k.1a()],k.v.76);19 1h},ki:u(H,G,D,F){D?D[0].cw(k.3I[0]):G.2V[0].3g.bo(k.3I[0],(k.7P=="5c"?G.2V[0]:G.2V[0].j9));k.3v=k.3v?++k.3v:1;p E=k,C=k.3v;3o.5E(u(){if(C==E.3v){E.bC(!F)}},0)},7I:u(E,D){if(B.1a.3b&&!k.v.cp){B.1a.3b.7K(k,E)}if(k.v.6U){p C=k;p F=C.3I.1i();B(k.1u).26({1b:F.1b-k.1i.1B.1b-C.3N.1b+(k.3k[0]==1l.1Y?0:k.3k[0].2B),1c:F.1c-k.1i.1B.1c-C.3N.1c+(k.3k[0]==1l.1Y?0:k.3k[0].2p)},1m(k.v.6U,10)||aX,u(){C.an(E)})}1j{k.an(E,D)}19 1h},an:u(E,D){if(!k.kG){k.3I.da(k.21)}k.kG=1n;if(k.v.1u=="82"){k.21.1e(k.kz).1G("1a-3a-1u")}1j{k.21.1N()}if(k.eW.6e!=k.21.6e().8F(".1a-3a-1u")[0]||k.eW.1B!=k.21.1B()[0]){k.24("bU",E,1n,D)}if(!A(k.1d[0],k.21[0])){k.24("2m",E,1n,D);1S(p C=k.2N.1t-1;C>=0;C--){if(A(k.2N[C].1d[0],k.21[0])){k.2N[C].24("bU",E,k,D);k.2N[C].24("kP",E,k,D)}}}1S(p C=k.2N.1t-1;C>=0;C--){k.2N[C].24("bS",E,k,D);if(k.2N[C].5L.4z){k.2N[C].24("ba",E,k);k.2N[C].5L.4z=0}}k.aj=1h;if(k.ar){k.24("bf",E,1n,D);k.24("3d",E,1n,D);19 1h}k.24("bf",E,1n,D);k.3I.2m();if(k.v.1u!="82"){k.1u.2m()}k.1u=1n;k.24("3d",E,1n,D);19 1q}}));B.23(B.1a.3a,{b6:"k8 k7",4k:{1u:"82",5W:"ex",3G:1,6A:0,4v:1q,4y:20,4A:20,7r:":1z",2b:"> *",2U:b7,kh:1q,31:"1B",cA:B.1a.3a.5k.ki,71:"4Y",ks:1h}});B.1a.2Y.2l("3a","2Z",{2A:u(E,D){p C=B("1Y");if(C.1e("2Z")){D.v.av=C.1e("2Z")}C.1e("2Z",D.v.2Z)},bf:u(D,C){if(C.v.av){B("1Y").1e("2Z",C.v.av)}}});B.1a.2Y.2l("3a","2U",{2A:u(E,D){p C=D.1u;if(C.1e("2U")){D.v.ay=C.1e("2U")}C.1e("2U",D.v.2U)},bf:u(D,C){if(C.v.ay){B(C.1u).1e("2U",C.v.ay)}}});B.1a.2Y.2l("3a","1Z",{2A:u(E,D){p C=D.1u;if(C.1e("1Z")){D.v.ax=C.1e("1Z")}C.1e("1Z",D.v.1Z)},bf:u(D,C){if(C.v.ax){B(C.1u).1e("1Z",C.v.ax)}}});B.1a.2Y.2l("3a","4v",{2A:u(E,D){p F=D.v;p C=B(k).1w("3a");C.4f=u(G){do{if(/4c|4v/.1P(G.1e("2W"))||(/4c|4v/).1P(G.1e("2W-y"))){19 G}G=G.1B()}4V(G[0].3g);19 B(1l)}(C.21);C.41=u(G){do{if(/4c|4v/.1P(G.1e("2W"))||(/4c|4v/).1P(G.1e("2W-x"))){19 G}G=G.1B()}4V(G[0].3g);19 B(1l)}(C.21);if(C.4f[0]!=1l&&C.4f[0].52!="86"){C.aw=C.4f.1i()}if(C.41[0]!=1l&&C.41[0].52!="86"){C.9W=C.41.1i()}},76:u(E,D){p F=D.v;p C=B(k).1w("3a");if(C.4f[0]!=1l&&C.4f[0].52!="86"){if((C.aw.1c+C.4f[0].3D)-E.3f<F.4y){C.4f[0].2p=C.4f[0].2p+F.4A}if(E.3f-C.aw.1c<F.4y){C.4f[0].2p=C.4f[0].2p-F.4A}}1j{if(E.3f-B(1l).2p()<F.4y){B(1l).2p(B(1l).2p()-F.4A)}if(B(3o).1g()-(E.3f-B(1l).2p())<F.4y){B(1l).2p(B(1l).2p()+F.4A)}}if(C.41[0]!=1l&&C.41[0].52!="86"){if((C.9W.1b+C.41[0].4D)-E.3z<F.4y){C.41[0].2B=C.41[0].2B+F.4A}if(E.3z-C.9W.1b<F.4y){C.41[0].2B=C.41[0].2B-F.4A}}1j{if(E.3z-B(1l).2B()<F.4y){B(1l).2B(B(1l).2B()-F.4A)}if(B(3o).1f()-(E.3z-B(1l).2B())<F.4y){B(1l).2B(B(1l).2B()+F.4A)}}}});B.1a.2Y.2l("3a","2P",{76:u(E,D){p C=B(k).1w("3a");if(D.v.2P=="y"){C.1p.1b=C.3t.1b}if(D.v.2P=="x"){C.1p.1c=C.3t.1c}}})})(1L);(u(E){E.3T("1a.4M",{57:u(){p G=k.v;if(G.mo){p J=k.1d.2O("a").3H(G.k4);if(J.1t){if(J.3H(G.9t).1t){G.4d=J}1j{G.4d=J.1B().1B().6e();J.1x("3R")}}}G.5D=k.1d.2O(G.9t);G.4d=C(G.5D,G.4d);if(E.2j.44){k.1d.2O("a").1e("kk","1")}if(!k.1d.4n("1a-4M")){k.1d.1x("1a-4M");E(\'<3q 2e="1a-4M-1b"/>\').bo(G.5D);E(\'<3q 2e="1a-4M-3O"/>\').31(G.5D);G.5D.1x("1a-4M-9t").2S("mc","0")}p I;if(G.iu){I=k.1d.1B().1g();G.5D.1E(u(){I-=E(k).3p()});p H=0;G.5D.4K().1E(u(){H=1k.1H(H,E(k).7v()-E(k).1g())}).1g(I-H)}1j{if(G.8c){I=0;G.5D.4K().1E(u(){I=1k.1H(I,E(k).3p())}).1g(I)}}G.5D.8F(G.4d||"").4K().1Q();G.4d.1B().87().1x(G.4e);if(G.4H){k.1d.1M((G.4H)+".4M",F)}},9X:u(G){F.1O(k.1d[0],{1s:C(k.v.5D,G)[0]})},3s:u(){k.v.5D.4K().1e("4E","");if(k.v.iu||k.v.8c){k.v.5D.4K().1e("1g","")}E.4r(k.1d[0],"4M");k.1d.1G("1a-4M").2G(".4M")}});u B(H,G){19 u(){19 H.1K(G,1T)}}u D(I){if(!E.1w(k,"4M")){19}p G=E.1w(k,"4M");p H=G.v;H.9Y=I?0:--H.9Y;if(H.9Y){19}if(H.lc){H.7o.2l(H.9l).1e({1g:"",2W:""})}G.4i("5z",1n,H.1w)}u A(G,K,L,J,M){p I=E.1w(k,"4M").v;I.7o=G;I.9l=K;I.1w=L;p H=B(D,k);E.1w(k,"4M").4i("le",1n,I.1w);I.9Y=K.1D()===0?G.1D():K.1D();if(I.cL){if(!I.9o&&J){E.1a.4M.eN[I.cL]({7o:1L([]),9l:K,6K:H,5c:M,8c:I.8c})}1j{E.1a.4M.eN[I.cL]({7o:G,9l:K,6K:H,5c:M,8c:I.8c})}}1j{if(!I.9o&&J){G.6o()}1j{K.1Q();G.1N()}H(1q)}}u F(L){p J=E.1w(k,"4M").v;if(J.1I){19 1h}if(!L.1s&&!J.9o){J.4d.1B().87().d5(J.4e);p I=J.4d.4K(),M={v:J,kp:1L([]),kq:J.4d,kw:1L([]),kt:I},G=(J.4d=E([]));A.1O(k,G,I,M);19 1h}p K=E(L.1s);K=E(K.5F(J.9t)[0]||K);p H=K[0]==J.4d[0];if(J.9Y||(J.9o&&H)){19 1h}if(!K.is(J.9t)){19}J.4d.1B().87().d5(J.4e);if(!H){K.1B().87().1x(J.4e)}p G=K.4K(),I=J.4d.4K(),M={v:J,kp:H&&!J.9o?E([]):K,kq:J.4d,kw:H&&!J.9o?E([]):G,kt:I},N=J.5D.3J(J.4d[0])>J.5D.3J(K[0]);J.4d=H?E([]):K;A.1O(k,G,I,M,H,N);19 1h}u C(H,G){19 G?2E G=="8A"?H.3H(":eq("+G+")"):H.8F(H.8F(G)):G===1h?E([]):H.3H(":eq(0)")}E.23(E.1a.4M,{4k:{4e:"2a",9o:1q,cL:"7L",4H:"2o",9t:"a",8c:1q,9Y:0,k4:u(){19 k.4G.4T()==cH.4G.4T()}},eN:{7L:u(G,I){G=E.23({2g:"bA",1W:bP},G,I);if(!G.9l.1D()){G.7o.26({1g:"1N"},G);19}p H=G.9l.1g(),J=G.7o.1g(),K=J/H;G.7o.1e({1g:0,2W:"3h"}).1N();G.9l.3H(":3h").1E(G.6K).3l().3H(":4j").26({1g:"1Q"},{dv:u(L){p M=(H-L)*K;if(E.2j.44||E.2j.63){M=1k.jy(M)}G.7o.1g(M)},1W:G.1W,2g:G.2g,6K:u(){if(!G.8c){G.7o.1e("1g","4c")}G.6K()}})},lj:u(G){k.7L(G,{2g:G.5c?"lx":"bA",1W:G.5c?b7:be})},ld:u(G){k.7L(G,{2g:"l3",1W:l2})}}})})(1L);(u(A){A.3T("1a.4q",{57:u(){A.23(k.v,{6A:k.v.7W?A.64.4k.6A:10,1H:!k.v.4v?10:3B,bJ:k.v.bJ||u(B){19 B},cd:k.v.cd||k.v.fD});22 A.64(k.1d[0],k.v)},6E:u(B){19 k.1d.1M("6E",B)},cJ:u(B){19 k.1d.5y("cJ",[B])},eH:u(){19 k.1d.5y("eH")},ck:u(B,C){19 k.1d.5y("kQ",[{6H:C}])},3s:u(){19 k.1d.5y("kI")}});A.64=u(L,G){p C={b3:38,b2:40,hg:46,b1:9,kC:13,kA:27,eE:kc,kx:33,kR:34,dx:8};p B=A(L).2S("4q","fc").1x(G.h8);if(G.6E){B.1M("6E.4q",G.6E)}p J;p P="";p M=A.64.i8(G);p E=0;p U;p X={c2:1h};p R=A.64.cm(G,L,D,X);p W;A.2j.63&&A(L.gH).1M("8V.4q",u(){if(W){W=1h;19 1h}});B.1M((A.2j.63?"ao":"5Z")+".4q",u(Y){U=Y.2w;6d(Y.2w){1J C.b3:Y.6X();if(R.4j()){R.6e()}1j{T(0,1q)}1R;1J C.b2:Y.6X();if(R.4j()){R.4K()}1j{T(0,1q)}1R;1J C.kx:Y.6X();if(R.4j()){R.hR()}1j{T(0,1q)}1R;1J C.kR:Y.6X();if(R.4j()){R.ic()}1j{T(0,1q)}1R;1J G.bn&&A.ad(G.8B)==","&&C.eE:1J C.b1:1J C.kC:if(D()){Y.6X();W=1q;19 1h}1R;1J C.kA:R.1Q();1R;4Y:eM(J);J=5E(T,G.6A);1R}}).3e(u(){E++}).7u(u(){E=0;if(!X.c2){S()}}).2o(u(){if(E++>1&&!R.4j()){T(0,1q)}}).1M("cJ",u(){p Y=(1T.1t>1)?1T[1]:1n;u Z(d,c){p a;if(c&&c.1t){1S(p b=0;b<c.1t;b++){if(c[b].6E.4T()==d.4T()){a=c[b];1R}}}if(2E Y=="u"){Y(a)}1j{B.5y("6E",a&&[a.1w,a.1X])}}A.1E(H(B.2v()),u(a,b){F(b,Z,Z)})}).1M("eH",u(){M.hM()}).1M("kQ",u(){A.23(G,1T[1]);if("1w"in 1T[1]){M.hG()}}).1M("kI",u(){R.2G();B.2G();A(L.gH).2G(".4q")});u D(){p Z=R.2a();if(!Z){19 1h}p Y=Z.6E;P=Y;if(G.bn){p a=H(B.2v());if(a.1t>1){Y=a.7Q(0,a.1t-1).6M(G.8B)+G.8B+Y}Y+=G.8B}B.2v(Y);V();B.5y("6E",[Z.1w,Z.1X]);19 1q}u T(a,Z){if(U==C.hg){R.1Q();19}p Y=B.2v();if(!Z&&Y==P){19}P=Y;Y=I(Y);if(Y.1t>=G.gk){B.1x(G.8e);if(!G.cf){Y=Y.4T()}F(Y,K,V)}1j{N();R.1Q()}}u H(Z){if(!Z){19[""]}p a=Z.74(G.8B);p Y=[];A.1E(a,u(b,c){if(A.ad(c)){Y[b]=A.ad(c)}});19 Y}u I(Y){if(!G.bn){19 Y}p Z=H(Y);19 Z[Z.1t-1]}u Q(Y,Z){if(G.gJ&&(I(B.2v()).4T()==Y.4T())&&U!=C.dx){B.2v(B.2v()+Z.fV(I(P).1t));A.64.g1(L,P.1t,P.1t+Z.1t)}}u S(){eM(J);J=5E(V,be)}u V(){p Y=R.4j();R.1Q();eM(J);N();if(G.gy){B.4q("cJ",u(Z){if(!Z){if(G.bn){p a=H(B.2v()).7Q(0,-1);B.2v(a.6M(G.8B)+(a.1t?G.8B:""))}1j{B.2v("")}}})}if(Y){A.64.g1(L,L.1X.1t,L.1X.1t)}}u K(Z,Y){if(Y&&Y.1t&&E){N();R.4E(Y,Z);Q(Z,Y[0].1X);R.1N()}1j{V()}}u F(b,d,a){if(!G.cf){b=b.4T()}p c=M.5r(b);if(c&&c.1t){d(b,c)}1j{if((2E G.7W=="4w")&&(G.7W.1t>0)){p f={lf:+22 2k()};A.1E(G.gK,u(g,h){f[g]=2E h=="u"?h():h});A.gS({3j:"gU",l9:"4q"+L.4s,hc:G.hc,7W:G.7W,1w:A.23({q:I(b),my:G.1H},f),cB:u(h){p g=G.cF&&G.cF(h)||O(h);M.2l(b,g);d(b,g)}})}1j{if(G.es&&2E G.es=="u"){p Z=G.es(b);p Y=(G.cF)?G.cF(Z):Z;M.2l(b,Y);d(b,Y)}1j{R.hW();a(b)}}}}u O(b){p Y=[];p a=b.74("\\n");1S(p Z=0;Z<a.1t;Z++){p c=A.ad(a[Z]);if(c){c=c.74("|");Y[Y.1t]={1w:c,1X:c[0],6E:G.c9&&G.c9(c,c[0])||c[0]}}}19 Y}u N(){B.1G(G.8e)}};A.64.4k={h8:"1a-4q-1z",hJ:"1a-4q-mp",8e:"1a-4q-gE",gk:1,6A:ms,cf:1h,hD:1q,gd:1h,bx:10,1H:2c,gy:1h,gK:{},fp:1q,fD:u(B){19 B[0]},cd:1n,gJ:1h,1f:0,bn:1h,8B:", ",bJ:u(C,B){19 C.5m(22 m5("(?![^&;]+;)(?!<[^<>]*)("+B.5m(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/gi,"\\\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<gF>$1</gF>")},4v:1q,5B:fJ};A.23(A.1a.4q,{4k:A.64.4k});A.64.i8=u(C){p F={};p D=0;u H(K,J){if(!C.cf){K=K.4T()}p I=K.4O(J);if(I==-1){19 1h}19 I==0||C.gd}u G(J,I){if(D>C.bx){B()}if(!F[J]){D++}F[J]=I}u E(){if(!C.1w){19 1h}p J={},I=0;if(!C.7W){C.bx=1}J[""]=[];1S(p L=0,K=C.1w.1t;L<K;L++){p O=C.1w[L];O=(2E O=="4w")?[O]:O;p N=C.cd(O,L+1,C.1w.1t);if(N===1h){5Y}p M=N.4l(0).4T();if(!J[M]){J[M]=[]}p P={1X:N,1w:O,6E:C.c9&&C.c9(O)||N};J[M].4o(P);if(I++<C.1H){J[""].4o(P)}}A.1E(J,u(Q,R){C.bx++;G(Q,R)})}5E(E,25);u B(){F={};D=0}19{hM:B,2l:G,hG:E,5r:u(L){if(!C.bx||!D){19 1n}if(!C.7W&&C.gd){p K=[];1S(p I in F){if(I.1t>0){p M=F[I];A.1E(M,u(O,N){if(H(N.1X,L)){K.4o(N)}})}}19 K}1j{if(F[L]){19 F[L]}1j{if(C.hD){1S(p J=L.1t-1;J>=C.gk;J--){p M=F[L.hZ(0,J)];if(M){p K=[];A.1E(M,u(O,N){if(H(N.1X,L)){K[K.1t]=N}});19 K}}}}}19 1n}}};A.64.cm=u(E,J,L,P){p I={6P:"1a-4q-4z"};p K,F=-1,R,M="",S=1q,C,O;u N(){if(!S){19}C=A("<1v/>").1Q().1x(E.hJ).1e("1p","2H").31(1l.1Y);O=A("<h1/>").31(C).hL(u(T){if(Q(T).3n&&Q(T).3n.mu()=="hv"){F=A("li",O).1G(I.6P).3J(Q(T));A(Q(T)).1x(I.6P)}}).2o(u(T){A(Q(T)).1x(I.6P);L();J.3e();19 1h}).5d(u(){P.c2=1q}).5V(u(){P.c2=1h});if(E.1f>0){C.1e("1f",E.1f)}S=1h}u Q(U){p T=U.1s;4V(T&&T.52!="hv"){T=T.3g}if(!T){19[]}19 T}u H(T){K.7Q(F,F+1).1G(I.6P);G(T);p V=K.7Q(F,F+1).1x(I.6P);if(E.4v){p U=0;K.7Q(0,F).1E(u(){U+=k.3D});if((U+V[0].3D-O.2p())>O[0].9H){O.2p(U+V[0].3D-O.7v())}1j{if(U<O.2p()){O.2p(U)}}}}u G(T){F+=T;if(F<0){F=K.1D()-1}1j{if(F>=K.1D()){F=0}}}u B(T){19 E.1H&&E.1H<T?E.1H:T}u D(){O.bN();p U=B(R.1t);1S(p V=0;V<U;V++){if(!R[V]){5Y}p W=E.fD(R[V].1w,V+1,U,R[V].1X,M);if(W===1h){5Y}p T=A("<li/>").2z(E.bJ(W,M)).1x(V%2==0?"1a-4q-ml":"1a-4q-mk").31(O)[0];A.1w(T,"1a-4q-1w",R[V])}K=O.2O("li");if(E.fp){K.7Q(0,1).1x(I.6P);F=0}if(A.fn.7O){O.7O()}}19{4E:u(U,T){N();R=U;M=T;D()},4K:u(){H(1)},6e:u(){H(-1)},hR:u(){if(F!=0&&F-8<0){H(-F)}1j{H(-8)}},ic:u(){if(F!=K.1D()-1&&F+8>K.1D()){H(K.1D()-1-F)}1j{H(8)}},1Q:u(){C&&C.1Q();K&&K.1G(I.6P);F=-1;A(J).3x("mA",[{},{v:E}],E.1Q)},4j:u(){19 C&&C.is(":4j")},3R:u(){19 k.4j()&&(K.3H("."+I.6P)[0]||E.fp&&K[0])},1N:u(){p V=A(J).1i();C.1e({1f:2E E.1f=="4w"||E.1f>0?E.1f:A(J).1f(),1c:V.1c+J.3D,1b:V.1b}).1N();if(E.4v){O.2p(0);O.1e({7c:E.5B,2W:"4c"});if(A.2j.44&&2E 1l.1Y.2Q.7c==="2i"){p T=0;K.1E(u(){T+=k.3D});p U=T>E.5B;O.1e("1g",U?E.5B:T);if(!U){K.1f(O.1f()-1m(K.1e("bt-1b"))-1m(K.1e("bt-3O")))}}}A(J).3x("l1",[{},{v:E}],E.1N)},2a:u(){p T=K&&K.3H("."+I.6P).1G(I.6P);19 T&&T.1t&&A.1w(T[0],"1a-4q-1w")},hW:u(){O&&O.bN()},2G:u(){C&&C.2m()}}};A.64.g1=u(D,E,C){if(D.hV){p B=D.hV();B.lA(1q);B.lz("gM",E);B.lr("gM",C);B.5b()}1j{if(D.gz){D.gz(E,C)}1j{if(D.hd){D.hd=E;D.ln=C}}}D.3e()}})(1L);(u(A){A.3T("1a.2f",{57:u(){k.gf=65;p D=k.v,B=k,C=\'<1v 2e="1a-2f lo"><1v 2e="1a-2f-2h"><1v><1v></1v></1v></1v><1v 2e="1a-2f-a5"><1v></1v></1v><1v 2e="1a-2f-22-2h"></1v><1v 2e="1a-2f-3R-2h"></1v><1v 2e="1a-2f-7f"><3w 1S="1a-2f-7f" 4J="7f"></3w><1z 4h="4C" 8P="6" 1D="6" /></1v><1v 2e="1a-2f-5o-r 1a-2f-7g"><3w 1S="1a-2f-5o-r"></3w><1z 4h="4C" 8P="3" 1D="2" /><3q></3q></1v><1v 2e="1a-2f-5o-g 1a-2f-7g"><3w 1S="1a-2f-5o-g"></3w><1z 4h="4C" 8P="3" 1D="2" /><3q></3q></1v><1v 2e="1a-2f-5o-b 1a-2f-7g"><3w 1S="1a-2f-5o-b"</3w><1z 4h="4C" 8P="3" 1D="2" /><3q></3q></1v><1v 2e="1a-2f-5A-h 1a-2f-7g"><3w 1S="1a-2f-5A-h"></3w><1z 4h="4C" 8P="3" 1D="2" /><3q></3q></1v><1v 2e="1a-2f-5A-s 1a-2f-7g"><3w 1S="1a-2f-5A-s"></3w><1z 4h="4C" 8P="3" 1D="2" /><3q></3q></1v><1v 2e="1a-2f-5A-b 1a-2f-7g"><3w 1S="1a-2f-5A-b"></3w><1z 4h="4C" 8P="3" 1D="2" /><3q></3q></1v><43 2e="1a-2f-8V 1a-4Y-ia" 4s="8V" 4h="43">mf</43></1v>\';if(2E D.2h=="4w"){k.2h=k.cc(D.2h)}1j{if(D.2h.r!=2i&&D.2h.g!=2i&&D.2h.b!=2i){k.2h=k.bE(D.2h)}1j{if(D.2h.h!=2i&&D.2h.s!=2i&&D.2h.b!=2i){k.2h=k.c7(D.2h)}1j{19 k}}}k.fw=k.2h;k.3Z=A(C);if(D.fH){k.3Z.31(k.1d).1N()}1j{k.3Z.31(1l.1Y)}k.56=k.3Z.2O("1z").1M("5Z",u(E){19 B.hb.1O(B,E)}).1M("5z",u(E){19 B.4I.1O(B,E)}).1M("7u",u(E){19 B.c4.1O(B,E)}).1M("3e",u(E){19 B.7s.1O(B,E)});k.3Z.2O("3q").1M("5d",u(E){19 B.h4.1O(B,E)});k.gv=k.3Z.2O("1v.1a-2f-2h").1M("5d",u(E){19 B.ha.1O(B,E)});k.gP=k.gv.2O("1v 1v");k.a5=k.3Z.2O("1v.1a-2f-a5 1v");k.3Z.2O("1v.1a-2f-a5").1M("5d",u(E){19 B.hf.1O(B,E)});k.h7=k.3Z.2O("1v.1a-2f-22-2h");k.gQ=k.3Z.2O("1v.1a-2f-3R-2h");k.3Z.2O(".1a-2f-8V").1M("nD",u(E){19 B.gB.1O(B,E)}).1M("qG",u(E){19 B.gI.1O(B,E)}).1M("2o",u(E){19 B.gD.1O(B,E)});k.a7(k.2h);k.a8(k.2h);k.ac(k.2h);k.bD(k.2h);k.bR(k.2h);k.c8(k.2h);k.bQ(k.2h);if(D.fH){k.3Z.1e({1p:"2C",4E:"7l"})}1j{A(k.1d).1M(D.ig+".2f",u(E){19 B.cV.1O(B,E)})}},3s:u(){k.3Z.2m();k.1d.4r("2f").2G(".2f")},a7:u(B){p C=k.8b(B);k.56.eq(1).2v(C.r).3l().eq(2).2v(C.g).3l().eq(3).2v(C.b).3l()},a8:u(B){k.56.eq(4).2v(B.h).3l().eq(5).2v(B.s).3l().eq(6).2v(B.b).3l()},ac:u(B){k.56.eq(0).2v(k.7e(B)).3l()},bR:u(B){k.gv.1e("7a","#"+k.7e({h:B.h,s:2c,b:2c}));k.gP.1e({1b:1m(3B*B.s/2c,10),1c:1m(3B*(2c-B.b)/2c,10)})},bD:u(B){k.a5.1e("1c",1m(3B-3B*B.h/8U,10))},c8:u(B){k.gQ.1e("7a","#"+k.7e(B))},bQ:u(B){k.h7.1e("7a","#"+k.7e(B))},hb:u(B){p C=B.dE||B.2w||-1;if((C>=k.gf&&C<=90)||C==32){19 1h}},4I:u(D,C){p B;C=C||D.1s;if(C.3g.6x.4O("-7f")>0){k.2h=B=k.cc(k.1X);k.a7(B.2h);k.a8(B)}1j{if(C.3g.6x.4O("-5A")>0){k.2h=B=k.c7({h:1m(k.56.eq(4).2v(),10),s:1m(k.56.eq(5).2v(),10),b:1m(k.56.eq(6).2v(),10)});k.a7(B);k.ac(B)}1j{k.2h=B=k.bE(k.hX({r:1m(k.56.eq(1).2v(),10),g:1m(k.56.eq(2).2v(),10),b:1m(k.56.eq(3).2v(),10)}));k.ac(B);k.a8(B)}}k.bR(B);k.bD(B);k.bQ(B);k.4i("5z",D,{v:k.v,5A:B,7f:k.7e(B),5o:k.8b(B)})},c4:u(C){p B=k.2h;k.a7(B);k.a8(B);k.ac(B);k.bD(B);k.bR(B);k.bQ(B);k.56.1B().1G("1a-2f-3e")},7s:u(B){k.gf=B.1s.3g.6x.4O("-7f")>0?70:65;k.56.1B().1G("1a-2f-3e");A(B.1s.3g).1x("1a-2f-3e")},h4:u(D){p C=A(D.1s).1B().2O("1z").3e(),B=k;k.8w={el:A(D.1s).1B().1x("1a-2f-58"),1H:D.1s.3g.6x.4O("-5A-h")>0?8U:(D.1s.3g.6x.4O("-5A")>0?2c:2s),y:D.3f,7g:C,2v:1m(C.2v(),10)};A(1l).1M("5V.6i",u(E){19 B.h5.1O(B,E)});A(1l).1M("6Y.6i",u(E){19 B.gZ.1O(B,E)});19 1h},gZ:u(B){k.8w.7g.2v(1k.1H(0,1k.1V(k.8w.1H,1m(k.8w.2v+B.3f-k.8w.y,10))));k.4I.1K(k,[B,k.8w.7g.4u(0)]);19 1h},h5:u(B){k.8w.el.1G("1a-2f-58").2O("1z").3e();k.4I.1K(k,[B,k.8w.7g.4u(0)]);A(1l).2G("5V.6i");A(1l).2G("6Y.6i");19 1h},hf:u(C){k.fu={y:k.3Z.2O("1v.1a-2f-a5").1i().1c};k.4I.1K(k,[C,k.56.eq(4).2v(1m(8U*(3B-1k.1H(0,1k.1V(3B,(C.3f-k.fu.y))))/3B,10)).4u(0)]);p B=k;A(1l).1M("5V.6i",u(D){19 B.h9.1O(B,D)});A(1l).1M("6Y.6i",u(D){19 B.hh.1O(B,D)});19 1h},hh:u(B){k.4I.1K(k,[B,k.56.eq(4).2v(1m(8U*(3B-1k.1H(0,1k.1V(3B,(B.3f-k.fu.y))))/3B,10)).4u(0)]);19 1h},h9:u(B){A(1l).2G("5V.6i");A(1l).2G("6Y.6i");19 1h},ha:u(C){p B=k;k.bH={2M:k.3Z.2O("1v.1a-2f-2h").1i()};k.4I.1K(k,[C,k.56.eq(6).2v(1m(2c*(3B-1k.1H(0,1k.1V(3B,(C.3f-k.bH.2M.1c))))/3B,10)).3l().eq(5).2v(1m(2c*(1k.1H(0,1k.1V(3B,(C.3z-k.bH.2M.1b))))/3B,10)).4u(0)]);A(1l).1M("5V.6i",u(D){19 B.gL.1O(B,D)});A(1l).1M("6Y.6i",u(D){19 B.gx.1O(B,D)});19 1h},gx:u(B){k.4I.1K(k,[B,k.56.eq(6).2v(1m(2c*(3B-1k.1H(0,1k.1V(3B,(B.3f-k.bH.2M.1c))))/3B,10)).3l().eq(5).2v(1m(2c*(1k.1H(0,1k.1V(3B,(B.3z-k.bH.2M.1b))))/3B,10)).4u(0)]);19 1h},gL:u(B){A(1l).2G("5V.6i");A(1l).2G("6Y.6i");19 1h},gB:u(B){k.3Z.2O(".1a-2f-8V").1x("1a-2f-3e")},gI:u(B){k.3Z.2O(".1a-2f-8V").1G("1a-2f-3e")},gD:u(C){p B=k.2h;k.fw=B;k.c8(B);k.4i("8V",C,{v:k.v,5A:B,7f:k.7e(B),5o:k.8b(B)});19 1h},cV:u(F){k.4i("9I",F,{v:k.v,5A:k.2h,7f:k.7e(k.2h),5o:k.8b(k.2h)});p G=k.1d.1i();p E=k.i3();p D=G.1c+k.1d[0].3D;p C=G.1b;if(D+gR>E.t+1k.1V(E.h,E.ih)){D-=k.1d[0].3D+gR}if(C+it>E.l+1k.1V(E.w,E.iw)){C-=it}k.3Z.1e({1b:C+"px",1c:D+"px"});if(k.4i("1N",F,{v:k.v,5A:k.2h,7f:k.7e(k.2h),5o:k.8b(k.2h)})!=1h){k.3Z.1N()}p B=k;A(1l).1M("5d.2f",u(H){19 B.dh.1O(B,H)});19 1h},dh:u(B){if(!k.i2(k.3Z[0],B.1s,k.3Z[0])){if(k.4i("1Q",B,{v:k.v,5A:k.2h,7f:k.7e(k.2h),5o:k.8b(k.2h)})!=1h){k.3Z.1Q()}A(1l).2G("5d.2f")}},i2:u(D,C,B){if(D==C){19 1q}if(D.c1&&!A.2j.bL){19 D.c1(C)}if(D.c0){19!!(D.c0(C)&16)}p E=C.3g;4V(E&&E!=B){if(E==D){19 1q}E=E.3g}19 1h},i3:u(){p E,C,B,F,D,G;if(1l.3P){E=1l.3P.2p;C=1l.3P.2B;B=1l.3P.9c;F=1l.3P.5B}1j{E=1l.1Y.2p;C=1l.1Y.2B;B=1l.1Y.9c;F=1l.1Y.5B}D=hT.9m||1l.3P.bK||1l.1Y.bK||0;G=hT.7v||1l.3P.9H||1l.1Y.9H||0;19{t:E,l:C,w:B,h:F,iw:D,ih:G}},c7:u(B){19{h:1k.1V(8U,1k.1H(0,B.h)),s:1k.1V(2c,1k.1H(0,B.s)),b:1k.1V(2c,1k.1H(0,B.b))}},hX:u(B){19{r:1k.1V(2s,1k.1H(0,B.r)),g:1k.1V(2s,1k.1H(0,B.g)),b:1k.1V(2s,1k.1H(0,B.b))}},im:u(B){p B=1m(((B.4O("#")>-1)?B.fV(1):B),16);19{r:B>>16,g:(B&qN)>>8,b:(B&2s)}},cc:u(B){19 k.bE(k.im(B))},bE:u(C){p B={};B.b=1k.1H(1k.1H(C.r,C.g),C.b);B.s=(B.b<=0)?0:1k.2T(2c*(B.b-1k.1V(1k.1V(C.r,C.g),C.b))/B.b);B.b=1k.2T((B.b/2s)*2c);if((C.r==C.g)&&(C.g==C.b)){B.h=0}1j{if(C.r>=C.g&&C.g>=C.b){B.h=60*(C.g-C.b)/(C.r-C.b)}1j{if(C.g>=C.r&&C.r>=C.b){B.h=60+60*(C.g-C.r)/(C.g-C.b)}1j{if(C.g>=C.b&&C.b>=C.r){B.h=il+60*(C.b-C.r)/(C.g-C.r)}1j{if(C.b>=C.g&&C.g>=C.r){B.h=fJ+60*(C.b-C.g)/(C.b-C.r)}1j{if(C.b>=C.r&&C.r>=C.g){B.h=dy+60*(C.r-C.g)/(C.b-C.g)}1j{if(C.r>=C.b&&C.b>=C.g){B.h=bP+60*(C.r-C.b)/(C.r-C.g)}1j{B.h=0}}}}}}}B.h=1k.2T(B.h);19 B},8b:u(B){p D={};p H=1k.2T(B.h);p G=1k.2T(B.s*2s/2c);p C=1k.2T(B.b*2s/2c);if(G==0){D.r=D.g=D.b=C}1j{p I=C;p F=(2s-G)*C/2s;p E=(I-F)*(H%60)/60;if(H==8U){H=0}if(H<60){D.r=I;D.b=F;D.g=F+E}1j{if(H<il){D.g=I;D.b=F;D.r=I-E}1j{if(H<fJ){D.g=I;D.r=F;D.b=F+E}1j{if(H<dy){D.b=I;D.r=F;D.g=I-E}1j{if(H<bP){D.b=I;D.g=F;D.r=F+E}1j{if(H<8U){D.r=I;D.g=F;D.b=I-E}1j{D.r=0;D.g=0;D.b=0}}}}}}}19{r:1k.2T(D.r),g:1k.2T(D.g),b:1k.2T(D.b)}},ik:u(B){p C=[B.r.7k(16),B.g.7k(16),B.b.7k(16)];A.1E(C,u(D,E){if(E.1t==1){C[D]="0"+E}});19 C.6M("")},7e:u(B){19 k.ik(k.8b(B))},qz:u(B){if(2E B=="4w"){B=k.cc(B)}1j{if(B.r!=2i&&B.g!=2i&&B.b!=2i){B=k.bE(B)}1j{if(B.h!=2i&&B.s!=2i&&B.b!=2i){B=k.c7(B)}1j{19 k}}}k.2h=B;k.fw=B;k.a7(B);k.a8(B);k.ac(B);k.bD(B);k.bR(B);k.c8(B);k.bQ(B)}});A.23(A.1a.2f,{4k:{ig:"2o",2h:"qV",fH:1h}})})(1L);(u(B){p A={gh:"2A.2x",51:"51.2x",gl:"3d.2x",7c:"7c.1C",7d:"7d.1C",8i:"8i.1C",7h:"7h.1C",eR:"2A.1C",2K:"51.1C",e0:"3d.1C"};B.3T("1a.2n",{57:u(){k.bY=k.1d.2S("4J");k.v.4J=k.v.4J||k.bY;p K=k,L=k.v,F=k.1d.bm("4J").1x("1a-2n-9a").7U("<1v/>").7U("<1v/>"),H=(k.hI=F.1B()).1x("1a-2n-qq").1e({1p:"2C",1f:"2c%",1g:"2c%"}),E=(k.e5=B("<1v/>")).1x("1a-2n-a9").5g(\'<a 4G="#" 2e="1a-2n-a9-6S"><3q>X</3q></a>\').hQ(H),J=L.4J||"&hB;",C=B.1a.2n.hp(k.1d),D=B("<3q/>").1x("1a-2n-4J").2S("id",C).2z(J).hQ(E),I=(k.3S=H.1B()).31(1l.1Y).1Q().1x("1a-2n").1x(L.pE).1x(F.2S("6x")).1G("1a-2n-9a").1e({1p:"2H",1f:L.1f,1g:L.1g,2W:"3h",2U:L.2U}).2S("ht",-1).1e("ie",0).5Z(u(M){(L.e7&&M.2w&&M.2w==B.2w.e8&&K.6S())}).5d(u(){K.ce()}),G=(k.hz=B("<1v/>")).1x("1a-2n-pG").1e({1p:"2H",3X:0}).31(I);k.pL=B(".1a-2n-a9-6S",E).c5(u(){B(k).1x("1a-2n-a9-6S-c5")},u(){B(k).1G("1a-2n-a9-6S-c5")}).5d(u(M){M.iY()}).2o(u(){K.6S();19 1h});E.2O("*").2l(E).1E(u(){B.1a.8Y(k)});(L.2x&&B.fn.2x&&k.dX());(L.1C&&B.fn.1C&&k.dU());k.dZ(L.fj);k.bc=1h;(L.7O&&B.fn.7O&&I.7O());(L.hO&&k.g8())},3s:u(){(k.3i&&k.3i.3s());k.3S.1Q();k.1d.2G(".2n").4r("2n").1G("1a-2n-9a").1Q().31("1Y");k.3S.2m();(k.bY&&k.1d.2S("4J",k.bY))},6S:u(){if(1h===k.4i("pM",1n,{v:k.v})){19}(k.3i&&k.3i.3s());k.3S.1Q(k.v.1Q).2G("ao.1a-2n");k.4i("6S",1n,{v:k.v});B.1a.2n.3i.2K();k.bc=1h},hA:u(){19 k.bc},g8:u(){if(k.bc){19}k.3i=k.v.b4?22 B.1a.2n.3i(k):1n;(k.3S.4K().1t&&k.3S.31("1Y"));k.dS(k.v.1p);k.3S.1N(k.v.1N);(k.v.c6&&k.ca());k.ce(1q);(k.v.b4&&k.3S.1M("ao.1a-2n",u(E){if(E.2w!=B.2w.b1){19}p D=B(":g9",k),F=D.3H(":cz")[0],C=D.3H(":gW")[0];if(E.1s==C&&!E.aa){5E(u(){F.3e()},1)}1j{if(E.1s==F&&E.aa){5E(u(){C.3e()},1)}}}));k.3S.2O(":g9:cz").3e();k.4i("g8",1n,{v:k.v});k.bc=1q},dZ:u(F){p E=k,C=1h,D=k.hz;D.bN().1Q();B.1E(F,u(){19!(C=1q)});if(C){D.1N();B.1E(F,u(G,H){B(\'<43 4h="43"></43>\').4C(G).2o(u(){H.1K(E.1d[0],1T)}).31(D)})}},dX:u(){p C=k,D=k.v;k.3S.2x({7r:".1a-2n-9a",1u:D.pn,29:".1a-2n-a9",2A:u(){C.ce();(D.gh&&D.gh.1K(C.1d[0],1T))},51:u(){(D.51&&D.51.1K(C.1d[0],1T))},3d:u(){(D.gl&&D.gl.1K(C.1d[0],1T));B.1a.2n.3i.2K()}})},dU:u(F){F=(F===2i?k.v.1C:F);p C=k,E=k.v,D=2E F=="4w"?F:"n,e,s,w,4Q,4R,ne,nw";k.3S.1C({7r:".1a-2n-9a",1u:E.qg,8i:E.8i,7c:E.7c,7h:E.7h,7d:E.7d,2A:u(){(E.eR&&E.eR.1K(C.1d[0],1T))},2K:u(){(E.c6&&C.ca.1K(C));(E.2K&&E.2K.1K(C.1d[0],1T))},3Q:D,3d:u(){(E.c6&&C.ca.1K(C));(E.e0&&E.e0.1K(C.1d[0],1T));B.1a.2n.3i.2K()}})},ce:u(E){if((k.v.b4&&!E)||(!k.v.8l&&!k.v.b4)){19 k.4i("3e",1n,{v:k.v})}p D=k.v.2U,C=k.v;B(".1a-2n:4j").1E(u(){D=1k.1H(D,1m(B(k).1e("z-3J"),10)||C.2U)});(k.3i&&k.3i.$el.1e("z-3J",++D));k.3S.1e("z-3J",++D);k.4i("3e",1n,{v:k.v})},dS:u(H){p D=B(3o),E=B(1l),F=E.2p(),C=E.2B(),G=F;if(B.9i(H,["9r","1c","3O","3X","1b"])>=0){H=[H=="3O"||H=="1b"?H:"9r",H=="1c"||H=="3X"?H:"bs"]}if(H.4N!=a2){H=["9r","bs"]}if(H[0].4N==94){C+=H[0]}1j{6d(H[0]){1J"1b":C+=0;1R;1J"3O":C+=D.1f()-k.3S.1f();1R;4Y:1J"9r":C+=(D.1f()-k.3S.1f())/2}}if(H[1].4N==94){F+=H[1]}1j{6d(H[1]){1J"1c":F+=0;1R;1J"3X":F+=D.1g()-k.3S.1g();1R;4Y:1J"bs":F+=(D.1g()-k.3S.1g())/2}}F=1k.1H(F,G);k.3S.1e({1c:F,1b:C})},6f:u(D,E){(A[D]&&k.3S.1w(A[D],E));6d(D){1J"fj":k.dZ(E);1R;1J"2x":(E?k.dX():k.3S.2x("3s"));1R;1J"1g":k.3S.1g(E);1R;1J"1p":k.dS(E);1R;1J"1C":p C=k.3S,F=k.3S.is(":1w(1C)");(F&&!E&&C.1C("3s"));(F&&2E E=="4w"&&C.1C("8L","3Q",E));(F||k.dU(E));1R;1J"4J":B(".1a-2n-4J",k.e5).2z(E||"&hB;");1R;1J"1f":k.3S.1f(E);1R}B.3T.5k.6f.1K(k,1T)},ca:u(){p D=k.hI,G=k.e5,E=k.1d,F=(1m(E.1e("4P-1c"),10)||0)+(1m(E.1e("4P-3X"),10)||0),C=(1m(E.1e("4P-1b"),10)||0)+(1m(E.1e("4P-3O"),10)||0);E.1g(D.1g()-G.3p()-F);E.1f(D.1f()-C)}});B.23(B.1a.2n,{4k:{hO:1q,c6:1q,7O:1h,fj:{},e7:1q,2x:1q,1g:be,7d:2c,7h:3B,b4:1h,3i:{},1p:"9r",1C:1q,8l:1q,1f:bP,2U:b7},b6:"hA",by:0,hp:u(C){19"1a-2n-4J-"+(C.2S("id")||++k.by)},3i:u(C){k.$el=B.1a.2n.3i.hq(C)}});B.23(B.1a.2n.3i,{9b:[],hn:B.7B("3e,5d,5V,5Z,ao,2o".74(","),u(C){19 C+".2n-3i"}).6M(" "),hq:u(D){if(k.9b.1t===0){5E(u(){B("a, :1z").1M(B.1a.2n.3i.hn,u(){p F=1h;p H=B(k).5F(".1a-2n");if(H.1t){p E=B(".1a-2n-3i");if(E.1t){p G=1m(E.1e("z-3J"),10);E.1E(u(){G=1k.1H(G,1m(B(k).1e("z-3J"),10))});F=1m(H.1e("z-3J"),10)>G}1j{F=1q}}19 F})},1);B(1l).1M("5Z.2n-3i",u(E){(D.v.e7&&E.2w&&E.2w==B.2w.e8&&D.6S())});B(3o).1M("2K.2n-3i",B.1a.2n.3i.2K)}p C=B("<1v/>").31(1l.1Y).1x("1a-2n-3i").1e(B.23({qb:0,4P:0,bt:0,1p:"2H",1c:0,1b:0,1f:k.1f(),1g:k.1g()},D.v.3i));(D.v.7O&&B.fn.7O&&C.7O());k.9b.4o(C);19 C},3s:u(C){k.9b.cI(B.9i(k.9b,C),1);if(k.9b.1t===0){B("a, :1z").2l([1l,3o]).2G(".2n-3i")}C.2m()},1g:u(){if(B.2j.44&&B.2j.8p<7){p D=1k.1H(1l.3P.5B,1l.1Y.5B);p C=1k.1H(1l.3P.3D,1l.1Y.3D);if(D<C){19 B(3o).1g()+"px"}1j{19 D+"px"}}1j{if(B.2j.63){19 1k.1H(3o.7v,B(1l).1g())+"px"}1j{19 B(1l).1g()+"px"}}},1f:u(){if(B.2j.44&&B.2j.8p<7){p C=1k.1H(1l.3P.9c,1l.1Y.9c);p D=1k.1H(1l.3P.4D,1l.1Y.4D);if(C<D){19 B(3o).1f()+"px"}1j{19 C+"px"}}1j{if(B.2j.63){19 1k.1H(3o.9m,B(1l).1f())+"px"}1j{19 B(1l).1f()+"px"}}},2K:u(){p C=B([]);B.1E(B.1a.2n.3i.9b,u(){C=C.2l(k)});C.1e({1f:0,1g:0}).1e({1f:B.1a.2n.3i.1f(),1g:B.1a.2n.3i.1g()})}});B.23(B.1a.2n.3i.5k,{3s:u(){B.1a.2n.3i.3s(k.$el)}})})(1L);(u(A){A.fn.dB=A.fn.dB||u(B){19 k.1E(u(){A(k).5F(B).eq(0).fg(k).2m()})};A.3T("1a.58",{6B:{},1a:u(B){19{v:k.v,29:k.2J,1X:k.v.2P!="6I"||!k.v.2P?1k.2T(k.1X(1n,k.v.2P=="4L"?"y":"x")):{x:1k.2T(k.1X(1n,"x")),y:1k.2T(k.1X(1n,"y"))},ag:k.ir()}},24:u(C,B){A.1a.2Y.1O(k,C,[B,k.1a()]);k.1d.3x(C=="7L"?C:"7L"+C,[B,k.1a()],k.v[C])},3s:u(){k.1d.1G("1a-58 1a-58-1I").4r("58").2G(".58");if(k.29&&k.29.1t){k.29.dB("a");k.29.1E(u(){A(k).1w("5C").a1()})}k.dO&&k.dO.2m()},6f:u(B,C){A.3T.5k.6f.1K(k,1T);if(/1V|1H|9f/.1P(B)){k.eg()}if(B=="ag"){C?k.29.1t==2&&k.eZ():k.iq()}},57:u(){p B=k;k.1d.1x("1a-58");k.eg();k.29=A(k.v.29,k.1d);if(!k.29.1t){B.29=B.dO=A(B.v.3Q||[0]).7B(u(){p D=A("<1v/>").1x("1a-58-29").31(B.1d);if(k.id){D.2S("id",k.id)}19 D[0]})}p C=u(D){k.1d=A(D);k.1d.1w("5C",k);k.v=B.v;k.1d.1M("5d",u(){if(B.2J){k.7u(B.2J)}B.7s(k,1q)});k.a0()};A.23(C.5k,A.1a.5C,{7H:u(D){19 B.hj.1O(B,D,k.1d[0])},7I:u(D){19 B.hY.1O(B,D,k.1d[0])},6N:u(D){19 B.fd.1O(B,D,k.1d[0])},9e:u(){19 1q},5y:u(D){k.dM(D)}});A(k.29).1E(u(){22 C(k)}).7U(\'<a 4G="#" 2Q="ie:6m;dj:6m;"></a>\').1B().1M("2o",u(){19 1h}).1M("3e",u(D){B.7s(k.dL)}).1M("7u",u(D){B.c4(k.dL)}).1M("5Z",u(D){if(!B.v.pV){19 B.d1(D.2w,k.dL)}});k.1d.1M("5d.58",u(D){B.ij.1K(B,[D]);B.2J.1w("5C").5y(D);B.bW=B.bW+1});A.1E(k.v.3Q||[],u(D,E){B.bj(E.2A,D,1q)});if(!5s(k.v.i9)){k.bj(k.v.i9,0,1q)}k.8m=A(k.29[0]);if(k.29.1t==2&&k.v.ag){k.eZ()}},eg:u(){p B=k.1d[0],C=k.v;k.8j={1f:k.1d.4b(),1g:k.1d.3p()};A.23(C,{2P:C.2P||(B.4D<B.3D?"4L":"cD"),1H:!5s(1m(C.1H,10))?{x:1m(C.1H,10),y:1m(C.1H,10)}:({x:C.1H&&C.1H.x||2c,y:C.1H&&C.1H.y||2c}),1V:!5s(1m(C.1V,10))?{x:1m(C.1V,10),y:1m(C.1V,10)}:({x:C.1V&&C.1V.x||0,y:C.1V&&C.1V.y||0})});C.8r={x:C.1H.x-C.1V.x,y:C.1H.y-C.1V.y};C.3F={x:C.3F&&C.3F.x||1m(C.3F,10)||(C.9f?C.8r.x/(C.9f.x||1m(C.9f,10)||C.8r.x):0),y:C.3F&&C.3F.y||1m(C.3F,10)||(C.9f?C.8r.y/(C.9f.y||1m(C.9f,10)||C.8r.y):0)}},d1:u(F,E){p C=F;if(/(33|34|35|36|37|38|39|40)/.1P(C)){p G=k.v,B,I;if(/(35|36)/.1P(C)){B=(C==35)?G.1H.x:G.1V.x;I=(C==35)?G.1H.y:G.1V.y}1j{p H=/(34|37|40)/.1P(C)?"-=":"+=";p D=/(37|38|39|40)/.1P(C)?"c3":"i7";B=H+k[D]("x");I=H+k[D]("y")}k.bj({x:B,y:I},E);19 1h}19 1q},7s:u(B,C){k.2J=A(B).1x("1a-58-29-4d");if(C){k.2J.1B()[0].3e()}},c4:u(B){A(B).1G("1a-58-29-4d");if(k.2J&&k.2J[0]==B){k.8m=k.2J;k.2J=1n}},ij:u(C){p D=[C.3z,C.3f];p B=1h;k.29.1E(u(){if(k==C.1s){B=1q}});if(B||k.v.1I||!(k.2J||k.8m)){19}if(!k.2J&&k.8m){k.7s(k.8m,1q)}k.1i=k.1d.1i();k.bj({y:k.6V(C.3f-k.1i.1c-k.2J[0].3D/2,"y"),x:k.6V(C.3z-k.1i.1b-k.2J[0].4D/2,"x")},1n,!k.v.3G)},eZ:u(){if(k.6u){19}k.6u=A("<1v></1v>").1x("1a-58-ag").1e({1p:"2H"}).31(k.1d);k.bV()},iq:u(){k.6u.2m();k.6u=1n},bV:u(){p C=k.v.2P=="4L"?"1c":"1b";p B=k.v.2P=="4L"?"1g":"1f";k.6u.1e(C,(1m(A(k.29[0]).1e(C),10)||0)+k.92(0,k.v.2P=="4L"?"y":"x")/2);k.6u.1e(B,(1m(A(k.29[1]).1e(C),10)||0)-(1m(A(k.29[0]).1e(C),10)||0))},ir:u(){19 k.6u?k.6V(1m(k.6u.1e(k.v.2P=="4L"?"1g":"1f"),10),k.v.2P=="4L"?"y":"x"):1n},io:u(){19 k.29.3J(k.2J[0])},1X:u(D,B){if(k.29.1t==1){k.2J=k.29}if(!B){B=k.v.2P=="4L"?"y":"x"}p C=A(D!=2i&&D!==1n?k.29[D]||D:k.2J);if(C.1w("5C").cb){19 1m(C.1w("5C").cb[B],10)}1j{19 1m(((1m(C.1e(B=="x"?"1b":"1c"),10)/(k.8j[B=="x"?"1f":"1g"]-k.92(D,B)))*k.v.8r[B])+k.v.1V[B],10)}},6V:u(C,B){19 k.v.1V[B]+(C/(k.8j[B=="x"?"1f":"1g"]-k.92(1n,B)))*k.v.8r[B]},5K:u(C,B){19((C-k.v.1V[B])/k.v.8r[B])*(k.8j[B=="x"?"1f":"1g"]-k.92(1n,B))},bl:u(D,B){if(k.6u){if(k.2J[0]==k.29[0]&&D>=k.5K(k.1X(1),B)){D=k.5K(k.1X(1,B)-k.c3(B),B)}if(k.2J[0]==k.29[1]&&D<=k.5K(k.1X(0),B)){D=k.5K(k.1X(0,B)+k.c3(B),B)}}if(k.v.3Q){p C=k.v.3Q[k.io()];if(D<k.5K(C.1V,B)){D=k.5K(C.1V,B)}1j{if(D>k.5K(C.1H,B)){D=k.5K(C.1H,B)}}}19 D},bk:u(C,B){if(C>=k.8j[B=="x"?"1f":"1g"]-k.92(1n,B)){C=k.8j[B=="x"?"1f":"1g"]-k.92(1n,B)}if(C<=0){C=0}19 C},92:u(C,B){19 A(C!=2i&&C!==1n?k.29[C]:k.2J)[0]["1i"+(B=="x"?"pW":"pX")]},c3:u(B){19 k.v.3F[B]||1},i7:u(B){19 10},hj:u(C,B){p D=k.v;if(D.1I){19 1h}k.8j={1f:k.1d.4b(),1g:k.1d.3p()};if(!k.2J){k.7s(k.8m,1q)}k.1i=k.1d.1i();k.f4=k.2J.1i();k.8Z={1c:C.3f-k.f4.1c,1b:C.3z-k.f4.1b};k.bW=k.1X();k.24("2A",C);k.fd(C,B);19 1q},hY:u(B){k.24("3d",B);if(k.bW!=k.1X()){k.24("5z",B)}k.7s(k.2J,1q);19 1h},fd:u(E,D){p F=k.v;p B={1c:E.3f-k.1i.1c-k.8Z.1c,1b:E.3z-k.1i.1b-k.8Z.1b};if(!k.2J){k.7s(k.8m,1q)}B.1b=k.bk(B.1b,"x");B.1c=k.bk(B.1c,"y");if(F.3F.x){p C=k.6V(B.1b,"x");C=1k.2T(C/F.3F.x)*F.3F.x;B.1b=k.5K(C,"x")}if(F.3F.y){p C=k.6V(B.1c,"y");C=1k.2T(C/F.3F.y)*F.3F.y;B.1c=k.5K(C,"y")}B.1b=k.bl(B.1b,"x");B.1c=k.bl(B.1c,"y");if(F.2P!="4L"){k.2J.1e({1b:B.1b})}if(F.2P!="cD"){k.2J.1e({1c:B.1c})}k.2J.1w("5C").cb={x:1k.2T(k.6V(B.1b,"x"))||0,y:1k.2T(k.6V(B.1c,"y"))||0};if(k.6u){k.bV()}k.24("7L",E);19 1h},bj:u(F,E,G){p H=k.v;k.8j={1f:k.1d.4b(),1g:k.1d.3p()};if(E==2i&&!k.2J&&k.29.1t!=1){19 1h}if(E==2i&&!k.2J){E=0}if(E!=2i){k.2J=k.8m=A(k.29[E]||E)}if(F.x!==2i&&F.y!==2i){p B=F.x,I=F.y}1j{p B=F,I=F}if(B!==2i&&B.4N!=94){p D=/^\\-\\=/.1P(B),C=/^\\+\\=/.1P(B);if(D||C){B=k.1X(1n,"x")+1m(B.5m(D?"=":"+=",""),10)}1j{B=5s(1m(B,10))?2i:1m(B,10)}}if(I!==2i&&I.4N!=94){p D=/^\\-\\=/.1P(I),C=/^\\+\\=/.1P(I);if(D||C){I=k.1X(1n,"y")+1m(I.5m(D?"=":"+=",""),10)}1j{I=5s(1m(I,10))?2i:1m(I,10)}}if(H.2P!="4L"&&B!==2i){if(H.3F.x){B=1k.2T(B/H.3F.x)*H.3F.x}B=k.5K(B,"x");B=k.bk(B,"x");B=k.bl(B,"x");H.26?k.2J.3d().26({1b:B},(1k.3Y(1m(k.2J.1e("1b"))-B))*(!5s(1m(H.26))?H.26:5)):k.2J.1e({1b:B})}if(H.2P!="cD"&&I!==2i){if(H.3F.y){I=1k.2T(I/H.3F.y)*H.3F.y}I=k.5K(I,"y");I=k.bk(I,"y");I=k.bl(I,"y");H.26?k.2J.3d().26({1c:I},(1k.3Y(1m(k.2J.1e("1c"))-I))*(!5s(1m(H.26))?H.26:5)):k.2J.1e({1c:I})}if(k.6u){k.bV()}k.2J.1w("5C").cb={x:1k.2T(k.6V(B,"x"))||0,y:1k.2T(k.6V(I,"y"))||0};if(!G){k.24("2A",1n);k.24("3d",1n);k.24("5z",1n);k.24("7L",1n)}}});A.1a.58.b6="1X";A.1a.58.4k={29:".1a-58-29",3G:1,26:1h}})(1L);(u(A){A.3T("1a.1F",{57:u(){k.v.4H+=".1F";k.bp(1q)},6f:u(B,C){if((/^2a/).1P(B)){k.5b(C)}1j{k.v[B]=C;k.bp()}},1t:u(){19 k.$1F.1t},er:u(B){19 B.4J&&B.4J.5m(/\\s/g,"9M").5m(/[^A-q2-q3-9\\-9M:\\.]/g,"")||k.v.h3+A.1w(B)},1a:u(C,B){19{v:k.v,q9:C,gO:B,3J:k.$1F.3J(C)}},bp:u(O){k.$4t=A("li:q4(a[4G])",k.1d);k.$1F=k.$4t.7B(u(){19 A("a",k)[0]});k.$4a=A([]);p P=k,D=k.v;k.$1F.1E(u(R,Q){if(Q.7S&&Q.7S.5m("#","")){P.$4a=P.$4a.2l(Q.7S)}1j{if(A(Q).2S("4G")!="#"){A.1w(Q,"4G.1F",Q.4G);A.1w(Q,"5r.1F",Q.4G);p T=P.er(Q);Q.4G="#"+T;p S=A("#"+T);if(!S.1t){S=A(D.eO).2S("id",T).1x(D.bg).q5(P.$4a[R-1]||P.1d);S.1w("3s.1F",1q)}P.$4a=P.$4a.2l(S)}1j{D.1I.4o(R+1)}}});if(O){k.1d.1x(D.eJ);k.$4a.1E(u(){p Q=A(k);Q.1x(D.bg)});if(D.2a===2i){if(cH.7S){k.$1F.1E(u(S,Q){if(Q.7S==cH.7S){D.2a=S;if(A.2j.44||A.2j.63){p R=A(cH.7S),T=R.2S("id");R.2S("id","");5E(u(){R.2S("id",T)},aX)}q6(0,0);19 1h}})}1j{if(D.7j){p J=1m(A.7j("1a-1F-"+A.1w(P.1d[0])),10);if(J&&P.$1F[J]){D.2a=J}}1j{if(P.$4t.3H("."+D.4e).1t){D.2a=P.$4t.3J(P.$4t.3H("."+D.4e)[0])}}}}D.2a=D.2a===1n||D.2a!==2i?D.2a:0;D.1I=A.q7(D.1I.6l(A.7B(k.$4t.3H("."+D.9k),u(R,Q){19 P.$4t.3J(R)}))).76();if(A.9i(D.2a,D.1I)!=-1){D.1I.cI(A.9i(D.2a,D.1I),1)}k.$4a.1x(D.8d);k.$4t.1G(D.4e);if(D.2a!==1n){k.$4a.eq(D.2a).1N().1G(D.8d);k.$4t.eq(D.2a).1x(D.4e);p K=u(){P.4i("1N",1n,P.1a(P.$1F[D.2a],P.$4a[D.2a]))};if(A.1w(k.$1F[D.2a],"5r.1F")){k.5r(D.2a,K)}1j{K()}}A(3o).1M("q8",u(){P.$1F.2G(".1F");P.$4t=P.$1F=P.$4a=1n})}1j{D.2a=k.$4t.3J(k.$4t.3H("."+D.4e)[0])}if(D.7j){A.7j("1a-1F-"+A.1w(P.1d[0]),D.2a,D.7j)}1S(p G=0,N;N=k.$4t[G];G++){A(N)[A.9i(G,D.1I)!=-1&&!A(N).4n(D.4e)?"1x":"1G"](D.9k)}if(D.80===1h){k.$1F.4r("80.1F")}p C,I,B={"1V-1f":0,1W:1},E="bd";if(D.fx&&D.fx.4N==a2){C=D.fx[0]||B,I=D.fx[1]||B}1j{C=I=D.fx||B}p H={4E:"",2W:"",1g:""};if(!A.2j.44){H.1Z=""}u M(R,Q,S){Q.26(C,C.1W||E,u(){Q.1x(D.8d).1e(H);if(A.2j.44&&C.1Z){Q[0].2Q.3H=""}if(S){L(R,S,Q)}})}u L(R,S,Q){if(I===B){S.1e("4E","7l")}S.26(I,I.1W||E,u(){S.1G(D.8d).1e(H);if(A.2j.44&&I.1Z){S[0].2Q.3H=""}P.4i("1N",1n,P.1a(R,S[0]))})}u F(R,T,Q,S){T.1x(D.4e).62().1G(D.4e);M(R,Q,S)}k.$1F.2G(".1F").1M(D.4H,u(){p T=A(k).5F("li:eq(0)"),Q=P.$4a.3H(":4j"),S=A(k.7S);if((T.4n(D.4e)&&!D.cg)||T.4n(D.9k)||A(k).4n(D.8e)||P.4i("5b",1n,P.1a(k,S[0]))===1h){k.7u();19 1h}P.v.2a=P.$1F.3J(k);if(D.cg){if(T.4n(D.4e)){P.v.2a=1n;T.1G(D.4e);P.$4a.3d();M(k,Q);k.7u();19 1h}1j{if(!Q.1t){P.$4a.3d();p R=k;P.5r(P.$1F.3J(k),u(){T.1x(D.4e).1x(D.eD);L(R,S)});k.7u();19 1h}}}if(D.7j){A.7j("1a-1F-"+A.1w(P.1d[0]),P.v.2a,D.7j)}P.$4a.3d();if(S.1t){p R=k;P.5r(P.$1F.3J(k),Q.1t?u(){F(R,T,Q,S)}:u(){T.1x(D.4e);L(R,S)})}1j{97"1L pY pZ: q1 q0 6q."}if(A.2j.44){k.7u()}19 1h});if(!(/^2o/).1P(D.4H)){k.$1F.1M("2o.1F",u(){19 1h})}},2l:u(E,D,C){if(C==2i){C=k.$1F.1t}p G=k.v;p I=A(G.gV.5m(/#\\{4G\\}/g,E).5m(/#\\{3w\\}/g,D));I.1w("3s.1F",1q);p H=E.4O("#")==0?E.5m("#",""):k.er(A("a:cz-3L",I)[0]);p F=A("#"+H);if(!F.1t){F=A(G.eO).2S("id",H).1x(G.8d).1w("3s.1F",1q)}F.1x(G.bg);if(C>=k.$4t.1t){I.31(k.1d);F.31(k.1d[0].3g)}1j{I.bo(k.$4t[C]);F.bo(k.$4a[C])}G.1I=A.7B(G.1I,u(K,J){19 K>=C?++K:K});k.bp();if(k.$1F.1t==1){I.1x(G.4e);F.1G(G.8d);p B=A.1w(k.$1F[0],"5r.1F");if(B){k.5r(C,B)}}k.4i("2l",1n,k.1a(k.$1F[C],k.$4a[C]))},2m:u(B){p D=k.v,E=k.$4t.eq(B).2m(),C=k.$4a.eq(B).2m();if(E.4n(D.4e)&&k.$1F.1t>1){k.5b(B+(B+1<k.$1F.1t?1:-1))}D.1I=A.7B(A.he(D.1I,u(G,F){19 G!=B}),u(G,F){19 G>=B?--G:G});k.bp();k.4i("2m",1n,k.1a(E.2O("a")[0],C[0]))},9P:u(B){p C=k.v;if(A.9i(B,C.1I)==-1){19}p D=k.$4t.eq(B).1G(C.9k);if(A.2j.bL){D.1e("4E","4g-7l");5E(u(){D.1e("4E","7l")},0)}C.1I=A.he(C.1I,u(F,E){19 F!=B});k.4i("9P",1n,k.1a(k.$1F[B],k.$4a[B]))},8G:u(C){p B=k,D=k.v;if(C!=D.2a){k.$4t.eq(C).1x(D.9k);D.1I.4o(C);D.1I.76();k.4i("8G",1n,k.1a(k.$1F[C],k.$4a[C]))}},5b:u(B){if(2E B=="4w"){B=k.$1F.3J(k.$1F.3H("[4G$="+B+"]")[0])}k.$1F.eq(B).5y(k.v.4H)},5r:u(G,K){p L=k,D=k.v,E=k.$1F.eq(G),J=E[0],H=K==2i||K===1h,B=E.1w("5r.1F");K=K||u(){};if(!B||!H&&A.1w(J,"80.1F")){K();19}p M=u(N){p O=A(N),P=O.2O("*:gW");19 P.1t&&P.is(":8F(am)")&&P||O};p C=u(){L.$1F.3H("."+D.8e).1G(D.8e).1E(u(){if(D.2d){M(k).1B().2z(M(k).1w("3w.1F"))}});L.cC=1n};if(D.2d){p I=M(J).2z();M(J).qa("<em></em>").2O("em").1w("3w.1F",I).2z(D.2d)}p F=A.23({},D.cK,{7W:B,cB:u(O,N){A(J.7S).2z(O);C();if(D.80){A.1w(J,"80.1F",1q)}L.4i("5r",1n,L.1a(L.$1F[G],L.$4a[G]));D.cK.cB&&D.cK.cB(O,N);K()}});if(k.cC){k.cC.gU();C()}E.1x(D.8e);5E(u(){L.cC=A.gS(F)},0)},7W:u(C,B){k.$1F.eq(C).4r("80.1F").1w("5r.1F",B)},3s:u(){p B=k.v;k.1d.2G(".1F").1G(B.eJ).4r("1F");k.$1F.1E(u(){p C=A.1w(k,"4G.1F");if(C){k.4G=C}p D=A(k).2G(".1F");A.1E(["4G","5r","80"],u(E,F){D.4r(F+".1F")})});k.$4t.2l(k.$4a).1E(u(){if(A.1w(k,"3s.1F")){A(k).2m()}1j{A(k).1G([B.4e,B.eD,B.9k,B.bg,B.8d].6M(" "))}})}});A.1a.1F.4k={cg:1h,4H:"2o",1I:[],7j:1n,2d:"ql&#qk;",80:1h,h3:"1a-1F-",cK:{},fx:1n,gV:\'<li><a 4G="#{4G}"><3q>#{3w}</3q></a></li>\',eO:"<1v></1v>",eJ:"1a-1F-qm",4e:"1a-1F-2a",eD:"1a-1F-cg",9k:"1a-1F-1I",bg:"1a-1F-gO",8d:"1a-1F-1Q",8e:"1a-1F-gE"};A.1a.1F.b6="1t";A.23(A.1a.1F.5k,{eG:1n,qn:u(C,F){F=F||1h;p B=k,E=k.v.2a;u G(){B.eG=ku(u(){E=++E<B.$1F.1t?E:0;B.5b(E)},C)}u D(H){if(!H||H.hN){eo(B.eG)}}if(C){G();if(!F){k.$1F.1M(k.v.4H,D)}1j{k.$1F.1M(k.v.4H,u(){D();E=B.v.2a;G()})}}1j{D();k.$1F.2G(k.v.4H,D)}}})})(1L);(u($){p 8y="1o";u bF(){k.k3=1h;k.9F=1n;k.7y=[];k.8S=1h;k.8z=1h;k.dT="1a-1o-1v";k.eY="1a-1o-4g";k.eU="1a-1o-5g";k.7M="1a-1o-5y";k.dV="1a-1o-2n";k.fz="1a-1o-a3";k.f2="1a-1o-1I";k.fq="1a-1o-6T";k.cZ="1a-1o-3R-2L";k.eP=[];k.eP[""]={jp:"qo",jo:"qj 9v 3R 1r",jh:"kB",jl:"kB qi 5z",8o:"&#eF;qd",jk:"9n 9v kE 2F",8J:"&#eF;&#eF;",jj:"9n 9v kE 2u",81:"qc&#eC;",js:"9n 9v 4K 2F",8g:"&#eC;&#eC;",jz:"9n 9v 4K 2u",8M:"qe",jC:"9n 9v 3R 2F",4W:["qf","qh","pU","pT","k6","pw","pv","py","pz","pB","pA","pu"],6t:["ps","pm","pl","pk","k6","po","pr","pq","pC","pD","pO","pN"],jV:"9n a ka 2F",jG:"9n a ka 2u",jw:"pP",aB:"pQ of 9v 2u",5h:["pS","pR","pF","qr","pH","mB","pI"],5w:["pK","pJ","qt","qO","qY","qU","qQ"],dm:["qP","qS","qT","qR","qX","qW","qM"],dq:"qy bT as cz 8q 2L",9g:"cm bT, M d",9d:"mm/dd/8Q",5u:0,3M:"cm a 1r",5Q:1h};k.5x={8R:"3e",6h:"1N",ef:{},77:1n,bw:"",8s:"...",af:"",kb:1h,aR:1q,fP:1h,aV:1h,88:1h,8T:1h,fF:1h,jR:1q,jY:1q,aP:1h,jX:"-10:+10",aI:1q,9S:1h,8n:1h,aA:1h,d2:k.bZ,5T:"+10",3W:1h,jv:k.9g,3m:1n,3C:1n,1W:"bd",aJ:1n,9I:1n,83:1n,jL:1n,bG:1n,iI:1,cT:0,7q:1,7J:12,5I:1h,aS:" - ",aC:"",9L:""};$.23(k.5x,k.eP[""]);k.30=$(\'<1v id="\'+k.dT+\'" 2Q="4E: 6m;"></1v>\')}$.23(bF.5k,{6D:"qA",fX:u(){if(k.k3){qx.fX.1K("",1T)}},qw:u(2r){9D(k.5x,2r||{});19 k},je:u(1s,2r){p au=1n;1S(co in k.5x){p cl=1s.qs("1r:"+co);if(cl){au=au||{};cP{au[co]=qu(cl)}cS(kL){au[co]=cl}}}p 3n=1s.3n.4T();p 4g=(3n=="1v"||3n=="3q");if(!1s.id){1s.id="dp"+(++k.by)}p 18=k.eV($(1s),4g);18.2r=$.23({},2r||{},au||{});if(3n=="1z"){k.kd(1s,18)}1j{if(4g){k.kT(1s,18)}}},eV:u(1s,4g){p id=1s[0].id.5m(/([:\\[\\]\\.])/g,"\\\\\\\\$1");19{id:id,1z:1s,5f:0,4X:0,53:0,2I:0,2R:0,4g:4g,30:(!4g?k.30:$(\'<1v 2e="\'+k.eY+\'"></1v>\'))}},kd:u(1s,18){p 1z=$(1s);if(1z.4n(k.6D)){19}p bw=k.1y(18,"bw");p 5Q=k.1y(18,"5Q");if(bw){1z[5Q?"da":"fg"](\'<3q 2e="\'+k.eU+\'">\'+bw+"</3q>")}p 8R=k.1y(18,"8R");if(8R=="3e"||8R=="6I"){1z.3e(k.9J)}if(8R=="43"||8R=="6I"){p 8s=k.1y(18,"8s");p af=k.1y(18,"af");p 5y=$(k.1y(18,"kb")?$("<am/>").1x(k.7M).2S({fS:af,kS:8s,4J:8s}):$(\'<43 4h="43"></43>\').1x(k.7M).2z(af==""?8s:$("<am/>").2S({fS:af,kS:8s,4J:8s})));1z[5Q?"da":"fg"](5y);5y.2o(u(){if($.1o.8S&&$.1o.9B==1s){$.1o.7t()}1j{$.1o.9J(1s)}19 1h})}1z.1x(k.6D).5Z(k.cq).ao(k.dN).1M("ck.1o",u(4H,6H,1X){18.2r[6H]=1X}).1M("fe.1o",u(4H,6H){19 k.1y(18,6H)});$.1w(1s,8y,18)},kT:u(1s,18){p ff=$(1s);if(ff.4n(k.6D)){19}ff.1x(k.6D).5g(18.30).1M("ck.1o",u(4H,6H,1X){18.2r[6H]=1X}).1M("fe.1o",u(4H,6H){19 k.1y(18,6H)});$.1w(1s,8y,18);k.fO(18,k.fZ(18));k.6y(18)},qv:u(18){p 4F=k.9z(18);18.30.1f(4F[1]*$(".1a-1o",18.30[0]).1f())},qB:u(1z,kD,83,2r,2M){p 18=k.kF;if(!18){p id="dp"+(++k.by);k.7i=$(\'<1z 4h="4C" id="\'+id+\'" 1D="1" 2Q="1p: 2H; 1c: -iE;"/>\');k.7i.5Z(k.cq);$("1Y").5g(k.7i);18=k.kF=k.eV(k.7i,1h);18.2r={};$.1w(k.7i[0],8y,18)}9D(18.2r,2r||{});k.7i.2v(kD);k.5G=(2M?(2M.1t?2M:[2M.3z,2M.3f]):1n);if(!k.5G){p cy=3o.9m||1l.3P.bK||1l.1Y.bK;p cv=3o.7v||1l.3P.9H||1l.1Y.9H;p 95=1l.3P.2B||1l.1Y.2B;p 91=1l.3P.2p||1l.1Y.2p;k.5G=[(cy/2)-2c+95,(cv/2)-3B+91]}k.7i.1e("1b",k.5G[0]+"px").1e("1c",k.5G[1]+"px");18.2r.83=83;k.8z=1q;k.30.1x(k.dV);k.9J(k.7i[0]);if($.bq){$.bq(k.30)}$.1w(k.7i[0],8y,18);19 k},qC:u(1s){p $1s=$(1s);if(!$1s.4n(k.6D)){19}p 3n=1s.3n.4T();$.4r(1s,8y);if(3n=="1z"){$1s.62("."+k.eU).2m().3l().62("."+k.7M).2m().3l().1G(k.6D).2G("3e",k.9J).2G("5Z",k.cq).2G("ao",k.dN)}1j{if(3n=="1v"||3n=="3q"){$1s.1G(k.6D).bN()}}},qJ:u(1s){p $1s=$(1s);if(!$1s.4n(k.6D)){19}p 3n=1s.3n.4T();if(3n=="1z"){1s.1I=1h;$1s.62("43."+k.7M).1E(u(){k.1I=1h}).3l().62("am."+k.7M).1e({1Z:"1.0",2Z:""})}1j{if(3n=="1v"||3n=="3q"){$1s.9U("."+k.f2).2m()}}k.7y=$.7B(k.7y,u(1X){19(1X==1s?1n:1X)})},qK:u(1s){p $1s=$(1s);if(!$1s.4n(k.6D)){19}p 3n=1s.3n.4T();if(3n=="1z"){1s.1I=1q;$1s.62("43."+k.7M).1E(u(){k.1I=1q}).3l().62("am."+k.7M).1e({1Z:"0.5",2Z:"4Y"})}1j{if(3n=="1v"||3n=="3q"){p 4g=$1s.9U("."+k.eY);p 1i=4g.1i();p cj={1b:0,1c:0};4g.5F().1E(u(){if($(k).1e("1p")=="2C"){cj=$(k).1i();19 1h}});$1s.qL(\'<1v 2e="\'+k.f2+\'" 2Q="\'+($.2j.44?"bv-2h: 7C; ":"")+"1f: "+4g.1f()+"px; 1g: "+4g.1g()+"px; 1b: "+(1i.1b-cj.1b)+"px; 1c: "+(1i.1c-cj.1c)+\'px;"></1v>\')}}k.7y=$.7B(k.7y,u(1X){19(1X==1s?1n:1X)});k.7y[k.7y.1t]=1s},iV:u(1s){if(!1s){19 1h}1S(p i=0;i<k.7y.1t;i++){if(k.7y[i]==1s){19 1q}}19 1h},5a:u(1s){cP{19 $.1w(1s,8y)}cS(kL){97"iK 2q 1w 1S k 1o"}},qI:u(1s,4s,1X){p 2r=4s||{};if(2E 4s=="4w"){2r={};2r[4s]=1X}p 18=k.5a(1s);if(18){if(k.9F==18){k.7t(1n)}9D(18.2r,2r);p 1r=22 2k();9D(18,{4x:1n,6b:1n,6G:1n,4m:1n,5f:1r.3u(),4X:1r.3K(),53:1r.3c(),4B:1r.3u(),5l:1r.3K(),54:1r.3c(),2I:1r.3K(),2R:1r.3c()});k.6y(18)}},qH:u(1s){p 18=k.5a(1s);if(18){k.6y(18)}},qE:u(1s,1r,6s){p 18=k.5a(1s);if(18){k.fO(18,1r,6s);k.6y(18);k.gu(18)}},qF:u(1s){p 18=k.5a(1s);if(18&&!18.4g){k.fI(18)}19(18?k.fR(18):1n)},cq:u(e){p 18=$.1o.5a(e.1s);p 72=1q;if($.1o.8S){6d(e.2w){1J 9:$.1o.7t(1n,"");1R;1J 13:$.1o.ft(e.1s,18.4X,18.53,$("5v.1a-1o-9T-99-4z",18.30)[0]);19 1h;1R;1J 27:$.1o.7t(1n,$.1o.1y(18,"1W"));1R;1J 33:$.1o.5J(e.1s,(e.59?-$.1o.1y(18,"7J"):-$.1o.1y(18,"7q")),"M");1R;1J 34:$.1o.5J(e.1s,(e.59?+$.1o.1y(18,"7J"):+$.1o.1y(18,"7q")),"M");1R;1J 35:if(e.59){$.1o.fM(e.1s)}72=e.59;1R;1J 36:if(e.59){$.1o.g6(e.1s)}72=e.59;1R;1J 37:if(e.59){$.1o.5J(e.1s,-1,"D")}72=e.59;1R;1J 38:if(e.59){$.1o.5J(e.1s,-7,"D")}72=e.59;1R;1J 39:if(e.59){$.1o.5J(e.1s,+1,"D")}72=e.59;1R;1J 40:if(e.59){$.1o.5J(e.1s,+7,"D")}72=e.59;1R;4Y:72=1h}}1j{if(e.2w==36&&e.59){$.1o.9J(k)}1j{72=1h}}if(72){e.6X();e.iY()}},dN:u(e){p 18=$.1o.5a(e.1s);p 7F=$.1o.jI($.1o.1y(18,"9d"));p dH=9O.gA(e.dE==2i?e.2w:e.dE);19 e.59||(dH<" "||!7F||7F.4O(dH)>-1)},9J:u(1z){1z=1z.1s||1z;if(1z.3n.4T()!="1z"){1z=$("1z",1z.3g)[0]}if($.1o.iV(1z)||$.1o.9B==1z){19}p 18=$.1o.5a(1z);p 9I=$.1o.1y(18,"9I");9D(18.2r,(9I?9I.1K(1z,[1z,18]):{}));$.1o.7t(1n,"");$.1o.9B=1z;$.1o.fI(18);if($.1o.8z){1z.1X=""}if(!$.1o.5G){$.1o.5G=$.1o.ed(1z);$.1o.5G[1]+=1z.3D}p 5e=1h;$(1z).5F().1E(u(){5e|=$(k).1e("1p")=="6C";19!5e});if(5e&&$.2j.63){$.1o.5G[0]-=1l.3P.2B;$.1o.5G[1]-=1l.3P.2p}p 1i={1b:$.1o.5G[0],1c:$.1o.5G[1]};$.1o.5G=1n;18.4x=1n;18.30.1e({1p:"2H",4E:"7l",1c:"-nv"});$.1o.6y(18);18.30.1f($.1o.9z(18)[1]*$(".1a-1o",18.30[0])[0].4D);1i=$.1o.jd(18,1i,5e);18.30.1e({1p:($.1o.8z&&$.bq?"7x":(5e?"6C":"2H")),4E:"6m",1b:1i.1b+"px",1c:1i.1c+"px"});if(!18.4g){p 6h=$.1o.1y(18,"6h")||"1N";p 1W=$.1o.1y(18,"1W");p 9h=u(){$.1o.8S=1q;if($.2j.44&&1m($.2j.8p,10)<7){$("aT.1a-1o-fK").1e({1f:18.30.1f()+4,1g:18.30.1g()+4})}};if($.1A&&$.1A[6h]){18.30.1N(6h,$.1o.1y(18,"ef"),1W,9h)}1j{18.30[6h](1W,9h)}if(1W==""){9h()}if(18.1z[0].4h!="3h"){18.1z[0].3e()}$.1o.9F=18}},6y:u(18){p dD={1f:18.30.1f()+4,1g:18.30.1g()+4};18.30.bN().5g(k.jn(18)).2O("aT.1a-1o-fK").1e({1f:dD.1f,1g:dD.1g});p 4F=k.9z(18);18.30[(4F[0]!=1||4F[1]!=1?"2l":"2m")+"jc"]("1a-1o-nt");18.30[(k.1y(18,"5Q")?"2l":"2m")+"jc"]("1a-1o-nx");if(18.1z&&18.1z[0].4h!="3h"){$(18.1z[0]).3e()}},jd:u(18,1i,5e){p 2M=18.1z?k.ed(18.1z[0]):1n;p cy=3o.9m||1l.3P.bK;p cv=3o.7v||1l.3P.9H;p 95=1l.3P.2B||1l.1Y.2B;p 91=1l.3P.2p||1l.1Y.2p;if(k.1y(18,"5Q")||(1i.1b+18.30.1f()-95)>cy){1i.1b=1k.1H((5e?0:95),2M[0]+(18.1z?18.1z.1f():0)-(5e?95:0)-18.30.1f()-(5e&&$.2j.63?1l.3P.2B:0))}1j{1i.1b-=(5e?95:0)}if((1i.1c+18.30.1g()-91)>cv){1i.1c=1k.1H((5e?0:91),2M[1]-(5e?91:0)-(k.8z?0:18.30.1g())-(5e&&$.2j.63?1l.3P.2p:0))}1j{1i.1c-=(5e?91:0)}19 1i},ed:u(98){4V(98&&(98.4h=="3h"||98.nB!=1)){98=98.j9}p 1p=$(98).1i();19[1p.1b,1p.1c]},7t:u(1z,1W){p 18=k.9F;if(!18||(1z&&18!=$.1w(1z,8y))){19}p 5I=k.1y(18,"5I");if(5I&&18.7G){k.cs("#"+18.id,k.9w(18,18.4B,18.5l,18.54))}18.7G=1h;if(k.8S){1W=(1W!=1n?1W:k.1y(18,"1W"));p 6h=k.1y(18,"6h");p 9h=u(){$.1o.dW(18)};if(1W!=""&&$.1A&&$.1A[6h]){18.30.1Q(6h,$.1o.1y(18,"ef"),1W,9h)}1j{18.30[(1W==""?"1Q":(6h=="nA"?"nz":(6h=="ns"?"nr":"1Q")))](1W,9h)}if(1W==""){k.dW(18)}p bG=k.1y(18,"bG");if(bG){bG.1K((18.1z?18.1z[0]:1n),[(18.1z?18.1z.2v():""),18])}k.8S=1h;k.9B=1n;18.2r.a3=1n;if(k.8z){k.7i.1e({1p:"2H",1b:"0",1c:"-iE"});if($.bq){$.nl();$("1Y").5g(k.30)}}k.8z=1h}k.9F=1n},dW:u(18){18.30.1G(k.dV).2G(".1a-1o");$("."+k.fz,18.30).2m()},jb:u(4H){if(!$.1o.9F){19}p $1s=$(4H.1s);if(($1s.5F("#"+$.1o.dT).1t==0)&&!$1s.4n($.1o.6D)&&!$1s.4n($.1o.7M)&&$.1o.8S&&!($.1o.8z&&$.bq)){$.1o.7t(1n,"")}},5J:u(id,1i,6v){p 1s=$(id);p 18=k.5a(1s[0]);k.d9(18,1i,6v);k.6y(18)},g6:u(id){p 1s=$(id);p 18=k.5a(1s[0]);if(k.1y(18,"fF")&&18.4B){18.5f=18.4B;18.2I=18.4X=18.5l;18.2R=18.53=18.54}1j{p 1r=22 2k();18.5f=1r.3u();18.2I=18.4X=1r.3K();18.2R=18.53=1r.3c()}k.aG(18);k.5J(1s)},fo:u(id,5b,6v){p 1s=$(id);p 18=k.5a(1s[0]);18.ct=1h;18["2a"+(6v=="M"?"iv":"ix")]=18["nk"+(6v=="M"?"iv":"ix")]=1m(5b.v[5b.nj].1X,10);k.aG(18);k.5J(1s)},fv:u(id){p 1s=$(id);p 18=k.5a(1s[0]);if(18.1z&&18.ct&&!$.2j.44){18.1z[0].3e()}18.ct=!18.ct},kn:u(id,2L){p 1s=$(id);p 18=k.5a(1s[0]);18.2r.5u=2L;k.6y(18)},ft:u(id,2F,2u,5v){if($(5v).4n(k.fq)){19}p 1s=$(id);p 18=k.5a(1s[0]);p 5I=k.1y(18,"5I");if(5I){18.7G=!18.7G;if(18.7G){$(".1a-1o 5v",18.30).1G(k.cZ);$(5v).1x(k.cZ)}}18.5f=18.4B=$("a",5v).2z();18.4X=18.5l=2F;18.53=18.54=2u;if(18.7G){18.6b=18.6G=18.4m=1n}1j{if(5I){18.6b=18.4B;18.6G=18.5l;18.4m=18.54}}k.cs(id,k.9w(18,18.4B,18.5l,18.54));if(18.7G){18.4x=22 2k(18.54,18.5l,18.4B);k.6y(18)}1j{if(5I){18.5f=18.4B=18.4x.3u();18.4X=18.5l=18.4x.3K();18.53=18.54=18.4x.3c();18.4x=1n;if(18.4g){k.6y(18)}}}},fM:u(id){p 1s=$(id);p 18=k.5a(1s[0]);if(k.1y(18,"fP")){19}18.7G=1h;18.6b=18.6G=18.4m=18.4x=1n;k.cs(1s,"")},cs:u(id,6j){p 1s=$(id);p 18=k.5a(1s[0]);6j=(6j!=1n?6j:k.9w(18));if(k.1y(18,"5I")&&6j){6j=(18.4x?k.9w(18,18.4x):6j)+k.1y(18,"aS")+6j}if(18.1z){18.1z.2v(6j)}k.gu(18);p 83=k.1y(18,"83");if(83){83.1K((18.1z?18.1z[0]:1n),[6j,18])}1j{if(18.1z){18.1z.5y("5z")}}if(18.4g){k.6y(18)}1j{if(!18.7G){k.7t(1n,k.1y(18,"1W"));k.9B=18.1z[0];if(2E(18.1z[0])!="7z"){18.1z[0].3e()}k.9B=1n}}},gu:u(18){p aC=k.1y(18,"aC");if(aC){p 9L=k.1y(18,"9L");p 1r=k.fR(18);6j=(ja(1r)?(!1r[0]&&!1r[1]?"":k.6F(9L,1r[0],k.6a(18))+k.1y(18,"aS")+k.6F(9L,1r[1]||1r[0],k.6a(18))):k.6F(9L,1r,k.6a(18)));$(aC).1E(u(){$(k).2v(6j)})}},nn:u(1r){p 2L=1r.9G();19[(2L>0&&2L<6),""]},bZ:u(1r){p 6J=22 2k(1r.3c(),1r.3K(),1r.3u(),(1r.nq()/-60));p 9x=22 2k(6J.3c(),1-1,4);p 5u=9x.9G()||7;9x.di(9x.3u()+1-5u);if(5u<4&&6J<9x){6J.di(6J.3u()-3);19 $.1o.bZ(6J)}1j{if(6J>22 2k(6J.3c(),12-1,28)){5u=22 2k(6J.3c()+1,1-1,4).9G()||7;if(5u>4&&(6J.9G()||7)<5u-3){19 1}}}19 1k.aL(((6J-9x)/np)/7)+1},9g:u(1r,18){19 $.1o.6F($.1o.1y(18,"9g"),1r,$.1o.6a(18))},fY:u(3E,1X,2r){if(3E==1n||1X==1n){97"fL 1T"}1X=(2E 1X=="7z"?1X.7k():1X+"");if(1X==""){19 1n}p 5T=(2r?2r.5T:1n)||k.5x.5T;p 5w=(2r?2r.5w:1n)||k.5x.5w;p 5h=(2r?2r.5h:1n)||k.5x.5h;p 6t=(2r?2r.6t:1n)||k.5x.6t;p 4W=(2r?2r.4W:1n)||k.5x.4W;p 2u=-1;p 2F=-1;p 2L=-1;p 8O=-1;p 5H=1h;p 5R=u(3U){p 5t=(3A+1<3E.1t&&3E.4l(3A+1)==3U);if(5t){3A++}19 5t};p al=u(3U){5R(3U);p gb=(3U=="@"?14:(3U=="y"?4:(3U=="o"?3:2)));p 1D=gb;p 7w=0;4V(1D>0&&6c<1X.1t&&1X.4l(6c)>="0"&&1X.4l(6c)<="9"){7w=7w*10+1m(1X.4l(6c++),10);1D--}if(1D==gb){97"iK 8A at 1p "+6c}19 7w};p gj=u(3U,cU,cN){p aE=(5R(3U)?cN:cU);p 1D=0;1S(p j=0;j<aE.1t;j++){1D=1k.1H(1D,aE[j].1t)}p 4s="";p jf=6c;4V(1D>0&&6c<1X.1t){4s+=1X.4l(6c++);1S(p i=0;i<aE.1t;i++){if(4s==aE[i]){19 i+1}}1D--}97"no 4s at 1p "+jf};p ci=u(){if(1X.4l(6c)!=3E.4l(3A)){97"nC 5H at 1p "+6c}6c++};p 6c=0;1S(p 3A=0;3A<3E.1t;3A++){if(5H){if(3E.4l(3A)=="\'"&&!5R("\'")){5H=1h}1j{ci()}}1j{6d(3E.4l(3A)){1J"d":2L=al("d");1R;1J"D":gj("D",5w,5h);1R;1J"o":8O=al("o");1R;1J"m":2F=al("m");1R;1J"M":2F=gj("M",6t,4W);1R;1J"y":2u=al("y");1R;1J"@":p 1r=22 2k(al("@"));2u=1r.3c();2F=1r.3K()+1;2L=1r.3u();1R;1J"\'":if(5R("\'")){ci()}1j{5H=1q}1R;4Y:ci()}}}if(2u<2c){2u+=22 2k().3c()-22 2k().3c()%2c+(2u<=5T?0:-2c)}if(8O>-1){2F=1;2L=8O;do{p gs=k.9u(2u,2F-1);if(2L<=gs){1R}2F++;2L-=gs}4V(1q)}p 1r=22 2k(2u,2F-1,2L);if(1r.3c()!=2u||1r.3K()+1!=2F||1r.3u()!=2L){97"fL 1r"}19 1r},pj:"8Q-mm-dd",nQ:"D, dd M 8Q",nP:"8Q-mm-dd",nO:"D, d M y",nR:"bT, dd-M-y",nS:"D, d M y",nV:"D, d M 8Q",nU:"D, d M 8Q",nT:"D, d M y",nN:"@",nM:"8Q-mm-dd",6F:u(3E,1r,2r){if(!1r){19""}p 5w=(2r?2r.5w:1n)||k.5x.5w;p 5h=(2r?2r.5h:1n)||k.5x.5h;p 6t=(2r?2r.6t:1n)||k.5x.6t;p 4W=(2r?2r.4W:1n)||k.5x.4W;p 5R=u(3U){p 5t=(3A+1<3E.1t&&3E.4l(3A+1)==3U);if(5t){3A++}19 5t};p cM=u(3U,1X,jF){p 7w=""+1X;if(5R(3U)){4V(7w.1t<jF){7w="0"+7w}}19 7w};p fm=u(3U,1X,cU,cN){19(5R(3U)?cN[1X]:cU[1X])};p 68="";p 5H=1h;if(1r){1S(p 3A=0;3A<3E.1t;3A++){if(5H){if(3E.4l(3A)=="\'"&&!5R("\'")){5H=1h}1j{68+=3E.4l(3A)}}1j{6d(3E.4l(3A)){1J"d":68+=cM("d",1r.3u(),2);1R;1J"D":68+=fm("D",1r.9G(),5w,5h);1R;1J"o":p 8O=1r.3u();1S(p m=1r.3K()-1;m>=0;m--){8O+=k.9u(1r.3c(),m)}68+=cM("o",8O,3);1R;1J"m":68+=cM("m",1r.3K()+1,2);1R;1J"M":68+=fm("M",1r.3K(),6t,4W);1R;1J"y":68+=(5R("y")?1r.3c():(1r.jH()%2c<10?"0":"")+1r.jH()%2c);1R;1J"@":68+=1r.6g();1R;1J"\'":if(5R("\'")){68+="\'"}1j{5H=1q}1R;4Y:68+=3E.4l(3A)}}}}19 68},jI:u(3E){p 7F="";p 5H=1h;1S(p 3A=0;3A<3E.1t;3A++){if(5H){if(3E.4l(3A)=="\'"&&!5R("\'")){5H=1h}1j{7F+=3E.4l(3A)}}1j{6d(3E.4l(3A)){1J"d":1J"m":1J"y":1J"@":7F+="nG";1R;1J"D":1J"M":19 1n;1J"\'":if(5R("\'")){7F+="\'"}1j{5H=1q}1R;4Y:7F+=3E.4l(3A)}}}19 7F},1y:u(18,4s){19 18.2r[4s]!==2i?18.2r[4s]:k.5x[4s]},fI:u(18){p 9d=k.1y(18,"9d");p 8h=18.1z?18.1z.2v().74(k.1y(18,"aS")):1n;18.6b=18.6G=18.4m=1n;p 1r=77=k.fZ(18);if(8h.1t>0){p 2r=k.6a(18);if(8h.1t>1){1r=k.fY(9d,8h[1],2r)||77;18.6b=1r.3u();18.6G=1r.3K();18.4m=1r.3c()}cP{1r=k.fY(9d,8h[0],2r)||77}cS(e){k.fX(e);1r=77}}18.5f=1r.3u();18.2I=18.4X=1r.3K();18.2R=18.53=1r.3c();18.4B=(8h[0]?1r.3u():0);18.5l=(8h[0]?1r.3K():0);18.54=(8h[0]?1r.3c():0);k.d9(18)},fZ:u(18){p 1r=k.aD(k.1y(18,"77"),22 2k());p 3m=k.7X(18,"1V",1q);p 3C=k.7X(18,"1H");1r=(3m&&1r<3m?3m:1r);1r=(3C&&1r>3C?3C:1r);19 1r},aD:u(1r,77){p jU=u(1i){p 1r=22 2k();1r.jr(1r.ji()+1i);19 1r};p jT=u(1i,fU){p 1r=22 2k();p 2u=1r.3c();p 2F=1r.3K();p 2L=1r.3u();p fN=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;p 5t=fN.89(1i);4V(5t){6d(5t[2]||"d"){1J"d":1J"D":2L+=1m(5t[1],10);1R;1J"w":1J"W":2L+=1m(5t[1],10)*7;1R;1J"m":1J"M":2F+=1m(5t[1],10);2L=1k.1V(2L,fU(2u,2F));1R;1J"y":1J"Y":2u+=1m(5t[1],10);2L=1k.1V(2L,fU(2u,2F));1R}5t=fN.89(1i)}19 22 2k(2u,2F,2L)};1r=(1r==1n?77:(2E 1r=="4w"?jT(1r,k.9u):(2E 1r=="8A"?(5s(1r)?77:jU(1r)):1r)));19(1r&&1r.7k()=="fL 2k"?77:1r)},fO:u(18,1r,6s){p 6z=!(1r);p jE=18.4X;p jD=18.53;1r=k.aD(1r,22 2k());18.5f=18.4B=1r.3u();18.2I=18.4X=18.5l=1r.3K();18.2R=18.53=18.54=1r.3c();if(k.1y(18,"5I")){if(6s){6s=k.aD(6s,1n);18.6b=6s.3u();18.6G=6s.3K();18.4m=6s.3c()}1j{18.6b=18.4B;18.6G=18.5l;18.4m=18.54}}if(jE!=18.4X||jD!=18.53){k.aG(18)}k.d9(18);if(18.1z){18.1z.2v(6z?"":k.9w(18)+(!k.1y(18,"5I")?"":k.1y(18,"aS")+k.9w(18,18.6b,18.6G,18.4m)))}},fR:u(18){p cE=(!18.54||(18.1z&&18.1z.2v()=="")?1n:22 2k(18.54,18.5l,18.4B));if(k.1y(18,"5I")){19[18.4x||cE,(!18.4m?18.4x||cE:22 2k(18.4m,18.6G,18.6b))]}1j{19 cE}},jn:u(18){p 8H=22 2k();8H=22 2k(8H.3c(),8H.3K(),8H.3u());p 3W=k.1y(18,"3W");p 3M=k.1y(18,"3M")||"&#fW;";p 5Q=k.1y(18,"5Q");p 6z=(k.1y(18,"fP")?"":\'<1v 2e="1a-1o-6z"><a 6R="1L.1o.fM(\\\'#\'+18.id+"\');\\""+k.5S(3W,18.id,k.1y(18,"jo"),3M)+">"+k.1y(18,"jp")+"</a></1v>");p fQ=\'<1v 2e="1a-1o-nF">\'+(5Q?"":6z)+\'<1v 2e="1a-1o-6S"><a 6R="1L.1o.7t();"\'+k.5S(3W,18.id,k.1y(18,"jl"),3M)+">"+k.1y(18,"jh")+"</a></1v>"+(5Q?6z:"")+"</1v>";p a3=k.1y(18,"a3");p aR=k.1y(18,"aR");p aV=k.1y(18,"aV");p 88=k.1y(18,"88");p 8T=k.1y(18,"8T");p 4F=k.9z(18);p cT=k.1y(18,"cT");p 7q=k.1y(18,"7q");p 7J=k.1y(18,"7J");p jx=(4F[0]!=1||4F[1]!=1);p d0=(!18.4B?22 2k(nE,9,9):22 2k(18.54,18.5l,18.4B));p 3m=k.7X(18,"1V",1q);p 3C=k.7X(18,"1H");p 2I=18.2I-cT;p 2R=18.2R;if(2I<0){2I+=12;2R--}if(3C){p aN=22 2k(3C.3c(),3C.3K()-4F[1]+1,3C.3u());aN=(3m&&aN<3m?3m:aN);4V(22 2k(2R,2I,1)>aN){2I--;if(2I<0){2I=11;2R--}}}p 8o=k.1y(18,"8o");8o=(!88?8o:k.6F(8o,22 2k(2R,2I-7q,1),k.6a(18)));p 8J=(8T?k.1y(18,"8J"):"");8J=(!88?8J:k.6F(8J,22 2k(2R,2I-7J,1),k.6a(18)));p 6e=\'<1v 2e="1a-1o-6e">\'+(k.gr(18,-1,2R,2I)?(8T?"<a 6R=\\"1L.1o.5J(\'#"+18.id+"\', -"+7J+", \'M\');\\""+k.5S(3W,18.id,k.1y(18,"jj"),3M)+">"+8J+"</a>":"")+"<a 6R=\\"1L.1o.5J(\'#"+18.id+"\', -"+7q+", \'M\');\\""+k.5S(3W,18.id,k.1y(18,"jk"),3M)+">"+8o+"</a>":(aV?"":"<3w>"+8J+"</3w><3w>"+8o+"</3w>"))+"</1v>";p 81=k.1y(18,"81");81=(!88?81:k.6F(81,22 2k(2R,2I+7q,1),k.6a(18)));p 8g=(8T?k.1y(18,"8g"):"");8g=(!88?8g:k.6F(8g,22 2k(2R,2I+7J,1),k.6a(18)));p 4K=\'<1v 2e="1a-1o-4K">\'+(k.gr(18,+1,2R,2I)?"<a 6R=\\"1L.1o.5J(\'#"+18.id+"\', +"+7q+", \'M\');\\""+k.5S(3W,18.id,k.1y(18,"js"),3M)+">"+81+"</a>"+(8T?"<a 6R=\\"1L.1o.5J(\'#"+18.id+"\', +"+7J+", \'M\');\\""+k.5S(3W,18.id,k.1y(18,"jz"),3M)+">"+8g+"</a>":""):(aV?"":"<3w>"+81+"</3w><3w>"+8g+"</3w>"))+"</1v>";p 8M=k.1y(18,"8M");p gc=(k.1y(18,"fF")&&18.4B?d0:8H);8M=(!88?8M:k.6F(8M,gc,k.6a(18)));p 2z=(a3?\'<1v 2e="\'+k.fz+\'">\'+a3+"</1v>":"")+(aR&&!18.4g?fQ:"")+\'<1v 2e="1a-1o-nI">\'+(5Q?4K:6e)+(k.g3(18,gc)?\'<1v 2e="1a-1o-3R"><a 6R="1L.1o.g6(\\\'#\'+18.id+"\');\\""+k.5S(3W,18.id,k.1y(18,"jC"),3M)+">"+8M+"</a></1v>":"")+(5Q?6e:4K)+"</1v>";p 5u=k.1y(18,"5u");p aI=k.1y(18,"aI");p 5h=k.1y(18,"5h");p 5w=k.1y(18,"5w");p dm=k.1y(18,"dm");p 4W=k.1y(18,"4W");p aJ=k.1y(18,"aJ");p 9S=k.1y(18,"9S");p 8n=k.1y(18,"8n");p aA=k.1y(18,"aA");p d2=k.1y(18,"d2")||k.bZ;p aB=k.1y(18,"aB");p 6W=(3W?k.1y(18,"dq")||3M:"");p 9g=k.1y(18,"jv")||k.9g;p 6s=18.6b?22 2k(18.4m,18.6G,18.6b):d0;1S(p 9j=0;9j<4F[0];9j++){1S(p ab=0;ab<4F[1];ab++){p ae=22 2k(2R,2I,18.5f);2z+=\'<1v 2e="1a-1o-ng-2F\'+(ab==0?" 1a-1o-22-9j":"")+\'">\'+k.jS(18,2I,2R,3m,3C,ae,9j>0||ab>0,3W,3M,4W)+\'<jq 2e="1a-1o" mP="0" mO="0"><ju><d4 2e="1a-1o-4J-9j">\'+(aA?"<5v"+k.5S(3W,18.id,aB,3M)+">"+k.1y(18,"jw")+"</5v>":"");1S(p 7T=0;7T<7;7T++){p 2L=(7T+5u)%7;p dq=(6W.4O("bT")>-1?6W.5m(/bT/,5h[2L]):6W.5m(/D/,5w[2L]));2z+="<5v"+((7T+5u+6)%7>=5?\' 2e="1a-1o-8q-3l-99"\':"")+">"+(!aI?"<3q":"<a 6R=\\"1L.1o.kn(\'#"+18.id+"\', "+2L+\');"\')+k.5S(3W,18.id,dq,3M)+\' 4J="\'+5h[2L]+\'">\'+dm[2L]+(aI?"</a>":"</3q>")+"</5v>"}2z+="</d4></ju><jm>";p fC=k.9u(2R,2I);if(2R==18.53&&2I==18.4X){18.5f=1k.1V(18.5f,fC)}p dl=(k.iP(2R,2I)-5u+7)%7;p aQ=22 2k(2R,2I,1-dl);p 9Q=22 2k(2R,2I,1-dl);p 5i=9Q;p jB=(jx?6:1k.jy((dl+fC)/7));1S(p fk=0;fk<jB;fk++){2z+=\'<d4 2e="1a-1o-9T-9j">\'+(aA?\'<5v 2e="1a-1o-8q-ab"\'+k.5S(3W,18.id,aB,3M)+">"+d2(5i)+"</5v>":"");1S(p 7T=0;7T<7;7T++){p aY=(aJ?aJ.1K((18.1z?18.1z[0]:1n),[5i]):[1q,""]);p 8k=(5i.3K()!=2I);p 6T=8k||!aY[0]||(3m&&5i<3m)||(3C&&5i>3C);2z+=\'<5v 2e="1a-1o-9T-99\'+((7T+5u+6)%7>=5?" 1a-1o-8q-3l-99":"")+(8k?" 1a-1o-mN-2F":"")+(5i.6g()==ae.6g()&&2I==18.4X?" 1a-1o-9T-99-4z":"")+(6T?" "+k.fq:"")+(8k&&!8n?"":" "+aY[1]+(5i.6g()>=d0.6g()&&5i.6g()<=6s.6g()?" "+k.cZ:"")+(5i.6g()==8H.6g()?" 1a-1o-8H":""))+\'"\'+((!8k||8n)&&aY[2]?\' 4J="\'+aY[2]+\'"\':"")+(6T?(9S?" fy=\\"1L(k).1B().1x(\'1a-1o-8q-4z\');\\" fB=\\"1L(k).1B().1G(\'1a-1o-8q-4z\');\\"":""):" fy=\\"1L(k).1x(\'1a-1o-9T-99-4z\')"+(9S?".1B().1x(\'1a-1o-8q-4z\')":"")+";"+(!3W||(8k&&!8n)?"":"1L(\'#1a-1o-6W-"+18.id+"\').2z(\'"+(9g.1K((18.1z?18.1z[0]:1n),[5i,18])||3M)+"\');")+"\\" fB=\\"1L(k).1G(\'1a-1o-9T-99-4z\')"+(9S?".1B().1G(\'1a-1o-8q-4z\')":"")+";"+(!3W||(8k&&!8n)?"":"1L(\'#1a-1o-6W-"+18.id+"\').2z(\'"+3M+"\');")+\'" 6R="1L.1o.ft(\\\'#\'+18.id+"\',"+2I+","+2R+\', k);"\')+">"+(8k?(8n?5i.3u():"&#fW;"):(6T?5i.3u():"<a>"+5i.3u()+"</a>"))+"</5v>";aQ.di(aQ.3u()+1);9Q.jr(9Q.ji()+1);5i=(aQ>9Q?aQ:9Q)}2z+="</d4>"}2I++;if(2I>11){2I=0;2R++}2z+="</jm></jq></1v>"}}2z+=(3W?\'<1v 2Q="6z: 6I;"></1v><1v id="1a-1o-6W-\'+18.id+\'" 2e="1a-1o-6W">\'+3M+"</1v>":"")+(!aR&&!18.4g?fQ:"")+\'<1v 2Q="6z: 6I;"></1v>\'+($.2j.44&&1m($.2j.8p,10)<7&&!18.4g?\'<aT fS="mT:1h;" 2e="1a-1o-fK"></aT>\':"");19 2z},jS:u(18,2I,2R,3m,3C,ae,fs,3W,3M,4W){3m=(18.4x&&3m&&ae<3m?ae:3m);p aP=k.1y(18,"aP");p 2z=\'<1v 2e="1a-1o-9t">\';p 8W="";if(fs||!k.1y(18,"jR")){8W+=4W[2I]+"&#fW;"}1j{p jW=(3m&&3m.3c()==2R);p jZ=(3C&&3C.3c()==2R);8W+=\'<5b 2e="1a-1o-22-2F" jQ="1L.1o.fo(\\\'#\'+18.id+"\', k, \'M\');\\" 6R=\\"1L.1o.fv(\'#"+18.id+"\');\\""+k.5S(3W,18.id,k.1y(18,"jV"),3M)+">";1S(p 2F=0;2F<12;2F++){if((!jW||2F>=3m.3K())&&(!jZ||2F<=3C.3K())){8W+=\'<8L 1X="\'+2F+\'"\'+(2F==2I?\' 2a="2a"\':"")+">"+4W[2F]+"</8L>"}}8W+="</5b>"}if(!aP){2z+=8W}if(fs||!k.1y(18,"jY")){2z+=2R}1j{p 8a=k.1y(18,"jX").74(":");p 2u=0;p 4m=0;if(8a.1t!=2){2u=2R-10;4m=2R+10}1j{if(8a[0].4l(0)=="+"||8a[0].4l(0)=="-"){2u=4m=22 2k().3c();2u+=1m(8a[0],10);4m+=1m(8a[1],10)}1j{2u=1m(8a[0],10);4m=1m(8a[1],10)}}2u=(3m?1k.1H(2u,3m.3c()):2u);4m=(3C?1k.1V(4m,3C.3c()):4m);2z+=\'<5b 2e="1a-1o-22-2u" jQ="1L.1o.fo(\\\'#\'+18.id+"\', k, \'Y\');\\" 6R=\\"1L.1o.fv(\'#"+18.id+"\');\\""+k.5S(3W,18.id,k.1y(18,"jG"),3M)+">";1S(;2u<=4m;2u++){2z+=\'<8L 1X="\'+2u+\'"\'+(2u==2R?\' 2a="2a"\':"")+">"+2u+"</8L>"}2z+="</5b>"}if(aP){2z+=8W}2z+="</1v>";19 2z},5S:u(3W,id,4C,3M){19(3W?" fy=\\"1L(\'#1a-1o-6W-"+id+"\').2z(\'"+(4C||3M)+"\');\\" fB=\\"1L(\'#1a-1o-6W-"+id+"\').2z(\'"+3M+"\');\\"":"")},d9:u(18,1i,6v){p 2u=18.2R+(6v=="Y"?1i:0);p 2F=18.2I+(6v=="M"?1i:0);p 2L=1k.1V(18.5f,k.9u(2u,2F))+(6v=="D"?1i:0);p 1r=22 2k(2u,2F,2L);p 3m=k.7X(18,"1V",1q);p 3C=k.7X(18,"1H");1r=(3m&&1r<3m?3m:1r);1r=(3C&&1r>3C?3C:1r);18.5f=1r.3u();18.2I=18.4X=1r.3K();18.2R=18.53=1r.3c();if(6v=="M"||6v=="Y"){k.aG(18)}},aG:u(18){p gg=k.1y(18,"jL");if(gg){gg.1K((18.1z?18.1z[0]:1n),[18.53,18.4X+1,18])}},9z:u(18){p 4F=k.1y(18,"iI");19(4F==1n?[1,1]:(2E 4F=="8A"?[1,4F]:4F))},7X:u(18,iM,iQ){p 1r=k.aD(k.1y(18,iM+"2k"),1n);if(1r){1r.mE(0);1r.mD(0);1r.mC(0);1r.mG(0)}19(!iQ||!18.4x?1r:(!1r||18.4x>1r?18.4x:1r))},9u:u(2u,2F){19 32-22 2k(2u,2F,32).3u()},iP:u(2u,2F){19 22 2k(2u,2F,1).9G()},gr:u(18,1i,iO,iH){p 4F=k.9z(18);p 1r=22 2k(iO,iH+(1i<0?1i:4F[1]),1);if(1i<0){1r.di(k.9u(1r.3c(),1r.3K()))}19 k.g3(18,1r)},g3:u(18,1r){p 9Z=(!18.4x?1n:22 2k(18.53,18.4X,18.5f));9Z=(9Z&&18.4x<9Z?18.4x:9Z);p 3m=9Z||k.7X(18,"1V");p 3C=k.7X(18,"1H");19((!3m||1r>=3m)&&(!3C||1r<=3C))},6a:u(18){p 5T=k.1y(18,"5T");5T=(2E 5T!="4w"?5T:22 2k().3c()%2c+1m(5T,10));19{5T:5T,5w:k.1y(18,"5w"),5h:k.1y(18,"5h"),6t:k.1y(18,"6t"),4W:k.1y(18,"4W")}},9w:u(18,2L,2F,2u){if(!2L){18.4B=18.5f;18.5l=18.4X;18.54=18.53}p 1r=(2L?(2E 2L=="7z"?2L:22 2k(2u,2F,2L)):22 2k(18.54,18.5l,18.4B));19 k.6F(k.1y(18,"9d"),1r,k.6a(18))}});u 9D(1s,9C){$.23(1s,9C);1S(p 4s in 9C){if(9C[4s]==1n||9C[4s]==2i){1s[4s]=9C[4s]}}19 1s}u ja(a){19(a&&(($.2j.bL&&2E a=="7z"&&a.1t)||(a.4N&&a.4N.7k().3U(/\\a2\\(\\)/))))}$.fn.1o=u(v){if(!$.1o.dG){$(1l.1Y).5g($.1o.30).5d($.1o.jb);$.1o.dG=1q}p dP=a2.5k.7Q.1O(1T,1);if(2E v=="4w"&&(v=="n1"||v=="3u")){19 $.1o["9M"+v+"bF"].1K($.1o,[k[0]].6l(dP))}19 k.1E(u(){2E v=="4w"?$.1o["9M"+v+"bF"].1K($.1o,[k].6l(dP)):$.1o.je(k,v)})};$.1o=22 bF();$.1o.dG=1h;$.1o.by=22 2k().6g()})(1L);(u(B){p A=0;B.3T("1a.7R",{57:u(){p C=k,D=k.v;k.1d.1x("1a-7R").1M("2o.7R",u(E){(!C.1I&&D.2o&&D.2o.1K(k,[E,{v:C.v,3R:C.3R[0],nW:C.3R[1]}]))});if(!(/^(r|a)/).1P(k.1d.1e("1p"))){k.1d.1e("1p","2C")}k.2b=[];k.1d.2O(D.2b).1E(u(){p E=B(k);C.2b.4o([k,E.1i(),[E.1f(),E.1g()],(D.iX?E.1p():1n)]);(D.1Z&&E.1e("1Z",D.1Z.1V))});(D.iX&&B.1E(k.2b,u(){B(k[0]).1e({1p:"2H",1c:k[3].1c,1b:k[3].1b})}));k.6q=++A;B(1l).1M("6Y.7R"+k.6q,u(E){(C.1I||C.iU.1K(C,[E]))});k.pp=k.1d.1i()},3s:u(){k.dK();k.1d.1G("1a-7R 1a-7R-1I").2G(".7R");B(1l).2G("6Y.7R"+k.6q)},8G:u(){k.dK();B.3T.5k.8G.1K(k,1T)},dK:u(C){p D=k.v;B.1E(k.2b,u(){p E=k;B(E[0]).1e({1f:E[2][0],1g:E[2][1],1c:(E[3]?E[3].1c:0),1b:(E[3]?E[3].1b:0)});(D.1Z&&B(E[0]).1e("1Z",D.1Z.1V));(D.2U&&B(E[0]).1e("z-3J",""))})},iU:u(G){p F=[G.3z,G.3f],H=k.v,J,I=1;k.3R=k.2b[0];p C=((F[0]>k.pp.1b-H.3G)&&(F[0]<k.pp.1b+k.1d[0].4D+H.3G)&&(F[1]>k.pp.1c-H.3G)&&(F[1]<k.pp.1c+k.1d[0].3D+H.3G));if(!C){19 1h}1S(p E=0;E<k.2b.1t;E++){J=k.2b[E];p D=I;if(!H.2P){I=1k.9s(1k.6n(F[0]-((J[3]?k.pp.1b:J[1].1b)+1m(J[0].2Q.1b,10))-(J[0].4D/2),2)+1k.6n(F[1]-((J[3]?k.pp.1c:J[1].1c)+1m(J[0].2Q.1c,10))-(J[0].3D/2),2))}1j{if(H.2P=="y"){I=1k.3Y(F[1]-((J[3]?k.pp.1c:J[1].1c)+1m(J[0].2Q.1c,10))-(J[0].3D/2))}1j{I=1k.3Y(F[0]-((J[3]?k.pp.1b:J[1].1b)+1m(J[0].2Q.1b,10))-(J[0].4D/2))}}if(I<H.3G){k.3R=I<D?J:k.3R;if(!H.2P||H.2P!="y"){B(J[0]).1e({1f:J[2][0]+(J[2][0]*(H.7N-1))-(((I/H.3G)*J[2][0])*(H.7N-1)),1b:(J[3]?(J[3].1b+H.j0*((J[2][1]*(H.7N-1))-(((I/H.3G)*J[2][1])*(H.7N-1)))):0)})}if(!H.2P||H.2P!="x"){B(J[0]).1e({1g:J[2][1]+(J[2][1]*(H.7N-1))-(((I/H.3G)*J[2][1])*(H.7N-1)),1c:(J[3]?J[3].1c:0)+(H.j2-0.5)*((J[2][0]*(H.7N-1))-(((I/H.3G)*J[2][0])*(H.7N-1)))})}if(H.1Z){B(J[0]).1e("1Z",H.1Z.1H-(I/H.3G)<H.1Z.1V?H.1Z.1V:H.1Z.1H-(I/H.3G))}}1j{B(J[0]).1e({1f:J[2][0],1g:J[2][1],1c:(J[3]?J[3].1c:0),1b:(J[3]?J[3].1b:0)});(H.1Z&&B(J[0]).1e("1Z",H.1Z.1V))}(H.2U&&B(J[0]).1e("z-3J",""))}(H.2U&&B(k.3R[0]).1e("z-3J",H.2U))}});B.23(B.1a.7R,{4k:{3G:3B,7N:2,j2:0,j0:-0.5,2b:"> *"}})})(1L);(u(A){A.3T("1a.4S",{57:u(){k.kN=k.v.bO;p B=k,C=k.v,E=(22 2k()).6g()+1k.oT(),D=C.4C||"0%";k.1d.1x("1a-4S").1f(C.1f);A.23(k,{4d:1h,ap:0,aq:0,6q:E,67:A(\'<1v 2e="1a-4S-67 1a-3h"></1v>\').1e({1f:"3y",2W:"3h",2U:2c}),8f:A(\'<1v 2e="1a-4S-4C"></1v>\').2z(D).1e({1f:"3y",2W:"3h"}),eT:A(\'<1v 2e="1a-4S-4C 1a-4S-4C-oX"></1v>\').2z(D).1e({1f:k.1d.1f()}),bM:A(\'<1v 2e="1a-4S-7U"></1v>\')});k.bM.5g(k.67.5g(k.8f.1x(C.kU)),k.eT).31(k.1d)},6B:{},1a:u(B){19{2q:k,6q:k.6q,v:k.v,1d:k.67,8f:k.8f,ap:k.ap,aq:k.aq}},24:u(C,B){A.1a.2Y.1O(k,C,[B,k.1a()]);k.1d.3x(C=="4S"?C:["4S",C].6M(""),[B,k.1a()],k.v[C])},3s:u(){k.3d();k.1d.1G("1a-4S 1a-4S-1I").4r("4S").2G(".4S").2O(".1a-4S-7U").2m();kO 1L.2g[k.6q]},9P:u(){k.1d.1G("1a-4S-1I");k.1I=1h},8G:u(){k.1d.1x("1a-4S-1I");k.1I=1q},2A:u(){p B=k,C=k.v;if(k.1I){19}1L.2g[k.6q]=u(K,L,J,I,H){p G=C.kW,E=C.1f,F=((G>E?E:G)/E),D=1k.2T(K/F)*F;19 D>1?1:D};B.4d=1q;5E(u(){B.4d=1h},C.1W);k.dt();k.24("2A",k.1a());19 1h},dt:u(){p C=k,D=k.v,B=D.bO;k.67.26({1f:D.1f},{1W:B,2g:k.6q,dv:u(G,E){C.f5((G/D.1f)*2c);p H=22 2k().6g(),F=(H-E.oO);D.bO=B-F},6K:u(){kO 1L.2g[C.6q];C.f3();if(C.4d){}}})},f3:u(){if(k.1I){19}k.67.3d();k.24("f3",k.1a())},3d:u(){k.67.3d();k.67.1f(0);k.8f.1f(0);k.67.1x("1a-3h");k.v.bO=k.kN;k.24("3d",k.1a())},4C:u(B){k.8f.2z(B);k.eT.2z(B)},f5:u(B){if(k.67.is(".1a-3h")){k.67.1G("1a-3h")}k.aq=B>2c?2c:B;k.ap=(k.aq/2c)*k.v.1f;k.67.1f(k.ap);k.8f.1f(k.ap);if(k.v.ag&&!k.v.4C){k.8f.2z(1k.2T(k.aq)+"%")}k.24("f5",k.1a())}});A.1a.4S.4k={1f:bP,1W:oK,bO:be,kW:1,ag:1q,4C:"",1x:"",kU:""}})(1L);(u(A){A.3T("1a.2d",{57:u(){if(A.1w(k.1d[0],"2d")){19}if(k.v.kg){k.v.kg(k.1a(1n))}k.eI=0;if(k.v.3F.7k().4O(".")!=-1){p C=k.v.3F.7k();k.eI=C.7Q(C.4O(".")+1,C.1t).1t}p B=k;k.1d.1x("1a-2d-f1").2S("4q","fc");k.7A(5s(k.69())?k.v.2A:k.69());k.1d.7U("<1v>").1B().1x("1a-2d").5g(\'<43 2e="1a-2d-4U" 4h="43">&#oY;</43>\').2O(".1a-2d-4U").1M("5d",u(D){A(k).1x("1a-2d-5X");if(!B.3v){B.3v=1}B.cX(2c,"9p",D)}).1M("5V",u(D){A(k).1G("1a-2d-5X");if(B.3v==1){B.9p(D)}B.b9(D)}).1M("k2",u(D){A(k).1G("1a-2d-5X");B.b9(D)}).1M("k5",u(D){A(k).1G("1a-2d-5X");B.9p(D)}).1M("5Z.2d",u(E){p D=A.2w;if(E.2w==D.ev||E.2w==D.ey){A(k).1x("1a-2d-5X");if(!B.3v){B.3v=1}B.9p.1O(B,E)}1j{if(E.2w==D.b2||E.2w==D.eK){B.1d.62(".1a-2d-5c").3e()}1j{if(E.2w==D.dw){B.1d.3e()}}}}).1M("ez.2d",u(D){A(k).1G("1a-2d-5X");B.3v=0;B.24("5z",D)}).3l().5g(\'<43 2e="1a-2d-5c" 4h="43">&#oZ;</43>\').2O(".1a-2d-5c").1M("5d",u(D){A(k).1x("1a-2d-5X");if(!B.3v){B.3v=1}B.cX(2c,"9q",D)}).1M("5V",u(D){A(k).1G("1a-2d-5X");if(B.3v==1){B.9q()}B.b9(D)}).1M("k2",u(D){A(k).1G("1a-2d-5X");B.b9(D)}).1M("k5",u(D){A(k).1G("1a-2d-5X");B.9q(D)}).1M("5Z.2d",u(E){p D=A.2w;if(E.2w==D.ev||E.2w==D.ey){A(k).1x("1a-2d-5X");if(!B.3v){B.3v=1}B.9q.1O(B,E)}1j{if(E.2w==D.b3||E.2w==D.dw){B.1d.62(".1a-2d-4U").3e()}}}).1M("ez.2d",u(D){A(k).1G("1a-2d-5X");B.3v=0;B.24("5z",D)}).3l();k.de=k.1d.9U().1t;if(k.de>1){k.1d.1x("1a-2d-ep").1e("1g",k.1d.3p()/k.de).9U().1x("1a-2d-gN").3l().1B().1e("1g",k.1d.3p()).3l();k.v.3F=1;k.v.1V=0;k.v.1H=k.de-1}k.1d.1M("5Z.2d",u(D){if(!B.3v){B.3v=1}19 B.d1.1O(B,D)}).1M("ez.2d",u(D){B.3v=0;B.24("5z",D)}).1M("7u.2d",u(D){B.kr()});if(A.fn.eA){k.1d.eA(u(D,E){B.hi(D,E)})}},et:u(){if(k.v.1V!=2i&&k.69()<k.v.1V){k.7A(k.v.1V)}if(k.v.1H!=2i&&k.69()>k.v.1H){k.7A(k.v.1H)}},kr:u(){k.7A(k.69());k.et()},en:u(C,B){if(k.1I){19}if(5s(k.69())){k.7A(k.v.2A)}k.7A(k.69()+(C=="4U"?1:-1)*(k.v.i4&&k.3v>2c?(k.3v>be?2c:10):1)*k.v.3F);k.dt(C);k.et();if(k.3v){k.3v++}k.24("eB",B)},9q:u(B){k.en("5c",B);k.24("5c",B)},9p:u(B){k.en("4U",B);k.24("4U",B)},cX:u(C,E,D){p B=k;C=C||2c;if(k.b8){3o.eo(k.b8)}k.b8=3o.ku(u(){B[E](D);if(B.3v>20){B.cX(20,E,D)}},C)},b9:u(B){k.3v=0;if(k.b8){3o.eo(k.b8)}k.1d[0].3e();k.24("5z",B)},d1:u(C){p B=A.2w;if(C.2w==B.b3){k.9p(C)}if(C.2w==B.b2){k.9q(C)}if(C.2w==B.ko){k.7A(k.v.1V||k.v.2A)}if(C.2w==B.km&&k.v.1H!=2i){k.7A(k.v.1H)}19(C.2w==B.b1||C.2w==B.dx||C.2w==B.dw||C.2w==B.eK||C.2w==B.k9||C.2w==B.kf||C.2w==B.ke||(C.2w>=96&&C.2w<=p9)||(/[0-9\\-\\.]/).1P(9O.gA(C.2w)))?1q:1h},hi:u(B,C){C=(A.2j.63?-C/1k.3Y(C):C);C>0?k.9p(B):k.9q(B);B.6X()},69:u(){19 a4(k.1d.2v().5m(/[^0-9\\-\\.]/g,""))},7A:u(B){if(5s(B)){B=k.v.2A}k.1d.2v(k.v.bi?A.1a.2d.3E.bi(B,k.v.bi):A.1a.2d.3E.8A(B,k.eI))},dt:u(B){if(k.1d.4n("1a-2d-ep")&&((B=="4U"&&k.69()<=k.v.1H)||(B=="5c"&&k.69()>=k.v.1V))){k.1d.26({8u:"-"+k.69()*k.1d.3p()},{1W:"ds",3V:1h})}},gT:u(B){if(!k.1d.is("1z")){p C="1v";if(k.1d.is("ol")||k.1d.is("h1")){C="li"}k.1d.5g("<"+C+\' 2e="1a-2d-gC">\'+B+"</"+C+">")}},6B:{},1a:u(B){19{v:k.v,1d:k.1d,1X:k.69(),2l:k.gT}},24:u(C,B){A.1a.2Y.1O(k,C,[B,k.1a()]);19 k.1d.3x(C=="eB"?C:"eB"+C,[B,k.1a()],k.v[C])},3s:u(){if(!A.1w(k.1d[0],"2d")){19}if(A.fn.eA){k.1d.oE()}k.1d.1G("1a-2d-f1 1a-2d-ep").bm("1I").bm("4q").4r("2d").2G(".2d").62().2m().3l().9U().1G("1a-2d-gN").2m(".1a-2d-gC").3l().1B().1G("1a-2d 1a-2d-1I").da(k.1d.84()).2m().3l()},9P:u(){k.1d.bm("1I").62().bm("1I").1B().1G("1a-2d-1I");k.1I=1h},8G:u(){k.1d.2S("1I",1q).62().2S("1I",1q).1B().1x("1a-2d-1I");k.1I=1q}});A.23(A.1a.2d,{4k:{3F:1,2A:0,i4:1q,bi:1h},3E:{8A:u(B,C){19 k.2T(B,C)},bi:u(C,B){19(C!==1k.3Y(C)?"-":"")+B+k.2T(1k.3Y(C),2)},2T:u(B,D){p C=1k.2T(a4(B)*1k.6n(10,D))/1k.6n(10,D);if(D>0){C=C+((C.7k().4O(".")==-1)?".":"")+"o8";C=C.hZ(0,C.4O(".")+1+D)}1j{C=1k.2T(C)}19 C}}})})(1L);(u(C){C.1A=C.1A||{};C.23(C.1A,{6O:u(F,G){1S(p E=0;E<G.1t;E++){if(G[E]!==1n){C.1w(F[0],"ec.hS."+G[E],F[0].2Q[G[E]])}}},5q:u(F,G){1S(p E=0;E<G.1t;E++){if(G[E]!==1n){F.1e(G[E],C.1w(F[0],"ec.hS."+G[E]))}}},5n:u(E,F){if(F=="6o"){F=E.is(":3h")?"1N":"1Q"}19 F},i5:u(F,G){p H,E;6d(F[0]){1J"1c":H=0;1R;1J"bs":H=0.5;1R;1J"3X":H=1;1R;4Y:H=F[0]/G.1g}6d(F[1]){1J"1b":E=0;1R;1J"9r":E=0.5;1R;1J"3O":E=1;1R;4Y:E=F[1]/G.1f}19{x:E,y:H}},7p:u(F){if(F.1B().2S("id")=="dC"){19 F}p E={1f:F.4b({4P:1q}),1g:F.3p({4P:1q}),"eX":F.1e("eX")};F.7U(\'<1v id="dC" 2Q="o0-1D:2c%;bv:7C;dj:6m;4P:0;bt:0"></1v>\');p I=F.1B();if(F.1e("1p")=="7x"){I.1e({1p:"2C"});F.1e({1p:"2C"})}1j{p H=F.1e("1c");if(5s(1m(H))){H="4c"}p G=F.1e("1b");if(5s(1m(G))){G="4c"}I.1e({1p:F.1e("1p"),1c:H,1b:G,2U:F.1e("z-3J")}).1N();F.1e({1p:"2C",1c:0,1b:0})}I.1e(E);19 I},7b:u(E){if(E.1B().2S("id")=="dC"){19 E.1B().o3(E)}19 E},6p:u(F,G,E,H){H=H||{};C.1E(G,u(J,I){df=F.hw(I);if(df[0]>0){H[I]=df[0]*E+df[1]}});19 H},bb:u(G,H,J,I){p E=(2E J=="u"?J:(I?I:1n));p F=(2E J=="7z"?J:1n);19 k.1E(u(){p O={};p M=C(k);p N=M.2S("2Q")||"";if(2E N=="7z"){N=N.eh}if(G.6o){M.4n(G.6o)?G.2m=G.6o:G.2l=G.6o}p K=C.23({},(1l.d7?1l.d7.hy(k,1n):k.hx));if(G.2l){M.1x(G.2l)}if(G.2m){M.1G(G.2m)}p L=C.23({},(1l.d7?1l.d7.hy(k,1n):k.hx));if(G.2l){M.1G(G.2l)}if(G.2m){M.1x(G.2m)}1S(p P in L){if(2E L[P]!="u"&&L[P]&&P.4O("o5")==-1&&P.4O("1t")==-1&&L[P]!=K[P]&&(P.3U(/2h/i)||(!P.3U(/2h/i)&&!5s(1m(L[P],10))))&&(K.1p!="7x"||(K.1p=="7x"&&!P.3U(/1b|1c|3X|3O/)))){O[P]=L[P]}}M.26(O,H,F,u(){if(2E C(k).2S("2Q")=="7z"){C(k).2S("2Q")["eh"]="";C(k).2S("2Q")["eh"]=N}1j{C(k).2S("2Q",N)}if(G.2l){C(k).1x(G.2l)}if(G.2m){C(k).1G(G.2m)}if(E){E.1K(k,1T)}})})}});C.fn.23({cV:C.fn.1N,dh:C.fn.1Q,hH:C.fn.6o,hF:C.fn.1x,hC:C.fn.1G,ho:C.fn.d5,6k:u(E,G,F,H){19 C.1A[E]?C.1A[E].1O(k,{oz:E,v:G||{},1W:F,2X:H}):1n},1N:u(){if(!1T[0]||(1T[0].4N==94||/(dn|bd|ds)/.1P(1T[0]))){19 k.cV.1K(k,1T)}1j{p E=1T[1]||{};E.3j="1N";19 k.6k.1K(k,[1T[0],E,1T[2]||E.1W,1T[3]||E.2X])}},1Q:u(){if(!1T[0]||(1T[0].4N==94||/(dn|bd|ds)/.1P(1T[0]))){19 k.dh.1K(k,1T)}1j{p E=1T[1]||{};E.3j="1Q";19 k.6k.1K(k,[1T[0],E,1T[2]||E.1W,1T[3]||E.2X])}},6o:u(){if(!1T[0]||(1T[0].4N==94||/(dn|bd|ds)/.1P(1T[0]))||(1T[0].4N==oA)){19 k.hH.1K(k,1T)}1j{p E=1T[1]||{};E.3j="6o";19 k.6k.1K(k,[1T[0],E,1T[2]||E.1W,1T[3]||E.2X])}},1x:u(F,E,H,G){19 E?C.1A.bb.1K(k,[{2l:F},E,H,G]):k.hF(F)},1G:u(F,E,H,G){19 E?C.1A.bb.1K(k,[{2m:F},E,H,G]):k.hC(F)},d5:u(F,E,H,G){19 E?C.1A.bb.1K(k,[{6o:F},E,H,G]):k.ho(F)},hm:u(E,G,F,I,H){19 C.1A.bb.1K(k,[{2l:G,2m:E},F,I,H])},oB:u(){19 k.hm.1K(k,1T)},hw:u(E){p F=k.1e(E),G=[];C.1E(["em","px","%","pt"],u(H,I){if(F.4O(I)>0){G=[a4(F),I]}});19 G}});1L.1E(["7a","ov","ou","oo","om","2h","ok"],u(F,E){1L.fx.dv[E]=u(G){if(G.ia==0){G.2A=D(G.ib,E);G.3l=B(G.3l)}G.ib.2Q[E]="5o("+[1k.1H(1k.1V(1m((G.2M*(G.3l[0]-G.2A[0]))+G.2A[0]),2s),0),1k.1H(1k.1V(1m((G.2M*(G.3l[1]-G.2A[1]))+G.2A[1]),2s),0),1k.1H(1k.1V(1m((G.2M*(G.3l[2]-G.2A[2]))+G.2A[2]),2s),0)].6M(",")+")"}});u B(F){p E;if(F&&F.4N==a2&&F.1t==3){19 F}if(E=/5o\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.89(F)){19[1m(E[1]),1m(E[2]),1m(E[3])]}if(E=/5o\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.89(F)){19[a4(E[1])*2.55,a4(E[2])*2.55,a4(E[3])*2.55]}if(E=/#([a-fA-a6-9]{2})([a-fA-a6-9]{2})([a-fA-a6-9]{2})/.89(F)){19[1m(E[1],16),1m(E[2],16),1m(E[3],16)]}if(E=/#([a-fA-a6-9])([a-fA-a6-9])([a-fA-a6-9])/.89(F)){19[1m(E[1]+E[1],16),1m(E[2]+E[2],16),1m(E[3]+E[3],16)]}if(E=/gG\\(0, 0, 0, 0\\)/.89(F)){19 A.7C}19 A[1L.ad(F).4T()]}u D(G,E){p F;do{F=1L.or(G,E);if(F!=""&&F!="7C"||1L.3n(G,"1Y")){1R}E="7a"}4V(G=G.3g);19 B(F)}p A={os:[0,2s,2s],ot:[dy,2s,2s],oq:[ip,ip,op],ii:[0,0,0],oC:[0,0,2s],oD:[kH,42,42],ow:[0,2s,2s],ox:[0,0,9R],oy:[0,9R,9R],oj:[dF,dF,dF],oi:[0,2c,0],o4:[o6,o2,eS],nY:[9R,0,9R],nZ:[85,eS,47],o1:[2s,g2,0],o7:[oe,50,og],oh:[9R,0,0],od:[oc,3B,o9],oa:[ob,0,dc],oF:[2s,0,2s],p5:[2s,p6,0],p7:[0,7E,0],p4:[75,0,p3],p0:[dy,gw,g2],p1:[p2,p8,gw],pf:[ky,2s,2s],pg:[kv,ph,kv],pe:[dc,dc,dc],pd:[2s,pa,pb],pc:[2s,2s,ky],oL:[0,2s,0],oM:[2s,0,2s],oN:[7E,0,0],oJ:[0,0,7E],oG:[7E,7E,0],oH:[2s,kH,0],oI:[2s,dg,oP],oV:[7E,0,7E],oW:[7E,0,7E],oU:[2s,0,0],oQ:[dg,dg,dg],oR:[2s,2s,2s],oS:[2s,2s,0],7C:[2s,2s,2s]};1L.2g.nX=1L.2g.bA;1L.23(1L.2g,{iW:"j5",bA:u(F,G,E,I,H){19 1L.2g[1L.2g.iW](F,G,E,I,H)},n2:u(F,G,E,I,H){19 I*(G/=H)*G+E},j5:u(F,G,E,I,H){19-I*(G/=H)*(G-2)+E},n3:u(F,G,E,I,H){if((G/=H/2)<1){19 I/2*G*G+E}19-I/2*((--G)*(G-2)-1)+E},n4:u(F,G,E,I,H){19 I*(G/=H)*G*G+E},n0:u(F,G,E,I,H){19 I*((G=G/H-1)*G*G+1)+E},mX:u(F,G,E,I,H){if((G/=H/2)<1){19 I/2*G*G*G+E}19 I/2*((G-=2)*G*G+2)+E},mY:u(F,G,E,I,H){19 I*(G/=H)*G*G*G+E},mZ:u(F,G,E,I,H){19-I*((G=G/H-1)*G*G*G-1)+E},n5:u(F,G,E,I,H){if((G/=H/2)<1){19 I/2*G*G*G*G+E}19-I/2*((G-=2)*G*G*G-2)+E},n6:u(F,G,E,I,H){19 I*(G/=H)*G*G*G*G+E},nc:u(F,G,E,I,H){19 I*((G=G/H-1)*G*G*G*G+1)+E},nd:u(F,G,E,I,H){if((G/=H/2)<1){19 I/2*G*G*G*G*G+E}19 I/2*((G-=2)*G*G*G*G+2)+E},nf:u(F,G,E,I,H){19-I*1k.iD(G/H*(1k.73/2))+I+E},nb:u(F,G,E,I,H){19 I*1k.aM(G/H*(1k.73/2))+E},na:u(F,G,E,I,H){19-I/2*(1k.iD(1k.73*G/H)-1)+E},n7:u(F,G,E,I,H){19(G==0)?E:I*1k.6n(2,10*(G/H-1))+E},n8:u(F,G,E,I,H){19(G==H)?E+I:I*(-1k.6n(2,-10*G/H)+1)+E},n9:u(F,G,E,I,H){if(G==0){19 E}if(G==H){19 E+I}if((G/=H/2)<1){19 I/2*1k.6n(2,10*(G-1))+E}19 I/2*(-1k.6n(2,-10*--G)+2)+E},mW:u(F,G,E,I,H){19-I*(1k.9s(1-(G/=H)*G)-1)+E},mV:u(F,G,E,I,H){19 I*1k.9s(1-(G=G/H-1)*G)+E},mI:u(F,G,E,I,H){if((G/=H/2)<1){19-I/2*(1k.9s(1-G*G)-1)+E}19 I/2*(1k.9s(1-(G-=2)*G)+1)+E},mJ:u(F,H,E,L,K){p I=1.ai;p J=0;p G=L;if(H==0){19 E}if((H/=K)==1){19 E+L}if(!J){J=K*0.3}if(G<1k.3Y(L)){G=L;p I=J/4}1j{p I=J/(2*1k.73)*1k.e1(L/G)}19-(G*1k.6n(2,10*(H-=1))*1k.aM((H*K-I)*(2*1k.73)/J))+E},mK:u(F,H,E,L,K){p I=1.ai;p J=0;p G=L;if(H==0){19 E}if((H/=K)==1){19 E+L}if(!J){J=K*0.3}if(G<1k.3Y(L)){G=L;p I=J/4}1j{p I=J/(2*1k.73)*1k.e1(L/G)}19 G*1k.6n(2,-10*H)*1k.aM((H*K-I)*(2*1k.73)/J)+L+E},mH:u(F,H,E,L,K){p I=1.ai;p J=0;p G=L;if(H==0){19 E}if((H/=K/2)==2){19 E+L}if(!J){J=K*(0.3*1.5)}if(G<1k.3Y(L)){G=L;p I=J/4}1j{p I=J/(2*1k.73)*1k.e1(L/G)}if(H<1){19-0.5*(G*1k.6n(2,10*(H-=1))*1k.aM((H*K-I)*(2*1k.73)/J))+E}19 G*1k.6n(2,-10*(H-=1))*1k.aM((H*K-I)*(2*1k.73)/J)*0.5+L+E},mF:u(F,G,E,J,I,H){if(H==2i){H=1.ai}19 J*(G/=I)*G*((H+1)*G-H)+E},mL:u(F,G,E,J,I,H){if(H==2i){H=1.ai}19 J*((G=G/I-1)*G*((H+1)*G+H)+1)+E},mM:u(F,G,E,J,I,H){if(H==2i){H=1.ai}if((G/=I/2)<1){19 J/2*(G*G*(((H*=(1.jJ))+1)*G-H))+E}19 J/2*((G-=2)*G*(((H*=(1.jJ))+1)*G+H)+2)+E},jA:u(F,G,E,I,H){19 I-1L.2g.g7(F,H-G,0,I,H)+E},g7:u(F,G,E,I,H){if((G/=H)<(1/2.75)){19 I*(7.d8*G*G)+E}1j{if(G<(2/2.75)){19 I*(7.d8*(G-=(1.5/2.75))*G+0.75)+E}1j{if(G<(2.5/2.75)){19 I*(7.d8*(G-=(2.25/2.75))*G+0.mS)+E}1j{19 I*(7.d8*(G-=(2.mU/2.75))*G+0.mR)+E}}}},mQ:u(F,G,E,I,H){if(G<H/2){19 1L.2g.jA(F,G*2,0,I,H)*0.5+E}19 1L.2g.g7(F,G*2-H,0,I,H)*0.5+I*0.5+E}})})(1L);(u(A){A.1A.nh=u(B){19 k.3V(u(){p D=A(k),C=["1p","1c","1b"];p H=A.1A.5n(D,B.v.3j||"1Q");p G=B.v.7P||"4L";A.1A.6O(D,C);D.1N();p J=A.1A.7p(D).1e({2W:"3h"});p E=(G=="4L")?"1g":"1f";p I=(G=="4L")?J.1g():J.1f();if(H=="1N"){J.1e(E,0)}p F={};F[E]=H=="1N"?I:0;J.26(F,B.1W,B.v.2g,u(){if(H=="1Q"){D.1Q()}A.1A.5q(D,C);A.1A.7b(D);if(B.2X){B.2X.1K(D[0],1T)}D.4Z()})})}})(1L);(u(A){A.1A.nJ=u(B){19 k.3V(u(){p E=A(k),K=["1p","1c","1b"];p J=A.1A.5n(E,B.v.3j||"6k");p M=B.v.7P||"4U";p C=B.v.3G||20;p D=B.v.fT||5;p G=B.1W||nK;if(/1N|1Q/.1P(J)){K.4o("1Z")}A.1A.6O(E,K);E.1N();A.1A.7p(E);p F=(M=="4U"||M=="5c")?"1c":"1b";p O=(M=="4U"||M=="1b")?"2M":"cn";p C=B.v.3G||(F=="1c"?E.3p({4P:1q})/3:E.4b({4P:1q})/3);if(J=="1N"){E.1e("1Z",0).1e(F,O=="2M"?-C:C)}if(J=="1Q"){C=C/(D*2)}if(J!="1Q"){D--}if(J=="1N"){p H={1Z:1};H[F]=(O=="2M"?"+=":"-=")+C;E.26(H,G/2,B.v.2g);C=C/2;D--}1S(p I=0;I<D;I++){p N={},L={};N[F]=(O=="2M"?"-=":"+=")+C;L[F]=(O=="2M"?"+=":"-=")+C;E.26(N,G/2,B.v.2g).26(L,G/2,B.v.2g);C=(J=="1Q")?C*2:C/2}if(J=="1Q"){p H={1Z:0};H[F]=(O=="2M"?"-=":"+=")+C;E.26(H,G/2,B.v.2g,u(){E.1Q();A.1A.5q(E,K);A.1A.7b(E);if(B.2X){B.2X.1K(k,1T)}})}1j{p N={},L={};N[F]=(O=="2M"?"-=":"+=")+C;L[F]=(O=="2M"?"+=":"-=")+C;E.26(N,G/2,B.v.2g).26(L,G/2,B.v.2g,u(){A.1A.5q(E,K);A.1A.7b(E);if(B.2X){B.2X.1K(k,1T)}})}E.3V("fx",u(){E.4Z()});E.4Z()})}})(1L);(u(A){A.1A.nL=u(B){19 k.3V(u(){p F=A(k),J=["1p","1c","1b","1g","1f"];p I=A.1A.5n(F,B.v.3j||"1Q");p K=B.v.7P||"4L";A.1A.6O(F,J);F.1N();p C=A.1A.7p(F).1e({2W:"3h"});p E=F[0].52=="nH"?C:F;p G={1D:(K=="4L")?"1g":"1f",1p:(K=="4L")?"1c":"1b"};p D=(K=="4L")?E.1g():E.1f();if(I=="1N"){E.1e(G.1D,0);E.1e(G.1p,D/2)}p H={};H[G.1D]=I=="1N"?D:0;H[G.1p]=I=="1N"?0:D/2;E.26(H,{3V:1h,1W:B.1W,2g:B.v.2g,6K:u(){if(I=="1Q"){F.1Q()}A.1A.5q(F,J);A.1A.7b(F);if(B.2X){B.2X.1K(F[0],1T)}F.4Z()}})})}})(1L);(u(A){A.1A.7K=u(B){19 k.3V(u(){p E=A(k),D=["1p","1c","1b","1Z"];p I=A.1A.5n(E,B.v.3j||"1Q");p H=B.v.7P||"1b";A.1A.6O(E,D);E.1N();A.1A.7p(E);p F=(H=="4U"||H=="5c")?"1c":"1b";p C=(H=="4U"||H=="1b")?"2M":"cn";p J=B.v.3G||(F=="1c"?E.3p({4P:1q})/2:E.4b({4P:1q})/2);if(I=="1N"){E.1e("1Z",0).1e(F,C=="2M"?-J:J)}p G={1Z:I=="1N"?1:0};G[F]=(I=="1N"?(C=="2M"?"+=":"-="):(C=="2M"?"-=":"+="))+J;E.26(G,{3V:1h,1W:B.1W,2g:B.v.2g,6K:u(){if(I=="1Q"){E.1Q()}A.1A.5q(E,D);A.1A.7b(E);if(B.2X){B.2X.1K(k,1T)}E.4Z()}})})}})(1L);(u(A){A.1A.fl=u(B){19 k.3V(u(){p I=B.v.cQ?1k.2T(1k.9s(B.v.cQ)):3;p E=B.v.cQ?1k.2T(1k.9s(B.v.cQ)):3;B.v.3j=B.v.3j=="6o"?(A(k).is(":4j")?"1Q":"1N"):B.v.3j;p H=A(k).1N().1e("ah","3h");p J=H.1i();J.1c-=1m(H.1e("8u"))||0;J.1b-=1m(H.1e("93"))||0;p G=H.4b(1q);p C=H.3p(1q);1S(p F=0;F<I;F++){1S(p D=0;D<E;D++){H.84().31("1Y").7U("<1v></1v>").1e({1p:"2H",ah:"4j",1b:-D*(G/E),1c:-F*(C/I)}).1B().1x("1A-fl").1e({1p:"2H",2W:"3h",1f:G/E,1g:C/I,1b:J.1b+D*(G/E)+(B.v.3j=="1N"?(D-1k.aL(E/2))*(G/E):0),1c:J.1c+F*(C/I)+(B.v.3j=="1N"?(F-1k.aL(I/2))*(C/I):0),1Z:B.v.3j=="1N"?0:1}).26({1b:J.1b+D*(G/E)+(B.v.3j=="1N"?0:(D-1k.aL(E/2))*(G/E)),1c:J.1c+F*(C/I)+(B.v.3j=="1N"?0:(F-1k.aL(I/2))*(C/I)),1Z:B.v.3j=="1N"?1:0},B.1W||aX)}}5E(u(){B.v.3j=="1N"?H.1e({ah:"4j"}):H.1e({ah:"4j"}).1Q();if(B.2X){B.2X.1K(H[0])}H.4Z();A(".1A-fl").2m()},B.1W||aX)})}})(1L);(u(A){A.1A.nm=u(B){19 k.3V(u(){p E=A(k),J=["1p","1c","1b"];p G=A.1A.5n(E,B.v.3j||"1Q");p N=B.v.1D||15;p M=!(!B.v.ni);A.1A.6O(E,J);E.1N();p D=A.1A.7p(E).1e({2W:"3h"});p H=((G=="1N")!=M);p F=H?["1f","1g"]:["1g","1f"];p C=H?[D.1f(),D.1g()]:[D.1g(),D.1f()];p I=/([0-9]+)%/.89(N);if(I){N=1m(I[1])/2c*C[G=="1Q"?0:1]}if(G=="1N"){D.1e(M?{1g:0,1f:N}:{1g:N,1f:0})}p L={},K={};L[F[0]]=G=="1N"?C[0]:N;K[F[1]]=G=="1N"?C[1]:0;D.26(L,B.1W/2,B.v.2g).26(K,B.1W/2,B.v.2g,u(){if(G=="1Q"){E.1Q()}A.1A.5q(E,J);A.1A.7b(E);if(B.2X){B.2X.1K(E[0],1T)}E.4Z()})})}})(1L);(u(A){A.1A.bJ=u(B){19 k.3V(u(){p E=A(k),D=["eb","7a","1Z"];p H=A.1A.5n(E,B.v.3j||"1N");p C=B.v.2h||"#ny";p G=E.1e("7a");A.1A.6O(E,D);E.1N();E.1e({eb:"6m",7a:C});p F={7a:G};if(H=="1Q"){F.1Z=0}E.26(F,{3V:1h,1W:B.1W,2g:B.v.2g,6K:u(){if(H=="1Q"){E.1Q()}A.1A.5q(E,D);if(H=="1N"&&1L.2j.44){k.2Q.nu("3H")}if(B.2X){B.2X.1K(k,1T)}E.4Z()}})})}})(1L);(u(A){A.1A.pi=u(B){19 k.3V(u(){p D=A(k);p F=A.1A.5n(D,B.v.3j||"1N");p E=B.v.fT||5;if(F=="1Q"){E--}if(D.is(":3h")){D.1e("1Z",0);D.1N();D.26({1Z:1},B.1W/2,B.v.2g);E=E-2}1S(p C=0;C<E;C++){D.26({1Z:0},B.1W/2,B.v.2g).26({1Z:1},B.1W/2,B.v.2g)}if(F=="1Q"){D.26({1Z:0},B.1W/2,B.v.2g,u(){D.1Q();if(B.2X){B.2X.1K(k,1T)}})}1j{D.26({1Z:0},B.1W/2,B.v.2g).26({1Z:1},B.1W/2,B.v.2g,u(){if(B.2X){B.2X.1K(k,1T)}})}D.3V("fx",u(){D.4Z()});D.4Z()})}})(1L);(u(A){A.1A.qp=u(B){19 k.3V(u(){p F=A(k);p C=A.23(1q,{},B.v);p H=A.1A.5n(F,B.v.3j||"1Q");p G=1m(B.v.cO)||3B;C.gY=1q;p E={1g:F.1g(),1f:F.1f()};p D=G/2c;F.2t=(H=="1Q")?E:{1g:E.1g*D,1f:E.1f*D};C.2t=F.2t;C.cO=(H=="1Q")?G:2c;C.3j=H;F.6k("f7",C,B.1W,B.2X);F.4Z()})};A.1A.f7=u(B){19 k.3V(u(){p G=A(k);p D=A.23(1q,{},B.v);p J=A.1A.5n(G,B.v.3j||"6k");p H=1m(B.v.cO)||(1m(B.v.cO)==0?0:(J=="1Q"?0:2c));p I=B.v.7P||"6I";p C=B.v.fb;if(J!="6k"){D.fb=C||["bs","9r"];D.5q=1q}p F={1g:G.1g(),1f:G.1f()};G.2t=B.v.2t||(J=="1N"?{1g:0,1f:0}:F);p E={y:I!="cD"?(H/2c):1,x:I!="4L"?(H/2c):1};G.2D={1g:F.1g*E.y,1f:F.1f*E.x};if(B.v.gY){if(J=="1N"){G.2t.1Z=0;G.2D.1Z=1}if(J=="1Q"){G.2t.1Z=1;G.2D.1Z=0}}D.2t=G.2t;D.2D=G.2D;D.3j=J;G.6k("1D",D,B.1W,B.2X);G.4Z()})};A.1A.1D=u(B){19 k.3V(u(){p C=A(k),N=["1p","1c","1b","1f","1g","2W","1Z"];p M=["1p","1c","1b","2W","1Z"];p J=["1f","1g","2W"];p P=["gX"];p K=["6Z","ch","eL","ew"];p F=["79","bX","fa","f9"];p G=A.1A.5n(C,B.v.3j||"6k");p I=B.v.5q||1h;p E=B.v.f7||"6I";p O=B.v.fb;p D={1g:C.1g(),1f:C.1f()};C.2t=B.v.2t||D;C.2D=B.v.2D||D;if(O){p H=A.1A.i5(O,D);C.2t.1c=(D.1g-C.2t.1g)*H.y;C.2t.1b=(D.1f-C.2t.1f)*H.x;C.2D.1c=(D.1g-C.2D.1g)*H.y;C.2D.1b=(D.1f-C.2D.1f)*H.x}p L={2t:{y:C.2t.1g/D.1g,x:C.2t.1f/D.1f},2D:{y:C.2D.1g/D.1g,x:C.2D.1f/D.1f}};if(E=="f1"||E=="6I"){if(L.2t.y!=L.2D.y){N=N.6l(K);C.2t=A.1A.6p(C,K,L.2t.y,C.2t);C.2D=A.1A.6p(C,K,L.2D.y,C.2D)}if(L.2t.x!=L.2D.x){N=N.6l(F);C.2t=A.1A.6p(C,F,L.2t.x,C.2t);C.2D=A.1A.6p(C,F,L.2D.x,C.2D)}}if(E=="9a"||E=="6I"){if(L.2t.y!=L.2D.y){N=N.6l(P);C.2t=A.1A.6p(C,P,L.2t.y,C.2t);C.2D=A.1A.6p(C,P,L.2D.y,C.2D)}}A.1A.6O(C,I?N:M);C.1N();A.1A.7p(C);C.1e("2W","3h").1e(C.2t);if(E=="9a"||E=="6I"){K=K.6l(["8u","7Z"]).6l(P);F=F.6l(["93","8E"]);J=N.6l(K).6l(F);C.2O("*[1f]").1E(u(){3L=A(k);if(I){A.1A.6O(3L,J)}p Q={1g:3L.1g(),1f:3L.1f()};3L.2t={1g:Q.1g*L.2t.y,1f:Q.1f*L.2t.x};3L.2D={1g:Q.1g*L.2D.y,1f:Q.1f*L.2D.x};if(L.2t.y!=L.2D.y){3L.2t=A.1A.6p(3L,K,L.2t.y,3L.2t);3L.2D=A.1A.6p(3L,K,L.2D.y,3L.2D)}if(L.2t.x!=L.2D.x){3L.2t=A.1A.6p(3L,F,L.2t.x,3L.2t);3L.2D=A.1A.6p(3L,F,L.2D.x,3L.2D)}3L.1e(3L.2t);3L.26(3L.2D,B.1W,B.v.2g,u(){if(I){A.1A.5q(3L,J)}})})}C.26(C.2D,{3V:1h,1W:B.1W,2g:B.v.2g,6K:u(){if(G=="1Q"){C.1Q()}A.1A.5q(C,I?N:M);A.1A.7b(C);if(B.2X){B.2X.1K(k,1T)}C.4Z()}})})}})(1L);(u(A){A.1A.qD=u(B){19 k.3V(u(){p E=A(k),K=["1p","1c","1b"];p J=A.1A.5n(E,B.v.3j||"6k");p M=B.v.7P||"1b";p C=B.v.3G||20;p D=B.v.fT||3;p G=B.1W||B.v.1W||g2;A.1A.6O(E,K);E.1N();A.1A.7p(E);p F=(M=="4U"||M=="5c")?"1c":"1b";p O=(M=="4U"||M=="1b")?"2M":"cn";p H={},N={},L={};H[F]=(O=="2M"?"-=":"+=")+C;N[F]=(O=="2M"?"+=":"-=")+C*2;L[F]=(O=="2M"?"-=":"+=")+C*2;E.26(H,G,B.v.2g);1S(p I=1;I<D;I++){E.26(N,G,B.v.2g).26(L,G,B.v.2g)}E.26(N,G,B.v.2g).26(H,G/2,B.v.2g,u(){A.1A.5q(E,K);A.1A.7b(E);if(B.2X){B.2X.1K(k,1T)}});E.3V("fx",u(){E.4Z()});E.4Z()})}})(1L);(u(A){A.1A.7L=u(B){19 k.3V(u(){p E=A(k),D=["1p","1c","1b"];p I=A.1A.5n(E,B.v.3j||"1N");p H=B.v.7P||"1b";A.1A.6O(E,D);E.1N();A.1A.7p(E).1e({2W:"3h"});p F=(H=="4U"||H=="5c")?"1c":"1b";p C=(H=="4U"||H=="1b")?"2M":"cn";p J=B.v.3G||(F=="1c"?E.3p({4P:1q}):E.4b({4P:1q}));if(I=="1N"){E.1e(F,C=="2M"?-J:J)}p G={};G[F]=(I=="1N"?(C=="2M"?"+=":"-="):(C=="2M"?"-=":"+="))+J;E.26(G,{3V:1h,1W:B.1W,2g:B.v.2g,6K:u(){if(I=="1Q"){E.1Q()}A.1A.5q(E,D);A.1A.7b(E);if(B.2X){B.2X.1K(k,1T)}E.4Z()}})})}})(1L);(u(A){A.1A.iZ=u(B){19 k.3V(u(){p E=A(k);p G=A.1A.5n(E,B.v.3j||"6k");p F=A(B.v.2D);p C=E.1i();p D=A(\'<1v 2e="1a-1A-iZ"></1v>\').31(1l.1Y);if(B.v.6x){D.1x(B.v.6x)}D.1x(B.v.6x);D.1e({1c:C.1c,1b:C.1b,1g:E.3p()-1m(D.1e("6Z"))-1m(D.1e("ch")),1f:E.4b()-1m(D.1e("79"))-1m(D.1e("bX")),1p:"2H"});C=F.1i();jt={1c:C.1c,1b:C.1b,1g:F.3p()-1m(D.1e("6Z"))-1m(D.1e("ch")),1f:F.4b()-1m(D.1e("79"))-1m(D.1e("bX"))};D.26(jt,B.1W,B.v.2g,u(){D.2m();if(B.2X){B.2X.1K(E[0],1T)}E.4Z()})})}})(1L);',62,1673,'||||||||||||||||||||this|||||var|||||function|options|||||||||||||||||||||||||||||||||||||||inst|return|ui|left|top|element|css|width|height|false|offset|else|Math|document|parseInt|null|datepicker|position|true|date|target|length|helper|div|data|addClass|_get|input|effects|parent|resizable|size|each|tabs|removeClass|max|disabled|case|apply|jQuery|bind|show|call|test|hide|break|for|arguments|containment|min|duration|value|body|opacity||currentItem|new|extend|_propagate||animate|||handle|selected|items|100|spinner|class|colorpicker|easing|color|undefined|browser|Date|add|remove|dialog|click|scrollTop|instance|settings|255|from|year|val|keyCode|draggable|helperProportions|html|start|scrollLeft|relative|to|typeof|month|unbind|absolute|drawMonth|currentHandle|resize|day|pos|containers|find|axis|style|drawYear|attr|round|zIndex|item|overflow|callback|plugin|cursor|dpDiv|appendTo|||||||||sortable|ddmanager|getFullYear|stop|focus|pageY|parentNode|hidden|overlay|mode|offsetParent|end|minDate|nodeName|window|outerHeight|span|grid|destroy|originalPosition|getDate|counter|label|triggerHandler|0px|pageX|iFormat|150|maxDate|offsetHeight|format|stepping|distance|filter|placeholder|index|getMonth|child|initStatus|margins|right|documentElement|handles|current|uiDialog|widget|match|queue|showStatus|bottom|abs|picker||overflowX||button|msie||||selectable|positionAbs|panels|outerWidth|auto|active|selectedClass|overflowY|inline|type|_trigger|visible|defaults|charAt|endYear|hasClass|push|unselecting|autocomplete|removeData|name|lis|get|scroll|string|rangeStart|scrollSensitivity|over|scrollSpeed|currentDay|text|offsetWidth|display|numMonths|href|event|_change|title|next|vertical|accordion|constructor|indexOf|margin|se|sw|progressbar|toLowerCase|up|while|monthNames|selectedMonth|default|dequeue||drag|tagName|selectedYear|currentYear||fields|_init|slider|ctrlKey|_getInst|select|down|mousedown|isFixed|selectedDay|append|dayNames|printDate|selecting|prototype|currentMonth|replace|setMode|rgb|_convertPositionTo|restore|load|isNaN|matches|firstDay|td|dayNamesShort|_defaults|trigger|change|hsb|scrollHeight|mouse|headers|setTimeout|parents|_pos|literal|rangeSelect|_adjustDate|_translateValue|containerCache|snapElements|accept|droppable|ghost|isRTL|lookAhead|_addStatus|shortYearCutoff|originalSize|mouseup|tolerance|pressed|continue|keydown||cssPosition|siblings|opera|Autocompleter||4px|bar|output|_getValue|_getFormatConfig|endDay|iValue|switch|prev|_setData|getTime|showAnim|cpSlider|dateStr|effect|concat|none|pow|toggle|setTransition|identifier|isover|endDate|monthNamesShort|rangeElement|period|aspectRatio|className|_updateDatepicker|clear|delay|plugins|fixed|markerClassName|result|formatDate|endMonth|key|both|checkDate|complete|cursorAt|join|_mouseDrag|save|ACTIVE|alsoResize|onclick|close|unselectable|revert|_convertValue|status|preventDefault|mousemove|borderTopWidth||scope|handled|PI|split||sort|defaultDate|snap|borderLeftWidth|backgroundColor|removeWrapper|maxHeight|minHeight|_HSBToHex|hex|field|minWidth|_dialogInput|cookie|toString|block|proportionallyResize|knobHandles|toShow|createWrapper|stepMonths|cancel|_focus|_hideDatepicker|blur|innerHeight|num|static|_disabledInputs|object|_setValue|map|transparent|floating|128|chars|stayOpen|_mouseStart|_mouseStop|stepBigMonths|drop|slide|_triggerClass|magnification|bgiframe|direction|slice|magnifier|hash|dow|wrap|_mouseStarted|url|_getMinMaxDate|isFunction|marginBottom|cache|nextText|original|onSelect|clone||HTML|andSelf|navigationAsDateFormat|exec|years|_HSBToRGB|autoHeight|hideClass|loadingClass|textElement|nextBigText|dates|maxWidth|actualSize|otherMonth|stack|previousHandle|showOtherMonths|prevText|version|week|realMax|buttonText|0pt|marginTop|widgetName|currentIncrement|isout|PROP_NAME|_inDialog|number|multipleSeparator|droppables|scrollLeftParent|marginRight|not|disable|today|sizeDiff|prevBigText|scrollTopParent|option|currentText|startselected|doy|maxlength|yy|showOn|_datepickerShowing|showBigPrevNext|360|submit|monthHtml|_generatePosition|disableSelection|clickOffset||scrollY|_handleSize|marginLeft|Number|scrollX||throw|obj|cell|content|instances|scrollWidth|dateFormat|_mouseCapture|steps|dateStatus|postProcess|inArray|row|disabledClass|toHide|innerWidth|Show|alwaysOpen|_up|_down|center|sqrt|header|_getDaysInMonth|the|_formatDate|firstMon|intersect|_getNumberOfMonths|currentContainer|_lastInput|props|extendRemove|_handles|_curInst|getDay|clientHeight|beforeShow|_showDatepicker|connectWith|altFormat|_|borderDif|String|enable|utcDate|139|highlightWeek|days|children|parentData|overflowXOffset|activate|running|newMinDate|_mouseInit|_mouseDestroy|Array|prompt|parseFloat|hue|F0|_fillRGBFields|_fillHSBFields|titlebar|shiftKey|col|_fillHexFields|trim|selectedDate|buttonImage|range|visibility|70158|dragging|cssNamespace|getNumber|img|_clear|keypress|pixelState|percentState|cancelHelperRemoval|||inlineSettings|_cursor|overflowYOffset|_opacity|_zIndex|isOver|showWeeks|weekStatus|altField|_determineDate|names|_proportionallyResize|_notifyChange|refresh|changeFirstDay|beforeShowDay|absolutePosition|floor|sin|maxDraw|_aspectRatio|showMonthAfterYear|tzDate|closeAtTop|rangeSeparator|iframe|hasScroll|hideIfNoPrevNext|textarea|500|daySettings|containerOffset|proportions|TAB|DOWN|UP|modal|cssCache|getter|1000|timer|_mouseup|out|animateClass|_isOpen|normal|200|beforeStop|panelClass|_mouseUp|currency|moveTo|_translateLimits|_translateRange|removeAttr|multiple|insertBefore|_tabify|blockUI|uiHash|middle|padding|iframeFix|background|appendText|cacheLength|uuid|offsetParentBorders|swing|prepareOffsets|refreshPositions|_setHue|_RGBToHSB|Datepicker|onClose|currentSelector|knob|highlight|clientWidth|safari|wrapper|empty|interval|300|_setNewColor|_setSelector|deactivate|DD|update|_updateRange|firstValue|borderRightWidth|originalTitle|iso8601Week|compareDocumentPosition|contains|mouseDownOnSelect|_oneStep|_blur|hover|autoResize|_fixHSB|_setCurrentColor|formatResult|_size|sliderValue|_HexToHSB|formatMatch|_moveToTop|matchCase|unselect|borderBottomWidth|checkLiteral|relOffset|setData|attrValue|Select|neg|attrName|dropBehaviour|_doKeyDown|removeChild|_selectDate|_selectingMonthYear|_refreshItems|browserHeight|appendChild|createHelper|browserWidth|first|sortIndicator|success|xhr|horizontal|startDate|parse|1px|location|splice|search|ajaxOptions|animated|formatNumber|longNames|percent|try|pieces|selectees|catch|showCurrentAtPos|shortNames|_show|sortables|_mousedown|containerPosition|_currentClass|currentDate|_keydown|calculateWeek|activeClass|tr|toggleClass|hoverClass|defaultView|5625|_adjustInstDate|before|mouseDelayMet|211||_items|unit|192|_hide|setDate|border|containerSize|leadDays|dayNamesMin|slow|||dayStatus|snapping|fast|_animate|_mouseDownEvent|step|LEFT|BACKSPACE|240|resizing|updateOriginalPosition|unwrap|fxWrapper|dims|charCode|169|initialized|chr|_mouseMoveDelegate|_mouseUpDelegate|reset|firstChild|_mouseDown|_doKeyPress|generated|otherArgs|_over|widgetEventPrefix|_position|_mainDivId|_makeResizable|_dialogClass|_tidyDialog|_makeDraggable|autohide|_createButtons|resizeStop|asin|documentScroll|originalElement|_nodeName|uiDialogTitlebar|borderTop|closeOnEscape|ESCAPE|borderLeft|borderRight|backgroundImage||_findPos|knobTheme|showOptions|_initBoundaries|cssText|borderBottom|_mouseDelayMet|OFFSET_PARENT_NOT_SCROLL_PARENT_X|||_spin|clearInterval|list||_tabId|source|_constrain|PAGEX_INCLUDES_SCROLL|SPACE|paddingBottom|guess|ENTER|keyup|mousewheel|spin|x3e|unselectClass|COMMA|x3c|rotation|flushCache|_decimals|navClass|RIGHT|paddingTop|clearTimeout|animations|panelTemplate|regional|_helper|resizeStart|107|textBg|_appendClass|_newInst|domPosition|float|_inlineClass|_createRange|_out|box|_disableClass|pause|handleOffset|progress|PAGEY_INCLUDES_SCROLL|scale|OFFSET_PARENT_NOT_SCROLL_PARENT_Y|paddingRight|paddingLeft|origin|off|_drag|getData|divSpan|after|cacheHelperProportions|_mouseDistanceMet|buttons|dRow|explode|formatName||_selectMonthYear|selectFirst|_unselectableClass|containerElement|secondary|_selectDay|currentHue|_clickMonthYear|origColor||onmouseover|_promptClass||onmouseout|daysInMonth|formatItem|dragged|gotoCurrent|selectableunselecting|flat|_setDateFromField|180|cover|Invalid|_clearDate|pattern|_setDate|mandatory|controls|_getDate|src|times|getDaysInMonth|substring|xa0|log|parseDate|_getDefaultDate|opos|Selection|140|_isInRange|alsoresize|metaKey|_gotoToday|easeOutBounce|open|tabbable|pointer|origSize|gotoDate|matchContains|_getItemsAsjQuery|charMin|onChange|dragStart||getName|minChars|dragStop|_updateCache|_getData|touch|custom|preserveCursor|_canAdjustMonth|dim|elementOffset|_updateAlternate|selector|230|_moveSelector|mustMatch|setSelectionRange|fromCharCode|_enterSubmit|dyn|_clickSubmit|loading|strong|rgba|form|_leaveSubmit|autoFill|extraParams|_upSelector|character|listitem|panel|selectorIndic|currentColor|176|ajax|_addItem|abort|tabTemplate|last|fontSize|fade|_moveIncrement|snapMode|ul|release|idPrefix|_downIncrement|_upIncrement|snapItem|newColor|inputClass|_upHue|_downSelector|_keyDown|dataType|selectionStart|grep|_downHue|DEL|_moveHue|_mousewheel|_start|metadata|MozUserSelect|morph|events|_toggleClass|getTitleId|create|selectstart|_mouseUnselectable|tabIndex|_mouseMove|LI|cssUnit|currentStyle|getComputedStyle|uiDialogButtonPane|isOpen|nbsp|_removeClass|matchSubset|getterSetter|_addClass|populate|__toggle|uiDialogContainer|resultsClass|5000px|mouseover|flush|clientX|autoOpen|widgetBaseClass|prependTo|pageUp|storage|self|getHandle|createTextRange|emptyList|_fixRGB|_stop|substr|cacheScrollParents|setContainment|_isChildOf|_getScroll|incremental|getBaseline|adjustOffsetFromHelper|_pageStep|Cache|startValue|state|elem|pageDown||outline||eventName||black|_click|_RGBToHex|120|_HexToRGB||_handleIndex|245|_removeRange|_getRange||356|fillSpace|Month||Year|refreshContainers|originalMousePosition|createElement|_renderAxis|_intersectsWith|cos|100px|innerHTML|toleranceElement|curMonth|numberOfMonths|connected|Missing|expression|minMax|_respectSize|curYear|_getFirstDayOfMonth|checkRange|_updateRatio|defaultTheme|connectToSortable|_magnify|_isDisabledDatepicker|def|overlap|stopPropagation|transfer|verticalLine|_contactContainers|baseline|_intersectsWithEdge|_createPlaceholder|easeOutQuad|F2F2F2|solid|_removeCurrentsFromItems|nextSibling|isArray|_checkExternalClick|Class|_checkOffset|_attachDatepicker|iInit|sender|closeText|getUTCDate|prevBigStatus|prevStatus|closeStatus|tbody|_generateHTML|clearStatus|clearText|table|setUTCDate|nextStatus|animation|thead|statusForDate|weekHeader|isMultiMonth|ceil|nextBigStatus|easeInBounce|numRows|currentStatus|origYear|origMonth|len|yearStatus|getYear|_possibleChars|525|autoHide|onChangeMonthYear|_renderProxy|autoRefresh|unselected|fit|onchange|changeMonth|_generateMonthYearHeader|offsetString|offsetNumeric|monthStatus|inMinYear|yearRange|changeYear|inMaxYear|greedyChild|8px|mouseout|debug|navigationFilter|dblclick|May|toArray|serialize|PERIOD|different|buttonImageOnly|188|_connectDatepicker|NUMPAD_SUBTRACT|NUMPAD_DECIMAL|init|dropOnEmpty|_rearrange|greedy|zoom|shouldRevert|END|_changeFirstDay|HOME|newHeader|oldHeader|_cleanUp|forcePlaceholderSize|oldContent|setInterval|144|newContent|PAGEUP|224|_storedCSS|ESC|Close|RETURN|dateText|previous|_dialogInst|_noFinalSort|165|unautocomplete|_drop|_deactivate|err|_activate|_interval|delete|receive|setOptions|PAGEDOWN|alt|_inlineDatepicker|textClass|droppablesLoop|increment|keyboard|NUMPAD_DIVIDE|clientY|animateDuration|autocompleteshow|700|easeinout|selectablestart|111|NUMPAD_ENTER|revertDuration|CAPS_LOCK|port|fff|001|clearStyle|easeslide|changestart|timestamp|DELETE|selectee||bounceslide|expr|inner|CONTROL|selectionEnd|clearfix|outer|dir|moveEnd|110|dotted|snapTolerance|NUMPAD_ADD|animateEasing|bounceout|INSERT|moveStart|collapse|selectableunselected|dropactivate|dropout|10000|all|fix|canvas|Top|Bottom|makeArray|fromSortable|group|dropover|Right|Left|gen|enableSelection|_preserveHelperProportions|proxy|_mouseDelayTimer|sortactivate|dynamic|semi|DEDEDE|which|808080|mozilla|dropdeactivate|dragstart|started|RegExp|toSortable|PAGE_UP|valid|190|instanceof|invalid|tabindex|PAGE_DOWN|109|Done|selectableselecting|108|NUMPAD_MULTIPLY|106|odd|even||sortreceive|navigation|results|attribute|forcePointerForContainers|400|522|toUpperCase|SHIFT|selectableselected|selectablestop|limit|eventPrefix|autocompletehide|Friday|setSeconds|setMinutes|setHours|easeInBack|setMilliseconds|easeInOutElastic|easeInOutCirc|easeInElastic|easeOutElastic|easeOutBack|easeInOutBack|other|cellspacing|cellpadding|easeInOutBounce|984375|9375|javascript|625|easeOutCirc|easeInCirc|easeInOutCubic|easeInQuart|easeOutQuart|easeOutCubic|isDisabled|easeInQuad|easeInOutQuad|easeInCubic|easeInOutQuart|easeInQuint|easeInExpo|easeOutExpo|easeInOutExpo|easeInOutSine|easeOutSine|easeOutQuint|easeInOutQuint||easeInSine|one|blind|horizFirst|selectedIndex|draw|unblockUI|fold|noWeekends|Unknown|86400000|getTimezoneOffset|fadeOut|fadeIn|multi|removeAttribute|1000px||rtl|ffff99|slideUp|slideDown|nodeType|Unexpected|mouseenter|9999|control|0123456789|IMG|links|bounce|250|clip|W3C|TIMESTAMP|RFC_822|ISO_8601|COOKIE|RFC_850|RFC_1036|RSS|RFC_2822|RFC_1123|currentOffset|jswing|darkmagenta|darkolivegreen|font|darkorange|183|replaceWith|darkkhaki|Moz|189|darkorchid|0000000001|122|darkviolet|148|233|darksalmon|153||204|darkred|darkgreen|darkgrey|outlineColor||borderTopColor||borderRightColor|220|beige|curCSS|aqua|azure|borderLeftColor|borderBottomColor|cyan|darkblue|darkcyan|method|Function|switchClass|blue|brown|unmousewheel|fuchsia|olive|orange|pink|navy|3000|lime|magenta|maroon|startTime|203|silver|white|yellow|random|red|purple|violet|back|9650|9660|khaki|lightblue|173|130|indigo|gold|215|green|216|105|182|193|lightyellow|lightpink|lightgrey|lightcyan|lightgreen|238|pulsate|ATOM|Apr|Mar|Feb|dragHelper|Jun||Aug|Jul|Jan||December|July|June||August|September|November|October|Sep|Oct|dialogClass|Tuesday|buttonpane|Thursday|Saturday|Mon|Sun|uiDialogTitlebarClose|beforeclose|Dec|Nov|Wk|Week|Monday|Sunday|April|March|noKeyboard|Width|Height|UI|Tabs|fragment|Mismatching|Za|z0|has|insertAfter|scrollTo|unique|unload|tab|wrapInner|borderWidth|Next|Prev|Today|January|resizeHelper|February|without|Erase|8230|Loading|nav|rotate|Clear|puff|container|Wednesday|getAttribute|Tue|eval|_inlineShow|setDefaults|console|Set|setColor|hasDatepicker|_dialogDatepicker|_destroyDatepicker|shake|_setDateDatepicker|_getDateDatepicker|mouseleave|_refreshDatepicker|_changeDatepicker|_enableDatepicker|_disableDatepicker|prepend|Sa|65280|Wed|Su|Sat|We|Mo|Tu|Fri|ff0000|Fr|Th|Thu'.split('|'),0,{}))
// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.ui.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.easing.js
/*
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built in easing capabilities added In jQuery 1.1
* to offer multiple easing options
*
* TERMS OF USE - jQuery Easing
* 
* Open source under the BSD License. 
* 
* Copyright Â© 2008 George McGinley Smith
* All rights reserved.
* 
* Redistribution and use in source and binary forms, with or without modification, 
* are permitted provided that the following conditions are met:
* 
* Redistributions of source code must retain the above copyright notice, this list of 
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list 
* of conditions and the following disclaimer in the documentation and/or other materials 
* provided with the distribution.
* 
* Neither the name of the author nor the names of contributors may be used to endorse 
* or promote products derived from this software without specific prior written permission.
* 
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
*  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
*  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
*  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
* OF THE POSSIBILITY OF SUCH DAMAGE. 
*
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend(jQuery.easing,
{
    def: 'easeOutQuad',
    swing: function(x, t, b, c, d) {
        //alert(jQuery.easing.default);
        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
    },
    easeInQuad: function(x, t, b, c, d) {
        return c * (t /= d) * t + b;
    },
    easeOutQuad: function(x, t, b, c, d) {
        return -c * (t /= d) * (t - 2) + b;
    },
    easeInOutQuad: function(x, t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t + b;
        return -c / 2 * ((--t) * (t - 2) - 1) + b;
    },
    easeInCubic: function(x, t, b, c, d) {
        return c * (t /= d) * t * t + b;
    },
    easeOutCubic: function(x, t, b, c, d) {
        return c * ((t = t / d - 1) * t * t + 1) + b;
    },
    easeInOutCubic: function(x, t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
        return c / 2 * ((t -= 2) * t * t + 2) + b;
    },
    easeInQuart: function(x, t, b, c, d) {
        return c * (t /= d) * t * t * t + b;
    },
    easeOutQuart: function(x, t, b, c, d) {
        return -c * ((t = t / d - 1) * t * t * t - 1) + b;
    },
    easeInOutQuart: function(x, t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;
        return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
    },
    easeInQuint: function(x, t, b, c, d) {
        return c * (t /= d) * t * t * t * t + b;
    },
    easeOutQuint: function(x, t, b, c, d) {
        return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
    },
    easeInOutQuint: function(x, t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;
        return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
    },
    easeInSine: function(x, t, b, c, d) {
        return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;
    },
    easeOutSine: function(x, t, b, c, d) {
        return c * Math.sin(t / d * (Math.PI / 2)) + b;
    },
    easeInOutSine: function(x, t, b, c, d) {
        return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
    },
    easeInExpo: function(x, t, b, c, d) {
        return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;
    },
    easeOutExpo: function(x, t, b, c, d) {
        return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
    },
    easeInOutExpo: function(x, t, b, c, d) {
        if (t == 0) return b;
        if (t == d) return b + c;
        if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
        return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
    },
    easeInCirc: function(x, t, b, c, d) {
        return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
    },
    easeOutCirc: function(x, t, b, c, d) {
        return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
    },
    easeInOutCirc: function(x, t, b, c, d) {
        if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
        return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
    },
    easeInElastic: function(x, t, b, c, d) {
        var s = 1.70158; var p = 0; var a = c;
        if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3;
        if (a < Math.abs(c)) { a = c; var s = p / 4; }
        else var s = p / (2 * Math.PI) * Math.asin(c / a);
        return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
    },
    easeOutElastic: function(x, t, b, c, d) {
        var s = 1.70158; var p = 0; var a = c;
        if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3;
        if (a < Math.abs(c)) { a = c; var s = p / 4; }
        else var s = p / (2 * Math.PI) * Math.asin(c / a);
        return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
    },
    easeInOutElastic: function(x, t, b, c, d) {
        var s = 1.70158; var p = 0; var a = c;
        if (t == 0) return b; if ((t /= d / 2) == 2) return b + c; if (!p) p = d * (.3 * 1.5);
        if (a < Math.abs(c)) { a = c; var s = p / 4; }
        else var s = p / (2 * Math.PI) * Math.asin(c / a);
        if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
        return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
    },
    easeInBack: function(x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c * (t /= d) * t * ((s + 1) * t - s) + b;
    },
    easeOutBack: function(x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
    },
    easeInOutBack: function(x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
        return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
    },
    easeInBounce: function(x, t, b, c, d) {
        return c - jQuery.easing.easeOutBounce(x, d - t, 0, c, d) + b;
    },
    easeOutBounce: function(x, t, b, c, d) {
        if ((t /= d) < (1 / 2.75)) {
            return c * (7.5625 * t * t) + b;
        } else if (t < (2 / 2.75)) {
            return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
        } else if (t < (2.5 / 2.75)) {
            return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
        } else {
            return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
        }
    },
    easeInOutBounce: function(x, t, b, c, d) {
        if (t < d / 2) return jQuery.easing.easeInBounce(x, t * 2, 0, c, d) * .5 + b;
        return jQuery.easing.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;
    }
});

/*
*
* TERMS OF USE - EASING EQUATIONS
* 
* Open source under the BSD License. 
* 
* Copyright Â© 2001 Robert Penner
* All rights reserved.
* 
* Redistribution and use in source and binary forms, with or without modification, 
* are permitted provided that the following conditions are met:
* 
* Redistributions of source code must retain the above copyright notice, this list of 
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list 
* of conditions and the following disclaimer in the documentation and/or other materials 
* provided with the distribution.
* 
* Neither the name of the author nor the names of contributors may be used to endorse 
* or promote products derived from this software without specific prior written permission.
* 
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
*  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
*  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
*  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
* OF THE POSSIBILITY OF SUCH DAMAGE. 
*
*/// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.easing.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.base64.js
/**
* jQuery BASE64 functions
* 
* 	<code>
* 		Encodes the given data with base64. 
* 		String $.base64Encode ( String str )
*		<br />
* 		Decodes a base64 encoded data.
* 		String $.base64Decode ( String str )
* 	</code>
* 
* Encodes and Decodes the given data in base64.
* This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies.
* Base64-encoded data takes about 33% more space than the original data. 
* This javascript code is used to encode / decode data using base64 (this encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean). Script is fully compatible with UTF-8 encoding. You can use base64 encoded data as simple encryption mechanism.
* If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). 
* This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
* 
* Example
* 	Code
* 		<code>
* 			$.base64Encode("I'm Persian."); 
* 		</code>
* 	Result
* 		<code>
* 			"SSdtIFBlcnNpYW4u"
* 		</code>
* 	Code
* 		<code>
* 			$.base64Decode("SSdtIFBlcnNpYW4u");
* 		</code>
* 	Result
* 		<code>
* 			"I'm Persian."
* 		</code>
* 
* @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >
* @link http://www.semnanweb.com/jquery-plugin/base64.html
* @see http://www.webtoolkit.info/
* @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
* @param {jQuery} {base64Encode:function(input))
* @param {jQuery} {base64Decode:function(input))
* @return string
*/

(function($) {

    var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    var uTF8Encode = function(string) {
        string = string.replace(/\x0d\x0a/g, "\x0a");
        var output = "";
        for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
            if (c < 128) {
                output += String.fromCharCode(c);
            } else if ((c > 127) && (c < 2048)) {
                output += String.fromCharCode((c >> 6) | 192);
                output += String.fromCharCode((c & 63) | 128);
            } else {
                output += String.fromCharCode((c >> 12) | 224);
                output += String.fromCharCode(((c >> 6) & 63) | 128);
                output += String.fromCharCode((c & 63) | 128);
            }
        }
        return output;
    };

    var uTF8Decode = function(input) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;
        while (i < input.length) {
            c = input.charCodeAt(i);
            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            } else if ((c > 191) && (c < 224)) {
                c2 = input.charCodeAt(i + 1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            } else {
                c2 = input.charCodeAt(i + 1);
                c3 = input.charCodeAt(i + 2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
        }
        return string;
    }

    $.extend({
        base64Encode: function(input) {
            var output = "";
            var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
            var i = 0;
            input = uTF8Encode(input);
            while (i < input.length) {
                chr1 = input.charCodeAt(i++);
                chr2 = input.charCodeAt(i++);
                chr3 = input.charCodeAt(i++);
                enc1 = chr1 >> 2;
                enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                enc4 = chr3 & 63;
                if (isNaN(chr2)) {
                    enc3 = enc4 = 64;
                } else if (isNaN(chr3)) {
                    enc4 = 64;
                }
                output = output + keyString.charAt(enc1) + keyString.charAt(enc2) + keyString.charAt(enc3) + keyString.charAt(enc4);
            }
            return output;
        },
        base64Decode: function(input) {
            var output = "";
            var chr1, chr2, chr3;
            var enc1, enc2, enc3, enc4;
            var i = 0;
            input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
            while (i < input.length) {
                enc1 = keyString.indexOf(input.charAt(i++));
                enc2 = keyString.indexOf(input.charAt(i++));
                enc3 = keyString.indexOf(input.charAt(i++));
                enc4 = keyString.indexOf(input.charAt(i++));
                chr1 = (enc1 << 2) | (enc2 >> 4);
                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                chr3 = ((enc3 & 3) << 6) | enc4;
                output = output + String.fromCharCode(chr1);
                if (enc3 != 64) {
                    output = output + String.fromCharCode(chr2);
                }
                if (enc4 != 64) {
                    output = output + String.fromCharCode(chr3);
                }
            }
            output = uTF8Decode(output);
            return output;
        }
    });
})(jQuery);// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.base64.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery-jtemplates.js
/**
* jTemplates 0.7.8 (http://jtemplates.tpython.com)
* Copyright (c) 2007-2009 Tomasz Gloc (http://www.tpython.com)
* 
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and/or GPL (GPL-LICENSE.txt) licenses.
*
* Id: $Id: jquery-jtemplates_uncompressed.js 177 2009-04-02 17:36:36Z tom $
*/

/**
* @fileOverview Template engine in JavaScript.
* @name jTemplates
* @author Tomasz Gloc
* @date $Date: 2009-04-02 19:36:36 +0200 (Cz, 02 kwi 2009) $
*/


if (window.jQuery && !window.jQuery.createTemplate) {
    (function(jQuery) {

        /**
        * [abstract]
        * @name BaseNode
        * @class Abstract node. [abstract]
        */

        /**
        * Process node and get the html string. [abstract]
        * @name get
        * @function
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        * @memberOf BaseNode
        */

        /**
        * [abstract]
        * @name BaseArray
        * @augments BaseNode
        * @class Abstract array/collection. [abstract]
        */

        /**
        * Add node 'e' to array.
        * @name push
        * @function
        * @param {BaseNode} e a node
        * @memberOf BaseArray
        */

        /**
        * See (http://jquery.com/).
        * @name jQuery
        * @class jQuery Library (http://jquery.com/)
        */

        /**
        * See (http://jquery.com/)
        * @name fn
        * @class jQuery Library (http://jquery.com/)
        * @memberOf jQuery
        */


        /**
        * Create new template from string s.
        * @name Template
        * @class A template or multitemplate.
        * @param {string} s A template string (like: "Text: {$T.txt}.").
        * @param {array} [includes] Array of included templates.
        * @param {object} [settings] Settings.
        * @config {boolean} [disallow_functions] Do not allow use function in data (default: true).
        * @config {boolean} [filter_data] Enable filter data using escapeHTML (default: true).
        * @config {boolean} [filter_params] Enable filter parameters using escapeHTML (default: false).
        * @config {boolean} [runnable_functions] Automatically run function (from data) inside {} [default: false].
        * @config {boolean} [clone_data] Clone input data [default: true]
        * @config {boolean} [clone_params] Clone input parameters [default: true]
        * @config {Function} [f_cloneData] Function using to data cloning
        * @config {Function} [f_escapeString] Function using to escape strings
        * @augments BaseNode
        */
        var Template = function(s, includes, settings) {
            this._tree = [];
            this._param = {};
            this._includes = null;
            this._templates = {};
            this._templates_code = {};

            this.settings = jQuery.extend({
                disallow_functions: false,
                filter_data: true,
                filter_params: false,
                runnable_functions: false,
                clone_data: true,
                clone_params: true
            }, settings);

            this.f_cloneData = (this.settings.f_cloneData !== undefined) ? (this.settings.f_cloneData) : (TemplateUtils.cloneData);
            this.f_escapeString = (this.settings.f_escapeString !== undefined) ? (this.settings.f_escapeString) : (TemplateUtils.escapeHTML);

            this.splitTemplates(s, includes);

            if (s) {
                this.setTemplate(this._templates_code['MAIN'], includes, this.settings);
            }

            this._templates_code = null;
        };

        /**
        * jTemplates version
        * @type string
        */
        Template.prototype.version = '0.7.8';

        /**
        * Debug mode (all errors are on), default: on
        * @type Boolean
        */
        Template.DEBUG_MODE = true;

        /**
        * Split multitemplate into multiple templates.
        * @param {string} s A template string (like: "Text: {$T.txt}.").
        * @param {array} includes Array of included templates.
        */
        Template.prototype.splitTemplates = function(s, includes) {
            var reg = /\{#template *(\w*?)( .*)*\}/g;
            var iter, tname, se;
            var lastIndex = null;

            var _template_settings = [];

            while ((iter = reg.exec(s)) != null) {
                lastIndex = reg.lastIndex;
                tname = iter[1];
                se = s.indexOf('{#/template ' + tname + '}', lastIndex);
                if (se == -1) {
                    throw new Error('jTemplates: Template "' + tname + '" is not closed.');
                }
                this._templates_code[tname] = s.substring(lastIndex, se);
                _template_settings[tname] = TemplateUtils.optionToObject(iter[2]);
            }
            if (lastIndex === null) {
                this._templates_code['MAIN'] = s;
                return;
            }

            for (var i in this._templates_code) {
                if (i != 'MAIN') {
                    this._templates[i] = new Template();
                }
            }
            for (var i in this._templates_code) {
                if (i != 'MAIN') {
                    this._templates[i].setTemplate(this._templates_code[i], jQuery.extend({}, includes || {}, this._templates || {}), jQuery.extend({}, this.settings, _template_settings[i]));
                    this._templates_code[i] = null;
                }
            }
        };

        /**
        * Parse template. (should be template, not multitemplate).
        * @param {string} s A template string (like: "Text: {$T.txt}.").
        * @param {array} includes Array of included templates.
        */
        Template.prototype.setTemplate = function(s, includes, settings) {
            if (s == undefined) {
                this._tree.push(new TextNode('', 1, this));
                return;
            }
            s = s.replace(/[\n\r]/g, '');
            s = s.replace(/\{\*.*?\*\}/g, '');
            this._includes = jQuery.extend({}, this._templates || {}, includes || {});
            this.settings = new Object(settings);
            var node = this._tree;
            var op = s.match(/\{#.*?\}/g);
            var ss = 0, se = 0;
            var e;
            var literalMode = 0;
            var elseif_level = 0;

            for (var i = 0, l = (op) ? (op.length) : (0); i < l; ++i) {
                var this_op = op[i];

                if (literalMode) {
                    se = s.indexOf('{#/literal}');
                    if (se == -1) {
                        throw new Error("jTemplates: No end of literal.");
                    }
                    if (se > ss) {
                        node.push(new TextNode(s.substring(ss, se), 1, this));
                    }
                    ss = se + 11;
                    literalMode = 0;
                    i = jQuery.inArray('{#/literal}', op);
                    continue;
                }
                se = s.indexOf(this_op, ss);
                if (se > ss) {
                    node.push(new TextNode(s.substring(ss, se), literalMode, this));
                }
                var ppp = this_op.match(/\{#([\w\/]+).*?\}/);
                var op_ = RegExp.$1;
                switch (op_) {
                    case 'elseif':
                        ++elseif_level;
                        node.switchToElse();
                        //no break
                    case 'if':
                        e = new opIF(this_op, node);
                        node.push(e);
                        node = e;
                        break;
                    case 'else':
                        node.switchToElse();
                        break;
                    case '/if':
                        while (elseif_level) {
                            node = node.getParent();
                            --elseif_level;
                        }
                        //no break
                    case '/for':
                    case '/foreach':
                        node = node.getParent();
                        break;
                    case 'foreach':
                        e = new opFOREACH(this_op, node, this);
                        node.push(e);
                        node = e;
                        break;
                    case 'for':
                        e = opFORFactory(this_op, node, this);
                        node.push(e);
                        node = e;
                        break;
                    case 'continue':
                    case 'break':
                        node.push(new JTException(op_));
                        break;
                    case 'include':
                        node.push(new Include(this_op, this._includes));
                        break;
                    case 'param':
                        node.push(new UserParam(this_op));
                        break;
                    case 'cycle':
                        node.push(new Cycle(this_op));
                        break;
                    case 'ldelim':
                        node.push(new TextNode('{', 1, this));
                        break;
                    case 'rdelim':
                        node.push(new TextNode('}', 1, this));
                        break;
                    case 'literal':
                        literalMode = 1;
                        break;
                    case '/literal':
                        if (Template.DEBUG_MODE) {
                            throw new Error("jTemplates: Missing begin of literal.");
                        }
                        break;
                    default:
                        if (Template.DEBUG_MODE) {
                            throw new Error('jTemplates: unknown tag: ' + op_ + '.');
                        }
                }

                ss = se + this_op.length;
            }

            if (s.length > ss) {
                node.push(new TextNode(s.substr(ss), literalMode, this));
            }
        };

        /**
        * Process template and get the html string.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        */
        Template.prototype.get = function(d, param, element, deep) {
            ++deep;

            var $T = d, _param1, _param2;

            if (this.settings.clone_data) {
                $T = this.f_cloneData(d, { escapeData: (this.settings.filter_data && deep == 1), noFunc: this.settings.disallow_functions }, this.f_escapeString);
            }

            if (!this.settings.clone_params) {
                _param1 = this._param;
                _param2 = param;
            } else {
                _param1 = this.f_cloneData(this._param, { escapeData: (this.settings.filter_params), noFunc: false }, this.f_escapeString);
                _param2 = this.f_cloneData(param, { escapeData: (this.settings.filter_params && deep == 1), noFunc: false }, this.f_escapeString);
            }
            var $P = jQuery.extend({}, _param1, _param2);

            var $Q = (element != undefined) ? (element) : ({});
            $Q.version = this.version;

            var ret = '';
            for (var i = 0, l = this._tree.length; i < l; ++i) {
                ret += this._tree[i].get($T, $P, $Q, deep);
            }

            --deep;
            return ret;
        };

        /**
        * Set to parameter 'name' value 'value'.
        * @param {string} name
        * @param {object} value
        */
        Template.prototype.setParam = function(name, value) {
            this._param[name] = value;
        };


        /**
        * Template utilities.
        * @namespace Template utilities.
        */
        TemplateUtils = function() {
        };

        /**
        * Replace chars &, >, <, ", ' with html entities.
        * To disable function set settings: filter_data=false, filter_params=false
        * @param {string} string
        * @return {string}
        * @static
        * @memberOf TemplateUtils
        */
        TemplateUtils.escapeHTML = function(txt) {
            return txt.replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
        };

        /**
        * Make a copy od data 'd'. It also filters data (depend on 'filter').
        * @param {object} d input data
        * @param {object} filter a filters
        * @config {boolean} [escapeData] Use escapeHTML on every string.
        * @config {boolean} [noFunc] Do not allow to use function (throws exception).
        * @param {Function} f_escapeString function using to filter string (usually: TemplateUtils.escapeHTML)
        * @return {object} output data (filtered)
        * @static
        * @memberOf TemplateUtils
        */
        TemplateUtils.cloneData = function(d, filter, f_escapeString) {
            if (d == null) {
                return d;
            }
            switch (d.constructor) {
                case Object:
                    var o = {};
                    for (var i in d) {
                        o[i] = TemplateUtils.cloneData(d[i], filter, f_escapeString);
                    }
                    if (!filter.noFunc) {
                        if (d.hasOwnProperty("toString"))
                            o.toString = d.toString;
                    }
                    return o;
                case Array:
                    var o = [];
                    for (var i = 0, l = d.length; i < l; ++i) {
                        o[i] = TemplateUtils.cloneData(d[i], filter, f_escapeString);
                    }
                    return o;
                case String:
                    return (filter.escapeData) ? (f_escapeString(d)) : (d);
                case Function:
                    if (filter.noFunc) {
                        if (Template.DEBUG_MODE)
                            throw new Error("jTemplates: Functions are not allowed.");
                        else
                            return undefined;
                    }
                    //no break
                default:
                    return d;
            }
        };

        /**
        * Convert text-based option string to Object
        * @param {string} optionText text-based option string
        * @return {Object}
        * @static
        * @memberOf TemplateUtils
        */
        TemplateUtils.optionToObject = function(optionText) {
            if (optionText === null || optionText === undefined) {
                return {};
            }

            var o = optionText.split(/[= ]/);
            if (o[0] === '') {
                o.shift();
            }

            var obj = {};
            for (var i = 0, l = o.length; i < l; i += 2) {
                obj[o[i]] = o[i + 1];
            }

            return obj;
        };


        /**
        * Create a new text node.
        * @name TextNode
        * @class All text (block {..}) between control's block "{#..}".
        * @param {string} val text string
        * @param {boolean} literalMode When enable (true) template does not process blocks {..}.
        * @param {Template} Template object
        * @augments BaseNode
        */
        var TextNode = function(val, literalMode, template) {
            this._value = val;
            this._literalMode = literalMode;
            this._template = template;
        };

        /**
        * Get the html string for a text node.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        */
        TextNode.prototype.get = function(d, param, element, deep) {
            var __t = this._value;
            if (!this._literalMode) {
                var __template = this._template;
                var $T = d;
                var $P = param;
                var $Q = element;
                __t = __t.replace(/\{(.*?)\}/g, function(__0, __1) {
                    try {
                        var __tmp = eval(__1);
                        if (typeof __tmp == 'function') {
                            if (__template.settings.disallow_functions || !__template.settings.runnable_functions) {
                                return '';
                            } else {
                                __tmp = __tmp($T, $P, $Q);
                            }
                        }
                        return (__tmp === undefined) ? ("") : (String(__tmp));
                    } catch (e) {
                        if (Template.DEBUG_MODE) {
                            if (e instanceof JTException)
                                e.type = "subtemplate";
                            throw e;
                        }
                        return "";
                    }
                });
            }
            return __t;
        };

        /**
        * Create a new conditional node.
        * @name opIF
        * @class A class represent: {#if}.
        * @param {string} oper content of operator {#..}
        * @param {object} par parent node
        * @augments BaseArray
        */
        var opIF = function(oper, par) {
            this._parent = par;
            oper.match(/\{#(?:else)*if (.*?)\}/);
            this._cond = RegExp.$1;
            this._onTrue = [];
            this._onFalse = [];
            this._currentState = this._onTrue;
        };

        /**
        * Add node 'e' to array.
        * @param {BaseNode} e a node
        */
        opIF.prototype.push = function(e) {
            this._currentState.push(e);
        };

        /**
        * Get a parent node.
        * @return {BaseNode}
        */
        opIF.prototype.getParent = function() {
            return this._parent;
        };

        /**
        * Switch from collection onTrue to onFalse.
        */
        opIF.prototype.switchToElse = function() {
            this._currentState = this._onFalse;
        };

        /**
        * Process node depend on conditional and get the html string.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        */
        opIF.prototype.get = function(d, param, element, deep) {
            var $T = d;
            var $P = param;
            var $Q = element;
            var ret = '';

            try {
                var tab = (eval(this._cond)) ? (this._onTrue) : (this._onFalse);
                for (var i = 0, l = tab.length; i < l; ++i) {
                    ret += tab[i].get(d, param, element, deep);
                }
            } catch (e) {
                if (Template.DEBUG_MODE || (e instanceof JTException))
                    throw e;
            }
            return ret;
        };

        /**
        * Handler for a tag 'FOR'. Create new and return relative opFOREACH object.
        * @name opFORFactory
        * @class Handler for a tag 'FOR'. Create new and return relative opFOREACH object.
        * @param {string} oper content of operator {#..}
        * @param {object} par parent node
        * @param {Template} template a pointer to Template object
        * @return {opFOREACH}
        */
        opFORFactory = function(oper, par, template) {
            if (oper.match(/\{#for (\w+?) *= *(\S+?) +to +(\S+?) *(?:step=(\S+?))*\}/)) {
                oper = '{#foreach opFORFactory.funcIterator as ' + RegExp.$1 + ' begin=' + (RegExp.$2 || 0) + ' end=' + (RegExp.$3 || -1) + ' step=' + (RegExp.$4 || 1) + ' extData=$T}';
                return new opFOREACH(oper, par, template);
            } else {
                throw new Error('jTemplates: Operator failed "find": ' + oper);
            }
        };

        /**
        * Function returns inputs data (using internal with opFORFactory)
        * @param {object} i any data
        * @return {object} any data (equal parameter 'i')
        * @private
        * @static
        */
        opFORFactory.funcIterator = function(i) {
            return i;
        };

        /**
        * Create a new loop node.
        * @name opFOREACH
        * @class A class represent: {#foreach}.
        * @param {string} oper content of operator {#..}
        * @param {object} par parent node
        * @param {Template} template a pointer to Template object
        * @augments BaseArray
        */
        var opFOREACH = function(oper, par, template) {
            this._parent = par;
            this._template = template;
            oper.match(/\{#foreach (.+?) as (\w+?)( .+)*\}/);
            this._arg = RegExp.$1;
            this._name = RegExp.$2;
            this._option = RegExp.$3 || null;
            this._option = TemplateUtils.optionToObject(this._option);

            this._onTrue = [];
            this._onFalse = [];
            this._currentState = this._onTrue;
        };

        /**
        * Add node 'e' to array.
        * @param {BaseNode} e
        */
        opFOREACH.prototype.push = function(e) {
            this._currentState.push(e);
        };

        /**
        * Get a parent node.
        * @return {BaseNode}
        */
        opFOREACH.prototype.getParent = function() {
            return this._parent;
        };

        /**
        * Switch from collection onTrue to onFalse.
        */
        opFOREACH.prototype.switchToElse = function() {
            this._currentState = this._onFalse;
        };

        /**
        * Process loop and get the html string.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        */
        opFOREACH.prototype.get = function(d, param, element, deep) {
            try {
                var $T = d;
                var $P = param;
                var $Q = element;
                var fcount = eval(this._arg); //array of elements in foreach
                var key = []; //only for objects
                var mode = typeof fcount;
                if (mode == 'object') {
                    var arr = [];
                    jQuery.each(fcount, function(k, v) {
                        key.push(k);
                        arr.push(v);
                    });
                    fcount = arr;
                }
                var extData = (this._option.extData !== undefined) ? (eval(this._option.extData)) : (($T != null) ? ($T) : ({}));
                var s = Number(eval(this._option.begin) || 0), e; //start, end
                var step = Number(eval(this._option.step) || 1);
                if (mode != 'function') {
                    e = fcount.length;
                } else {
                    if (this._option.end === undefined || this._option.end === null) {
                        e = Number.MAX_VALUE;
                    } else {
                        e = Number(eval(this._option.end)) + ((step > 0) ? (1) : (-1));
                    }
                }
                var ret = ''; //returned string
                var i, l; //iterators

                if (this._option.count) {
                    var tmp = s + Number(eval(this._option.count));
                    e = (tmp > e) ? (e) : (tmp);
                }
                if ((e > s && step > 0) || (e < s && step < 0)) {
                    var iteration = 0;
                    var _total = (mode != 'function') ? (Math.ceil((e - s) / step)) : undefined;
                    var ckey, cval; //current key, current value
                    for (; ((step > 0) ? (s < e) : (s > e)); s += step, ++iteration) {
                        ckey = key[s];
                        if (mode != 'function') {
                            cval = fcount[s];
                        } else {
                            cval = fcount(s);
                            if (cval === undefined || cval === null) {
                                break;
                            }
                        }
                        if ((typeof cval == 'function') && (this._template.settings.disallow_functions || !this._template.settings.runnable_functions)) {
                            continue;
                        }
                        if ((mode == 'object') && (ckey in Object)) {
                            continue;
                        }
                        var prevValue = extData[this._name];
                        extData[this._name] = cval;
                        extData[this._name + '$index'] = s;
                        extData[this._name + '$iteration'] = iteration;
                        extData[this._name + '$first'] = (iteration == 0);
                        extData[this._name + '$last'] = (s + step >= e);
                        extData[this._name + '$total'] = _total;
                        extData[this._name + '$key'] = (ckey !== undefined && ckey.constructor == String) ? (this._template.f_escapeString(ckey)) : (ckey);
                        extData[this._name + '$typeof'] = typeof cval;
                        for (i = 0, l = this._onTrue.length; i < l; ++i) {
                            try {
                                ret += this._onTrue[i].get(extData, param, element, deep);
                            } catch (ex) {
                                if (ex instanceof JTException) {
                                    switch (ex.type) {
                                        case 'continue':
                                            i = l;
                                            break;
                                        case 'break':
                                            i = l;
                                            s = e;
                                            break;
                                        default:
                                            throw e;
                                    }
                                } else {
                                    throw e;
                                }
                            }
                        }
                        delete extData[this._name + '$index'];
                        delete extData[this._name + '$iteration'];
                        delete extData[this._name + '$first'];
                        delete extData[this._name + '$last'];
                        delete extData[this._name + '$total'];
                        delete extData[this._name + '$key'];
                        delete extData[this._name + '$typeof'];
                        delete extData[this._name];
                        extData[this._name] = prevValue;
                    }
                } else {
                    for (i = 0, l = this._onFalse.length; i < l; ++i) {
                        ret += this._onFalse[i].get($T, param, element, deep);
                    }
                }
                return ret;
            } catch (e) {
                if (Template.DEBUG_MODE || (e instanceof JTException))
                    throw e;
                return "";
            }
        };

        /**
        * Template-control exceptions
        * @name JTException
        * @class A class used internals for a template-control exceptions
        * @param type {string} Type of exception
        * @augments Error
        * @augments BaseNode
        */
        var JTException = function(type) {
            this.type = type;
        };
        JTException.prototype = Error;

        /**
        * Throw a template-control exception
        * @throws It throws itself
        */
        JTException.prototype.get = function(d) {
            throw this;
        };

        /**
        * Create a new entry for included template.
        * @name Include
        * @class A class represent: {#include}.
        * @param {string} oper content of operator {#..}
        * @param {array} includes
        * @augments BaseNode
        */
        var Include = function(oper, includes) {
            oper.match(/\{#include (.*?)(?: root=(.*?))?\}/);
            this._template = includes[RegExp.$1];
            if (this._template == undefined) {
                if (Template.DEBUG_MODE)
                    throw new Error('jTemplates: Cannot find include: ' + RegExp.$1);
            }
            this._root = RegExp.$2;
        };

        /**
        * Run method get on included template.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        */
        Include.prototype.get = function(d, param, element, deep) {
            var $T = d;
            var $P = param;
            try {
                return this._template.get(eval(this._root), param, element, deep);
            } catch (e) {
                if (Template.DEBUG_MODE || (e instanceof JTException))
                    throw e;
            }
            return '';
        };

        /**
        * Create new node for {#param}.
        * @name UserParam
        * @class A class represent: {#param}.
        * @param {string} oper content of operator {#..}
        * @augments BaseNode
        */
        var UserParam = function(oper) {
            oper.match(/\{#param name=(\w*?) value=(.*?)\}/);
            this._name = RegExp.$1;
            this._value = RegExp.$2;
        };

        /**
        * Return value of selected parameter.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String} empty string
        */
        UserParam.prototype.get = function(d, param, element, deep) {
            var $T = d;
            var $P = param;
            var $Q = element;

            try {
                param[this._name] = eval(this._value);
            } catch (e) {
                if (Template.DEBUG_MODE || (e instanceof JTException))
                    throw e;
                param[this._name] = undefined;
            }
            return '';
        };

        /**
        * Create a new cycle node.
        * @name Cycle
        * @class A class represent: {#cycle}.
        * @param {string} oper content of operator {#..}
        * @augments BaseNode
        */
        var Cycle = function(oper) {
            oper.match(/\{#cycle values=(.*?)\}/);
            this._values = eval(RegExp.$1);
            this._length = this._values.length;
            if (this._length <= 0) {
                throw new Error('jTemplates: cycle has no elements');
            }
            this._index = 0;
            this._lastSessionID = -1;
        };

        /**
        * Do a step on cycle and return value.
        * @param {object} d data
        * @param {object} param parameters
        * @param {Element} element a HTML element
        * @param {Number} deep
        * @return {String}
        */
        Cycle.prototype.get = function(d, param, element, deep) {
            var sid = jQuery.data(element, 'jTemplateSID');
            if (sid != this._lastSessionID) {
                this._lastSessionID = sid;
                this._index = 0;
            }
            var i = this._index++ % this._length;
            return this._values[i];
        };


        /**
        * Add a Template to HTML Elements.
        * @param {Template/string} s a Template or a template string
        * @param {array} [includes] Array of included templates.
        * @param {object} [settings] Settings (see Template)
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.setTemplate = function(s, includes, settings) {
            if (s.constructor === Template) {
                return jQuery(this).each(function() {
                    jQuery.data(this, 'jTemplate', s);
                    jQuery.data(this, 'jTemplateSID', 0);
                });
            } else {
                return jQuery(this).each(function() {
                    jQuery.data(this, 'jTemplate', new Template(s, includes, settings));
                    jQuery.data(this, 'jTemplateSID', 0);
                });
            }
        };

        /**
        * Add a Template (from URL) to HTML Elements.
        * @param {string} url_ URL to template
        * @param {array} [includes] Array of included templates.
        * @param {object} [settings] Settings (see Template)
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.setTemplateURL = function(url_, includes, settings) {
            var s = jQuery.ajax({
                url: url_,
                async: false
            }).responseText;

            return jQuery(this).setTemplate(s, includes, settings);
        };

        /**
        * Create a Template from element's content.
        * @param {string} elementName an ID of element
        * @param {array} [includes] Array of included templates.
        * @param {object} [settings] Settings (see Template)
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.setTemplateElement = function(elementName, includes, settings) {
            var s = jQuery('#' + elementName).val();
            if (s == null) {
                s = jQuery('#' + elementName).html();
                s = s.replace(/&lt;/g, "<").replace(/&gt;/g, ">");
            }

            s = jQuery.trim(s);
            s = s.replace(/^<\!\[CDATA\[([\s\S]*)\]\]>$/im, '$1');
            s = s.replace(/^<\!--([\s\S]*)-->$/im, '$1');

            return jQuery(this).setTemplate(s, includes, settings);
        };

        /**
        * Check it HTML Elements have a template. Return count of templates.
        * @return {number} Number of templates.
        * @memberOf jQuery.fn
        */
        jQuery.fn.hasTemplate = function() {
            var count = 0;
            jQuery(this).each(function() {
                if (jQuery.getTemplate(this)) {
                    ++count;
                }
            });
            return count;
        };

        /**
        * Remote Template from HTML Element(s)
        * @return {jQuery} chainable jQuery class
        */
        jQuery.fn.removeTemplate = function() {
            jQuery(this).processTemplateStop();
            return jQuery(this).each(function() {
                jQuery.removeData(this, 'jTemplate');
            });
        };

        /**
        * Set to parameter 'name' value 'value'.
        * @param {string} name
        * @param {object} value
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.setParam = function(name, value) {
            return jQuery(this).each(function() {
                var t = jQuery.getTemplate(this);
                if (t === undefined) {
                    if (Template.DEBUG_MODE)
                        throw new Error('jTemplates: Template is not defined.');
                    else
                        return;
                }
                t.setParam(name, value);
            });
        };

        /**
        * Process template using data 'd' and parameters 'param'. Update HTML code.
        * @param {object} d data 
        * @param {object} [param] parameters
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.processTemplate = function(d, param) {
            return jQuery(this).each(function() {
                var t = jQuery.getTemplate(this);
                if (t === undefined) {
                    if (Template.DEBUG_MODE)
                        throw new Error('jTemplates: Template is not defined.');
                    else
                        return;
                }
                jQuery.data(this, 'jTemplateSID', jQuery.data(this, 'jTemplateSID') + 1);
                jQuery(this).html(t.get(d, param, this, 0));
            });
        };

        /**
        * Process template using data from URL 'url_' (only format JSON) and parameters 'param'. Update HTML code.
        * @param {string} url_ URL to data (in JSON)
        * @param {object} [param] parameters
        * @param {object} options options and callbacks
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.processTemplateURL = function(url_, param, options) {
            var that = this;

            options = jQuery.extend({
                type: 'GET',
                async: true,
                cache: false
            }, options);

            jQuery.ajax({
                url: url_,
                type: options.type,
                data: options.data,
                dataFilter: options.dataFilter,
                async: options.async,
                cache: options.cache,
                timeout: options.timeout,
                dataType: 'json',
                success: function(d) {
                    var r = jQuery(that).processTemplate(d, param);
                    if (options.on_success) {
                        options.on_success(r);
                    }
                },
                error: options.on_error,
                complete: options.on_complete
            });
            return this;
        };

        //#####>UPDATER
        /**
        * Create new Updater.
        * @name Updater
        * @class This class is used for 'Live Refresh!'.
        * @param {string} url A destination URL
        * @param {object} param Parameters (for template)
        * @param {number} interval Time refresh interval
        * @param {object} args Additional URL parameters (in URL alter ?) as assoc array.
        * @param {array} objs An array of HTMLElement which will be modified by Updater.
        * @param {object} options options and callbacks
        */
        var Updater = function(url, param, interval, args, objs, options) {
            this._url = url;
            this._param = param;
            this._interval = interval;
            this._args = args;
            this.objs = objs;
            this.timer = null;
            this._options = options || {};

            var that = this;
            jQuery(objs).each(function() {
                jQuery.data(this, 'jTemplateUpdater', that);
            });
            this.run();
        };

        /**
        * Create new HTTP request to server, get data (as JSON) and send it to templates. Also check does HTMLElements still exists in Document.
        */
        Updater.prototype.run = function() {
            this.detectDeletedNodes();
            if (this.objs.length == 0) {
                return;
            }
            var that = this;
            jQuery.getJSON(this._url, this._args, function(d) {
                var r = jQuery(that.objs).processTemplate(d, that._param);
                if (that._options.on_success) {
                    that._options.on_success(r);
                }
            });
            this.timer = setTimeout(function() { that.run(); }, this._interval);
        };

        /**
        * Check does HTMLElements still exists in HTML Document.
        * If not exist, delete it from property 'objs'.
        */
        Updater.prototype.detectDeletedNodes = function() {
            this.objs = jQuery.grep(this.objs, function(o) {
                if (jQuery.browser.msie) {
                    var n = o.parentNode;
                    while (n && n != document) {
                        n = n.parentNode;
                    }
                    return n != null;
                } else {
                    return o.parentNode != null;
                }
            });
        };

        /**
        * Start 'Live Refresh!'.
        * @param {string} url A destination URL
        * @param {object} param Parameters (for template)
        * @param {number} interval Time refresh interval
        * @param {object} args Additional URL parameters (in URL alter ?) as assoc array.
        * @param {object} options options and callbacks
        * @return {Updater} an Updater object
        * @memberOf jQuery.fn
        */
        jQuery.fn.processTemplateStart = function(url, param, interval, args, options) {
            return new Updater(url, param, interval, args, this, options);
        };

        /**
        * Stop 'Live Refresh!'.
        * @return {jQuery} chainable jQuery class
        * @memberOf jQuery.fn
        */
        jQuery.fn.processTemplateStop = function() {
            return jQuery(this).each(function() {
                var updater = jQuery.data(this, 'jTemplateUpdater');
                if (updater == null) {
                    return;
                }
                var that = this;
                updater.objs = jQuery.grep(updater.objs, function(o) {
                    return o != that;
                });
                jQuery.removeData(this, 'jTemplateUpdater');
            });
        };
        //#####<UPDATER

        jQuery.extend(/** @scope jQuery.prototype */{
        /**
        * Create new Template.
        * @param {string} s A template string (like: "Text: {$T.txt}.").
        * @param {array} includes Array of included templates.
        * @param {object} settings Settings. (see Template)
        * @return {Template}
        */
        createTemplate: function(s, includes, settings) {
            return new Template(s, includes, settings);
        },

        /**
        * Create new Template from URL.
        * @param {string} url_ URL to template
        * @param {array} includes Array of included templates.
        * @param {object} settings Settings. (see Template)
        * @return {Template}
        */
        createTemplateURL: function(url_, includes, settings) {
            var s = jQuery.ajax({
                url: url_,
                async: false
            }).responseText;

            return new Template(s, includes, settings);
        },

        /**
        * Get a Template for HTML node
        * @param {Element} HTML node
        * @return {Template} a Template or "undefined"
        */
        getTemplate: function(element) {
            return jQuery.data(element, 'jTemplate');
        },

        /**
        * Process template and return text content.
        * @param {Template} template A Template
        * @param {object} data data
        * @param {object} param parameters
        * @return {string} Content of template
        */
        processTemplateToText: function(template, data, parameter) {
            return template.get(data, parameter, undefined, 0);
        },

        /**
        * Set Debug Mode
        * @param {Boolean} value
        */
        jTemplatesDebugMode: function(value) {
            Template.DEBUG_MODE = value;
        }
    });

})(jQuery);
}
// End of script: OpenQuarters.WebQuarters.Core.Web.jquery-jtemplates.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery-jforms.js
jQuery.fn.jForm = function(opts) {
    opts = jQuery.extend({
        form: '',
        method: '',
        url: '',
        onCancel: null,
        onLoaded: null,
        onProceed: null,
        onSuccess: null,
        coreElement: null,
        messagesElement: null,
        object: null,
        params: null,
        saveButtonText: null,
        ajaxMode: true,
        showSummary: true,
        hiddenFields: null
    }, opts || {});

    requiredResources = [];
    resources = {};

    jForms_RefreshSelect = function(sel) {
        if (!sel) { sel = this; }
        var optionSource = $(sel).attr('rel');

        // Deal with /Enum.Type.Name/['PropertyName' for object
        // or 'Form.PropertyName' for which form field to get the data]
        if (optionSource) {
            if (optionSource.indexOf('/[') > -1) {
                var dataProperty = optionSource.substring(optionSource.indexOf('/[') + 2);
                dataProperty = dataProperty.substring(0, dataProperty.length - 1);
                var propValue = null;
                if (optionSource.indexOf('Form.') > -1) {
                    // Data from form
                    var formField = $(opts.coreElement.find('*[name=' + dataProperty.replace('Form.', '') + ']')[0]);
                    propValue = formField.val();
                    formField.unbind('change', jForms_RefreshDependentSelects);
                    formField.bind('change', jForms_RefreshDependentSelects);
                } else {
                    // Data from the object's property
                    eval('propValue = opts.object.' + dataProperty + ';');
                }
                optionSource = optionSource.substring(0, optionSource.indexOf('/[')) + '/' + propValue;
            }
            if (optionSource && optionSource.length > 0) {
                $(sel).removeOption(/./);
                $(sel).addOption("Loading...", "Loading...");
                $.postJSON('/cms/info/GetOptionList', { source: optionSource }, function(json) {
                    $(sel).removeOption(/./);
                    $(json).each(function(optionIndex, option) {
                        $(sel).addOption(option.id, option.value);
                    });
                    eval('var bPropExists = selectBoxValues.' + $(sel).attr('name') + ';');
                    if (bPropExists) {
                        $(sel).val(bPropExists);
                    }
                    else {
                        $(sel).val('');
                    }

                });
            } else {
                eval('var bPropExists = selectBoxValues.' + $(sel).attr('name') + ';');
                if (bPropExists) {
                    $(sel).val(bPropExists);
                }
            }
        }
    };

    jForms_RefreshDependentSelects = function() {
        var selName = $(this).attr('name');
        opts.coreElement.find('select').each(function() {
            if ($(this).attr('rel').indexOf('/[Form.' + selName) > -1) {
                jForms_RefreshSelect(this);
            }
        });
    };

    var selectBoxValues = {};
    var checkBoxValues = {};

    return this.each(function(i, e) {

        var formUrl = ''
        if (opts.form.indexOf('/') > -1) {
            formUrl = opts.form;
        } else if (opts.form.indexOf(',') > -1) {
            formUrl = '/CMS/File/Resource?Assembly=' + opts.form.split(',')[0] + '&Filename=' + opts.form.split(',')[1];
        }
        else {
            formUrl = '/Forms/' + opts.form + '.tpl';
        }

        $.get(formUrl, {}, function(tpl) {
            $(tpl.split("\n")).each(function(lineIndex, line) {
                if (line.indexOf('{$T.') > -1) {
                    var matches = line.match(/\{\$T\.(.[^\}]*)\}/);
                    if (matches) {
                        requiredResources.push(matches[1]);
                    }
                }
            });

            $.getTranslations(requiredResources, function(json) {

                resources = $.extend(json, resources);

                opts.messagesElement = $('<div class="validationSummary"></div>');
                opts.messagesElement.appendTo($(e));

                // Wrap fields in dummy form
                opts.coreElement = $('<form action="' + opts.url + '" method="' + opts.method + '"></form>');
                opts.coreElement.appendTo($(e));

                opts.coreElement
                    .setTemplateURL(formUrl)
                    .setParam('object', opts.object || {})
                    .processTemplate(resources);

                var modalParent = opts.coreElement.parents('.modalContainer:first');
                if (modalParent.length > 0) {
                    modalParent.find('form').after($('<div class="cmsClear">&nbsp;</div>'));
                }

                // Parse "current" object values into relevant form fields
                // Save values of select boxes and checkboxes for later use
                if (opts.object) {
                    opts.coreElement.find(':input').each(function(i2, e2) {
                        var input = $(this);
                        var fieldVal = opts.object[input.attr('name')];
                        if (input[0].tagName.toLowerCase() == 'select') {
                            eval('var tempVal = { ' + input.attr('name') + ': fieldVal };');
                            selectBoxValues = $.extend(selectBoxValues, tempVal);
                        } else if (input.attr('type').toLowerCase() == 'checkbox') {
                            if (fieldVal && fieldVal.toString() == "true") {
                                eval('var tempVal = { ' + input.attr('name') + ': true };');
                            } else {
                                eval('var tempVal = { ' + input.attr('name') + ': false };');
                            }
                            checkBoxValues = $.extend(checkBoxValues, tempVal);
                        } else if (fieldVal != undefined && fieldVal && fieldVal.indexOf && fieldVal.indexOf('/Date(') > -1) {
                            fieldVal = fieldVal.replace('/Date(', '').replace(')/', '');
                            var date = new Date(parseInt(fieldVal));
                            input.addClass('datePicker');
                            //input.val(date.getFullYear() + '-' + padLeft(date.getMonth(), 2, '0') + '-' + padLeft(date.getDate(), 2, '0') + ' ' + padLeft(date.getHours(), 2, '0') + ':' + padLeft(date.getMinutes(), 2, '0') + ':' + padLeft(date.getSeconds(), 2, '0'));
                            input.val(date.asString('yyyy-mm-dd'));
                        } else if (fieldVal != undefined) {
                            input.val(fieldVal);
                        }
                    });
                }

                // Populate select boxes with options, set selected options
                var timer = 250;
                opts.coreElement
                .find('select')
                .each(function(selIndex, sel) {
                    opts.coreElement.animate({ opacity: 1 }, timer, function() {
                        jForms_RefreshSelect(sel, opts.coreElement);
                    });
                    timer = timer + 100;
                }).each(function(selIndex, sel) {

                });

                opts.coreElement.find('label').each(function(labelIndex, lbl) {
                    if ($(lbl).attr('for').length == 0) {
                        var guid = new Guid();
                        $(lbl).attr('for', guid.generate());
                        $(lbl).parent().find('span').each(function(spanIndex, span) {
                            $($(span).children()[0]).attr('id', $(lbl).attr('for'));
                        });
                    }
                });

                // Set checkboxes to correct initial values
                opts.coreElement.find('input[type=checkbox]').each(function(chkIndex, chk) {
                    eval('chk.checked = checkBoxValues.' + $(chk).attr('name') + ';');
                });

                //opts.coreElement.find('.datePicker').datePicker();

                // Populate hidden fields with form fields
                opts.coreElement.find('input[type=hidden]').each(function(hdnIndex, chk) {
                    eval('chk.checked = checkBoxValues.' + $(chk).attr('name') + ';');
                });

                // Add passed hidden inputs
                if (opts.hiddenFields) {
                    $.each(opts.hiddenFields, function(i, field) {
                        hiddenField = $('<input type="hidden" id="' + i + '" name="' + i + '" value="' + field + '" class="param" />')
                        opts.coreElement.append(hiddenField);
                    });
                }

                if (opts.saveButtonText && opts.saveButtonText.length > 0) {
                    opts.coreElement.find('.saveButton').val(opts.saveButtonText);
                }
                
                // Set up date pickers
                opts.coreElement.find('.datePicker').datepicker({ dateFormat: 'yy-mm-dd' });

                if (opts.onLoaded) {
                    opts.onLoaded();
                }

                opts.coreElement.find('.cancelButton').css('cursor', 'pointer').click(function() {
                    if (opts.onCancel) {
                        opts.onCancel();
                    }
                });

                if (opts.ajaxMode) {
                    opts.coreElement.submit(function() {
                        return false;
                    });

                    opts.coreElement
                    .find('.saveButton')
                    .css('cursor', 'pointer')
                    .click(function() {

                        opts.messagesElement.html('');
                        var obj = {};
                        if (opts.object) {
                            obj = $.extend(obj, opts.object);
                        }

                        var formValues = {};
                        var paramsObj = {};

                        opts.coreElement.find('.formRow :input[type!=button]').each(function(i2, e2) {
                            var input = $(e2);
                            var inputVal = input.val();
                            if (input.attr('type').toLowerCase() == 'checkbox' || input.attr('type').toLowerCase() == 'radio') {
                                var inputChecked = input.attr('checked').toString();

                                if (inputChecked && (inputChecked.toLowerCase() == 'on' || inputChecked.toLowerCase() == 'checked' || inputChecked.toLowerCase() == 'true')) {
                                    if (inputVal.length != 0) {
                                        if (inputVal.toLowerCase() == 'on' || inputVal.toLowerCase() == 'checked' || inputVal.toLowerCase() == 'true') {
                                            inputVal = 'true';
                                        }
                                        else {
                                            // return value
                                        }
                                    }
                                    else {
                                        inputVal = 'true';
                                    }
                                }
                                else if (inputChecked) {
                                    // assume false
                                    if (inputVal.length != 0) {
                                        if (inputVal.toLowerCase() == 'on' || inputVal.toLowerCase() == 'checked' || inputVal.toLowerCase() == 'true' || inputVal.toLowerCase() == 'off' || inputVal.toLowerCase() == 'false') {
                                            inputVal = 'false';
                                        }
                                        else {
                                            inputVal = null;
                                        }
                                    }
                                    else {
                                        inputVal = 'false';
                                    }
                                }
                                else {
                                    if (inputVal.length != 0) {
                                        if (inputVal.toLowerCase() == 'on' || inputVal.toLowerCase() == 'checked' || inputVal.toLowerCase() == 'true' || inputVal.toLowerCase() == 'off' || inputVal.toLowerCase() == 'false') {
                                            inputVal = 'false';
                                        }
                                        else {
                                            inputVal = null;
                                        }
                                    }
                                    else {
                                        inputVal = 'false';
                                    }
                                }
                            }
                            if (inputVal != null) {
                                if (input.hasClass("param")) {
                                    if (paramsObj.hasOwnProperty(input.attr('name')) && paramsObj[input.attr('name')].length != 0)
                                        paramsObj[input.attr('name')] = paramsObj[input.attr('name')] + ',' + inputVal;
                                    else
                                        paramsObj[input.attr('name')] = inputVal;
                                } else {
                                    if (formValues.hasOwnProperty(input.attr('name')) && formValues[input.attr('name')].length != 0)
                                        formValues[input.attr('name')] = formValues[input.attr('name')] + ',' + inputVal;
                                    else
                                        formValues[input.attr('name')] = inputVal;
                                }
                            }
                        });

                        // Pass hidden params
                        opts.coreElement.find('input[type=hidden]').each(function(i2, e2) {
                            if (paramsObj.hasOwnProperty($(e2).attr('name')) && paramsObj[$(e2).attr('name')].length != 0)
                                paramsObj[$(e2).attr('name')] = paramsObj[$(e2).attr('name')] + ',' + $(e2).val();
                            else
                                paramsObj[$(e2).attr('name')] = $(e2).val();
                            if (formValues.hasOwnProperty($(e2).attr('name')) && formValues[$(e2).attr('name')].length != 0)
                                formValues[$(e2).attr('name')] = formValues[$(e2).attr('name')] + ',' + $(e2).val();
                            else
                                formValues[$(e2).attr('name')] = $(e2).val();
                        });

                        // update obj from formValues
                        $.extend(obj, formValues);

                        if (opts.onProceed) {
                            opts.onProceed(obj);
                        }
                        if (opts.url && opts.url.length > 0) {
                            var postData = { object: $.compactJSON(obj) };
                            if (opts.params) {
                                postData = $.extend(postData, opts.params);
                            }
                            postData = $.extend(postData, paramsObj)
                            $.postJSON(opts.url, postData, function(json) {
                                if (json.success) {
                                    if (opts.onSuccess) {
                                        opts.onSuccess(json.result);
                                    }
                                } else {
                                    if (opts.coreElement.find('.validationSummary').length != 0) {
                                        var errs = '';
                                        for (prop in json.errorMessages) {

                                            $(json.errorMessages[prop]).each(function(i, o) {
                                                errs += '<li>';
                                                errs += o;
                                                errs += '</li>';
                                            });
                                        }
                                        opts.coreElement.find('.validationSummary').html('<ul class="errors">' + errs + '</ul>');
                                    }
                                    // Display validation messages
                                    opts.coreElement.find('span .validationMessage').each(function() {
                                        var elm = $(this);
                                        $(elm).html('');
                                        if ($(this).attr('rel').length != 0 && json.errorMessages[$(this).attr('rel')]) {
                                            $(json.errorMessages[$(this).attr('rel')]).each(function() {
                                                $(elm).html($(elm).html() + this + '; ');
                                            });
                                        }
                                    });
                                }
                            });
                        }

                        opts.coreElement.find('input[type=text]:first').focus();
                        return false;
                    });
                }
            });
        });
    });
};

// End of script: OpenQuarters.WebQuarters.Core.Web.jquery-jforms.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.simplemodal.js
/*
 * SimpleModal 1.1.1 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * http://plugins.jquery.com/project/SimpleModal
 * http://code.google.com/p/simplemodal/
 *
 * Copyright (c) 2007 Eric Martin - http://ericmmartin.com
 *
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Revision: $Id: jquery.simplemodal.js 93 2008-01-15 16:14:20Z emartin24 $
 *
 */

/**
 * SimpleModal is a lightweight jQuery plugin that provides a simple
 * interface to create a modal dialog.
 *
 * The goal of SimpleModal is to provide developers with a cross-browser 
 * overlay and container that will be populated with data provided to
 * SimpleModal.
 *
 * There are two ways to call SimpleModal:
 * 1) As a chained function on a jQuery object, like $('#myDiv').modal();.
 * This call would place the DOM object, #myDiv, inside a modal dialog.
 * Chaining requires a jQuery object. An optional options object can be
 * passed as a parameter.
 *
 * @example $('<div>my data</div>').modal({options});
 * @example $('#myDiv').modal({options});
 * @example jQueryObject.modal({options});
 *
 * 2) As a stand-alone function, like $.modal(data). The data parameter
 * is required and an optional options object can be passed as a second
 * parameter. This method provides more flexibility in the types of data 
 * that are allowed. The data could be a DOM object, a jQuery object, HTML
 * or a string.
 * 
 * @example $.modal('<div>my data</div>', {options});
 * @example $.modal('my data', {options});
 * @example $.modal($('#myDiv'), {options});
 * @example $.modal(jQueryObject, {options});
 * @example $.modal(document.getElementById('myDiv'), {options}); 
 * 
 * A SimpleModal call can contain multiple elements, but only one modal 
 * dialog can be created at a time. Which means that all of the matched
 * elements will be displayed within the modal container.
 * 
 * SimpleModal internally sets the CSS needed to display the modal dialog
 * properly in all browsers, yet provides the developer with the flexibility
 * to easily control the look and feel. The styling for SimpleModal can be 
 * done through external stylesheets, or through SimpleModal, using the
 * overlayCss and/or containerCss options.
 *
 * SimpleModal has been tested in the following browsers:
 * - IE 6, 7
 * - Firefox 2
 * - Opera 9
 * - Safari 3
 *
 * @name SimpleModal
 * @type jQuery
 * @requires jQuery v1.1.2
 * @cat Plugins/Windows and Overlays
 * @author Eric Martin (http://ericmmartin.com)
 * @version 1.1.1
 */
(function($) {
    /*
    * Stand-alone function to create a modal dialog.
    * 
    * @param {string, object} data A string, jQuery object or DOM object
    * @param {object} [options] An optional object containing options overrides
    */
    $.modal = function(data, options) {
        return $.modal.impl.init(data, options);
    };

    /*
    * Stand-alone close function to close the modal dialog
    */
    $.modal.close = function() {
        // call close with the external parameter set to true
        $.modal.impl.close(true);
        $('.cmsModal').hide(0);
    };

    /*
    * Chained function to create a modal dialog.
    * 
    * @param {object} [options] An optional object containing options overrides
    */
    $.fn.modal = function(options) {
        return $.modal.impl.init(this, options);
    };

    /*
    * SimpleModal default options
    * 
    * overlay: (Number:50) The overlay div opacity value, from 0 - 100
    * overlayId: (String:'modalOverlay') The DOM element id for the overlay div
    * overlayCss: (Object:{}) The CSS styling for the overlay div
    * containerId: (String:'modalContainer') The DOM element id for the container div
    * containerCss: (Object:{}) The CSS styling for the container div
    * close: (Boolean:true) Show the default window close icon? Uses CSS class modalCloseImg
    * closeTitle: (String:'Close') The title value of the default close link. Depends on close
    * closeClass: (String:'modalClose') The CSS class used to bind to the close event
    * persist: (Boolean:false) Persist the data across modal calls? Only used for existing
    DOM elements. If true, the data will be maintained across modal calls, if false,
    the data will be reverted to its original state.
    * onOpen: (Function:null) The callback function used in place of SimpleModal's open
    * onShow: (Function:null) The callback function used after the modal dialog has opened
    * onClose: (Function:null) The callback function used in place of SimpleModal's close
    */
    $.modal.defaults = {
        overlay: 85,
        overlayId: 'modalOverlay',
        overlayCss: {},
        containerId: 'modalContainer',
        containerCss: {},
        close: true,
        closeTitle: 'Close',
        closeClass: 'modalClose',
        persist: false,
        onOpen: null,
        onShow: null,
        onClose: null
    };

    /*
    * Main modal object
    */
    $.modal.impl = {
        /*
        * Modal dialog options
        */
        opts: null,
        /*
        * Contains the modal dialog elements and is the object passed 
        * back to the callback (onOpen, onShow, onClose) functions
        */
        dialog: {},
        /*
        * Initialize the modal dialog
        */
        init: function(data, options) {
            // don't allow multiple calls
            if (this.dialog.data) {
                return false;
            }

            // merge defaults and user options
            this.opts = $.extend({}, $.modal.defaults, options);

            // determine how to handle the data based on its type
            if (typeof data == 'object') {
                // convert DOM object to a jQuery object
                data = data instanceof jQuery ? data : $(data);

                // if the object came from the DOM, keep track of its parent
                if (data.parent().parent().size() > 0) {
                    this.dialog.parentNode = data.parent();

                    // persist changes? if not, make a clone of the element
                    if (!this.opts.persist) {
                        this.dialog.original = data.clone(true);
                    }
                }
            }
            else if (typeof data == 'string' || typeof data == 'number') {
                // just insert the data as innerHTML
                data = $('<div>').html(data);
            }
            else {
                // unsupported data type!
                if (console) {
                    console.log('SimpleModal Error: Unsupported data type: ' + typeof data);
                }
                return false;
            }
            this.dialog.data = data.addClass('modalData');
            data = null;

            // create the modal overlay, container and, if necessary, iframe
            this.create();

            // display the modal dialog
            this.open();

            // useful for adding events/manipulating data in the modal dialog
            if ($.isFunction(this.opts.onShow)) {
                this.opts.onShow.apply(this, [this.dialog]);
            }

            // don't break the chain =)
            return this;
        },
        /*
        * Create and add the modal overlay and container to the page
        */
        create: function() {
            // create the overlay
            this.dialog.overlay = $('<div>')
				.attr('id', this.opts.overlayId)
				.addClass('modalOverlay')
				.css($.extend(this.opts.overlayCss, {
				    opacity: this.opts.overlay / 100,
				    height: (parseInt($(window).height()) + parseInt($(window).scrollTop())) + 'px',
				    width: (parseInt($(window).width()) + parseInt($(window).scrollLeft())) + 'px',
				    position: 'absolute',
				    left: 0,
				    top: 0,
				    zIndex: 3000
				}))
				.hide()
				.appendTo('body')
				.click(function() {
				    $.modal.close();
				});

            // create the container
            this.dialog.container = $('<div>')
				.attr('id', this.opts.containerId)
				.addClass('modalContainer')
				.css($.extend(this.opts.containerCss, {
				    position: 'absolute',
				    zIndex: 3100,
				    top: (30 + parseInt($(window).scrollTop())) + 'px'
				}))
				.append(this.opts.close
					? '<a class="modalCloseImg '
						+ this.opts.closeClass
						+ '" title="'
						+ this.opts.closeTitle + '"></a>'
					: '')
				.hide()
				.appendTo('body');



            // fix issues with IE and create an iframe
            if ($.browser.msie && ($.browser.version < 7)) {
                this.fixIE();
            }


            // hide the data and add it to the container
            this.dialog.container.append(this.dialog.data.hide());
        },
        /*
        * Bind events
        */
        bindEvents: function() {
            var modal = this;

            // bind the close event to any element with the closeClass class
            $('.' + this.opts.closeClass).click(function(e) {
                e.preventDefault();
                modal.close();
            });
        },
        /*
        * Unbind events
        */
        unbindEvents: function() {
            // remove the close event
            $('.' + this.opts.closeClass).unbind('click');
        },
        /*
        * Fix issues in IE 6
        */
        fixIE: function() {
            var wHeight = (parseInt($(window).height()) + parseInt($(window).scrollTop())) + 'px';
            var wWidth = $(window).width() + 'px';

            // position hacks
            this.dialog.overlay.css({ position: 'absolute', height: wHeight, width: wWidth });
            this.dialog.container.css({ position: 'absolute' });

            // add an iframe to prevent select options from bleeding through
            this.dialog.iframe = $('<iframe src="javascript:false;">')
				.css($.extend(this.opts.iframeCss, {
				    opacity: 0,
				    position: 'absolute',
				    height: wHeight,
				    width: wWidth,
				    zIndex: 1000,
				    top: 0,
				    left: 0
				}))
				.hide()
				.appendTo('body');
        },
        /*
        * Open the modal dialog elements
        * - Note: If you use the onOpen callback, you must "show" the 
        *         overlay and container elements manually 
        *         (the iframe will be handled by SimpleModal)
        */
        open: function() {

            // display the iframe
            if (this.dialog.iframe) {
                this.dialog.iframe.show();
            }

            if ($.isFunction(this.opts.onOpen)) {
                // execute the onOpen callback 
                this.opts.onOpen.apply(this, [this.dialog]);
            }
            else {
                // display the remaining elements
                this.dialog.overlay.fadeIn(250).height($().height());
                this.dialog.container.fadeIn(500);
                this.dialog.data.fadeIn(500);
            }

            this.dialog.container
            .css('left', '25px')
            .css('top', '75px')
            .css('width', parseInt($(document).width() - 50) + 'px')
            .scrollFollow({ offset: 75 });

            //this.dialog.data
            //.css('height', parseInt($(document).height() - 250) + 'px');

            // bind default events
            this.bindEvents();
        },
        /*
        * Close the modal dialog
        * - Note: If you use an onClose callback, you must remove the 
        *         overlay, container and iframe elements manually
        *
        * @param {boolean} external Indicates whether the call to this
        *     function was internal or external. If it was external, the
        *     onClose callback will be ignored
        */
        close: function(external) {
            // prevent close when dialog does not exist
            if (!this.dialog.data) {
                return false;
            }

            if ($.isFunction(this.opts.onClose) && !external) {
                // execute the onClose callback
                this.opts.onClose.apply(this, [this.dialog]);
            }
            else {
                // if the data came from the DOM, put it back
                if (this.dialog.parentNode) {
                    // save changes to the data?
                    if (this.opts.persist) {
                        // insert the (possibly) modified data back into the DOM
                        this.dialog.data.hide().appendTo(this.dialog.parentNode);
                    }
                    else {
                        // remove the current and insert the original, 
                        // unmodified data back into the DOM
                        this.dialog.data.remove();
                        this.dialog.original.appendTo(this.dialog.parentNode);
                    }
                }
                else {
                    // otherwise, remove it
                    this.dialog.data.remove();
                }

                // remove the remaining elements
                this.dialog.container.remove();
                this.dialog.overlay.remove();
                if (this.dialog.iframe) {
                    this.dialog.iframe.remove();
                }

                // reset the dialog object
                this.dialog = {};
            }

            // remove the default events
            this.unbindEvents();
        }
    };
})(jQuery);

(function($) {
    /*
    * Stand-alone function to create a modal dialog.
    * 
    * @param {string, object} data A string, jQuery object or DOM object
    * @param {object} [options] An optional object containing options overrides
    */
    $.imageModal = function(data, options) {
        return $.imageModal.impl.init(data, options);
    };

    /*
    * Stand-alone close function to close the modal dialog
    */
    $.imageModal.close = function() {
        // call close with the external parameter set to true
        $.imageModal.impl.close(true);
    };

    /*
    * Chained function to create a modal dialog.
    * 
    * @param {object} [options] An optional object containing options overrides
    */
    $.fn.imageModal = function(options) {
        return $.imageModal.impl.init(this, options);
    };

    /*
    * SimpleModal default options
    * 
    * overlay: (Number:50) The overlay div opacity value, from 0 - 100
    * overlayId: (String:'modalOverlay') The DOM element id for the overlay div
    * overlayCss: (Object:{}) The CSS styling for the overlay div
    * containerId: (String:'modalContainer') The DOM element id for the container div
    * containerCss: (Object:{}) The CSS styling for the container div
    * close: (Boolean:true) Show the default window close icon? Uses CSS class modalCloseImg
    * closeTitle: (String:'Close') The title value of the default close link. Depends on close
    * closeClass: (String:'modalClose') The CSS class used to bind to the close event
    * persist: (Boolean:false) Persist the data across modal calls? Only used for existing
    DOM elements. If true, the data will be maintained across modal calls, if false,
    the data will be reverted to its original state.
    * onOpen: (Function:null) The callback function used in place of SimpleModal's open
    * onShow: (Function:null) The callback function used after the modal dialog has opened
    * onClose: (Function:null) The callback function used in place of SimpleModal's close
    */
    $.imageModal.defaults = {
        overlay: 85,
        overlayId: 'imageModalOverlay',
        overlayCss: {},
        containerId: 'imageModalContainer',
        containerCss: {},
        close: true,
        closeTitle: 'Close',
        closeClass: 'imageModalClose',
        persist: false,
        onOpen: null,
        onShow: null,
        onClose: null
    };

    /*
    * Main modal object
    */
    $.imageModal.impl = {
        /*
        * Modal dialog options
        */
        opts: null,
        /*
        * Contains the modal dialog elements and is the object passed 
        * back to the callback (onOpen, onShow, onClose) functions
        */
        dialog: {},
        /*
        * Initialize the modal dialog
        */
        init: function(data, options) {
            // don't allow multiple calls
            if (this.dialog.data) {
                return false;
            }

            // merge defaults and user options
            this.opts = $.extend({}, $.imageModal.defaults, options);

            // determine how to handle the data based on its type
            if (typeof data == 'object') {
                // convert DOM object to a jQuery object
                data = data instanceof jQuery ? data : $(data);

                // if the object came from the DOM, keep track of its parent
                if (data.parent().parent().size() > 0) {
                    this.dialog.parentNode = data.parent();

                    // persist changes? if not, make a clone of the element
                    if (!this.opts.persist) {
                        this.dialog.original = data.clone(true);
                    }
                }
            }
            else if (typeof data == 'string' || typeof data == 'number') {
                // just insert the data as innerHTML
                data = $('<div>').html(data);
            }
            else {
                // unsupported data type!
                if (console) {
                    console.log('SimpleModal Error: Unsupported data type: ' + typeof data);
                }
                return false;
            }
            this.dialog.data = data.addClass('modalData');
            data = null;

            // create the modal overlay, container and, if necessary, iframe
            this.create();

            // display the modal dialog
            this.open();

            // useful for adding events/manipulating data in the modal dialog
            if ($.isFunction(this.opts.onShow)) {
                this.opts.onShow.apply(this, [this.dialog]);
            }

            // don't break the chain =)
            return this;
        },
        /*
        * Create and add the modal overlay and container to the page
        */
        create: function() {
            // create the overlay
            this.dialog.overlay = $('<div>')
				.attr('id', this.opts.overlayId)
				.addClass('imageModalOverlay')
				.css($.extend(this.opts.overlayCss, {
				    opacity: this.opts.overlay / 100,
				    height: (parseInt($(window).height()) + parseInt($(window).scrollTop())) + 'px',
				    width: (parseInt($(window).width()) + parseInt($(window).scrollLeft())) + 'px',
				    position: 'absolute',
				    left: 0,
				    top: 0,
				    zIndex: 3000
				}))
				.hide()
				.appendTo('body')
				.click(function() {
				    $.imageModal.close();
				});

            // create the container
            this.dialog.container = $('<div>')
				.attr('id', this.opts.containerId)
				.addClass('imageModalContainer')
				.css($.extend(this.opts.containerCss, {
				    position: 'absolute',
				    zIndex: 3100,
				    top: (50 + parseInt($(window).scrollTop())) + 'px'
				}))
				.append(this.opts.close
					? '<a class="imageModalCloseImg '
						+ this.opts.closeClass
						+ '" title="'
						+ this.opts.closeTitle + '"></a>'
					: '')
				.hide()
				.appendTo('body');

            // fix issues with IE and create an iframe
            if ($.browser.msie && ($.browser.version < 7)) {
                this.fixIE();
            }

            // hide the data and add it to the container
            this.dialog.container.append(this.dialog.data.hide());
        },
        /*
        * Bind events
        */
        bindEvents: function() {
            var modal = this;

            // bind the close event to any element with the closeClass class
            $('.' + this.opts.closeClass).click(function(e) {
                e.preventDefault();
                modal.close();
            });
        },
        /*
        * Unbind events
        */
        unbindEvents: function() {
            // remove the close event
            $('.' + this.opts.closeClass).unbind('click');
        },
        /*
        * Fix issues in IE 6
        */
        fixIE: function() {
            var wHeight = (parseInt($(window).height()) + parseInt($(window).scrollTop())) + 'px';
            var wWidth = $(window).width() + 'px';

            // position hacks
            this.dialog.overlay.css({ position: 'absolute', height: wHeight, width: wWidth });
            this.dialog.container.css({ position: 'absolute' });

            // add an iframe to prevent select options from bleeding through
            this.dialog.iframe = $('<iframe src="javascript:false;">')
				.css($.extend(this.opts.iframeCss, {
				    opacity: 0,
				    position: 'absolute',
				    height: wHeight,
				    width: wWidth,
				    zIndex: 1000,
				    top: 0,
				    left: 0
				}))
				.hide()
				.appendTo('body');
        },
        /*
        * Open the modal dialog elements
        * - Note: If you use the onOpen callback, you must "show" the 
        *         overlay and container elements manually 
        *         (the iframe will be handled by SimpleModal)
        */
        open: function() {
            // display the iframe
            if (this.dialog.iframe) {
                this.dialog.iframe.show();
            }

            if ($.isFunction(this.opts.onOpen)) {
                // execute the onOpen callback 
                this.opts.onOpen.apply(this, [this.dialog]);
            }
            else {
                // display the remaining elements
                //this.dialog.overlay.animate({ opacity: 0.8 }, 1000);//.show();
                //this.dialog.container.show();
                //this.dialog.data.show();
            }

            this.dialog.container
            .css('left', Math.ceil((parseInt($(window).width()) - parseInt($(this.dialog.container).width())) / 2) + 'px')
            .css('top', (50 + parseInt($(window).scrollTop())) + 'px');

            // bind default events
            this.bindEvents();
        },
        /*
        * Close the modal dialog
        * - Note: If you use an onClose callback, you must remove the 
        *         overlay, container and iframe elements manually
        *
        * @param {boolean} external Indicates whether the call to this
        *     function was internal or external. If it was external, the
        *     onClose callback will be ignored
        */
        close: function(external) {
            // prevent close when dialog does not exist
            if (!this.dialog.data) {
                return false;
            }

            if ($.isFunction(this.opts.onClose) && !external) {
                // execute the onClose callback
                this.opts.onClose.apply(this, [this.dialog]);
            }
            else {
                // if the data came from the DOM, put it back
                if (this.dialog.parentNode) {
                    // save changes to the data?
                    if (this.opts.persist) {
                        // insert the (possibly) modified data back into the DOM
                        this.dialog.data.hide().appendTo(this.dialog.parentNode);
                    }
                    else {
                        // remove the current and insert the original, 
                        // unmodified data back into the DOM
                        this.dialog.data.remove();
                        this.dialog.original.appendTo(this.dialog.parentNode);
                    }
                }
                else {
                    // otherwise, remove it
                    this.dialog.data.remove();
                }

                // remove the remaining elements
                this.dialog.container.remove();
                this.dialog.overlay.remove();
                if (this.dialog.iframe) {
                    this.dialog.iframe.remove();
                }

                // reset the dialog object
                this.dialog = {};
            }

            // remove the default events
            this.unbindEvents();
        }
    };
})(jQuery);// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.simplemodal.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.scrollfollow.js
/**
 * jquery.scrollFollow.js
 * Copyright (c) 2008 Net Perspective (http://kitchen.net-perspective.com/)
 * Licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php)
 * 
 * @author R.A. Ray
 *
 * @projectDescription	jQuery plugin for allowing an element to animate down as the user scrolls the page.
 * 
 * @version 0.4.0
 * 
 * @requires jquery.js (tested with 1.2.6)
 * @requires ui.core.js (tested with 1.5.2)
 * 
 * @optional jquery.cookie.js (http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/)
 * @optional jquery.easing.js (http://gsgd.co.uk/sandbox/jquery/easing/ - tested with 1.3)
 * 
 * @param speed		int - Duration of animation (in milliseconds)
 * 								default: 500
 * @param offset			int - Number of pixels box should remain from top of viewport
 * 								default: 0
 * @param easing		string - Any one of the easing options from the easing plugin - Requires jQuery Easing Plugin < http://gsgd.co.uk/sandbox/jquery/easing/ >
 * 								default: 'linear'
 * @param container	string - ID of the containing div
 * 								default: box's immediate parent
 * @param killSwitch	string - ID of the On/Off toggle element
 * 								default: 'killSwitch'
 * @param onText		string - killSwitch text to be displayed if sliding is enabled
 * 								default: 'Turn Slide Off'
 * @param offText		string - killSwitch text to be displayed if sliding is disabled
 * 								default: 'Turn Slide On'
 * @param relativeTo	string - Scroll animation can be relative to either the 'top' or 'bottom' of the viewport
 * 								default: 'top'
 * @param delay			int - Time between the end of the scroll and the beginning of the animation in milliseconds
 * 								default: 0
 */

( function( $ ) {
	
	$.scrollFollow = function ( box, options )
	{ 
		// Convert box into a jQuery object
		box = $( box );
		
		// 'box' is the object to be animated
		var position = box.css( 'position' );
		
		function ani()
		{		
			// The script runs on every scroll which really means many times during a scroll.
			// We don't want multiple slides to queue up.
			box.queue( [ ] );
		
			// A bunch of values we need to determine where to animate to
			var viewportHeight = parseInt( $( window ).height() );	
			var pageScroll =  parseInt( $( document ).scrollTop() );
			var parentTop =  parseInt( box.cont.offset().top );
			var parentHeight = parseInt( box.cont.attr( 'offsetHeight' ) );
			var boxHeight = parseInt( box.attr( 'offsetHeight' ) + ( parseInt( box.css( 'marginTop' ) ) || 0 ) + ( parseInt( box.css( 'marginBottom' ) ) || 0 ) );
			var aniTop;
			
			// Make sure the user wants the animation to happen
			if ( isActive )
			{
				// If the box should animate relative to the top of the window
				if ( options.relativeTo == 'top' )
				{
					// Don't animate until the top of the window is close enough to the top of the box
					if ( box.initialOffsetTop >= ( pageScroll + options.offset ) )
					{
						aniTop = box.initialTop;
					}
					else
					{
						aniTop = Math.min( ( Math.max( ( -parentTop ), ( pageScroll - box.initialOffsetTop + box.initialTop ) ) + options.offset ), ( parentHeight - boxHeight - box.paddingAdjustment ) );
					}
				}
				// If the box should animate relative to the bottom of the window
				else if ( options.relativeTo == 'bottom' )
				{
					// Don't animate until the bottom of the window is close enough to the bottom of the box
					if ( ( box.initialOffsetTop + boxHeight ) >= ( pageScroll + options.offset + viewportHeight ) )
					{
						aniTop = box.initialTop;
					}
					else
					{
						aniTop = Math.min( ( pageScroll + viewportHeight - boxHeight - options.offset ), ( parentHeight - boxHeight ) );
					}
				}
				
				// Checks to see if the relevant scroll was the last one
				// "-20" is to account for inaccuracy in the timeout
				if ( ( new Date().getTime() - box.lastScroll ) >= ( options.delay - 20 ) )
				{
					box.animate(
						{
							top: aniTop
						}, options.speed, options.easing
					);
				}
			}
		};
		
		// For user-initiated stopping of the slide
		var isActive = true;
		
		if ( $.cookie != undefined )
		{
			if( $.cookie( 'scrollFollowSetting' + box.attr( 'id' ) ) == 'false' )
			{
				var isActive = false;
				
				$( '#' + options.killSwitch ).text( options.offText )
					.toggle( 
						function ()
						{
							isActive = true;
							
							$( this ).text( options.onText );
							
							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), true, { expires: 365, path: '/'} );
							
							ani();
						},
						function ()
						{
							isActive = false;
							
							$( this ).text( options.offText );
							
							box.animate(
								{
									top: box.initialTop
								}, options.speed, options.easing
							);	
							
							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), false, { expires: 365, path: '/'} );
						}
					);
			}
			else
			{
				$( '#' + options.killSwitch ).text( options.onText )
					.toggle( 
						function ()
						{
							isActive = false;
							
							$( this ).text( options.offText );
							
							box.animate(
								{
									top: box.initialTop
								}, 0
							);	
							
							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), false, { expires: 365, path: '/'} );
						},
						function ()
						{
							isActive = true;
							
							$( this ).text( options.onText );
							
							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), true, { expires: 365, path: '/'} );
							
							ani();
						}
					);
			}
		}
		
		// If no parent ID was specified, and the immediate parent does not have an ID
		// options.container will be undefined. So we need to figure out the parent element.
		if ( options.container == '')
		{
			box.cont = box.parent();
		}
		else
		{
			box.cont = $( '#' + options.container );
		}
		
		// Finds the default positioning of the box.
		box.initialOffsetTop =  parseInt( box.offset().top );
		box.initialTop = parseInt( box.css( 'top' ) ) || 0;
		
		// Hack to fix different treatment of boxes positioned 'absolute' and 'relative'
		if ( box.css( 'position' ) == 'relative' )
		{
			box.paddingAdjustment = parseInt( box.cont.css( 'paddingTop' ) ) + parseInt( box.cont.css( 'paddingBottom' ) );
		}
		else
		{
			box.paddingAdjustment = 0;
		}
		
		// Animate the box when the page is scrolled
		$( window ).scroll( function ()
			{
				// Sets up the delay of the animation
				$.fn.scrollFollow.interval = setTimeout( function(){ ani();} , options.delay );
				
				// To check against right before setting the animation
				box.lastScroll = new Date().getTime();
			}
		);
		
		// Animate the box when the page is resized
		$( window ).resize( function ()
			{
				// Sets up the delay of the animation
				$.fn.scrollFollow.interval = setTimeout( function(){ ani();} , options.delay );
				
				// To check against right before setting the animation
				box.lastScroll = new Date().getTime();
			}
		);

		// Run an initial animation on page load
		box.lastScroll = 0;
		
		ani();
	};
	
	$.fn.scrollFollow = function ( options )
	{
		options = options || {};
		options.relativeTo = options.relativeTo || 'top';
		options.speed = options.speed || 500;
		options.offset = options.offset || 0;
		options.easing = options.easing || 'swing';
		options.container = options.container || this.parent().attr( 'id' );
		options.killSwitch = options.killSwitch || 'killSwitch';
		options.onText = options.onText || 'Turn Slide Off';
		options.offText = options.offText || 'Turn Slide On';
		options.delay = options.delay || 0;
		
		this.each( function() 
			{
				new $.scrollFollow( this, options );
			}
		);
		
		return this;
	};
})( jQuery );



// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.scrollfollow.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.tinysort.min.js
/*
* jQuery TinySort 1.0.2
* Copyright (c) 2008 Ron Valstar
* Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*/
(function(B){B.tinysort={id:"TinySort",version:"1.0.2",defaults:{order:"asc",attr:"",place:"start",returns:false}};B.fn.extend({tinysort:function(H,I){if(H&&typeof (H)!="string"){I=H;H=null}var E=B.extend({},B.tinysort.defaults,I);var O={};this.each(function(S){var U=(!H||H=="")?B(this):B(this).find(H);var T=E.order=="rand"?""+Math.random():(E.attr==""?U.text():U.attr(E.attr));var R=B(this).parent();if(!O[R]){O[R]={s:[],n:[]}}if(U.length>0){O[R].s.push({s:T,e:B(this),n:S})}else{O[R].n.push({e:B(this),n:S})}});for(var G in O){var D=O[G];D.s.sort(function J(T,S){var R=T.s.toLowerCase?T.s.toLowerCase():T.s;var U=S.s.toLowerCase?S.s.toLowerCase():S.s;if(C(T.s)&&C(S.s)){R=parseFloat(T.s);U=parseFloat(S.s)}return(E.order=="asc"?1:-1)*(R<U?-1:(R>U?1:0))})}var L=[];for(var G in O){var D=O[G];var M=[];var F=B(this).length;switch(E.place){case"first":B.each(D.s,function(R,S){F=Math.min(F,S.n)});break;case"org":B.each(D.s,function(R,S){M.push(S.n)});break;case"end":F=D.n.length;break;default:F=0}var P=[0,0];for(var K=0;K<B(this).length;K++){var N=K>=F&&K<F+D.s.length;if(A(M,K)){N=true}var Q=(N?D.s:D.n)[P[N?0:1]].e;Q.parent().append(Q);if(N||!E.returns){L.push(Q.get(0))}P[N?0:1]++}}return this.setArray(L)}});function C(D){return/^[\+-]?\d*\.?\d*$/.exec(D)}function A(E,F){var D=false;B.each(E,function(H,G){if(!D){D=G==F}});return D}B.fn.TinySort=B.fn.Tinysort=B.fn.tsort=B.fn.tinysort})(jQuery);// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.tinysort.min.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.selectboxes.min.js
/*
 *
 * Copyright (c) 2006-2008 Sam Collett (http://www.texotela.co.uk)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Version 2.2.4
 * Demo: http://www.texotela.co.uk/code/jquery/select/
 *
 * $LastChangedDate: 2008-06-17 17:27:25 +0100 (Tue, 17 Jun 2008) $
 * $Rev: 5727 $
 *
 */
;(function(h){h.fn.addOption=function(){var j=function(a,f,c,g){var d=document.createElement("option");d.value=f,d.text=c;var b=a.options;var e=b.length;if(!a.cache){a.cache={};for(var i=0;i<e;i++){a.cache[b[i].value]=i}}if(typeof a.cache[f]=="undefined")a.cache[f]=e;a.options[a.cache[f]]=d;if(g){d.selected=true}};var k=arguments;if(k.length==0)return this;var l=true;var m=false;var n,o,p;if(typeof(k[0])=="object"){m=true;n=k[0]}if(k.length>=2){if(typeof(k[1])=="boolean")l=k[1];else if(typeof(k[2])=="boolean")l=k[2];if(!m){o=k[0];p=k[1]}}this.each(function(){if(this.nodeName.toLowerCase()!="select")return;if(m){for(var a in n){j(this,a,n[a],l)}}else{j(this,o,p,l)}});return this};h.fn.ajaxAddOption=function(c,g,d,b,e){if(typeof(c)!="string")return this;if(typeof(g)!="object")g={};if(typeof(d)!="boolean")d=true;this.each(function(){var f=this;h.getJSON(c,g,function(a){h(f).addOption(a,d);if(typeof b=="function"){if(typeof e=="object"){b.apply(f,e)}else{b.call(f)}}})});return this};h.fn.removeOption=function(){var d=arguments;if(d.length==0)return this;var b=typeof(d[0]);var e,i;if(b=="string"||b=="object"||b=="function"){e=d[0];if(e.constructor==Array){var j=e.length;for(var k=0;k<j;k++){this.removeOption(e[k],d[1])}return this}}else if(b=="number")i=d[0];else return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return;if(this.cache)this.cache=null;var a=false;var f=this.options;if(!!e){var c=f.length;for(var g=c-1;g>=0;g--){if(e.constructor==RegExp){if(f[g].value.match(e)){a=true}}else if(f[g].value==e){a=true}if(a&&d[1]===true)a=f[g].selected;if(a){f[g]=null}a=false}}else{if(d[1]===true){a=f[i].selected}else{a=true}if(a){this.remove(i)}}});return this};h.fn.sortOptions=function(e){var i=h(this).selectedValues();var j=typeof(e)=="undefined"?true:!!e;this.each(function(){if(this.nodeName.toLowerCase()!="select")return;var c=this.options;var g=c.length;var d=[];for(var b=0;b<g;b++){d[b]={v:c[b].value,t:c[b].text}}d.sort(function(a,f){o1t=a.t.toLowerCase(),o2t=f.t.toLowerCase();if(o1t==o2t)return 0;if(j){return o1t<o2t?-1:1}else{return o1t>o2t?-1:1}});for(var b=0;b<g;b++){c[b].text=d[b].t;c[b].value=d[b].v}}).selectOptions(i,true);return this};h.fn.selectOptions=function(g,d){var b=g;var e=typeof(g);if(e=="object"&&b.constructor==Array){var i=this;h.each(b,function(){i.selectOptions(this,d)})};var j=d||false;if(e!="string"&&e!="function"&&e!="object")return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(b.constructor==RegExp){if(a[c].value.match(b)){a[c].selected=true}else if(j){a[c].selected=false}}else{if(a[c].value==b){a[c].selected=true}else if(j){a[c].selected=false}}}});return this};h.fn.copyOptions=function(g,d){var b=d||"selected";if(h(g).size()==0)return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(b=="all"||(b=="selected"&&a[c].selected)){h(g).addOption(a[c].value,a[c].text)}}});return this};h.fn.containsOption=function(g,d){var b=false;var e=g;var i=typeof(e);var j=typeof(d);if(i!="string"&&i!="function"&&i!="object")return j=="function"?this:b;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;if(b&&j!="function")return false;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(e.constructor==RegExp){if(a[c].value.match(e)){b=true;if(j=="function")d.call(a[c],c)}}else{if(a[c].value==e){b=true;if(j=="function")d.call(a[c],c)}}}});return j=="function"?this:b};h.fn.selectedValues=function(){var a=[];this.selectedOptions().each(function(){a[a.length]=this.value});return a};h.fn.selectedTexts=function(){var a=[];this.selectedOptions().each(function(){a[a.length]=this.text});return a};h.fn.selectedOptions=function(){return this.find("option:selected")}})(jQuery);// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.selectboxes.min.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.date.js
/*
* Date prototype extensions. Doesn't depend on any
* other code. Doens't overwrite existing methods.
*
* Adds dayNames, abbrDayNames, monthNames and abbrMonthNames static properties and isLeapYear,
* isWeekend, isWeekDay, getDaysInMonth, getDayName, getMonthName, getDayOfYear, getWeekOfYear,
* setDayOfYear, addYears, addMonths, addDays, addHours, addMinutes, addSeconds methods
*
* Copyright (c) 2006 JÃ¶rn Zaefferer and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
*
* Additional methods and properties added by Kelvin Luck: firstDayOfWeek, dateFormat, zeroTime, asString, fromString -
* I've added my name to these methods so you know who to blame if they are broken!
* 
* Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*
*/

/**
* An Array of day names starting with Sunday.
* 
* @example dayNames[0]
* @result 'Sunday'
*
* @name dayNames
* @type Array
* @cat Plugins/Methods/Date
*/
Date.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

/**
* An Array of abbreviated day names starting with Sun.
* 
* @example abbrDayNames[0]
* @result 'Sun'
*
* @name abbrDayNames
* @type Array
* @cat Plugins/Methods/Date
*/
Date.abbrDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];

/**
* An Array of month names starting with Janurary.
* 
* @example monthNames[0]
* @result 'January'
*
* @name monthNames
* @type Array
* @cat Plugins/Methods/Date
*/
Date.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

/**
* An Array of abbreviated month names starting with Jan.
* 
* @example abbrMonthNames[0]
* @result 'Jan'
*
* @name monthNames
* @type Array
* @cat Plugins/Methods/Date
*/
Date.abbrMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

/**
* The first day of the week for this locale.
*
* @name firstDayOfWeek
* @type Number
* @cat Plugins/Methods/Date
* @author Kelvin Luck
*/
Date.firstDayOfWeek = 1;

/**
* The format that string dates should be represented as (e.g. 'dd/mm/yyyy' for UK, 'mm/dd/yyyy' for US, 'yyyy-mm-dd' for Unicode etc).
*
* @name format
* @type String
* @cat Plugins/Methods/Date
* @author Kelvin Luck
*/
//Date.format = 'dd/mm/yyyy';
//Date.format = 'mm/dd/yyyy';
Date.format = 'yyyy-mm-dd';
//Date.format = 'dd mmm yy';

/**
* The first two numbers in the century to be used when decoding a two digit year. Since a two digit year is ambiguous (and date.setYear
* only works with numbers < 99 and so doesn't allow you to set years after 2000) we need to use this to disambiguate the two digit year codes.
*
* @name format
* @type String
* @cat Plugins/Methods/Date
* @author Kelvin Luck
*/
Date.fullYearStart = '20';

(function() {

    /**
    * Adds a given method under the given name 
    * to the Date prototype if it doesn't
    * currently exist.
    *
    * @private
    */
    function add(name, method) {
        if (!Date.prototype[name]) {
            Date.prototype[name] = method;
        }
    };

    /**
    * Checks if the year is a leap year.
    *
    * @example var dtm = new Date("01/12/2008");
    * dtm.isLeapYear();
    * @result true
    *
    * @name isLeapYear
    * @type Boolean
    * @cat Plugins/Methods/Date
    */
    add("isLeapYear", function() {
        var y = this.getFullYear();
        return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
    });

    /**
    * Checks if the day is a weekend day (Sat or Sun).
    *
    * @example var dtm = new Date("01/12/2008");
    * dtm.isWeekend();
    * @result false
    *
    * @name isWeekend
    * @type Boolean
    * @cat Plugins/Methods/Date
    */
    add("isWeekend", function() {
        return this.getDay() == 0 || this.getDay() == 6;
    });

    /**
    * Check if the day is a day of the week (Mon-Fri)
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.isWeekDay();
    * @result false
    * 
    * @name isWeekDay
    * @type Boolean
    * @cat Plugins/Methods/Date
    */
    add("isWeekDay", function() {
        return !this.isWeekend();
    });

    /**
    * Gets the number of days in the month.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.getDaysInMonth();
    * @result 31
    * 
    * @name getDaysInMonth
    * @type Number
    * @cat Plugins/Methods/Date
    */
    add("getDaysInMonth", function() {
        return [31, (this.isLeapYear() ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][this.getMonth()];
    });

    /**
    * Gets the name of the day.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.getDayName();
    * @result 'Saturday'
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.getDayName(true);
    * @result 'Sat'
    * 
    * @param abbreviated Boolean When set to true the name will be abbreviated.
    * @name getDayName
    * @type String
    * @cat Plugins/Methods/Date
    */
    add("getDayName", function(abbreviated) {
        return abbreviated ? Date.abbrDayNames[this.getDay()] : Date.dayNames[this.getDay()];
    });

    /**
    * Gets the name of the month.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.getMonthName();
    * @result 'Janurary'
    *
    * @example var dtm = new Date("01/12/2008");
    * dtm.getMonthName(true);
    * @result 'Jan'
    * 
    * @param abbreviated Boolean When set to true the name will be abbreviated.
    * @name getDayName
    * @type String
    * @cat Plugins/Methods/Date
    */
    add("getMonthName", function(abbreviated) {
        return abbreviated ? Date.abbrMonthNames[this.getMonth()] : Date.monthNames[this.getMonth()];
    });

    /**
    * Get the number of the day of the year.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.getDayOfYear();
    * @result 11
    * 
    * @name getDayOfYear
    * @type Number
    * @cat Plugins/Methods/Date
    */
    add("getDayOfYear", function() {
        var tmpdtm = new Date("1/1/" + this.getFullYear());
        return Math.floor((this.getTime() - tmpdtm.getTime()) / 86400000);
    });

    /**
    * Get the number of the week of the year.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.getWeekOfYear();
    * @result 2
    * 
    * @name getWeekOfYear
    * @type Number
    * @cat Plugins/Methods/Date
    */
    add("getWeekOfYear", function() {
        return Math.ceil(this.getDayOfYear() / 7);
    });

    /**
    * Set the day of the year.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.setDayOfYear(1);
    * dtm.toString();
    * @result 'Tue Jan 01 2008 00:00:00'
    * 
    * @name setDayOfYear
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("setDayOfYear", function(day) {
        this.setMonth(0);
        this.setDate(day);
        return this;
    });

    /**
    * Add a number of years to the date object.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.addYears(1);
    * dtm.toString();
    * @result 'Mon Jan 12 2009 00:00:00'
    * 
    * @name addYears
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("addYears", function(num) {
        this.setFullYear(this.getFullYear() + num);
        return this;
    });

    /**
    * Add a number of months to the date object.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.addMonths(1);
    * dtm.toString();
    * @result 'Tue Feb 12 2008 00:00:00'
    * 
    * @name addMonths
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("addMonths", function(num) {
        var tmpdtm = this.getDate();

        this.setMonth(this.getMonth() + num);

        if (tmpdtm > this.getDate())
            this.addDays(-this.getDate());

        return this;
    });

    /**
    * Add a number of days to the date object.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.addDays(1);
    * dtm.toString();
    * @result 'Sun Jan 13 2008 00:00:00'
    * 
    * @name addDays
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("addDays", function(num) {
        //this.setDate(this.getDate() + num);
        this.setTime(this.getTime() + (num * 86400000));
        return this;
    });

    /**
    * Add a number of hours to the date object.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.addHours(24);
    * dtm.toString();
    * @result 'Sun Jan 13 2008 00:00:00'
    * 
    * @name addHours
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("addHours", function(num) {
        this.setHours(this.getHours() + num);
        return this;
    });

    /**
    * Add a number of minutes to the date object.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.addMinutes(60);
    * dtm.toString();
    * @result 'Sat Jan 12 2008 01:00:00'
    * 
    * @name addMinutes
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("addMinutes", function(num) {
        this.setMinutes(this.getMinutes() + num);
        return this;
    });

    /**
    * Add a number of seconds to the date object.
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.addSeconds(60);
    * dtm.toString();
    * @result 'Sat Jan 12 2008 00:01:00'
    * 
    * @name addSeconds
    * @type Date
    * @cat Plugins/Methods/Date
    */
    add("addSeconds", function(num) {
        this.setSeconds(this.getSeconds() + num);
        return this;
    });

    /**
    * Sets the time component of this Date to zero for cleaner, easier comparison of dates where time is not relevant.
    * 
    * @example var dtm = new Date();
    * dtm.zeroTime();
    * dtm.toString();
    * @result 'Sat Jan 12 2008 00:01:00'
    * 
    * @name zeroTime
    * @type Date
    * @cat Plugins/Methods/Date
    * @author Kelvin Luck
    */
    add("zeroTime", function() {
        this.setMilliseconds(0);
        this.setSeconds(0);
        this.setMinutes(0);
        this.setHours(0);
        return this;
    });

    /**
    * Returns a string representation of the date object according to Date.format.
    * (Date.toString may be used in other places so I purposefully didn't overwrite it)
    * 
    * @example var dtm = new Date("01/12/2008");
    * dtm.asString();
    * @result '12/01/2008' // (where Date.format == 'dd/mm/yyyy'
    * 
    * @name asString
    * @type Date
    * @cat Plugins/Methods/Date
    * @author Kelvin Luck
    */
    add("asString", function(format) {
        var r = format || Date.format;
        if (r.split('mm').length > 1) { // ugly workaround to make sure we don't replace the m's in e.g. noveMber
            r = r.split('mmmm').join(this.getMonthName(false))
				.split('mmm').join(this.getMonthName(true))
				.split('mm').join(_zeroPad(this.getMonth() + 1))
        } else {
            r = r.split('m').join(this.getMonth() + 1);
        }
        r = r.split('yyyy').join(this.getFullYear())
			.split('yy').join((this.getFullYear() + '').substring(2))
			.split('dd').join(_zeroPad(this.getDate()))
			.split('d').join(this.getDate());
        return r;
    });

    /**
    * Returns a new date object created from the passed String according to Date.format or false if the attempt to do this results in an invalid date object
    * (We can't simple use Date.parse as it's not aware of locale and I chose not to overwrite it incase it's functionality is being relied on elsewhere)
    *
    * @example var dtm = Date.fromString("12/01/2008");
    * dtm.toString();
    * @result 'Sat Jan 12 2008 00:00:00' // (where Date.format == 'dd/mm/yyyy'
    * 
    * @name fromString
    * @type Date
    * @cat Plugins/Methods/Date
    * @author Kelvin Luck
    */
    Date.fromString = function(s) {
        var f = Date.format;

        var d = new Date('01/01/1970');

        if (s == '') return d;

        s = s.toLowerCase();
        var matcher = '';
        var order = [];
        var r = /(dd?d?|mm?m?|yy?yy?)+([^(m|d|y)])?/g;
        var results;
        while ((results = r.exec(f)) != null) {
            switch (results[1]) {
                case 'd':
                case 'dd':
                case 'm':
                case 'mm':
                case 'yy':
                case 'yyyy':
                    matcher += '(\\d+\\d?\\d?\\d?)+';
                    order.push(results[1].substr(0, 1));
                    break;
                case 'mmm':
                    matcher += '([a-z]{3})';
                    order.push('M');
                    break;
            }
            if (results[2]) {
                matcher += results[2];
            }

        }
        var dm = new RegExp(matcher);
        var result = s.match(dm);
        for (var i = 0; i < order.length; i++) {
            var res = result[i + 1];
            switch (order[i]) {
                case 'd':
                    d.setDate(res);
                    break;
                case 'm':
                    d.setMonth(Number(res) - 1);
                    break;
                case 'M':
                    for (var j = 0; j < Date.abbrMonthNames.length; j++) {
                        if (Date.abbrMonthNames[j].toLowerCase() == res) break;
                    }
                    d.setMonth(j);
                    break;
                case 'y':
                    d.setYear(res);
                    break;
            }
        }

        return d;
    };

    // utility method
    var _zeroPad = function(num) {
        var s = '0' + num;
        return s.substring(s.length - 2)
        //return ('0'+num).substring(-2); // doesn't work on IE :(
    };

})();// End of script: OpenQuarters.WebQuarters.Core.Web.date.js

// Start of script: OpenQuarters.WebQuarters.Core.Web.jquery.datepicker.js
/**
* Copyright (c) 2008 Kelvin Luck (http://www.kelvinluck.com/)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* $Id: jquery.datePicker.js 70 2009-04-05 19:25:15Z kelvin.luck $
**/

(function($) {

    $.fn.extend({
        /**
        * Render a calendar table into any matched elements.
        * 
        * @param Object s (optional) Customize your calendars.
        * @option Number month The month to render (NOTE that months are zero based). Default is today's month.
        * @option Number year The year to render. Default is today's year.
        * @option Function renderCallback A reference to a function that is called as each cell is rendered and which can add classes and event listeners to the created nodes. Default is no callback.
        * @option Number showHeader Whether or not to show the header row, possible values are: $.dpConst.SHOW_HEADER_NONE (no header), $.dpConst.SHOW_HEADER_SHORT (first letter of each day) and $.dpConst.SHOW_HEADER_LONG (full name of each day). Default is $.dpConst.SHOW_HEADER_SHORT.
        * @option String hoverClass The class to attach to each cell when you hover over it (to allow you to use hover effects in IE6 which doesn't support the :hover pseudo-class on elements other than links). Default is dp-hover. Pass false if you don't want a hover class.
        * @type jQuery
        * @name renderCalendar
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('#calendar-me').renderCalendar({month:0, year:2007});
        * @desc Renders a calendar displaying January 2007 into the element with an id of calendar-me.
        *
        * @example
        * var testCallback = function($td, thisDate, month, year)
        * {
        * if ($td.is('.current-month') && thisDate.getDay() == 4) {
        *		var d = thisDate.getDate();
        *		$td.bind(
        *			'click',
        *			function()
        *			{
        *				alert('You clicked on ' + d + '/' + (Number(month)+1) + '/' + year);
        *			}
        *		).addClass('thursday');
        *	} else if (thisDate.getDay() == 5) {
        *		$td.html('Friday the ' + $td.html() + 'th');
        *	}
        * }
        * $('#calendar-me').renderCalendar({month:0, year:2007, renderCallback:testCallback});
        * 
        * @desc Renders a calendar displaying January 2007 into the element with an id of calendar-me. Every Thursday in the current month has a class of "thursday" applied to it, is clickable and shows an alert when clicked. Every Friday on the calendar has the number inside replaced with text.
        **/
        renderCalendar: function(s) {
            var dc = function(a) {
                return document.createElement(a);
            };

            s = $.extend({}, $.fn.datePicker.defaults, s);

            if (s.showHeader != $.dpConst.SHOW_HEADER_NONE) {
                var headRow = $(dc('tr'));
                for (var i = Date.firstDayOfWeek; i < Date.firstDayOfWeek + 7; i++) {
                    var weekday = i % 7;
                    var day = Date.dayNames[weekday];
                    headRow.append(
						jQuery(dc('th')).attr({ 'scope': 'col', 'abbr': day, 'title': day, 'class': (weekday == 0 || weekday == 6 ? 'weekend' : 'weekday') }).html(s.showHeader == $.dpConst.SHOW_HEADER_SHORT ? day.substr(0, 1) : day)
					);
                }
            };

            var calendarTable = $(dc('table'))
									.attr(
										{
										    'cellspacing': 2
										}
									)
									.addClass('jCalendar')
									.append(
										(s.showHeader != $.dpConst.SHOW_HEADER_NONE ?
											$(dc('thead'))
												.append(headRow)
											:
											dc('thead')
										)
									);
            var tbody = $(dc('tbody'));

            var today = (new Date()).zeroTime();

            var month = s.month == undefined ? today.getMonth() : s.month;
            var year = s.year || today.getFullYear();

            var currentDate = new Date(year, month, 1);


            var firstDayOffset = Date.firstDayOfWeek - currentDate.getDay() + 1;
            if (firstDayOffset > 1) firstDayOffset -= 7;
            var weeksToDraw = Math.ceil(((-1 * firstDayOffset + 1) + currentDate.getDaysInMonth()) / 7);
            currentDate.addDays(firstDayOffset - 1);

            var doHover = function(firstDayInBounds) {
                return function() {
                    if (s.hoverClass) {
                        var $this = $(this);
                        if (!s.selectWeek) {
                            $this.addClass(s.hoverClass);
                        } else if (firstDayInBounds && !$this.is('.disabled')) {
                            $this.parent().addClass('activeWeekHover');
                        }
                    }
                }
            };
            var unHover = function() {
                if (s.hoverClass) {
                    var $this = $(this);
                    $this.removeClass(s.hoverClass);
                    $this.parent().removeClass('activeWeekHover');
                }
            };

            var w = 0;
            while (w++ < weeksToDraw) {
                var r = jQuery(dc('tr'));
                var firstDayInBounds = s.dpController ? currentDate > s.dpController.startDate : false;
                for (var i = 0; i < 7; i++) {
                    var thisMonth = currentDate.getMonth() == month;
                    var d = $(dc('td'))
								.text(currentDate.getDate() + '')
								.addClass((thisMonth ? 'current-month ' : 'other-month ') +
													(currentDate.isWeekend() ? 'weekend ' : 'weekday ') +
													(thisMonth && currentDate.getTime() == today.getTime() ? 'today ' : '')
								)
								.data('datePickerDate', currentDate.asString())
								.hover(doHover(firstDayInBounds), unHover)
							;
                    r.append(d);
                    if (s.renderCallback) {
                        s.renderCallback(d, currentDate, month, year);
                    }
                    // addDays(1) fails in some locales due to daylight savings. See issue 39.
                    //currentDate.addDays(1);
                    currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 1);
                }
                tbody.append(r);
            }
            calendarTable.append(tbody);

            return this.each(
				function() {
				    $(this).empty().append(calendarTable);
				}
			);
        },
        /**
        * Create a datePicker associated with each of the matched elements.
        *
        * The matched element will receive a few custom events with the following signatures:
        *
        * dateSelected(event, date, $td, status)
        * Triggered when a date is selected. event is a reference to the event, date is the Date selected, $td is a jquery object wrapped around the TD that was clicked on and status is whether the date was selected (true) or deselected (false)
        * 
        * dpClosed(event, selected)
        * Triggered when the date picker is closed. event is a reference to the event and selected is an Array containing Date objects.
        *
        * dpMonthChanged(event, displayedMonth, displayedYear)
        * Triggered when the month of the popped up calendar is changed. event is a reference to the event, displayedMonth is the number of the month now displayed (zero based) and displayedYear is the year of the month.
        *
        * dpDisplayed(event, $datePickerDiv)
        * Triggered when the date picker is created. $datePickerDiv is the div containing the date picker. Use this event to add custom content/ listeners to the popped up date picker.
        *
        * @param Object s (optional) Customize your date pickers.
        * @option Number month The month to render when the date picker is opened (NOTE that months are zero based). Default is today's month.
        * @option Number year The year to render when the date picker is opened. Default is today's year.
        * @option String startDate The first date date can be selected.
        * @option String endDate The last date that can be selected.
        * @option Boolean inline Whether to create the datePicker as inline (e.g. always on the page) or as a model popup. Default is false (== modal popup)
        * @option Boolean createButton Whether to create a .dp-choose-date anchor directly after the matched element which when clicked will trigger the showing of the date picker. Default is true.
        * @option Boolean showYearNavigation Whether to display buttons which allow the user to navigate through the months a year at a time. Default is true.
        * @option Boolean closeOnSelect Whether to close the date picker when a date is selected. Default is true.
        * @option Boolean displayClose Whether to create a "Close" button within the date picker popup. Default is false.
        * @option Boolean selectMultiple Whether a user should be able to select multiple dates with this date picker. Default is false.
        * @option Number numSelectable The maximum number of dates that can be selected where selectMultiple is true. Default is a very high number.
        * @option Boolean clickInput If the matched element is an input type="text" and this option is true then clicking on the input will cause the date picker to appear.
        * @option Boolean rememberViewedMonth Whether the datePicker should remember the last viewed month and open on it. If false then the date picker will always open with the month for the first selected date visible.
        * @option Boolean selectWeek Whether to select a complete week at a time...
        * @option Number verticalPosition The vertical alignment of the popped up date picker to the matched element. One of $.dpConst.POS_TOP and $.dpConst.POS_BOTTOM. Default is $.dpConst.POS_TOP.
        * @option Number horizontalPosition The horizontal alignment of the popped up date picker to the matched element. One of $.dpConst.POS_LEFT and $.dpConst.POS_RIGHT.
        * @option Number verticalOffset The number of pixels offset from the defined verticalPosition of this date picker that it should pop up in. Default in 0.
        * @option Number horizontalOffset The number of pixels offset from the defined horizontalPosition of this date picker that it should pop up in. Default in 0.
        * @option (Function|Array) renderCallback A reference to a function (or an array of seperate functions) that is called as each cell is rendered and which can add classes and event listeners to the created nodes. Each callback function will receive four arguments; a jquery object wrapping the created TD, a Date object containing the date this TD represents, a number giving the currently rendered month and a number giving the currently rendered year. Default is no callback.
        * @option String hoverClass The class to attach to each cell when you hover over it (to allow you to use hover effects in IE6 which doesn't support the :hover pseudo-class on elements other than links). Default is dp-hover. Pass false if you don't want a hover class.
        * @type jQuery
        * @name datePicker
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('input.date-picker').datePicker();
        * @desc Creates a date picker button next to all matched input elements. When the button is clicked on the value of the selected date will be placed in the corresponding input (formatted according to Date.format).
        *
        * @example demo/index.html
        * @desc See the projects homepage for many more complex examples...
        **/
        datePicker: function(s) {
            if (!$.event._dpCache) $.event._dpCache = [];

            // initialise the date picker controller with the relevant settings...
            s = $.extend({}, $.fn.datePicker.defaults, s);

            return this.each(
				function() {
				    var $this = $(this);
				    var alreadyExists = true;

				    if (!this._dpId) {
				        this._dpId = $.event.guid++;
				        $.event._dpCache[this._dpId] = new DatePicker(this);
				        alreadyExists = false;
				    }

				    if (s.inline) {
				        s.createButton = false;
				        s.displayClose = false;
				        s.closeOnSelect = false;
				        $this.empty();
				    }

				    var controller = $.event._dpCache[this._dpId];

				    controller.init(s);

				    if (!alreadyExists && s.createButton) {
				        // create it!
				        controller.button = $('<a href="#" class="dp-choose-date" title="' + $.dpText.TEXT_CHOOSE_DATE + '">' + $.dpText.TEXT_CHOOSE_DATE + '</a>')
								.bind(
									'click',
									function() {
									    $this.dpDisplay(this);
									    this.blur();
									    return false;
									}
								);
				        $this.after(controller.button);
				    }

				    if (!alreadyExists && $this.is(':text')) {
				        $this
							.bind(
								'dateSelected',
								function(e, selectedDate, $td) {
								    this.value = selectedDate.asString();
								}
							).bind(
								'change',
								function() {
								    if (this.value == '') {
								        controller.clearSelected();
								    } else {
								        var d = Date.fromString(this.value);
								        if (d) {
								            controller.setSelected(d, true, true);
								        }
								    }
								}
							);
				        if (s.clickInput) {
				            $this.bind(
								'click',
								function() {
								    // The change event doesn't happen until the input loses focus so we need to manually trigger it...
								    $this.trigger('change');
								    $this.dpDisplay();
								}
							);
				        }
				        var d = Date.fromString(this.value);
				        if (this.value != '' && d) {
				            controller.setSelected(d, true, true);
				        }
				    }

				    $this.addClass('dp-applied');

				}
			)
        },
        /**
        * Disables or enables this date picker
        *
        * @param Boolean s Whether to disable (true) or enable (false) this datePicker
        * @type jQuery
        * @name dpSetDisabled
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-picker').datePicker();
        * $('.date-picker').dpSetDisabled(true);
        * @desc Prevents this date picker from displaying and adds a class of dp-disabled to it (and it's associated button if it has one) for styling purposes. If the matched element is an input field then it will also set the disabled attribute to stop people directly editing the field.
        **/
        dpSetDisabled: function(s) {
            return _w.call(this, 'setDisabled', s);
        },
        /**
        * Updates the first selectable date for any date pickers on any matched elements.
        *
        * @param String d A string representing the first selectable date (formatted according to Date.format).
        * @type jQuery
        * @name dpSetStartDate
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-picker').datePicker();
        * $('.date-picker').dpSetStartDate('01/01/2000');
        * @desc Creates a date picker associated with all elements with a class of "date-picker" then sets the first selectable date for each of these to the first day of the millenium.
        **/
        dpSetStartDate: function(d) {
            return _w.call(this, 'setStartDate', d);
        },
        /**
        * Updates the last selectable date for any date pickers on any matched elements.
        *
        * @param String d A string representing the last selectable date (formatted according to Date.format).
        * @type jQuery
        * @name dpSetEndDate
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-picker').datePicker();
        * $('.date-picker').dpSetEndDate('01/01/2010');
        * @desc Creates a date picker associated with all elements with a class of "date-picker" then sets the last selectable date for each of these to the first Janurary 2010.
        **/
        dpSetEndDate: function(d) {
            return _w.call(this, 'setEndDate', d);
        },
        /**
        * Gets a list of Dates currently selected by this datePicker. This will be an empty array if no dates are currently selected or NULL if there is no datePicker associated with the matched element.
        *
        * @type Array
        * @name dpGetSelected
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-picker').datePicker();
        * alert($('.date-picker').dpGetSelected());
        * @desc Will alert an empty array (as nothing is selected yet)
        **/
        dpGetSelected: function() {
            var c = _getController(this[0]);
            if (c) {
                return c.getSelected();
            }
            return null;
        },
        /**
        * Selects or deselects a date on any matched element's date pickers. Deselcting is only useful on date pickers where selectMultiple==true. Selecting will only work if the passed date is within the startDate and endDate boundries for a given date picker.
        *
        * @param String d A string representing the date you want to select (formatted according to Date.format).
        * @param Boolean v Whether you want to select (true) or deselect (false) this date. Optional - default = true.
        * @param Boolean m Whether you want the date picker to open up on the month of this date when it is next opened. Optional - default = true.
        * @param Boolean e Whether you want the date picker to dispatch events related to this change of selection. Optional - default = true.
        * @type jQuery
        * @name dpSetSelected
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-picker').datePicker();
        * $('.date-picker').dpSetSelected('01/01/2010');
        * @desc Creates a date picker associated with all elements with a class of "date-picker" then sets the selected date on these date pickers to the first Janurary 2010. When the date picker is next opened it will display Janurary 2010.
        **/
        dpSetSelected: function(d, v, m, e) {
            if (v == undefined) v = true;
            if (m == undefined) m = true;
            if (e == undefined) e = true;
            return _w.call(this, 'setSelected', Date.fromString(d), v, m, e);
        },
        /**
        * Sets the month that will be displayed when the date picker is next opened. If the passed month is before startDate then the month containing startDate will be displayed instead. If the passed month is after endDate then the month containing the endDate will be displayed instead.
        *
        * @param Number m The month you want the date picker to display. Optional - defaults to the currently displayed month.
        * @param Number y The year you want the date picker to display. Optional - defaults to the currently displayed year.
        * @type jQuery
        * @name dpSetDisplayedMonth
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-picker').datePicker();
        * $('.date-picker').dpSetDisplayedMonth(10, 2008);
        * @desc Creates a date picker associated with all elements with a class of "date-picker" then sets the selected date on these date pickers to the first Janurary 2010. When the date picker is next opened it will display Janurary 2010.
        **/
        dpSetDisplayedMonth: function(m, y) {
            return _w.call(this, 'setDisplayedMonth', Number(m), Number(y), true);
        },
        /**
        * Displays the date picker associated with the matched elements. Since only one date picker can be displayed at once then the date picker associated with the last matched element will be the one that is displayed.
        *
        * @param HTMLElement e An element that you want the date picker to pop up relative in position to. Optional - default behaviour is to pop up next to the element associated with this date picker.
        * @type jQuery
        * @name dpDisplay
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('#date-picker').datePicker();
        * $('#date-picker').dpDisplay();
        * @desc Creates a date picker associated with the element with an id of date-picker and then causes it to pop up.
        **/
        dpDisplay: function(e) {
            return _w.call(this, 'display', e);
        },
        /**
        * Sets a function or array of functions that is called when each TD of the date picker popup is rendered to the page
        *
        * @param (Function|Array) a A function or an array of functions that are called when each td is rendered. Each function will receive four arguments; a jquery object wrapping the created TD, a Date object containing the date this TD represents, a number giving the currently rendered month and a number giving the currently rendered year.
        * @type jQuery
        * @name dpSetRenderCallback
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('#date-picker').datePicker();
        * $('#date-picker').dpSetRenderCallback(function($td, thisDate, month, year)
        * {
        * 	// do stuff as each td is rendered dependant on the date in the td and the displayed month and year
        * });
        * @desc Creates a date picker associated with the element with an id of date-picker and then creates a function which is called as each td is rendered when this date picker is displayed.
        **/
        dpSetRenderCallback: function(a) {
            return _w.call(this, 'setRenderCallback', a);
        },
        /**
        * Sets the position that the datePicker will pop up (relative to it's associated element)
        *
        * @param Number v The vertical alignment of the created date picker to it's associated element. Possible values are $.dpConst.POS_TOP and $.dpConst.POS_BOTTOM
        * @param Number h The horizontal alignment of the created date picker to it's associated element. Possible values are $.dpConst.POS_LEFT and $.dpConst.POS_RIGHT
        * @type jQuery
        * @name dpSetPosition
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('#date-picker').datePicker();
        * $('#date-picker').dpSetPosition($.dpConst.POS_BOTTOM, $.dpConst.POS_RIGHT);
        * @desc Creates a date picker associated with the element with an id of date-picker and makes it so that when this date picker pops up it will be bottom and right aligned to the #date-picker element.
        **/
        dpSetPosition: function(v, h) {
            return _w.call(this, 'setPosition', v, h);
        },
        /**
        * Sets the offset that the popped up date picker will have from it's default position relative to it's associated element (as set by dpSetPosition)
        *
        * @param Number v The vertical offset of the created date picker.
        * @param Number h The horizontal offset of the created date picker.
        * @type jQuery
        * @name dpSetOffset
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('#date-picker').datePicker();
        * $('#date-picker').dpSetOffset(-20, 200);
        * @desc Creates a date picker associated with the element with an id of date-picker and makes it so that when this date picker pops up it will be 20 pixels above and 200 pixels to the right of it's default position.
        **/
        dpSetOffset: function(v, h) {
            return _w.call(this, 'setOffset', v, h);
        },
        /**
        * Closes the open date picker associated with this element.
        *
        * @type jQuery
        * @name dpClose
        * @cat plugins/datePicker
        * @author Kelvin Luck (http://www.kelvinluck.com/)
        *
        * @example $('.date-pick')
        *		.datePicker()
        *		.bind(
        *			'focus',
        *			function()
        *			{
        *				$(this).dpDisplay();
        *			}
        *		).bind(
        *			'blur',
        *			function()
        *			{
        *				$(this).dpClose();
        *			}
        *		);
        * @desc Creates a date picker and makes it appear when the relevant element is focused and disappear when it is blurred.
        **/
        dpClose: function() {
            return _w.call(this, '_closeCalendar', false, this[0]);
        },
        // private function called on unload to clean up any expandos etc and prevent memory links...
        _dpDestroy: function() {
            // TODO - implement this?
        }
    });

    // private internal function to cut down on the amount of code needed where we forward
    // dp* methods on the jQuery object on to the relevant DatePicker controllers...
    var _w = function(f, a1, a2, a3, a4) {
        return this.each(
			function() {
			    var c = _getController(this);
			    if (c) {
			        c[f](a1, a2, a3, a4);
			    }
			}
		);
    };

    function DatePicker(ele) {
        this.ele = ele;

        // initial values...
        this.displayedMonth = null;
        this.displayedYear = null;
        this.startDate = null;
        this.endDate = null;
        this.showYearNavigation = null;
        this.closeOnSelect = null;
        this.displayClose = null;
        this.rememberViewedMonth = null;
        this.selectMultiple = null;
        this.numSelectable = null;
        this.numSelected = null;
        this.verticalPosition = null;
        this.horizontalPosition = null;
        this.verticalOffset = null;
        this.horizontalOffset = null;
        this.button = null;
        this.renderCallback = [];
        this.selectedDates = {};
        this.inline = null;
        this.context = '#dp-popup';
        this.settings = {};
    };
    $.extend(
		DatePicker.prototype,
		{
		    init: function(s) {
		        this.setStartDate(s.startDate);
		        this.setEndDate(s.endDate);
		        this.setDisplayedMonth(Number(s.month), Number(s.year));
		        this.setRenderCallback(s.renderCallback);
		        this.showYearNavigation = s.showYearNavigation;
		        this.closeOnSelect = s.closeOnSelect;
		        this.displayClose = s.displayClose;
		        this.rememberViewedMonth = s.rememberViewedMonth;
		        this.selectMultiple = s.selectMultiple;
		        this.numSelectable = s.selectMultiple ? s.numSelectable : 1;
		        this.numSelected = 0;
		        this.verticalPosition = s.verticalPosition;
		        this.horizontalPosition = s.horizontalPosition;
		        this.hoverClass = s.hoverClass;
		        this.setOffset(s.verticalOffset, s.horizontalOffset);
		        this.inline = s.inline;
		        this.settings = s;
		        if (this.inline) {
		            this.context = this.ele;
		            this.display();
		        }
		    },
		    setStartDate: function(d) {
		        if (d) {
		            this.startDate = Date.fromString(d);
		        }
		        if (!this.startDate) {
		            this.startDate = (new Date()).zeroTime();
		        }
		        this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
		    },
		    setEndDate: function(d) {
		        if (d) {
		            this.endDate = Date.fromString(d);
		        }
		        if (!this.endDate) {
		            this.endDate = (new Date('12/31/2999')); // using the JS Date.parse function which expects mm/dd/yyyy
		        }
		        if (this.endDate.getTime() < this.startDate.getTime()) {
		            this.endDate = this.startDate;
		        }
		        this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
		    },
		    setPosition: function(v, h) {
		        this.verticalPosition = v;
		        this.horizontalPosition = h;
		    },
		    setOffset: function(v, h) {
		        this.verticalOffset = parseInt(v) || 0;
		        this.horizontalOffset = parseInt(h) || 0;
		    },
		    setDisabled: function(s) {
		        $e = $(this.ele);
		        $e[s ? 'addClass' : 'removeClass']('dp-disabled');
		        if (this.button) {
		            $but = $(this.button);
		            $but[s ? 'addClass' : 'removeClass']('dp-disabled');
		            $but.attr('title', s ? '' : $.dpText.TEXT_CHOOSE_DATE);
		        }
		        if ($e.is(':text')) {
		            $e.attr('disabled', s ? 'disabled' : '');
		        }
		    },
		    setDisplayedMonth: function(m, y, rerender) {
		        if (this.startDate == undefined || this.endDate == undefined) {
		            return;
		        }
		        var s = new Date(this.startDate.getTime());
		        s.setDate(1);
		        var e = new Date(this.endDate.getTime());
		        e.setDate(1);

		        var t;
		        if ((!m && !y) || (isNaN(m) && isNaN(y))) {
		            // no month or year passed - default to current month
		            t = new Date().zeroTime();
		            t.setDate(1);
		        } else if (isNaN(m)) {
		            // just year passed in - presume we want the displayedMonth
		            t = new Date(y, this.displayedMonth, 1);
		        } else if (isNaN(y)) {
		            // just month passed in - presume we want the displayedYear
		            t = new Date(this.displayedYear, m, 1);
		        } else {
		            // year and month passed in - that's the date we want!
		            t = new Date(y, m, 1)
		        }
		        // check if the desired date is within the range of our defined startDate and endDate
		        if (t.getTime() < s.getTime()) {
		            t = s;
		        } else if (t.getTime() > e.getTime()) {
		            t = e;
		        }
		        var oldMonth = this.displayedMonth;
		        var oldYear = this.displayedYear;
		        this.displayedMonth = t.getMonth();
		        this.displayedYear = t.getFullYear();

		        if (rerender && (this.displayedMonth != oldMonth || this.displayedYear != oldYear)) {
		            this._rerenderCalendar();
		            $(this.ele).trigger('dpMonthChanged', [this.displayedMonth, this.displayedYear]);
		        }
		    },
		    setSelected: function(d, v, moveToMonth, dispatchEvents) {
		        if (d < this.startDate || d > this.endDate) {
		            // Don't allow people to select dates outside range...
		            return;
		        }
		        var s = this.settings;
		        if (s.selectWeek) {
		            d = d.addDays(-(d.getDay() - Date.firstDayOfWeek + 7) % 7);
		            if (d < this.startDate) // The first day of this week is before the start date so is unselectable...
		            {
		                return;
		            }
		        }
		        if (v == this.isSelected(d)) // this date is already un/selected
		        {
		            return;
		        }
		        if (this.selectMultiple == false) {
		            this.clearSelected();
		        } else if (v && this.numSelected == this.numSelectable) {
		            // can't select any more dates...
		            return;
		        }
		        if (moveToMonth && (this.displayedMonth != d.getMonth() || this.displayedYear != d.getFullYear())) {
		            this.setDisplayedMonth(d.getMonth(), d.getFullYear(), true);
		        }
		        this.selectedDates[d.toString()] = v;
		        this.numSelected += v ? 1 : -1;
		        var selectorString = 'td.' + (d.getMonth() == this.displayedMonth ? 'current-month' : 'other-month');
		        var $td;
		        $(selectorString, this.context).each(
					function() {
					    if ($(this).data('datePickerDate') == d.asString()) {
					        $td = $(this);
					        if (s.selectWeek) {
					            $td.parent()[v ? 'addClass' : 'removeClass']('selectedWeek');
					        }
					        $td[v ? 'addClass' : 'removeClass']('selected');
					    }
					}
				);
		        $('td', this.context).not('.selected')[this.selectMultiple && this.numSelected == this.numSelectable ? 'addClass' : 'removeClass']('unselectable');

		        if (dispatchEvents) {
		            var s = this.isSelected(d);
		            $e = $(this.ele);
		            var dClone = Date.fromString(d.asString());
		            $e.trigger('dateSelected', [dClone, $td, s]);
		            $e.trigger('change');
		        }
		    },
		    isSelected: function(d) {
		        return this.selectedDates[d.toString()];
		    },
		    getSelected: function() {
		        var r = [];
		        for (s in this.selectedDates) {
		            if (this.selectedDates[s] == true) {
		                r.push(Date.parse(s));
		            }
		        }
		        return r;
		    },
		    clearSelected: function() {
		        this.selectedDates = {};
		        this.numSelected = 0;
		        $('td.selected', this.context).removeClass('selected').parent().removeClass('selectedWeek');
		    },
		    display: function(eleAlignTo) {
		        if ($(this.ele).is('.dp-disabled')) return;

		        eleAlignTo = eleAlignTo || this.ele;
		        var c = this;
		        var $ele = $(eleAlignTo);
		        var eleOffset = $ele.offset();

		        var $createIn;
		        var attrs;
		        var attrsCalendarHolder;
		        var cssRules;

		        if (c.inline) {
		            $createIn = $(this.ele);
		            attrs = {
		                'id': 'calendar-' + this.ele._dpId,
		                'class': 'dp-popup dp-popup-inline'
		            };

		            $('.dp-popup', $createIn).remove();
		            cssRules = {
		        };
		    } else {
		        $createIn = $('body');
		        attrs = {
		            'id': 'dp-popup',
		            'class': 'dp-popup'
		        };
		        cssRules = {
		            'top': eleOffset.top + c.verticalOffset,
		            'left': eleOffset.left + c.horizontalOffset
		        };

		        var _checkMouse = function(e) {
		            var el = e.target;
		            var cal = $('#dp-popup')[0];

		            while (true) {
		                if (el == cal) {
		                    return true;
		                } else if (el == document) {
		                    c._closeCalendar();
		                    return false;
		                } else {
		                    el = $(el).parent()[0];
		                }
		            }
		        };
		        this._checkMouse = _checkMouse;

		        c._closeCalendar(true);
		        $(document).bind(
						'keydown.datepicker',
						function(event) {
						    if (event.keyCode == 27) {
						        c._closeCalendar();
						    }
						}
					);
		    }

		    if (!c.rememberViewedMonth) {
		        var selectedDate = this.getSelected()[0];
		        if (selectedDate) {
		            selectedDate = new Date(selectedDate);
		            this.setDisplayedMonth(selectedDate.getMonth(), selectedDate.getFullYear(), false);
		        }
		    }

		    $createIn
					.append(
						$('<div></div>')
							.attr(attrs)
							.css(cssRules)
							.append(
		    //								$('<a href="#" class="selecteee">aaa</a>'),
								$('<h2></h2>'),
								$('<div class="dp-nav-prev"></div>')
									.append(
										$('<a class="dp-nav-prev-year" href="#" title="' + $.dpText.TEXT_PREV_YEAR + '">&lt;&lt;</a>')
											.bind(
												'click',
												function() {
												    return c._displayNewMonth.call(c, this, 0, -1);
												}
											),
										$('<a class="dp-nav-prev-month" href="#" title="' + $.dpText.TEXT_PREV_MONTH + '">&lt;</a>')
											.bind(
												'click',
												function() {
												    return c._displayNewMonth.call(c, this, -1, 0);
												}
											)
									),
								$('<div class="dp-nav-next"></div>')
									.append(
										$('<a class="dp-nav-next-year" href="#" title="' + $.dpText.TEXT_NEXT_YEAR + '">&gt;&gt;</a>')
											.bind(
												'click',
												function() {
												    return c._displayNewMonth.call(c, this, 0, 1);
												}
											),
										$('<a class="dp-nav-next-month" href="#" title="' + $.dpText.TEXT_NEXT_MONTH + '">&gt;</a>')
											.bind(
												'click',
												function() {
												    return c._displayNewMonth.call(c, this, 1, 0);
												}
											)
									),
								$('<div class="dp-calendar"></div>')
							)
							.bgIframe()
						);

		    var $pop = this.inline ? $('.dp-popup', this.context) : $('#dp-popup');

		    if (this.showYearNavigation == false) {
		        $('.dp-nav-prev-year, .dp-nav-next-year', c.context).css('display', 'none');
		    }
		    if (this.displayClose) {
		        $pop.append(
						$('<a href="#" id="dp-close">' + $.dpText.TEXT_CLOSE + '</a>')
							.bind(
								'click',
								function() {
								    c._closeCalendar();
								    return false;
								}
							)
					);
		    }
		    c._renderCalendar();

		    $(this.ele).trigger('dpDisplayed', $pop);

		    if (!c.inline) {
		        if (this.verticalPosition == $.dpConst.POS_BOTTOM) {
		            $pop.css('top', eleOffset.top + $ele.height() - $pop.height() + c.verticalOffset);
		        }
		        if (this.horizontalPosition == $.dpConst.POS_RIGHT) {
		            $pop.css('left', eleOffset.left + $ele.width() - $pop.width() + c.horizontalOffset);
		        }
		        //					$('.selectee', this.context).focus();
		        $(document).bind('mousedown.datepicker', this._checkMouse);
		    }

		},
		setRenderCallback: function(a) {
		    if (a == null) return;
		    if (a && typeof (a) == 'function') {
		        a = [a];
		    }
		    this.renderCallback = this.renderCallback.concat(a);
		},
		cellRender: function($td, thisDate, month, year) {
		    var c = this.dpController;
		    var d = new Date(thisDate.getTime());

		    // add our click handlers to deal with it when the days are clicked...

		    $td.bind(
					'click',
					function() {
					    var $this = $(this);
					    if (!$this.is('.disabled')) {
					        c.setSelected(d, !$this.is('.selected') || !c.selectMultiple, false, true);
					        if (c.closeOnSelect) {
					            c._closeCalendar();
					        }
					        // TODO: Instead of this which doesn't work in IE anyway we should find the next focusable element in the document
					        // and pass the focus onto that. That would allow the user to continue on the form as expected...
					        if (!$.browser.msie) {
					            $(c.ele).trigger('focus', [$.dpConst.DP_INTERNAL_FOCUS]);
					        }
					    }
					}
				);

		    if (c.isSelected(d)) {
		        $td.addClass('selected');
		        if (c.settings.selectWeek) {
		            $td.parent().addClass('selectedWeek');
		        }
		    } else if (c.selectMultiple && c.numSelected == c.numSelectable) {
		        $td.addClass('unselectable');
		    }

		},
		_applyRenderCallbacks: function() {
		    var c = this;
		    $('td', this.context).each(
					function() {
					    for (var i = 0; i < c.renderCallback.length; i++) {
					        $td = $(this);
					        c.renderCallback[i].apply(this, [$td, Date.fromString($td.data('datePickerDate')), c.displayedMonth, c.displayedYear]);
					    }
					}
				);
		    return;
		},
		// ele is the clicked button - only proceed if it doesn't have the class disabled...
		// m and y are -1, 0 or 1 depending which direction we want to go in...
		_displayNewMonth: function(ele, m, y) {
		    if (!$(ele).is('.disabled')) {
		        this.setDisplayedMonth(this.displayedMonth + m, this.displayedYear + y, true);
		    }
		    ele.blur();
		    return false;
		},
		_rerenderCalendar: function() {
		    this._clearCalendar();
		    this._renderCalendar();
		},
		_renderCalendar: function() {
		    // set the title...
		    $('h2', this.context).html((new Date(this.displayedYear, this.displayedMonth, 1)).asString($.dpText.HEADER_FORMAT));

		    // render the calendar...
		    $('.dp-calendar', this.context).renderCalendar(
					$.extend(
						{},
						this.settings,
						{
						    month: this.displayedMonth,
						    year: this.displayedYear,
						    renderCallback: this.cellRender,
						    dpController: this,
						    hoverClass: this.hoverClass
						})
				);

		    // update the status of the control buttons and disable dates before startDate or after endDate...
		    // TODO: When should the year buttons be disabled? When you can't go forward a whole year from where you are or is that annoying?
		    if (this.displayedYear == this.startDate.getFullYear() && this.displayedMonth == this.startDate.getMonth()) {
		        $('.dp-nav-prev-year', this.context).addClass('disabled');
		        $('.dp-nav-prev-month', this.context).addClass('disabled');
		        $('.dp-calendar td.other-month', this.context).each(
						function() {
						    var $this = $(this);
						    if (Number($this.text()) > 20) {
						        $this.addClass('disabled');
						    }
						}
					);
		        var d = this.startDate.getDate();
		        $('.dp-calendar td.current-month', this.context).each(
						function() {
						    var $this = $(this);
						    if (Number($this.text()) < d) {
						        $this.addClass('disabled');
						    }
						}
					);
		    } else {
		        $('.dp-nav-prev-year', this.context).removeClass('disabled');
		        $('.dp-nav-prev-month', this.context).removeClass('disabled');
		        var d = this.startDate.getDate();
		        if (d > 20) {
		            // check if the startDate is last month as we might need to add some disabled classes...
		            var st = this.startDate.getTime();
		            var sd = new Date(st);
		            sd.addMonths(1);
		            if (this.displayedYear == sd.getFullYear() && this.displayedMonth == sd.getMonth()) {
		                $('.dp-calendar td.other-month', this.context).each(
								function() {
								    var $this = $(this);
								    if (Date.fromString($this.data('datePickerDate')).getTime() < st) {
								        $this.addClass('disabled');
								    }
								}
							);
		            }
		        }
		    }
		    if (this.displayedYear == this.endDate.getFullYear() && this.displayedMonth == this.endDate.getMonth()) {
		        $('.dp-nav-next-year', this.context).addClass('disabled');
		        $('.dp-nav-next-month', this.context).addClass('disabled');
		        $('.dp-calendar td.other-month', this.context).each(
						function() {
						    var $this = $(this);
						    if (Number($this.text()) < 14) {
						        $this.addClass('disabled');
						    }
						}
					);
		        var d = this.endDate.getDate();
		        $('.dp-calendar td.current-month', this.context).each(
						function() {
						    var $this = $(this);
						    if (Number($this.text()) > d) {
						        $this.addClass('disabled');
						    }
						}
					);
		    } else {
		        $('.dp-nav-next-year', this.context).removeClass('disabled');
		        $('.dp-nav-next-month', this.context).removeClass('disabled');
		        var d = this.endDate.getDate();
		        if (d < 13) {
		            // check if the endDate is next month as we might need to add some disabled classes...
		            var ed = new Date(this.endDate.getTime());
		            ed.addMonths(-1);
		            if (this.displayedYear == ed.getFullYear() && this.displayedMonth == ed.getMonth()) {
		                $('.dp-calendar td.other-month', this.context).each(
								function() {
								    var $this = $(this);
								    if (Number($this.text()) > d) {
								        $this.addClass('disabled');
								    }
								}
							);
		            }
		        }
		    }
		    this._applyRenderCallbacks();
		},
		_closeCalendar: function(programatic, ele) {
		    if (!ele || ele == this.ele) {
		        $(document).unbind('mousedown.datepicker');
		        $(document).unbind('keydown.datepicker');
		        this._clearCalendar();
		        $('#dp-popup a').unbind();
		        $('#dp-popup').empty().remove();
		        if (!programatic) {
		            $(this.ele).trigger('dpClosed', [this.getSelected()]);
		        }
		    }
		},
		// empties the current dp-calendar div and makes sure that all events are unbound
		// and expandos removed to avoid memory leaks...
		_clearCalendar: function() {
		    // TODO.
		    $('.dp-calendar td', this.context).unbind();
		    $('.dp-calendar', this.context).empty();
		}
}
	);

    // static constants
    $.dpConst = {
        SHOW_HEADER_NONE: 0,
        SHOW_HEADER_SHORT: 1,
        SHOW_HEADER_LONG: 2,
        POS_TOP: 0,
        POS_BOTTOM: 1,
        POS_LEFT: 0,
        POS_RIGHT: 1,
        DP_INTERNAL_FOCUS: 'dpInternalFocusTrigger'
    };
    // localisable text
    $.dpText = {
        TEXT_PREV_YEAR: 'Previous year',
        TEXT_PREV_MONTH: 'Previous month',
        TEXT_NEXT_YEAR: 'Next year',
        TEXT_NEXT_MONTH: 'Next month',
        TEXT_CLOSE: 'Close',
        TEXT_CHOOSE_DATE: 'Choose date',
        HEADER_FORMAT: 'mmmm yyyy'
    };
    // version
    $.dpVersion = '$Id: jquery.datePicker.js 70 2009-04-05 19:25:15Z kelvin.luck $';

    $.fn.datePicker.defaults = {
        month: undefined,
        year: undefined,
        showHeader: $.dpConst.SHOW_HEADER_SHORT,
        startDate: undefined,
        endDate: undefined,
        inline: false,
        renderCallback: null,
        createButton: true,
        showYearNavigation: true,
        closeOnSelect: true,
        displayClose: false,
        selectMultiple: false,
        numSelectable: Number.MAX_VALUE,
        clickInput: false,
        rememberViewedMonth: true,
        selectWeek: false,
        verticalPosition: $.dpConst.POS_TOP,
        horizontalPosition: $.dpConst.POS_LEFT,
        verticalOffset: 0,
        horizontalOffset: 0,
        hoverClass: 'dp-hover'
    };

    function _getController(ele) {
        if (ele._dpId) return $.event._dpCache[ele._dpId];
        return false;
    };

    // make it so that no error is thrown if bgIframe plugin isn't included (allows you to use conditional
    // comments to only include bgIframe where it is needed in IE without breaking this plugin).
    if ($.fn.bgIframe == undefined) {
        $.fn.bgIframe = function() { return this; };
    };


    // clean-up
    $(window)
		.bind('unload', function() {
		    var els = $.event._dpCache || [];
		    for (var i in els) {
		        $(els[i].ele)._dpDestroy();
		    }
		});


})(jQuery);
// End of script: OpenQuarters.WebQuarters.Core.Web.jquery.datepicker.js

