﻿(function() {
	var
	window = this,
	undefined, _jQuery = window.jQuery,
	_$ = window.$,
	jQuery = window.jQuery = window.$ = function(selector, context) {
		return new jQuery.fn.init(selector, context);
	},
	quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
	isSimple = /^.[^:#\[\.,]*$/;
	jQuery.fn = jQuery.prototype = {
		init: function(selector, context) {
			selector = selector || document;
			if (selector.nodeType) {
				this[0] = selector;
				this.length = 1;
				this.context = selector;
				return this;
			}
			if (typeof selector === "string") {
				var match = quickExpr.exec(selector);
				if (match && (match[1] || !context)) {
					if (match[1]) selector = jQuery.clean([match[1]], context);
					else {
						var elem = document.getElementById(match[3]);
						if (elem && elem.id != match[3]) return jQuery().find(selector);
						var ret = jQuery(elem || []);
						ret.context = document;
						ret.selector = selector;
						return ret;
					}
				} else return jQuery(context).find(selector);
			} else if (jQuery.isFunction(selector)) return jQuery(document).ready(selector);
			if (selector.selector && selector.context) {
				this.selector = selector.selector;
				this.context = selector.context;
			}
			return this.setArray(jQuery.isArray(selector) ? selector: jQuery.makeArray(selector));
		},
		selector: "",
		jquery: "1.3.2",
		size: function() {
			return this.length;
		},
		get: function(num) {
			return num === undefined ? Array.prototype.slice.call(this) : this[num];
		},
		pushStack: function(elems, name, selector) {
			var ret = jQuery(elems);
			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 ret;
		},
		setArray: function(elems) {
			this.length = 0;
			Array.prototype.push.apply(this, elems);
			return this;
		},
		each: function(callback, args) {
			return jQuery.each(this, callback, args);
		},
		index: function(elem) {
			return jQuery.inArray(elem && elem.jquery ? elem[0] : elem, this);
		},
		attr: function(name, value, type) {
			var options = name;
			if (typeof name === "string") if (value === undefined) return this[0] && jQuery[type || "attr"](this[0], name);
			else {
				options = {};
				options[name] = value;
			}
			return this.each(function(i) {
				for (name in options)
				jQuery.attr(type ? this.style: this, name, jQuery.prop(this, options[name], type, i, name));
			});
		},
		css: function(key, value) {
			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]) {
				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([]);
		},
		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) {
			var ret = this.map(function() {
				if (!jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this)) {
					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);
			});
			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 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") 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;
					if (jQuery.nodeName(elem, "select")) {
						var index = elem.selectedIndex,
						values = [],
						options = elem.options,
						one = elem.type == "select-one";
						if (index < 0) return null;
						for (var i = one ? index: 0, max = one ? index + 1 : options.length; i < max; i++) {
							var option = options[i];
							if (option.selected) {
								value = jQuery(option).val();
								if (one) return value;
								values.push(value);
							}
						}
						return values;
					}
					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() {
						try {
							this.selected = (jQuery.inArray(this.value, values) >= 0 || jQuery.inArray(this.text, values) >= 0);
						}
						catch(e) {}
					});
					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;
			}
		}
	};
	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() {
		var target = arguments[0] || {},
		i = 1,
		length = arguments.length,
		deep = false,
		options;
		if (typeof target === "boolean") {
			deep = target;
			target = arguments[1] || {};
			i = 2;
		}
		if (typeof target !== "object" && !jQuery.isFunction(target)) target = {};
		if (length == i) {
			target = this; --i;
		}
		for (; i < length; i++)
		if ((options = arguments[i]) != null) for (var name in options) {
			var src = target[name],
			copy = options[name];
			if (target === copy) continue;
			if (deep && copy && typeof copy === "object" && !copy.nodeType) target[name] = jQuery.extend(deep, src || (copy.length != null ? [] : {}), copy);
			else if (copy !== undefined) target[name] = copy;
		}
		return target;
	};
	var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
	defaultView = document.defaultView || {},
	toString = Object.prototype.toString;
	jQuery.extend({
		noConflict: function(deep) {
			window.$ = _$;
			if (deep) window.jQuery = _jQuery;
			return jQuery;
		},
		isFunction: function(obj) {
			return toString.call(obj) === "[object Function]";
		},
		isArray: function(obj) {
			return toString.call(obj) === "[object Array]";
		},
		isXMLDoc: function(elem) {
			return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || !!elem.ownerDocument && jQuery.isXMLDoc(elem.ownerDocument);
		},
		globalEval: function(data) {
			if (data && /\S/.test(data)) {
				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;
				head.insertBefore(script, head.firstChild);
				head.removeChild(script);
			}
		},
		nodeName: function(elem, name) {
			return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
		},
		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;
			} 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) {
			if (jQuery.isFunction(value)) value = value.call(elem, i);
			return typeof value === "number" && type == "curCSS" && !exclude.test(name) ? value + "px": value;
		},
		className: {
			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;
				});
			},
			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(" ") : "";
			},
			has: function(elem, className) {
				return elem && jQuery.inArray(className, (elem.className || elem).toString().split(/\s+/)) > -1;
			}
		},
		swap: function(elem, options, callback) {
			var old = {};
			for (var name in options) {
				old[name] = elem.style[name];
				elem.style[name] = options[name];
			}
			callback.call(elem);
			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;
			if (name == "opacity" && !jQuery.support.opacity) {
				ret = jQuery.attr(style, "opacity");
				return ret == "" ? "1": ret;
			}
			if (name.match(/float/i)) name = styleFloat;
			if (!force && style && style[name]) ret = style[name];
			else if (defaultView.getComputedStyle) {
				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);
				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];
				if (!/^\d+(px)?$/i.test(ret) && /^\d/.test(ret)) {
					var left = style.left,
					rsLeft = elem.runtimeStyle.left;
					elem.runtimeStyle.left = elem.currentStyle.left;
					style.left = ret || 0;
					ret = style.pixelLeft + "px";
					style.left = left;
					elem.runtimeStyle.left = rsLeft;
				}
			}
			return ret;
		},
		clean: function(elems, context, fragment) {
			context = context || document;
			if (typeof context.createElement === "undefined") context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
			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;
				if (typeof elem === "string") {
					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 + ">";
					});
					var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
					var wrap = !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>"] || (!tags.indexOf("<td") || !tags.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || !tags.indexOf("<col") && [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"] || !jQuery.support.htmlSerialize && [1, "div<div>", "</div>"] || [0, "", ""];
					div.innerHTML = wrap[1] + elem + wrap[2];
					while (wrap[0]--)
					div = div.lastChild;
					if (!jQuery.support.tbody) {
						var hasBody = /<tbody/i.test(elem),
						tbody = !tags.indexOf("<table") && !hasBody ? div.firstChild && div.firstChild.childNodes: 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]);
					}
					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) {
			if (!elem || elem.nodeType == 3 || elem.nodeType == 8) return undefined;
			var notxml = !jQuery.isXMLDoc(elem),
			set = value !== undefined;
			name = notxml && jQuery.props[name] || name;
			if (elem.tagName) {
				var special = /href|src|style/.test(name);
				if (name == "selected" && elem.parentNode) elem.parentNode.selectedIndex;
				if (name in elem && notxml && !special) {
					if (set) {
						if (name == "type" && jQuery.nodeName(elem, "input") && elem.parentNode) throw "type property can't be changed";
						elem[name] = value;
					}
					if (jQuery.nodeName(elem, "form") && elem.getAttributeNode(name)) return elem.getAttributeNode(name).nodeValue;
					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) elem.setAttribute(name, "" + value);
				var attr = !jQuery.support.hrefNormalized && notxml && special ? elem.getAttribute(name, 2) : elem.getAttribute(name);
				return attr === null ? undefined: attr;
			}
			if (!jQuery.support.opacity && name == "opacity") {
				if (set) {
					elem.zoom = 1;
					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;
				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++)
			if (array[i] === elem) return i;
			return - 1;
		},
		merge: function(first, second) {
			var i = 0,
			elem, pos = first.length;
			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 = [];
			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 = [];
			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);
		}
	});
	var userAgent = navigator.userAgent.toLowerCase();
	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) {
				jQuery("*", this).add([this]).each(function() {
					jQuery.event.remove(this);
					jQuery.removeData(this);
				});
				if (this.parentNode) this.parentNode.removeChild(this);
			}
		},
		empty: function() {
			jQuery(this).children().remove();
			while (this.firstChild)
			this.removeChild(this.firstChild);
		}
	},
	function(name, fn) {
		jQuery.fn[name] = function() {
			return this.each(fn, arguments);
		};
	});
	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];
			if (!id) id = elem[expando] = ++uuid;
			if (name && !jQuery.cache[id]) jQuery.cache[id] = {};
			if (data !== undefined) jQuery.cache[id][name] = data;
			return name ? jQuery.cache[id][name] : id;
		},
		removeData: function(elem, name) {
			elem = elem == window ? windowData: elem;
			var id = elem[expando];
			if (name) {
				if (jQuery.cache[id]) {
					delete jQuery.cache[id][name];
					name = "";
					for (name in jQuery.cache[id])
					break;
					if (!name) jQuery.removeData(elem);
				}
			} else {
				try {
					delete elem[expando];
				} catch(e) {
					if (elem.removeAttribute) elem.removeAttribute(expando);
				}
				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);
			});
		}
	});
	(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;
			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;
						}
					}
				}
				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") {
						var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || !/\D/.test(match[2]) && "0n+" + match[2] || match[2]);
						match[2] = (test[1] + (test[2] || 1)) - 0;
						match[3] = test[3] - 0;
					}
					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 (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) {
					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;
		};
		try {
			Array.prototype.slice.call(document.documentElement.childNodes);
		} 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;
			};
		} (function() {
			var form = document.createElement("form"),
			id = "script" + (new Date).getTime();
			form.innerHTML = "<input name='" + id + "'/>";
			var root = document.documentElement;
			root.insertBefore(form, root.firstChild);
			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() {
			var div = document.createElement("div");
			div.appendChild(document.createComment(""));
			if (div.getElementsByTagName("*").length > 0) {
				Expr.find.TAG = function(match, context) {
					var results = context.getElementsByTagName(match[1]);
					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;
				};
			}
			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>";
			if (div.querySelectorAll && div.querySelectorAll(".TEST").length === 0) {
				return;
			}
			Sizzle = function(query, context, extra, seed) {
				context = context || document;
				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>";
			if (div.getElementsByClassName("e").length === 0) return;
			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;
			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);
		};
		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;
	})();
	jQuery.event = {
		add: function(elem, types, handler, data) {
			if (elem.nodeType == 3 || elem.nodeType == 8) return;
			if (elem.setInterval && elem != window) elem = window;
			if (!handler.guid) handler.guid = this.guid++;
			if (data !== undefined) {
				var fn = handler;
				handler = this.proxy(fn);
				handler.data = data;
			}
			var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle",
			function() {
				return typeof jQuery !== "undefined" && !jQuery.event.triggered ? jQuery.event.handle.apply(arguments.callee.elem, arguments) : undefined;
			});
			handle.elem = elem;
			jQuery.each(types.split(/\s+/),
			function(index, type) {
				var namespaces = type.split(".");
				type = namespaces.shift();
				handler.type = namespaces.slice().sort().join(".");
				var handlers = events[type];
				if (jQuery.event.specialAll[type]) jQuery.event.specialAll[type].setup.call(elem, data, namespaces);
				if (!handlers) {
					handlers = events[type] = {};
					if (!jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false) {
						if (elem.addEventListener) elem.addEventListener(type, handle, false);
						else if (elem.attachEvent) elem.attachEvent("on" + type, handle);
					}
				}
				handlers[handler.guid] = handler;
				jQuery.event.global[type] = true;
			});
			elem = null;
		},
		guid: 1,
		global: {},
		remove: function(elem, types, handler) {
			if (elem.nodeType == 3 || elem.nodeType == 8) return;
			var events = jQuery.data(elem, "events"),
			ret,
			index;
			if (events) {
				if (types === undefined || (typeof types === "string" && types.charAt(0) == ".")) for (var type in events) this.remove(elem, type + (types || ""));
				else {
					if (types.type) {
						handler = types.handler;
						types = types.type;
					}
					jQuery.each(types.split(/\s+/),
					function(index, type) {
						var namespaces = type.split(".");
						type = namespaces.shift();
						var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
						if (events[type]) {
							if (handler) delete events[type][handler.guid];
							else for (var handle in events[type]) if (namespace.test(events[type][handle].type)) delete events[type][handle];
							if (jQuery.event.specialAll[type]) jQuery.event.specialAll[type].teardown.call(elem, namespaces);
							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];
							}
						}
					});
				}
				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");
				}
			}
		},
		trigger: function(event, data, elem, bubbling) {
			var type = event.type || event;
			if (!bubbling) {
				event = typeof event === "object" ? event[expando] ? event: jQuery.extend(jQuery.Event(type), event) : jQuery.Event(type);
				if (type.indexOf("!") >= 0) {
					event.type = type = type.slice(0, -1);
					event.exclusive = true;
				}
				if (!elem) {
					event.stopPropagation();
					if (this.global[type]) jQuery.each(jQuery.cache,
					function() {
						if (this.events && this.events[type]) jQuery.event.trigger(event, data, this.handle.elem);
					});
				}
				if (!elem || elem.nodeType == 3 || elem.nodeType == 8) return undefined;
				event.result = undefined;
				event.target = elem;
				data = jQuery.makeArray(data);
				data.unshift(event);
			}
			event.currentTarget = elem;
			var handle = jQuery.data(elem, "handle");
			if (handle) handle.apply(elem, data);
			if ((!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on" + type] && elem["on" + type].apply(elem, data) === false) event.result = false;
			if (!bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click")) {
				this.triggered = true;
				try {
					elem[type]();
				} 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) {
			var all, handlers;
			event = arguments[0] = jQuery.event.fix(event || window.event);
			event.currentTarget = this;
			var namespaces = event.type.split(".");
			event.type = namespaces.shift();
			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];
				if (all || namespace.test(handler.type)) {
					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;
			var originalEvent = event;
			event = jQuery.Event(originalEvent);
			for (var i = this.props.length, prop; i;) {
				prop = this.props[--i];
				event[prop] = originalEvent[prop];
			}
			if (!event.target) event.target = event.srcElement || document;
			if (event.target.nodeType == 3) event.target = event.target.parentNode;
			if (!event.relatedTarget && event.fromElement) event.relatedTarget = event.fromElement == event.target ? event.toElement: event.fromElement;
			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);
			}
			if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode: event.keyCode)) event.which = event.charCode || event.keyCode;
			if (!event.metaKey && event.ctrlKey) event.metaKey = event.ctrlKey;
			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);
			};
			proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
			return proxy;
		},
		special: {
			ready: {
				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) {
		if (!this.preventDefault) return new jQuery.Event(src);
		if (src && src.type) {
			this.originalEvent = src;
			this.type = src.type;
		} else this.type = src;
		this.timeStamp = now();
		this[expando] = true;
	};
	function returnFalse() {
		return false;
	}
	function returnTrue() {
		return true;
	}
	jQuery.Event.prototype = {
		preventDefault: function() {
			this.isDefaultPrevented = returnTrue;
			var e = this.originalEvent;
			if (!e) return;
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
		},
		stopPropagation: function() {
			this.isPropagationStopped = returnTrue;
			var e = this.originalEvent;
			if (!e) return;
			if (e.stopPropagation) e.stopPropagation();
			e.cancelBubble = true;
		},
		stopImmediatePropagation: function() {
			this.isImmediatePropagationStopped = returnTrue;
			this.stopPropagation();
		},
		isDefaultPrevented: returnFalse,
		isPropagationStopped: returnFalse,
		isImmediatePropagationStopped: returnFalse
	};
	var withinElement = function(event) {
		var parent = event.relatedTarget;
		while (parent && parent != this)
		try {
			parent = parent.parentNode;
		}
		catch(e) {
			parent = this;
		}
		if (parent != this) {
			event.type = event.data;
			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) {
			var args = arguments,
			i = 1;
			while (i < args.length)
			jQuery.event.proxy(fn, args[i++]);
			return this.click(jQuery.event.proxy(fn,
			function(event) {
				this.lastToggle = (this.lastToggle || 0) % i;
				event.preventDefault();
				return args[this.lastToggle++].apply(this, arguments) || false;
			}));
		},
		hover: function(fnOver, fnOut) {
			return this.mouseenter(fnOver).mouseleave(fnOut);
		},
		ready: function(fn) {
			bindReady();
			if (jQuery.isReady) fn.call(document, jQuery);
			else 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: [],
		ready: function() {
			if (!jQuery.isReady) {
				jQuery.isReady = true;
				if (jQuery.readyList) {
					jQuery.each(jQuery.readyList,
					function() {
						this.call(document, jQuery);
					});
					jQuery.readyList = null;
				}
				jQuery(document).triggerHandler("ready");
			}
		}
	});
	var readyBound = false;
	function bindReady() {
		if (readyBound) return;
		readyBound = true;
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded",
			function() {
				document.removeEventListener("DOMContentLoaded", arguments.callee, false);
				jQuery.ready();
			},
			false);
		} else if (document.attachEvent) {
			document.attachEvent("onreadystatechange",
			function() {
				if (document.readyState === "complete") {
					document.detachEvent("onreadystatechange", arguments.callee);
					jQuery.ready();
				}
			});
			if (document.documentElement.doScroll && window == window.top)(function() {
				if (jQuery.isReady) return;
				try {
					document.documentElement.doScroll("left");
				} catch(error) {
					setTimeout(arguments.callee, 0);
					return;
				}
				jQuery.ready();
			})();
		}
		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) {
		jQuery.fn[name] = function(fn) {
			return fn ? this.bind(name, fn) : this.trigger(name);
		};
	});
	jQuery(window).bind('unload',
	function() {
		for (var id in jQuery.cache)
		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];
		if (!all || !all.length || !a) {
			return;
		}
		jQuery.support = {
			leadingWhitespace: div.firstChild.nodeType == 3,
			tbody: !div.getElementsByTagName("tbody").length,
			objectAll: !!div.getElementsByTagName("object")[0].getElementsByTagName("*").length,
			htmlSerialize: !!div.getElementsByTagName("link").length,
			style: /red/.test(a.getAttribute("style")),
			hrefNormalized: a.getAttribute("href") === "/a",
			opacity: a.style.opacity === "0.5",
			cssFloat: !!a.style.cssFloat,
			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);
		if (window[id]) {
			jQuery.support.scriptEval = true;
			delete window[id];
		}
		root.removeChild(script);
		if (div.attachEvent && div.fireEvent) {
			div.attachEvent("onclick",
			function() {
				jQuery.support.noCloneEvent = false;
				div.detachEvent("onclick", arguments.callee);
			});
			div.cloneNode(true).fireEvent("onclick");
		}
		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({
		_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);
			}
			var type = "GET";
			if (params) if (jQuery.isFunction(params)) {
				callback = params;
				params = null;
			} else if (typeof params === "object") {
				params = jQuery.param(params);
				type = "POST";
			}
			var self = this;
			jQuery.ajax({
				url: url,
				type: type,
				dataType: "html",
				data: params,
				complete: function(res, status) {
					if (status == "success" || status == "notmodified") self.html(selector ? jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")).find(selector) : 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();
		}
	});
	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) {
			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,
			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: "*/*"
			}
		},
		lastModified: {},
		ajax: function(s) {
			s = jQuery.extend(true, s, jQuery.extend(true, {},
			jQuery.ajaxSettings, s));
			var jsonp, jsre = /=\?(&|$)/g,
			status, data, type = s.type.toUpperCase();
			if (s.data && s.processData && typeof s.data !== "string") s.data = jQuery.param(s.data);
			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";
			}
			if (s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre))) {
				jsonp = "jsonp" + jsc++;
				if (s.data) s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
				s.url = s.url.replace(jsre, "=" + jsonp + "$1");
				s.dataType = "script";
				window[jsonp] = function(tmp) {
					data = tmp;
					success();
					complete();
					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();
				var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
				s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&": "?") + "_=" + ts: "");
			}
			if (s.data && type == "GET") {
				s.url += (s.url.match(/\?/) ? "&": "?") + s.data;
				s.data = null;
			}
			if (s.global && !jQuery.active++) jQuery.event.trigger("ajaxStart");
			var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec(s.url);
			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;
				if (!jsonp) {
					var done = false;
					script.onload = script.onreadystatechange = function() {
						if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
							done = true;
							success();
							complete();
							script.onload = script.onreadystatechange = null;
							head.removeChild(script);
						}
					};
				}
				head.appendChild(script);
				return undefined;
			}
			var requestDone = false;
			var xhr = s.xhr();
			if (s.username) xhr.open(type, s.url, s.async, s.username, s.password);
			else xhr.open(type, s.url, s.async);
			try {
				if (s.data) xhr.setRequestHeader("Content-Type", s.contentType);
				if (s.ifModified) xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT");
				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
				xhr.setRequestHeader("Accept", s.dataType && s.accepts[s.dataType] ? s.accepts[s.dataType] + ", */*": s.accepts._default);
			} catch(e) {}
			if (s.beforeSend && s.beforeSend(xhr, s) === false) {
				if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");
				xhr.abort();
				return false;
			}
			if (s.global) jQuery.event.trigger("ajaxSend", [xhr, s]);
			var onreadystatechange = function(isTimeout) {
				if (xhr.readyState == 0) {
					if (ival) {
						clearInterval(ival);
						ival = null;
						if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");
					}
				} else if (!requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout")) {
					requestDone = true;
					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") {
						try {
							data = jQuery.httpData(xhr, s.dataType, s);
						} catch(e) {
							status = "parsererror";
						}
					}
					if (status == "success") {
						var modRes;
						try {
							modRes = xhr.getResponseHeader("Last-Modified");
						} catch(e) {}
						if (s.ifModified && modRes) jQuery.lastModified[s.url] = modRes;
						if (!jsonp) success();
					} else jQuery.handleError(s, xhr, status);
					complete();
					if (isTimeout) xhr.abort();
					if (s.async) xhr = null;
				}
			};
			if (s.async) {
				var ival = setInterval(onreadystatechange, 13);
				if (s.timeout > 0) setTimeout(function() {
					if (xhr && !requestDone) onreadystatechange("timeout");
				},
				s.timeout);
			}
			try {
				xhr.send(s.data);
			} catch(e) {
				jQuery.handleError(s, xhr, null, e);
			}
			if (!s.async) onreadystatechange();
			function success() {
				if (s.success) s.success(data, status);
				if (s.global) jQuery.event.trigger("ajaxSuccess", [xhr, s]);
			}
			function complete() {
				if (s.complete) s.complete(xhr, status);
				if (s.global) jQuery.event.trigger("ajaxComplete", [xhr, s]);
				if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");
			}
			return xhr;
		},
		handleError: function(s, xhr, status, e) {
			if (s.error) s.error(xhr, status, e);
			if (s.global) jQuery.event.trigger("ajaxError", [xhr, s, e]);
		},
		active: 0,
		httpSuccess: function(xhr) {
			try {
				return ! xhr.status && location.protocol == "file:" || (xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || xhr.status == 1223;
			} catch(e) {}
			return false;
		},
		httpNotModified: function(xhr, url) {
			try {
				var xhrRes = xhr.getResponseHeader("Last-Modified");
				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";
			if (s && s.dataFilter) data = s.dataFilter(data, type);
			if (typeof data === "string") {
				if (type == "script") jQuery.globalEval(data);
				if (type == "json") data = window["eval"]("(" + data + ")");
			}
			return data;
		},
		param: function(a) {
			var s = [];
			function add(key, value) {
				s[s.length] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
			};
			if (jQuery.isArray(a) || a.jquery) jQuery.each(a,
			function() {
				add(this.name, this.value);
			});
			else for (var j in a) 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 s.join("&").replace(/%20/g, "+");
		}
	});
	var elemdisplay = {},
	timerId, fxAttrs = [["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"], ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"], ["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);
					}
				}
				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"));
				}
				for (var i = 0, l = this.length; i < l; i++) {
					this[i].style.display = "none";
				}
				return this;
			}
		},
		_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) {
						opt.display = jQuery.css(this, "display");
						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";
							if (unit != "px") {
								self.style[name] = (end || 1) + unit;
								start = ((end || 1) / e.cur(true)) * start;
								self.style[name] = start + unit;
							}
							if (parts[1]) end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
							e.custom(start, end, unit);
						} else e.custom(start, val, "");
					}
				});
				return true;
			});
		},
		stop: function(clearQueue, gotoEnd) {
			var timers = jQuery.timers;
			if (clearQueue) this.queue([]);
			this.each(function() {
				for (var i = timers.length - 1; i >= 0; i--)
				if (timers[i].elem == this) {
					if (gotoEnd) timers[i](true);
					timers.splice(i, 1);
				}
			});
			if (!gotoEnd) this.dequeue();
			return this;
		}
	});
	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;
			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 = {
		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);
			if ((this.prop == "height" || this.prop == "width") && this.elem.style) this.elem.style.display = "block";
		},
		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;
		},
		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);
			}
		},
		show: function() {
			this.options.orig[this.prop] = jQuery.attr(this.elem.style, this.prop);
			this.options.show = true;
			this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
			jQuery(this.elem).show();
		},
		hide: function() {
			this.options.orig[this.prop] = jQuery.attr(this.elem.style, this.prop);
			this.options.hide = true;
			this.custom(this.cur(), 0);
		},
		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) {
						this.elem.style.overflow = this.options.overflow;
						this.elem.style.display = this.options.display;
						if (jQuery.css(this.elem, "display") == "none") this.elem.style.display = "block";
					}
					if (this.options.hide) jQuery(this.elem).hide();
					if (this.options.hide || this.options.show) for (var p in this.options.curAnim) jQuery.attr(this.elem.style, p, this.options.orig[p]);
					this.options.complete.call(this.elem);
				}
				return false;
			} else {
				var n = t - this.startTime;
				this.state = n / this.options.duration;
				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);
				this.update();
			}
			return true;
		}
	};
	jQuery.extend(jQuery.fx, {
		speeds: {
			slow: 600,
			fast: 200,
			_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]) {
				var offsetParent = this.offsetParent(),
				offset = this.offset(),
				parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? {
					top: 0,
					left: 0
				}: offsetParent.offset();
				offset.top -= num(this, 'marginTop');
				offset.left -= num(this, 'marginLeft');
				parentOffset.top += num(offsetParent, 'borderTopWidth');
				parentOffset.left += num(offsetParent, 'borderLeftWidth');
				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);
		}
	});
	jQuery.each(['Left', 'Top'],
	function(i, name) {
		var method = 'scroll' + name;
		jQuery.fn[method] = function(val) {
			if (!this[0]) return null;
			return val !== undefined ? this.each(function() {
				this == window || this == document ? window.scrollTo(!i ? val: jQuery(window).scrollLeft(), i ? val: jQuery(window).scrollTop()) : this[method] = val;
			}) : this[0] == window || this[0] == document ? self[i ? 'pageYOffset': 'pageXOffset'] || jQuery.boxModel && document.documentElement[method] || document.body[method] : this[0][method];
		};
	});
	jQuery.each(["Height", "Width"],
	function(i, name) {
		var tl = i ? "Left": "Top",
		br = i ? "Right": "Bottom",
		lower = name.toLowerCase();
		jQuery.fn["inner" + name] = function() {
			return this[0] ? jQuery.css(this[0], lower, false, "padding") : null;
		};
		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) {
			return this[0] == window ? document.compatMode == "CSS1Compat" && document.documentElement["client" + name] || document.body["client" + name] : this[0] == document ? Math.max(document.documentElement["client" + name], document.body["scroll" + name], document.documentElement["scroll" + name], document.body["offset" + name], document.documentElement["offset" + name]) : size === undefined ? (this.length ? jQuery.css(this[0], type) : null) : this.css(type, typeof size === "string" ? size: size + "px");
		};
	});
})();
(function($) {
	$.event.special.mousewheel = {
		setup: function() {
			var handler = $.event.special.mousewheel.handler;
			if ($.browser.mozilla) $(this).bind('mousemove.mousewheel',
			function(event) {
				$.data(this, 'mwcursorposdata', {
					pageX: event.pageX,
					pageY: event.pageY,
					clientX: event.clientX,
					clientY: event.clientY
				});
			});
			if (this.addEventListener) this.addEventListener(($.browser.mozilla ? 'DOMMouseScroll': 'mousewheel'), handler, false);
			else this.onmousewheel = handler;
		},
		teardown: function() {
			var handler = $.event.special.mousewheel.handler;
			$(this).unbind('mousemove.mousewheel');
			if (this.removeEventListener) this.removeEventListener(($.browser.mozilla ? 'DOMMouseScroll': 'mousewheel'), handler, false);
			else this.onmousewheel = function() {};
			$.removeData(this, 'mwcursorposdata');
		},
		handler: function(event) {
			var args = Array.prototype.slice.call(arguments, 1);
			event = $.event.fix(event || window.event);
			$.extend(event, $.data(this, 'mwcursorposdata') || {});
			var delta = 0,
			returnValue = true;
			if (event.wheelDelta) delta = event.wheelDelta / 120;
			if (event.detail) delta = -event.detail / 3;
			if ($.browser.opera) delta = -event.wheelDelta;
			event.data = event.data || {};
			event.type = "mousewheel";
			args.unshift(delta);
			args.unshift(event);
			return $.event.handle.apply(this, args);
		}
	};
	$.fn.extend({
		mousewheel: function(fn) {
			return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
		},
		unmousewheel: function(fn) {
			return this.unbind("mousewheel", fn);
		}
	});
})(jQuery);
(function($) {
	$.cookie = function(name, value, options) {
		if (typeof value != 'undefined') {
			options = options || {};
			if (value === null) {
				value = '';
				options = $.extend({},
				options);
				options.expires = -1;
			}
			var expires = '';
			if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
				var date;
				if (typeof options.expires == 'number') {
					date = new Date();
					date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
				} else {
					date = options.expires;
				}
				expires = '; expires=' + date.toUTCString();
			}
			var path = options.path ? '; path=' + (options.path) : '';
			var domain = options.domain ? '; domain=' + (options.domain) : '';
			var secure = options.secure ? '; secure': '';
			document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
		} else {
			var cookieValue = null;
			if (document.cookie && document.cookie != '') {
				var cookies = document.cookie.split(';');
				for (var i = 0; i < cookies.length; i++) {
					var cookie = jQuery.trim(cookies[i]);
					if (cookie.substring(0, name.length + 1) == (name + '=')) {
						cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
						break;
					}
				}
			}
			return cookieValue;
		}
	};
})(jQuery);


