var Markup = { MODE_COMMENT: 1, MODE_ARTICLE: 2, MODE_QUICKFACTS: 3, MODE_SIGNATURE: 4, simpleTags: { img: 1, pad: 1, item: 1, spell: 1, achievement: 1, money: 1, npc: 1, skill: 1, pet: 1, 'class': 1, race : 1 }, _prepare: function(D, C) { Markup.tags = []; Markup.links = []; Markup.nTags = 0; Markup.nLinks = 0; D = D.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); D = D.replace(/^(\s*)|\r|(\s*)$/g, ""); D = D.replace(/\n(\s+)\n/g, "\n\n"); var B = "b|i|u|s|small"; var A = "b|i|u|s|small|url"; switch (C) { case Markup.MODE_ARTICLE: Markup.maps = []; D = D.replace(/(.)?\[toggler\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["id", "[a-z0-9]+"]]); Markup.tags.push({ name: "toggler", close: false, other: G }); return (E || "") + "" } }); D = D.replace(/(.)?\[div\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["id", "[a-z0-9]+"], ["hidden", ""]]); Markup.tags.push({ name: "div", close: false, other: G }); return (E || "") + "" } }); D = D.replace(/(.)?\[img\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["src", "\\S+"], ["width", "[0-9]+"], ["height", "[0-9]+"], ["float", "left|right"]]); Markup.tags.push({ name: "img", close: false, other: G }); return (E || "") + "" } }); D = D.replace(/(.)?\[map\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["zone", "[0-9]+[a-z]?"], ["source", "\\S+"]]); Markup.tags.push({ name: "map", close: false, other: G }); return (E || "") + "" } }); D = D.replace(/(.)?\[pin\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["x", "[0-9]{1,2}(\\.[0-9])?"], ["y", "[0-9]{1,2}(\\.[0-9])?"], ["url", "\\S+"], ["type", "[0-9]+"]]); Markup.tags.push({ name: "pin", close: false, other: G }); return (E || "") + "" } }); B += "|h3|minibox"; A += "|h3|minibox|toggler|div|map|pin"; case Markup.MODE_QUICKFACTS: D = D.replace(/(.)?\[color\s*[\s+=:]\s*(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow|c[0-9]{2}|r[1-4]?|q[0-8]?|#[a-f0-9]{6})\]/gi, function(F, E, G) { if (E == "\\") { return F.substr(1) } else { Markup.tags.push({ name: "color", color: false, other: (G).toLowerCase() }); return (E || "") + "" } }); D = D.replace(/(.)?\[(item|spell|achievement|class|race|npc|skill|pet|money)\s*[\s+=:]\s*(\d+?)\]/gi, function(F, E, I, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup.tags.push({ name: (I).toLowerCase(), close: false, other: H }); return (E || "") + "" } }); D = D.replace(/(.)?\[icon\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["name", "\\S+"], ["size", "tiny|small|medium|large"], ["float", "left|right"]]); Markup.tags.push({ name: "icon", close: false, other: G }); return (E || "") + "" } }); D = D.replace(/(.)?\[span\s*[\s+=:]\s*(.+?)\]/gi, function(F, E, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup._yank(H, [["class", "\\S+"]]); Markup.tags.push({ name: "span", close: false, other: G }); return (E || "") + "" } }); B += "|pad|span"; A += "|color|span|icon"; case Markup.MODE_COMMENT: D = D.replace(/(.)?\[quote(\s*[\s+=:]\s*([^\]]+?))?\]/gi, function(F, E, I, H) { if (E == "\\") { return F.substr(1) } else { var G = Markup.tags.push({ name: "quote", close: false, other: H }); return (E || "") + "" } }); B += "|code|ul|ol|li"; A += "|code|quote|ul|ol|li"; default: D = D.replace(/(.)?\[url\s*[\s+=:]\s*([^\]]+?)\]/gi, function(F, E, G) { if (E == "\\") { return F.substr(1) } else { Markup.tags.push({ name: "url", close: false, other: G }); return (E || "") + "" } }) } D = D.replace(new RegExp("(.)?\\[(" + B + ")\\]", "gi"), function(F, E, G) { if (E == "\\") { return F.substr(1) } else { Markup.tags.push({ name: (G).toLowerCase(), close: false, other: "" }); return (E || "") + "" } }); D = D.replace(new RegExp("(.)?\\[/(" + A + ")\\]", "gi"), function(F, E, G) { if (E == "\\") { return F.substr(1) } else { Markup.tags.push({ name: (G).toLowerCase(), close: true, other: "" }); return (E || "") + "" } }); D = D.replace(/(https?:\/\/|www\.)([\/_a-z0-9\%\?#@\-\+~&=;:'\(\)]|\.\S|,\S)+/gi, function(E) { Markup.links.push(E); return "" }); return D }, _parseCode: function(G, K, E) { var B = [], I = [], D = "", C; var F = G.length; while (E < F) { if (G.charAt(E) == "<" && G.charAt(E + 1) == "t") { if (D.length) { if (K == "ol" || K == "ul") { if (trim(D).length) { I.push(["", D]) } } else { if (K != "map") { B.push(["", D]) } } D = "" } E += 2; C = ""; while (G.charAt(E) != ">") { C += G.charAt(E); ++E }++E; var L = Markup.tags[parseInt(C)]; if (L.close) { if (L.name == K) { break } } else { var H = Markup.simpleTags[L.name] != null; var J = []; if (!H) { var A = Markup._parseCode(G, L.name, E); J = A[0]; E = A[1] } if (J.length || H) { if (L.name == "url" && !Markup._isUrlSafe(L.other)) { L.name = "" } if (K == "ol" || K == "ul") { if (L.name == "li") { I = Markup._cleanNodes(I); if (I.length) { B.push(["li", I]); I = [] } B.push(["li", J]) } else { I.push([L.name, J, L.other]) } } else { if (K == "map") { if (L.name == "pin") { B.push(["pin", J, L.other]) } } else { if (L.name == "li") { B.push(["", J, L.other]) } else { if (L.name != "pin") { B.push([L.name, J, L.other]) } } } } } } } else { D += G.charAt(E); ++E } } if (D.length) { if (K == "ol" || K == "ul") { if (trim(D).length) { I.push(["", D]) } } else { if (K != "map") { B.push(["", D]) } } } I = Markup._cleanNodes(I); if (I.length) { B.push(["li", I]); I = [] } return [B, E] }, _cleanNodes: function(B) { var D = []; for (var C = 0, A = B.length; C < A; ++C) { if (B[C][0] == "") { if (C == 0) { B[C][1] = B[C][1].replace(/^\n+/g, "") } if (C == B.length - 1) { B[C][1] = B[C][1].replace(/\n+$/g, "") } if (B[C][1] != "") { D.push(B[C]) } } else { D.push(B[C]) } } return D }, _yank: function(D, C) { var E = {}; D = " " + D + " "; for (var B = 0, A = C.length; B < A; ++B) { if (C[B][1] == "") { D = D.replace(new RegExp("\\s" + C[B][0] + "\\s", "ig"), function(F) { E[C[B][0]] = true; return " " }) } else { D = D.replace(new RegExp("\\s" + C[B][0] + "\\s*[\\s=:]\\s*(" + C[B][1] + ")\\s", "ig"), function(G, F) { E[C[B][0]] = F; return " " }) } } return E }, _isUrlSafe: function(A) { if (!A) { return true } return ! A.match(/^[a-z0-9]+?:/i) || A.match(/^https?:/i) }, _htmlmize: function(B) { var G = ""; for (var D = 0, A = B.length; D < A; ++D) { switch (B[D][0]) { case "": G += B[D][1]; break; case "": G += Markup._htmlmize(B[D][1]); break; case "minibox": G += '
' + Markup._htmlmize(B[D][1]) + "
"; break; case "code": G += '
' + Markup._htmlmize(B[D][1]) + "
"; break; case "quote": G += '
'; if (B[D][2]) { var H = trim(B[D][2]); if (H.length > 0) { G += ""; if (H.match(/[^a-z0-9]/i) == null && H.length >= 4 && H.length <= 16) { G += '' + H + "" } else { G += H } G += " " + LANG.markup_said + '
' } } G += Markup._htmlmize(B[D][1]) + "
"; break; case "url": G += '"; break; case "li": G += "
  • " + Markup._htmlmize(B[D][1]) + "
  • "; break; case "u": G += "" + Markup._htmlmize(B[D][1]) + ""; break; case "s": G += "" + Markup._htmlmize(B[D][1]) + ""; break; case "pad": G += '
    ' + Markup._htmlmize(B[D][1]) + "
    "; break; case "color": G += "' + Markup._htmlmize(B[D][1]) + ""; break; case "toggler": var F = B[D][2]; if (F.id != null) { G += '
    " + Markup._htmlmize(B[D][1]) + "" } break; case "div": var F = B[D][2]; if (F.id != null) { G += '
    " } break; case "icon": var F = B[D][2]; F.size = F.size || 'tiny'; if (F.name != "" && Markup._isUrlSafe(F.name)) { G += '' } break; case "span": var F = B[D][2]; if (F.name != "" && Markup._isUrlSafe(F.name)) { G += '' G += Markup._htmlmize(B[D][1]) + '' } break; case "img": var F = B[D][2]; if (F.src != "" && Markup._isUrlSafe(F.src)) { G += '"; G += " "; G += "" + g_achievements[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Achievement #' + B[D][2] + ")"; break; case "money": if (_ = Math.floor(B[D][2] / 10000)) G += '' + _ + " "; if (_ = Math.floor((B[D][2] % 10000) / 100)) G += '' + _ + " "; if (_ = Math.floor(B[D][2]) % 100) G += '' + _ + ""; break; case "class": if (g_classes[B[D][2]]) { G += ""; G += " "; G += "" + g_classes[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Class #' + B[D][2] + ")"; break; case "race": if (g_races[B[D][2]]) { G += ""; G += " "; G += "" + g_races[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Race #' + B[D][2] + ")"; break; case "npc": if (g_npcs[B[D][2]]) { G += ""; G += " "; G += "" + g_npcs[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(NPC #' + B[D][2] + ")"; break; case "skill": if (g_skills[B[D][2]]) { G += ""; G += " "; G += "" + g_skills[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Skill #' + B[D][2] + ")"; break; case "pet": if (g_pets[B[D][2]]) { G += ""; G += " "; G += "" + g_pets[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Pet #' + B[D][2] + ")"; break; case "item": if (g_items[B[D][2]]) { G += ""; G += " "; G += "" + g_items[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Item #' + B[D][2] + ")"; break; case "spell": if (g_spells[B[D][2]]) { G += ""; G += " "; G += "" + g_spells[B[D][2]]["name_" + g_locale.name] + ""; } else G += '(Spell #' + B[D][2] + ")"; break; case "map": var F = B[D][2]; if (F.zone != null) { var E = Markup._htmlmize(B[D][1]); G += '(Map: Zone #' + parseInt(F.zone) + ", " + E.length + " pin" + (E.length == 1 ? "": "s") + ")"; Markup.maps.push([F.zone, E]) } break; case "pin": var F = B[D][2]; if (!Markup._isUrlSafe(F.url)) { F.url = "" } if (G == "") { G = [] } var C = Markup._htmlmize(B[D][1]).replace(/\n/g, "
    "); if (F.url && F.url.indexOf("?npc=") != -1) { C = '' + C + '
    Click to view this NPC' } G.push([parseFloat(F.x || 0), parseFloat(F.y || 0), { label: C, url: F.url, type: F.type }]); break; default: G += "<" + B[D][0] + ">" + Markup._htmlmize(B[D][1]) + "" } } return G }, _tagless: function(B) { var E = ""; for (var C = 0, A = B.length; C < A; ++C) { switch (B[C][0]) { case "": E += B[C][1]; break; case "img": var D = B[C][2]; if (D.src != "" && Markup._isUrlSafe(D.src)) { E += "(Image: " + D.src + ")" } break; case "npc": E += "(NPC #" + B[C][2] + ")"; break; case "achievement": E += "(Achievement #" + B[C][2] + ")"; break; case "class": E += "(Class #" + B[C][2] + ")"; break; case "race": E += "(Race #" + B[C][2] + ")"; break; case "skill": E += "(Skill #" + B[C][2] + ")"; break; case "pet": E += "(Pet #" + B[C][2] + ")"; break; case "item": E += "(Item #" + B[C][2] + ")"; break; case "spell": E += "(Spell #" + B[C][2] + ")"; break; case "map": E += "(Map)"; break; case "pin": break; default: E += Markup._tagless(B[C][1]) } } return E }, toHtml: function(D, C) { C = C || {}; C.root = C.root || ""; if (C.mode != null && C.mode != Markup.MODE_SIGNATURE) { D = D.replace(/\s*\[(ol|ul|h3)\]/ig, function(F, E) { return "[" + E + "]" }); D = D.replace(/\[\/(ol|ul|h3|minibox|code|quote)\]\s*/ig, function(F, E) { return "[/" + E + "]" }); D = D.replace(/\s*\[(pad)\]\s*/ig, function(F, E) { return "[" + E + "]" }) } D = Markup._prepare(D, C.mode); var A = Markup._parseCode(D, C.root, 0)[0]; var B = Markup._htmlmize(A); B = B.replace(//g, function(G, E) { var F = Markup.links[parseInt(E)]; return '': '">') + (F.length > 100 ? F.substr(0, 97) + "...": F) + "" }); B = B.replace(/\n/g, "
    "); return B }, removeTags: function(D, C) { C = C || {}; C.root = C.root || ""; if (C.mode != null && C.mode != Markup.MODE_SIGNATURE) { D = D.replace(/\s*\[(ol|ul|h3)\]\s?/ig, function(F, E) { return " [" + E + "]" }); D = D.replace(/\s?\[\/(ol|ul|h3|minibox|code|quote)\]\s*/ig, function(F, E) { return "[/" + E + "]" }); D = D.replace(/\s*\[(pad)\]\s*/ig, function(F, E) { return "[" + E + "]" }) } D = Markup._prepare(D, C.mode); var A = Markup._parseCode(D, C.root, 0)[0]; var B = Markup._tagless(A); B = B.replace(//g, function(G, E) { var F = Markup.links[parseInt(E)]; return F }); B = B.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"'); return B }, mapperPreview: function(C) { try { window.mapper = Markup.maps[C]; var B = window.open("?edit=mapperpreview", "mapperpreview", "toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=no,width=800,height=540"); B.focus() } catch(A) {} }, printHtml: function (c, d, b) { d = ge(d); var a = Markup.toHtml(c, b); d.innerHTML = a; } };