﻿/*!
* jQuery JavaScript Library v1.5.2
* http://jquery.com/
*
* Copyright 2011, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Mar 31 15:28:23 2011 -0400
*/
(function (a, b) { function ci(a) { return d.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1 } function cf(a) { if (!b_[a]) { var b = d("<" + a + ">").appendTo("body"), c = b.css("display"); b.remove(); if (c === "none" || c === "") c = "block"; b_[a] = c } return b_[a] } function ce(a, b) { var c = {}; d.each(cd.concat.apply([], cd.slice(0, b)), function () { c[this] = a }); return c } function b$() { try { return new a.ActiveXObject("Microsoft.XMLHTTP") } catch (b) { } } function bZ() { try { return new a.XMLHttpRequest } catch (b) { } } function bY() { d(a).unload(function () { for (var a in bW) bW[a](0, 1) }) } function bS(a, c) { a.dataFilter && (c = a.dataFilter(c, a.dataType)); var e = a.dataTypes, f = {}, g, h, i = e.length, j, k = e[0], l, m, n, o, p; for (g = 1; g < i; g++) { if (g === 1) for (h in a.converters) typeof h === "string" && (f[h.toLowerCase()] = a.converters[h]); l = k, k = e[g]; if (k === "*") k = l; else if (l !== "*" && l !== k) { m = l + " " + k, n = f[m] || f["* " + k]; if (!n) { p = b; for (o in f) { j = o.split(" "); if (j[0] === l || j[0] === "*") { p = f[j[1] + " " + k]; if (p) { o = f[o], o === !0 ? n = p : p === !0 && (n = o); break } } } } !n && !p && d.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c))) } } return c } function bR(a, c, d) { var e = a.contents, f = a.dataTypes, g = a.responseFields, h, i, j, k; for (i in g) i in d && (c[g[i]] = d[i]); while (f[0] === "*") f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type")); if (h) for (i in e) if (e[i] && e[i].test(h)) { f.unshift(i); break } if (f[0] in d) j = f[0]; else { for (i in d) { if (!f[0] || a.converters[i + " " + f[0]]) { j = i; break } k || (k = i) } j = j || k } if (j) { j !== f[0] && f.unshift(j); return d[j] } } function bQ(a, b, c, e) { if (d.isArray(b) && b.length) d.each(b, function (b, f) { c || bs.test(a) ? e(a, f) : bQ(a + "[" + (typeof f === "object" || d.isArray(f) ? b : "") + "]", f, c, e) }); else if (c || b == null || typeof b !== "object") e(a, b); else if (d.isArray(b) || d.isEmptyObject(b)) e(a, ""); else for (var f in b) bQ(a + "[" + f + "]", b[f], c, e) } function bP(a, c, d, e, f, g) { f = f || c.dataTypes[0], g = g || {}, g[f] = !0; var h = a[f], i = 0, j = h ? h.length : 0, k = a === bJ, l; for (; i < j && (k || !l); i++) l = h[i](c, d, e), typeof l === "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = bP(a, c, d, e, l, g))); (k || !l) && !g["*"] && (l = bP(a, c, d, e, "*", g)); return l } function bO(a) { return function (b, c) { typeof b !== "string" && (c = b, b = "*"); if (d.isFunction(c)) { var e = b.toLowerCase().split(bD), f = 0, g = e.length, h, i, j; for (; f < g; f++) h = e[f], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c) } } } function bq(a, b, c) { var e = b === "width" ? bk : bl, f = b === "width" ? a.offsetWidth : a.offsetHeight; if (c === "border") return f; d.each(e, function () { c || (f -= parseFloat(d.css(a, "padding" + this)) || 0), c === "margin" ? f += parseFloat(d.css(a, "margin" + this)) || 0 : f -= parseFloat(d.css(a, "border" + this + "Width")) || 0 }); return f } function bc(a, b) { b.src ? d.ajax({ url: b.src, async: !1, dataType: "script" }) : d.globalEval(b.text || b.textContent || b.innerHTML || ""), b.parentNode && b.parentNode.removeChild(b) } function bb(a) { return "getElementsByTagName" in a ? a.getElementsByTagName("*") : "querySelectorAll" in a ? a.querySelectorAll("*") : [] } function ba(a, b) { if (b.nodeType === 1) { var c = b.nodeName.toLowerCase(); b.clearAttributes(), b.mergeAttributes(a); if (c === "object") b.outerHTML = a.outerHTML; else if (c !== "input" || a.type !== "checkbox" && a.type !== "radio") { if (c === "option") b.selected = a.defaultSelected; else if (c === "input" || c === "textarea") b.defaultValue = a.defaultValue } else a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value); b.removeAttribute(d.expando) } } function _(a, b) { if (b.nodeType === 1 && d.hasData(a)) { var c = d.expando, e = d.data(a), f = d.data(b, e); if (e = e[c]) { var g = e.events; f = f[c] = d.extend({}, e); if (g) { delete f.handle, f.events = {}; for (var h in g) for (var i = 0, j = g[h].length; i < j; i++) d.event.add(b, h + (g[h][i].namespace ? "." : "") + g[h][i].namespace, g[h][i], g[h][i].data) } } } } function $(a, b) { return d.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a } function Q(a, b, c) { if (d.isFunction(b)) return d.grep(a, function (a, d) { var e = !!b.call(a, d, a); return e === c }); if (b.nodeType) return d.grep(a, function (a, d) { return a === b === c }); if (typeof b === "string") { var e = d.grep(a, function (a) { return a.nodeType === 1 }); if (L.test(b)) return d.filter(b, e, !c); b = d.filter(b, e) } return d.grep(a, function (a, e) { return d.inArray(a, b) >= 0 === c }) } function P(a) { return !a || !a.parentNode || a.parentNode.nodeType === 11 } function H(a, b) { return (a && a !== "*" ? a + "." : "") + b.replace(t, "`").replace(u, "&") } function G(a) { var b, c, e, f, g, h, i, j, k, l, m, n, o, p = [], q = [], s = d._data(this, "events"); if (a.liveFired !== this && s && s.live && !a.target.disabled && (!a.button || a.type !== "click")) { a.namespace && (n = new RegExp("(^|\\.)" + a.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)")), a.liveFired = this; var t = s.live.slice(0); for (i = 0; i < t.length; i++) g = t[i], g.origType.replace(r, "") === a.type ? q.push(g.selector) : t.splice(i--, 1); f = d(a.target).closest(q, a.currentTarget); for (j = 0, k = f.length; j < k; j++) { m = f[j]; for (i = 0; i < t.length; i++) { g = t[i]; if (m.selector === g.selector && (!n || n.test(g.namespace)) && !m.elem.disabled) { h = m.elem, e = null; if (g.preType === "mouseenter" || g.preType === "mouseleave") a.type = g.preType, e = d(a.relatedTarget).closest(g.selector)[0]; (!e || e !== h) && p.push({ elem: h, handleObj: g, level: m.level }) } } } for (j = 0, k = p.length; j < k; j++) { f = p[j]; if (c && f.level > c) break; a.currentTarget = f.elem, a.data = f.handleObj.data, a.handleObj = f.handleObj, o = f.handleObj.origHandler.apply(f.elem, arguments); if (o === !1 || a.isPropagationStopped()) { c = f.level, o === !1 && (b = !1); if (a.isImmediatePropagationStopped()) break } } return b } } function E(a, c, e) { var f = d.extend({}, e[0]); f.type = a, f.originalEvent = {}, f.liveFired = b, d.event.handle.call(c, f), f.isDefaultPrevented() && e[0].preventDefault() } function y() { return !0 } function x() { return !1 } function i(a) { for (var b in a) if (b !== "toJSON") return !1; return !0 } function h(a, c, e) { if (e === b && a.nodeType === 1) { e = a.getAttribute("data-" + c); if (typeof e === "string") { try { e = e === "true" ? !0 : e === "false" ? !1 : e === "null" ? null : d.isNaN(e) ? g.test(e) ? d.parseJSON(e) : e : parseFloat(e) } catch (f) { } d.data(a, c, e) } else e = b } return e } var c = a.document, d = function () { function G() { if (!d.isReady) { try { c.documentElement.doScroll("left") } catch (a) { setTimeout(G, 1); return } d.ready() } } var d = function (a, b) { return new d.fn.init(a, b, g) }, e = a.jQuery, f = a.$, g, h = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, i = /\S/, j = /^\s+/, k = /\s+$/, l = /\d/, m = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, n = /^[\],:{}\s]*$/, o = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, p = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, q = /(?:^|:|,)(?:\s*\[)+/g, r = /(webkit)[ \/]([\w.]+)/, s = /(opera)(?:.*version)?[ \/]([\w.]+)/, t = /(msie) ([\w.]+)/, u = /(mozilla)(?:.*? rv:([\w.]+))?/, v = navigator.userAgent, w, x, y, z = Object.prototype.toString, A = Object.prototype.hasOwnProperty, B = Array.prototype.push, C = Array.prototype.slice, D = String.prototype.trim, E = Array.prototype.indexOf, F = {}; d.fn = d.prototype = { constructor: d, init: function (a, e, f) { var g, i, j, k; if (!a) return this; if (a.nodeType) { this.context = this[0] = a, this.length = 1; return this } if (a === "body" && !e && c.body) { this.context = c, this[0] = c.body, this.selector = "body", this.length = 1; return this } if (typeof a === "string") { g = h.exec(a); if (!g || !g[1] && e) return !e || e.jquery ? (e || f).find(a) : this.constructor(e).find(a); if (g[1]) { e = e instanceof d ? e[0] : e, k = e ? e.ownerDocument || e : c, j = m.exec(a), j ? d.isPlainObject(e) ? (a = [c.createElement(j[1])], d.fn.attr.call(a, e, !0)) : a = [k.createElement(j[1])] : (j = d.buildFragment([g[1]], [k]), a = (j.cacheable ? d.clone(j.fragment) : j.fragment).childNodes); return d.merge(this, a) } i = c.getElementById(g[2]); if (i && i.parentNode) { if (i.id !== g[2]) return f.find(a); this.length = 1, this[0] = i } this.context = c, this.selector = a; return this } if (d.isFunction(a)) return f.ready(a); a.selector !== b && (this.selector = a.selector, this.context = a.context); return d.makeArray(a, this) }, selector: "", jquery: "1.5.2", length: 0, size: function () { return this.length }, toArray: function () { return C.call(this, 0) }, get: function (a) { return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a] }, pushStack: function (a, b, c) { var e = this.constructor(); d.isArray(a) ? B.apply(e, a) : d.merge(e, a), e.prevObject = this, e.context = this.context, b === "find" ? e.selector = this.selector + (this.selector ? " " : "") + c : b && (e.selector = this.selector + "." + b + "(" + c + ")"); return e }, each: function (a, b) { return d.each(this, a, b) }, ready: function (a) { d.bindReady(), x.done(a); return this }, eq: function (a) { return a === -1 ? this.slice(a) : this.slice(a, +a + 1) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, slice: function () { return this.pushStack(C.apply(this, arguments), "slice", C.call(arguments).join(",")) }, map: function (a) { return this.pushStack(d.map(this, function (b, c) { return a.call(b, c, b) })) }, end: function () { return this.prevObject || this.constructor(null) }, push: B, sort: [].sort, splice: [].splice }, d.fn.init.prototype = d.fn, d.extend = d.fn.extend = function () { var a, c, e, f, g, h, i = arguments[0] || {}, j = 1, k = arguments.length, l = !1; typeof i === "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i !== "object" && !d.isFunction(i) && (i = {}), k === j && (i = this, --j); for (; j < k; j++) if ((a = arguments[j]) != null) for (c in a) { e = i[c], f = a[c]; if (i === f) continue; l && f && (d.isPlainObject(f) || (g = d.isArray(f))) ? (g ? (g = !1, h = e && d.isArray(e) ? e : []) : h = e && d.isPlainObject(e) ? e : {}, i[c] = d.extend(l, h, f)) : f !== b && (i[c] = f) } return i }, d.extend({ noConflict: function (b) { a.$ = f, b && (a.jQuery = e); return d }, isReady: !1, readyWait: 1, ready: function (a) { a === !0 && d.readyWait--; if (!d.readyWait || a !== !0 && !d.isReady) { if (!c.body) return setTimeout(d.ready, 1); d.isReady = !0; if (a !== !0 && --d.readyWait > 0) return; x.resolveWith(c, [d]), d.fn.trigger && d(c).trigger("ready").unbind("ready") } }, bindReady: function () { if (!x) { x = d._Deferred(); if (c.readyState === "complete") return setTimeout(d.ready, 1); if (c.addEventListener) c.addEventListener("DOMContentLoaded", y, !1), a.addEventListener("load", d.ready, !1); else if (c.attachEvent) { c.attachEvent("onreadystatechange", y), a.attachEvent("onload", d.ready); var b = !1; try { b = a.frameElement == null } catch (e) { } c.documentElement.doScroll && b && G() } } }, isFunction: function (a) { return d.type(a) === "function" }, isArray: Array.isArray || function (a) { return d.type(a) === "array" }, isWindow: function (a) { return a && typeof a === "object" && "setInterval" in a }, isNaN: function (a) { return a == null || !l.test(a) || isNaN(a) }, type: function (a) { return a == null ? String(a) : F[z.call(a)] || "object" }, isPlainObject: function (a) { if (!a || d.type(a) !== "object" || a.nodeType || d.isWindow(a)) return !1; if (a.constructor && !A.call(a, "constructor") && !A.call(a.constructor.prototype, "isPrototypeOf")) return !1; var c; for (c in a) { } return c === b || A.call(a, c) }, isEmptyObject: function (a) { for (var b in a) return !1; return !0 }, error: function (a) { throw a }, parseJSON: function (b) { if (typeof b !== "string" || !b) return null; b = d.trim(b); if (n.test(b.replace(o, "@").replace(p, "]").replace(q, ""))) return a.JSON && a.JSON.parse ? a.JSON.parse(b) : (new Function("return " + b))(); d.error("Invalid JSON: " + b) }, parseXML: function (b, c, e) { a.DOMParser ? (e = new DOMParser, c = e.parseFromString(b, "text/xml")) : (c = new ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b)), e = c.documentElement, (!e || !e.nodeName || e.nodeName === "parsererror") && d.error("Invalid XML: " + b); return c }, noop: function () { }, globalEval: function (a) { if (a && i.test(a)) { var b = c.head || c.getElementsByTagName("head")[0] || c.documentElement, e = c.createElement("script"); d.support.scriptEval() ? e.appendChild(c.createTextNode(a)) : e.text = a, b.insertBefore(e, b.firstChild), b.removeChild(e) } }, nodeName: function (a, b) { return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase() }, each: function (a, c, e) { var f, g = 0, h = a.length, i = h === b || d.isFunction(a); if (e) { if (i) { for (f in a) if (c.apply(a[f], e) === !1) break } else for (; g < h; ) if (c.apply(a[g++], e) === !1) break } else if (i) { for (f in a) if (c.call(a[f], f, a[f]) === !1) break } else for (var j = a[0]; g < h && c.call(j, g, j) !== !1; j = a[++g]) { } return a }, trim: D ? function (a) { return a == null ? "" : D.call(a) } : function (a) { return a == null ? "" : (a + "").replace(j, "").replace(k, "") }, makeArray: function (a, b) { var c = b || []; if (a != null) { var e = d.type(a); a.length == null || e === "string" || e === "function" || e === "regexp" || d.isWindow(a) ? B.call(c, a) : d.merge(c, a) } return c }, inArray: function (a, b) { if (b.indexOf) return b.indexOf(a); for (var c = 0, d = b.length; c < d; c++) if (b[c] === a) return c; return -1 }, merge: function (a, c) { var d = a.length, e = 0; if (typeof c.length === "number") for (var f = c.length; e < f; e++) a[d++] = c[e]; else while (c[e] !== b) a[d++] = c[e++]; a.length = d; return a }, grep: function (a, b, c) { var d = [], e; c = !!c; for (var f = 0, g = a.length; f < g; f++) e = !!b(a[f], f), c !== e && d.push(a[f]); return d }, map: function (a, b, c) { var d = [], e; for (var f = 0, g = a.length; f < g; f++) e = b(a[f], f, c), e != null && (d[d.length] = e); return d.concat.apply([], d) }, guid: 1, proxy: function (a, c, e) { arguments.length === 2 && (typeof c === "string" ? (e = a, a = e[c], c = b) : c && !d.isFunction(c) && (e = c, c = b)), !c && a && (c = function () { return a.apply(e || this, arguments) }), a && (c.guid = a.guid = a.guid || c.guid || d.guid++); return c }, access: function (a, c, e, f, g, h) { var i = a.length; if (typeof c === "object") { for (var j in c) d.access(a, j, c[j], f, g, e); return a } if (e !== b) { f = !h && f && d.isFunction(e); for (var k = 0; k < i; k++) g(a[k], c, f ? e.call(a[k], k, g(a[k], c)) : e, h); return a } return i ? g(a[0], c) : b }, now: function () { return (new Date).getTime() }, uaMatch: function (a) { a = a.toLowerCase(); var b = r.exec(a) || s.exec(a) || t.exec(a) || a.indexOf("compatible") < 0 && u.exec(a) || []; return { browser: b[1] || "", version: b[2] || "0"} }, sub: function () { function a(b, c) { return new a.fn.init(b, c) } d.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.subclass = this.subclass, a.fn.init = function b(b, c) { c && c instanceof d && !(c instanceof a) && (c = a(c)); return d.fn.init.call(this, b, c, e) }, a.fn.init.prototype = a.fn; var e = a(c); return a }, browser: {} }), d.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (a, b) { F["[object " + b + "]"] = b.toLowerCase() }), w = d.uaMatch(v), w.browser && (d.browser[w.browser] = !0, d.browser.version = w.version), d.browser.webkit && (d.browser.safari = !0), E && (d.inArray = function (a, b) { return E.call(b, a) }), i.test(" ") && (j = /^[\s\xA0]+/, k = /[\s\xA0]+$/), g = d(c), c.addEventListener ? y = function () { c.removeEventListener("DOMContentLoaded", y, !1), d.ready() } : c.attachEvent && (y = function () { c.readyState === "complete" && (c.detachEvent("onreadystatechange", y), d.ready()) }); return d } (), e = "then done fail isResolved isRejected promise".split(" "), f = [].slice; d.extend({ _Deferred: function () { var a = [], b, c, e, f = { done: function () { if (!e) { var c = arguments, g, h, i, j, k; b && (k = b, b = 0); for (g = 0, h = c.length; g < h; g++) i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i); k && f.resolveWith(k[0], k[1]) } return this }, resolveWith: function (d, f) { if (!e && !b && !c) { f = f || [], c = 1; try { while (a[0]) a.shift().apply(d, f) } finally { b = [d, f], c = 0 } } return this }, resolve: function () { f.resolveWith(this, arguments); return this }, isResolved: function () { return c || b }, cancel: function () { e = 1, a = []; return this } }; return f }, Deferred: function (a) { var b = d._Deferred(), c = d._Deferred(), f; d.extend(b, { then: function (a, c) { b.done(a).fail(c); return this }, fail: c.done, rejectWith: c.resolveWith, reject: c.resolve, isRejected: c.isResolved, promise: function (a) { if (a == null) { if (f) return f; f = a = {} } var c = e.length; while (c--) a[e[c]] = b[e[c]]; return a } }), b.done(c.cancel).fail(b.cancel), delete b.cancel, a && a.call(b, b); return b }, when: function (a) { function i(a) { return function (c) { b[a] = arguments.length > 1 ? f.call(arguments, 0) : c, --g || h.resolveWith(h, f.call(b, 0)) } } var b = arguments, c = 0, e = b.length, g = e, h = e <= 1 && a && d.isFunction(a.promise) ? a : d.Deferred(); if (e > 1) { for (; c < e; c++) b[c] && d.isFunction(b[c].promise) ? b[c].promise().then(i(c), h.reject) : --g; g || h.resolveWith(h, b) } else h !== a && h.resolveWith(h, e ? [a] : []); return h.promise() } }), function () { d.support = {}; var b = c.createElement("div"); b.style.display = "none", b.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; var e = b.getElementsByTagName("*"), f = b.getElementsByTagName("a")[0], g = c.createElement("select"), h = g.appendChild(c.createElement("option")), i = b.getElementsByTagName("input")[0]; if (e && e.length && f) { d.support = { leadingWhitespace: b.firstChild.nodeType === 3, tbody: !b.getElementsByTagName("tbody").length, htmlSerialize: !!b.getElementsByTagName("link").length, style: /red/.test(f.getAttribute("style")), hrefNormalized: f.getAttribute("href") === "/a", opacity: /^0.55$/.test(f.style.opacity), cssFloat: !!f.style.cssFloat, checkOn: i.value === "on", optSelected: h.selected, deleteExpando: !0, optDisabled: !1, checkClone: !1, noCloneEvent: !0, noCloneChecked: !0, boxModel: null, inlineBlockNeedsLayout: !1, shrinkWrapBlocks: !1, reliableHiddenOffsets: !0, reliableMarginRight: !0 }, i.checked = !0, d.support.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, d.support.optDisabled = !h.disabled; var j = null; d.support.scriptEval = function () { if (j === null) { var b = c.documentElement, e = c.createElement("script"), f = "script" + d.now(); try { e.appendChild(c.createTextNode("window." + f + "=1;")) } catch (g) { } b.insertBefore(e, b.firstChild), a[f] ? (j = !0, delete a[f]) : j = !1, b.removeChild(e) } return j }; try { delete b.test } catch (k) { d.support.deleteExpando = !1 } !b.addEventListener && b.attachEvent && b.fireEvent && (b.attachEvent("onclick", function l() { d.support.noCloneEvent = !1, b.detachEvent("onclick", l) }), b.cloneNode(!0).fireEvent("onclick")), b = c.createElement("div"), b.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>"; var m = c.createDocumentFragment(); m.appendChild(b.firstChild), d.support.checkClone = m.cloneNode(!0).cloneNode(!0).lastChild.checked, d(function () { var a = c.createElement("div"), b = c.getElementsByTagName("body")[0]; if (b) { a.style.width = a.style.paddingLeft = "1px", b.appendChild(a), d.boxModel = d.support.boxModel = a.offsetWidth === 2, "zoom" in a.style && (a.style.display = "inline", a.style.zoom = 1, d.support.inlineBlockNeedsLayout = a.offsetWidth === 2, a.style.display = "", a.innerHTML = "<div style='width:4px;'></div>", d.support.shrinkWrapBlocks = a.offsetWidth !== 2), a.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>"; var e = a.getElementsByTagName("td"); d.support.reliableHiddenOffsets = e[0].offsetHeight === 0, e[0].style.display = "", e[1].style.display = "none", d.support.reliableHiddenOffsets = d.support.reliableHiddenOffsets && e[0].offsetHeight === 0, a.innerHTML = "", c.defaultView && c.defaultView.getComputedStyle && (a.style.width = "1px", a.style.marginRight = "0", d.support.reliableMarginRight = (parseInt(c.defaultView.getComputedStyle(a, null).marginRight, 10) || 0) === 0), b.removeChild(a).style.display = "none", a = e = null } }); var n = function (a) { var b = c.createElement("div"); a = "on" + a; if (!b.attachEvent) return !0; var d = a in b; d || (b.setAttribute(a, "return;"), d = typeof b[a] === "function"); return d }; d.support.submitBubbles = n("submit"), d.support.changeBubbles = n("change"), b = e = f = null } } (); var g = /^(?:\{.*\}|\[.*\])$/; d.extend({ cache: {}, uuid: 0, expando: "jQuery" + (d.fn.jquery + Math.random()).replace(/\D/g, ""), noData: { embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0 }, hasData: function (a) { a = a.nodeType ? d.cache[a[d.expando]] : a[d.expando]; return !!a && !i(a) }, data: function (a, c, e, f) { if (d.acceptData(a)) { var g = d.expando, h = typeof c === "string", i, j = a.nodeType, k = j ? d.cache : a, l = j ? a[d.expando] : a[d.expando] && d.expando; if ((!l || f && l && !k[l][g]) && h && e === b) return; l || (j ? a[d.expando] = l = ++d.uuid : l = d.expando), k[l] || (k[l] = {}, j || (k[l].toJSON = d.noop)); if (typeof c === "object" || typeof c === "function") f ? k[l][g] = d.extend(k[l][g], c) : k[l] = d.extend(k[l], c); i = k[l], f && (i[g] || (i[g] = {}), i = i[g]), e !== b && (i[c] = e); if (c === "events" && !i[c]) return i[g] && i[g].events; return h ? i[c] : i } }, removeData: function (b, c, e) { if (d.acceptData(b)) { var f = d.expando, g = b.nodeType, h = g ? d.cache : b, j = g ? b[d.expando] : d.expando; if (!h[j]) return; if (c) { var k = e ? h[j][f] : h[j]; if (k) { delete k[c]; if (!i(k)) return } } if (e) { delete h[j][f]; if (!i(h[j])) return } var l = h[j][f]; d.support.deleteExpando || h != a ? delete h[j] : h[j] = null, l ? (h[j] = {}, g || (h[j].toJSON = d.noop), h[j][f] = l) : g && (d.support.deleteExpando ? delete b[d.expando] : b.removeAttribute ? b.removeAttribute(d.expando) : b[d.expando] = null) } }, _data: function (a, b, c) { return d.data(a, b, c, !0) }, acceptData: function (a) { if (a.nodeName) { var b = d.noData[a.nodeName.toLowerCase()]; if (b) return b !== !0 && a.getAttribute("classid") === b } return !0 } }), d.fn.extend({ data: function (a, c) { var e = null; if (typeof a === "undefined") { if (this.length) { e = d.data(this[0]); if (this[0].nodeType === 1) { var f = this[0].attributes, g; for (var i = 0, j = f.length; i < j; i++) g = f[i].name, g.indexOf("data-") === 0 && (g = g.substr(5), h(this[0], g, e[g])) } } return e } if (typeof a === "object") return this.each(function () { d.data(this, a) }); var k = a.split("."); k[1] = k[1] ? "." + k[1] : ""; if (c === b) { e = this.triggerHandler("getData" + k[1] + "!", [k[0]]), e === b && this.length && (e = d.data(this[0], a), e = h(this[0], a, e)); return e === b && k[1] ? this.data(k[0]) : e } return this.each(function () { var b = d(this), e = [k[0], c]; b.triggerHandler("setData" + k[1] + "!", e), d.data(this, a, c), b.triggerHandler("changeData" + k[1] + "!", e) }) }, removeData: function (a) { return this.each(function () { d.removeData(this, a) }) } }), d.extend({ queue: function (a, b, c) { if (a) { b = (b || "fx") + "queue"; var e = d._data(a, b); if (!c) return e || []; !e || d.isArray(c) ? e = d._data(a, b, d.makeArray(c)) : e.push(c); return e } }, dequeue: function (a, b) { b = b || "fx"; var c = d.queue(a, b), e = c.shift(); e === "inprogress" && (e = c.shift()), e && (b === "fx" && c.unshift("inprogress"), e.call(a, function () { d.dequeue(a, b) })), c.length || d.removeData(a, b + "queue", !0) } }), d.fn.extend({ queue: function (a, c) { typeof a !== "string" && (c = a, a = "fx"); if (c === b) return d.queue(this[0], a); return this.each(function (b) { var e = d.queue(this, a, c); a === "fx" && e[0] !== "inprogress" && d.dequeue(this, a) }) }, dequeue: function (a) { return this.each(function () { d.dequeue(this, a) }) }, delay: function (a, b) { a = d.fx ? d.fx.speeds[a] || a : a, b = b || "fx"; return this.queue(b, function () { var c = this; setTimeout(function () { d.dequeue(c, b) }, a) }) }, clearQueue: function (a) { return this.queue(a || "fx", []) } }); var j = /[\n\t\r]/g, k = /\s+/, l = /\r/g, m = /^(?:href|src|style)$/, n = /^(?:button|input)$/i, o = /^(?:button|input|object|select|textarea)$/i, p = /^a(?:rea)?$/i, q = /^(?:radio|checkbox)$/i; d.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" }, d.fn.extend({ attr: function (a, b) { return d.access(this, a, b, !0, d.attr) }, removeAttr: function (a, b) { return this.each(function () { d.attr(this, a, ""), this.nodeType === 1 && this.removeAttribute(a) }) }, addClass: function (a) { if (d.isFunction(a)) return this.each(function (b) { var c = d(this); c.addClass(a.call(this, b, c.attr("class"))) }); if (a && typeof a === "string") { var b = (a || "").split(k); for (var c = 0, e = this.length; c < e; c++) { var f = this[c]; if (f.nodeType === 1) if (f.className) { var g = " " + f.className + " ", h = f.className; for (var i = 0, j = b.length; i < j; i++) g.indexOf(" " + b[i] + " ") < 0 && (h += " " + b[i]); f.className = d.trim(h) } else f.className = a } } return this }, removeClass: function (a) { if (d.isFunction(a)) return this.each(function (b) { var c = d(this); c.removeClass(a.call(this, b, c.attr("class"))) }); if (a && typeof a === "string" || a === b) { var c = (a || "").split(k); for (var e = 0, f = this.length; e < f; e++) { var g = this[e]; if (g.nodeType === 1 && g.className) if (a) { var h = (" " + g.className + " ").replace(j, " "); for (var i = 0, l = c.length; i < l; i++) h = h.replace(" " + c[i] + " ", " "); g.className = d.trim(h) } else g.className = "" } } return this }, toggleClass: function (a, b) { var c = typeof a, e = typeof b === "boolean"; if (d.isFunction(a)) return this.each(function (c) { var e = d(this); e.toggleClass(a.call(this, c, e.attr("class"), b), b) }); return this.each(function () { if (c === "string") { var f, g = 0, h = d(this), i = b, j = a.split(k); while (f = j[g++]) i = e ? i : !h.hasClass(f), h[i ? "addClass" : "removeClass"](f) } else if (c === "undefined" || c === "boolean") this.className && d._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : d._data(this, "__className__") || "" }) }, hasClass: function (a) { var b = " " + a + " "; for (var c = 0, d = this.length; c < d; c++) if ((" " + this[c].className + " ").replace(j, " ").indexOf(b) > -1) return !0; return !1 }, val: function (a) { if (!arguments.length) { var c = this[0]; if (c) { if (d.nodeName(c, "option")) { var e = c.attributes.value; return !e || e.specified ? c.value : c.text } if (d.nodeName(c, "select")) { var f = c.selectedIndex, g = [], h = c.options, i = c.type === "select-one"; if (f < 0) return null; for (var j = i ? f : 0, k = i ? f + 1 : h.length; j < k; j++) { var m = h[j]; if (m.selected && (d.support.optDisabled ? !m.disabled : m.getAttribute("disabled") === null) && (!m.parentNode.disabled || !d.nodeName(m.parentNode, "optgroup"))) { a = d(m).val(); if (i) return a; g.push(a) } } if (i && !g.length && h.length) return d(h[f]).val(); return g } if (q.test(c.type) && !d.support.checkOn) return c.getAttribute("value") === null ? "on" : c.value; return (c.value || "").replace(l, "") } return b } var n = d.isFunction(a); return this.each(function (b) { var c = d(this), e = a; if (this.nodeType === 1) { n && (e = a.call(this, b, c.val())), e == null ? e = "" : typeof e === "number" ? e += "" : d.isArray(e) && (e = d.map(e, function (a) { return a == null ? "" : a + "" })); if (d.isArray(e) && q.test(this.type)) this.checked = d.inArray(c.val(), e) >= 0; else if (d.nodeName(this, "select")) { var f = d.makeArray(e); d("option", this).each(function () { this.selected = d.inArray(d(this).val(), f) >= 0 }), f.length || (this.selectedIndex = -1) } else this.value = e } }) } }), d.extend({ attrFn: { val: !0, css: !0, html: !0, text: !0, data: !0, width: !0, height: !0, offset: !0 }, attr: function (a, c, e, f) { if (!a || a.nodeType === 3 || a.nodeType === 8 || a.nodeType === 2) return b; if (f && c in d.attrFn) return d(a)[c](e); var g = a.nodeType !== 1 || !d.isXMLDoc(a), h = e !== b; c = g && d.props[c] || c; if (a.nodeType === 1) { var i = m.test(c); if (c === "selected" && !d.support.optSelected) { var j = a.parentNode; j && (j.selectedIndex, j.parentNode && j.parentNode.selectedIndex) } if ((c in a || a[c] !== b) && g && !i) { h && (c === "type" && n.test(a.nodeName) && a.parentNode && d.error("type property can't be changed"), e === null ? a.nodeType === 1 && a.removeAttribute(c) : a[c] = e); if (d.nodeName(a, "form") && a.getAttributeNode(c)) return a.getAttributeNode(c).nodeValue; if (c === "tabIndex") { var k = a.getAttributeNode("tabIndex"); return k && k.specified ? k.value : o.test(a.nodeName) || p.test(a.nodeName) && a.href ? 0 : b } return a[c] } if (!d.support.style && g && c === "style") { h && (a.style.cssText = "" + e); return a.style.cssText } h && a.setAttribute(c, "" + e); if (!a.attributes[c] && (a.hasAttribute && !a.hasAttribute(c))) return b; var l = !d.support.hrefNormalized && g && i ? a.getAttribute(c, 2) : a.getAttribute(c); return l === null ? b : l } h && (a[c] = e); return a[c] } }); var r = /\.(.*)$/, s = /^(?:textarea|input|select)$/i, t = /\./g, u = / /g, v = /[^\w\s.|`]/g, w = function (a) { return a.replace(v, "\\$&") }; d.event = { add: function (c, e, f, g) { if (c.nodeType !== 3 && c.nodeType !== 8) { try { d.isWindow(c) && (c !== a && !c.frameElement) && (c = a) } catch (h) { } if (f === !1) f = x; else if (!f) return; var i, j; f.handler && (i = f, f = i.handler), f.guid || (f.guid = d.guid++); var k = d._data(c); if (!k) return; var l = k.events, m = k.handle; l || (k.events = l = {}), m || (k.handle = m = function (a) { return typeof d !== "undefined" && d.event.triggered !== a.type ? d.event.handle.apply(m.elem, arguments) : b }), m.elem = c, e = e.split(" "); var n, o = 0, p; while (n = e[o++]) { j = i ? d.extend({}, i) : { handler: f, data: g }, n.indexOf(".") > -1 ? (p = n.split("."), n = p.shift(), j.namespace = p.slice(0).sort().join(".")) : (p = [], j.namespace = ""), j.type = n, j.guid || (j.guid = f.guid); var q = l[n], r = d.event.special[n] || {}; if (!q) { q = l[n] = []; if (!r.setup || r.setup.call(c, g, p, m) === !1) c.addEventListener ? c.addEventListener(n, m, !1) : c.attachEvent && c.attachEvent("on" + n, m) } r.add && (r.add.call(c, j), j.handler.guid || (j.handler.guid = f.guid)), q.push(j), d.event.global[n] = !0 } c = null } }, global: {}, remove: function (a, c, e, f) { if (a.nodeType !== 3 && a.nodeType !== 8) { e === !1 && (e = x); var g, h, i, j, k = 0, l, m, n, o, p, q, r, s = d.hasData(a) && d._data(a), t = s && s.events; if (!s || !t) return; c && c.type && (e = c.handler, c = c.type); if (!c || typeof c === "string" && c.charAt(0) === ".") { c = c || ""; for (h in t) d.event.remove(a, h + c); return } c = c.split(" "); while (h = c[k++]) { r = h, q = null, l = h.indexOf(".") < 0, m = [], l || (m = h.split("."), h = m.shift(), n = new RegExp("(^|\\.)" + d.map(m.slice(0).sort(), w).join("\\.(?:.*\\.)?") + "(\\.|$)")), p = t[h]; if (!p) continue; if (!e) { for (j = 0; j < p.length; j++) { q = p[j]; if (l || n.test(q.namespace)) d.event.remove(a, r, q.handler, j), p.splice(j--, 1) } continue } o = d.event.special[h] || {}; for (j = f || 0; j < p.length; j++) { q = p[j]; if (e.guid === q.guid) { if (l || n.test(q.namespace)) f == null && p.splice(j--, 1), o.remove && o.remove.call(a, q); if (f != null) break } } if (p.length === 0 || f != null && p.length === 1) (!o.teardown || o.teardown.call(a, m) === !1) && d.removeEvent(a, h, s.handle), g = null, delete t[h] } if (d.isEmptyObject(t)) { var u = s.handle; u && (u.elem = null), delete s.events, delete s.handle, d.isEmptyObject(s) && d.removeData(a, b, !0) } } }, trigger: function (a, c, e) { var f = a.type || a, g = arguments[3]; if (!g) { a = typeof a === "object" ? a[d.expando] ? a : d.extend(d.Event(f), a) : d.Event(f), f.indexOf("!") >= 0 && (a.type = f = f.slice(0, -1), a.exclusive = !0), e || (a.stopPropagation(), d.event.global[f] && d.each(d.cache, function () { var b = d.expando, e = this[b]; e && e.events && e.events[f] && d.event.trigger(a, c, e.handle.elem) })); if (!e || e.nodeType === 3 || e.nodeType === 8) return b; a.result = b, a.target = e, c = d.makeArray(c), c.unshift(a) } a.currentTarget = e; var h = d._data(e, "handle"); h && h.apply(e, c); var i = e.parentNode || e.ownerDocument; try { e && e.nodeName && d.noData[e.nodeName.toLowerCase()] || e["on" + f] && e["on" + f].apply(e, c) === !1 && (a.result = !1, a.preventDefault()) } catch (j) { } if (!a.isPropagationStopped() && i) d.event.trigger(a, c, i, !0); else if (!a.isDefaultPrevented()) { var k, l = a.target, m = f.replace(r, ""), n = d.nodeName(l, "a") && m === "click", o = d.event.special[m] || {}; if ((!o._default || o._default.call(e, a) === !1) && !n && !(l && l.nodeName && d.noData[l.nodeName.toLowerCase()])) { try { l[m] && (k = l["on" + m], k && (l["on" + m] = null), d.event.triggered = a.type, l[m]()) } catch (p) { } k && (l["on" + m] = k), d.event.triggered = b } } }, handle: function (c) { var e, f, g, h, i, j = [], k = d.makeArray(arguments); c = k[0] = d.event.fix(c || a.event), c.currentTarget = this, e = c.type.indexOf(".") < 0 && !c.exclusive, e || (g = c.type.split("."), c.type = g.shift(), j = g.slice(0).sort(), h = new RegExp("(^|\\.)" + j.join("\\.(?:.*\\.)?") + "(\\.|$)")), c.namespace = c.namespace || j.join("."), i = d._data(this, "events"), f = (i || {})[c.type]; if (i && f) { f = f.slice(0); for (var l = 0, m = f.length; l < m; l++) { var n = f[l]; if (e || h.test(n.namespace)) { c.handler = n.handler, c.data = n.data, c.handleObj = n; var o = n.handler.apply(this, k); o !== b && (c.result = o, o === !1 && (c.preventDefault(), c.stopPropagation())); if (c.isImmediatePropagationStopped()) break } } } return c.result }, props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), fix: function (a) { if (a[d.expando]) return a; var e = a; a = d.Event(e); for (var f = this.props.length, g; f; ) g = this.props[--f], a[g] = e[g]; a.target || (a.target = a.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), !a.relatedTarget && a.fromElement && (a.relatedTarget = a.fromElement === a.target ? a.toElement : a.fromElement); if (a.pageX == null && a.clientX != null) { var h = c.documentElement, i = c.body; a.pageX = a.clientX + (h && h.scrollLeft || i && i.scrollLeft || 0) - (h && h.clientLeft || i && i.clientLeft || 0), a.pageY = a.clientY + (h && h.scrollTop || i && i.scrollTop || 0) - (h && h.clientTop || i && i.clientTop || 0) } a.which == null && (a.charCode != null || a.keyCode != null) && (a.which = a.charCode != null ? a.charCode : a.keyCode), !a.metaKey && a.ctrlKey && (a.metaKey = a.ctrlKey), !a.which && a.button !== b && (a.which = a.button & 1 ? 1 : a.button & 2 ? 3 : a.button & 4 ? 2 : 0); return a }, guid: 1e8, proxy: d.proxy, special: { ready: { setup: d.bindReady, teardown: d.noop }, live: { add: function (a) { d.event.add(this, H(a.origType, a.selector), d.extend({}, a, { handler: G, guid: a.handler.guid })) }, remove: function (a) { d.event.remove(this, H(a.origType, a.selector), a) } }, beforeunload: { setup: function (a, b, c) { d.isWindow(this) && (this.onbeforeunload = c) }, teardown: function (a, b) { this.onbeforeunload === b && (this.onbeforeunload = null) } }} }, d.removeEvent = c.removeEventListener ? function (a, b, c) { a.removeEventListener && a.removeEventListener(b, c, !1) } : function (a, b, c) { a.detachEvent && a.detachEvent("on" + b, c) }, d.Event = function (a) { if (!this.preventDefault) return new d.Event(a); a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? y : x) : this.type = a, this.timeStamp = d.now(), this[d.expando] = !0 }, d.Event.prototype = { preventDefault: function () { this.isDefaultPrevented = y; var a = this.originalEvent; a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1) }, stopPropagation: function () { this.isPropagationStopped = y; var a = this.originalEvent; a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0) }, stopImmediatePropagation: function () { this.isImmediatePropagationStopped = y, this.stopPropagation() }, isDefaultPrevented: x, isPropagationStopped: x, isImmediatePropagationStopped: x }; var z = function (a) { var b = a.relatedTarget; try { if (b && b !== c && !b.parentNode) return; while (b && b !== this) b = b.parentNode; b !== this && (a.type = a.data, d.event.handle.apply(this, arguments)) } catch (e) { } }, A = function (a) { a.type = a.data, d.event.handle.apply(this, arguments) }; d.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function (a, b) { d.event.special[a] = { setup: function (c) { d.event.add(this, b, c && c.selector ? A : z, a) }, teardown: function (a) { d.event.remove(this, b, a && a.selector ? A : z) } } }), d.support.submitBubbles || (d.event.special.submit = { setup: function (a, b) { if (this.nodeName && this.nodeName.toLowerCase() !== "form") d.event.add(this, "click.specialSubmit", function (a) { var b = a.target, c = b.type; (c === "submit" || c === "image") && d(b).closest("form").length && E("submit", this, arguments) }), d.event.add(this, "keypress.specialSubmit", function (a) { var b = a.target, c = b.type; (c === "text" || c === "password") && d(b).closest("form").length && a.keyCode === 13 && E("submit", this, arguments) }); else return !1 }, teardown: function (a) { d.event.remove(this, ".specialSubmit") } }); if (!d.support.changeBubbles) { var B, C = function (a) { var b = a.type, c = a.value; b === "radio" || b === "checkbox" ? c = a.checked : b === "select-multiple" ? c = a.selectedIndex > -1 ? d.map(a.options, function (a) { return a.selected }).join("-") : "" : a.nodeName.toLowerCase() === "select" && (c = a.selectedIndex); return c }, D = function D(a) { var c = a.target, e, f; if (s.test(c.nodeName) && !c.readOnly) { e = d._data(c, "_change_data"), f = C(c), (a.type !== "focusout" || c.type !== "radio") && d._data(c, "_change_data", f); if (e === b || f === e) return; if (e != null || f) a.type = "change", a.liveFired = b, d.event.trigger(a, arguments[1], c) } }; d.event.special.change = { filters: { focusout: D, beforedeactivate: D, click: function (a) { var b = a.target, c = b.type; (c === "radio" || c === "checkbox" || b.nodeName.toLowerCase() === "select") && D.call(this, a) }, keydown: function (a) { var b = a.target, c = b.type; (a.keyCode === 13 && b.nodeName.toLowerCase() !== "textarea" || a.keyCode === 32 && (c === "checkbox" || c === "radio") || c === "select-multiple") && D.call(this, a) }, beforeactivate: function (a) { var b = a.target; d._data(b, "_change_data", C(b)) } }, setup: function (a, b) { if (this.type === "file") return !1; for (var c in B) d.event.add(this, c + ".specialChange", B[c]); return s.test(this.nodeName) }, teardown: function (a) { d.event.remove(this, ".specialChange"); return s.test(this.nodeName) } }, B = d.event.special.change.filters, B.focus = B.beforeactivate } c.addEventListener && d.each({ focus: "focusin", blur: "focusout" }, function (a, b) { function f(a) { var c = d.event.fix(a); c.type = b, c.originalEvent = {}, d.event.trigger(c, null, c.target), c.isDefaultPrevented() && a.preventDefault() } var e = 0; d.event.special[b] = { setup: function () { e++ === 0 && c.addEventListener(a, f, !0) }, teardown: function () { --e === 0 && c.removeEventListener(a, f, !0) } } }), d.each(["bind", "one"], function (a, c) { d.fn[c] = function (a, e, f) { if (typeof a === "object") { for (var g in a) this[c](g, e, a[g], f); return this } if (d.isFunction(e) || e === !1) f = e, e = b; var h = c === "one" ? d.proxy(f, function (a) { d(this).unbind(a, h); return f.apply(this, arguments) }) : f; if (a === "unload" && c !== "one") this.one(a, e, f); else for (var i = 0, j = this.length; i < j; i++) d.event.add(this[i], a, h, e); return this } }), d.fn.extend({ unbind: function (a, b) { if (typeof a !== "object" || a.preventDefault) for (var e = 0, f = this.length; e < f; e++) d.event.remove(this[e], a, b); else for (var c in a) this.unbind(c, a[c]); return this }, delegate: function (a, b, c, d) { return this.live(b, c, d, a) }, undelegate: function (a, b, c) { return arguments.length === 0 ? this.unbind("live") : this.die(b, null, c, a) }, trigger: function (a, b) { return this.each(function () { d.event.trigger(a, b, this) }) }, triggerHandler: function (a, b) { if (this[0]) { var c = d.Event(a); c.preventDefault(), c.stopPropagation(), d.event.trigger(c, b, this[0]); return c.result } }, toggle: function (a) { var b = arguments, c = 1; while (c < b.length) d.proxy(a, b[c++]); return this.click(d.proxy(a, function (e) { var f = (d._data(this, "lastToggle" + a.guid) || 0) % c; d._data(this, "lastToggle" + a.guid, f + 1), e.preventDefault(); return b[f].apply(this, arguments) || !1 })) }, hover: function (a, b) { return this.mouseenter(a).mouseleave(b || a) } }); var F = { focus: "focusin", blur: "focusout", mouseenter: "mouseover", mouseleave: "mouseout" }; d.each(["live", "die"], function (a, c) { d.fn[c] = function (a, e, f, g) { var h, i = 0, j, k, l, m = g || this.selector, n = g ? this : d(this.context); if (typeof a === "object" && !a.preventDefault) { for (var o in a) n[c](o, e, a[o], m); return this } d.isFunction(e) && (f = e, e = b), a = (a || "").split(" "); while ((h = a[i++]) != null) { j = r.exec(h), k = "", j && (k = j[0], h = h.replace(r, "")); if (h === "hover") { a.push("mouseenter" + k, "mouseleave" + k); continue } l = h, h === "focus" || h === "blur" ? (a.push(F[h] + k), h = h + k) : h = (F[h] || h) + k; if (c === "live") for (var p = 0, q = n.length; p < q; p++) d.event.add(n[p], "live." + H(h, m), { data: e, selector: m, handler: f, origType: h, origHandler: f, preType: l }); else n.unbind("live." + H(h, m), f) } return this } }), d.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), function (a, b) { d.fn[b] = function (a, c) { c == null && (c = a, a = null); return arguments.length > 0 ? this.bind(b, a, c) : this.trigger(b) }, d.attrFn && (d.attrFn[b] = !0) }), function () { function u(a, b, c, d, e, f) { for (var g = 0, h = d.length; g < h; g++) { var i = d[g]; if (i) { var j = !1; i = i[a]; while (i) { if (i.sizcache === c) { j = d[i.sizset]; break } if (i.nodeType === 1) { f || (i.sizcache = c, i.sizset = g); if (typeof b !== "string") { if (i === b) { j = !0; break } } else if (k.filter(b, [i]).length > 0) { j = i; break } } i = i[a] } d[g] = j } } } function t(a, b, c, d, e, f) { for (var g = 0, h = d.length; g < h; g++) { var i = d[g]; if (i) { var j = !1; i = i[a]; while (i) { if (i.sizcache === c) { j = d[i.sizset]; break } i.nodeType === 1 && !f && (i.sizcache = c, i.sizset = g); if (i.nodeName.toLowerCase() === b) { j = i; break } i = i[a] } d[g] = j } } } var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, e = 0, f = Object.prototype.toString, g = !1, h = !0, i = /\\/g, j = /\W/; [0, 0].sort(function () { h = !1; return 0 }); var k = function (b, d, e, g) { e = e || [], d = d || c; var h = d; if (d.nodeType !== 1 && d.nodeType !== 9) return []; if (!b || typeof b !== "string") return e; var i, j, n, o, q, r, s, t, u = !0, w = k.isXML(d), x = [], y = b; do { a.exec(""), i = a.exec(y); if (i) { y = i[3], x.push(i[1]); if (i[2]) { o = i[3]; break } } } while (i); if (x.length > 1 && m.exec(b)) if (x.length === 2 && l.relative[x[0]]) j = v(x[0] + x[1], d); else { j = l.relative[x[0]] ? [d] : k(x.shift(), d); while (x.length) b = x.shift(), l.relative[b] && (b += x.shift()), j = v(b, j) } else { !g && x.length > 1 && d.nodeType === 9 && !w && l.match.ID.test(x[0]) && !l.match.ID.test(x[x.length - 1]) && (q = k.find(x.shift(), d, w), d = q.expr ? k.filter(q.expr, q.set)[0] : q.set[0]); if (d) { q = g ? { expr: x.pop(), set: p(g)} : k.find(x.pop(), x.length === 1 && (x[0] === "~" || x[0] === "+") && d.parentNode ? d.parentNode : d, w), j = q.expr ? k.filter(q.expr, q.set) : q.set, x.length > 0 ? n = p(j) : u = !1; while (x.length) r = x.pop(), s = r, l.relative[r] ? s = x.pop() : r = "", s == null && (s = d), l.relative[r](n, s, w) } else n = x = [] } n || (n = j), n || k.error(r || b); if (f.call(n) === "[object Array]") if (u) if (d && d.nodeType === 1) for (t = 0; n[t] != null; t++) n[t] && (n[t] === !0 || n[t].nodeType === 1 && k.contains(d, n[t])) && e.push(j[t]); else for (t = 0; n[t] != null; t++) n[t] && n[t].nodeType === 1 && e.push(j[t]); else e.push.apply(e, n); else p(n, e); o && (k(o, h, e, g), k.uniqueSort(e)); return e }; k.uniqueSort = function (a) { if (r) { g = h, a.sort(r); if (g) for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1) } return a }, k.matches = function (a, b) { return k(a, null, null, b) }, k.matchesSelector = function (a, b) { return k(b, null, null, [a]).length > 0 }, k.find = function (a, b, c) { var d; if (!a) return []; for (var e = 0, f = l.order.length; e < f; e++) { var g, h = l.order[e]; if (g = l.leftMatch[h].exec(a)) { var j = g[1]; g.splice(1, 1); if (j.substr(j.length - 1) !== "\\") { g[1] = (g[1] || "").replace(i, ""), d = l.find[h](g, b, c); if (d != null) { a = a.replace(l.match[h], ""); break } } } } d || (d = typeof b.getElementsByTagName !== "undefined" ? b.getElementsByTagName("*") : []); return { set: d, expr: a} }, k.filter = function (a, c, d, e) { var f, g, h = a, i = [], j = c, m = c && c[0] && k.isXML(c[0]); while (a && c.length) { for (var n in l.filter) if ((f = l.leftMatch[n].exec(a)) != null && f[2]) { var o, p, q = l.filter[n], r = f[1]; g = !1, f.splice(1, 1); if (r.substr(r.length - 1) === "\\") continue; j === i && (i = []); if (l.preFilter[n]) { f = l.preFilter[n](f, j, d, i, e, m); if (f) { if (f === !0) continue } else g = o = !0 } if (f) for (var s = 0; (p = j[s]) != null; s++) if (p) { o = q(p, f, s, j); var t = e ^ !!o; d && o != null ? t ? g = !0 : j[s] = !1 : t && (i.push(p), g = !0) } if (o !== b) { d || (j = i), a = a.replace(l.match[n], ""); if (!g) return []; break } } if (a === h) if (g == null) k.error(a); else break; h = a } return j }, k.error = function (a) { throw "Syntax error, unrecognized expression: " + a }; var l = k.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, leftMatch: {}, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function (a) { return a.getAttribute("href") }, type: function (a) { return a.getAttribute("type") } }, relative: { "+": function (a, b) { var c = typeof b === "string", d = c && !j.test(b), e = c && !d; d && (b = b.toLowerCase()); for (var f = 0, g = a.length, h; f < g; f++) if (h = a[f]) { while ((h = h.previousSibling) && h.nodeType !== 1) { } a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b } e && k.filter(b, a, !0) }, ">": function (a, b) { var c, d = typeof b === "string", e = 0, f = a.length; if (d && !j.test(b)) { b = b.toLowerCase(); for (; e < f; e++) { c = a[e]; if (c) { var g = c.parentNode; a[e] = g.nodeName.toLowerCase() === b ? g : !1 } } } else { for (; e < f; e++) c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b); d && k.filter(b, a, !0) } }, "": function (a, b, c) { var d, f = e++, g = u; typeof b === "string" && !j.test(b) && (b = b.toLowerCase(), d = b, g = t), g("parentNode", b, f, a, d, c) }, "~": function (a, b, c) { var d, f = e++, g = u; typeof b === "string" && !j.test(b) && (b = b.toLowerCase(), d = b, g = t), g("previousSibling", b, f, a, d, c) } }, find: { ID: function (a, b, c) { if (typeof b.getElementById !== "undefined" && !c) { var d = b.getElementById(a[1]); return d && d.parentNode ? [d] : [] } }, NAME: function (a, b) { if (typeof b.getElementsByName !== "undefined") { var c = [], d = b.getElementsByName(a[1]); for (var e = 0, f = d.length; e < f; e++) d[e].getAttribute("name") === a[1] && c.push(d[e]); return c.length === 0 ? null : c } }, TAG: function (a, b) { if (typeof b.getElementsByTagName !== "undefined") return b.getElementsByTagName(a[1]) } }, preFilter: { CLASS: function (a, b, c, d, e, f) { a = " " + a[1].replace(i, "") + " "; if (f) return a; for (var g = 0, h; (h = b[g]) != null; g++) h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1)); return !1 }, ID: function (a) { return a[1].replace(i, "") }, TAG: function (a, b) { return a[1].replace(i, "").toLowerCase() }, CHILD: function (a) { if (a[1] === "nth") { a[2] || k.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, ""); var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]); a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0 } else a[2] && k.error(a[0]); a[0] = e++; return a }, ATTR: function (a, b, c, d, e, f) { var g = a[1] = a[1].replace(i, ""); !f && l.attrMap[g] && (a[1] = l.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(i, ""), a[2] === "~=" && (a[4] = " " + a[4] + " "); return a }, PSEUDO: function (b, c, d, e, f) { if (b[1] === "not") if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3])) b[3] = k(b[3], null, null, c); else { var g = k.filter(b[3], c, d, !0 ^ f); d || e.push.apply(e, g); return !1 } else if (l.match.POS.test(b[0]) || l.match.CHILD.test(b[0])) return !0; return b }, POS: function (a) { a.unshift(!0); return a } }, filters: { enabled: function (a) { return a.disabled === !1 && a.type !== "hidden" }, disabled: function (a) { return a.disabled === !0 }, checked: function (a) { return a.checked === !0 }, selected: function (a) { a.parentNode && a.parentNode.selectedIndex; return a.selected === !0 }, parent: function (a) { return !!a.firstChild }, empty: function (a) { return !a.firstChild }, has: function (a, b, c) { return !!k(c[3], a).length }, header: function (a) { return /h\d/i.test(a.nodeName) }, text: function (a) { var b = a.getAttribute("type"), c = a.type; return "text" === c && (b === c || b === null) }, radio: function (a) { return "radio" === a.type }, checkbox: function (a) { return "checkbox" === a.type }, file: function (a) { return "file" === a.type }, password: function (a) { return "password" === a.type }, submit: function (a) { return "submit" === a.type }, image: function (a) { return "image" === a.type }, reset: function (a) { return "reset" === a.type }, button: function (a) { return "button" === a.type || a.nodeName.toLowerCase() === "button" }, input: function (a) { return /input|select|textarea|button/i.test(a.nodeName) } }, setFilters: { first: function (a, b) { return b === 0 }, last: function (a, b, c, d) { return b === d.length - 1 }, even: function (a, b) { return b % 2 === 0 }, odd: function (a, b) { return b % 2 === 1 }, lt: function (a, b, c) { return b < c[3] - 0 }, gt: function (a, b, c) { return b > c[3] - 0 }, nth: function (a, b, c) { return c[3] - 0 === b }, eq: function (a, b, c) { return c[3] - 0 === b } }, filter: { PSEUDO: function (a, b, c, d) { var e = b[1], f = l.filters[e]; if (f) return f(a, c, b, d); if (e === "contains") return (a.textContent || a.innerText || k.getText([a]) || "").indexOf(b[3]) >= 0; if (e === "not") { var g = b[3]; for (var h = 0, i = g.length; h < i; h++) if (g[h] === a) return !1; return !0 } k.error(e) }, CHILD: function (a, b) { var c = b[1], d = a; switch (c) { case "only": case "first": while (d = d.previousSibling) if (d.nodeType === 1) return !1; if (c === "first") return !0; d = a; case "last": while (d = d.nextSibling) if (d.nodeType === 1) return !1; return !0; case "nth": var e = b[2], f = b[3]; if (e === 1 && f === 0) return !0; var g = b[0], h = a.parentNode; if (h && (h.sizcache !== g || !a.nodeIndex)) { var i = 0; for (d = h.firstChild; d; d = d.nextSibling) d.nodeType === 1 && (d.nodeIndex = ++i); h.sizcache = g } var j = a.nodeIndex - f; return e === 0 ? j === 0 : j % e === 0 && j / e >= 0 } }, ID: function (a, b) { return a.nodeType === 1 && a.getAttribute("id") === b }, TAG: function (a, b) { return b === "*" && a.nodeType === 1 || a.nodeName.toLowerCase() === b }, CLASS: function (a, b) { return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1 }, ATTR: function (a, b) { var c = b[1], d = l.attrHandle[c] ? l.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c), e = d + "", f = b[2], g = b[4]; return d == null ? f === "!=" : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1 }, POS: function (a, b, c, d) { var e = b[2], f = l.setFilters[e]; if (f) return f(a, c, b, d) } } }, m = l.match.POS, n = function (a, b) { return "\\" + (b - 0 + 1) }; for (var o in l.match) l.match[o] = new RegExp(l.match[o].source + /(?![^\[]*\])(?![^\(]*\))/.source), l.leftMatch[o] = new RegExp(/(^(?:.|\r|\n)*?)/.source + l.match[o].source.replace(/\\(\d+)/g, n)); var p = function (a, b) { a = Array.prototype.slice.call(a, 0); if (b) { b.push.apply(b, a); return b } return a }; try { Array.prototype.slice.call(c.documentElement.childNodes, 0)[0].nodeType } catch (q) { p = function (a, b) { var c = 0, d = b || []; if (f.call(a) === "[object Array]") Array.prototype.push.apply(d, a); else if (typeof a.length === "number") for (var e = a.length; c < e; c++) d.push(a[c]); else for (; a[c]; c++) d.push(a[c]); return d } } var r, s; c.documentElement.compareDocumentPosition ? r = function (a, b) { if (a === b) { g = !0; return 0 } if (!a.compareDocumentPosition || !b.compareDocumentPosition) return a.compareDocumentPosition ? -1 : 1; return a.compareDocumentPosition(b) & 4 ? -1 : 1 } : (r = function (a, b) { var c, d, e = [], f = [], h = a.parentNode, i = b.parentNode, j = h; if (a === b) { g = !0; return 0 } if (h === i) return s(a, b); if (!h) return -1; if (!i) return 1; while (j) e.unshift(j), j = j.parentNode; j = i; while (j) f.unshift(j), j = j.parentNode; c = e.length, d = f.length; for (var k = 0; k < c && k < d; k++) if (e[k] !== f[k]) return s(e[k], f[k]); return k === c ? s(a, f[k], -1) : s(e[k], b, 1) }, s = function (a, b, c) { if (a === b) return c; var d = a.nextSibling; while (d) { if (d === b) return -1; d = d.nextSibling } return 1 }), k.getText = function (a) { var b = "", c; for (var d = 0; a[d]; d++) c = a[d], c.nodeType === 3 || c.nodeType === 4 ? b += c.nodeValue : c.nodeType !== 8 && (b += k.getText(c.childNodes)); return b }, function () { var a = c.createElement("div"), d = "script" + (new Date).getTime(), e = c.documentElement; a.innerHTML = "<a name='" + d + "'/>", e.insertBefore(a, e.firstChild), c.getElementById(d) && (l.find.ID = function (a, c, d) { if (typeof c.getElementById !== "undefined" && !d) { var e = c.getElementById(a[1]); return e ? e.id === a[1] || typeof e.getAttributeNode !== "undefined" && e.getAttributeNode("id").nodeValue === a[1] ? [e] : b : [] } }, l.filter.ID = function (a, b) { var c = typeof a.getAttributeNode !== "undefined" && a.getAttributeNode("id"); return a.nodeType === 1 && c && c.nodeValue === b }), e.removeChild(a), e = a = null } (), function () { var a = c.createElement("div"); a.appendChild(c.createComment("")), a.getElementsByTagName("*").length > 0 && (l.find.TAG = function (a, b) { var c = b.getElementsByTagName(a[1]); if (a[1] === "*") { var d = []; for (var e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]); c = d } return c }), a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute !== "undefined" && a.firstChild.getAttribute("href") !== "#" && (l.attrHandle.href = function (a) { return a.getAttribute("href", 2) }), a = null } (), c.querySelectorAll && function () { var a = k, b = c.createElement("div"), d = "__sizzle__"; b.innerHTML = "<p class='TEST'></p>"; if (!b.querySelectorAll || b.querySelectorAll(".TEST").length !== 0) { k = function (b, e, f, g) { e = e || c; if (!g && !k.isXML(e)) { var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b); if (h && (e.nodeType === 1 || e.nodeType === 9)) { if (h[1]) return p(e.getElementsByTagName(b), f); if (h[2] && l.find.CLASS && e.getElementsByClassName) return p(e.getElementsByClassName(h[2]), f) } if (e.nodeType === 9) { if (b === "body" && e.body) return p([e.body], f); if (h && h[3]) { var i = e.getElementById(h[3]); if (!i || !i.parentNode) return p([], f); if (i.id === h[3]) return p([i], f) } try { return p(e.querySelectorAll(b), f) } catch (j) { } } else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") { var m = e, n = e.getAttribute("id"), o = n || d, q = e.parentNode, r = /^\s*[+~]/.test(b); n ? o = o.replace(/'/g, "\\$&") : e.setAttribute("id", o), r && q && (e = e.parentNode); try { if (!r || q) return p(e.querySelectorAll("[id='" + o + "'] " + b), f) } catch (s) { } finally { n || m.removeAttribute("id") } } } return a(b, e, f, g) }; for (var e in a) k[e] = a[e]; b = null } } (), function () { var a = c.documentElement, b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector; if (b) { var d = !b.call(c.createElement("div"), "div"), e = !1; try { b.call(c.documentElement, "[test!='']:sizzle") } catch (f) { e = !0 } k.matchesSelector = function (a, c) { c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if (!k.isXML(a)) try { if (e || !l.match.PSEUDO.test(c) && !/!=/.test(c)) { var f = b.call(a, c); if (f || !d || a.document && a.document.nodeType !== 11) return f } } catch (g) { } return k(c, null, null, [a]).length > 0 } } } (), function () { var a = c.createElement("div"); a.innerHTML = "<div class='test e'></div><div class='test'></div>"; if (a.getElementsByClassName && a.getElementsByClassName("e").length !== 0) { a.lastChild.className = "e"; if (a.getElementsByClassName("e").length === 1) return; l.order.splice(1, 0, "CLASS"), l.find.CLASS = function (a, b, c) { if (typeof b.getElementsByClassName !== "undefined" && !c) return b.getElementsByClassName(a[1]) }, a = null } } (), c.documentElement.contains ? k.contains = function (a, b) { return a !== b && (a.contains ? a.contains(b) : !0) } : c.documentElement.compareDocumentPosition ? k.contains = function (a, b) { return !!(a.compareDocumentPosition(b) & 16) } : k.contains = function () { return !1 }, k.isXML = function (a) { var b = (a ? a.ownerDocument || a : 0).documentElement; return b ? b.nodeName !== "HTML" : !1 }; var v = function (a, b) { var c, d = [], e = "", f = b.nodeType ? [b] : b; while (c = l.match.PSEUDO.exec(a)) e += c[0], a = a.replace(l.match.PSEUDO, ""); a = l.relative[a] ? a + "*" : a; for (var g = 0, h = f.length; g < h; g++) k(a, f[g], d); return k.filter(e, d) }; d.find = k, d.expr = k.selectors, d.expr[":"] = d.expr.filters, d.unique = k.uniqueSort, d.text = k.getText, d.isXMLDoc = k.isXML, d.contains = k.contains } (); var I = /Until$/, J = /^(?:parents|prevUntil|prevAll)/, K = /,/, L = /^.[^:#\[\.,]*$/, M = Array.prototype.slice, N = d.expr.match.POS, O = { children: !0, contents: !0, next: !0, prev: !0 }; d.fn.extend({ find: function (a) { var b = this.pushStack("", "find", a), c = 0; for (var e = 0, f = this.length; e < f; e++) { c = b.length, d.find(a, this[e], b); if (e > 0) for (var g = c; g < b.length; g++) for (var h = 0; h < c; h++) if (b[h] === b[g]) { b.splice(g--, 1); break } } return b }, has: function (a) { var b = d(a); return this.filter(function () { for (var a = 0, c = b.length; a < c; a++) if (d.contains(this, b[a])) return !0 }) }, not: function (a) { return this.pushStack(Q(this, a, !1), "not", a) }, filter: function (a) { return this.pushStack(Q(this, a, !0), "filter", a) }, is: function (a) { return !!a && d.filter(a, this).length > 0 }, closest: function (a, b) { var c = [], e, f, g = this[0]; if (d.isArray(a)) { var h, i, j = {}, k = 1; if (g && a.length) { for (e = 0, f = a.length; e < f; e++) i = a[e], j[i] || (j[i] = d.expr.match.POS.test(i) ? d(i, b || this.context) : i); while (g && g.ownerDocument && g !== b) { for (i in j) h = j[i], (h.jquery ? h.index(g) > -1 : d(g).is(h)) && c.push({ selector: i, elem: g, level: k }); g = g.parentNode, k++ } } return c } var l = N.test(a) ? d(a, b || this.context) : null; for (e = 0, f = this.length; e < f; e++) { g = this[e]; while (g) { if (l ? l.index(g) > -1 : d.find.matchesSelector(g, a)) { c.push(g); break } g = g.parentNode; if (!g || !g.ownerDocument || g === b) break } } c = c.length > 1 ? d.unique(c) : c; return this.pushStack(c, "closest", a) }, index: function (a) { if (!a || typeof a === "string") return d.inArray(this[0], a ? d(a) : this.parent().children()); return d.inArray(a.jquery ? a[0] : a, this) }, add: function (a, b) { var c = typeof a === "string" ? d(a, b) : d.makeArray(a), e = d.merge(this.get(), c); return this.pushStack(P(c[0]) || P(e[0]) ? e : d.unique(e)) }, andSelf: function () { return this.add(this.prevObject) } }), d.each({ parent: function (a) { var b = a.parentNode; return b && b.nodeType !== 11 ? b : null }, parents: function (a) { return d.dir(a, "parentNode") }, parentsUntil: function (a, b, c) { return d.dir(a, "parentNode", c) }, next: function (a) { return d.nth(a, 2, "nextSibling") }, prev: function (a) { return d.nth(a, 2, "previousSibling") }, nextAll: function (a) { return d.dir(a, "nextSibling") }, prevAll: function (a) { return d.dir(a, "previousSibling") }, nextUntil: function (a, b, c) { return d.dir(a, "nextSibling", c) }, prevUntil: function (a, b, c) { return d.dir(a, "previousSibling", c) }, siblings: function (a) { return d.sibling(a.parentNode.firstChild, a) }, children: function (a) { return d.sibling(a.firstChild) }, contents: function (a) { return d.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : d.makeArray(a.childNodes) } }, function (a, b) { d.fn[a] = function (c, e) { var f = d.map(this, b, c), g = M.call(arguments); I.test(a) || (e = c), e && typeof e === "string" && (f = d.filter(e, f)), f = this.length > 1 && !O[a] ? d.unique(f) : f, (this.length > 1 || K.test(e)) && J.test(a) && (f = f.reverse()); return this.pushStack(f, a, g.join(",")) } }), d.extend({ filter: function (a, b, c) { c && (a = ":not(" + a + ")"); return b.length === 1 ? d.find.matchesSelector(b[0], a) ? [b[0]] : [] : d.find.matches(a, b) }, dir: function (a, c, e) { var f = [], g = a[c]; while (g && g.nodeType !== 9 && (e === b || g.nodeType !== 1 || !d(g).is(e))) g.nodeType === 1 && f.push(g), g = g[c]; return f }, nth: function (a, b, c, d) { b = b || 1; var e = 0; for (; a; a = a[c]) if (a.nodeType === 1 && ++e === b) break; return a }, sibling: function (a, b) { var c = []; for (; a; a = a.nextSibling) a.nodeType === 1 && a !== b && c.push(a); return c } }); var R = / jQuery\d+="(?:\d+|null)"/g, S = /^\s+/, T = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, U = /<([\w:]+)/, V = /<tbody/i, W = /<|&#?\w+;/, X = /<(?:script|object|embed|option|style)/i, Y = /checked\s*(?:[^=]|=\s*.checked.)/i, Z = { option: [1, "<select multiple='multiple'>", "</select>"], legend: [1, "<fieldset>", "</fieldset>"], thead: [1, "<table>", "</table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], area: [1, "<map>", "</map>"], _default: [0, "", ""] }; Z.optgroup = Z.option, Z.tbody = Z.tfoot = Z.colgroup = Z.caption = Z.thead, Z.th = Z.td, d.support.htmlSerialize || (Z._default = [1, "div<div>", "</div>"]), d.fn.extend({ text: function (a) { if (d.isFunction(a)) return this.each(function (b) { var c = d(this); c.text(a.call(this, b, c.text())) }); if (typeof a !== "object" && a !== b) return this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a)); return d.text(this) }, wrapAll: function (a) { if (d.isFunction(a)) return this.each(function (b) { d(this).wrapAll(a.call(this, b)) }); if (this[0]) { var b = d(a, this[0].ownerDocument).eq(0).clone(!0); this[0].parentNode && b.insertBefore(this[0]), b.map(function () { var a = this; while (a.firstChild && a.firstChild.nodeType === 1) a = a.firstChild; return a }).append(this) } return this }, wrapInner: function (a) { if (d.isFunction(a)) return this.each(function (b) { d(this).wrapInner(a.call(this, b)) }); return this.each(function () { var b = d(this), c = b.contents(); c.length ? c.wrapAll(a) : b.append(a) }) }, wrap: function (a) { return this.each(function () { d(this).wrapAll(a) }) }, unwrap: function () { return this.parent().each(function () { d.nodeName(this, "body") || d(this).replaceWith(this.childNodes) }).end() }, append: function () { return this.domManip(arguments, !0, function (a) { this.nodeType === 1 && this.appendChild(a) }) }, prepend: function () { return this.domManip(arguments, !0, function (a) { this.nodeType === 1 && this.insertBefore(a, this.firstChild) }) }, before: function () { if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) { this.parentNode.insertBefore(a, this) }); if (arguments.length) { var a = d(arguments[0]); a.push.apply(a, this.toArray()); return this.pushStack(a, "before", arguments) } }, after: function () { if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) { this.parentNode.insertBefore(a, this.nextSibling) }); if (arguments.length) { var a = this.pushStack(this, "after", arguments); a.push.apply(a, d(arguments[0]).toArray()); return a } }, remove: function (a, b) { for (var c = 0, e; (e = this[c]) != null; c++) if (!a || d.filter(a, [e]).length) !b && e.nodeType === 1 && (d.cleanData(e.getElementsByTagName("*")), d.cleanData([e])), e.parentNode && e.parentNode.removeChild(e); return this }, empty: function () { for (var a = 0, b; (b = this[a]) != null; a++) { b.nodeType === 1 && d.cleanData(b.getElementsByTagName("*")); while (b.firstChild) b.removeChild(b.firstChild) } return this }, clone: function (a, b) { a = a == null ? !1 : a, b = b == null ? a : b; return this.map(function () { return d.clone(this, a, b) }) }, html: function (a) { if (a === b) return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(R, "") : null; if (typeof a !== "string" || X.test(a) || !d.support.leadingWhitespace && S.test(a) || Z[(U.exec(a) || ["", ""])[1].toLowerCase()]) d.isFunction(a) ? this.each(function (b) { var c = d(this); c.html(a.call(this, b, c.html())) }) : this.empty().append(a); else { a = a.replace(T, "<$1></$2>"); try { for (var c = 0, e = this.length; c < e; c++) this[c].nodeType === 1 && (d.cleanData(this[c].getElementsByTagName("*")), this[c].innerHTML = a) } catch (f) { this.empty().append(a) } } return this }, replaceWith: function (a) { if (this[0] && this[0].parentNode) { if (d.isFunction(a)) return this.each(function (b) { var c = d(this), e = c.html(); c.replaceWith(a.call(this, b, e)) }); typeof a !== "string" && (a = d(a).detach()); return this.each(function () { var b = this.nextSibling, c = this.parentNode; d(this).remove(), b ? d(b).before(a) : d(c).append(a) }) } return this.length ? this.pushStack(d(d.isFunction(a) ? a() : a), "replaceWith", a) : this }, detach: function (a) { return this.remove(a, !0) }, domManip: function (a, c, e) { var f, g, h, i, j = a[0], k = []; if (!d.support.checkClone && arguments.length === 3 && typeof j === "string" && Y.test(j)) return this.each(function () { d(this).domManip(a, c, e, !0) }); if (d.isFunction(j)) return this.each(function (f) { var g = d(this); a[0] = j.call(this, f, c ? g.html() : b), g.domManip(a, c, e) }); if (this[0]) { i = j && j.parentNode, d.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? f = { fragment: i} : f = d.buildFragment(a, this, k), h = f.fragment, h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild; if (g) { c = c && d.nodeName(g, "tr"); for (var l = 0, m = this.length, n = m - 1; l < m; l++) e.call(c ? $(this[l], g) : this[l], f.cacheable || m > 1 && l < n ? d.clone(h, !0, !0) : h) } k.length && d.each(k, bc) } return this } }), d.buildFragment = function (a, b, e) { var f, g, h, i = b && b[0] ? b[0].ownerDocument || b[0] : c; a.length === 1 && typeof a[0] === "string" && a[0].length < 512 && i === c && a[0].charAt(0) === "<" && !X.test(a[0]) && (d.support.checkClone || !Y.test(a[0])) && (g = !0, h = d.fragments[a[0]], h && (h !== 1 && (f = h))), f || (f = i.createDocumentFragment(), d.clean(a, i, f, e)), g && (d.fragments[a[0]] = h ? f : 1); return { fragment: f, cacheable: g} }, d.fragments = {}, d.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (a, b) { d.fn[a] = function (c) { var e = [], f = d(c), g = this.length === 1 && this[0].parentNode; if (g && g.nodeType === 11 && g.childNodes.length === 1 && f.length === 1) { f[b](this[0]); return this } for (var h = 0, i = f.length; h < i; h++) { var j = (h > 0 ? this.clone(!0) : this).get(); d(f[h])[b](j), e = e.concat(j) } return this.pushStack(e, a, f.selector) } }), d.extend({ clone: function (a, b, c) { var e = a.cloneNode(!0), f, g, h; if ((!d.support.noCloneEvent || !d.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !d.isXMLDoc(a)) { ba(a, e), f = bb(a), g = bb(e); for (h = 0; f[h]; ++h) ba(f[h], g[h]) } if (b) { _(a, e); if (c) { f = bb(a), g = bb(e); for (h = 0; f[h]; ++h) _(f[h], g[h]) } } return e }, clean: function (a, b, e, f) { b = b || c, typeof b.createElement === "undefined" && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c); var g = []; for (var h = 0, i; (i = a[h]) != null; h++) { typeof i === "number" && (i += ""); if (!i) continue; if (typeof i !== "string" || W.test(i)) { if (typeof i === "string") { i = i.replace(T, "<$1></$2>"); var j = (U.exec(i) || ["", ""])[1].toLowerCase(), k = Z[j] || Z._default, l = k[0], m = b.createElement("div"); m.innerHTML = k[1] + i + k[2]; while (l--) m = m.lastChild; if (!d.support.tbody) { var n = V.test(i), o = j === "table" && !n ? m.firstChild && m.firstChild.childNodes : k[1] === "<table>" && !n ? m.childNodes : []; for (var p = o.length - 1; p >= 0; --p) d.nodeName(o[p], "tbody") && !o[p].childNodes.length && o[p].parentNode.removeChild(o[p]) } !d.support.leadingWhitespace && S.test(i) && m.insertBefore(b.createTextNode(S.exec(i)[0]), m.firstChild), i = m.childNodes } } else i = b.createTextNode(i); i.nodeType ? g.push(i) : g = d.merge(g, i) } if (e) for (h = 0; g[h]; h++) !f || !d.nodeName(g[h], "script") || g[h].type && g[h].type.toLowerCase() !== "text/javascript" ? (g[h].nodeType === 1 && g.splice.apply(g, [h + 1, 0].concat(d.makeArray(g[h].getElementsByTagName("script")))), e.appendChild(g[h])) : f.push(g[h].parentNode ? g[h].parentNode.removeChild(g[h]) : g[h]); return g }, cleanData: function (a) { var b, c, e = d.cache, f = d.expando, g = d.event.special, h = d.support.deleteExpando; for (var i = 0, j; (j = a[i]) != null; i++) { if (j.nodeName && d.noData[j.nodeName.toLowerCase()]) continue; c = j[d.expando]; if (c) { b = e[c] && e[c][f]; if (b && b.events) { for (var k in b.events) g[k] ? d.event.remove(j, k) : d.removeEvent(j, k, b.handle); b.handle && (b.handle.elem = null) } h ? delete j[d.expando] : j.removeAttribute && j.removeAttribute(d.expando), delete e[c] } } } }); var bd = /alpha\([^)]*\)/i, be = /opacity=([^)]*)/, bf = /-([a-z])/ig, bg = /([A-Z]|^ms)/g, bh = /^-?\d+(?:px)?$/i, bi = /^-?\d/, bj = { position: "absolute", visibility: "hidden", display: "block" }, bk = ["Left", "Right"], bl = ["Top", "Bottom"], bm, bn, bo, bp = function (a, b) { return b.toUpperCase() }; d.fn.css = function (a, c) { if (arguments.length === 2 && c === b) return this; return d.access(this, a, c, !0, function (a, c, e) { return e !== b ? d.style(a, c, e) : d.css(a, c) }) }, d.extend({ cssHooks: { opacity: { get: function (a, b) { if (b) { var c = bm(a, "opacity", "opacity"); return c === "" ? "1" : c } return a.style.opacity } } }, cssNumber: { zIndex: !0, fontWeight: !0, opacity: !0, zoom: !0, lineHeight: !0 }, cssProps: { "float": d.support.cssFloat ? "cssFloat" : "styleFloat" }, style: function (a, c, e, f) { if (a && a.nodeType !== 3 && a.nodeType !== 8 && a.style) { var g, h = d.camelCase(c), i = a.style, j = d.cssHooks[h]; c = d.cssProps[h] || h; if (e === b) { if (j && "get" in j && (g = j.get(a, !1, f)) !== b) return g; return i[c] } if (typeof e === "number" && isNaN(e) || e == null) return; typeof e === "number" && !d.cssNumber[h] && (e += "px"); if (!j || !("set" in j) || (e = j.set(a, e)) !== b) try { i[c] = e } catch (k) { } } }, css: function (a, c, e) { var f, g = d.camelCase(c), h = d.cssHooks[g]; c = d.cssProps[g] || g; if (h && "get" in h && (f = h.get(a, !0, e)) !== b) return f; if (bm) return bm(a, c, g) }, swap: function (a, b, c) { var d = {}; for (var e in b) d[e] = a.style[e], a.style[e] = b[e]; c.call(a); for (e in b) a.style[e] = d[e] }, camelCase: function (a) { return a.replace(bf, bp) } }), d.curCSS = d.css, d.each(["height", "width"], function (a, b) { d.cssHooks[b] = { get: function (a, c, e) { var f; if (c) { a.offsetWidth !== 0 ? f = bq(a, b, e) : d.swap(a, bj, function () { f = bq(a, b, e) }); if (f <= 0) { f = bm(a, b, b), f === "0px" && bo && (f = bo(a, b, b)); if (f != null) return f === "" || f === "auto" ? "0px" : f } if (f < 0 || f == null) { f = a.style[b]; return f === "" || f === "auto" ? "0px" : f } return typeof f === "string" ? f : f + "px" } }, set: function (a, b) { if (!bh.test(b)) return b; b = parseFloat(b); if (b >= 0) return b + "px" } } }), d.support.opacity || (d.cssHooks.opacity = { get: function (a, b) { return be.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : b ? "1" : "" }, set: function (a, b) { var c = a.style; c.zoom = 1; var e = d.isNaN(b) ? "" : "alpha(opacity=" + b * 100 + ")", f = c.filter || ""; c.filter = bd.test(f) ? f.replace(bd, e) : c.filter + " " + e } }), d(function () { d.support.reliableMarginRight || (d.cssHooks.marginRight = { get: function (a, b) { var c; d.swap(a, { display: "inline-block" }, function () { b ? c = bm(a, "margin-right", "marginRight") : c = a.style.marginRight }); return c } }) }), c.defaultView && c.defaultView.getComputedStyle && (bn = function (a, c, e) { var f, g, h; e = e.replace(bg, "-$1").toLowerCase(); if (!(g = a.ownerDocument.defaultView)) return b; if (h = g.getComputedStyle(a, null)) f = h.getPropertyValue(e), f === "" && !d.contains(a.ownerDocument.documentElement, a) && (f = d.style(a, e)); return f }), c.documentElement.currentStyle && (bo = function (a, b) { var c, d = a.currentStyle && a.currentStyle[b], e = a.runtimeStyle && a.runtimeStyle[b], f = a.style; !bh.test(d) && bi.test(d) && (c = f.left, e && (a.runtimeStyle.left = a.currentStyle.left), f.left = b === "fontSize" ? "1em" : d || 0, d = f.pixelLeft + "px", f.left = c, e && (a.runtimeStyle.left = e)); return d === "" ? "auto" : d }), bm = bn || bo, d.expr && d.expr.filters && (d.expr.filters.hidden = function (a) { var b = a.offsetWidth, c = a.offsetHeight; return b === 0 && c === 0 || !d.support.reliableHiddenOffsets && (a.style.display || d.css(a, "display")) === "none" }, d.expr.filters.visible = function (a) { return !d.expr.filters.hidden(a) }); var br = /%20/g, bs = /\[\]$/, bt = /\r?\n/g, bu = /#.*$/, bv = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, bw = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, bx = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/, by = /^(?:GET|HEAD)$/, bz = /^\/\//, bA = /\?/, bB = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, bC = /^(?:select|textarea)/i, bD = /\s+/, bE = /([?&])_=[^&]*/, bF = /(^|\-)([a-z])/g, bG = function (a, b, c) { return b + c.toUpperCase() }, bH = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/, bI = d.fn.load, bJ = {}, bK = {}, bL, bM; try { bL = c.location.href } catch (bN) { bL = c.createElement("a"), bL.href = "", bL = bL.href } bM = bH.exec(bL.toLowerCase()) || [], d.fn.extend({ load: function (a, c, e) { if (typeof a !== "string" && bI) return bI.apply(this, arguments); if (!this.length) return this; var f = a.indexOf(" "); if (f >= 0) { var g = a.slice(f, a.length); a = a.slice(0, f) } var h = "GET"; c && (d.isFunction(c) ? (e = c, c = b) : typeof c === "object" && (c = d.param(c, d.ajaxSettings.traditional), h = "POST")); var i = this; d.ajax({ url: a, type: h, dataType: "html", data: c, complete: function (a, b, c) { c = a.responseText, a.isResolved() && (a.done(function (a) { c = a }), i.html(g ? d("<div>").append(c.replace(bB, "")).find(g) : c)), e && i.each(e, [c, b, a]) } }); return this }, serialize: function () { return d.param(this.serializeArray()) }, serializeArray: function () { return this.map(function () { return this.elements ? d.makeArray(this.elements) : this }).filter(function () { return this.name && !this.disabled && (this.checked || bC.test(this.nodeName) || bw.test(this.type)) }).map(function (a, b) { var c = d(this).val(); return c == null ? null : d.isArray(c) ? d.map(c, function (a, c) { return { name: b.name, value: a.replace(bt, "\r\n")} }) : { name: b.name, value: c.replace(bt, "\r\n")} }).get() } }), d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function (a, b) { d.fn[b] = function (a) { return this.bind(b, a) } }), d.each(["get", "post"], function (a, c) { d[c] = function (a, e, f, g) { d.isFunction(e) && (g = g || f, f = e, e = b); return d.ajax({ type: c, url: a, data: e, success: f, dataType: g }) } }), d.extend({ getScript: function (a, c) { return d.get(a, b, c, "script") }, getJSON: function (a, b, c) { return d.get(a, b, c, "json") }, ajaxSetup: function (a, b) { b ? d.extend(!0, a, d.ajaxSettings, b) : (b = a, a = d.extend(!0, d.ajaxSettings, b)); for (var c in { context: 1, url: 1 }) c in b ? a[c] = b[c] : c in d.ajaxSettings && (a[c] = d.ajaxSettings[c]); return a }, ajaxSettings: { url: bL, isLocal: bx.test(bM[1]), global: !0, type: "GET", contentType: "application/x-www-form-urlencoded", processData: !0, async: !0, accepts: { xml: "application/xml, text/xml", html: "text/html", text: "text/plain", json: "application/json, text/javascript", "*": "*/*" }, contents: { xml: /xml/, html: /html/, json: /json/ }, responseFields: { xml: "responseXML", text: "responseText" }, converters: { "* text": a.String, "text html": !0, "text json": d.parseJSON, "text xml": d.parseXML} }, ajaxPrefilter: bO(bJ), ajaxTransport: bO(bK), ajax: function (a, c) { function v(a, c, l, n) { if (r !== 2) { r = 2, p && clearTimeout(p), o = b, m = n || "", u.readyState = a ? 4 : 0; var q, t, v, w = l ? bR(e, u, l) : b, x, y; if (a >= 200 && a < 300 || a === 304) { if (e.ifModified) { if (x = u.getResponseHeader("Last-Modified")) d.lastModified[k] = x; if (y = u.getResponseHeader("Etag")) d.etag[k] = y } if (a === 304) c = "notmodified", q = !0; else try { t = bS(e, w), c = "success", q = !0 } catch (z) { c = "parsererror", v = z } } else { v = c; if (!c || a) c = "error", a < 0 && (a = 0) } u.status = a, u.statusText = c, q ? h.resolveWith(f, [t, c, u]) : h.rejectWith(f, [u, c, v]), u.statusCode(j), j = b, s && g.trigger("ajax" + (q ? "Success" : "Error"), [u, e, q ? t : v]), i.resolveWith(f, [u, c]), s && (g.trigger("ajaxComplete", [u, e]), --d.active || d.event.trigger("ajaxStop")) } } typeof a === "object" && (c = a, a = b), c = c || {}; var e = d.ajaxSetup({}, c), f = e.context || e, g = f !== e && (f.nodeType || f instanceof d) ? d(f) : d.event, h = d.Deferred(), i = d._Deferred(), j = e.statusCode || {}, k, l = {}, m, n, o, p, q, r = 0, s, t, u = { readyState: 0, setRequestHeader: function (a, b) { r || (l[a.toLowerCase().replace(bF, bG)] = b); return this }, getAllResponseHeaders: function () { return r === 2 ? m : null }, getResponseHeader: function (a) { var c; if (r === 2) { if (!n) { n = {}; while (c = bv.exec(m)) n[c[1].toLowerCase()] = c[2] } c = n[a.toLowerCase()] } return c === b ? null : c }, overrideMimeType: function (a) { r || (e.mimeType = a); return this }, abort: function (a) { a = a || "abort", o && o.abort(a), v(0, a); return this } }; h.promise(u), u.success = u.done, u.error = u.fail, u.complete = i.done, u.statusCode = function (a) { if (a) { var b; if (r < 2) for (b in a) j[b] = [j[b], a[b]]; else b = a[u.status], u.then(b, b) } return this }, e.url = ((a || e.url) + "").replace(bu, "").replace(bz, bM[1] + "//"), e.dataTypes = d.trim(e.dataType || "*").toLowerCase().split(bD), e.crossDomain == null && (q = bH.exec(e.url.toLowerCase()), e.crossDomain = q && (q[1] != bM[1] || q[2] != bM[2] || (q[3] || (q[1] === "http:" ? 80 : 443)) != (bM[3] || (bM[1] === "http:" ? 80 : 443)))), e.data && e.processData && typeof e.data !== "string" && (e.data = d.param(e.data, e.traditional)), bP(bJ, e, c, u); if (r === 2) return !1; s = e.global, e.type = e.type.toUpperCase(), e.hasContent = !by.test(e.type), s && d.active++ === 0 && d.event.trigger("ajaxStart"); if (!e.hasContent) { e.data && (e.url += (bA.test(e.url) ? "&" : "?") + e.data), k = e.url; if (e.cache === !1) { var w = d.now(), x = e.url.replace(bE, "$1_=" + w); e.url = x + (x === e.url ? (bA.test(e.url) ? "&" : "?") + "_=" + w : "") } } if (e.data && e.hasContent && e.contentType !== !1 || c.contentType) l["Content-Type"] = e.contentType; e.ifModified && (k = k || e.url, d.lastModified[k] && (l["If-Modified-Since"] = d.lastModified[k]), d.etag[k] && (l["If-None-Match"] = d.etag[k])), l.Accept = e.dataTypes[0] && e.accepts[e.dataTypes[0]] ? e.accepts[e.dataTypes[0]] + (e.dataTypes[0] !== "*" ? ", */*; q=0.01" : "") : e.accepts["*"]; for (t in e.headers) u.setRequestHeader(t, e.headers[t]); if (e.beforeSend && (e.beforeSend.call(f, u, e) === !1 || r === 2)) { u.abort(); return !1 } for (t in { success: 1, error: 1, complete: 1 }) u[t](e[t]); o = bP(bK, e, c, u); if (o) { u.readyState = 1, s && g.trigger("ajaxSend", [u, e]), e.async && e.timeout > 0 && (p = setTimeout(function () { u.abort("timeout") }, e.timeout)); try { r = 1, o.send(l, v) } catch (y) { status < 2 ? v(-1, y) : d.error(y) } } else v(-1, "No Transport"); return u }, param: function (a, c) { var e = [], f = function (a, b) { b = d.isFunction(b) ? b() : b, e[e.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b) }; c === b && (c = d.ajaxSettings.traditional); if (d.isArray(a) || a.jquery && !d.isPlainObject(a)) d.each(a, function () { f(this.name, this.value) }); else for (var g in a) bQ(g, a[g], c, f); return e.join("&").replace(br, "+") } }), d.extend({ active: 0, lastModified: {}, etag: {} }); var bT = d.now(), bU = /(\=)\?(&|$)|\?\?/i; d.ajaxSetup({ jsonp: "callback", jsonpCallback: function () { return d.expando + "_" + bT++ } }), d.ajaxPrefilter("json jsonp", function (b, c, e) { var f = typeof b.data === "string"; if (b.dataTypes[0] === "jsonp" || c.jsonpCallback || c.jsonp != null || b.jsonp !== !1 && (bU.test(b.url) || f && bU.test(b.data))) { var g, h = b.jsonpCallback = d.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, i = a[h], j = b.url, k = b.data, l = "$1" + h + "$2", m = function () { a[h] = i, g && d.isFunction(i) && a[h](g[0]) }; b.jsonp !== !1 && (j = j.replace(bU, l), b.url === j && (f && (k = k.replace(bU, l)), b.data === k && (j += (/\?/.test(j) ? "&" : "?") + b.jsonp + "=" + h))), b.url = j, b.data = k, a[h] = function (a) { g = [a] }, e.then(m, m), b.converters["script json"] = function () { g || d.error(h + " was not called"); return g[0] }, b.dataTypes[0] = "json"; return "script" } }), d.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /javascript|ecmascript/ }, converters: { "text script": function (a) { d.globalEval(a); return a } } }), d.ajaxPrefilter("script", function (a) { a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1) }), d.ajaxTransport("script", function (a) { if (a.crossDomain) { var d, e = c.head || c.getElementsByTagName("head")[0] || c.documentElement; return { send: function (f, g) { d = c.createElement("script"), d.async = "async", a.scriptCharset && (d.charset = a.scriptCharset), d.src = a.url, d.onload = d.onreadystatechange = function (a, c) { if (!d.readyState || /loaded|complete/.test(d.readyState)) d.onload = d.onreadystatechange = null, e && d.parentNode && e.removeChild(d), d = b, c || g(200, "success") }, e.insertBefore(d, e.firstChild) }, abort: function () { d && d.onload(0, 1) } } } }); var bV = d.now(), bW, bX; d.ajaxSettings.xhr = a.ActiveXObject ? function () { return !this.isLocal && bZ() || b$() } : bZ, bX = d.ajaxSettings.xhr(), d.support.ajax = !!bX, d.support.cors = bX && "withCredentials" in bX, bX = b, d.support.ajax && d.ajaxTransport(function (a) { if (!a.crossDomain || d.support.cors) { var c; return { send: function (e, f) { var g = a.xhr(), h, i; a.username ? g.open(a.type, a.url, a.async, a.username, a.password) : g.open(a.type, a.url, a.async); if (a.xhrFields) for (i in a.xhrFields) g[i] = a.xhrFields[i]; a.mimeType && g.overrideMimeType && g.overrideMimeType(a.mimeType), !a.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest"); try { for (i in e) g.setRequestHeader(i, e[i]) } catch (j) { } g.send(a.hasContent && a.data || null), c = function (e, i) { var j, k, l, m, n; try { if (c && (i || g.readyState === 4)) { c = b, h && (g.onreadystatechange = d.noop, delete bW[h]); if (i) g.readyState !== 4 && g.abort(); else { j = g.status, l = g.getAllResponseHeaders(), m = {}, n = g.responseXML, n && n.documentElement && (m.xml = n), m.text = g.responseText; try { k = g.statusText } catch (o) { k = "" } j || !a.isLocal || a.crossDomain ? j === 1223 && (j = 204) : j = m.text ? 200 : 404 } } } catch (p) { i || f(-1, p) } m && f(j, k, m, l) }, a.async && g.readyState !== 4 ? (bW || (bW = {}, bY()), h = bV++, g.onreadystatechange = bW[h] = c) : c() }, abort: function () { c && c(0, 1) } } } }); var b_ = {}, ca = /^(?:toggle|show|hide)$/, cb = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, cc, cd = [["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"], ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"], ["opacity"]]; d.fn.extend({ show: function (a, b, c) { var e, f; if (a || a === 0) return this.animate(ce("show", 3), a, b, c); for (var g = 0, h = this.length; g < h; g++) e = this[g], f = e.style.display, !d._data(e, "olddisplay") && f === "none" && (f = e.style.display = ""), f === "" && d.css(e, "display") === "none" && d._data(e, "olddisplay", cf(e.nodeName)); for (g = 0; g < h; g++) { e = this[g], f = e.style.display; if (f === "" || f === "none") e.style.display = d._data(e, "olddisplay") || "" } return this }, hide: function (a, b, c) { if (a || a === 0) return this.animate(ce("hide", 3), a, b, c); for (var e = 0, f = this.length; e < f; e++) { var g = d.css(this[e], "display"); g !== "none" && !d._data(this[e], "olddisplay") && d._data(this[e], "olddisplay", g) } for (e = 0; e < f; e++) this[e].style.display = "none"; return this }, _toggle: d.fn.toggle, toggle: function (a, b, c) { var e = typeof a === "boolean"; d.isFunction(a) && d.isFunction(b) ? this._toggle.apply(this, arguments) : a == null || e ? this.each(function () { var b = e ? a : d(this).is(":hidden"); d(this)[b ? "show" : "hide"]() }) : this.animate(ce("toggle", 3), a, b, c); return this }, fadeTo: function (a, b, c, d) { return this.filter(":hidden").css("opacity", 0).show().end().animate({ opacity: b }, a, c, d) }, animate: function (a, b, c, e) { var f = d.speed(b, c, e); if (d.isEmptyObject(a)) return this.each(f.complete); return this[f.queue === !1 ? "each" : "queue"](function () { var b = d.extend({}, f), c, e = this.nodeType === 1, g = e && d(this).is(":hidden"), h = this; for (c in a) { var i = d.camelCase(c); c !== i && (a[i] = a[c], delete a[c], c = i); if (a[c] === "hide" && g || a[c] === "show" && !g) return b.complete.call(this); if (e && (c === "height" || c === "width")) { b.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY]; if (d.css(this, "display") === "inline" && d.css(this, "float") === "none") if (d.support.inlineBlockNeedsLayout) { var j = cf(this.nodeName); j === "inline" ? this.style.display = "inline-block" : (this.style.display = "inline", this.style.zoom = 1) } else this.style.display = "inline-block" } d.isArray(a[c]) && ((b.specialEasing = b.specialEasing || {})[c] = a[c][1], a[c] = a[c][0]) } b.overflow != null && (this.style.overflow = "hidden"), b.curAnim = d.extend({}, a), d.each(a, function (c, e) { var f = new d.fx(h, b, c); if (ca.test(e)) f[e === "toggle" ? g ? "show" : "hide" : e](a); else { var i = cb.exec(e), j = f.cur(); if (i) { var k = parseFloat(i[2]), l = i[3] || (d.cssNumber[c] ? "" : "px"); l !== "px" && (d.style(h, c, (k || 1) + l), j = (k || 1) / f.cur() * j, d.style(h, c, j + l)), i[1] && (k = (i[1] === "-=" ? -1 : 1) * k + j), f.custom(j, k, l) } else f.custom(j, e, "") } }); return !0 }) }, stop: function (a, b) { var c = d.timers; a && this.queue([]), this.each(function () { for (var a = c.length - 1; a >= 0; a--) c[a].elem === this && (b && c[a](!0), c.splice(a, 1)) }), b || this.dequeue(); return this } }), d.each({ slideDown: ce("show", 1), slideUp: ce("hide", 1), slideToggle: ce("toggle", 1), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle"} }, function (a, b) { d.fn[a] = function (a, c, d) { return this.animate(b, a, c, d) } }), d.extend({ speed: function (a, b, c) { var e = a && typeof a === "object" ? d.extend({}, a) : { complete: c || !c && b || d.isFunction(a) && a, duration: a, easing: c && b || b && !d.isFunction(b) && b }; e.duration = d.fx.off ? 0 : typeof e.duration === "number" ? e.duration : e.duration in d.fx.speeds ? d.fx.speeds[e.duration] : d.fx.speeds._default, e.old = e.complete, e.complete = function () { e.queue !== !1 && d(this).dequeue(), d.isFunction(e.old) && e.old.call(this) }; return e }, easing: { linear: function (a, b, c, d) { return c + d * a }, swing: function (a, b, c, d) { return (-Math.cos(a * Math.PI) / 2 + .5) * d + c } }, timers: [], fx: function (a, b, c) { this.options = b, this.elem = a, this.prop = c, b.orig || (b.orig = {}) } }), d.fx.prototype = { update: function () { this.options.step && this.options.step.call(this.elem, this.now, this), (d.fx.step[this.prop] || d.fx.step._default)(this) }, cur: function () { if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) return this.elem[this.prop]; var a, b = d.css(this.elem, this.prop); return isNaN(a = parseFloat(b)) ? !b || b === "auto" ? 0 : b : a }, custom: function (a, b, c) { function g(a) { return e.step(a) } var e = this, f = d.fx; this.startTime = d.now(), this.start = a, this.end = b, this.unit = c || this.unit || (d.cssNumber[this.prop] ? "" : "px"), this.now = this.start, this.pos = this.state = 0, g.elem = this.elem, g() && d.timers.push(g) && !cc && (cc = setInterval(f.tick, f.interval)) }, show: function () { this.options.orig[this.prop] = d.style(this.elem, this.prop), this.options.show = !0, this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()), d(this.elem).show() }, hide: function () { this.options.orig[this.prop] = d.style(this.elem, this.prop), this.options.hide = !0, this.custom(this.cur(), 0) }, step: function (a) { var b = d.now(), c = !0; if (a || b >= this.options.duration + this.startTime) { this.now = this.end, this.pos = this.state = 1, this.update(), this.options.curAnim[this.prop] = !0; for (var e in this.options.curAnim) this.options.curAnim[e] !== !0 && (c = !1); if (c) { if (this.options.overflow != null && !d.support.shrinkWrapBlocks) { var f = this.elem, g = this.options; d.each(["", "X", "Y"], function (a, b) { f.style["overflow" + b] = g.overflow[a] }) } this.options.hide && d(this.elem).hide(); if (this.options.hide || this.options.show) for (var h in this.options.curAnim) d.style(this.elem, h, this.options.orig[h]); this.options.complete.call(this.elem) } return !1 } var i = b - this.startTime; this.state = i / this.options.duration; var j = this.options.specialEasing && this.options.specialEasing[this.prop], k = this.options.easing || (d.easing.swing ? "swing" : "linear"); this.pos = d.easing[j || k](this.state, i, 0, 1, this.options.duration), this.now = this.start + (this.end - this.start) * this.pos, this.update(); return !0 } }, d.extend(d.fx, { tick: function () { var a = d.timers; for (var b = 0; b < a.length; b++) a[b]() || a.splice(b--, 1); a.length || d.fx.stop() }, interval: 13, stop: function () { clearInterval(cc), cc = null }, speeds: { slow: 600, fast: 200, _default: 400 }, step: { opacity: function (a) { d.style(a.elem, "opacity", a.now) }, _default: function (a) { a.elem.style && a.elem.style[a.prop] != null ? a.elem.style[a.prop] = (a.prop === "width" || a.prop === "height" ? Math.max(0, a.now) : a.now) + a.unit : a.elem[a.prop] = a.now } } }), d.expr && d.expr.filters && (d.expr.filters.animated = function (a) { return d.grep(d.timers, function (b) { return a === b.elem }).length }); var cg = /^t(?:able|d|h)$/i, ch = /^(?:body|html)$/i; "getBoundingClientRect" in c.documentElement ? d.fn.offset = function (a) { var b = this[0], c; if (a) return this.each(function (b) { d.offset.setOffset(this, a, b) }); if (!b || !b.ownerDocument) return null; if (b === b.ownerDocument.body) return d.offset.bodyOffset(b); try { c = b.getBoundingClientRect() } catch (e) { } var f = b.ownerDocument, g = f.documentElement; if (!c || !d.contains(g, b)) return c ? { top: c.top, left: c.left} : { top: 0, left: 0 }; var h = f.body, i = ci(f), j = g.clientTop || h.clientTop || 0, k = g.clientLeft || h.clientLeft || 0, l = i.pageYOffset || d.support.boxModel && g.scrollTop || h.scrollTop, m = i.pageXOffset || d.support.boxModel && g.scrollLeft || h.scrollLeft, n = c.top + l - j, o = c.left + m - k; return { top: n, left: o} } : d.fn.offset = function (a) { var b = this[0]; if (a) return this.each(function (b) { d.offset.setOffset(this, a, b) }); if (!b || !b.ownerDocument) return null; if (b === b.ownerDocument.body) return d.offset.bodyOffset(b); d.offset.initialize(); var c, e = b.offsetParent, f = b, g = b.ownerDocument, h = g.documentElement, i = g.body, j = g.defaultView, k = j ? j.getComputedStyle(b, null) : b.currentStyle, l = b.offsetTop, m = b.offsetLeft; while ((b = b.parentNode) && b !== i && b !== h) { if (d.offset.supportsFixedPosition && k.position === "fixed") break; c = j ? j.getComputedStyle(b, null) : b.currentStyle, l -= b.scrollTop, m -= b.scrollLeft, b === e && (l += b.offsetTop, m += b.offsetLeft, d.offset.doesNotAddBorder && (!d.offset.doesAddBorderForTableAndCells || !cg.test(b.nodeName)) && (l += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), f = e, e = b.offsetParent), d.offset.subtractsBorderForOverflowNotVisible && c.overflow !== "visible" && (l += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), k = c } if (k.position === "relative" || k.position === "static") l += i.offsetTop, m += i.offsetLeft; d.offset.supportsFixedPosition && k.position === "fixed" && (l += Math.max(h.scrollTop, i.scrollTop), m += Math.max(h.scrollLeft, i.scrollLeft)); return { top: l, left: m} }, d.offset = { initialize: function () { var a = c.body, b = c.createElement("div"), e, f, g, h, i = parseFloat(d.css(a, "marginTop")) || 0, j = "<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>"; d.extend(b.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" }), b.innerHTML = j, a.insertBefore(b, a.firstChild), e = b.firstChild, f = e.firstChild, h = e.nextSibling.firstChild.firstChild, this.doesNotAddBorder = f.offsetTop !== 5, this.doesAddBorderForTableAndCells = h.offsetTop === 5, f.style.position = "fixed", f.style.top = "20px", this.supportsFixedPosition = f.offsetTop === 20 || f.offsetTop === 15, f.style.position = f.style.top = "", e.style.overflow = "hidden", e.style.position = "relative", this.subtractsBorderForOverflowNotVisible = f.offsetTop === -5, this.doesNotIncludeMarginInBodyOffset = a.offsetTop !== i, a.removeChild(b), d.offset.initialize = d.noop }, bodyOffset: function (a) { var b = a.offsetTop, c = a.offsetLeft; d.offset.initialize(), d.offset.doesNotIncludeMarginInBodyOffset && (b += parseFloat(d.css(a, "marginTop")) || 0, c += parseFloat(d.css(a, "marginLeft")) || 0); return { top: b, left: c} }, setOffset: function (a, b, c) { var e = d.css(a, "position"); e === "static" && (a.style.position = "relative"); var f = d(a), g = f.offset(), h = d.css(a, "top"), i = d.css(a, "left"), j = (e === "absolute" || e === "fixed") && d.inArray("auto", [h, i]) > -1, k = {}, l = {}, m, n; j && (l = f.position()), m = j ? l.top : parseInt(h, 10) || 0, n = j ? l.left : parseInt(i, 10) || 0, d.isFunction(b) && (b = b.call(a, c, g)), b.top != null && (k.top = b.top - g.top + m), b.left != null && (k.left = b.left - g.left + n), "using" in b ? b.using.call(a, k) : f.css(k) } }, d.fn.extend({ position: function () { if (!this[0]) return null; var a = this[0], b = this.offsetParent(), c = this.offset(), e = ch.test(b[0].nodeName) ? { top: 0, left: 0} : b.offset(); c.top -= parseFloat(d.css(a, "marginTop")) || 0, c.left -= parseFloat(d.css(a, "marginLeft")) || 0, e.top += parseFloat(d.css(b[0], "borderTopWidth")) || 0, e.left += parseFloat(d.css(b[0], "borderLeftWidth")) || 0; return { top: c.top - e.top, left: c.left - e.left} }, offsetParent: function () { return this.map(function () { var a = this.offsetParent || c.body; while (a && (!ch.test(a.nodeName) && d.css(a, "position") === "static")) a = a.offsetParent; return a }) } }), d.each(["Left", "Top"], function (a, c) { var e = "scroll" + c; d.fn[e] = function (c) { var f = this[0], g; if (!f) return null; if (c !== b) return this.each(function () { g = ci(this), g ? g.scrollTo(a ? d(g).scrollLeft() : c, a ? c : d(g).scrollTop()) : this[e] = c }); g = ci(f); return g ? "pageXOffset" in g ? g[a ? "pageYOffset" : "pageXOffset"] : d.support.boxModel && g.document.documentElement[e] || g.document.body[e] : f[e] } }), d.each(["Height", "Width"], function (a, c) { var e = c.toLowerCase(); d.fn["inner" + c] = function () { return this[0] ? parseFloat(d.css(this[0], e, "padding")) : null }, d.fn["outer" + c] = function (a) { return this[0] ? parseFloat(d.css(this[0], e, a ? "margin" : "border")) : null }, d.fn[e] = function (a) { var f = this[0]; if (!f) return a == null ? null : this; if (d.isFunction(a)) return this.each(function (b) { var c = d(this); c[e](a.call(this, b, c[e]())) }); if (d.isWindow(f)) { var g = f.document.documentElement["client" + c]; return f.document.compatMode === "CSS1Compat" && g || f.document.body["client" + c] || g } if (f.nodeType === 9) return Math.max(f.documentElement["client" + c], f.body["scroll" + c], f.documentElement["scroll" + c], f.body["offset" + c], f.documentElement["offset" + c]); if (a === b) { var h = d.css(f, e), i = parseFloat(h); return d.isNaN(i) ? h : i } return this.css(e, typeof a === "string" ? a : a + "px") } }), a.jQuery = a.$ = d })(window);
/*!
 * jQuery UI 1.8.13
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI
 */
(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13",
keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
 * jQuery UI Widget 1.8.13
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Widget
 */
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*
 * jQuery UI Position 1.8.13
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Position
 */
(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
;/*
 * jQuery UI Autocomplete 1.8.13
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Autocomplete
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 */
(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
;/*
 * jQuery UI Datepicker 1.8.13
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	jquery.ui.core.js
 */
(function(d,B){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a",
"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},
_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,
b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);
if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);
return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);
if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/
2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,
"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=
false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=
true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==B&&f.minDate===B)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==B&&f.maxDate===B)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=
this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();
c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();
a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==B?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=
null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=
null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],
top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");
c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},
_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-
g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=
null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var C=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&C?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,C,K){p=d.map(o(p)?K:C,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=
x[1];if(b.substr(s,w.length).toLowerCase()==w.toLowerCase()){E=x[0];s+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(A))throw"Unexpected literal at position "+s;s++},s=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=
new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=
c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,
h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;
case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+
1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==B?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,
f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,
c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=
parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+z+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
z+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){for(var O=
"",G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?
f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var D=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}y+=D+"</tr></thead><tbody>";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<D;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&q<k||o&&q>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(q.getTime()==P.getTime()&&g==a.selectedMonth&&
a._keyEvent||E.getTime()==q.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!C?"":" "+I[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||C)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+z+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(F&&!C?"&#xa0;":L?'<span class="ui-state-default">'+q.getDate()+
"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+
a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?
r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=
(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,
"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,
b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!=
"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));
return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&
arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery);
;
/*
* jQuery UI Autocomplete Select First Extension
*
* Copyright 2010, Scott González (http://scottgonzalez.com)
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* http://github.com/scottgonzalez/jquery-ui-extensions
*/
(function ($) {

	$(".ui-autocomplete-input").live("autocompleteopen", function () {
		var autocomplete = $(this).data("autocomplete"),
		menu = autocomplete.menu;

		if (!autocomplete.options.selectFirst) {
			return;
		}

		menu.activate($.Event({ type: "mouseenter" }), menu.element.children().first());
	});

} (jQuery));

/*
* jQuery UI Autocomplete Auto Select Extension
*
* Copyright 2010, Scott González (http://scottgonzalez.com)
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* http://github.com/scottgonzalez/jquery-ui-extensions
*/
(function ($) {

	$.ui.autocomplete.prototype.options.autoSelect = true;
	$(".ui-autocomplete-input").live("blur", function (event) {
		var autocomplete = $(this).data("autocomplete");
		if (!autocomplete.options.autoSelect || autocomplete.selectedItem) { return; }

		var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i");
		autocomplete.widget().children(".ui-menu-item").each(function () {
			var item = $(this).data("item.autocomplete");
			if (matcher.test(item.label || item.value || item)) {
				autocomplete.selectedItem = item;
				return false;
			}
		});
		if (autocomplete.selectedItem) {
			autocomplete._trigger("select", event, { item: autocomplete.selectedItem });
		}
	});

} (jQuery));
/*
 * jQuery Tools 1.2.2 - The missing UI library for the Web
 * 
 * [tooltip, tooltip.slide, tooltip.dynamic, overlay, toolbox.expose]
 * 
 * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
 * 
 * http://flowplayer.org/tools/
 * 
 * File generated: Thu May 27 11:55:26 GMT 2010
 */
(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function t(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=n[b.effect],k,r=a.is(":input"),u=r&&a.is(":checkbox, :radio, select, :button"),
s=a.attr("type"),l=b.events[s]||b.events[r?u?"widget":"input":"def"];if(!q)throw'Nonexistent effect "'+b.effect+'"';l=l.split(/,\s*/);if(l.length!=2)throw"Tooltip: bad events configuration for "+s;a.bind(l[0],function(d){if(b.predelay){clearTimeout(i);j=setTimeout(function(){c.show(d)},b.predelay)}else c.show(d)}).bind(l[1],function(d){if(b.delay){clearTimeout(j);i=setTimeout(function(){c.hide(d)},b.delay)}else c.hide(d)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,
{show:function(d){if(!e){if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",top:g.top,left:g.left});k=true;q[0].call(c,function(){d.type="onShow";k="full";h.trigger(d)});
g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(l[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){k=false;n[b.effect][1].call(c,function(){d.type="onHide";k=false;h.trigger(d)});return c}},isShown:function(d){return d?k=="full":k},getConf:function(){return b},
getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.2"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",
tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,
{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new t(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<div class="close"></div>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.2"};a.tools.overlay={addEffect:function(d,
b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
(function(b){function k(){if(b.browser.msie){var a=b(document).height(),d=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a-d<20?d:a]}return[b(window).width(),b(document).height()]}function h(a){if(a)return a.call(b.mask)}b.tools=b.tools||{version:"1.2.2"};var l;l=b.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,startOpacity:0,color:"#fff",onLoad:null,
onClose:null}};var c,i,f,g,j;b.mask={load:function(a,d){if(f)return this;if(typeof a=="string")a={color:a};a=a||g;g=a=b.extend(b.extend({},l.conf),a);c=b("#"+a.maskId);if(!c.length){c=b("<div/>").attr("id",a.maskId);b("body").append(c)}var m=k();c.css({position:"absolute",top:0,left:0,width:m[0],height:m[1],display:"none",opacity:a.startOpacity,zIndex:a.zIndex});a.color&&c.css("backgroundColor",a.color);if(h(a.onBeforeLoad)===false)return this;a.closeOnEsc&&b(document).bind("keydown.mask",function(e){e.keyCode==
27&&b.mask.close(e)});a.closeOnClick&&c.bind("click.mask",function(e){b.mask.close(e)});b(window).bind("resize.mask",function(){b.mask.fit()});if(d&&d.length){j=d.eq(0).css("zIndex");b.each(d,function(){var e=b(this);/relative|absolute|fixed/i.test(e.css("position"))||e.css("position","relative")});i=d.css({zIndex:Math.max(a.zIndex+1,j=="auto"?0:j)})}c.css({display:"block"}).fadeTo(a.loadSpeed,a.opacity,function(){b.mask.fit();h(a.onLoad)});f=true;return this},close:function(){if(f){if(h(g.onBeforeClose)===
false)return this;c.fadeOut(g.closeSpeed,function(){h(g.onClose);i&&i.css({zIndex:j})});b(document).unbind("keydown.mask");c.unbind("click.mask");b(window).unbind("resize.mask");f=false}return this},fit:function(){if(f){var a=k();c.css({width:a[0],height:a[1]})}},getMask:function(){return c},isLoaded:function(){return f},getConf:function(){return g},getExposed:function(){return i}};b.fn.mask=function(a){b.mask.load(a);return this};b.fn.expose=function(a){b.mask.load(a,this);return this}})(jQuery);

var AjaxBlock = {
    DisableLoadingIndicator: false,
    IsAjaxCallRunning: false,

    init: function () {
        $(document).ajaxStart(function () {
            AjaxBlock.IsAjaxCallRunning = true;

            if (!AjaxBlock.DisableLoadingIndicator)
                LoadingIndicator.show();
        });

        $(document).ajaxStop(function () {
            AjaxBlock.IsAjaxCallRunning = false;

            LoadingIndicator.hide();
        });
    }
}

$(document).ready(function () {
    AjaxBlock.init();
});
var ErrorHandler = {

	ErrorOccurredText: 'Ett fel har tyvärr inträffat.',
	ContactCustomerServiceText: 'Var god försök igen senare eller kontakta kundtjänst om felet kvarstår.',

    show: function (XMLHttpRequest, textStatus, errorThrown) {
        if (XMLHttpRequest.responseText != undefined) {
            alert(ErrorHandler.ErrorOccurredText + ":\n\n" + XMLHttpRequest.responseText);
        } else if (errorThrown != undefined) {
           	alert(ErrorHandler.ErrorOccurredText + ": " + errorThrown + " (" + textStatus + ")");
        } else {
           	alert(ErrorHandler.ErrorOccurredText + ". " + ErrorHandler.ContactCustomerServiceText);
        }
    }
}
$(document).ready(function () {
    $("img[title]").tooltip({
        tipClass: 'tooltipContainer',
        effect: 'fade',
        fadeOutSpeed: 100,
        predelay: 0,
        position: "bottom right",
        offset: [-10, 10]
    });
});

function confirmReturnTripDate() {
    if (toTripDepartureDate == returnTripDepartureDate) {
        showPopWin(document.getElementById('popupConfirmReturnTripDialogContent'), 'Bekräfta datum för återresa', 400, 300, function() { __doPostBack("ctl00$MainContent$Booking1$StepChooseDepartureNextButton", ""); });
    } else {
        __doPostBack("ctl00$MainContent$Booking1$StepChooseDepartureNextButton", "");
    }
}

function getQueryStringValue(qKey) {
	var qStr = location.search.substring(1).split("&");
	var params = Array();
	for (i in qStr)
	{
		var x = qStr[i].split("=", 2);
		var key = x[0];
		var value = x[1];
		if (qKey == key)
		{
			return value == undefined ? "" : value;
		}
	}
    return null;
}

function selectBoxSetSelectedValue(id, value) {
    var select = document.getElementById(id);

    for (i = 0; i < select.options.length; i++) {
        if (select.options[i].value == value) {
            select.options[i].selected = true;
            return;
        }
    }
}

function checkDayTrip(day, month, year, returnDay, returnMonth, returnYear, daytrip, returnTrip) {
    try {
        if (!document.getElementById(daytrip).checked) {
            var enableDayTripWarning = true;

            if (document.getElementById(returnTrip).checked
                && document.getElementById(returnDay).selectedIndex == document.getElementById(day).selectedIndex
                && document.getElementById(returnMonth).selectedIndex == document.getElementById(month).selectedIndex
                && document.getElementById(returnYear).selectedIndex == document.getElementById(year).selectedIndex) {
                if (confirm('Du har valt att resa tillbaka samma dag. Genom att att boka en dagstur kan du resa billigare. Vill du boka en dagstur?')) {
                    document.getElementById(daytrip).checked = true;
                    disableReturnDate(day, month, year, returnDay, returnMonth, returnYear);
                    enableDayTripWarning = false;
                }
            }

            if (enableDayTripWarning && isChangingBooking && oldBookingIsDayTrip) {
                if (document.getElementById(returnTrip).checked) {
                    alert('Du har valt att boka om en dagstur. Det innebär att både utresa och återresa kommer att bokas om.');
                }
                else {
                    alert('Du har valt att boka om en dagstur. Det innebär att återresan kommer att avbokas.');
                }
            }
        }
    } catch (e) { }

    return true;
}

function disableAllInputs() {
    $("#booking input").attr("disabled", true);
    $("#booking select").attr("disabled", true);
}
/*
    http://www.JSON.org/json2.js
    2009-09-29

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html


    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.


    This file creates a global JSON object containing two methods: stringify
    and parse.

        JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array of strings.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or '&nbsp;'),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the value

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 ? '0' + n : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array of strings, then it will be
            used to select the members to be serialized. It filters the results
            such that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });
            // text is '["Date(---current time---)"]'


        JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.
*/

/*jslint evil: true, strict: false */

/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
    lastIndex, length, parse, prototype, push, replace, slice, stringify,
    test, toJSON, toString, valueOf
*/


// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.

if (!this.JSON) {
    this.JSON = {};
}

(function () {

    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function (key) {

            return isFinite(this.valueOf()) ?
                   this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z' : null;
        };

        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;


    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }


    function str(key, holder) {

// Produce a string from holder[key].

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

// What happens next depends on the value's type.

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

            return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

        case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

            if (!value) {
                return 'null';
            }

// Make an array to hold the partial results of stringifying this object value.

            gap += indent;
            partial = [];

// Is the value an array?

            if (Object.prototype.toString.apply(value) === '[object Array]') {

// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

// If the replacer is an array, use it to select the members to be stringified.

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

// Otherwise, iterate through all of the keys in the object.

                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

// If the JSON object does not yet have a stringify method, give it one.

    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

            var i;
            gap = '';
            indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

// If the space parameter is a string, it will be used as the indent string.

            } else if (typeof space === 'string') {
                indent = space;
            }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

            return str('', {'': value});
        };
    }


// If the JSON object does not yet have a parse method, give it one.

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }

// If the text is not JSON parseable, then a SyntaxError is thrown.

            throw new SyntaxError('JSON.parse');
        };
    }
}());

var LoadingIndicator = {
	Text: 'Laddar, var god vänta...',
	AppendTo: "#wrap",
	UiBlockOpacity: "0.3",
	HeightOffset: 200,

	init: function () {
		setInterval(LoadingIndicator.cleanup, 500);
	},

	show: function () {
		var info = $('<div id="loadingIndicator" />')
            .html(LoadingIndicator.Text)
            .hide()
            .appendTo(LoadingIndicator.AppendTo);

		info
			.css("top", info.height() / 2.0 + $(window).scrollTop() + LoadingIndicator.HeightOffset)
			.css("left", $(window).width() / 2.0 - info.outerWidth() / 2.0)

		info.show();

		$('<div id="uiBlock" />')
            .css("opacity", LoadingIndicator.UiBlockOpacity)
            .height($(document).height())
            .appendTo("body")
            .show()
            .css("background-image", "none");

		/*setTimeout(function() {
		$("#uiBlock")
		.fadeTo("slow", 0.33);
		}, 2000);*/
	},

	hide: function () {
		$("#uiBlock").remove();
		$("#loadingIndicator").remove();
	},

	cleanup: function () {
		if (!$("#uiBlock").length && $("#loadingIndicator").length) {
			$("#loadingIndicator").remove();
		}
	}
}

$(document).ready(function() {
    //LoadingIndicator.init();
});
var ValidationHandler = {
    showAsModal: false,

    generateErrorHtml: function (errors, printTo, showAsModal) {
        if (showAsModal == undefined) {
            showAsModal = ValidationHandler.showAsModal;
        }

        if (errors.length > 0) {
            var html = "<ul>";

            for (var i = 0; i < errors.length; i++) {
                var errMsg = (errors[i] instanceof Array) ? errors[i][0] : errors[i];
                html += "<li>" + errMsg + "</li>";
            }

            html += "</ul>";

            $(printTo).html(html);

            if (!showAsModal) {
                $(printTo).show();
            } else {
                var close = $('<div class="close"></div>');

                $(printTo).prepend(close);

                var overlay = $(printTo).addClass('modal').overlay({
                    expose: { color: '#333',
                        loadSpeed: 150,
                        opacity: 0.75
                    },
                    closeOnClick: true,
                    api: true,
                    top: '30%',
                    close: '.close'
                });

                close.click(function () {
                    overlay.close();
                });

                overlay.load();
            }
        }
        else {
            $(printTo).html("").hide();
        }
    }
}
var ActivePaymentsChecker = {
    HeaderText: "OBS!",
    InfoText: "Det finns en eller flera betalda bokningar som du inte har kvitterat:",
    ShowBookingsLinkText: "Klicka här för att se och kvittera biljett(erna)",
    FromText: "Från",
    ToText: "Till",
    DepartureDateText: "Avgångstid",
    AppendTo: "body",
    CheckInterval: 30000,
    IsRunningCheck: false,

    Init: function () {
        setInterval(ActivePaymentsChecker.CheckActivePayments, ActivePaymentsChecker.CheckInterval);
        $(ActivePaymentsChecker.AppendTo).prepend('<div id="activePaymentOverlay" style="display: none;"></div>');
    },

    CheckActivePayments: function () {
        if (!ActivePaymentsChecker.IsRunningCheck && !AjaxBlock.IsAjaxCallRunning) {
            ActivePaymentsChecker.IsRunningCheck = true;
            AjaxBlock.DisableLoadingIndicator = true;

            $.ajax({
                type: "POST",
                url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/ActivePayments.asmx/HasActivePaymentCompleted",
                data: JSON.stringify({}),
                dataType: "json",
                contentType: "application/json",
                success: function (data, textStatus) {
                    if (data.d.length > 0) {
                        ActivePaymentsChecker.ShowDialog(data.d);
                    }

                    ActivePaymentsChecker.IsRunningCheck = false;
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    ActivePaymentsChecker.IsRunningCheck = false;
                }
            });

            AjaxBlock.DisableLoadingIndicator = false;
        }
    },

    ShowDialog: function (bookings) {
        var container = $("#activePaymentOverlay");

        var html = "";

        html += "<h2>" + ActivePaymentsChecker.HeaderText + "</h2>";
        html += "<p>" + ActivePaymentsChecker.InfoText + "</p>";
        html += '<ul class="bookings">';

        for (var i = 0; i < bookings.length; i++) {
            html += "<li><ul>";
            html += '<li class="fromStop">' + ActivePaymentsChecker.FromText + ': <span class="fromStopName">' + bookings[i].FromCity + ' (' + bookings[i].FromStop + ')' + '</span></li>';
            html += '<li class="toStop">' + ActivePaymentsChecker.ToText + ': <span class="toStopName">' + bookings[i].ToCity + ' (' + bookings[i].ToStop + ')' + '</span></li>';
            html += '<li class="departureDate">' + ActivePaymentsChecker.DepartureDateText + ': <span class="departureDate">' + bookings[i].DepartureDate + ' ' + bookings[i].DepartureTime + '</span></li>';
            html += "</ul></li>";
        }

        html += "</ul>";

        html += '<ul class="menu">';
        html += '<li><a href="#showfinished" onclick="ActivePaymentsChecker.ShowFinishedBookings();">' + ActivePaymentsChecker.ShowBookingsLinkText + '</a></li>';
        html += "</ul>";

        container.html(html);

        var close = $('<div class="closeActivePaymentOverlay" style="display: none;"></div>');
        $(container).prepend(close);

        var overlay = $(container).addClass('modal').overlay({
            expose: { color: '#333',
                loadSpeed: 150,
                opacity: 0.75
            },
            closeOnClick: false,
            api: true,
            top: '30%',
            close: '.closeActivePaymentOverlay'
        });

        overlay.load();
    },

    ShowFinishedBookings: function () {
        $.ajax({
            type: "POST",
            async: false,
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/ActivePayments.asmx/ShowFinishedBookings",
            data: JSON.stringify({}),
            dataType: "json",
            contentType: "application/json",
            success: function (data, textStatus) {
                if (data.d.length > 0) {
                    location.href = data.d;
                }
            }
        });
    }
};

$(document).ready(function () {
    ActivePaymentsChecker.Init();
});
var TestPaymentProvider = {
	start: function (type, paymentMethodId) {
		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Test/TestPaymentWebService.asmx/StartPayment",
			data: JSON.stringify({ type: type, paymentMethodId: paymentMethodId }),
			dataType: "json",
			success: function (data, textStatus) {
				location.href = location.protocol + "//" + location.host + data.d;
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				
			}
		});
	}
}
var PayexPaymentProvider = {
    payWin: null,
    PaymentWindowWillBeClosedMessage: 'Betalningsfönstret kommer att stängas och betalningen avbrytas om du går tillbaka. Är det säkert att du vill gå tillbaka?',
    AcceptsAgreements: true,

    start: function (type, paymentProviderId, agreementId) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Payex/PayexPaymentWebService.asmx/StartPayment",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ type: type, paymentProviderId: paymentProviderId, agreementId: agreementId }),
            dataType: "json",
            success: function (data, textStatus) {
                location.href = data.d;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {

            }
        });
    }
}
var NetaxeptPaymentProvider = {
	payWin: null,
	PaymentWindowWillBeClosedMessage: 'Betalningsfönstret kommer att stängas och betalningen avbrytas om du går tillbaka. Är det säkert att du vill gå tillbaka?',

	start: function (type, paymentMethodId) {
		NetaxeptPaymentProvider.openPaymentWindow(type, paymentMethodId);

		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Netaxept/NetaxeptPaymentWebService.asmx/StartPayment",
			data: {},
			dataType: "xml",
			success: function (data, textStatus) {
				$("#paymentStepContainer").html($(data).find("string").text());

				$("#launchPayWindowButton").unbind("click");
				$("#launchPayWindowButton").click(function () {
					NetaxeptPaymentProvider.openPaymentWindow(type, paymentMethodId);
				});

				$("#netaxeptCancelButton").unbind("click");
				$("#netaxeptCancelButton").click(function () {
					NetaxeptPaymentProvider.confirmClosePaymentWindow();
				});
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				
			}
		});
	},

	openPaymentWindow: function (type, paymentMethodId) {
		NetaxeptPaymentProvider.payWin = window.open('/Modules/WebPublisher.Modules.TravelBooking/Payment/Netaxept/NetaxeptStartPayment.aspx?type=' + type + '&paymentMethodId=' + paymentMethodId, 'paywin', 'resizable,scrollbars,status,width=640,height=480');

		try {
			NetaxeptPaymentProvider.payWin.focus();
		} catch (e) { }

		return true;
	},

	confirmClosePaymentWindow: function () {
		if (confirm(NetaxeptPaymentProvider.PaymentWindowWillBeClosedMessage)) {
			if (NetaxeptPaymentProvider.payWin != null) {
				try {
					NetaxeptPaymentProvider.payWin.close();
				} catch (e) { }
			}

			//PaymentSelectorWSProxy.restartPaymentSelection();
			location.reload();

			return true;
		} else {
			return false;
		}
	},

	checkIsPaymentComplete: function () {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Netaxept/NetaxeptPaymentWebService.asmx/CheckIsPaymentComplete",
			data: {},
			dataType: "json",
			success: function (data, textStatus) {

			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	timeoutCounterElapsed: 0,
	timeoutCounter: null,
	timeoutLimit: null,
	timeoutURL: null,

	startTimeoutCheck: function () {
		NetaxeptPaymentProvider.timeoutCounter = setInterval("NetaxeptPaymentProvider.timeoutCheckTick()", 15000);
	},

	timeoutCheckTick: function () {
		NetaxeptPaymentProvider.checkIsPaymentComplete();

		NetaxeptPaymentProvider.timeoutCounterElapsed += 15;


		if (NetaxeptPaymentProvider.timeoutCounterElapsed >= NetaxeptPaymentProvider.timeoutLimit * 60) {
			try {
				NetaxeptPaymentProvider.payWin.close();
			} catch (e) { }

			location.replace(NetaxeptPaymentProvider.timeoutURL);
		}
	},

	closeWindow: function (gotoUrl) {
		try {
			if (window.opener != null) {
				window.opener.location.replace(gotoUrl);
				window.close();
			} else {
				location.replace(gotoUrl);
			}
		} catch (e) {
			location.replace(gotoUrl);
		}
	}
}
var KlarnaPaymentProvider = {
    currentType: null,
    currentPaymentMethodId: null,

    start: function (type, paymentMethodId, callback) {
        KlarnaPaymentProvider.currentType = type;
        KlarnaPaymentProvider.currentPaymentMethodId = paymentMethodId;
        KlarnaPaymentProvider.getPaymentStep(false, callback);
    },

    getPaymentStep: function (isAddressSelected, callback) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Klarna/KlarnaPaymentWebService.asmx/GetPaymentStep",
            data: {
                type: KlarnaPaymentProvider.currentType,
                paymentMethodId: KlarnaPaymentProvider.currentPaymentMethodId,
                isAddressSelected: isAddressSelected
            },
            dataType: "xml",
            success: function (data, textStatus) {
                $("#paymentStepContainer").html($(data).find("string").text());

                KlarnaPaymentProvider.subscribeToEvents();

                if (callback != undefined) {
                    callback();
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    selectAddress: function (addressIndex, callback) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Klarna/KlarnaPaymentWebService.asmx/SelectAddress",
            data: {
                addressIndex: addressIndex
            },
            dataType: "xml",
            success: function (data, textStatus) {
                KlarnaPaymentProvider.getPaymentStep(true);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    validateAdditionalInfo: function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Klarna/KlarnaPaymentWebService.asmx/ValidateAdditionalInfo",
            data: JSON.stringify({
                ssn: ($("#KlarnaSsn").length) ? $("#KlarnaSsn").val() : "",
                email: ($("#KlarnaEmail").length) ? $("#KlarnaEmail").val() : "",
                yearlySalary: ($("#KlarnaYearlyIncome").length) ? $("#KlarnaYearlyIncome").val() : ""
            }),
            dataType: "json",
            success: function (data, textStatus) {
                if (data.d.length == 0) {
                    KlarnaPaymentProvider.pay();
                } else {
                    ValidationHandler.generateErrorHtml(data.d, "#errorMsgContainer");
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    pay: function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Klarna/KlarnaPaymentWebService.asmx/Pay",
            data: JSON.stringify({
                type: KlarnaPaymentProvider.currentType,
                paymentMethodId: KlarnaPaymentProvider.currentPaymentMethodId,
                ssn: ($("#KlarnaSsn").length) ? $("#KlarnaSsn").val() : "",
                email: ($("#KlarnaEmail").length) ? $("#KlarnaEmail").val() : "",
                yearlySalary: ($("#KlarnaYearlyIncome").length) ? $("#KlarnaYearlyIncome").val() : ""
            }),
            dataType: "json",
            success: function (data, textStatus) {
                if (data.d.substr(0, 6) == "error:") {
                    var err = new Array();
                    err.push(data.d.substr(6));
                    ValidationHandler.generateErrorHtml(err, "#errorMsgContainer");
                } else {
                    location.href = location.protocol + "//" + location.host + data.d;
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    subscribeToEvents: function () {
        $("#klarnaCancelButton").click(function () {
            PaymentSelectorWSProxy.restartPaymentSelection();
        });

        $("#klarnaSelectAddressButton").click(function () {
            KlarnaPaymentProvider.selectAddress($("input[name = 'SelectAddressRadio']:checked").val());
        });

        $("#ChangeInfoButton").click(function () {
            BookingWebServiceProxy.goToPreviousStep();
        });

        $("#ChangeToKlarnaInfoButton").click(function () {
            KlarnaPaymentProvider.selectAddress(0);
        });

        $("#KlarnaBuyButton").click(function () {
            KlarnaPaymentProvider.validateAdditionalInfo();
        });

        $("#KlarnaCancelButton").click(function () {
            PaymentSelectorWSProxy.restartPaymentSelection();
        });
    }
}
var FreePaymentProvider = {
    start: function (type, paymentMethodId) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Free/FreePaymentWebService.asmx/StartPayment",
            data: JSON.stringify({ type: type, paymentMethodId: paymentMethodId }),
            dataType: "json",
            success: function (data, textStatus) {
                location.href = location.protocol + "//" + location.host + data.d;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                
            }
        });
    }
}
var DibsPaymentProvider = {
	payWin: null,

	start: function (type, paymentMethodId) {
		DibsPaymentProvider.openPaymentWindow(type, paymentMethodId);

		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Dibs/DibsPaymentWebService.asmx/StartPayment",
			data: {},
			dataType: "xml",
			success: function (data, textStatus) {
				$("#paymentStepContainer").html($(data).find("string").text());

				$("#launchPayWindowButton").unbind("click");
				$("#launchPayWindowButton").click(function () {
					DibsPaymentProvider.openPaymentWindow(type, paymentMethodId);
				});

				$("#dibsCancelButton").unbind("click");
				$("#dibsCancelButton").click(function () {
					DibsPaymentProvider.confirmClosePaymentWindow();
				});
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {

			}
		});
	},

	openPaymentWindow: function (type, paymentMethodId) {
		DibsPaymentProvider.payWin = window.open('/Modules/WebPublisher.Modules.TravelBooking/Payment/Dibs/StartPayment.aspx?type=' + type + '&paymentMethodId=' + paymentMethodId, 'paywin', 'resizable,scrollbars,status,width=640,height=480');

		try {
			DibsPaymentProvider.payWin.focus();
		} catch (e) { }

		return true;
	},

	confirmClosePaymentWindow: function () {
		if (confirm('Betalningsfönstret kommer att stängas och betalningen avbrytas om du går tillbaka. Är det säkert att du vill gå tillbaka?')) {
			if (DibsPaymentProvider.payWin != null) {
				try {
					DibsPaymentProvider.payWin.close();
				} catch (e) { }
			}

			PaymentSelectorWSProxy.restartPaymentSelection();

			return true;
		} else {
			return false;
		}
	},

	checkIsPaymentComplete: function () {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Dibs/DibsPaymentWebService.asmx/CheckIsPaymentComplete",
			data: {},
			dataType: "json",
			success: function (data, textStatus) {

			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	timeoutCounterElapsed: 0,
	timeoutCounter: null,
	timeoutLimit: null,
	timeoutURL: null,

	startTimeoutCheck: function () {
		DibsPaymentProvider.timeoutCounter = setInterval("DibsPaymentProvider.timeoutCheckTick()", 15000);
	},

	timeoutCheckTick: function () {
		DibsPaymentProvider.checkIsPaymentComplete();

		DibsPaymentProvider.timeoutCounterElapsed += 15;


		if (DibsPaymentProvider.timeoutCounterElapsed >= DibsPaymentProvider.timeoutLimit * 60) {
			try {
				DibsPaymentProvider.payWin.close();
			} catch (e) { }

			location.replace(DibsPaymentProvider.timeoutURL);
		}
	},

	closeWindow: function (gotoUrl, closeInstantly) {

		if (closeInstantly == undefined) closeInstantly = false;

		try {
			if (window.opener != null) {
				window.opener.location.replace(gotoUrl);

				if (closeInstantly) {
					window.close();
				} else {
					setInterval(DibsPaymentProvider.checkIsBookingCompletedLoaded, 250);
				}
			} else {
				location.replace(gotoUrl);
			}
		} catch (e) {
			location.replace(gotoUrl);
		}
	},

	checkIsBookingCompletedLoaded: function () {
		try {
			var check = window.opener.document.getElementById("isReturnFromPaymentProviderSuccessful");

			if (check != null) {
				window.close();
			}
		} catch (e) { }
	}
}

var ContractCustomerPaymentProvider = {
    start: function (type, paymentMethodId) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/ContractCustomer/ContractCustomerPaymentWebService.asmx/StartPayment",
            data: JSON.stringify({ type: type, paymentMethodId: paymentMethodId }),
            dataType: "json",
            success: function (data, textStatus) {
                location.href = location.protocol + "//" + location.host + data.d;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                
            }
        });
    }
}
var AgentPaymentProvider = {
    start: function (type, paymentMethodId) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/Payment/Agent/AgentPaymentWebService.asmx/StartPayment",
            data: JSON.stringify({ type: type, paymentMethodId: paymentMethodId }),
            dataType: "json",
            success: function (data, textStatus) {
                location.href = location.protocol + "//" + location.host + data.d;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                
            }
        });
    }
}
var BookingWebServiceProxy = {
    bookingData: {},
    nextStepUri: "",
    prevStepUri: "",
    currentStepUri: "",

    updateSingleProperty: function (o, callback) {
        bookingData = {};

        o.each(function () {
            BookingWebServiceProxy.addInputToJsonData($(this));
        });

        BookingWebServiceProxy.addHiddenInputsToJsonData();

        BookingWebServiceProxy.sendData(false, function () {
            BookingSummaryWSProxy.update();
            BookingCartWSProxy.updateCart();

            if (callback != undefined) {
                callback();
            }
        });
    },

    updateSinglePropertyCustom: function (key, value, callback) {
        bookingData = {};
        BookingWebServiceProxy.addToJsonData(key, value);
        BookingWebServiceProxy.addHiddenInputsToJsonData();

        BookingWebServiceProxy.sendData(false, function () {
            BookingSummaryWSProxy.update();

            if (callback != undefined) {
                callback();
            }
        });
    },

    updateCurrentBooking: function (increaseStep, async, callback) {
        if (async == undefined)
            async = true;

        bookingData = {};

        BookingWebServiceProxy.addHiddenInputsToJsonData();

        $("#booking input[type='text']").each(function () {
            BookingWebServiceProxy.addInputToJsonData($(this));
        });

        $("#booking input[type='password']").each(function () {
            BookingWebServiceProxy.addInputToJsonData($(this));
        });

        $("#booking input:checked").each(function () {
            BookingWebServiceProxy.addInputToJsonData($(this));
        });

        $("#booking select").each(function () {
            BookingWebServiceProxy.addInputToJsonData($(this));
        });

        if (callback == undefined) {
            BookingWebServiceProxy.sendData(increaseStep, function () {
                if (!increaseStep) {
                    BookingSummaryWSProxy.update();
                }
            }, async);
        } else {
            BookingWebServiceProxy.sendData(increaseStep, callback);
        }

    },

    addHiddenInputsToJsonData: function () {
        $("#booking input[type='hidden'][class != 'postIgnore']").each(function () {
            BookingWebServiceProxy.addInputToJsonData($(this));
        });
    },

    sendData: function (increaseStep, callback, async) {
        if (async == undefined)
            async = true;
        $.ajax({
            type: "POST",
            async: async,
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingWebService.asmx/UpdateCurrentBooking",
            data: JSON.stringify({ data: bookingData, increaseStep: increaseStep }),
            dataType: "json",
            success: function (data, textStatus) {
                if (increaseStep && data.d.length == 0) {
                    LoadingIndicator.show();
                    location.href = BookingWebServiceProxy.nextStepUri;
                } else if (data.d[0] == "reloadstep") {
                    LoadingIndicator.show();
                    location.reload();
                } else if (data.d[0] == "redirectinvalidsteptostepuri") {
                    LoadingIndicator.show();
                    location.href = BookingWebServiceProxy.currentStepUri;
                } else {
                    ValidationHandler.generateErrorHtml(data.d, "#errorMsgContainer");
                }

                if (callback != undefined) {
                    callback(data.d);
                }
            } //,
            //			error: function (XMLHttpRequest, textStatus, errorThrown) {
            //				ErrorHandler.show(XMLHttpRequest.statusText);
            //			}
        });
    },

    goToPreviousStep: function () {
        if (BookingWebServiceProxy.prevStepUri.length > 0) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingWebService.asmx/GoToPreviousStep",
                data: JSON.stringify({ previousValidStep: $("#previousValidStep").val() }),
                dataType: "json",
                success: function (data, textStatus) {
                    location.href = BookingWebServiceProxy.prevStepUri;
                } //,
                //error: function (XMLHttpRequest, textStatus, errorThrown) {
                //ErrorHandler.show(XMLHttpRequest.statusText);
                //}
            });
        }
    },

    addInputToJsonData: function (i) {
        BookingWebServiceProxy.addToJsonData(i.attr('name'), i.val());
    },

    addToJsonData: function (key, value) {
        bookingData[key] = value;
    },

    gotoNextStep: function () {
        BookingWebServiceProxy.updateCurrentBooking(true);
    },

    subscribeToButtonEvents: function () {
        $("#nextStep").click(function () {
            BookingWebServiceProxy.gotoNextStep();
        });

        $("#prevStep").click(function () {
            BookingWebServiceProxy.goToPreviousStep();
        });
    },

    gotoPaymentStep: function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingWebService.asmx/GoToPaymentStep",
            data: '{}',
            dataType: "json",
            success: function (data, textStatus) {
                location.href = data.d;
            } //,
            //error: function (XMLHttpRequest, textStatus, errorThrown) {
            //	ErrorHandler.show(XMLHttpRequest.statusText);
            //}
        });
    },

    gotoCheckout: function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingWebService.asmx/GoToCheckout",
            data: '{}',
            dataType: "json",
            success: function (data, textStatus) {
                if (data.d[0][0] == "ok") {
                    location.href = data.d[0][1];
                }
                else {
                    data.d.shift();

                    var bookingIdList = new Array();

                    for (var i = 1; i < data.d[0].length; i++) {
                        var booking = new Object();
                        booking.BookingId = data.d[0][i];
                        booking.ErrorCode = 0;
                        bookingIdList.push(booking);
                    }

                    BookingCartWSProxy.MarkErrorBookings(bookingIdList);
                    ValidationHandler.generateErrorHtml(data.d, "#errorMsgContainer");
                }
            } //,
            //error: function (XMLHttpRequest, textStatus, errorThrown) {
            //	ErrorHandler.show(XMLHttpRequest.statusText);
            //}
        });
    }
}

