(function () {
	var k = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
		done = 0,
		toString = Object.prototype.toString,
		hasDuplicate = false,
		baseHasDuplicate = true;
		[0, 0].sort(function () {
			baseHasDuplicate = false;
			return 0
		});
	var n = function (a, b, c, d) {
			c = c || [];
			b = b || document;
			var e = b;
			if (b.nodeType !== 1 && b.nodeType !== 9) {
				return []
			}
			if (!a || typeof a !== "string") {
				return c
			}
			var f = [],
				m, set, checkSet, extra, prune = true,
				contextXML = u(b),
				soFar = a,
				ret, cur, pop, i;
			do {
					k.exec("");
					m = k.exec(soFar);
					if (m) {
						soFar = m[3];
						f.push(m[1]);
						if (m[2]) {
							extra = m[3];
							break
						}
					}
				} while (m);
			if (f.length > 1 && p.exec(a)) {
					if (f.length === 2 && o.relative[f[0]]) {
						set = v(f[0] + f[1], b)
					} else {
						set = o.relative[f[0]] ? [b] : n(f.shift(), b);
						while (f.length) {
							a = f.shift();
							if (o.relative[a]) {
								a += f.shift()
							}
							set = v(a, set)
						}
					}
				} else {
					if (!d && f.length > 1 && b.nodeType === 9 && !contextXML && o.match.ID.test(f[0]) && !o.match.ID.test(f[f.length - 1])) {
						ret = n.find(f.shift(), b, contextXML);
						b = ret.expr ? n.filter(ret.expr, ret.set)[0] : ret.set[0]
					}
					if (b) {
						ret = d ? {
							expr: f.pop(),
							set: r(d)
						} : n.find(f.pop(), f.length === 1 && (f[0] === "~" || f[0] === "+") && b.parentNode ? b.parentNode : b, contextXML);
						set = ret.expr ? n.filter(ret.expr, ret.set) : ret.set;
						if (f.length > 0) {
							checkSet = r(set)
						} else {
							prune = false
						}
						while (f.length) {
							cur = f.pop();
							pop = cur;
							if (!o.relative[cur]) {
								cur = ""
							} else {
								pop = f.pop()
							}
							if (pop == null) {
								pop = b
							}
							o.relative[cur](checkSet, pop, contextXML)
						}
					} else {
						checkSet = f = []
					}
				}
			if (!checkSet) {
					checkSet = set
				}
			if (!checkSet) {
					n.error(cur || a)
				}
			if (toString.call(checkSet) === "[object Array]") {
					if (!prune) {
						c.push.apply(c, checkSet)
					} else if (b && b.nodeType === 1) {
						for (i = 0; checkSet[i] != null; i++) {
							if (checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && t(b, checkSet[i]))) {
								c.push(set[i])
							}
						}
					} else {
						for (i = 0; checkSet[i] != null; i++) {
							if (checkSet[i] && checkSet[i].nodeType === 1) {
								c.push(set[i])
							}
						}
					}
				} else {
					r(checkSet, c)
				}
			if (extra) {
					n(extra, e, c, d);
					n.uniqueSort(c)
				}
			return c
		};
	n.uniqueSort = function (a) {
			if (s) {
				hasDuplicate = baseHasDuplicate;
				a.sort(s);
				if (hasDuplicate) {
					for (var i = 1; i < a.length; i++) {
						if (a[i] === a[i - 1]) {
							a.splice(i--, 1)
						}
					}
				}
			}
			return a
		};
	n.matches = function (a, b) {
			return n(a, null, null, b)
		};
	n.find = function (a, b, c) {
			var d;
			if (!a) {
				return []
			}
			for (var i = 0, l = o.order.length; i < l; i++) {
				var e = o.order[i],
					match;
				if ((match = o.leftMatch[e].exec(a))) {
						var f = match[1];
						match.splice(1, 1);
						if (f.substr(f.length - 1) !== "\\") {
							match[1] = (match[1] || "").replace(/\\/g, "");
							d = o.find[e](match, b, c);
							if (d != null) {
								a = a.replace(o.match[e], "");
								break
							}
						}
					}
			}
			if (!d) {
				d = b.getElementsByTagName("*")
			}
			return {
				set: d,
				expr: a
			}
		};
	n.filter = function (a, b, c, d) {
			var e = a,
				result = [],
				curLoop = b,
				match, anyFound, isXMLFilter = b && b[0] && u(b[0]);
			while (a && b.length) {
					for (var f in o.filter) {
						if ((match = o.leftMatch[f].exec(a)) != null && match[2]) {
							var g = o.filter[f],
								found, item, left = match[1];
							anyFound = false;
							match.splice(1, 1);
							if (left.substr(left.length - 1) === "\\") {
									continue
								}
							if (curLoop === result) {
									result = []
								}
							if (o.preFilter[f]) {
									match = o.preFilter[f](match, curLoop, c, result, d, isXMLFilter);
									if (!match) {
										anyFound = found = true
									} else if (match === true) {
										continue
									}
								}
							if (match) {
									for (var i = 0;
									(item = curLoop[i]) != null; i++) {
										if (item) {
											found = g(item, match, i, curLoop);
											var h = d ^ !! found;
											if (c && found != null) {
												if (h) {
													anyFound = true
												} else {
													curLoop[i] = false
												}
											} else if (h) {
												result.push(item);
												anyFound = true
											}
										}
									}
								}
							if (found !== undefined) {
									if (!c) {
										curLoop = result
									}
									a = a.replace(o.match[f], "");
									if (!anyFound) {
										return []
									}
									break
								}
						}
					}
					if (a === e) {
						if (anyFound == null) {
							n.error(a)
						} else {
							break
						}
					}
					e = a
				}
			return curLoop
		};
	n.error = function (a) {
			throw "Syntax error, unrecognized expression: " + a;
		};
	var o = n.selectors = {
			order: ["ID", "NAME", "TAG"],
			match: {
				ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
				CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
				NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
				ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
				TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
				CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
				POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
				PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
			},
			leftMatch: {},
			attrMap: {
				"class": "className",
				"for": "htmlFor"
			},
			attrHandle: {
				href: function (a) {
					return a.getAttribute("href")
				}
			},
			relative: {
				"+": function (a, b) {
					var c = typeof b === "string",
						isTag = c && !/\W/.test(b),
						isPartStrNotTag = c && !isTag;
					if (isTag) {
							b = b.toLowerCase()
						}
					for (var i = 0, l = a.length, elem; i < l; i++) {
							if ((elem = a[i])) {
								while ((elem = elem.previousSibling) && elem.nodeType !== 1) {}
								a[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === b ? elem || false : elem === b
							}
						}
					if (isPartStrNotTag) {
							n.filter(b, a, true)
						}
				},
				">": function (a, b) {
					var c = typeof b === "string",
						elem, i = 0,
						l = a.length;
					if (c && !/\W/.test(b)) {
							b = b.toLowerCase();
							for (; i < l; i++) {
								elem = a[i];
								if (elem) {
									var d = elem.parentNode;
									a[i] = d.nodeName.toLowerCase() === b ? d : false
								}
							}
						} else {
							for (; i < l; i++) {
								elem = a[i];
								if (elem) {
									a[i] = c ? elem.parentNode : elem.parentNode === b
								}
							}
							if (c) {
								n.filter(b, a, true)
							}
						}
				},
				"": function (a, b, c) {
					var d = done++,
						checkFn = dirCheck,
						nodeCheck;
					if (typeof b === "string" && !/\W/.test(b)) {
							b = b.toLowerCase();
							nodeCheck = b;
							checkFn = dirNodeCheck
						}
					checkFn("parentNode", b, d, a, nodeCheck, c)
				},
				"~": function (a, b, c) {
					var d = done++,
						checkFn = dirCheck,
						nodeCheck;
					if (typeof b === "string" && !/\W/.test(b)) {
							b = b.toLowerCase();
							nodeCheck = b;
							checkFn = dirNodeCheck
						}
					checkFn("previousSibling", b, d, a, nodeCheck, c)
				}
			},
			find: {
				ID: function (a, b, c) {
					if (typeof b.getElementById !== "undefined" && !c) {
						var m = b.getElementById(a[1]);
						return m ? [m] : []
					}
				},
				NAME: function (a, b) {
					if (typeof b.getElementsByName !== "undefined") {
						var c = [],
							results = b.getElementsByName(a[1]);
						for (var i = 0, l = results.length; i < l; i++) {
								if (results[i].getAttribute("name") === a[1]) {
									c.push(results[i])
								}
							}
						return c.length === 0 ? null : c
					}
				},
				TAG: function (a, b) {
					return b.getElementsByTagName(a[1])
				}
			},
			preFilter: {
				CLASS: function (a, b, c, d, e, f) {
					a = " " + a[1].replace(/\\/g, "") + " ";
					if (f) {
						return a
					}
					for (var i = 0, elem;
					(elem = b[i]) != null; i++) {
						if (elem) {
							if (e ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(a) >= 0)) {
								if (!c) {
									d.push(elem)
								}
							} else if (c) {
								b[i] = false
							}
						}
					}
					return false
				},
				ID: function (a) {
					return a[1].replace(/\\/g, "")
				},
				TAG: function (a, b) {
					return a[1].toLowerCase()
				},
				CHILD: function (a) {
					if (a[1] === "nth") {
						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
					}
					a[0] = done++;
					return a
				},
				ATTR: function (a, b, c, d, e, f) {
					var g = a[1].replace(/\\/g, "");
					if (!f && o.attrMap[g]) {
						a[1] = o.attrMap[g]
					}
					if (a[2] === "~=") {
						a[4] = " " + a[4] + " "
					}
					return a
				},
				PSEUDO: function (a, b, c, d, e) {
					if (a[1] === "not") {
						if ((k.exec(a[3]) || "").length > 1 || /^\w/.test(a[3])) {
							a[3] = n(a[3], null, null, b)
						} else {
							var f = n.filter(a[3], b, c, true ^ e);
							if (!c) {
								d.push.apply(d, f)
							}
							return false
						}
					} else if (o.match.POS.test(a[0]) || o.match.CHILD.test(a[0])) {
						return true
					}
					return a
				},
				POS: function (a) {
					a.unshift(true);
					return a
				}
			},
			filters: {
				enabled: function (a) {
					return a.disabled === false && a.type !== "hidden"
				},
				disabled: function (a) {
					return a.disabled === true
				},
				checked: function (a) {
					return a.checked === true
				},
				selected: function (a) {
					a.parentNode.selectedIndex;
					return a.selected === true
				},
				parent: function (a) {
					return !!a.firstChild
				},
				empty: function (a) {
					return !a.firstChild
				},
				has: function (a, i, b) {
					return !!n(b[3], a).length
				},
				header: function (a) {
					return (/h\d/i).test(a.nodeName)
				},
				text: function (a) {
					return "text" === a.type
				},
				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, i) {
					return i === 0
				},
				last: function (a, i, b, c) {
					return i === c.length - 1
				},
				even: function (a, i) {
					return i % 2 === 0
				},
				odd: function (a, i) {
					return i % 2 === 1
				},
				lt: function (a, i, b) {
					return i < b[3] - 0
				},
				gt: function (a, i, b) {
					return i > b[3] - 0
				},
				nth: function (a, i, b) {
					return b[3] - 0 === i
				},
				eq: function (a, i, b) {
					return b[3] - 0 === i
				}
			},
			filter: {
				PSEUDO: function (a, b, i, c) {
					var d = b[1],
						filter = o.filters[d];
					if (filter) {
							return filter(a, i, b, c)
						} else if (d === "contains") {
							return (a.textContent || a.innerText || getText([a]) || "").indexOf(b[3]) >= 0
						} else if (d === "not") {
							var e = b[3];
							for (var j = 0, l = e.length; j < l; j++) {
								if (e[j] === a) {
									return false
								}
							}
							return true
						} else {
							n.error("Syntax error, unrecognized expression: " + d)
						}
				},
				CHILD: function (a, b) {
					var c = b[1],
						node = a;
					switch (c) {
						case 'only':
						case 'first':
							while ((node = node.previousSibling)) {
								if (node.nodeType === 1) {
									return false
								}
							}
							if (c === "first") {
								return true
							}
							node = a;
						case 'last':
							while ((node = node.nextSibling)) {
								if (node.nodeType === 1) {
									return false
								}
							}
							return true;
						case 'nth':
							var d = b[2],
								last = b[3];
							if (d === 1 && last === 0) {
									return true
								}
							var e = b[0],
								parent = a.parentNode;
							if (parent && (parent.sizcache !== e || !a.nodeIndex)) {
									var f = 0;
									for (node = parent.firstChild; node; node = node.nextSibling) {
										if (node.nodeType === 1) {
											node.nodeIndex = ++f
										}
									}
									parent.sizcache = e
								}
							var g = a.nodeIndex - last;
							if (d === 0) {
									return g === 0
								} else {
									return (g % d === 0 && g / d >= 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],
						result = o.attrHandle[c] ? o.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
						value = result + "",
						q = b[2],
						check = b[4];
					return result == null ? q === "!=" : q === "=" ? value === check : q === "*=" ? value.indexOf(check) >= 0 : q === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : q === "!=" ? value !== check : q === "^=" ? value.indexOf(check) === 0 : q === "$=" ? value.substr(value.length - check.length) === check : q === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false
				},
				POS: function (a, b, i, c) {
					var d = b[2],
						filter = o.setFilters[d];
					if (filter) {
							return filter(a, i, b, c)
						}
				}
			}
		};
	var p = o.match.POS,
		fescape = function (a, b) {
			return "\\" + (b - 0 + 1)
		};
	for (var q in o.match) {
			o.match[q] = new RegExp(o.match[q].source + (/(?![^\[]*\])(?![^\(]*\))/.source));
			o.leftMatch[q] = new RegExp(/(^(?:.|\r|\n)*?)/.source + o.match[q].source.replace(/\\(\d+)/g, fescape))
		}
	var r = 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(document.documentElement.childNodes, 0)[0].nodeType
		} catch (e) {
			r = function (a, b) {
				var c = b || [],
					i = 0;
				if (toString.call(a) === "[object Array]") {
						Array.prototype.push.apply(c, a)
					} else {
						if (typeof a.length === "number") {
							for (var l = a.length; i < l; i++) {
								c.push(a[i])
							}
						} else {
							for (; a[i]; i++) {
								c.push(a[i])
							}
						}
					}
				return c
			}
		}
	var s;
	if (document.documentElement.compareDocumentPosition) {
			s = function (a, b) {
				if (!a.compareDocumentPosition || !b.compareDocumentPosition) {
					if (a == b) {
						hasDuplicate = true
					}
					return a.compareDocumentPosition ? -1 : 1
				}
				var c = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
				if (c === 0) {
					hasDuplicate = true
				}
				return c
			}
		} else if ("sourceIndex" in document.documentElement) {
			s = function (a, b) {
				if (!a.sourceIndex || !b.sourceIndex) {
					if (a == b) {
						hasDuplicate = true
					}
					return a.sourceIndex ? -1 : 1
				}
				var c = a.sourceIndex - b.sourceIndex;
				if (c === 0) {
					hasDuplicate = true
				}
				return c
			}
		} else if (document.createRange) {
			s = function (a, b) {
				if (!a.ownerDocument || !b.ownerDocument) {
					if (a == b) {
						hasDuplicate = true
					}
					return a.ownerDocument ? -1 : 1
				}
				var c = a.ownerDocument.createRange(),
					bRange = b.ownerDocument.createRange();
				c.setStart(a, 0);
				c.setEnd(a, 0);
				bRange.setStart(b, 0);
				bRange.setEnd(b, 0);
				var d = c.compareBoundaryPoints(Range.START_TO_END, bRange);
				if (d === 0) {
						hasDuplicate = true
					}
				return d
			}
		}
	function getText(a) {
			var b = "",
				elem;
			for (var i = 0; a[i]; i++) {
					elem = a[i];
					if (elem.nodeType === 3 || elem.nodeType === 4) {
						b += elem.nodeValue
					} else if (elem.nodeType !== 8) {
						b += getText(elem.childNodes)
					}
				}
			return b
		}(function () {
			var d = document.createElement("div"),
				id = "script" + (new Date()).getTime();
			d.innerHTML = "<a name='" + id + "'/>";
			var e = document.documentElement;
			e.insertBefore(d, e.firstChild);
			if (document.getElementById(id)) {
					o.find.ID = function (a, b, c) {
						if (typeof b.getElementById !== "undefined" && !c) {
							var m = b.getElementById(a[1]);
							return m ? m.id === a[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === a[1] ? [m] : undefined : []
						}
					};
					o.filter.ID = function (a, b) {
						var c = typeof a.getAttributeNode !== "undefined" && a.getAttributeNode("id");
						return a.nodeType === 1 && c && c.nodeValue === b
					}
				}
			e.removeChild(d);
			e = d = null
		})();
		(function () {
			var e = document.createElement("div");
			e.appendChild(document.createComment(""));
			if (e.getElementsByTagName("*").length > 0) {
				o.find.TAG = function (a, b) {
					var c = b.getElementsByTagName(a[1]);
					if (a[1] === "*") {
						var d = [];
						for (var i = 0; c[i]; i++) {
							if (c[i].nodeType === 1) {
								d.push(c[i])
							}
						}
						c = d
					}
					return c
				}
			}
			e.innerHTML = "<a href='#'></a>";
			if (e.firstChild && typeof e.firstChild.getAttribute !== "undefined" && e.firstChild.getAttribute("href") !== "#") {
				o.attrHandle.href = function (a) {
					return a.getAttribute("href", 2)
				}
			}
			e = null
		})();
	if (document.querySelectorAll) {
			(function () {
				var f = n,
					div = document.createElement("div");
				div.innerHTML = "<p class='TEST'></p>";
				if (div.querySelectorAll && div.querySelectorAll(".TEST").length === 0) {
						return
					}
				n = function (a, b, c, d) {
						b = b || document;
						if (!d && b.nodeType === 9 && !u(b)) {
							try {
								return r(b.querySelectorAll(a), c)
							} catch (e) {}
						}
						return f(a, b, c, d)
					};
				for (var g in f) {
						n[g] = f[g]
					}
				div = null
			})()
		}(function () {
			var d = document.createElement("div");
			d.innerHTML = "<div class='test e'></div><div class='test'></div>";
			if (!d.getElementsByClassName || d.getElementsByClassName("e").length === 0) {
				return
			}
			d.lastChild.className = "e";
			if (d.getElementsByClassName("e").length === 1) {
				return
			}
			o.order.splice(1, 0, "CLASS");
			o.find.CLASS = function (a, b, c) {
				if (typeof b.getElementsByClassName !== "undefined" && !c) {
					return b.getElementsByClassName(a[1])
				}
			};
			d = null
		})();

	function dirNodeCheck(a, b, c, d, e, f) {
			for (var i = 0, l = d.length; i < l; i++) {
				var g = d[i];
				if (g) {
					g = g[a];
					var h = false;
					while (g) {
						if (g.sizcache === c) {
							h = d[g.sizset];
							break
						}
						if (g.nodeType === 1 && !f) {
							g.sizcache = c;
							g.sizset = i
						}
						if (g.nodeName.toLowerCase() === b) {
							h = g;
							break
						}
						g = g[a]
					}
					d[i] = h
				}
			}
		}
	function dirCheck(a, b, c, d, e, f) {
			for (var i = 0, l = d.length; i < l; i++) {
				var g = d[i];
				if (g) {
					g = g[a];
					var h = false;
					while (g) {
						if (g.sizcache === c) {
							h = d[g.sizset];
							break
						}
						if (g.nodeType === 1) {
							if (!f) {
								g.sizcache = c;
								g.sizset = i
							}
							if (typeof b !== "string") {
								if (g === b) {
									h = true;
									break
								}
							} else if (n.filter(b, [g]).length > 0) {
								h = g;
								break
							}
						}
						g = g[a]
					}
					d[i] = h
				}
			}
		}
	var t = document.compareDocumentPosition ?
	function (a, b) {
			return !!(a.compareDocumentPosition(b) & 16)
		} : function (a, b) {
			return a !== b && (a.contains ? a.contains(b) : true)
		};
	var u = function (a) {
			var b = (a ? a.ownerDocument || a : 0).documentElement;
			return b ? b.nodeName !== "HTML" : false
		};
	var v = function (a, b) {
			var c = [],
				later = "",
				match, root = b.nodeType ? [b] : b;
			while ((match = o.match.PSEUDO.exec(a))) {
					later += match[0];
					a = a.replace(o.match.PSEUDO, "")
				}
			a = o.relative[a] ? a + "*" : a;
			for (var i = 0, l = root.length; i < l; i++) {
					n(a, root[i], c)
				}
			return n.filter(later, c)
		};
	window.Sizzle = n
})();

