"; var b = n.createElement("input"); b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + K + "*[*^$|!~]?="), 2 !== a.querySelectorAll(":enabled").length && q.push(":enabled", ":disabled"), o.appendChild(a).disabled = !0, 2 !== a.querySelectorAll(":disabled").length && q.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), q.push(",.*:") })), (c.matchesSelector = Y.test(s = o.matches || o.webkitMatchesSelector || o.mozMatchesSelector || o.oMatchesSelector || o.msMatchesSelector)) && ia(function (a) { c.disconnectedMatch = s.call(a, "*"), s.call(a, "[s!='']:x"), r.push("!=", N) }), q = q.length && new RegExp(q.join("|")), r = r.length && new RegExp(r.join("|")), b = Y.test(o.compareDocumentPosition), t = b || Y.test(o.contains) ? function (a, b) { var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode; return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d))) } : function (a, b) { if (b) for (; b = b.parentNode;) if (b === a) return !0; return !1 }, B = b ? function (a, b) { if (a === b) return l = !0, 0; var d = !a.compareDocumentPosition - !b.compareDocumentPosition; return d || (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === n || a.ownerDocument === v && t(v, a) ? -1 : b === n || b.ownerDocument === v && t(v, b) ? 1 : k ? I(k, a) - I(k, b) : 0 : 4 & d ? -1 : 1) } : function (a, b) { if (a === b) return l = !0, 0; var c, d = 0, e = a.parentNode, f = b.parentNode, g = [a], h = [b]; if (!e || !f) return a === n ? -1 : b === n ? 1 : e ? -1 : f ? 1 : k ? I(k, a) - I(k, b) : 0; if (e === f) return ka(a, b); for (c = a; c = c.parentNode;) g.unshift(c); for (c = b; c = c.parentNode;) h.unshift(c); for (; g[d] === h[d];) d++; return d ? ka(g[d], h[d]) : g[d] === v ? -1 : h[d] === v ? 1 : 0 }, n) : n }, fa.matches = function (a, b) { return fa(a, null, null, b) }, fa.matchesSelector = function (a, b) { if ((a.ownerDocument || a) !== n && m(a), b = b.replace(S, "='$1']"), c.matchesSelector && p && !A[b + " "] && (!r || !r.test(b)) && (!q || !q.test(b))) try { var d = s.call(a, b); if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d } catch (a) { } return fa(b, n, null, [a]).length > 0 }, fa.contains = function (a, b) { return (a.ownerDocument || a) !== n && m(a), t(a, b) }, fa.attr = function (a, b) { (a.ownerDocument || a) !== n && m(a); var e = d.attrHandle[b.toLowerCase()], f = e && C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0; return void 0 !== f ? f : c.attributes || !p ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null }, fa.escape = function (a) { return (a + "").replace(ba, ca) }, fa.error = function (a) { throw new Error("Syntax error, unrecognized expression: " + a) }, fa.uniqueSort = function (a) { var b, d = [], e = 0, f = 0; if (l = !c.detectDuplicates, k = !c.sortStable && a.slice(0), a.sort(B), l) { for (; b = a[f++];) b === a[f] && (e = d.push(f)); for (; e--;) a.splice(d[e], 1) } return k = null, a }, e = fa.getText = function (a) { var b, c = "", d = 0, f = a.nodeType; if (f) { if (1 === f || 9 === f || 11 === f) { if ("string" == typeof a.textContent) return a.textContent; for (a = a.firstChild; a; a = a.nextSibling) c += e(a) } else if (3 === f || 4 === f) return a.nodeValue } else for (; b = a[d++];) c += e(b); return c }, d = fa.selectors = { cacheLength: 50, createPseudo: ha, match: V, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (a) { return a[1] = a[1].replace(_, aa), a[3] = (a[3] || a[4] || a[5] || "").replace(_, aa), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4) }, CHILD: function (a) { return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || fa.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && fa.error(a[0]), a }, PSEUDO: function (a) { var b, c = !a[6] && a[2]; return V.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && T.test(c) && (b = g(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3)) } }, filter: { TAG: function (a) { var b = a.replace(_, aa).toLowerCase(); return "*" === a ? function () { return !0 } : function (a) { return a.nodeName && a.nodeName.toLowerCase() === b } }, CLASS: function (a) { var b = y[a + " "]; return b || (b = new RegExp("(^|" + K + ")" + a + "(" + K + "|$)")) && y(a, function (a) { return b.test("string" == typeof a.className && a.className || void 0 !== a.getAttribute && a.getAttribute("class") || "") }) }, ATTR: function (a, b, c) { return function (d) { var e = fa.attr(d, a); return null == e ? "!=" === b : !b || (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e.replace(O, " ") + " ").indexOf(c) > -1 : "|=" === b && (e === c || e.slice(0, c.length + 1) === c + "-")) } }, CHILD: function (a, b, c, d, e) { var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b; return 1 === d && 0 === e ? function (a) { return !!a.parentNode } : function (b, c, i) { var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), s = !i && !h, t = !1; if (q) { if (f) { for (; p;) { for (m = b; m = m[p];) if (h ? m.nodeName.toLowerCase() === r : 1 === m.nodeType) return !1; o = p = "only" === a && !o && "nextSibling" } return !0 } if (o = [g ? q.firstChild : q.lastChild], g && s) { for (m = q, l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === w && j[1], t = n && j[2], m = n && q.childNodes[n]; m = ++n && m && m[p] || (t = n = 0) || o.pop() ;) if (1 === m.nodeType && ++t && m === b) { k[a] = [w, n, t]; break } } else if (s && (m = b, l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === w && j[1], t = n), !1 === t) for (; (m = ++n && m && m[p] || (t = n = 0) || o.pop()) && ((h ? m.nodeName.toLowerCase() !== r : 1 !== m.nodeType) || !++t || (s && (l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), k[a] = [w, t]), m !== b)) ;); return (t -= e) === d || t % d == 0 && t / d >= 0 } } }, PSEUDO: function (a, b) { var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || fa.error("unsupported pseudo: " + a); return e[u] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? ha(function (a, c) { for (var d, f = e(a, b), g = f.length; g--;) d = I(a, f[g]), a[d] = !(c[d] = f[g]) }) : function (a) { return e(a, 0, c) }) : e } }, pseudos: { not: ha(function (a) { var b = [], c = [], d = h(a.replace(P, "$1")); return d[u] ? ha(function (a, b, c, e) { for (var f, g = d(a, null, e, []), h = a.length; h--;) (f = g[h]) && (a[h] = !(b[h] = f)) }) : function (a, e, f) { return b[0] = a, d(b, null, f, c), b[0] = null, !c.pop() } }), has: ha(function (a) { return function (b) { return fa(a, b).length > 0 } }), contains: ha(function (a) { return a = a.replace(_, aa), function (b) { return (b.textContent || b.innerText || e(b)).indexOf(a) > -1 } }), lang: ha(function (a) { return U.test(a || "") || fa.error("unsupported lang: " + a), a = a.replace(_, aa).toLowerCase(), function (b) { var c; do { if (c = p ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang")) return (c = c.toLowerCase()) === a || 0 === c.indexOf(a + "-") } while ((b = b.parentNode) && 1 === b.nodeType); return !1 } }), target: function (b) { var c = a.location && a.location.hash; return c && c.slice(1) === b.id }, root: function (a) { return a === o }, focus: function (a) { return a === n.activeElement && (!n.hasFocus || n.hasFocus()) && !!(a.type || a.href || ~a.tabIndex) }, enabled: na(!1), disabled: na(!0), checked: function (a) { var b = a.nodeName.toLowerCase(); return "input" === b && !!a.checked || "option" === b && !!a.selected }, selected: function (a) { return a.parentNode && a.parentNode.selectedIndex, !0 === a.selected }, empty: function (a) { for (a = a.firstChild; a; a = a.nextSibling) if (a.nodeType < 6) return !1; return !0 }, parent: function (a) { return !d.pseudos.empty(a) }, header: function (a) { return X.test(a.nodeName) }, input: function (a) { return W.test(a.nodeName) }, button: function (a) { var b = a.nodeName.toLowerCase(); return "input" === b && "button" === a.type || "button" === b }, text: function (a) { var b; return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase()) }, first: oa(function () { return [0] }), last: oa(function (a, b) { return [b - 1] }), eq: oa(function (a, b, c) { return [c < 0 ? c + b : c] }), even: oa(function (a, b) { for (var c = 0; c < b; c += 2) a.push(c); return a }), odd: oa(function (a, b) { for (var c = 1; c < b; c += 2) a.push(c); return a }), lt: oa(function (a, b, c) { for (var d = c < 0 ? c + b : c; --d >= 0;) a.push(d); return a }), gt: oa(function (a, b, c) { for (var d = c < 0 ? c + b : c; ++d < b;) a.push(d); return a }) } }, d.pseudos.nth = d.pseudos.eq; for (b in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) d.pseudos[b] = la(b); for (b in { submit: !0, reset: !0 }) d.pseudos[b] = ma(b); return qa.prototype = d.filters = d.pseudos, d.setFilters = new qa, g = fa.tokenize = function (a, b) { var c, e, f, g, h, i, j, k = z[a + " "]; if (k) return b ? 0 : k.slice(0); for (h = a, i = [], j = d.preFilter; h;) { c && !(e = Q.exec(h)) || (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) && (c = e.shift(), f.push({ value: c, type: e[0].replace(P, " ") }), h = h.slice(c.length)); for (g in d.filter) !(e = V[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({ value: c, type: g, matches: e }), h = h.slice(c.length)); if (!c) break } return b ? h.length : h ? fa.error(a) : z(a, i).slice(0) }, h = fa.compile = function (a, b) { var c, d = [], e = [], f = A[a + " "]; if (!f) { for (b || (b = g(a)), c = b.length; c--;) f = xa(b[c]), f[u] ? d.push(f) : e.push(f); f = A(a, ya(e, d)), f.selector = a } return f }, i = fa.select = function (a, b, c, e) { var f, i, j, k, l, m = "function" == typeof a && a, n = !e && g(a = m.selector || a); if (c = c || [], 1 === n.length) { if (i = n[0] = n[0].slice(0), i.length > 2 && "ID" === (j = i[0]).type && 9 === b.nodeType && p && d.relative[i[1].type]) { if (!(b = (d.find.ID(j.matches[0].replace(_, aa), b) || [])[0])) return c; m && (b = b.parentNode), a = a.slice(i.shift().value.length) } for (f = V.needsContext.test(a) ? 0 : i.length; f-- && (j = i[f], !d.relative[k = j.type]) ;) if ((l = d.find[k]) && (e = l(j.matches[0].replace(_, aa), $.test(i[0].type) && pa(b.parentNode) || b))) { if (i.splice(f, 1), !(a = e.length && ra(i))) return G.apply(c, e), c; break } } return (m || h(a, n))(e, b, !p, c, !b || $.test(a) && pa(b.parentNode) || b), c }, c.sortStable = u.split("").sort(B).join("") === u, c.detectDuplicates = !!l, m(), c.sortDetached = ia(function (a) { return 1 & a.compareDocumentPosition(n.createElement("fieldset")) }), ia(function (a) { return a.innerHTML = "", "#" === a.firstChild.getAttribute("href") }) || ja("type|href|height|width", function (a, b, c) { if (!c) return a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2) }), c.attributes && ia(function (a) { return a.innerHTML = "", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value") }) || ja("value", function (a, b, c) { if (!c && "input" === a.nodeName.toLowerCase()) return a.defaultValue }), ia(function (a) { return null == a.getAttribute("disabled") }) || ja(J, function (a, b, c) { var d; if (!c) return !0 === a[b] ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null }), fa }(a); r.find = x, r.expr = x.selectors, r.expr[":"] = r.expr.pseudos, r.uniqueSort = r.unique = x.uniqueSort, r.text = x.getText, r.isXMLDoc = x.isXML, r.contains = x.contains, r.escapeSelector = x.escape; var y = function (a, b, c) { for (var d = [], e = void 0 !== c; (a = a[b]) && 9 !== a.nodeType;) if (1 === a.nodeType) { if (e && r(a).is(c)) break; d.push(a) } return d }, z = function (a, b) { for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a); return c }, A = r.expr.match.needsContext, B = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i, C = /^.[^:#\[\.,]*$/; r.filter = function (a, b, c) { var d = b[0]; return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? r.find.matchesSelector(d, a) ? [d] : [] : r.find.matches(a, r.grep(b, function (a) { return 1 === a.nodeType })) }, r.fn.extend({ find: function (a) { var b, c, d = this.length, e = this; if ("string" != typeof a) return this.pushStack(r(a).filter(function () { for (b = 0; b < d; b++) if (r.contains(e[b], this)) return !0 })); for (c = this.pushStack([]), b = 0; b < d; b++) r.find(a, e[b], c); return d > 1 ? r.uniqueSort(c) : c }, filter: function (a) { return this.pushStack(D(this, a || [], !1)) }, not: function (a) { return this.pushStack(D(this, a || [], !0)) }, is: function (a) { return !!D(this, "string" == typeof a && A.test(a) ? r(a) : a || [], !1).length } }); var E, F = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (r.fn.init = function (a, b, c) { var e, f; if (!a) return this; if (c = c || E, "string" == typeof a) { if (!(e = "<" === a[0] && ">" === a[a.length - 1] && a.length >= 3 ? [null, a, null] : F.exec(a)) || !e[1] && b) return !b || b.jquery ? (b || c).find(a) : this.constructor(b).find(a); if (e[1]) { if (b = b instanceof r ? b[0] : b, r.merge(this, r.parseHTML(e[1], b && b.nodeType ? b.ownerDocument || b : d, !0)), B.test(e[1]) && r.isPlainObject(b)) for (e in b) r.isFunction(this[e]) ? this[e](b[e]) : this.attr(e, b[e]); return this } return f = d.getElementById(e[2]), f && (this[0] = f, this.length = 1), this } return a.nodeType ? (this[0] = a, this.length = 1, this) : r.isFunction(a) ? void 0 !== c.ready ? c.ready(a) : a(r) : r.makeArray(a, this) }).prototype = r.fn, E = r(d); var H = /^(?:parents|prev(?:Until|All))/, I = { children: !0, contents: !0, next: !0, prev: !0 }; r.fn.extend({ has: function (a) { var b = r(a, this), c = b.length; return this.filter(function () { for (var a = 0; a < c; a++) if (r.contains(this, b[a])) return !0 }) }, closest: function (a, b) { var c, d = 0, e = this.length, f = [], g = "string" != typeof a && r(a); if (!A.test(a)) for (; d < e; d++) for (c = this[d]; c && c !== b; c = c.parentNode) if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && r.find.matchesSelector(c, a))) { f.push(c); break } return this.pushStack(f.length > 1 ? r.uniqueSort(f) : f) }, index: function (a) { return a ? "string" == typeof a ? i.call(r(a), this[0]) : i.call(this, a.jquery ? a[0] : a) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (a, b) { return this.pushStack(r.uniqueSort(r.merge(this.get(), r(a, b)))) }, addBack: function (a) { return this.add(null == a ? this.prevObject : this.prevObject.filter(a)) } }), r.each({ parent: function (a) { var b = a.parentNode; return b && 11 !== b.nodeType ? b : null }, parents: function (a) { return y(a, "parentNode") }, parentsUntil: function (a, b, c) { return y(a, "parentNode", c) }, next: function (a) { return J(a, "nextSibling") }, prev: function (a) { return J(a, "previousSibling") }, nextAll: function (a) { return y(a, "nextSibling") }, prevAll: function (a) { return y(a, "previousSibling") }, nextUntil: function (a, b, c) { return y(a, "nextSibling", c) }, prevUntil: function (a, b, c) { return y(a, "previousSibling", c) }, siblings: function (a) { return z((a.parentNode || {}).firstChild, a) }, children: function (a) { return z(a.firstChild) }, contents: function (a) { return a.contentDocument || r.merge([], a.childNodes) } }, function (a, b) { r.fn[a] = function (c, d) { var e = r.map(this, b, c); return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = r.filter(d, e)), this.length > 1 && (I[a] || r.uniqueSort(e), H.test(a) && e.reverse()), this.pushStack(e) } }); var K = /[^\x20\t\r\n\f]+/g; r.Callbacks = function (a) { a = "string" == typeof a ? L(a) : r.extend({}, a); var b, c, d, e, f = [], g = [], h = -1, i = function () { for (e = a.once, d = b = !0; g.length; h = -1) for (c = g.shift() ; ++h < f.length;) !1 === f[h].apply(c[0], c[1]) && a.stopOnFalse && (h = f.length, c = !1); a.memory || (c = !1), b = !1, e && (f = c ? [] : "") }, j = { add: function () { return f && (c && !b && (h = f.length - 1, g.push(c)), function b(c) { r.each(c, function (c, d) { r.isFunction(d) ? a.unique && j.has(d) || f.push(d) : d && d.length && "string" !== r.type(d) && b(d) }) }(arguments), c && !b && i()), this }, remove: function () { return r.each(arguments, function (a, b) { for (var c; (c = r.inArray(b, f, c)) > -1;) f.splice(c, 1), c <= h && h-- }), this }, has: function (a) { return a ? r.inArray(a, f) > -1 : f.length > 0 }, empty: function () { return f && (f = []), this }, disable: function () { return e = g = [], f = c = "", this }, disabled: function () { return !f }, lock: function () { return e = g = [], c || b || (f = c = ""), this }, locked: function () { return !!e }, fireWith: function (a, c) { return e || (c = c || [], c = [a, c.slice ? c.slice() : c], g.push(c), b || i()), this }, fire: function () { return j.fireWith(this, arguments), this }, fired: function () { return !!d } }; return j }, r.extend({ Deferred: function (b) { var c = [["notify", "progress", r.Callbacks("memory"), r.Callbacks("memory"), 2], ["resolve", "done", r.Callbacks("once memory"), r.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", r.Callbacks("once memory"), r.Callbacks("once memory"), 1, "rejected"]], d = "pending", e = { state: function () { return d }, always: function () { return f.done(arguments).fail(arguments), this }, catch: function (a) { return e.then(null, a) }, pipe: function () { var a = arguments; return r.Deferred(function (b) { r.each(c, function (c, d) { var e = r.isFunction(a[d[4]]) && a[d[4]]; f[d[1]](function () { var a = e && e.apply(this, arguments); a && r.isFunction(a.promise) ? a.promise().progress(b.notify).done(b.resolve).fail(b.reject) : b[d[0] + "With"](this, e ? [a] : arguments) }) }), a = null }).promise() }, then: function (b, d, e) { function g(b, c, d, e) { return function () { var h = this, i = arguments, j = function () { var a, j; if (!(b < f)) { if ((a = d.apply(h, i)) === c.promise()) throw new TypeError("Thenable self-resolution"); j = a && ("object" == typeof a || "function" == typeof a) && a.then, r.isFunction(j) ? e ? j.call(a, g(f, c, M, e), g(f, c, N, e)) : (f++, j.call(a, g(f, c, M, e), g(f, c, N, e), g(f, c, M, c.notifyWith))) : (d !== M && (h = void 0, i = [a]), (e || c.resolveWith)(h, i)) } }, k = e ? j : function () { try { j() } catch (a) { r.Deferred.exceptionHook && r.Deferred.exceptionHook(a, k.stackTrace), b + 1 >= f && (d !== N && (h = void 0, i = [a]), c.rejectWith(h, i)) } }; b ? k() : (r.Deferred.getStackHook && (k.stackTrace = r.Deferred.getStackHook()), a.setTimeout(k)) } } var f = 0; return r.Deferred(function (a) { c[0][3].add(g(0, a, r.isFunction(e) ? e : M, a.notifyWith)), c[1][3].add(g(0, a, r.isFunction(b) ? b : M)), c[2][3].add(g(0, a, r.isFunction(d) ? d : N)) }).promise() }, promise: function (a) { return null != a ? r.extend(a, e) : e } }, f = {}; return r.each(c, function (a, b) { var g = b[2], h = b[5]; e[b[1]] = g.add, h && g.add(function () { d = h }, c[3 - a][2].disable, c[0][2].lock), g.add(b[3].fire), f[b[0]] = function () { return f[b[0] + "With"](this === f ? void 0 : this, arguments), this }, f[b[0] + "With"] = g.fireWith }), e.promise(f), b && b.call(f, f), f }, when: function (a) { var b = arguments.length, c = b, d = Array(c), e = f.call(arguments), g = r.Deferred(), h = function (a) { return function (c) { d[a] = this, e[a] = arguments.length > 1 ? f.call(arguments) : c, --b || g.resolveWith(d, e) } }; if (b <= 1 && (O(a, g.done(h(c)).resolve, g.reject), "pending" === g.state() || r.isFunction(e[c] && e[c].then))) return g.then(); for (; c--;) O(e[c], h(c), g.reject); return g.promise() } }); var P = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; r.Deferred.exceptionHook = function (b, c) { a.console && a.console.warn && b && P.test(b.name) && a.console.warn("jQuery.Deferred exception: " + b.message, b.stack, c) }, r.readyException = function (b) { a.setTimeout(function () { throw b }) }; var Q = r.Deferred(); r.fn.ready = function (a) { return Q.then(a).catch(function (a) { r.readyException(a) }), this }, r.extend({ isReady: !1, readyWait: 1, holdReady: function (a) { a ? r.readyWait++ : r.ready(!0) }, ready: function (a) { (!0 === a ? --r.readyWait : r.isReady) || (r.isReady = !0, !0 !== a && --r.readyWait > 0 || Q.resolveWith(d, [r])) } }), r.ready.then = Q.then, "complete" === d.readyState || "loading" !== d.readyState && !d.documentElement.doScroll ? a.setTimeout(r.ready) : (d.addEventListener("DOMContentLoaded", R), a.addEventListener("load", R)); var S = function (a, b, c, d, e, f, g) { var h = 0, i = a.length, j = null == c; if ("object" === r.type(c)) { e = !0; for (h in c) S(a, b, h, c[h], !0, f, g) } else if (void 0 !== d && (e = !0, r.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) { return j.call(r(a), c) })), b)) for (; h < i; h++) b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); return e ? a : j ? b.call(a) : i ? b(a[0], c) : f }, T = function (a) { return 1 === a.nodeType || 9 === a.nodeType || !+a.nodeType }; U.uid = 1, U.prototype = { cache: function (a) { var b = a[this.expando]; return b || (b = {}, T(a) && (a.nodeType ? a[this.expando] = b : Object.defineProperty(a, this.expando, { value: b, configurable: !0 }))), b }, set: function (a, b, c) { var d, e = this.cache(a); if ("string" == typeof b) e[r.camelCase(b)] = c; else for (d in b) e[r.camelCase(d)] = b[d]; return e }, get: function (a, b) { return void 0 === b ? this.cache(a) : a[this.expando] && a[this.expando][r.camelCase(b)] }, access: function (a, b, c) { return void 0 === b || b && "string" == typeof b && void 0 === c ? this.get(a, b) : (this.set(a, b, c), void 0 !== c ? c : b) }, remove: function (a, b) { var c, d = a[this.expando]; if (void 0 !== d) { if (void 0 !== b) { r.isArray(b) ? b = b.map(r.camelCase) : (b = r.camelCase(b), b = b in d ? [b] : b.match(K) || []), c = b.length; for (; c--;) delete d[b[c]] } (void 0 === b || r.isEmptyObject(d)) && (a.nodeType ? a[this.expando] = void 0 : delete a[this.expando]) } }, hasData: function (a) { var b = a[this.expando]; return void 0 !== b && !r.isEmptyObject(b) } }; var V = new U, W = new U, X = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, Y = /[A-Z]/g; r.extend({ hasData: function (a) { return W.hasData(a) || V.hasData(a) }, data: function (a, b, c) { return W.access(a, b, c) }, removeData: function (a, b) { W.remove(a, b) }, _data: function (a, b, c) { return V.access(a, b, c) }, _removeData: function (a, b) { V.remove(a, b) } }), r.fn.extend({ data: function (a, b) { var c, d, e, f = this[0], g = f && f.attributes; if (void 0 === a) { if (this.length && (e = W.get(f), 1 === f.nodeType && !V.get(f, "hasDataAttrs"))) { for (c = g.length; c--;) g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = r.camelCase(d.slice(5)), $(f, d, e[d]))); V.set(f, "hasDataAttrs", !0) } return e } return "object" == typeof a ? this.each(function () { W.set(this, a) }) : S(this, function (b) { var c; if (f && void 0 === b) { if (void 0 !== (c = W.get(f, a))) return c; if (void 0 !== (c = $(f, a))) return c } else this.each(function () { W.set(this, a, b) }) }, null, b, arguments.length > 1, null, !0) }, removeData: function (a) { return this.each(function () { W.remove(this, a) }) } }), r.extend({ queue: function (a, b, c) { var d; if (a) return b = (b || "fx") + "queue", d = V.get(a, b), c && (!d || r.isArray(c) ? d = V.access(a, b, r.makeArray(c)) : d.push(c)), d || [] }, dequeue: function (a, b) { b = b || "fx"; var c = r.queue(a, b), d = c.length, e = c.shift(), f = r._queueHooks(a, b), g = function () { r.dequeue(a, b) }; "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire() }, _queueHooks: function (a, b) { var c = b + "queueHooks"; return V.get(a, c) || V.access(a, c, { empty: r.Callbacks("once memory").add(function () { V.remove(a, [b + "queue", c]) }) }) } }), r.fn.extend({ queue: function (a, b) { var c = 2; return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? r.queue(this[0], a) : void 0 === b ? this : this.each(function () { var c = r.queue(this, a, b); r._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && r.dequeue(this, a) }) }, dequeue: function (a) { return this.each(function () { r.dequeue(this, a) }) }, clearQueue: function (a) { return this.queue(a || "fx", []) }, promise: function (a, b) { var c, d = 1, e = r.Deferred(), f = this, g = this.length, h = function () { --d || e.resolveWith(f, [f]) }; for ("string" != typeof a && (b = a, a = void 0), a = a || "fx"; g--;) (c = V.get(f[g], a + "queueHooks")) && c.empty && (d++, c.empty.add(h)); return h(), e.promise(b) } }); var _ = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, aa = new RegExp("^(?:([+-])=|)(" + _ + ")([a-z%]*)$", "i"), ba = ["Top", "Right", "Bottom", "Left"], ca = function (a, b) { return a = b || a, "none" === a.style.display || "" === a.style.display && r.contains(a.ownerDocument, a) && "none" === r.css(a, "display") }, da = function (a, b, c, d) { var e, f, g = {}; for (f in b) g[f] = a.style[f], a.style[f] = b[f]; e = c.apply(a, d || []); for (f in b) a.style[f] = g[f]; return e }, fa = {}; r.fn.extend({ show: function () { return ha(this, !0) }, hide: function () { return ha(this) }, toggle: function (a) { return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () { ca(this) ? r(this).show() : r(this).hide() }) } }); var ia = /^(?:checkbox|radio)$/i, ja = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i, ka = /^$|\/(?:java|ecma)script/i, la = { option: [1, ""], thead: [1, "
Renox.in offers total turnkey solutions from Design to Build For Construction, Renovation & Interiors for Homes in Tirunelveli. We are a team of people from architecture, civil, interiors and project management background with 30+ years experience. Do not compare our pricing with local sub contractors and workers. Recent Works Gallery
An Independent Home is a Dream of almost every individual. At Renox.in, we thrive to make it a realty for everyone.
Knowledge, Creativity, Ability to Adopt newer materials has given us advantage in constructing Modern Homes for our clients.
Beautifully planned and Built Duplex Homes incorporating latest technology making life comfortable, convenient and enjoyable.
Constructing first floor above the existing ground floor made extremely affordable by our team of builders at Renox.in.
Designing & Building Traditional, Contemporary and Fusion Villas for our clients has become a standard practice at Renox.in.
Cost of Home construction varies from Rs.1,400/- to Rs.1,800/- per sft. and mostly depends upon finishing materials used.
HOW WE WORK
1. Tell us Your RequirementCall, message, whatsapp or fill our contact form HERE and explain about your exact requirements & preferences.
2. Get professional suggestionTalk to industry experts with tons of real life experience on projects - FREE. Get a clear picture before you start.
3. Scope - Budget - Duration - TermsGet detailed estimate for the project with all itemized prices, time line for completion, budget and terms.
4. Start projectAfter you study, understand, satisfy and finalize the estimate - we can start off with the actual project work.
5. Project progress updatesOur milestones based reporting with site photos and videos will keep you relaxed through out the project process.
In many cases constructing and adding extra space to Home is the main need of the time for home additions projects.
We are Passionate about Designing & Building Additions & Extensions to Homes for our clients in Tirunelveli.
Building a new floor above the existing home can double up your space, which can be used for your new space needs.
How can I get my Home Constructed, Add a new floor to my existing Home, Make a Duplex of ground floor House?
Get answers to All those and many more questions at Renox.in Exclusive Home Construction division of Tirunelveli.
Here, we extend an friendly support to our clients looking for constructing their homes in Tirunelveli.
Get personalized advice from specialists for your total construction & renovation project.
Clear, Specific & Measurable written scope of work avoids later confusions.
We value your time, hence, constantly monitor project for timely completion and report to you.
The first aspect of home construction is to get an approval from the concerned authorities like Municipal office, City Development Authority etc., for which you need to submit copy of some basic documents of your property as the sale deed, link document, layout plan etc.
Then, you need to submit the proposed plan of construction made according to the norms of the approving authority, FSI (Floor space index) is to be followed in the proposed plan.
Based on these documents, the proposal is approved, after which you can start the construction activity.
Planning your Home Construction: Once you get an approval from the Municipal office, you can plan your Home construction project. Finalize the layout plan having your requirements in place, calculate the quantities of materials required to build the House, select the materials keeping focus on your budget, identify and hire a good contractor for the complete project who is well versed with the latest trends of home construction industry.
Home ConstructionConstruction of a new house is quite a challenging task especially in a urban area like Tirunelveli which grows quite rapidly. Great lifestyle is not just a dream come true for affluent customers but also for everyone. Many of the clients are now demanding state of the art amenities for their new homes to get the best facilities to make their life safe, comfortable and interesting, and of course - home is the place where the best dreams come true and leads to a better living and relaxation.
Renox.in thrives to provide the best construction services which are feasible, trustworthy, reliable, stylish and practically affordable. With over thirty years of experience, Renox.in provides brilliant construction plans for the customers that are quite easy to accomplish, easy on pocket and also brings the best facilities possible for its customers. Renox.in focuses on bringing the best technology relating to construction to its customers at an affordable cost.
Right from building new construction houses, apartments, villas and any residential place - Renox.in brings you the best looking and functional Homes which are quite brilliant to stay. We choose durable raw materials and great new technology to your doorstep. Every customer has the right to live their fullest in the residential space and Renox believes that it is possible to achieve it with proper planning, innovation and also right understanding of the customer's requirements.
Home Construction Suggestions1. Plan & Stick to it: Have a clear idea about your exact requirement from the new Home project and adhere to it in the whole process thereafter.
2. Allocate Budget & Control: As in any other building construction projects, there is every chance of exceeding predetermined budget for home construction project unless you have a clear figure in the first place and strictly manage your spending while selecting materials etc.
3. Find Right Contractor: Identify right and competent contractor, company or service provider to undertake your New Home Construction project, get everything in quote including the material selection along with budget and time line of completion and milestones for payments.
There is no other better solution than Renox for all your home construction needs. Our experienced architects and civil engineers provide awesome plan and design options for new homes for clients to choose from. These layout plans and designs are dependent on the area available.
At Renox.in, we are passionate about Building Architecturally Beautiful Homes for families to enjoy. This is the way we think, we can contribute to the community in Tirunelveli.
I wanted my home built in my absence, I liked the way Renox got involved from the very first call. They gave expert guidance in planning, designing, material selection and budgeting. Overall experience was wonderful and can surely recommend them.
My anxiety about constructing my own home remotely got cleared in almost few minutes when I spoke with construction experts from Renox.in. In very simple way they explained me all that I wanted to know before starting my construction project.
If you are planning to build your home way back in India, I can bet no other service can beat Renox.in, the way they did our home construction so conveniently gave us confidence to entrust two more house construction works to them right away.
SNo. | Brief Details of Construction Costs | Cost Per Sq Ft. |
---|---|---|
A | Construction Cost | 1 | Civil: Foundation, Columns, Beams, Slab, Stairs, Brick work, Plastering - per Sq Ft of Floor Area. | Rs.880 to Rs.1250 |
2 | Finishing Materials: Plumbing, Electrical, Flooring, Tiles, Granite/Marble, Doors, Windows, Painting, Steel Fabrication - per Sq Ft of Floor Area. | Rs.550 to Rs.1850 |
B | Total: | Rs.1430 to Rs.3100 |
SNo. | Brief Details of Construction Materials |
---|---|
1 | Civil: Foundation, Columns, Beams, Slab, Stairs: 53 Grade ISI marked cement, steel. Corse sand and appropriate gauge granite gravel. |
2 | Brick Work: Normal Machine Cut Bricks for Ground Floor, Light weight Machine Cut Bricks from First Floor Level Onwards. |
3 | Plastering: Appropriate admixture of cement and sand in two coats of plastering with a smooth finish on second coat surface. |
4 | Plumbing: Flowguard Technology - Ashirwad/Astral CPVC Hot/Cold pipes for water inlet, Appropriate gauge of PVC pipes for Drainage outlet piping. ISI mark plumbing fittings. WC's, Wash Basins, Diverters, Taps, Angle Cocks, Health Faucets etc. (These items can alter the final cost) |
5 | Electrical: ISI marked - FRLS (Fire Retardant Low Smoke) cables of appropriate gauge and thickness of Finolex/Finecab/Polycab Brand, ISI marked MCBs of Appropriate Values, Modular Switches, Sockets and Dimmers of Anchor/GoldMedal/GM Brand (These items can alter the final cost) |
6 | Flooring: Granite: Rs.100/- per Sq Ft where ever used as flooring. (These items can alter the final cost) |
7 | Tiles: Vitrified Tiles where ever used as flooring, Wall Tiles, Exterior Cladding Tiles. (These items can alter the final cost) |
8 | Doors: Main Door Frame and shutter in Indian Teak. Internal Door frames in Hard wood and Laminated Flush doors or Panel Doors as shutters. (These items can alter the final cost) |
9 | Windows & Ventilators: UPVC windows and Ventilators with warranty. (These items can alter the final cost) |
10 | Painting: Smooth Putty Finish on internal surface with two coats of Asian Paints Premium Emulsion Paint in Roller Finish, Doors, Window Grills, Railings & Gate in Asian Paints Satin Enamel paint in Roller Finish. Exterior Front Elevation in Texture finish. (These items can alter the final cost) |
11 | Steel Fabrication: ISI marked steel for Window grills, Railings for balcony and stairs, Gate. (These items can alter the final cost) |
Team Renox.in wishes you and your Family a very Happy & Pleasant New Home! |
Details | Cost |
---|---|
Concrete Structure - Steel, Sand, Cement, Gravel, Labour Cost | 600,000 |
Brick Work - Walls - Bricks, Sand, Cement, Labour Cost | 580,000 |
Electrical & Plumbing - Materials & Labour Cost | 370,000 |
Doors & Windows - Materials & Labour Cost | 110,000 |
Flooring - Tiles - Granite - Materials & Labour Cost | 280,000 |
Painting & Polishing - Materials & Labour Cost | 230,000 |
Fabrication & Glass - Materials & Labour Cost | 70,000 |
Total | 2,240,000 |
Details | Cost |
---|---|
Concrete Structure - Steel, Sand, Cement, Gravel, Labour Cost | 7,71,000 |
Brick Work - Walls - Bricks, Sand, Cement, Labour Cost | 7,45,000 |
Electrical & Plumbing - Materials & Labour Cost | 4,76,000 |
Doors & Windows - Materials & Labour Cost | 1,40,000 |
Flooring - Tiles - Granite - Materials & Labour Cost | 3,60,000 |
Painting & Polishing - Materials & Labour Cost | 2,95,000 |
Fabrication & Glass - Materials & Labour Cost | 90,000 |
Total | 28,77,000 |
What is the process to start off my Home Construction project?
Please fill in our basic form with the required details, we will send our team for a free on-site design consultation to take the right requirement inputs. After providing estimate based on the requirements,the work can begin formally with an approval from the client.
How can I track the progress of my home construction project?
The construction project progress is continually monitored and updated via E-mail and messaging by our support team. We believe in constant communication for eliminating any misgivings which the customer might have about the work progress.
How can I reduce the cost of Home Construction?
There is lot of scope for managing the cost of any construction project including home and villa constructions. There are some basic aspects which cannot be reduced, but also many more where you can use a lower priced product, material or concepts to drastically save money. Our construction specialists will guide you in every step possible in this part of the cost reduction process.
How long does it take to complete a house building project?
Building or constructing a home usually takes between 6 to 8 months. This can be altered in many ways, in case there is an urgency from the clients side. Availability of funds as and when required plays a major role in this aspect.
What are the basic requirements or approvals for constructing home?
Approval or permission from the concerned authorities for construction of the house is the main requirement on which all other aspects like getting an electrical connection, water connection depends.
What is the cost of 1800 sft Home Construction in Tirunelveli?
That can cost between Rs.25 Lakhs to Rs.40 Lakhs. There are three types of Budgets in any Home construction project - Economy, Modest & Premium. The prices varies from Rs.1,450/-, Rs.1,650/-, Rs.2,200,-, Rs.3,500/- and up.
What is per sft cost of Construction in Tirunelveli?
Refer our detailed page on Cost Of Construction Per Sq Ft in Tirunelveli