$(document).ready(function () {
    BookingWebServiceProxy.subscribeToButtonEvents();
});

var StopSelectorWSProxy = {
    SelectedFromStop: null,
    SelectedToStop: null,
    _selectionChangedListeners: new Array(),
    ShowNumberOfPopular: 3,

    getToStops: function (fromStopId, transformSource, callbackFunc) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/StopSelector/StopSelectorWebService.asmx/GetToStops",
            data: {
                fromStopId: fromStopId,
                transformSource: transformSource
            },
            dataType: "xml",
            success: function (data, textStatus) {
                callbackFunc($(data).find("string").text());
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    getStopData: function (stopId) {
        var s = null;

        $.ajax({
            type: "POST",
            async: false,
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/StopSelector/StopSelectorWebService.asmx/GetStopData",
            data: JSON.stringify({ stopId: stopId }),
            dataType: "json",
            contentType: "application/json",
            success: function (data, textStatus) {
                s = data.d;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });

        return s;
    },

    SearchFromStops: function (qItem, callback) {
        AjaxBlock.DisableLoadingIndicator = true;

		$.ajax({
			type: "POST",
			async: true,
			url: "/modules/WebPublisher.Modules.TravelBooking/PageParts/StopSelector/StopSelectorWebService.asmx/GetFromStopsAutoComplete",
			data: JSON.stringify({ term: qItem.term, showNumberOfPopular: StopSelectorWSProxy.ShowNumberOfPopular }),
			dataType: "json",
			contentType: "application/json",
			success: function (data, textStatus) {
				callback(data.d);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});

        AjaxBlock.DisableLoadingIndicator = false;
    },

    SearchToStops: function (qItem, callback) {
        AjaxBlock.DisableLoadingIndicator = true;

        $.ajax({
            type: "POST",
            async: true,
            url: "/modules/WebPublisher.Modules.TravelBooking/PageParts/StopSelector/StopSelectorWebService.asmx/GetToStopsAutoComplete",
            data: JSON.stringify({ term: qItem.term, fromStopId: $("#fromStopId").val(), showNumberOfPopular: StopSelectorWSProxy.ShowNumberOfPopular }),
            dataType: "json",
            contentType: "application/json",
            success: function (data, textStatus) {
                callback(data.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });

        AjaxBlock.DisableLoadingIndicator = false;
    },

    fromStopSelect: function (event, ui) {
        if (ui != undefined) {
            $("#fromStopId").val(ui.item.id);
            StopSelectorWSProxy.SetSelectedFromStopData(ui.item.id, ui.item.label, ui.item.value, ui.item.PositionLongitude, ui.item.PositionLatitude);
        }
        else {
            $("#fromStopId").val("");
            StopSelectorWSProxy.SetSelectedFromStopData(0, "", "", 0, 0);
        }
    },

    setFromStop: function (id) {
        AjaxBlock.DisableLoadingIndicator = true;

        $.ajax({
            type: "POST",
            async: false,
            url: "/modules/WebPublisher.Modules.TravelBooking/PageParts/StopSelector/StopSelectorWebService.asmx/UpdateFromStop",
            data: "{'fromStopId':'" + id + "'}",
            dataType: "json",
            contentType: "application/json",
            //            success: function (data, textStatus) {
            //                callback(data.d);
            //            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });

        AjaxBlock.DisableLoadingIndicator = false;
    },

    toStopSelect: function (event, ui) {
        if (ui != undefined) {
            $("#toStopId").val(ui.item.id);
            StopSelectorWSProxy.SetSelectedToStopData(ui.item.id, ui.item.label, ui.item.value, ui.item.PositionLongitude, ui.item.PositionLatitude);
        } else {
            $("#toStopId").val("");
            StopSelectorWSProxy.SetSelectedToStopData(0, "", "", 0, 0);
        }
    },

    SetSelectedFromStopData: function (id, label, value, longitude, latitude) {
        StopSelectorWSProxy.SelectedFromStop = {
            id: id,
            label: label,
            value: value,
            PositionLongitude: longitude,
            PositionLatitude: latitude
        };

        StopSelectorWSProxy.OnSelectionChanged();
    },
    SetSelectedToStopData: function (id, label, value, longitude, latitude) {
        StopSelectorWSProxy.SelectedToStop = {
            id: id,
            label: label,
            value: value,
            PositionLongitude: longitude,
            PositionLatitude: latitude
        };

        StopSelectorWSProxy.OnSelectionChanged();
    },

    SelectionChanged: function (listener) {
        StopSelectorWSProxy._selectionChangedListeners.push(listener);
    },

    OnSelectionChanged: function () {
        for (var i = 0; i < StopSelectorWSProxy._selectionChangedListeners.length; i++) {
            StopSelectorWSProxy._selectionChangedListeners[i](StopSelectorWSProxy.SelectedFromStop, StopSelectorWSProxy.SelectedToStop);
        }
    }
}

var SmsSelectorWSProxy = {
	UpdateSelection: function (isSelected, callback) {
		
		BookingWebServiceProxy.updateSinglePropertyCustom("sendticketassms", isSelected, callback);
	}
}
/// <reference path="jquery-1.3.2-vsdoc.js"/>
var SeatSelector = {
    FlashContainers: new Array(),


    outputFlash: function (versionPath, requiredMajorVersion, requiredMinorVersion, requiredRevision, width, height, departureId, relationId, flashUrl, systemUrl, systemId, bookingId, writeToContainer, customerId, selectedSeats, changeOrderId, numberOfTickets, systemId) {
        var protocol = ("https:" == document.location.protocol) ? "https://" : "http://";
        var containerId = 'placebookingflash_' + departureId + '_' + relationId + '_' + systemId + '_' + bookingId;

        selectedSeats = SeatSelector.GetOnlySeatIdFromSelectedSeats(selectedSeats, departureId, relationId, bookingId, systemId);

        writeFlashTag(
            protocol + versionPath,
            width,
            height,
            'middle',
            'transparent',
            containerId,
            'transparent',
            'sameDomain',
            flashUrl,
            requiredMajorVersion,
            requiredMinorVersion,
            requiredRevision,
            'placebookingflash_ac',
            'departureid=' + departureId + '&relationid=' + relationId + '&systemurl=' + systemUrl + '&bookingid=' + bookingId + '&customerid=' + customerId + '&selectedseats=' + selectedSeats + '&changeorderid=' + changeOrderId + '&numberoftickets=' + numberOfTickets + '&systemid=' + systemId,
            writeToContainer);

        if (writeToContainer != "") {
            SeatSelector.FlashContainers.push(writeToContainer);
        } else {
            SeatSelector.FlashContainers.push(containerId);
        }
    },

    GetOnlySeatIdFromSelectedSeats: function (selectedSeats, departureId, relationId, bookingId, systemId) {
        var chunks = selectedSeats.split('|');
        var seats = "";

        for (var i = 0; i < chunks.length - 1; i++) {
            var data = chunks[i].split(':');
            var relation = data[0].split('_');

            if (relation[0] == departureId && relation[1] == relationId && relation[2] == bookingId && relation[3] == systemId) {
                seats += data[1].replace(/;/g, "|");
            }
        }

        return seats;
    },

    IsFlashCreated: function (bookingId, departureId, relationId, systemId) {
        for (var i = 0; i < SeatSelector.FlashContainers.length; i++) {
            if (SeatSelector.FlashContainers[i] == 'placebookingflash_' + departureId + '_' + relationId + '_' + systemId + '_' + bookingId) {
                return true;
            }
        }

        return false;
    },

    enableSeatSelectFlash: function (bookingId, departureId, relationId, systemId) {
        var enableAll = false;

        if (bookingId == undefined) {
            enableAll = true;
        }

        for (var i = 0; i < SeatSelector.FlashContainers.length; i++) {
            var containerIdList = SeatSelector.FlashContainers[i].split("_");

            if (enableAll || (containerIdList[1] == bookingId && containerIdList[2] == departureId && containerIdList[3] == relationId && containerIdList[4] == systemId)) {
                var container = document.getElementById(SeatSelector.FlashContainers[i]);

                if (container == undefined) {
                    container = document.getElementById(SeatSelector.FlashContainers[i] + '_flashcontainer');
                }

                var flash = container.getElementsByTagName("embed")[0];

                if (flash == undefined) {
                    flash = container.getElementsByTagName("object")[0];
                }

                if (flash == undefined) {
                    flash = container;
                }

                var success = false;

                try {
                    flash.startFlash();
                    success = true;
                } catch (e) {
                    success = false;
                }

                if (!success) {
                    setTimeout(function () {
                        SeatSelector.enableSeatSelectFlash(bookingId, departureId, relationId, systemId);
                    }, 500);
                    break;
                }

                if (!enableAll) break;
            }
        }
    },

    disableSeatSelectFlash: function (bookingId, departureId, relationId, systemId) {
        var disableAll = false;

        if (bookingId == undefined) {
            disableAll = true;
        }

        for (var i = 0; i < SeatSelector.FlashContainers.length; i++) {
            var containerIdList = SeatSelector.FlashContainers[i].split("_");

            if (disableAll || (containerIdList[1] == bookingId && containerIdList[2] == departureId && containerIdList[3] == relationId && containerIdList[4] == systemId)) {
                var container = document.getElementById(SeatSelector.FlashContainers[i]);

                if (container == undefined) {
                    container = document.getElementById(SeatSelector.FlashContainers[i] + '_flashcontainer');
                }

                var flash = container.getElementsByTagName("embed")[0];

                if (flash == undefined) {
                    flash = container.getElementsByTagName("object")[0];
                }

                try {
                    flash.hideFlash();
                    success = true;
                } catch (e) {
                    success = false;
                }

                if (!success) {
                    setTimeout(SeatSelector.disableSeatSelectFlash, 500);
                    break;
                }

                if (!disableAll) break;
            }
        }
    },

    setSelectedSeats: function (seats, departureID, relationID, bookingId, systemId) {
        var inputField = $("#selectedseats_" + bookingId + "_" + departureID + "_" + relationID + "_" + systemId);
        var seatsData = '';
        seatsData = departureID + '_' + relationID + '_' + bookingId + '_' + systemId + ':' + seats + '|';

        var oldSeatsData = inputField.val();

        if (oldSeatsData != seatsData) {
            SeatSelector.removeSelectedSeats(departureID, relationID, false, bookingId, systemId);
            inputField.val(inputField.val() + seatsData);
            BookingWebServiceProxy.updateSingleProperty(inputField);
        }
    },

    removeSelectedSeats: function (departureID, relationID, sendUpdate, bookingId, systemId) {
        var inputField = $("#selectedseats_" + bookingId + "_" + departureID + "_" + relationID + "_" + systemId);
        var chunks = inputField.val().split('|');
        var newSeats = '';

        for (var i = 0; i < chunks.length - 1; i++) {
            var data = chunks[i].split(':');
            var relation = data[0].split('_');

            if (relation[0] != departureID && relation[1] != relationID && relation[2] != bookingId && relation[3] != systemId) {
                newSeats += chunks[i] + '|';
            }
        }

        inputField.val(newSeats);

        if (sendUpdate) {
            BookingWebServiceProxy.updateSingleProperty(inputField);
        }
    },

    removeAllSelectedSeats: function (bookingId, departureID, relationID, systemId) {
        var inputField = $("#selectedseats_" + bookingId + "_" + departureID + "_" + relationID + "_" + systemId);
        inputField.val("");
        BookingWebServiceProxy.updateSingleProperty(inputField);
    }
}
var SaveBookingToUserWSProxy = {
	SaveBooking: function (username, password, callback) {
		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/SaveBookingToUser/SaveBookingToUserWebService.asmx/SaveBooking",
			data: JSON.stringify({ username: username, password: password }),
			dataType: "json",
			success: function (data, textStatus) {
				callback(data.d);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	}
}
var RoutePlanWSProxy = {
	getRoutePlan: function (fromRouteStopId, toRouteStopId, systemId, departureId, callbackFunc) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/RoutePlan/RoutePlanWebService.asmx/GetRoutePlan",
			data: {
				fromRouteStopId: fromRouteStopId,
				toRouteStopId: toRouteStopId,
				systemId: systemId,
				departureId: departureId
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	showRoutePlan: function (fromRouteStopId, toRouteStopId, systemId, departureId) {
		RoutePlanWSProxy.getRoutePlan(fromRouteStopId, toRouteStopId, systemId, departureId, function (html) {
			var close = $('<div class="close"></div>');

			$("#routePlan").html(html);
			$("#routePlan").prepend(close);

			var overlay = $("#routePlan").overlay({
				expose: { color: '#333',
					loadSpeed: 100,
					opacity: 0.75
				},
				closeOnClick: true,
				api: true,
				top: '30%',
				close: '.close',
				onClose: function () {
					$("#routePlan").html('');
					$("#routePlan div.close").remove();
				}
			});

			close.click(function () {
				overlay.close();
				overlay = null;
			});

			overlay.load();
		});
	}
}
var RemoveCustomerWSProxy = {
    RemoveCustomer: function(removeReason, customReason, callback) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/RemoveCustomer/RemoveCustomerWebService.asmx/RemoveCustomer",
            data: JSON.stringify({ removeReason: removeReason, customReason: customReason }),
            dataType: "json",
            success: function(data, textStatus) {
                callback(data.d);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    }
}
var ReimbursementForm = {
    validate: function(formId, errorDescId)
    {
	    var form = document.getElementById(formId);
	    var errDesc = document.getElementById(errorDescId);

	    errDesc.innerHTML = "";
	    var errors = ReimbursementForm.validateForm(form);

	    if (errors.length > 0)
	    {
		    var html = "<ul>";
		    for (i in errors)
		    {
			    html += "<li>" + errors[i] + "</li>";
		    }
		    html += "</ul>";

		    errDesc.innerHTML = html;

		    return false;
	    }
	    else
	    {
		    return true;
	    }
    },

    validateForm: function(e)
    {
	    var errorList = new Array();

	    for (var i=0;i<e.elements.length;i++)
	    {
	        var err = ReimbursementForm.validateElement(e.elements[i]);
		    if (err != null)
			    errorList.push(err);
	    }

	    return errorList;
    },

    validateElement: function(e)
    {
        if (e.alt != undefined && e.alt.length > 0)
	    {
	        var alt = ReimbursementForm.parseAlt(e.alt);
		    var err = false;
		    if (alt["type"].length > 0)
		    {
			    switch(alt["type"])
			    {
				    case "notempty":
					    if (e.value == undefined || e.value.length == 0)
						    err = true;
					    break;
			    }
		    }

		    return err ? alt["errmsg"] : null;
	    }
	    else
	    {
            return null;
	    }
    },

    parseAlt: function(str)
    {
	    var alt = new Array();
	    var l = str.split(";");
	    for (i in l)
	    {
		    var x = l[i].split(":", 2);
		    alt[x[0]] = x[1];
		    alt.length++;
	    }
	    return alt;
    }
}

var RecruitAFriendWSProxy = {
    recruit: function (email, name, callback) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/RecruitAFriend/RecruitAFriendWebService.asmx/Recruit",
            data: JSON.stringify({ email: email, name: name }),
            dataType: "json",
            success: function (data, textStatus) {
                callback(data.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    }
}
var ProductSelectorWSProxy = {
	SelectProduct: function (productId, amount) {
		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ProductSelector/ProductSelectorWebService.asmx/SelectProduct",
			data: JSON.stringify({ productId: productId, amount: amount }),
			dataType: "json",
			success: function (data, textStatus) {
				BookingSummaryWSProxy.update();
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});		
	}
}
var PaymentSelectorWSProxy = {
	restartPaymentSelection: function () {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/PaymentSelector/PaymentSelectorWebService.asmx/GetPaymentSelection",
			data: {},
			dataType: "xml",
			success: function (data, textStatus) {
				$("#paymentStepContainer").html($(data).find("string").text());
				BookingWebServiceProxy.subscribeToButtonEvents();
				BookingSummaryWSProxy.update();
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	GetPaymentSelection: function (callback) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/PaymentSelector/PaymentSelectorWebService.asmx/GetPaymentSelection",
			data: {},
			dataType: "xml",
			async: true,
			success: function (data, textStatus) {
				callback($(data).find("string").text());
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	RequiresPayment: function () {
		var result = true;

		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/PaymentSelector/PaymentSelectorWebService.asmx/RequiresPayment",
			data: {},
			dataType: "json",
			contentType: "application/json; charset=utf-8",
			async: false,
			success: function (data, textStatus) {
				result = data.d;
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});

		return result;
	}
}
var MyPagesWSProxy = {
    loadOrderInformation: function (orderNumber, callbackFunc) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/MyPages/MyPagesWebService.asmx/GetOrderInformation",
            data: {
                orderNumber: orderNumber
            },
            dataType: "xml",
            success: function (data) {
                callbackFunc($(data).find("string").text());
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    loadOrderInformationByCentralId: function (orderId, callbackFunc) {
    $.ajax({
        type: "POST",
        url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/MyPages/MyPagesWebService.asmx/GetCentralOrderInformation",
        data: {
            orderId: orderId
        },
        dataType: "xml",
        success: function (data) {
            callbackFunc($(data).find("string").text());
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
        }
    });
    },

    changeBookingByOrderNumber: function(orderNumber, callbackFunc) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/Mypages/MyPagesWebService.asmx/ChangeBookingByOrderNumber",
            data: JSON.stringify({ orderNumber: orderNumber }),
            dataType: "json",
            success: function (data, textStatus) {
                callbackFunc(data.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    cancelBookingByOrderNumber: function (orderNumber, callbackFunc) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/Mypages/MyPagesWebService.asmx/CancelBookingByOrderNumber",
            data: JSON.stringify({ orderNumber: orderNumber }),
            dataType: "json",
            success: function (data, textStatus) {
                callbackFunc(data.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    moveBonus: function (toUserName, toUserPassword, amount, callbackFunc) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/Mypages/MyPagesWebService.asmx/MoveBonus",
            data: JSON.stringify({
                toUserName: toUserName,
                toUserPassword: toUserPassword,
                amount: amount
            }),
            dataType: "json",
            success: function (data, textStatus) {
                callbackFunc(data.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    removeMyRoute: function (id) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/MyPages/MyPagesWebService.asmx/removeMyRoute",
            data: {
                id: id
            },
            dataType: "xml",
            success: function (data, textStatus) {
                document.location = document.location;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    bookMyRoute: function (fromStopId, toStopId) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/MyPages/MyPagesWebService.asmx/bookMyRoute",
            data: {
                fromStopId: fromStopId,
                toStopId: toStopId
            },
            dataType: "xml",
            success: function (data, textStatus) {
                document.location = $(data).find("string").text();
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    }
}

var MapWindowWSProxy = {

	showStop: function (showFromStop) {

		var stopData = (showFromStop) ? StopSelectorWSProxy.SelectedFromStop : StopSelectorWSProxy.SelectedToStop;
		if (stopData == null) return;

		//        alert(showFromStop);
		//        alert(stopData.PositionLongitude);
		//        alert(stopData.PositionLatitude);

		var stopId = stopData.id;
		var posLong = stopData.PositionLongitude;
		var posLat = stopData.PositionLatitude;
		var name = stopData.label;

		if (typeof (stopId) == "string") {
			stopId = parseInt(stopId);
		}

		if (posLong == 0 || posLat == 0) return;
		if (stopId == NaN || stopId == 0) return;

		var close = $('<div class="close"></div>');
		$("#gmap_overlay").prepend(close);

		var overlay = $("#gmap_overlay").overlay({
			expose: { color: '#333',
				loadSpeed: 100,
				opacity: 0.75
			},
			closeOnClick: true,
			api: true,
			top: '30%',
			close: '.close',
			onClose: function () {
				$("#gmap_container").html('');
				$("#gmap_overlay div.close").remove();
			}
		});

		close.click(function () {
			overlay.close();
			overlay = null;
		});

		overlay.load();

		MapWindowWSProxy.initializeMap(
                    posLong,
                    posLat,
                    15,
                    name,
                    $("#gmap_container").get(0));
	},

	initializeMap: function (long, lat, zoom, text, elem) {
		var myLatlng = new google.maps.LatLng(lat, long);

		var myOptions = {
			zoom: zoom,
			center: myLatlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};

		var map = new google.maps.Map(elem, myOptions);

		var info = new google.maps.InfoWindow({
			content: '<div style="text-align:center"><h1>' + text + '</h1></div>'
		});

		var marker = new google.maps.Marker({
			position: myLatlng,
			map: map,
			title: text
		});

		info.open(map, marker);
	},

	openWin: function (long, lat, zoom, text) {
		var html = "";
		html = html + "<!DOCTYPE html>\n";
		html = html + "<html>\n";
		html = html + "<head>\n";
		html = html + "<title>Stop map</title>\n";
		html = html + "<style type=\"text/css\">\n";
		html = html + "  html { height: 100% }\n";
		html = html + "  body { height: 100%; margin: 1px; padding: 1px }\n";
		html = html + "  #map_canvas { height: 100%; width: 100% }\n";
		html = html + "</style>\n";
		html = html + "<script type=\"text/javascript\" src=\"http://maps.google.com/maps/api/js?sensor=false\"></script>\n";
		html = html + "<script type=\"text/javascript\">\n";
		html = html + "function initializeMap() {\n";
		html = html + "var myLatlng = new google.maps.LatLng(" + lat + ", " + long + ");\n";
		html = html + "var myOptions = {\n";
		html = html + "    zoom: " + zoom + ",\n";
		html = html + "    center: myLatlng,\n";
		html = html + "    mapTypeId: google.maps.MapTypeId.ROADMAP\n";
		html = html + "};\n";
		html = html + "var map = new google.maps.Map(document.getElementById(\"map_canvas\"), myOptions);\n";
		html = html + "\n";
		html = html + "var marker = new google.maps.Marker({\n";
		html = html + "    position: myLatlng,\n";
		html = html + "    map: map,\n";
		html = html + "    title: '" + text + "'\n";
		html = html + "});\n";
		html = html + "}\n";
		html = html + "</script>\n";
		html = html + "</head>\n";
		html = html + "<body onload=\"initializeMap()\">\n";
		html = html + "  <div id=\"map_canvas\" style=\"width: 100%; height: 100%\"></div>\n";
		html = html + "</body>\n";
		html = html + "</html>";

		var w = window.open("", "stopMap", "height=300,width=400");
		var doc = w.document.open("text/html", "replace");
		doc.write(html);
		doc.close();
		//var e;
		//do {
		//    e = w.document.getElementById("map_canvas");
		//} while (e == undefined);
		//MapWindowWSProxy.initializeMap(long, lat, zoom, text, e);
	},

	UpdateButtonVisibility: function (fromStop, toStop) {
		if (fromStop != null && fromStop.PositionLongitude > 0 && fromStop.PositionLatitude > 0) {
			$("#fromStopMapButton").removeClass("disabled");
		}
		else {
			$("#fromStopMapButton").addClass("disabled");
		}

		if (toStop != null && toStop.PositionLongitude > 0 && toStop.PositionLatitude > 0) {
			$("#toStopMapButton").removeClass("disabled");
		}
		else {
			$("#toStopMapButton").addClass("disabled");
		}
	}
}

$(document).ready(function () {
	StopSelectorWSProxy.SelectionChanged(MapWindowWSProxy.UpdateButtonVisibility);
});
var LoginWebServiceProxy = {
	afterLoginUri: "",
	afterLogoutUri: "",
	FailedLoginText: "Fel användarnamn eller lösenord angavs",

	login: function(username, password, callback) {
		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/Login/LoginWebService.asmx/Login",
			data: JSON.stringify({ username: username, password: password }),
			dataType: "json",
			success: function(data, textStatus) {
				callback(data.d, LoginWebServiceProxy.afterLoginUri);
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	logout: function(callback) {
		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/Login/LoginWebService.asmx/Logout",
			data: {},
			dataType: "json",
			success: function(data, textStatus) {
				callback(LoginWebServiceProxy.afterLogoutUri);
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	}
}
var InsuranceSelectorWSProxy = {
	getInsuranceOptions: function (toTrip, callback) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/InsuranceSelector/InsuranceSelectorWebService.asmx/GetInsuranceOptions",
			data: {
				toTrip: toTrip
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callback($(data).find("string").text());
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

    isInsuranceSelected: function () {
        var result = new Array();

        $.ajax({
            async: false,
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/InsuranceSelector/InsuranceSelectorWebService.asmx/IsInsuranceSelected",
            data: {},
            dataType: "json",
            success: function (data, textStatus) {
                result = data.d; //($(data).find("boolean").text() == "true");
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });

        return result;
    },

	SetInsuranceSelected: function (bookingId, isToTrip, isSelected, callback) {
		$.ajax({
			async: false,
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/InsuranceSelector/InsuranceSelectorWebService.asmx/SetInsuranceSelected",
			data: JSON.stringify({ bookingId: bookingId, isToTrip: isToTrip, isSelected: isSelected }),
			dataType: "json",
			contentType: "application/json; charset=utf-8",
			success: function (data, textStatus) {
				if (data.d) {
					callback(isSelected);
				} else {
					callback(!isSelected);
				}
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	}
}

var ForgotPasswordWSProxy = {
    sendPassword: function(email, callback) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ForgotPassword/ForgotPasswordWebService.asmx/SendPassword",
            data: JSON.stringify({ email: email }),
            dataType: "json",
            success: function(data, textStatus) {
                callback(data.d);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    }
}
var DepartureSelectorWSProxy = {
	CurrentLoadedData: '',
	CurrentTripInfoId: '',

	getDepartureSearchResult: function (toTrip, callbackFunc) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/GetDepartureSearchResult",
			data: {
				toTrip: toTrip
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	},

	getDepartureSearchResultMobil: function (toTrip, callbackFunc) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/GetDepartureSearchResultMobil",
			data: {
				toTrip: toTrip
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	},

	getDepartureInfo: function (tripKey, toTrip, callbackFunc) {
		var editing = getQueryStringValue("edit");
		if (editing == null)
			editing = "";

		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/GetDepartureInfo",
			data: {
				tripKey: tripKey,
				toTrip: toTrip,
				editing: editing
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	},

	getDepartureInfoMobil: function (tripKey, toTrip, callbackFunc) {
		var editing = getQueryStringValue("edit");
		if (editing == null)
			editing = "";

		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/GetDepartureInfoMobil",
			data: {
				tripKey: tripKey,
				toTrip: toTrip,
				editing: editing
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	},

	loadDepartureInfo: function (id, toTrip, useMultiRowRendering, insertAfter) {
		if (useMultiRowRendering == undefined) useMultiRowRendering = false;
		var identifier = (useMultiRowRendering) ? "." : "#";
		var infoIsLoaded = false;
		var clientId = id.replace(/\|/g, "_");

		if (useMultiRowRendering && $(identifier + "departureRow" + clientId).length) {
			DepartureSelectorWSProxy.CurrentTripInfoId = clientId;
			DepartureSelectorWSProxy.CurrentLoadedData = null;
			DepartureSelectorWSProxy.showLoadedDepartureInfo(useMultiRowRendering, insertAfter);
		} else {
			DepartureSelectorWSProxy.getDepartureInfo(id, toTrip, function (data) {
				DepartureSelectorWSProxy.CurrentTripInfoId = clientId;
				DepartureSelectorWSProxy.CurrentLoadedData = data;
				DepartureSelectorWSProxy.showLoadedDepartureInfo(useMultiRowRendering, insertAfter);
			});
		}
	},

	loadDepartureInfoMobil: function (id, toTrip, useMultiRowRendering, insertAfter) {
		if (useMultiRowRendering == undefined) useMultiRowRendering = false;
		var identifier = (useMultiRowRendering) ? "." : "#";
		var infoIsLoaded = false;
		var clientId = id.replace(/\|/g, "_");

		if (useMultiRowRendering && $(identifier + "departureRow" + clientId).length) {
			DepartureSelectorWSProxy.CurrentTripInfoId = clientId;
			DepartureSelectorWSProxy.CurrentLoadedData = null;
			DepartureSelectorWSProxy.showLoadedDepartureInfo(useMultiRowRendering, insertAfter);
		} else {
			DepartureSelectorWSProxy.getDepartureInfoMobil(id, toTrip, function (data) {
				DepartureSelectorWSProxy.CurrentTripInfoId = clientId;
				DepartureSelectorWSProxy.CurrentLoadedData = data;
				DepartureSelectorWSProxy.showLoadedDepartureInfo(useMultiRowRendering, insertAfter);
			});
		}
	},

	showSaveMyTrip: function () {

		var close = $('<div class="close"></div>');
		$("#saveMyTrip_overlay").prepend(close);

		var overlay = $("#saveMyTrip_overlay").overlay({
			expose: { color: '#333',
				loadSpeed: 100,
				opacity: 0.75
			},
			closeOnClick: true,
			api: true,
			top: '30%',
			close: '.close',
			left: 350,
			onClose: function () {
				$("#saveMyTrip_container").html('');
				$("#saveMyTrip_overlay div.close").remove();
			}
		});

		close.click(function () {
			overlay.close();
			overlay = null;
		});

		$("#saveMyTripButton").live("click", function () {
			DepartureSelectorWSProxy.loadSaveMyTripContent($("#saveMyTripUsername").val(), $("#saveMyTripPassword").val(), true,
				function (html) { $("#saveMyTrip_container").html(html); });
		});

		$("#closeSaveMyTripButton").live("click", function () {
			$("#saveMyTrip_overlay").overlay().close();
		});

		DepartureSelectorWSProxy.loadSaveMyTripContent("", "", false, function (html) { $("#saveMyTrip_container").html(html); });

		overlay.load();
	},

	loadSaveMyTripContent: function (username, password, checkLogin, callbackFunc) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/GetSaveMyTripContent",
			data: {
				username: username,
				password: password,
				checkLogin: checkLogin
			},
			assync: false,
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	},

	//	saveMyTrip: function (fromStopId, toStopId) {
	//		$.ajax({
	//			type: "POST",
	//			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/saveMyTrip",
	//			data: {
	//				fromStopId: fromStopId,
	//				toStopID: toStopId
	//			},
	//			dataType: "json",
	//			success: function (data, textStatus) {
	//				if (data.d) {
	//					alert("Rutten har sparats till mina sidor.");
	//				} else {
	//					alert("Du måste logga in för att spara rutter.");
	//				}

	//			},
	//			error: function (XMLHttpRequest, textStatus, errorThrown) {
	//				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
	//			}
	//		});
	//	},

	showLoadedDepartureInfo: function (useMultiRowRendering, insertAfter) {
		var identifier = "#"

		if (useMultiRowRendering) {
			identifier = ".";
		}

		if (useMultiRowRendering) {
			insertAfter.parent().children("[class ^= 'departureRow']").each(function () {
				if (!$(this).hasClass("departureRow" + DepartureSelectorWSProxy.CurrentTripInfoId)) {
					$(this).hide();
				}
			});

			if (DepartureSelectorWSProxy.CurrentLoadedData != null) {
				insertAfter.after(DepartureSelectorWSProxy.CurrentLoadedData);
			} else {
				insertAfter.parent().children().each(function () {
					if ($(this).hasClass("departureRow" + DepartureSelectorWSProxy.CurrentTripInfoId)) {
						$(this).show();
					}
				});
			}
		} else {
			var rowToShow = $(identifier + "departureRow" + DepartureSelectorWSProxy.CurrentTripInfoId);
			$('td[id^="departureRow"]').not(rowToShow).hide();

			var rowId = "#tripInfoRow" + DepartureSelectorWSProxy.CurrentTripInfoId;
			$(rowId).html(DepartureSelectorWSProxy.CurrentLoadedData);
			rowToShow.show();
		}
	},

	showSendTripAsEmail: function (tripKey, toTrip) {

		var close = $('<div class="close"></div>');
		$("#sendDepartureAsEmail_overlay").prepend(close);

		var overlay = $("#sendDepartureAsEmail_overlay").overlay({
			expose: { color: '#333',
				loadSpeed: 100,
				opacity: 0.75
			},
			closeOnClick: true,
			api: true,
			top: '30%',
			close: '.close',
			left: 250,
			onClose: function () {
				$("#sendDepartureAsEmail_container").html('');
				$("#sendDepartureAsEmail_overlay div.close").remove();
			}
		});

		close.click(function () {
			overlay.close();
			overlay = null;
		});

		DepartureSelectorWSProxy.loadSendTripAsEmailContent(tripKey, toTrip, function (html) { $("#sendDepartureAsEmail_container").html(html); });

		overlay.load();
	},

	loadSendTripAsEmailContent: function (tripKey, toTrip, callbackFunc) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/getSendTripAsEmailContent",
			data: {
				tripKey: tripKey,
				toTrip: toTrip
			},
			assync: false,
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc($(data).find("string").text());
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	},

	sendTripAsEmail: function (tripKey, toTrip, callbackFunc) {
		var msg = $("#message").val();
		var email = $("#email").val();
		var name = $("#name").val();

		if (email == undefined || !(email.length > 0)) {
			$("#email").addClass("missingRequiredValue");
			return;
		}
		else {
			$("#email").removeClass("missingRequiredValue");
		}

		if (callbackFunc == null) {
			callbackFunc = function () {
				$("#sendDepartureAsEmail_overlay").overlay().close();
			}
		}

		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/DepartureSelector/DepartureSelectorWebService.asmx/sendTripAsEmailContent",
			data: {
				tripKey: tripKey,
				toTrip: toTrip,
				message: msg,
				email: email,
				name: name
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callbackFunc();
			}/*,
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}*/
		});
	}
}

var DateSelector = {
    CustomerHasChangedReturnDate: false,

    ShouldUpdateReturnDate: function (departureDate, returnDate) {
        return (!DateSelector.CustomerHasChangedReturnDate && departureDate > returnDate);
    }
};
var CustomerInfoWSProxy = {
	registrationCompleteUri: null,

	getSsnInfo: function (countryId, callback) {
		$.ajax({
			type: "POST",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/CustomerInfo/CustomerInfoWebService.asmx/GetSSNInfo",
			data: {
				countryId: countryId
			},
			dataType: "xml",
			success: function (data, textStatus) {
				callback($(data).find("string").text());
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
			}
		});
	},

	registerMember: function (firstName, lastName, username, password, passwordRepeat, email, address,
            postCode, postCity, birthYear, birthMonth, birthDay, ssnExtra, telephoneCountryCode, telephone, newsletter, countryId,
            tipCode,
            callback) {

		if ($("#birthdate").length) {
			CustomerInfoWSProxy.SetBirthDate($("#birthdate").val(), $("#birthdate"));
			birthYear = $("#birthyear").val();
			birthMonth = $("#birthmonth").val();
			birthDay = $("#birthday").val();
		}

		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/CustomerInfo/CustomerInfoWebService.asmx/RegisterMember",
			data: JSON.stringify({
				firstName: firstName,
				lastName: lastName,
				username: username,
				password: password,
				passwordRepeat: passwordRepeat,
				email: email,
				address: address,
				postCode: postCode,
				postCity: postCity,
				birthYear: birthYear,
				birthMonth: birthMonth,
				birthDay: birthDay,
				ssnExtra: ssnExtra,
				telephoneCountryCode: telephoneCountryCode,
				telephone: telephone,
				newsletter: newsletter,
				countryId: countryId,
				tipCode: tipCode
			}),
			dataType: "json",
			success: function (data, textStatus) {
				callback(data.d);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest.statusText);
			}
		});
	},

	updateMember: function (firstName, lastName, password, passwordRepeat, email, address,
            postCode, postCity, birthYear, birthMonth, birthDay, ssnExtra, telephoneCountryCode, telephone, newsletter, countryId,
            callback) {

		if ($("#birthdate").length) {
			CustomerInfoWSProxy.SetBirthDate($("#birthdate").val(), $("#birthdate"));
			birthYear = $("#birthyear").val();
			birthMonth = $("#birthmonth").val();
			birthDay = $("#birthday").val();
		}

		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/CustomerInfo/CustomerInfoWebService.asmx/UpdateMember",
			data: JSON.stringify({
				firstName: firstName,
				lastName: lastName,
				password: password,
				passwordRepeat: passwordRepeat,
				email: email,
				address: address,
				postCode: postCode,
				postCity: postCity,
				birthYear: birthYear,
				birthMonth: birthMonth,
				birthDay: birthDay,
				ssnExtra: ssnExtra,
				telephoneCountryCode: telephoneCountryCode,
				telephone: telephone,
				newsletter: newsletter,
				countryId: countryId
			}),
			dataType: "json",
			success: function (data, textStatus) {
				callback(data.d);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest.statusText);
			}
		});
	},

	changePassword: function (password, passwordRepeat, callback) {
		$.ajax({
			type: "POST",
			contentType: "application/json; charset=utf-8",
			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/CustomerInfo/CustomerInfoWebService.asmx/ChangePassword",
			data: JSON.stringify({
				password: password,
				passwordRepeat: passwordRepeat
			}),
			dataType: "json",
			success: function (data, textStatus) {
				callback(data.d);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				ErrorHandler.show(XMLHttpRequest.statusText);
			}
		});
	},

	SetBirthDate: function (selectedDate, input) {
		var birthYear = "";
		var birthMonth = "";
		var birthDay = "";

		var birthDate = selectedDate;

		var patternDDMMYYYY = /([0-9]{2})\.([0-9]{2})\.([0-9]{4})/;
		var patternYYYYMMDD = /([0-9]{4})\.([0-9]{2})\.([0-9]{2})/;

		if (patternDDMMYYYY.test(birthDate)) {
			var matches = patternDDMMYYYY.exec(birthDate)
			birthYear = matches[3];
			birthMonth = matches[2];
			birthDay = matches[1];
		} else if (patternYYYYMMDD.test(birthDate)) {
			var matches = patternDDMMYYYY.exec(birthDate)
			birthYear = matches[1];
			birthMonth = matches[2];
			birthDay = matches[3];
		} else if (birthDate.length > 0) {
			birthYear = 1;
			birthMonth = 1;
			birthDay = 1;
		} else {
			birthYear = 1900
			birthMonth = 1;
			birthDay = 1;
		}

		$("#birthyear").val(birthYear);
		$("#birthmonth").val(birthMonth);
		$("#birthday").val(birthDay);		
	}
}
var ChangeCancelBookingWSProxy = {
    changeBookingUri: "",
    nextCancelStepUri: "",
    memberRegistrationUri: "",

    changeBooking: function (orderno, telephone, callbackFunc) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ChangeCancelBooking/ChangeCancelBookingWebService.asmx/ChangeBooking",
            data: JSON.stringify({ orderNumber: orderno, telephoneNumber: telephone }),
            dataType: "json",
            success: function (data, textStatus) {
                callbackFunc(data.d, ChangeCancelBookingWSProxy.changeBookingUri);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    beginCancelBooking: function (orderno, telephone, callbackFunc) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ChangeCancelBooking/ChangeCancelBookingWebService.asmx/BeginCancelBooking",
            data: JSON.stringify({ orderNumber: orderno, telephoneNumber: telephone }),
            dataType: "json",
            success: function (data, textStatus) {
                callbackFunc(data.d, ChangeCancelBookingWSProxy.nextCancelStepUri);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    getCancelOptions: function (callbackFunc) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ChangeCancelBooking/ChangeCancelBookingWebService.asmx/GetCancelOptions",
            data: JSON.stringify({ orderNumber: orderno, telephoneNumber: telephone }),
            dataType: "xml",
            success: function (data, textStatus) {
                callbackFunc($(data).find("string").text());
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    redirectCancelToMemberRegistration: function (orderno, telephone) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ChangeCancelBooking/ChangeCancelBookingWebService.asmx/RedirectCancelToMemberRegistration",
            data: JSON.stringify({ orderNumber: orderno, telephoneNumber: telephone }),
            dataType: "json",
            success: function (data, textStatus) {
                if (data.d) {
                    location.href = ChangeCancelBookingWSProxy.memberRegistrationUri;
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    checkIfUsernameExists: function (username, callback) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/ChangeCancelBooking/ChangeCancelBookingWebService.asmx/CheckIfUsernameExists",
            data: JSON.stringify({ username: username }),
            dataType: "json",
            success: function (data, textStatus) {
                callback(data.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    }
}
var CampaignSelectorWSProxy = {
    AddCampaignCode: function (campaignCode) {
        BookingWebServiceProxy.updateSinglePropertyCustom("campaignCode", campaignCode, function () {
            BookingCartWSProxy.updateCart();
        });
    }
};
var BookingSummaryWSProxy =  {    
    update: function(callbackFunc) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingSummary/BookingSummaryWebService.asmx/Update",
            data: {},
            dataType: "xml",
            success: function(data, textStatus) {
                $("#bookingSummaryContainer").html($(data).find("string").text());
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                //ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    }
}
var BookingCartWSProxy = {
    EmptyCartMessage: '',
    RemoveCartItemMessage: '',
    RemoveRoundTripMessage: '',
    ViewedTreeId: 0,
    MarkErrorBookingsCallback: function (bookingIdList) { },

    updateCart: function () {
        if ($("#bookingCartContainer").length) {
            $.ajax({
                type: "POST",
                url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/GetBookingCart",
                data: { viewedTreeId: BookingCartWSProxy.ViewedTreeId },
                dataType: "xml",
                success: function (data, textStatus) {
                    $("#bookingCartContainer").html($(data).find("string").text());
                    BookingWebServiceProxy.subscribeToButtonEvents();
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
                }
            });
        }
    },

    addToCart: function (customerCategoryId, selectedDeparture, isToTrip, tripPartNumber) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/AddToCart",
            data: JSON.stringify({ customerCategoryId: customerCategoryId, selectedDeparture: selectedDeparture, isToTrip: isToTrip, tripPartNumber: tripPartNumber }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data, textStatus) {
                if (data.d.length == 0) {
                    BookingCartWSProxy.updateCart();
                } else {
                    ValidationHandler.generateErrorHtml(data.d, "#errorMsgContainer");
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    //	setReturn: function (tripKey) {
    //		$.ajax({
    //			type: "POST",
    //			url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/SetReturn",
    //			data: { tripKey: tripKey },
    //			dataType: "text",
    //			success: function (data, textStatus) {
    //				BookingCartWSProxy.updateCart();
    //			},
    //			error: function (XMLHttpRequest, textStatus, errorThrown) {
    //				ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
    //			}
    //		});
    //	},

    emptyCart: function () {
        if (confirm(BookingCartWSProxy.EmptyCartMessage)) {
            $.ajax({
                type: "POST",
                url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/EmptyCart",
                data: {},
                dataType: "text",
                success: function (data, textStatus) {
                    BookingCartWSProxy.updateCart();
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
                }
            });
        }
    },

    removeItemFromCart: function (bookingId, numberOfIncludedTrips) {
        if (numberOfIncludedTrips == 1 && confirm(BookingCartWSProxy.RemoveCartItemMessage) ||
        numberOfIncludedTrips > 1 && confirm(BookingCartWSProxy.RemoveRoundTripMessage)) {
            $.ajax({
                type: "POST",
                url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/RemoveItemFromCart",
                data: { bookingId: bookingId },
                dataType: "text",
                success: function (data, textStatus) {
                    BookingCartWSProxy.updateCart();
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
                }
            });
        }
    },

    RemoveItemFromCartByCustomerCategoryId: function (bookingId, customerCategoryId, departureId, relationID) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/RemoveItemFromCartByCustomerCategoryId",
            data: { bookingId: bookingId, customerCategoryId: customerCategoryId, departureId: departureId, relationID: relationID },
            dataType: "text",
            success: function (data, textStatus) {
                BookingCartWSProxy.updateCart();
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    ChangeCart: function (bookingId, tripKey) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/RemoveItemFromCart",
            data: { bookingId: bookingId },
            dataType: "text",
            success: function (data, textStatus) {
                BookingCartWSProxy.addToCart(tripKey);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    editBooking: function (bookingId, editUrl) {
        $.ajax({
            type: "POST",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/BookingCart/BookingCartWebService.asmx/SetActiveBooking",
            data: { bookingId: bookingId },
            dataType: "text",
            success: function (data, textStatus) {
                window.location = editUrl;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    MarkErrorBookings: function (bookingIdList) {
        BookingCartWSProxy.MarkErrorBookingsCallback(bookingIdList);
    }

}

var AdminMenuWSProxy = {
    revokeCurrentBooking: function () {
        if (confirm('Är det säkert att du vill ångra bokningen?')) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/AdminMenu/AdminMenuWebService.asmx/RevokeCurrentBooking",
                data: {},
                dataType: "json",
                success: function (data, textStatus) {
                    if (data.d.length > 0 && data.d.substr(0, 4) == "http") {
                        location.href = data.d;
                    } else if (data.d.length > 0) {
                        alert(data.d);
                    } else {
                        ErrorHandler.show("An error occured when trying to revoke the booking");
                    }
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
                }
            });
        }
    },

    cancelCurrentBooking: function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/AdminMenu/AdminMenuWebService.asmx/CancelCurrentBooking",
            data: {},
            dataType: "json",
            success: function (data, textStatus) {
                if (data.d.length > 0) {
                    location.href = data.d;
                } else {
                    ErrorHandler.show("An error occured when trying to cancel the booking");
                }                
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    deleteCurrentBooking: function () {
        if (confirm('Är det säkert att du vill ta bort bokningen?\nOBS! All information om bokningen kommer att tas bort!')) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/Modules/WebPublisher.Modules.TravelBooking/PageParts/AdminMenu/AdminMenuWebService.asmx/DeleteCurrentBooking",
                data: {},
                dataType: "json",
                success: function (data, textStatus) {
                    if (data.d.length > 0 && data.d.substr(0, 4) == "http") {
                        location.href = data.d;
                    } else if (data.d.length > 0) {
                        alert(data.d);
                    } else {
                        ErrorHandler.show("An error occured when trying to revoke the booking");
                    }
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    ErrorHandler.show(XMLHttpRequest, textStatus, errorThrown);
                }
            });
        }
    }
}