(function($) {
    if ($.browser.mozilla) {
        $.fn.disableTextSelect = function() {
            return this.each(function() {
                $(this).css({
                    'MozUserSelect' : 'none'
                });
            });
        };
    } else if ($.browser.msie) {
        $.fn.disableTextSelect = function() {
            return this.each(function() {
                $(this).bind('selectstart', function() {
                    return false;
                });
            });
        };
    } else {
        $.fn.disableTextSelect = function() {
            return this.each(function() {
                $(this).mousedown(function() {
                    return false;
                });
            });
        };
    }
})(jQuery);


;(function($){var m=$.scrollTo=function(b,h,f){$(window).scrollTo(b,h,f)};m.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};m.window=function(b){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var b=this,h=!b.nodeName||$.inArray(b.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!h)return b;var f=(b.contentWindow||b).document||b.ownerDocument||b;return $.browser.safari||f.compatMode=='BackCompat'?f.body:f.documentElement})};$.fn.scrollTo=function(l,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};if(l=='max')l=9e9;a=$.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=$(k),d=l,p,g={},q=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)){d=n(d);break}d=$(d,this);case'object':if(d.is||d.style)p=(d=$(d)).offset()}$.each(a.axis.split(''),function(b,h){var f=h=='x'?'Left':'Top',i=f.toLowerCase(),c='scroll'+f,r=k[c],s=h=='x'?'Width':'Height';if(p){g[c]=p[i]+(q?0:r-o.offset()[i]);if(a.margin){g[c]-=parseInt(d.css('margin'+f))||0;g[c]-=parseInt(d.css('border'+f+'Width'))||0}g[c]+=a.offset[i]||0;if(a.over[i])g[c]+=d[s.toLowerCase()]()*a.over[i]}else g[c]=d[i];if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],u(s));if(!b&&a.queue){if(r!=g[c])t(a.onAfterFirst);delete g[c]}});t(a.onAfter);function t(b){o.animate(g,j,a.easing,b&&function(){b.call(this,l,a)})};function u(b){var h='scroll'+b;if(!q)return k[h];var f='client'+b,i=k.ownerDocument.documentElement,c=k.ownerDocument.body;return Math.max(i[h],c[h])-Math.min(i[f],c[f])}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery);