/******************* 				SIZZLE is DONE						*******************/

Array.prototype.last = function () {
	return this[this.length - 1]
};
Array.prototype.max = function () {
	return Math.max.apply(Math, this)
};
Array.prototype.min = function () {
	return Math.min.apply(Math, this)
};
Array.prototype.shuffle = function () {
	for (var a, tmp, i = this.length; i; a = parseInt(Math.random() * i, 10), tmp = this[--i], this[i] = this[a], this[a] = tmp);
	return this
};
Array.prototype.sort = function () {
	return this.sort(function (a, b) {
		return a - b
	})
};
Array.prototype.find = function (a) {
	var b = false,
		i, e;
	for (i = 0, e = this.length; i < e; i++) {
			if (typeof(a) == 'function') {
				if (a.test(this[i])) {
					if (!b) {
						b = []
					}
					b.push(i)
				}
			} else {
				if (this[i] === a) {
					if (!b) {
						b = []
					}
					b.push(i)
				}
			}
		}
	return b
};
Array.prototype.map = function (f) {
	var a = [],
		i, e;
	for (i = 0, e = this.length; i < e; i++) {
			a.push(f(this[i]))
		}
	return a
};
if (typeof(Array.prototype.slice) === 'undefined') {
	Array.prototype.slice = function (a, c) {
		var i, l = this.length,
			r = [];
		if (!c) {
				c = l
			}
		if (c < 0) {
				c = l + c
			}
		if (a < 0) {
				a = l - a
			}
		if (c < a) {
				i = a;
				a = c;
				c = i
			}
		for (i = 0; i < c - a; i++) {
				r[i] = this[a + i]
			}
		return r
	}
}
if (typeof(Array.prototype.splice) === 'undefined') {
	Array.prototype.splice = function (a, c) {
		var i = 0,
			e = arguments,
			d = this.copy(),
			f = a,
			l = this.length,
			Q = 0;
		if (!c) {
				c = l - a
			}
		for (i = 0, Q = e.length - 2; i < Q; i++) {
				this[a + i] = e[i + 2]
			}
		for (a = 0; a < l - c; a++) {
				this[a + e.length - 2] = d[a - c]
			}
		this.length -= c - e.length + 2;
		return d.slice(f, f + c)
	}
}
if (typeof(String.prototype.trim) === typeof(undefined)) {
	String.prototype.trim = function () {
		var i, e, str = this,
			whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
		for (i = 0, e = str.length; i < e; i++) {
				if (whitespace.indexOf(str.charAt(i)) === -1) {
					str = str.substring(i);
					break
				}
			}
		for (i = str.length - 1; i >= 0; i--) {
				if (whitespace.indexOf(str.charAt(i)) === -1) {
					str = str.substring(0, i + 1);
					break
				}
			}
		return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''
	}
}
// reverses String
String.prototype.reverse = function() {
	return this.split("").reverse().join("");
};
String.prototype.trunc = function (n, a) {
	var b = this.length > n,
		s_ = b ? this.substr(0, n - 1) : this;
	s_ = a && b ? s_.substr(0, s_.lastIndexOf(' ')) : s_;
	return b ? s_ + '...' : s_
};
String.prototype.normalizeAll = function () {
	if (!arguments.callee.reg) {
		arguments.callee.reg = RegExp("([{}\(\)\^$&._%#!@=<>:;,~`'\ \*\?\/\+\|[\\\\]|]|\-)", "ig");
	}
	return this.replace(arguments.callee.reg, "");
};
String.prototype.normalize = function () {
	if (!arguments.callee.reg) {
		arguments.callee.reg = RegExp("([{}\(\)\^$&._%#!@=<>:;,~`'\\*\?\/\+\|[\\\\]|]|\-)", "ig");
	}
	return this.replace(arguments.callee.reg, "")
};
Number.prototype.readable = function (a) {
	if (!arguments.callee.reg) {
		arguments.callee.reg = RegExp("(^\\d{" + (this.toString().length % 3 || -1) + "})(?=\\d{3})");
		arguments.callee.reg1 = RegExp("(\d{3})(?=\d)", "g");
	}
	return this.toString().replace(arguments.callee.reg, "$1" + a).replace(arguments.callee.reg1, "$1" + a)
};
var Try = {
	these: function () {
		for (var i = 0, e = arguments.length; i < e; i++) {
			if (typeof arguments[i] === typeof
			function () {}) {
				try {
					return arguments[i]()
				} catch (err) {}
			}
		}
	}
};
Array.prototype.indexOf = function(value)
{

    var startIndex  = 0,
        stopIndex   = this.length - 1,
        middle      = Math.floor((stopIndex + startIndex)/2);

    while(this[middle] !== value && startIndex < stopIndex) {

        //adjust search area
        if (value < this[middle]) {
            stopIndex = middle - 1;
        } else if (value > this[middle]){
            startIndex = middle + 1;
        }

        //recalculate middle
        middle = Math.floor((stopIndex + startIndex)/2);
    }

    //make sure it's the right value
    return (this[middle] !== value) ? -1 : middle;
};
var $$ = function (e, t) {
	e = (typeof e === typeof "") ? e = Sizzle(e) : (t) ? [e] : e;
	return (t) ? e : (e.length === 1) ? e[0] : e
};
var $ = function (e) {
	this._init = function () {
		if (window.initiated) {
			return
		}
		window.initiated = true;
		var c;
		document.onmousemove = function (e) {
			if (!e) {
				e = window.event
			}
			try { 
				if (e.clientX) {
					window.x = e.clientX + parseInt((document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft, 10);
					window.y = e.clientY + parseInt((document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop, 10)
				} else if (e.pageX) {
					window.x = e.pageX;
					window.y = e.pageY
				}
				if (window.mouseMoveCallBack) {
					window.mouseMoveCallBack()
				}
			} catch(err){}
			return [window.x, window.y]
		};
		c = function () {
			if (typeof(window.innerWidth) === 'number') {
				window.width = window.innerWidth;
				window.height = window.innerHeight
			} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
				window.width = document.documentElement.clientWidth;
				window.height = document.documentElement.clientHeight
			} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
				window.width = document.body.clientWidth;
				window.height = document.body.clientHeight
			}
			window.width = parseInt(window.width, 10);
			window.height = parseInt(window.height, 10)
		};
		c();
		window.onresize = function () {
			if (window.resizeTimer) {
				clearTimeout(window.resizeTimer)
			}
			c();
			if (window.onResizeCallBack) {
				window.onResizeCallBack();
			}
			window.resizeTimer = setTimeout(function () {
				if (window.onresizeend) {
					window.onresizeend()
				}
			}, 500)
		};
		if ($.browser) {
			$.browser.init()
		}
	};
	this.left = function()
	{
		e = $$(e).previousSibling;
		return this;
	};
	this.right = function()
	{
		e = $$(e).nextSibling;
		return this;
	};
	this.css = function (o) {
		if (!arguments.callee.reg) {
			arguments.callee.reg = RegExp('([^A-Z])([A-Z])', 'g');
		}
		var d = function (a, b) {
			a = a.trim();
			if (b) {
				var c = a.split('-'),
					i, e, output = "";
				for (i = 0, e = c.length; i < e; i++) {
						output += (i === 0) ? c[i].toLowerCase() : c[i]
					}
				return output
			} else {
				return a.replace(arguments.callee.reg, "$1-$2").toLowerCase()
			}
		}, a, self;
		if ($.browser.browser !== "Explorer") {
			a = document.styleSheets[0];
			for (p in o) {
				if (typeof e === typeof "s") {
					if (a.insertRule) {
						a.insertRule(e + " { " + d(p, false) + " : " + o[p] + "; }", a.cssRules.length)
					} else if (a.addRule) {
						a.addRule(e, d(p, false) + " : " + o[p])
					}
				}
			}
		} else {
			this.o = o;
			self = this;
			$$(e, true).map(function(r) {
				if (r.style) {
					for (p in self.o) {
						r.style[d(p, true)] = self.o[p]
					}
				}
			});
		}
		return true
	};
	this.remove = function () {
		$$(e,true).map(function(r){if(r.parentNode){r.parentNode.removeChild(r)}});
	};
	this.attrs = function (o) {
		this.o = o;
		var self = this;
		$$(e, true).map(function(r){
			for (p in self.o) {
				r.setAttribute(p, o[p]);
				if (p.toLowerCase() === "class") {
					r.setAttribute('className', o[p])
				}
			}
		});
	};
	this.children = function (a) {
		this.a = a;
		this.els = [];
		var self = this;
		$$(e, true).map(function(r){
			var i, e, temp;
			if (typeof self.a === typeof "") {
				temp = r.getElementsByTagName(self.a),e=temp.length;
				for(i=0;i<e;i++){if(temp[i].nodeType===1){self.els.push(temp[i])}}
			} else {
				e=r.childNodes.length;
				for(i=0;i<e;i++){if(r.childNodes[i].nodeType===1){self.els.push(r.childNodes[i])}}
			}
			delete i, e, temp;
		});
		e = self.els;
		return this
	};
	this.tag = function () {
		return $$(e).tagName.toLowerCase()
	};
	this.parnt = function () {
		e = $$(e).parentNode;
		return this
	};
	this.style = function (p) {
		if ($$(e).currentStyle) {
			return $$(e).currentStyle[p]
		} else if (window.getComputedStyle) {
			return document.defaultView.getComputedStyle($$(e), null).getPropertyValue(p)
		}
	};
	this.get = function () {
		if(typeof e === typeof []){return e}
		return $$(e)
	};
	this.each = function (f) {
		if (typeof e !== typeof "") {
			e = $$(e)
		}
		if (e.length !== undefined) {
			for (i = 0, k = e.length; i < k; i++) {
				f(i, $$(e)[i])
			}
		}
	};
	this.has = function (p) {
		try{return (p in (typeof e === typeof {})?e:$$(e));}catch(err){}
		for (r in (typeof e === typeof {})?e:$$(e)) {
			if (r === p) {
				return true
			}
		}
		return false
	};
	this.select = function () {
		if ($$(e).options) {
			return $$(e).options[$$(e).selectedIndex].value
		}
	};
	this.disableSelection = function()
	{
		e = $(e);
		e.get().onselectstart = e.get().onmousedown = function() { return false; };
		e.css({'user-select':'none','-moz-user-select':'none','-webkit-user-select':'none','-khtml-user-select':'none'});
		return this;
	};
	this.option = function (v) {
		if ($$(e).options) {
			$$(e).options[$$(e).options.length] = new Option(v, v, false, false)
		}
	};
	this.position = function () {
		var a = $$(e),
			how_ = [0, 0];
		if (a.offsetParent) {
				while (a !== null) {
					how_[0] += parseInt(a.offsetLeft, 10);
					how_[1] += parseInt(a.offsetTop, 10);
					if (!a.offsetParent) {
						break
					}
					a = a.offsetParent
				}
			} else if (a.x) {
				how_[0] += a.x;
				how_[1] += a.y
			}
		return how_
	};
	this.draggable = function (a, b, c, d, f, g, h, i, j) {
		$.drag.init($$(e), a, b, c, d, f, g, h, i, j)
	};
	this.isEmail = function () {
		if (!arguments.callee.reg) {
			arguments.callee.reg = RegExp("^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$", "i");
		}
		if (arguments.callee.reg.test(e)) {
			return true
		} else {
			return false
		}
	};
	this.isUrl = function () {
		if (!arguments.callee.reg) {
			arguments.callee.reg = RegExp("^((https?|ftp):\/\/|)(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$", "i");
		}
		if (arguments.callee.reg.test(e)) {
			return true
		} else {
			return false
		}
	};
	this.isDate = function () {
		if (!arguments.callee.reg) {
			arguments.callee.reg = RegExp(/Invalid|NaN/);
		}
		if (!arguments.callee.reg.test(new Date(e))) {
			return true
		} else {
			return false
		}
	};
	this.isNum = function () {
		if (!arguments.callee.reg) {
			arguments.callee.reg = RegExp("^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$");
		}
		if (arguments.callee.reg.test(e)) {
			return true
		} else {
			return false
		}
	};
	this.fx = function () {
		var h = $$(e),
			k, l, m, n, o, f;
		if (typeof(h._fx) != 'undefined' && h._fx) {
				h._fx._addSet();
				return h
			}
		h.fxVersion = 0.1;
		h._fx = {};
		h._fx.sets = [];
		h._fx._currSet = 0;
		if (typeof(h._fxTerminated) != 'undefined') {
				try {
					delete h._fxTerminated
				} catch (err) {
					h._fxTerminated = null
				}
			}
		k = {
				'left|top|right|bottom|width|height|margin|padding|spacing|backgroundx|backgroundy': 'px',
				'font': 'pt',
				'opacity': ''
			};
		l = !! navigator.userAgent.match(/MSIE/ig);
		m = {
				delay: 100,
				step: 5,
				unit: ''
			};
		n = {
				opacity: function (a, b) {
					if (!arguments.callee.reg) {
						arguments.callee.reg = RegExp('alpha\\s*\\(opacity\\s*=\\s*(\\d+)\\)');
					}
					a = parseInt(a, 10);
					if (isNaN(a)) {
						if (l) {
							var c = arguments.callee.reg.exec(h.style.filter + '');
							if (c) {
								return parseInt(c[1], 10)
							} else return 1
						} else {
							return Math.round((h.style.opacity ? parseFloat(h.style.opacity, 10) : 1) * 100)
						}
					} else {
						a = Math.min(100, Math.max(0, a));
						if (l) {
							h.style.zoom = 1;
							h.style.filter = 'alpha(opacity=' + a + ');'
						} else {
							h.style.opacity = a / 100
						}
					}
				},
				'backgroundx': function (a, b) {
					if (!arguments.callee.reg) {
						arguments.callee.reg = RegExp('^(-?\\d+)[^\\d\\-]+(-?\\d+)');
					}
					a = parseInt(a, 10);
					var x = 0,
						y = 0,
						c = arguments.callee.reg.exec(h.style.backgroundPosition + '');
					if (c) {
							x = parseInt(c[1], 10);
							y = parseInt(c[2], 10)
						}
					if (isNaN(a)) {
							return x
						} else {
							h.style.backgroundPosition = a + b + ' ' + y + b
						}
				},
				'backgroundy': function (a, b) {
					if (!arguments.callee.reg) {
						arguments.callee.reg = RegExp('^(-?\\d+)[^\\d\\-]+(-?\\d+)');
					}
					a = parseInt(a, 10);
					var x = 0,
						y = 0,
						c = arguments.callee.reg.exec(h.style.backgroundPosition + '');
					if (c) {
							x = parseInt(c[1], 10);
							y = parseInt(c[2], 10)
						}
					if (isNaN(a)) {
							return y
						} else {
							h.style.backgroundPosition = x + b + ' ' + a + b
						}
				}
			};
		o = {
				width: function () {
					return parseInt(h.offsetWidth, 10)
				},
				height: function () {
					return parseInt(h.offsetHeight, 10)
				},
				left: function () {
					var a = 0,
						b;
					for (b = h; b; b = b.offsetParent) {
							a += parseInt(b.offsetLeft, 10)
						}
					return a
				},
				top: function () {
					var a = 0,
						b;
					for (b = h; b; b = b.offsetParent) {
							a += parseInt(b.offsetTop, 10)
						}
					return a
				}
			};
		h.fxAddSet = function () {
				this._fx._addSet();
				return this
			};
		h.fxHold = function (a, b) {
				if (h._fx.sets[this._fx._currSet]._isrunning) {
					return this
				}
				var b = parseInt(b, 10);
				this._fx.sets[isNaN(b) ? this._fx._currSet : b]._holdTime = a;
				return this
			};
		h.fxAdd = function (c) {
				var d = this._fx._currSet,
					e, p;
				if (this._fx.sets[d]._isrunning) {
						return this
					}
				for (p in m) {
						if (!c[p]) {
							c[p] = m[p]
						}
					}
				if (!c.unit) {
						for (e in k) {
							if ((new RegExp(e, 'i').test(c.type))) {
								c.unit = k[e];
								break
							}
						}
					}
				c.onstart = (c.onstart && c.onstart.call) ? c.onstart : function () {};
				c.onfinish = (c.onfinish && c.onfinish.call) ? c.onfinish : function () {};
				if (!this._fx[c.type]) {
						if (n[c.type]) {
							this._fx[c.type] = n[c.type]
						} else {
							f = this;
							this._fx[c.type] = function (a, b) {
								if (typeof(a) == 'undefined') {
									return parseInt(f.style[c.type], 10)
								} else {
									f.style[c.type] = parseInt(a, 10) + b
								}
							}
						}
					}
				if (isNaN(c.from)) {
						if (isNaN(this._fx[c.type]())) {
							if (o[c.type]) {
								c.from = o[c.type]()
							} else {
								c.from = 0
							}
						} else {
							c.from = this._fx[c.type]()
						}
					}
				c._initial = c.from;
				this._fx[c.type](c.from, c.unit);
				this._fx.sets[d]._queue.push(c);
				return this
			};
		h.fxRun = function (a, b, c) {
				var d = h._fx._currSet,
					i;
				if (this._fx.sets[d]._isrunning) {
						return this
					}
				setTimeout(function () {
						if (h._fx.sets[d]._isrunning) {
							return h
						}
						h._fx.sets[d]._isrunning = true;
						if (h._fx.sets[d]._effectsDone > 0) {
							return h
						}
						h._fx.sets[d]._onfinal = (a && a.call) ? a : function () {};
						h._fx.sets[d]._onloop = (c && c.call) ? c : function () {};
						if (!isNaN(b)) {
							h._fx.sets[d]._loops = b
						}
						for (i = 0; i < h._fx.sets[d]._queue.length; i++) {
							h._fx.sets[d]._queue[i].onstart.call(h);
							h._fx._process(d, i)
						}
					}, h._fx.sets[d]._holdTime);
				return this
			};
		h.fxPause = function (a, b) {
				this._fx.sets[!isNaN(b) ? b : this._fx._currSet]._paused = a;
				return this
			};
		h.fxStop = function (a) {
				this._fx.sets[!isNaN(a) ? a : this._fx._currSet]._stoped = true;
				return this
			};
		h.fxReset = function () {
				var i, j, b;
				for (i = 0; i < this._fx.sets.length; i++) {
					for (j = 0; j < this._fx.sets[i]._queue.length; j++) {
						var a = this._fx.sets[i]._queue[j];
						if (isNaN(a._initial)) {
							this._fx[a.type]('', '')
						} else {
							this._fx[a.type](a._initial, a.unit)
						}
					}
				}
				b = ['_fx', 'fxHold', 'fxAdd', 'fxAddSet', 'fxRun', 'fxPause', 'fxStop', 'fxReset'];
				for (i = 0; i < b.length; i++) {
					try {
						delete this[b[i]]
					} catch (err) {
						this[b[i]] = null
					}
				}
				this._fxTerminated = true
			};
		h._fx._addSet = function () {
				var a = this.sets.length;
				this._currSet = a;
				this.sets[a] = {};
				this.sets[a]._loops = 1;
				this.sets[a]._stoped = false;
				this.sets[a]._queue = [];
				this.sets[a]._effectsDone = 0;
				this.sets[a]._loopsDone = 0;
				this.sets[a]._holdTime = 0;
				this.sets[a]._paused = false;
				this.sets[a]._isrunning = false;
				this.sets[a]._onfinal = function () {};
				return this
			};
		h._fx._process = function (a, b) {
				if (!this.sets[a] || this.sets[a]._stoped || h._fxTerminated) {
					return
				}
				var c = this.sets[a]._queue[b],
					d = this[c.type](),
					e, i;
				if ((c.step > 0 && d + c.step <= c.to) || (c.step < 0 && d + c.step >= c.to)) {
						if (!this.sets[a]._paused) {
							this[c.type](d + c.step, c.unit)
						}
						e = this;
						setTimeout(function () {
							if (e._process) {
								e._process(a, b)
							}
						}, c.delay)
					} else {
						this[c.type](c.to, c.unit);
						this.sets[a]._effectsDone++;
						c.onfinish.call(h);
						if (this.sets[a]._queue.length == this.sets[a]._effectsDone) {
							this.sets[a]._effectsDone = 0;
							this.sets[a]._loopsDone++;
							this.sets[a]._onloop.call(h, this.sets[a]._loopsDone);
							if (this.sets[a]._loopsDone < this.sets[a]._loops || this.sets[a]._loops == -1) {
								for (i = 0; i < this.sets[a]._queue.length; i++) {
									this[c.type](c.from, this.sets[a]._queue[i].unit);
									this.sets[a]._queue[i].onstart.call(h, this.sets[a]._loopsDone);
									this._process(a, i)
								}
							} else {
								this.sets[a]._onfinal.call(h)
							}
						}
					}
			};
		h._fx._addSet();
		return h
	};
	this._init();
	if (this instanceof $) {
		return this.$
	} else {
		return new $(e)
	}
};
$.extend = function (a, b) {
	window.initiated = false;
	window.$[a] = b
};
$.extend('IFrameRequest', function () {
	var a = 0;
	this.readyState = 0;
	this.status = 0;
	this.responseText = "";
	if (typeof window.req_id === typeof undefined) {
		window.req_id = 0
	}
	window.req_id++
});
$.IFrameRequest.prototype = {
	open: function (a, b, c) {
		this.protocol = a;
		this.url = b
	},
	onreadystatechange: function () {},
	abort: function () {},
	send: function (a) {
		var b = this;
		if (this.protocol.toUpperCase() == 'POST') {
			this.url = this.url + "&" + a
		}
		var c = document.createElement('iframe');
		c.setAttribute('id', 'req' + window.req_id);
		c.setAttribute('name', 'req' + window.req_id);
		c.style.width = "0";
		c.style.height = "0";
		c.style.border = "0";
		document.body.appendChild(c);
		try {
			c.src = this.url
		} catch (e) {
			return false
		}
		this.readyState = 1;
		this.onreadystatechange();
		b.IFrameDoc = c;
		var d = function () {
			b.responseText = b.IFrameDoc.contentDocument.body.innerHTML;
			b.IFrameDoc.parentNode.removeChild(b.IFrameDoc);
			b.status = 200;
			b.readyState = 4;
			b.onreadystatechange()
		};
		if (c.attachEvent) {
			c.attachEvent('onload', d);
			return true
		}
		c.onload = d;
		return true
	},
	overrideMimeType: function () {},
	getResponseHeader: function (a) {
		return ''
	},
	setRequestHeader: function (a, b) {}
};
$.extend('ajax', {
	_attempts: 0,
	_passes: 0,
	get: function (a) {
		a.type = "GET";
		this._setup(a)
	},
	post: function (a) {
		a.type = "POST";
		this._setup(a)
	},
	_xhr: function () {
		return Try.these(function () {
			return new XMLHttpRequest()
		}, function () {
			return new window.createRequest()
		}, function () {
			return new ActiveXObject('Msxml2.XMLHTTP')
		}, function () {
			return new ActiveXObject('Microsoft.XMLHTTP')
		}, function () {
			return new $.IFrameRequest()
		})
	},
	uri: function (a) {
		if (a === undefined) {
			return
		}
		var b = "",
			i = 0,
			len = -1,
			value;
		for (value in a) {
				if (a.hasOwnProperty(value)) {
					len++
				}
			}
		for (value in a) {
				b += escape(value) + "=" + escape(a[value]);
				if (++i <= len) {
					b += "&"
				}
			}
		return "" + b
	},
	_setup: function (a) {
		var b = new this._xhr();
		if (!a.cache) {
			a.queries.NoCaching = Math.floor(Math.random() * 100)
		}
		if (b.overrideMimeType) {
			b.overrideMimeType('text/xml')
		}
		b.onreadystatechange = function () {
			if (this.readyState === 4) {
				if (this.status === 200) {
					if (a.dataType.toLowerCase() === "json") {
						a.success(window.JSON.parse(this.responseText), a.params)
					} else if (a.dataType.toLowerCase() === "xml") {
						a.success(this.responseXML, a.params)
					} else {
						a.success(this.responseText, a.params)
					}
					window.$.ajax._passes++
				} else {
					throw new Error("HTTP Error Status " + this.status);
				}
				this.abort()
			}
		};
		b.open(a.type, ((a.type.toLowerCase() === "post") ? a.url : (a.url + "?" + this.uri(a.queries))), (a.async === undefined) ? true : Boolean(a.async));
		if (a.type.toLowerCase() === "post") {
			b.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
		}
		b.send((a.type.toLowerCase() === "post") ? this.uri(a.queries) : undefined);
		++this._attempts
	}
});
$.extend('font', {
	set: function (a, b, c) {
		c = (c) ? c : document.getElementsByTagName('body')[0];
		a = (a) ? a : window.fontSize;
		var d, Node;
		b = (b) ? b : "px";
		if (Node === undefined) {
			Node = {
				ELEMENT_NODE: 1,
				TEXT_NODE: 3
			}
		}
		switch (c.nodeType) {
		case Node.ELEMENT_NODE:
			d = c.firstChild;
			while (d) {
				if (d.style) {
					d.style.fontSize = a + b
				}
				d = d.nextSibling
			}
			break;
		case Node.TEXT_NODE:
			break
		}
		return this.get()
	},
	get: function () {
		var a = document.createElement('span'),
			body = document.getElementsByTagName('body')[0],
			size;
		a.setAttribute('id', 'fntgt');
		body.appendChild(a);
		$('#fntgt').css({
				'position': 'absolute',
				'left': '-9999px'
			});
		$('#fntgt').get().innerHTML = " ";
		size = parseInt($('#fntgt').style('font-size'), 10);
		$('#fntgt').remove();
		return size
	},
	repeat: function (a, b) {
		if (!arguments.callee.times) {
			arguments.callee.times = times
		}
		if (!arguments.callee.interval) {
			arguments.callee.interval = b
		}
		if (!arguments.callee.get) {
			arguments.callee.get = this.get
		}
		arguments.callee.get();
		--arguments.callee.times;
		if (arguments.callee.times > 0) {
			window.setTimeout(arguments.callee, arguments.callee.interval)
		}
	}
});
$.extend("browser", {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS"
	},
	searchString: function (a) {
		for (var i = 0; i < a.length; i++) {
			var b = a[i].string;
			var c = a[i].prop;
			this.versionSearchString = a[i].versionSearch || a[i].identity;
			if (b) {
				if (b.indexOf(a[i].subString) !== -1) {
					return a[i].identity
				}
			} else if (c) {
				return a[i].identity
			}
		}
	},
	searchVersion: function (a) {
		var b = a.indexOf(this.versionSearchString);
		if (b === -1) {
			return
		}
		return parseFloat(a.substring(b + this.versionSearchString.length + 1))
	},
	dataBrowser: [{
		string: navigator.userAgent,
		subString: "Chrome",
		identity: "Chrome"
	},
	{
		string: navigator.userAgent,
		subString: "OmniWeb",
		versionSearch: "OmniWeb/",
		identity: "OmniWeb"
	},
	{
		string: navigator.vendor,
		subString: "Apple",
		identity: "Safari",
		versionSearch: "Version"
	},
	{
		prop: window.opera,
		identity: "Opera"
	},
	{
		string: navigator.vendor,
		subString: "iCab",
		identity: "iCab"
	},
	{
		string: navigator.vendor,
		subString: "KDE",
		identity: "Konqueror"
	},
	{
		string: navigator.userAgent,
		subString: "Firefox",
		identity: "Firefox"
	},
	{
		string: navigator.vendor,
		subString: "Camino",
		identity: "Camino"
	},
	{
		string: navigator.userAgent,
		subString: "Netscape",
		identity: "Netscape"
	},
	{
		string: navigator.userAgent,
		subString: "MSIE",
		identity: "Explorer",
		versionSearch: "MSIE"
	},
	{
		string: navigator.userAgent,
		subString: "Gecko",
		identity: "Mozilla",
		versionSearch: "rv"
	},
	{
		string: navigator.userAgent,
		subString: "Mozilla",
		identity: "Netscape",
		versionSearch: "Mozilla"
	}],
	dataOS: [{
		string: navigator.platform,
		subString: "Win",
		identity: "Windows"
	},
	{
		string: navigator.platform,
		subString: "Mac",
		identity: "Mac"
	},
	{
		string: navigator.userAgent,
		subString: "iPhone",
		identity: "iPhone/iPod"
	},
	{
		string: navigator.platform,
		subString: "Linux",
		identity: "Linux"
	}]
});
$.extend("ROT", {
	_char: function (a, b, c, d) {
		return String.fromCharCode(b + (((d.charCodeAt(0) - b) + a) % (a * 2)))
	},
	convert: function (a, N) {
		var b = a.length,
			output = "",
			i;
		switch (N) {
			case 5:
				for (i = 0; i < b; i++) {
					if (a.charCodeAt(i) >= 48 && a.charCodeAt(i) <= 57) {
						output = output + this._char(5, 48, 57, a.charAt(i))
					} else {
						output = output + a.charAt(i)
					}
				}
				break;
			case 13:
				for (i = 0; i < b; i++) {
					if (a.charCodeAt(i) >= 65 && a.charCodeAt(i) <= 90) {
						output = output + this._char(13, 65, 90, a.charAt(i))
					} else {
						if (a.charCodeAt(i) >= 97 && a.charCodeAt(i) <= 122) {
							output = output + this._char(13, 97, 122, a.charAt(i))
						} else {
							output = output + a.charAt(i)
						}
					}
				}
				break;
			case 18:
				for (i = 0; i < b; i++) {
					if (a.charCodeAt(i) >= 65 && a.charCodeAt(i) <= 90) {
						output = output + this._char(13, 65, 90, a.charAt(i))
					} else {
						if (a.charCodeAt(i) >= 97 && a.charCodeAt(i) <= 122) {
							output = output + this._char(13, 97, 122, a.charAt(i))
						} else {
							if (a.charCodeAt(i) >= 48 && a.charCodeAt(i) <= 57) {
								output = output + this._char(5, 48, 57, a.charAt(i))
							} else {
								output = output + a.charAt(i)
							}
						}
					}
				}
				break;
			case 47:
				for (i = 0; i < b; i++) {
					if (a.charCodeAt(i) >= 33 && a.charCodeAt(i) <= 126) {
						output = output + this._char(47, 33, 126, a.charAt(i))
					} else {
						output = output + a.charAt(i)
					}
				}
				break
			}
		return output
	}
});
$.extend("drag", {
	obj: null,
	init: function (o, a, b, c, d, e, f, g, h, i) {
		var j = $(o).position();
		o.style.top = j[1] + "px";
		o.style.left = j[0] + "px";
		o.style.position = "absolute";
		o.style.zIndex = "100";
		o.onmousedown = $.drag.start;
		o.hmode = f ? false : true;
		o.vmode = g ? false : true;
		o.root = a && a !== null ? a : o;
		if (o.hmode && isNaN(parseInt(o.root.style.left, 10))) o.root.style.left = "0px";
		if (o.vmode && isNaN(parseInt(o.root.style.top, 10))) o.root.style.top = "0px";
		if (!o.hmode && isNaN(parseInt(o.root.style.right, 10))) o.root.style.right = "0px";
		if (!o.vmode && isNaN(parseInt(o.root.style.bottom, 10))) o.root.style.bottom = "0px";
		o.minX = typeof b != 'undefined' ? b : null;
		o.minY = typeof d != 'undefined' ? d : null;
		o.maxX = typeof c != 'undefined' ? c : null;
		o.maxY = typeof e != 'undefined' ? e : null;
		o.xMapper = h ? h : null;
		o.yMapper = i ? i : null;
		o.root.onDragStart = function () {
			return false
		};
		o.root.onDragEnd = function () {
			return false
		};
		o.root.onDrag = function () {
			return false
		};
		o.onselectstart = function () {
			return false
		}
	},
	start: function (e) {
		var o = $.drag.obj = this;
		e = $.drag.fixE(e);
		var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10);
		o.root.onDragStart(x, y);
		o.lastMouseX = e.clientX;
		o.lastMouseY = e.clientY;
		if (o.hmode) {
			if (o.minX !== null) o.minMouseX = e.clientX - x + o.minX;
			if (o.maxX !== null) o.maxMouseX = o.minMouseX + o.maxX - o.minX
		} else {
			if (o.minX !== null) o.maxMouseX = -o.minX + e.clientX + x;
			if (o.maxX !== null) o.minMouseX = -o.maxX + e.clientX + x
		}
		if (o.vmode) {
			if (o.minY !== null) o.minMouseY = e.clientY - y + o.minY;
			if (o.maxY !== null) o.maxMouseY = o.minMouseY + o.maxY - o.minY
		} else {
			if (o.minY !== null) o.maxMouseY = -o.minY + e.clientY + y;
			if (o.maxY !== null) o.minMouseY = -o.maxY + e.clientY + y
		}
		window.mouseMoveCallBack = function () {
			$.drag.drag()
		};
		document.onmouseup = $.drag.end;
		return false
	},
	drag: function () {
		document.onselectstart = function () {
			return false
		};
		var o = $.drag.obj;
		var a = window.y;
		var b = window.x;
		var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10);
		var c, ny;
		if (o.minX !== null) b = o.hmode ? Math.max(b, o.minMouseX) : Math.min(b, o.maxMouseX);
		if (o.maxX !== null) b = o.hmode ? Math.min(b, o.maxMouseX) : Math.max(b, o.minMouseX);
		if (o.minY !== null) a = o.vmode ? Math.max(a, o.minMouseY) : Math.min(a, o.maxMouseY);
		if (o.maxY !== null) a = o.vmode ? Math.min(a, o.maxMouseY) : Math.max(a, o.minMouseY);
		c = x + ((b - o.lastMouseX) * (o.hmode ? 1 : -1));
		ny = y + ((a - o.lastMouseY) * (o.vmode ? 1 : -1));
		if (o.xMapper) {
			c = o.xMapper(y)
		} else if (o.yMapper) {
			ny = o.yMapper(x)
		}
		$.drag.obj.root.style[o.hmode ? "left" : "right"] = c + "px";
		$.drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
		$.drag.obj.lastMouseX = b;
		$.drag.obj.lastMouseY = a;
		$.drag.obj.root.onDrag(c, ny);
		return false
	},
	end: function () {
		window.mouseMoveCallBack = function () {};
		document.onmouseup = null;
		document.onselectstart = function () {
			return true
		};
		$.drag.obj.root.onDragEnd(parseInt($.drag.obj.root.style[$.drag.obj.hmode ? "left" : "right"], 10), parseInt($.drag.obj.root.style[$.drag.obj.vmode ? "top" : "bottom"], 10));
		$.drag.obj = null
	},
	fixE: function (e) {
		if (typeof e == 'undefined') {
			e = window.event
		}
		if (typeof e.layerX == 'undefined') {
			e.layerX = e.offsetX
		}
		if (typeof e.layerY == 'undefined') {
			e.layerY = e.offsetY
		}
		return e
	}
});
$.extend('PrayerTime', function() {
	this.Jafari = 0;
	this.Karachi = 1;
	this.ISNA = 2;
	this.MWL = 3;
	this.Makkah = 4;
	this.Egypt = 5;
	this.Custom = 6;
	this.Tehran = 7;
	this.Shafii = 0;
	this.Hanafi = 1;
	this.None = 0;
	this.MidNight = 1;
	this.OneSeventh = 2;
	this.AngleBased = 3;
	this.Time24 = 0;
	this.Time12 = 1;
	this.Time12NS = 2;
	this.Float = 3;
	this.timeNames = new Array("Fajr", "Sunrise", "Dhuhr", "Asr", "Sunset", "Maghrib", "Isha");
	this.InvalidTime = "-----";
	this.calcMethod = 0;
	this.asrJuristic = 0;
	this.dhuhrMinutes = 0;
	this.adjustHighLats = 1;
	this.timeFormat = 0;
	var d;
	var b;
	var a;
	var c;
	this.numIterations = 1;
	this.methodParams = new Array();
	this.methodParams[this.Jafari] = new Array(16, 0, 4, 0, 14);
	this.methodParams[this.Karachi] = new Array(18, 1, 0, 0, 18);
	this.methodParams[this.ISNA] = new Array(15, 1, 0, 0, 15);
	this.methodParams[this.MWL] = new Array(18, 1, 0, 0, 17);
	this.methodParams[this.Makkah] = new Array(19, 1, 0, 1, 90);
	this.methodParams[this.Egypt] = new Array(19.5, 1, 0, 0, 17.5);
	this.methodParams[this.Tehran] = new Array(17.7, 0, 4.5, 0, 15);
	this.methodParams[this.Custom] = new Array(18, 1, 0, 0, 17)
});
$.PrayerTime.prototype.getDatePrayerTimes = function (c, e, a, f, d, b) {
	this.lat = f;
	this.lng = d;
	this.timeZone = this.effectiveTimeZone(c, e, a, b);
	this.JDate = this.julianDate(c, e, a) - d / (15 * 24);
	return this.computeDayTimes()
};
$.PrayerTime.prototype.getPrayerTimes = function (b, d, c, a) {
	return this.getDatePrayerTimes(b.getFullYear(), b.getMonth() + 1, b.getDate(), d, c, a)
};
$.PrayerTime.prototype.setCalcMethod = function (a) {
	this.calcMethod = a
};
$.PrayerTime.prototype.setAsrMethod = function (a) {
	if (a < 0 || a > 1) {
		return
	}
	this.asrJuristic = a
};
$.PrayerTime.prototype.setFajrAngle = function (a) {
	this.setCustomParams(new Array(a, null, null, null, null))
};
$.PrayerTime.prototype.setMaghribAngle = function (a) {
	this.setCustomParams(new Array(null, 0, a, null, null))
};
$.PrayerTime.prototype.setIshaAngle = function (a) {
	this.setCustomParams(new Array(null, null, null, 0, a))
};
$.PrayerTime.prototype.setDhuhrMinutes = function (a) {
	this.dhuhrMinutes = a
};
$.PrayerTime.prototype.setMaghribMinutes = function (a) {
	this.setCustomParams(new Array(null, 1, a, null, null))
};
$.PrayerTime.prototype.setIshaMinutes = function (a) {
	this.setCustomParams(new Array(null, null, null, 1, a))
};
$.PrayerTime.prototype.setCustomParams = function (b) {
	for (var a = 0; a < 5; a++) {
		if (b[a] == null) {
			this.methodParams[this.Custom][a] = this.methodParams[this.calcMethod][a]
		} else {
			this.methodParams[this.Custom][a] = b[a]
		}
	}
	this.calcMethod = this.Custom
};
$.PrayerTime.prototype.setHighLatsMethod = function (a) {
	this.adjustHighLats = a
};
$.PrayerTime.prototype.setTimeFormat = function (a) {
	this.timeFormat = a
};
$.PrayerTime.prototype.floatToTime24 = function (c) {
	if (isNaN(c)) {
		return this.InvalidTime
	}
	c = this.fixhour(c + 0.5 / 60);
	var a = Math.floor(c);
	var b = Math.floor((c - a) * 60);
	return this.twoDigitsFormat(a) + ":" + this.twoDigitsFormat(b)
};
$.PrayerTime.prototype.floatToTime12 = function (e, c) {
	if (isNaN(e)) {
		return this.InvalidTime
	}
	e = this.fixhour(e + 0.5 / 60);
	var a = Math.floor(e);
	var b = Math.floor((e - a) * 60);
	var d = a >= 12 ? " pm" : " am";
	a = (a + 12 - 1) % 12 + 1;
	return a + ":" + this.twoDigitsFormat(b) + (c ? "" : d)
};
$.PrayerTime.prototype.floatToTime12NS = function (a) {
	return this.floatToTime12(a, true)
};
$.PrayerTime.prototype.sunPosition = function (m) {
	var b = m - 2451545;
	var h = this.fixangle(357.529 + 0.98560028 * b);
	var c = this.fixangle(280.459 + 0.98564736 * b);
	var l = this.fixangle(c + 1.915 * this.dsin(h) + 0.02 * this.dsin(2 * h));
	var f = 1.00014 - 0.01671 * this.dcos(h) - 0.00014 * this.dcos(2 * h);
	var i = 23.439 - 3.6e-7 * b;
	var k = this.darcsin(this.dsin(i) * this.dsin(l));
	var j = this.darctan2(this.dcos(i) * this.dsin(l), this.dcos(l)) / 15;
	j = this.fixhour(j);
	var a = c / 15 - j;
	return new Array(k, a)
};
$.PrayerTime.prototype.equationOfTime = function (a) {
	return this.sunPosition(a)[1]
};
$.PrayerTime.prototype.sunDeclination = function (a) {
	return this.sunPosition(a)[0]
};
$.PrayerTime.prototype.computeMidDay = function (b) {
	var a = this.equationOfTime(this.JDate + b);
	var c = this.fixhour(12 - a);
	return c
};
$.PrayerTime.prototype.computeTime = function (c, b) {
	var e = this.sunDeclination(this.JDate + b);
	var d = this.computeMidDay(b);
	var a = 1 / 15 * this.darccos((-this.dsin(c) - this.dsin(e) * this.dsin(this.lat)) / (this.dcos(e) * this.dcos(this.lat)));
	return d + (c > 90 ? -a : a)
};
$.PrayerTime.prototype.computeAsr = function (c, a) {
	var d = this.sunDeclination(this.JDate + a);
	var b = -this.darccot(c + this.dtan(Math.abs(this.lat - d)));
	return this.computeTime(b, a)
};
$.PrayerTime.prototype.computeTimes = function (a) {
	var g = this.dayPortion(a);
	var i = this.computeTime(180 - this.methodParams[this.calcMethod][0], g[0]);
	var h = this.computeTime(180 - 0.833, g[1]);
	var c = this.computeMidDay(g[2]);
	var b = this.computeAsr(1 + this.asrJuristic, g[3]);
	var d = this.computeTime(0.833, g[4]);
	var e = this.computeTime(this.methodParams[this.calcMethod][2], g[5]);
	var f = this.computeTime(this.methodParams[this.calcMethod][4], g[6]);
	return new Array(i, h, c, b, d, e, f)
};
$.PrayerTime.prototype.computeDayTimes = function () {
	var b = new Array(5, 6, 12, 13, 18, 18, 18);
	for (var a = 1; a <= this.numIterations; a++) {
		b = this.computeTimes(b)
	}
	b = this.adjustTimes(b);
	return this.adjustTimesFormat(b)
};
$.PrayerTime.prototype.adjustTimes = function (b) {
	for (var a = 0; a < 7; a++) {
		b[a] += this.timeZone - this.lng / 15
	}
	b[2] += this.dhuhrMinutes / 60;
	if (this.methodParams[this.calcMethod][1] == 1) {
		b[5] = b[4] + this.methodParams[this.calcMethod][2] / 60
	}
	if (this.methodParams[this.calcMethod][3] == 1) {
		b[6] = b[5] + this.methodParams[this.calcMethod][4] / 60
	}
	if (this.adjustHighLats != this.None) {
		b = this.adjustHighLatTimes(b)
	}
	return b
};
$.PrayerTime.prototype.adjustTimesFormat = function (b) {
	if (this.timeFormat == this.Float) {
		return b
	}
	for (var a = 0; a < 7; a++) {
		if (this.timeFormat == this.Time12) {
			b[a] = this.floatToTime12(b[a])
		} else {
			if (this.timeFormat == this.Time12NS) {
				b[a] = this.floatToTime12(b[a], true)
			} else {
				b[a] = this.floatToTime24(b[a])
			}
		}
	}
	return b
};
$.PrayerTime.prototype.adjustHighLatTimes = function (g) {
	var e = this.timeDiff(g[4], g[1]);
	var f = this.nightPortion(this.methodParams[this.calcMethod][0]) * e;
	if (isNaN(g[0]) || this.timeDiff(g[0], g[1]) > f) {
		g[0] = g[1] - f
	}
	var b = (this.methodParams[this.calcMethod][3] == 0) ? this.methodParams[this.calcMethod][4] : 18;
	var c = this.nightPortion(b) * e;
	if (isNaN(g[6]) || this.timeDiff(g[4], g[6]) > c) {
		g[6] = g[4] + c
	}
	var a = (this.methodParams[this.calcMethod][1] == 0) ? this.methodParams[this.calcMethod][2] : 4;
	var d = this.nightPortion(a) * e;
	if (isNaN(g[5]) || this.timeDiff(g[4], g[5]) > d) {
		g[5] = g[4] + d
	}
	return g
};
$.PrayerTime.prototype.nightPortion = function (a) {
	if (this.adjustHighLats == this.AngleBased) {
		return 1 / 60 * a
	}
	if (this.adjustHighLats == this.MidNight) {
		return 1 / 2
	}
	if (this.adjustHighLats == this.OneSeventh) {
		return 1 / 7
	}
};
$.PrayerTime.prototype.dayPortion = function (b) {
	for (var a = 0; a < 7; a++) {
		b[a] /= 24
	}
	return b
};
$.PrayerTime.prototype.timeDiff = function (b, a) {
	return this.fixhour(a - b)
};
$.PrayerTime.prototype.twoDigitsFormat = function (a) {
	return (a < 10) ? "0" + a : a
};
$.PrayerTime.prototype.julianDate = function (d, e, c) {
	if (e <= 2) {
		d -= 1;
		e += 12
	}
	var a = Math.floor(d / 100);
	var f = 2 - a + Math.floor(a / 4);
	var b = Math.floor(365.25 * (d + 4716)) + Math.floor(30.6001 * (e + 1)) + c + f - 1524.5;
	return b
};
$.PrayerTime.prototype.calcJD = function (d, e, a) {
	var f = 2440588;
	var c = new Date(d, e - 1, a);
	var b = c.getTime();
	var g = Math.floor(b / (1000 * 60 * 60 * 24));
	return f + g - 0.5
};
$.PrayerTime.prototype.getTimeZone = function (c) {
	var b = new Date(c.getFullYear(), c.getMonth(), c.getDate(), 0, 0, 0, 0);
	var d = b.toGMTString();
	var a = new Date(d.substring(0, d.lastIndexOf(" ") - 1));
	var e = (b - a) / (1000 * 60 * 60);
	return e
};
$.PrayerTime.prototype.getBaseTimeZone = function () {
	return this.getTimeZone(new Date(2000, 0, 15))
};
$.PrayerTime.prototype.detectDaylightSaving = function (a) {
	return this.getTimeZone(a) != this.getBaseTimeZone()
};
$.PrayerTime.prototype.effectiveTimeZone = function (c, d, a, b) {
	if (b == null || typeof(b) == "undefined" || b == "auto") {
		b = this.getTimeZone(new Date(c, d - 1, a))
	}
	return 1 * b
};
$.PrayerTime.prototype.dsin = function (a) {
	return Math.sin(this.dtr(a))
};
$.PrayerTime.prototype.dcos = function (a) {
	return Math.cos(this.dtr(a))
};
$.PrayerTime.prototype.dtan = function (a) {
	return Math.tan(this.dtr(a))
};
$.PrayerTime.prototype.darcsin = function (a) {
	return this.rtd(Math.asin(a))
};
$.PrayerTime.prototype.darccos = function (a) {
	return this.rtd(Math.acos(a))
};
$.PrayerTime.prototype.darctan = function (a) {
	return this.rtd(Math.atan(a))
};
$.PrayerTime.prototype.darctan2 = function (b, a) {
	return this.rtd(Math.atan2(b, a))
};
$.PrayerTime.prototype.darccot = function (a) {
	return this.rtd(Math.atan(1 / a))
};
$.PrayerTime.prototype.dtr = function (a) {
	return (a * Math.PI) / 180
};
$.PrayerTime.prototype.rtd = function (a) {
	return (a * 180) / Math.PI
};
$.PrayerTime.prototype.fixangle = function (b) {
	b = b - 360 * (Math.floor(b / 360));
	b = b < 0 ? b + 360 : b;
	return b
};
$.PrayerTime.prototype.fixhour = function (b) {
	b = b - 24 * (Math.floor(b / 24));
	b = b < 0 ? b + 24 : b;
	return b
};
var $w = function (w) {
	this.each = function (f) {
		return $(w.split(" ")).each(f)
	};
	if (this instanceof $w) {
		return this.$w
	} else {
		return new $w(w)
	}
};
var $R = function () {
	var b = (!arguments[1]) ? 0 : arguments[0],
		end = (arguments[1]) ? arguments[1] : arguments[0],
		by = (arguments[2]) ? arguments[2] : 1,
		a, i;
	for (a = [b], i = 0; b < end; a.push(b += by), i++) {}
	return a
};