(function($) {
    $.fn._fadeIn = $.fn.fadeIn;
    $.blockUI = function(opts) {
        install(window, opts);
    };
    $.unblockUI = function(opts) {
        remove(window, opts);
    };
    $.growlUI = function(title, message, timeout) {
        var $m = $('<div class="growlUI"></div>');
        if (title) $m.append('<h1>' + title + '</h1>');
        if (message) $m.append('<h2>' + message + '</h2>');
        if (timeout == undefined) timeout = 3000;
        $.blockUI({
            message: $m,
            fadeIn: 700,
            fadeOut: 1000,
            centerY: false,
            timeout: timeout,
            showOverlay: false,
            css: $.blockUI.defaults.growlCSS
        });
    };
    $.fn.block = function(opts) {
        return this.each(function() {
            if ($.css(this, 'position') == 'static') this.style.position = 'relative';
            if ($.browser.msie) this.style.zoom = 1;
            install(this, opts);
        });
    };
    $.fn.unblock = function(opts) {
        return this.each(function() {
            remove(this, opts);
        });
    };
    $.blockUI.version = 2.14;
    $.blockUI.defaults = {
        message: '<h1>Please wait...</h1>',
        css: {
            padding: 0,
            margin: 0,
            width: '30%',
            top: '40%',
            left: '35%',
            textAlign: 'center',
            color: '#000',
            cursor: 'wait'
        },
        overlayCSS: {
            backgroundColor: '#000',
            opacity: '0.6'
        },
        growlCSS: {
            width: '350px',
            top: '10px',
            left: '',
            right: '10px',
            border: 'none',
            padding: '5px',
            opacity: '0.6',
            cursor: null,
            color: '#fff',
            backgroundColor: '#000',
            '-webkit-border-radius': '10px',
            '-moz-border-radius': '10px'
        },
        baseZ: 100,
        centerX: true,
        centerY: true,
        allowBodyStretch: true,
        constrainTabKey: true,
        fadeIn: 200,
        fadeOut: 400,
        timeout: 0,
        showOverlay: true,
        focusInput: true,
        applyPlatformOpacityRules: true,
        onUnblock: null,
        onBlock: null,
        delay: null,
        quirksmodeOffsetHack: 4
    };
    var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent);
    var pageBlock = null;
    var pageBlockEls = [];
    function install(el, opts) {
        $(document.body).css('cursor', 'wait');
        $('embed').css({
            'visibility': 'hidden'
        });
        var full = (el == window);
        var msg = opts && opts.message !== undefined ? opts.message : undefined;
        opts = $.extend({},
		$.blockUI.defaults, opts || {});
        opts.overlayCSS = $.extend({},
		$.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
        var css = $.extend({},
		$.blockUI.defaults.css, opts.css || {});
        msg = msg === undefined ? opts.message : msg;
        if (full && pageBlock) remove(window, {
            fadeOut: 0
        });
        if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
            var node = msg.jquery ? msg[0] : msg;
            var data = {};
            $(el).data('blockUI.history', data);
            data.el = node;
            data.parent = node.parentNode;
            data.display = node.style.display;
            data.position = node.style.position;
            if (data.parent) data.parent.removeChild(node);
        }
        var z = opts.baseZ;


        var lyr1 = $('<iframe class="blockUI" style="z-index:' + (z++) + ';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="about:blank"></iframe>');
        var lyr2 = $('<div class="blockUI blockOverlay" style="z-index:' + (z++) + ';display:none;cursor:wait;border:none;margin:0;padding:0;top:0;left:0"></div>');
        var lyr3 = full ? $('<div class="blockUI " style="z-index:' + z + ';display:none;position:fixed"></div>') : $('<div class="blockUI " style="z-index:' + z + ';display:none;position:absolute"></div>');
        
        if (!msg) {
            msg = "로딩중입니다. 잠시만 기다려 주세요.";
        }
        var loading = '<div><div class="LoadmingSmallTop blockUI"></div>' + ' <div class="LoadmingSmallMiddle">' + '  <font color="#DF309F">' + msg + '</font>' + '  <div id="LoadingSmall">' + '           <object type="application/x-shockwave-flash" data="http://image8.hanatour.com/Lodge/loading_s.swf" width="108" height="81">' + '           <param name="movie" value="http://image8.hanatour.com/Lodge/loading_s.swf"/>' + '           <param name="bgcolor" value="#dddddd"/>' + '           <param name="allowScriptAccess" value="always"/>' + '           <param name="quality" value="high"/>' + '           <param name="wmode" value="transparent"/>' + '           <param name="pluginspage" value="http://www.adobe.com/go/getflashplayer"/>' + '           </object>' + '  </div>' + ' </div>' + ' <div class="LoadmingSmallBottom"></div></div>';
        
        lyr3.append(loading);

        lyr3.css(css);
        
        if (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform))) {
            lyr2.css(opts.overlayCSS);
        }
        lyr2.css('position', full ? 'fixed' : 'absolute');

        if ($.browser.msie) lyr1.css('opacity', '0.0');

        $([lyr1[0], lyr2[0], lyr3[0]]).appendTo(full ? 'body' : el);
        
        var expr = $.browser.msie && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
        if (ie6 || expr && lyr3[0].style.setExpression) {
            if (full && opts.allowBodyStretch && $.boxModel) {
                $('html,body').css('height', '100%');
            }
            if ((ie6 || !$.boxModel) && !full) {
                var t = sz(el, 'borderTopWidth'),
				l = sz(el, 'borderLeftWidth');
                var fixT = t ? '(0 - ' + t + ')' : 0;
                var fixL = l ? '(0 - ' + l + ')' : 0;
            }
            $.each([lyr1, lyr2, lyr3], function(i, o) {
                var s = o[0].style;
                s.position = 'absolute';

                if (i < 2) {
                    full ? s.setExpression('height', '$(window).height()') : s.setExpression('height', 'this.parentNode.offsetHeight + "px"');
                    full ? s.setExpression('width', '$(window).width()') : s.setExpression('width', 'this.parentNode.offsetWidth + "px"');
                    if (fixL) s.setExpression('left', fixL);
                    if (full) s.setExpression('top', '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
                    else s.setExpression('top', fixT);
                }
                else if (opts.centerY) {
                    if (full) s.setExpression('top', '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
                    s.marginTop = 0;
                }
                else if (!opts.centerY && full) {
                    var top = (opts.css && opts.css.top) ? parseInt(opts.css.top) : 0;
                    var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + ' + top + ') + "px"';
                    s.setExpression('top', expression);
                }
            });
        }


        if ($.browser.msie && opts.showOverlay) lyr1.show();
        if (opts.fadeIn) {
            if (opts.showOverlay) lyr2._fadeIn(opts.fadeIn);
            if (msg) lyr3.fadeIn(opts.fadeIn);
        }
        else {
            if (opts.showOverlay) lyr2.show();
            if (msg) lyr3.show();
        }

        bind(1, el, opts);
        
        if (full) {
            pageBlock = lyr3[0];
            pageBlockEls = $(':input:enabled:visible', pageBlock);
            if (opts.focusInput) setTimeout(focus, 20);
        }
        else center(lyr3[0], opts.centerX, opts.centerY);

        if (opts.timeout) {
            var to = setTimeout(function() {
                full ? $.unblockUI(opts) : $(el).unblock(opts);
            },
			opts.timeout);
            $(el).data('blockUI.timeout', to);
        }

        $(document.body).css('cursor', 'default');
        
        if (typeof opts.onBlock === 'function') {
            if (opts.delay != null) {
                setTimeout(function() {
                    opts.onBlock();
                },
				opts.delay);
            }
            else {
                opts.onBlock();
            }
        }
    };
    function remove(el, opts) {
        try {
            var full = el == window;
            var $el = $(el);
            var data = $el.data('blockUI.history');
            var to = $el.data('blockUI.timeout');
            if (to) {
                clearTimeout(to);
                $el.removeData('blockUI.timeout');
            }
            opts = $.extend({},
			$.blockUI.defaults, opts || {});
            bind(0, el, opts);
            var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);
            if (full) pageBlock = pageBlockEls = null;
            if (opts.fadeOut) {
                els.fadeOut(opts.fadeOut);
                setTimeout(function() {
                    reset(els, data, opts, el);
                },
				opts.fadeOut);
            }
            else reset(els, data, opts, el);
            $('embed').css({
                'visibility': 'visible'
            });
        }
        catch (e) {
            alert(e);
        }
    };
    function reset(els, data, opts, el) {
        els.each(function(i, o) {
            if (this.parentNode) this.parentNode.removeChild(this);
        });
        if (data && data.el) {
            data.el.style.display = data.display;
            data.el.style.position = data.position;
            if (data.parent) data.parent.appendChild(data.el);
            $(data.el).removeData('blockUI.history');
        }
        if (typeof opts.onUnblock == 'function') opts.onUnblock(el, opts);
    };
    function bind(b, el, opts) {
        var full = el == window,
		$el = $(el);
        if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked'))) return;
        if (!full) $el.data('blockUI.isBlocked', b);
        if (b && !opts.showOverlay) return;
        var events = 'mousedown mouseup';
        b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler);
    };
    function handler(e) {
        if (e.keyCode && e.keyCode == 9) {
            if (pageBlock && e.data.constrainTabKey) {
                var els = pageBlockEls;
                var fwd = !e.shiftKey && e.target == els[els.length - 1];
                var back = e.shiftKey && e.target == els[0];
                if (fwd || back) {
                    setTimeout(function() {
                        focus(back)
                    },
					10);
                    return false;
                }
            }
        }
        if ($(e.target).parents('div.blockMsg').length > 0) return true;
        return $(e.target).parents().children().filter('div.blockUI').length == 0;
    };
    function focus(back) {
        if (!pageBlockEls) return;
        var e = pageBlockEls[back === true ? pageBlockEls.length - 1 : 0];
        if (e) e.focus();
    };
    function center(el, x, y) {
        var p = el.parentNode,
		s = el.style;
        var l = ((p.offsetWidth - el.offsetWidth) / 2) - sz(p, 'borderLeftWidth');
        var t = ((p.offsetHeight - el.offsetHeight) / 2) - sz(p, 'borderTopWidth');
        if (x) s.left = l > 0 ? (l + 'px') : '0';
        if (y) s.top = t > 0 ? (t + 'px') : '0';
    };
    function sz(el, p) {
        return parseInt($.css(el, p)) || 0;
    };
})(jQuery);