if (!window.JSON) // if browser does not natively support json
{
	Array.prototype.______array = '______array';
	
	window.JSON = {
		org: 'http://www.JSON.org',
		copyright: '(c)2005 JSON.org',
		license: 'http://www.crockford.com/JSON/license.html',
	
		stringify: function (arg) {
			var c, i, l, s = '', v;
	
			switch (typeof arg) {
			case 'object':
				if (arg) {
					if (arg.______array == '______array') {
						for (i = 0; i < arg.length; ++i) {
							v = this.stringify(arg[i]);
							if (s) {
								s += ',';
							}
							s += v;
						}
						return '[' + s + ']';
					} else if (typeof arg.toString != 'undefined') {
						for (i in arg) {
							v = arg[i];
							if (typeof v != 'undefined' && typeof v != 'function') {
								v = this.stringify(v);
								if (s) {
									s += ',';
								}
								s += this.stringify(i) + ':' + v;
							}
						}
						return '{' + s + '}';
					}
				}
				return 'null';
			case 'number':
				return isFinite(arg) ? String(arg) : 'null';
			case 'string':
				l = arg.length;
				s = '"';
				for (i = 0; i < l; i += 1) {
					c = arg.charAt(i);
					if (c >= ' ') {
						if (c == '\\' || c == '"') {
							s += '\\';
						}
						s += c;
					} else {
						switch (c) {
							case '\b':
								s += '\\b';
								break;
							case '\f':
								s += '\\f';
								break;
							case '\n':
								s += '\\n';
								break;
							case '\r':
								s += '\\r';
								break;
							case '\t':
								s += '\\t';
								break;
							default:
								c = c.charCodeAt();
								s += '\\u00' + Math.floor(c / 16).toString(16) +
									(c % 16).toString(16);
						}
					}
				}
				return s + '"';
			case 'boolean':
				return String(arg);
			default:
				return 'null';
			}
		},
		parse: function (text) {
			var at = 0;
			var ch = ' ';
	
			function next() {
				ch = text.charAt(at);
				at += 1;
				return ch;
			}
	
			function white() {
				while (ch != '' && ch <= ' ') {
					next();
				}
			}
	
			function str() {
				var i, s = '', t, u;
	
				if (ch == '"') {
	outer:          while (next()) {
						if (ch == '"') {
							next();
							return s;
						} else if (ch == '\\') {
							switch (next()) {
							case 'b':
								s += '\b';
								break;
							case 'f':
								s += '\f';
								break;
							case 'n':
								s += '\n';
								break;
							case 'r':
								s += '\r';
								break;
							case 't':
								s += '\t';
								break;
							case 'u':
								u = 0;
								for (i = 0; i < 4; i += 1) {
									t = parseInt(next(), 16);
									if (!isFinite(t)) {
										break outer;
									}
									u = u * 16 + t;
								}
								s += String.fromCharCode(u);
								break;
							default:
								s += ch;
							}
						} else {
							s += ch;
						}
					}
				}
			}
	
			function arr() {
				var a = [];
	
				if (ch == '[') {
					next();
					white();
					if (ch == ']') {
						next();
						return a;
					}
					while (ch) {
						a.push(val());
						white();
						if (ch == ']') {
							next();
							return a;
						} else if (ch != ',') {
							break;
						}
						next();
						white();
					}
				}
			}
	
			function obj() {
				var k, o = {};
	
				if (ch == '{') {
					next();
					white();
					if (ch == '}') {
						next();
						return o;
					}
					while (ch) {
						k = str();
						white();
						if (ch != ':') {
							break;
						}
						next();
						o[k] = val();
						white();
						if (ch == '}') {
							next();
							return o;
						} else if (ch != ',') {
							break;
						}
						next();
						white();
					}
				}
			}
	
			function num() {
				var n = '', v;
				if (ch == '-') {
					n = '-';
					next();
				}
				while (ch >= '0' && ch <= '9') {
					n += ch;
					next();
				}
				if (ch == '.') {
					n += '.';
					while (next() && ch >= '0' && ch <= '9') {
						n += ch;
					}
				}
				if (ch == 'e' || ch == 'E') {
					n += 'e';
					next();
					if (ch == '-' || ch == '+') {
						n += ch;
						next();
					}
					while (ch >= '0' && ch <= '9') {
						n += ch;
						next();
					}
				}
				v = +n;
				if (isFinite(v)) {
					return v;
				}
			}
	
			function word() {
				switch (ch) {
					case 't':
						if (next() == 'r' && next() == 'u' && next() == 'e') {
							next();
							return true;
						}
						break;
					case 'f':
						if (next() == 'a' && next() == 'l' && next() == 's' &&
								next() == 'e') {
							next();
							return false;
						}
						break;
					case 'n':
						if (next() == 'u' && next() == 'l' && next() == 'l') {
							next();
							return null;
						}
						break;
				}
			}
	
			function val() {
				white();
				switch (ch) {
					case '{':
						return obj();
					case '[':
						return arr();
					case '"':
						return str();
					case '-':
						return num();
					default:
						return ch >= '0' && ch <= '9' ? num() : word();
				}
			}
	
			return val();
		}
	};
}