(function($) {
	$.fn.Disposable = function(cln) {
		return this.each(function() {
			var el = this;
			if (!el.dispose) {
				el.dispose = cleanup;
				$(window).bind("unload", cleanup);
			}
			function cleanup() {
				if (!el) return;
				$(el).unbind();
				$(window).unbind("unload", cleanup);
				el.dispose = null;
				el = null;
			};
		});
	};
})(jQuery);
(function() {
	$.fn.jclock = function(options) {
		var version = '2.1.1';
		var opts = $.extend({},
		$.fn.jclock.defaults, options);
		return this.each(function() {
			$this = $(this);
			$this.timerID = null;
			$this.running = false;
			var o = $.meta ? $.extend({},
			opts, $this.data()) : opts;
			$this.format = o.format;
			$this.utc = o.utc;
			$this.utc_offset = o.utc_offset;
			$this.type = o.type;
			$this.css({
				fontFamily: o.fontFamily,
				fontSize: o.fontSize,
				backgroundColor: o.background,
				color: o.foreground
			});
			$this.daysAbbrvNames = new Array(7);
			$this.daysAbbrvNames[0] = "Sun";
			$this.daysAbbrvNames[1] = "Mon";
			$this.daysAbbrvNames[2] = "Tue";
			$this.daysAbbrvNames[3] = "Wed";
			$this.daysAbbrvNames[4] = "Thu";
			$this.daysAbbrvNames[5] = "Fri";
			$this.daysAbbrvNames[6] = "Sat";
			$this.daysFullNames = new Array(7);
			$this.daysFullNames[0] = "Sunday";
			$this.daysFullNames[1] = "Monday";
			$this.daysFullNames[2] = "Tuesday";
			$this.daysFullNames[3] = "Wednesday";
			$this.daysFullNames[4] = "Thursday";
			$this.daysFullNames[5] = "Friday";
			$this.daysFullNames[6] = "Saturday";
			$this.monthsAbbrvNames = new Array(12);
			$this.monthsAbbrvNames[0] = "Jan";
			$this.monthsAbbrvNames[1] = "Feb";
			$this.monthsAbbrvNames[2] = "Mar";
			$this.monthsAbbrvNames[3] = "Apr";
			$this.monthsAbbrvNames[4] = "May";
			$this.monthsAbbrvNames[5] = "Jun";
			$this.monthsAbbrvNames[6] = "Jul";
			$this.monthsAbbrvNames[7] = "Aug";
			$this.monthsAbbrvNames[8] = "Sep";
			$this.monthsAbbrvNames[9] = "Oct";
			$this.monthsAbbrvNames[10] = "Nov";
			$this.monthsAbbrvNames[11] = "Dec";
			$this.monthsFullNames = new Array(12);
			$this.monthsFullNames[0] = "January";
			$this.monthsFullNames[1] = "February";
			$this.monthsFullNames[2] = "March";
			$this.monthsFullNames[3] = "April";
			$this.monthsFullNames[4] = "May";
			$this.monthsFullNames[5] = "June";
			$this.monthsFullNames[6] = "July";
			$this.monthsFullNames[7] = "August";
			$this.monthsFullNames[8] = "September";
			$this.monthsFullNames[9] = "October";
			$this.monthsFullNames[10] = "November";
			$this.monthsFullNames[11] = "December";
			$this.monthsNumber = new Array(12);
			$this.monthsNumber[0] = "01";
			$this.monthsNumber[1] = "02";
			$this.monthsNumber[2] = "03";
			$this.monthsNumber[3] = "04";
			$this.monthsNumber[4] = "05";
			$this.monthsNumber[5] = "06";
			$this.monthsNumber[6] = "07";
			$this.monthsNumber[7] = "08";
			$this.monthsNumber[8] = "09";
			$this.monthsNumber[9] = "10";
			$this.monthsNumber[10] = "11";
			$this.monthsNumber[11] = "12";
			$.fn.jclock.startClock($this);
		});
	};
	$.fn.jclock.startClock = function(el) {
		$.fn.jclock.stopClock(el);
		$.fn.jclock.displayTime(el);
	}
	$.fn.jclock.stopClock = function(el) {
		if (el.running) {
			clearTimeout(el.timerID);
		}
		el.running = false;
	}
	$.fn.jclock.displayTime = function(el) {
		var time = $.fn.jclock.getTime(el);
		el.html(time);
		el.timerID = setTimeout(function() {
			$.fn.jclock.displayTime(el)
		},
		1000);
	}
	$.fn.jclock.getTime = function(el) {
		var now = new Date();
		if (el.utc == true) {
			var localTime = now.getTime();
			var localOffset = now.getTimezoneOffset() * 60000;
			var utc = localTime + localOffset;
			var utcTime = utc + (3600000 * el.utc_offset);
			now = new Date(utcTime);
		}
		if (el.type == 'hana') {
			var html = new Array();
			html.push('<li class="txtSize_11 txtOrange mR5">' + (now.getHours() < 12 ? "AM": "PM") + '</li>');
			var h = ((now.getHours() < 10) ? "0": "") + now.getHours();
			var m = ((now.getMinutes() < 10) ? "0": "") + now.getMinutes();
			var s = ((now.getSeconds() < 10) ? "0": "") + now.getSeconds();
			html.push('<li class="bgTime">' + h.charAt(0) + '</li>');
			html.push('<li class="bgTime">' + h.charAt(1) + '</li>');
			html.push('<li>:</li>');
			html.push('<li class="bgTime">' + m.charAt(0) + '</li>');
			html.push('<li class="bgTime">' + m.charAt(1) + '</li>');
			html.push('<li>:</li>');
			html.push('<li class="bgTime">' + s.charAt(0) + '</li>');
			html.push('<li class="bgTime">' + s.charAt(1) + '</li>');
			timeNow = html.join('');
		}
		else {
			var timeNow = "";
			var i = 0;
			var index = 0;
			while ((index = el.format.indexOf("%", i)) != -1) {
				timeNow += el.format.substring(i, index);
				index++;
				var property = $.fn.jclock.getProperty(now, el, el.format.charAt(index));
				index++;
				timeNow += property;
				i = index
			}
			timeNow += el.format.substring(i);
		}
		return timeNow;
	};
	$.fn.jclock.getProperty = function(dateObject, el, property) {
		switch (property) {
		case "a":
			return (el.daysAbbrvNames[dateObject.getDay()]);
		case "A":
			return (el.daysFullNames[dateObject.getDay()]);
		case "b":
			return (el.monthsAbbrvNames[dateObject.getMonth()]);
		case "B":
			return (el.monthsFullNames[dateObject.getMonth()]);
		case "c":
			return (el.monthsNumber[dateObject.getMonth()]);
		case "d":
			return ((dateObject.getDate() < 10) ? "0": "") + dateObject.getDate();
		case "H":
			return ((dateObject.getHours() < 10) ? "0": "") + dateObject.getHours();
		case "I":
			var hours = (dateObject.getHours() % 12 || 12);
			return ((hours < 10) ? "0": "") + hours;
		case "M":
			return ((dateObject.getMinutes() < 10) ? "0": "") + dateObject.getMinutes();
		case "p":
			return (dateObject.getHours() < 12 ? "am": "pm");
		case "P":
			return (dateObject.getHours() < 12 ? "AM": "PM");
		case "S":
			return ((dateObject.getSeconds() < 10) ? "0": "") + dateObject.getSeconds();
		case "y":
			return "";
		case "Y":
			return (dateObject.getFullYear());
		case "%":
			return "%";
		}
	}
	$.fn.jclock.defaults = {
		format: '%H:%M:%S',
		utc_offset: 0,
		utc: false,
		fontFamily: '',
		fontSize: '',
		foreground: '',
		background: '',
		type: ''
	};
})();


(function() {
	ju = {};
	if (typeof Object.create !== 'function') {
		Object.create = function(o) {
			function F() {}
			F.prototype = o;
			return new F();
		};
	};
	Array.prototype.remove = function(from, to) {
		var rest = this.slice((to || from) + 1 || this.length);
		this.length = from < 0 ? this.length + from: from;
		return this.push.apply(this, rest);
	};
	Array.prototype.sum = function() {
		return (!this.length) ? 0 : this.slice(1).sum() + ((typeof this[0] == 'number') ? this[0] : 0);
	};
	Array.prototype.unique = function() {
		var a = new Array();
		var l = this.length;
		for (var i = 0; i < l; i++) {
			for (var j = i + 1; j < l; j++) {
				if (this[i] === this[j]) j = ++i;
			}
			a.push(this[i]);
		}
		return a;
	};
	Array.prototype.removeValue = function(value) {
		for (var i = 0; i < this.length; i++) {
			if (this[i] == value) {
				this.remove(i, i);
				break;
			}
		}
	};
	var Try = {
		these: function() {
			var returnValue;
			for (var i = 0, length = arguments.length; i < length; i++) {
				var lambda = arguments[i];
				try {
					returnValue = lambda();
					break;
				} catch(e) {}
			}
			return returnValue;
		}
	};
	getDom = {
		xml: function() {
			var xmlDom;
			if ($.browser.msie) {
				Try.these(function() {
					xmlDom = new ActiveXObject("MSXML2.DOMDocument.4.0");
				},
				function() {
					xmlDom = new ActiveXObject("MSXML2.DOMDocument.3.0");
				},
				function() {
					xmlDom = new ActiveXObject("MSXML2.DOMDocument");
				},
				function() {
					xmlDom = new ActiveXObject("Microsoft.XmlDom");
				});
			}
			else {
				xmlDom = document.implementation.createDocument("", "", null);
			}
			return xmlDom;
		},
		xsl: function() {
			var xsl;
			Try.these(function() {
				xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.4.0");
			},
			function() {
				xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.3.0");
			},
			function() {
				xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
			},
			function() {
				xsl = new ActiveXObject("Microsoft.FreeThreadedXMLDOM");
			});
			return xsl;
		},
		xslt: function() {
			var xslt;
			Try.these(function() {
				xslt = new ActiveXObject("MSXML2.XSLTemplate.4.0");
			},
			function() {
				xslt = new ActiveXObject("MSXML2.XSLTemplate.3.0");
			},
			function() {
				xslt = new ActiveXObject("MSXML2.XSLTemplate");
			});
			return xslt;
		}
	};
	function pause(ms) {
		var date = new Date();
		curDate = null;
		do {
			var curDate = new Date();
		}
		while ( curDate - date < ms );
	};
})();
(function() {
	ju.dmt = {};
	ju.dmt.pageSize = function() {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight) {
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else {
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		var windowWidth, windowHeight;
		if (self.innerHeight) {
			if (document.documentElement.clientWidth) {
				windowWidth = document.documentElement.clientWidth;
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) {
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) {
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}
		if (yScroll < windowHeight) {
			pageHeight = windowHeight;
		} else {
			pageHeight = yScroll;
		}
		if (xScroll < windowWidth) {
			pageWidth = xScroll;
		} else {
			pageWidth = windowWidth;
		}
		return new Array(pageWidth, pageHeight, windowWidth, windowHeight);
	};
	ju.dmt.pageScroll = function() {
		var xScroll, yScroll;
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;
		}
		arrayPageScroll = new Array(xScroll, yScroll);
		return arrayPageScroll;
	};
})();
(function() {
	ju.dt = function() {};
	ju.dt.xml = function(xmlDom) {
		var baseDom;
		switch (typeof xmlDom) {
		case 'object':
			baseDom = xmlDom;
			break;
		case 'string':
			if ($.browser.msie) {
				baseDom = getDom.xml();
				baseDom.async = false;
				baseDom.loadXML(xmlDom);
			} else {
				parser = new DOMParser();
				baseDom = parser.parseFromString(xmlDom, "text/xml");
			}
			break;
		default:
			if ($.browser.msie) {
				baseDom = getDom.xml();
			} else {
				baseDom = document.implementation.createDocument("", "", null);
			}
			baseDom.async = false;
			break;
		};
		var oMozDocument = null;
		if (typeof XMLDocument != "undefined") {
			oMozDocument = XMLDocument;
		} else if (typeof Document != "undefined") {
			oMozDocument = Document;
		}
		if (oMozDocument && !window.opera) {
			oMozDocument.prototype.readyState = 0;
			oMozDocument.prototype.onreadystatechange = null;
			oMozDocument.prototype.__changeReadyState__ = function(iReadyState) {
				this.readyState = iReadyState;
				if (typeof this.onreadystatechange == "function") {
					this.onreadystatechange();
				}
			};
			oMozDocument.prototype.__initError__ = function() {
				this.parseError.errorCode = 0;
				this.parseError.filepos = -1;
				this.parseError.line = -1;
				this.parseError.linepos = -1;
				this.parseError.reason = null;
				this.parseError.srcText = null;
				this.parseError.url = null;
			};
			oMozDocument.prototype.__checkForErrors__ = function() {
				if (this.documentElement.tagName == "parsererror") {
					var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
					reError.test(this.xml);
					this.parseError.errorCode = -999999;
					this.parseError.reason = RegExp.$1;
					this.parseError.url = RegExp.$2;
					this.parseError.line = parseInt(RegExp.$3);
					this.parseError.linepos = parseInt(RegExp.$4);
					this.parseError.srcText = RegExp.$5;
				}
			};
			oMozDocument.prototype.loadXML = function(sXml) {
				this.__initError__();
				this.__changeReadyState__(1);
				var oParser = new DOMParser();
				var oXmlDom = oParser.parseFromString(sXml, "text/xml");
				while (this.firstChild) {
					this.removeChild(this.firstChild);
				}
				for (var i = 0; i < oXmlDom.childNodes.length; i++) {
					var oNewNode = this.importNode(oXmlDom.childNodes[i], true);
					this.appendChild(oNewNode);
				}
				this.__checkForErrors__();
				this.__changeReadyState__(4);
			};
			oMozDocument.prototype.__load__ = oMozDocument.prototype.load;
			oMozDocument.prototype.load = function(sURL) {
				this.__initError__();
				this.__changeReadyState__(1);
				this.__load__(sURL);
			};
			Node.prototype.__defineGetter__("xml",
			function() {
				var oSerializer = new XMLSerializer();
				return oSerializer.serializeToString(this, "text/xml");
			});
			Node.prototype.__defineGetter__("text",
			function() {
				var sText = "";
				for (var i = 0; i < this.childNodes.length; i++) {
					if (this.childNodes[i].hasChildNodes()) {
						sText += this.childNodes[i].text;
					} else {
						sText += this.childNodes[i].nodeValue;
					}
				}
				return sText;
			});
			oMozDocument.prototype.selectNodes = function(xpath) {
				var doc = this;
				if (doc.nodeType != 9) doc = doc.ownerDocument;
				if (doc.nsResolver == null) doc.nsResolver = function(prefix) {
					return (null);
				};
				var result = doc.evaluate(xpath, this, doc.nsResolver, XPathResult.ANY_TYPE, null);
				var nodes = [],
				i;
				while (i = result.iterateNext()) nodes.push(i);
				return (nodes);
			};
			oMozDocument.prototype.selectSingleNode = function(xpath) {
				var doc = this;
				if (doc.nodeType != 9) doc = doc.ownerDocument;
				if (doc.nsResolver == null) doc.nsResolver = function(prefix) {
					return (null);
				};
				var node = doc.evaluate(xpath, this, doc.nsResolver, XPathResult.ANY_UNORDERED_NODE_TYPE, null);
				if (node != null) node = node.singleNodeValue;
				return (node);
			};
			Node.prototype.selectSingleNode = oMozDocument.prototype.selectSingleNode;
			Node.prototype.selectNodes = oMozDocument.prototype.selectNodes;
		}
		return baseDom;
	};
	ju.dt.xmlTransForm = function(xml, xslPath, parameters, isAsync) {
		try {
			//서버에서 변환하는 방법으로 변경함.
			var xmlString = (typeof(xml) == "string") ? xml : xml.xml;

			var params = new Array();

			params.push("<params>");
			for (var text in parameters) {
				params.push("<"+text+">" +parameters[text]+"</"+text+">");
			}
			params.push("</params>");


			var html = "";

			$.ajax({
				url: "/product/lodge/GetFile.asp",
                data: "xmlString=" + escape(xmlString) + "&xsltPath=" + xslPath + "&params=" + escape(params.join('')),
                cache: true,
                type: "POST",
                async: false,
                dataType: "html",
				global: false,
                error: function(XMLHttpRequest, textStatus, errorThrown) {
				},
                success: function(htmlString, textStatus) {
					html = htmlString;
				}
			});

			return html;


			/*
			var xmlDoc = (typeof(xml) == "string") ? new ju.dt.xml(xml) : xml;
			parameters = (parameters == undefined || parameters == null) ? null: parameters;
			isAsync = (isAsync == undefined || isAsync == null) ? false: isAsync;
			xslPath = "/GetFile.asp?fn=" + xslPath;
			if ($.browser.msie) {
				var xslDoc = getDom.xsl();
				xslDoc.async = isAsync;
				xslDoc.load(xslPath);
				var xslTemplate = getDom.xslt();
				xslTemplate.stylesheet = xslDoc;
				var xslProcessor = xslTemplate.createProcessor();
				xslProcessor.input = xmlDoc;
				for (var text in parameters) {
					xslProcessor.addParameter(text, parameters[text]);
				}
				xslProcessor.transform();
				return xslProcessor.output;
			}
			else {
				var myXMLHTTPRequest = new XMLHttpRequest();
				myXMLHTTPRequest.open("GET", xslPath, isAsync);
				myXMLHTTPRequest.send(null);
				var xslDoc = myXMLHTTPRequest.responseXML;
				var xslProcessor = new XSLTProcessor();
				for (var text in parameters) {
					xslProcessor.setParameter(null, text, parameters[text]);
				}
				xslProcessor.importStylesheet(xslDoc);
				var html = xslProcessor.transformToFragment(xmlDoc, document);
				html = (new XMLSerializer()).serializeToString(html);
				return html;
			}
			*/
		}
		catch(e) {
			alert(e.message);
		}
	};
})();
(function() {
    ju.ui = {};
    ju.ui.index = 0;
    ju.ui.hideCallback = function() { };
    
    ju.ui.dialogBox = function(settings) {
        this.settings = $.extend({
            overlayBgColor: '#000',
            overlayOpacity: 0.5,
            btnIDClose: '',
            xmlDomOuter: '',
            xsltPathOuter: '',
            xsltParamOuter: null,
            xmlDomInner: '',
            xsltPathInner: '',
            xsltParamInner: null,
            domInsideContent: '',
            dialogBoxWidth: 500,
            dialogBoxHeight: 500,
            imageLoading: '/Img/lightbox-ico-loading.gif',
            callback: null,
            contentHTML: "",
            blockui: true,
            parentElement: null,
            fromRight: false,
            offsetHeight: 30,
            offsetWidth: 0,
            blockEvent: true,
            contentHTML: "",
            toCenter: false,
            showType: '',
            xmlPath: "",
            zIndex: 1100,
            escKeyOff: true,
            btnCloseOff: false
        },
		settings);
        
        var THAT = this;
        
        this.dialogBoxdiv = $('<div/>').appendTo('body').css({
            position: "absolute",
            zIndex: this.settings.zIndex,
            overflow: "hidden"
        });
        
        this.index = ++ju.ui.index;
        this.settings.dialogBoxWidth = (this.settings.dialogBoxWidth != 'auto') ? this.settings.dialogBoxWidth : parseInt($(window).width()) - 50;
        this.settings.dialogBoxHeight = (this.settings.dialogBoxHeight != 'auto') ? this.settings.dialogBoxHeight : parseInt($(window).height()) - 50;
        var egarln = function(event, delta) {
            var target = ($('#LayerDetail' + THAT.index).length > 0) ? $('#LayerDetail' + THAT.index) : $('#' + THAT.settings.domInsideContent + THAT.index);
            target.scrollTop(target.scrollTop() - (delta * 100));
            return false;
        }
        
        this.loadDialogBox = function(callback) {
            try {
                if (THAT.settings.xmlPath != "") {
                    var xmlDom = new ju.dt.xml();
                    xmlDom.load(THAT.settings.xmlPath);
                    THAT.settings.xmlDomOuter = xmlDom.xml;
                }
                THAT.dialogBoxdiv.append(ju.dt.xmlTransForm(THAT.settings.xmlDomOuter, THAT.settings.xsltPathOuter, THAT.settings.xsltParamOuter, false));
                var contentHTML = (THAT.settings.xsltPathInner != "") ? ju.dt.xmlTransForm(THAT.settings.xmlDomInner, THAT.settings.xsltPathInner, THAT.settings.xsltParamInner, false) : THAT.settings.contentHTML;

                $('#' + THAT.settings.domInsideContent).css({
                    padding: 0,
                    overflowX: "hidden",
                    overflowY: "auto",
                    height: THAT.settings.dialogBoxHeight - 65
                }).append(contentHTML);

                if ($('#LayerDetail').length > 0 && THAT.settings.xsltPathInner != "") {
                    $('#' + THAT.settings.domInsideContent).css({
                        overflowX: "hidden",
                        overflowY: "hidden"
                    });
                    $('#LayerDetail').css({
                        padding: "10px",
                        width: "100%",
                        overflowX: "hidden",
                        overflowY: "auto",
                        height: $('#' + THAT.settings.domInsideContent).height() - $('#LayerTitle').height()
                    });
                }

                if (THAT.settings.blockEvent) {
                    $(window).bind('resize', function() {
					    THAT.resize();
					});

                    $(document.body).mousewheel(egarln);

                    $(window).bind('scroll', function() {
					    THAT.resize();
					});
                }
				
                if (THAT.settings.escKeyOff) {
                    $(document).keydown(function(e) {
                        if (e.keyCode == 27) {
                            THAT.hide();
							return false;
                        }
                    });
                }

                if (!THAT.settings.btnCloseOff) {
                    $('#' + THAT.settings.btnIDClose).click(function() {
                        THAT.hide();
                        return false;
                    }).css('cursor', 'pointer');
                }
                else {
                    $('#' + THAT.settings.btnIDClose).after("&nbsp;");
                    $('#' + THAT.settings.btnIDClose).remove();
                }

                THAT.dialogBoxdiv.css('display', 'none');
                THAT.resize();

                if (THAT.settings.showType == 'slide') {
                    THAT.dialogBoxdiv.slideDown("fast", callback);
                }
                else if (THAT.settings.showType == 'animate') {
                    THAT.dialogBoxdiv.animate({
                        width: 'toggle'
                    }, 500);
                }
                else {
                    THAT.dialogBoxdiv.fadeIn("fast", callback);
                }

                $('#' + THAT.settings.domInsideContent).attr('id', THAT.settings.domInsideContent + THAT.index);
                $('#' + THAT.settings.btnIDClose).attr('id', THAT.settings.btnIDClose + THAT.index);

                if ($('#LayerDetail').length > 0) {
                    $('#LayerDetail').attr('id', 'LayerDetail' + THAT.index);
                    $('#LayerTitle').attr('id', 'LayerTitle' + THAT.index);
                }
            }
            catch (e) {
                alert("method: loadDialogBox \nmsg:" + e.message);
                THAT.hide();
            }
        };
        this.show = function(callback) {
            try {
                if (this.settings.blockui) {
                    $.blockUI({
                        message: null
                    });
                }
                this.loadDialogBox(callback);
            }
            catch (e) {
                alert("method: ju.ui.dialogBox.show \nmsg: " + e.message);
                this.hide();
            }
            return this;
        };
        this.resize = function() {
            if (this.settings.parentElement == null) {
                var dialogPoint = new Array($(window).width() / 2 - this.settings.dialogBoxWidth / 2, $(window).height() / 2 - this.settings.dialogBoxHeight / 2 + ju.dmt.pageScroll()[1]);
            }
            else {
                var pos = this.settings.parentElement.offset();
                var left = (this.settings.fromRight) ? pos.left - this.settings.dialogBoxWidth + this.settings.parentElement.width() : ((this.settings.toCenter) ? $(window).width() / 2 - this.settings.dialogBoxWidth / 2 : pos.left);
                var dialogPoint = new Array(parseInt(left) + this.settings.offsetWidth, parseInt(pos.top) + this.settings.offsetHeight);
            }
            this.dialogBoxdiv.css({
                left: dialogPoint[0],
                top: dialogPoint[1],
                width: this.settings.dialogBoxWidth,
                height: this.settings.dialogBoxHeight
            });
        };
        this.hide = function(param) {
            try {
                var param = $.extend({
                    delay: "normal",
                    callback: function() { }
                },
				param);
				
				$('body').css('overflow', 'auto');

                if (this.settings.showType == 'slide') {
                    this.dialogBoxdiv.slideUp('fast',
					function() {
					    $(this).remove();
					    $.unblockUI();

					    if (param.callback != undefined) {
					        param.callback();
					    }
					});
                }
                else {
                    this.dialogBoxdiv.fadeOut('fast',
					function() {
					    $(this).remove();
					    $.unblockUI();

					    if (param.callback != undefined) {
					        param.callback();
					    }
					});
                }
                
                ju.ui.hideCallback();
            }
            catch (e) {
                alert(e.message);
                this.dialogBoxdiv.remove();
                $.unblockUI();
            }
            finally {
                $(document.body).unmousewheel();
                $(window).unbind('resize');
                $(window).unbind('scroll', egarln);
            }
        };
        return this;
    };
})();
function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}