/* CSSHttpRequest */
(function () {
    var chr = window.CSSHttpRequest = {};
    chr.id = 0;
    chr.requests = {};
    chr.MATCH_ORDINAL = /#c(\d+)/;
    chr.MATCH_URL = /url\("?data\:[^,]*,([^")]+)"?\)/;
    chr.get = function (url, callback, params) {
        var id = ++chr.id,
            iframe, r;
        iframe = document.createElement("iframe");
        iframe.style.position = "absolute";
        iframe.style.left = iframe.style.top = "-1000px";
        iframe.style.width = iframe.style.height = 0;
        document.documentElement.appendChild(iframe);
        r = chr.requests[id] = {
                id: id,
                iframe: iframe,
                document: iframe.contentDocument || iframe.contentWindow.document,
                callback: callback,
                params : params
            };
        r.document.open("text/html", false);
        r.document.write("<"+"html"+"><"+"head"+">");
        r.document.write("<"+"link rel='stylesheet' type='text/css' media='print, csshttprequest' href='" + chr.escapeHTML(url) + "' />");
        r.document.write("<"+"/head"+"><"+"body"+">");
        r.document.write("<"+"script type='text/javascript'"+">");
        r.document.write("(function(){var w = window; var p = w.parent; p.CSSHttpRequest.sandbox(w); w.onload = function(){p.CSSHttpRequest.callback('" + id + "');};})();");
        r.document.write("<"+"/script"+">");
        r.document.write("<"+"/body"+"><"+"/html"+">");
        r.document.close()
    };
    chr.sandbox = function (w) {};
    chr.callback = function (id) {
        var r = chr.requests[id],
            data, r;
        data = chr.parse(r);
        r.callback(data, r.params);
        window.setTimeout(function () {
                r = chr.requests[id];
                try {
                    r.iframe.parentElement.removeChild(r.iframe)
                } catch (e) {};
                delete chr.requests[id]
            }, 0)
    };
    chr.parse = function (r) {
        var data = [],
            rules, i, e, r, ord, val, x, style, bg;
        try {
                rules = r.document.styleSheets[0].cssRules || r.document.styleSheets[0].rules;
                for (i = 0, e = rules.length; i < e; i++) {
                    try {
                        r = rules.item ? rules.item(i) : rules[i];
                        ord = r.selectorText.match(chr.MATCH_ORDINAL)[1];
                        val = r.style.backgroundImage.match(chr.MATCH_URL)[1];
                        data[ord] = val
                    } catch (e) {}
                }
            } catch (e) {
                r.document.getElementsByTagName("link")[0].setAttribute("media", "screen");
                x = r.document.createElement("div");
                x.innerHTML = "foo";
                r.document.body.appendChild(x);
                ord = 0;
                try {
                    while (1) {
                        x.id = "c" + ord;
                        style = r.document.defaultView.getComputedStyle(x, null);
                        bg = style["background-image"] || style.backgroundImage || style.getPropertyValue("background-image");
                        val = bg.match(chr.MATCH_URL)[1];
                        data[ord] = val;
                        ord++
                    }
                } catch (e) {}
            }
        return decodeURIComponent(data.join(""))
    };
    chr.escapeHTML = function (s) {
        return s.replace(/([<>&""''])/g, function (m, c) {
            switch (c) {
            case "<":
                return "&lt;";
            case ">":
                return "&gt;";
            case "&":
                return "&amp;";
            case '"':
                return "&quot;";
            case "'":
                return "&apos;"
            }
            return c
        })
    }
})();