/*
 * JQuery Rolling 
 * songsungkyun@naver.com
 * 2008/03/16
 */
(function($) {
	var rollingParam = {};
	
	$.fn.rolling = function(rollingDirection, rollingItemWidth, rollingItemHeight, viewingItemCount) {
		try {
		var rollingId = new Date().getTime();
		var id = this.attr("id");
		rollingParam[rollingId] = {
			id: id,
			rollingIsStarted: false,
			rollingItemCount:  0,
			rollingAnimationIndex: 0,
			rollingItemWidth: 0,
			rollingItemHeight: 0,
			viewingItemCount: 0,
			rollingTime: 0,
			viewingTime: 0,
			rollingAnimationFrame: 0,
			rollingDirection: null,
			rollingLeft: 0,
			rollingTop: 0,
			requestReverse: false,
			newRollingAnimationFrame: 0
		};
		
		var param = rollingParam[rollingId];
		param.rollingDirection = rollingDirection;
		param.rollingItemWidth = rollingItemWidth;
		param.rollingItemHeight = rollingItemHeight;
		
		if (viewingItemCount == undefined) {
			param.viewingItemCount = 1;
		} else {
			param.viewingItemCount = viewingItemCount;
		}
		
		if (param.rollingDirection == "left" || 
			param.rollingDirection == "right") {
			this.css("width", param.rollingItemWidth * param.viewingItemCount);
			this.css("height", param.rollingItemHeight);
		} else if (param.rollingDirection == "up" || 
			param.rollingDirection == "down") {
			this.css("width", param.rollingItemWidth);
			this.css("height", param.rollingItemHeight * param.viewingItemCount);
		}
		
		this.css("position", "relative");
		this.css("overflow", "hidden");
		this.attr("rollingId", rollingId);
		
		this.empty();	
		
		rollingContentDiv = $("<div/>").appendTo(this);
		rollingContentDiv.attr("id", rollingId);
		rollingContentDiv.css("position", "absolute");
		rollingContentDiv.attr("align", "left");
		rollingContentDiv.css("left", "0");
		rollingContentDiv.css("top", "0");
		return this;
		} catch(e) { ; }
	};
	
	$.fn.addRollingItem = function(html) {
		try {
		var param = rollingParam[this.attr("rollingId")];
		var rollingContentDiv = $("#" + this.attr("rollingId"));
		param.rollingItemCount++;		
		var rollingItem = null;
		
		if (param.rollingDirection == "up") {
			rollingItem = $("<div class='item'/>").appendTo(rollingContentDiv);			
		} else if (param.rollingDirection == "right") {
			rollingItem = $("<div class='item'/>").prependTo(rollingContentDiv);
			rollingItem.css("display", "inline");
			rollingContentDiv.css("width", param.rollingItemCount * param.rollingItemWidth);			
			rollingContentDiv.css("left", -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemWidth);
			param.rollingLeft =  -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemWidth;
		} else if (param.rollingDirection == "down") {
			rollingItem = $("<div class='item'/>").prependTo(rollingContentDiv);
			param.rollingTop =  -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemHeight;
			rollingContentDiv.css("top", -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemHeight);
		} else if (param.rollingDirection == "left") {
			rollingItem = $("<div class='item'/>").appendTo(rollingContentDiv);
			rollingItem.css("display", "inline");
			rollingContentDiv.css("width", param.rollingItemCount * param.rollingItemWidth);			
		}
		rollingItem.css("overflow", "hidden");
		rollingItem.css("width", param.rollingItemWidth);
		rollingItem.css("height", param.rollingItemHeight);
		rollingItem.html(html);
		return this;
		} catch(e) { ; }
	};
	
	rollingAnimation = function(id) {
		try {
		var param = rollingParam[id];
		var rollingContentDiv = $("#" + id);
		if (rollingContentDiv.size() == 0) {
			return;
		}
		var delayTime = param.rollingTime;
		
		if (param.rollingIsStarted == false) {
			setTimeout("rollingAnimation('" + id + "')", delayTime);
			return;
		}
		
		if (param.rollingAnimationIndex == 0) {
			if (param.newRollingAnimationFrame != param.rollingAnimationFrame) {
				param.rollingAnimationFrame = param.newRollingAnimationFrame;
			}
		}
			
		var isReverse = false;
		if (param.requestReverse == true) {
			isReverse = true;
			param.requestReverse = false;
			param.rollingAnimationIndex = param.rollingAnimationFrame - param.rollingAnimationIndex
			
			if (param.rollingDirection == "left") {
				param.rollingDirection = "right";
			} else if (param.rollingDirection == "right") {
				param.rollingDirection = "left";
			} else if (param.rollingDirection == "down") {
				param.rollingDirection = "up";
			} else if (param.rollingDirection == "up") {
				param.rollingDirection = "down";
			}
			$("#" + param.id).trigger("reverse");
		} else {						
			if (param.rollingDirection == "up") {				
				param.rollingTop -= param.rollingItemHeight/param.rollingAnimationFrame;
				if (-param.rollingTop > parseFloat(param.rollingItemHeight)* param.rollingItemCount) {
					param.rollingTop = - parseFloat(param.rollingItemHeight)* param.rollingItemCount;
				}
				rollingContentDiv.css("top", param.rollingTop);					
			} else if (param.rollingDirection == "right") {
				param.rollingLeft +=  param.rollingItemWidth/param.rollingAnimationFrame;	
				if (param.rollingLeft > parseFloat(param.rollingItemWidth)) {
					param.rollingLeft = parseFloat(param.rollingItemWidth);
				}
				rollingContentDiv.css("left", param.rollingLeft);										
			} else if (param.rollingDirection == "down") {				
				param.rollingTop += param.rollingItemHeight/param.rollingAnimationFrame;			
				if (param.rollingTop > parseFloat(param.rollingItemHeight)) {
					param.rollingTop = parseFloat(param.rollingItemHeight);
				}
				rollingContentDiv.css("top", param.rollingTop);	
			} else if (param.rollingDirection == "left") {
				param.rollingLeft -= param.rollingItemWidth/param.rollingAnimationFrame;
				if (-param.rollingLeft > parseFloat(param.rollingItemWidth) * param.rollingItemCount) {
					param.rollingLeft = -parseFloat(param.rollingItemWidth) * param.rollingItemCount;
				}
				rollingContentDiv.css("left", param.rollingLeft);
			}
			param.rollingAnimationIndex++;
		}
		
		if (param.rollingAnimationIndex != 0 && param.rollingAnimationIndex%param.rollingAnimationFrame == 0) {
			var currentRollingItemIndex = 0;	
			if (param.rollingDirection == "up" || param.rollingDirection == "left") {
				currentRollingItemIndex = 0;				
			} else if (param.rollingDirection == "right" || param.rollingDirection == "down") {
				currentRollingItemIndex = param.rollingItemCount - 1;
			}
			
			var currentRollingItem = $("div[class='item']:eq(" + currentRollingItemIndex + ")", rollingContentDiv);
			var rollingItem = null;
			if (param.rollingDirection == "up") {
				rollingItem = currentRollingItem.clone(true).appendTo(rollingContentDiv);				
				param.rollingTop += parseFloat(param.rollingItemHeight);
				param.rollingTop = param.rollingItemHeight * Math.round(param.rollingTop/param.rollingItemHeight);
				rollingContentDiv.css("top", param.rollingTop);	
			} else if (param.rollingDirection == "right") {
				rollingItem = currentRollingItem.clone(true).prependTo(rollingContentDiv);				
				param.rollingLeft -= parseFloat(param.rollingItemWidth);
				param.rollingLeft = param.rollingItemWidth * Math.round(param.rollingLeft/param.rollingItemWidth);
				$("#debug").html("rollingLeft:" + param.rollingLeft);
				rollingItem.css("display", "inline");
				rollingContentDiv.css("left", param.rollingLeft);					
			} else if (param.rollingDirection == "down") {
				rollingItem = currentRollingItem.clone(true).prependTo(rollingContentDiv);
				param.rollingTop -= parseFloat(param.rollingItemHeight);
				param.rollingTop = param.rollingItemHeight * Math.round(param.rollingTop/param.rollingItemHeight);
				rollingContentDiv.css("top", param.rollingTop);	
			} else if (param.rollingDirection == "left") {
				rollingItem = currentRollingItem.clone(true).appendTo(rollingContentDiv);
				param.rollingLeft += parseFloat(param.rollingItemWidth);
				param.rollingLeft = param.rollingItemWidth * Math.round(param.rollingLeft/param.rollingItemWidth);
				$("#debug").html("rollingLeft:" + param.rollingLeft);
				rollingItem.css("display", "inline");
				rollingContentDiv.css("left", param.rollingLeft);									
			}
			
			currentRollingItem.remove();
		
			if (!isReverse) {
				delayTime = param.viewingTime;
			} else {
				delayTime = 0;
			}
			
			var previousRollingItem = $("div[class='item']:eq(" + currentRollingItemIndex + ")", rollingContentDiv);
			$("#" + param.id).trigger("viewing", [previousRollingItem]);
			param.rollingAnimationIndex = 0;
		}
		
		if (param.rollingAnimationIndex != 0) {
			var currentRollingItem = $("div[class='item']:eq(0)", rollingContentDiv);
			$("#" + param.id).trigger("rolling", [currentRollingItem]);
		}
		setTimeout("rollingAnimation('" + id + "')", delayTime);
		} catch(e) { ; }
	}
	
	$.fn.startRolling = function(rollingTime, viewingTime, rollingAnimationFrame) {
		try {
		var param = rollingParam[this.attr("rollingId")];
		var rollingContentDiv = $("#" + this.attr("rollingId"));
		var currentRollingItemIndex = 0;
		
		if (param.rollingDirection == "up" || 
			param.rollingDirection == "left") {
			currentRollingItemIndex = 0;
		} else if (param.rollingDirection == "right" || 
			param.rollingDirection == "down") {
			currentRollingItemIndex = param.rollingItemCount - 1;
		}
		var currentRollingItem = $("div[class='item']:eq(" + currentRollingItemIndex + ")", rollingContentDiv);
		this.trigger("viewing", [currentRollingItem]);
		param.rollingTime = rollingTime
		param.viewingTime = viewingTime;
		param.rollingAnimationFrame =  rollingAnimationFrame;
		param.newRollingAnimationFrame = rollingAnimationFrame;
		param.rollingIsStarted = true;
		this.trigger("start");
		setTimeout("rollingAnimation('" + this.attr("rollingId") + "')", param.viewingTime);
		return this;
		} catch(e) { ; }
	};
	
	$.fn.stopRolling = function() {
		this.trigger("stop");
		rollingParam[this.attr("rollingId")].rollingIsStarted = false;
		return this;
	};
	
	$.fn.resumeRolling = function() {
		if (rollingParam[this.attr('rollingId')].rollingIsStarted != true) {
			rollingParam[this.attr('rollingId')].rollingIsStarted = true;
			this.trigger("start");			
		}
		return this;
	};
	
	$.fn.getRollingTime = function() {
		return rollingParam[this.attr('rollingId')].rollingTime;
	};
	
	$.fn.getViewingTime = function() {
		return rollingParam[this.attr('rollingId')].viewingTime;
	};
	
	$.fn.getRollingAnimationFrame = function() {
		return rollingParam[this.attr('rollingId')].rollingAnimationFrame;
	};
	
	$.fn.getRollingDirection = function() {
		return rollingParam[this.attr('rollingId')].rollingDirection;
	};
	
	$.fn.setRollingTime = function(rollingTime) {
		rollingParam[this.attr('rollingId')].rollingTime = rollingTime;
		return this;
	};
	
	$.fn.setViewingTime = function(viewingTime) {
		rollingParam[this.attr('rollingId')].viewingTime = viewingTime;
		return this;
	};
	
	$.fn.setRollingAnimationFrame = function(rollingAnimationFrame) {
		var oldStep = rollingParam[this.attr('rollingId')].rollingAnimationFrame;
		var oldIndex = rollingParam[this.attr('rollingId')].rollingAnimationIndex;
		var multiplier = rollingAnimationFrame / oldStep;
		rollingParam[this.attr('rollingId')].rollingAnimationFrame = rollingAnimationFrame;
		rollingParam[this.attr('rollingId')].newRollingAnimationFrame = rollingAnimationFrame;
		rollingParam[this.attr('rollingId')].rollingAnimationIndex = Math.round(multiplier * oldIndex);
		return this;		
	};
	
	$.fn.setRollingAnimationFrameNext = function(rollingAnimationFrame) {
		rollingParam[this.attr('rollingId')].newRollingAnimationFrame = rollingAnimationFrame;
		return this;
	}
	
	$.fn.getRollingItems = function() {
		return $("div[class=item]", this);
	};
	
	$.fn.bindViewingEvent = function(rollingEvent) {
		return this.bind("viewing", rollingEvent);
	};
	
	$.fn.unbindViewingEvent = function() {
		return this.unbind("viewing");
	};
	
	$.fn.bindRollingEvent = function(rollingEvent) {
		return this.bind("rolling", rollingEvent);
	};
	
	$.fn.unbindRollingEvent = function() {
		return this.unbind("rolling");
	};
	
	$.fn.bindStartEvent = function(rollingEvent) {
		return this.bind("start", rollingEvent);
	};
	
	$.fn.unbindStartEvent = function() {
		return this.unbind("start");
	};
	
	$.fn.bindStopEvent = function(rollingEvent) {
		return this.bind("stop", rollingEvent);
	};	
	
	$.fn.unbindStopEvent = function() {
		return this.unbind("stop");
	};
	
	$.fn.bindReverseEvent = function(rollingEvent) {
		return this.bind("reverse", rollingEvent);
	};
	
	$.fn.unbindReverseEvent = function() {
		return this.unbind("reverse");
	};
	
	$.fn.reverseRolling = function() {
		rollingParam[this.attr('rollingId')].requestReverse = true;
		return this;
	};
})(jQuery);