if (!$(window).has("localStorage") && !$('body').has("addBehavior"))
{
	JSTONE = function(free, clear) {
	
		this.clear = function() {
			var key, i, l, t;
			for(key = k.split("."), i = 0, l = key.length - 1, t = get(); i < l; i++) {
				if(!t[key[i]])t[key[i]] = {};
				t = t[key[i]];
			};	t[key[i]] = {};
			sync();
		};
		
		this.getItem = function(key) {
			var	o = find(key);
			return o.o[o.key]
		};
	
		this.setItem = function(key, value) {
			var	o = find(key);
				o.o[o.key] = value;
			sync();
		};
	
		var	find = function(key) {
			var i, l, t;
			for(i = 0, l = (key = k.concat(".", key).split(".")).length - 1, t = get(); i < l; i++) {
					if(!t[key[i]])t[key[i]] = {};
					t = t[key[i]];
				};	return {o:t, key:key.pop()}
			},
			get = function(){return	o = window.name ? JSON.parse(window.name) : o},
			sync = function(){window.name = JSON.stringify(o)},
			unload = clear ? function(){window.name = ""} : null,
			k = !free ? location.href.split("/").slice(2,3)[0].replace(/:[0-9]+/, "") : "o.o",
			o = {};
		get();
		if(unload)
			window.addEventListener ? window.addEventListener("unload", unload, false) : window.attachEvent("on".concat("unload"), unload);
	};
	window.localStorage = new JSTONE();
}


/**
 * ----------------------------- JSTORAGE -------------------------------------
 * Simple local storage wrapper to save data on the browser side, supporting
 * all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+
 *
 * Copyright (c) 2010 Andris Reinman, andris.reinman@gmail.com
 * Project homepage: www.jstorage.info
 *
 * Licensed under MIT-style license:
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
 
/**
 * USAGE:
 * 
 * jStorage requires Prototype, MooTools or jQuery! If jQuery is used, then
 * jQuery-JSON (http://code.google.com/p/jquery-json/) is also needed.
 * (jQuery-JSON needs to be loaded BEFORE jStorage!)
 * 
 * Methods:
 * 
 * -set(key, value)
 * $.jStorage.set(key, value) -> saves a value
 * 
 * -get(key[, default])
 * value = $.jStorage.get(key [, default]) -> 
 * 		retrieves value if key exists, or default if it doesn't
 * 
 * -deleteKey(key)
 * $.jStorage.deleteKey(key) -> removes a key from the storage
 * 
 * -flush()
 * $.jStorage.flush() -> clears the cache
 * 
 * <value> can be any JSON-able value, including objects and arrays.
 * 
 */

(function($){
	$.jStorage = {

			/* Version number */
			version: "0.1.2",

			/* This is the object, that holds the cached values */
			_storage: {},

			/* Actual browser storage (localStorage or globalStorage['domain']) */
			_storage_service: {jStorage:"{}"},

			/* DOM element for older IE versions, holds userData behavior */
			_storage_elm: null,

			////////////////////////// PRIVATE METHODS ////////////////////////

			/**
			 * Initialization function. Detects if the browser supports DOM Storage
			 * or userData behavior and behaves accordingly.
			 * @returns undefined
			 */
			_init: function(){
				/* Check if browser supports localStorage */
				if("localStorage" in window){
					this._storage_service = window.localStorage;
				}
				/* Check if browser supports globalStorage */
				else if("globalStorage" in window){
					this._storage_service = window.globalStorage[document.domain]
				}
				/* Check if browser supports userData behavior */
				else{
					this._storage_elm = document.createElement('link')
					if("addBehavior" in this._storage_elm){

						/* Use a DOM element to act as userData storage */
						this._storage_elm.style.behavior = 'url(#default#userData)';

						/* userData element needs to be inserted into the DOM! */
						document.getElementsByTagName('head')[0].appendChild(this._storage_elm);

						this._storage_elm.load("jStorage");
						try{
							var data = this._storage_elm.getAttribute("jStorage")
						}catch(E){var data = "{}"}
						if(data && data.length){
							this._storage_service.jStorage = data;
						}
					}else{
						this._storage_elm = null;
						return;
					}
				}
				/* if jStorage string is retrieved, then decode it */ 
				if("jStorage" in this._storage_service && this._storage_service.jStorage){
					try{
						this._storage = JSON.parse(this._storage_service.jStorage);
					}catch(E){this._storage_service.jStorage = "{}";}
				}else{
					this._storage_service.jStorage = "{}";
				}
			},

			/**
			 * This functions provides the "save" mechanism to store the jStorage object
			 * @returns undefined
			 */
			_save:function(){
				if(this._storage_service){
					try{
						this._storage_service.jStorage = JSON.stringify(this._storage);
					}catch(E){/* probably cache is full, nothing is saved this way*/}
					// If userData is used as the storage engine, additional
					if(this._storage_elm){
						try{
							this._storage_elm.setAttribute("jStorage",this._storage_service.jStorage)
							this._storage_elm.save("jStorage");
						}catch(E){/* probably cache is full, nothing is saved this way*/}
					}
				}
			},

			/**
			 * Function checks if a key is set and is string or numberic
			 */
			_checkKey: function(key){
				if(!key || (typeof key != "string" && typeof key != "number")){
					throw new TypeError('Key name must be string or numeric');
				}
				return true;
			},

			////////////////////////// PUBLIC METHODS /////////////////////////

			/**
			 * Sets a key's value.
			 * @param {String} key - Key to set. If this value is not set or not
			 * 						a string an exception is raised.
			 * @param value - Value to set. This can be any value that is JSON 
			 * 				 compatible (Numbers, Strings, Objects etc.).
			 * @returns the used value
			 */
			set: function(key, value){
				this._checkKey(key);
				this._storage[key] = value;
				this._save();
				return value;
			},
			/**
			 * Looks up a key in cache
			 * @param {String} key - Key to look up.
			 * @param {mixed} def - Default value to return, if key didn't exist.
			 * @returns the key value, default value or <null>
			 */
			get: function(key, def){
				this._checkKey(key);
				if(key in this._storage)
					return this._storage[key];
				return def?def:null;
			},
			/**
			 * Deletes a key from cache.
			 * @param {String} key - Key to delete.
			 * @returns true if key existed or false if it didn't
			 */
			deleteKey: function(key){
				this._checkKey(key);
				if(key in this._storage){
					delete this._storage[key];
					this._save();
					return true;
				}
				return false;
			},
			/**
			 * Deletes everything in cache.
			 * @returns true
			 */
			flush: function(){
				this._storage = {};
				this._save();
				return true;
			}
		}
	// load saved data from browser
	$.jStorage._init();
})($);
