var MyBB = { init: function() { this.detectBrowser(); Event.observe(document, "dom:loaded", MyBB.pageLoaded); return true; }, pageLoaded: function() { MyBB.page_loaded = 1; expandables.init(); // Initialise check all boxes checkall = $$('input.checkall'); checkall.each(function(element) { Event.observe(element, "click", MyBB.checkAll.bindAsEventListener(this)); }); // Initialise "initial focus" field if we have one initialfocus = $$('input.initial_focus'); if(initialfocus[0]) { initialfocus[0].focus(); } if(typeof(use_xmlhttprequest) != "undefined" && use_xmlhttprequest == 1) { mark_read_imgs = $$('img.ajax_mark_read'); mark_read_imgs.each(function(element) { if(element.src.match("off.gif") || element.src.match("offlock.gif") || (element.title && element.title == lang.no_new_posts)) return; Event.observe(element, "click", MyBB.markForumRead.bindAsEventListener(this)); element.style.cursor = 'pointer'; if(element.title) { element.title += " - "; } element.title += lang.click_mark_read; }); } }, detectBrowser: function() { this.useragent = navigator.userAgent.toLowerCase(); this.useragent_version = parseInt(navigator.appVersion); if(navigator.product == "Gecko" && navigator.vendor.indexOf("Apple Computer") != -1) { this.browser = "safari"; } else if(this.useragent.indexOf("chrome") != -1) { this.browser = "chrome"; } else if(navigator.product == "Gecko") { this.browser = "mozilla"; } else if(this.useragent.indexOf("opera") != -1) { this.browser = "opera"; } else if(this.useragent.indexOf("konqueror") != -1) { this.browser = "konqueror"; } else if(this.useragent.indexOf("msie") != -1) { this.browser = "ie"; } else if(this.useragent.indexOf("compatible") == -1 && this.useragent.indexOf("mozilla") != -1) { this.browser = "netscape"; } if(this.useragent.indexOf("win") != -1) { this.os = "win"; } else if(this.useragent.indexOf("mac") != -1) { this.os = "mac"; } }, popupWindow: function(url, name, width, height) { settings = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes"; if(width) { settings = settings+",width="+width; } if(height) { settings = settings+",height="+height; } window.open(url, name, settings); }, deleteEvent: function(eid) { confirmReturn = confirm(deleteevent_confirm); if(confirmReturn == true) { var form = new Element("form", { method: "post", action: "calendar.html", style: "display: none;" }); form.insert({ bottom: new Element("input", { name: "action", type: "hidden", value: "do_editevent" }) }); if(my_post_key) { form.insert({ bottom: new Element("input", { name: "my_post_key", type: "hidden", value: my_post_key }) }); } form.insert({ bottom: new Element("input", { name: "eid", type: "hidden", value: eid }) }); form.insert({ bottom: new Element("input", { name: "delete", type: "hidden", value: 1 }) }); $$("body")[0].insert({ bottom: form }); form.submit(); } }, checkAll: function(e) { var allbox = Event.element(e); var form = Event.findElement(e, 'FORM'); if(!form) { return false; } form.getElements().each(function(element) { if(!element.hasClassName("checkall") && element.type == "checkbox") { element.checked = allbox.checked; } }); }, reputation: function(uid, pid) { if(!pid) { var pid = 0; } MyBB.popupWindow("reputation.html?action=add&uid="+uid+"&pid="+pid, "reputation", 400, 350) }, deleteReputation: function(uid, rid) { confirmReturn = confirm(delete_reputation_confirm); if(confirmReturn == true) { var form = new Element("form", { method: "post", action: "reputation.html?action=delete", style: "display: none;" }); form.insert({ bottom: new Element("input", { name: "rid", type: "hidden", value: rid }) }); if(my_post_key) { form.insert({ bottom: new Element("input", { name: "my_post_key", type: "hidden", value: my_post_key }) }); } form.insert({ bottom: new Element("input", { name: "uid", type: "hidden", value: uid }) }); $$("body")[0].insert({ bottom: form }); form.submit(); } }, whoPosted: function(tid) { MyBB.popupWindow("misc.html?action=whoposted&tid=" + tid, "whoPosted", 230, 300) }, hopPage: function(tid, page, pages) { if(pages > 1) { defpage = page + 1; } else { defpage = 1; } promptres = prompt("Quick Page Jump\nPlease enter a page number between 1 and "+pages+" to jump to.", defpage); if((promptres != null) && (promptres != "") && (promptres > 1) && (promptres <= pages)) { window.location = "showthread.html?tid="+tid+"&page"+promotres; } }, markForumRead: function(event) { element = Event.element(event); if(!element) { return false; } var fid = element.id.replace("mark_read_", ""); if(!fid) { return false; } new Ajax.Request('misc.html?action=markread&fid='+fid+'&ajax=1&my_post_key='+my_post_key, {method: 'get', onComplete: function(request) {MyBB.forumMarkedRead(fid, request); }}); }, forumMarkedRead: function(fid, request) { if(request.responseText == 1) { $('mark_read_'+fid).src = $('mark_read_'+fid).src.replace("on.gif", "off.gif"); Event.stopObserving($('mark_read_'+fid), "click", MyBB.markForumRead.bindAsEventListener(this)); $('mark_read_'+fid).style.cursor = 'default'; $('mark_read_'+fid).title = lang.no_new_posts; } }, detectDSTChange: function(timezone_with_dst) { var date = new Date(); var local_offset = date.getTimezoneOffset() / 60; if(Math.abs(parseInt(timezone_with_dst) + local_offset) == 1) { if(use_xmlhttprequest != 1 || !new Ajax.Request('misc.html?action=dstswitch&ajax=1', {method: 'post'})) // Ajax update failed? (No ajax support) Fake it { var form = new Element("form", { method: "post", action: "misc.html", style: "display: none;" }); form.insert({ bottom: new Element("input", { name: "action", type: "hidden", value: "dstswitch" }) }); $$("body")[0].insert({ bottom: form }); form.submit(); } } }, dismissPMNotice: function() { if(!$('pm_notice')) { return false; } if(use_xmlhttprequest != 1) { return true; } new Ajax.Request('private.html?action=dismiss_notice', {method: 'post', postBody: 'ajax=1&my_post_key='+my_post_key}); Element.remove('pm_notice'); return false; }, unHTMLchars: function(text) { text = text.replace(/</g, "<"); text = text.replace(/>/g, ">"); text = text.replace(/ /g, " "); text = text.replace(/"/g, "\""); text = text.replace(/&/g, "&"); return text; }, HTMLchars: function(text) { text = text.replace(new RegExp("&(?!#[0-9]+;)", "g"), "&"); text = text.replace(//g, ">"); text = text.replace(/"/g, """); return text; }, changeLanguage: function() { form = $('lang_select'); if(!form) { return false; } form.submit(); }, quickLogin: function() { if($("quick_login")) { var form = new Element("form", { method: "post", action: "member.html" }); form.insert({ bottom: new Element("input", { name: "action", type: "hidden", value: "do_login" }) }); if(document.location.href) { form.insert({ bottom: new Element("input", { name: "url", type: "hidden", value: this.HTMLchars(document.location.href) }) }); } form.insert({ bottom: new Element("input", { name: "quick_login", type: "hidden", value: "1" }) }); form.insert({ bottom: new Element("input", { name: "quick_username", id: "quick_login_username", type: "text", value: lang.username, "class": "textbox", onfocus: "if(this.value == '"+lang.username+"') { this.value=''; }", onblur: "if(this.value == '') { this.value='"+lang.username+"'; }" }) }).insert({ bottom: " " }); form.insert({ bottom: new Element("input", { name: "quick_password", id: "quick_login_password", type: "password", value: lang.password, "class": "textbox", onfocus: "if(this.value == '"+lang.password+"') { this.value=''; }", onblur: "if(this.value == '') { this.value='"+lang.password+"'; }" }) }).insert({ bottom: " " }); form.insert({ bottom: new Element("input", { name: "submit", type: "submit", value: lang.login, "class": "button" }) }); var span = new Element("span", { "class": "remember_me" }).insert({ bottom: new Element("input", { name: "quick_remember", id: "quick_login_remember", type: "checkbox", value: "yes", "class": "checkbox" }) }); span.innerHTML += ""; form.insert({ bottom: span }); form.innerHTML += lang.lost_password+lang.register_url; $("quick_login").innerHTML = ""; $("quick_login").insert({ before: form }); $("quick_login_remember").setAttribute("checked", "checked"); $('quick_login_username').focus(); } return false; } }; var Cookie = { get: function(name) { cookies = document.cookie; name = cookiePrefix+name+"="; cookiePos = cookies.indexOf(name); if(cookiePos != -1) { cookieStart = cookiePos+name.length; cookieEnd = cookies.indexOf(";", cookieStart); if(cookieEnd == -1) { cookieEnd = cookies.length; } return unescape(cookies.substring(cookieStart, cookieEnd)); } }, set: function(name, value, expires) { if(!expires) { expires = "; expires=Wed, 1 Jan 2024 00:00:00 GMT;" } else { expire = new Date(); expire.setTime(expire.getTime()+(expires*1000)); expires = "; expires="+expire.toGMTString(); } if(cookieDomain) { domain = "; domain="+cookieDomain; } else { domain = ""; } if(cookiePath != "") { path = cookiePath; } else { path = ""; } document.cookie = cookiePrefix+name+"="+escape(value)+"; path="+path+domain+expires; }, unset: function(name) { Cookie.set(name, 0, -1); } }; var DomLib = { // This function is from quirksmode.org // Modified for use in MyBB getPageScroll: function() { var yScroll; if(self.pageYOffset) { yScroll = self.pageYOffset; } else if(document.documentElement && document.documentElement.scrollTop) // Explorer 6 Strict { yScroll = document.documentElement.scrollTop; } else if(document.body) // all other Explorers { yScroll = document.body.scrollTop; } arrayPageScroll = new Array('',yScroll); return arrayPageScroll; }, // This function is from quirksmode.org // Modified for use in MyBB getPageSize: function() { var xScroll, yScroll; if(window.innerHeight && window.scrollMaxY) { xScroll = document.body.scrollWidth; yScroll = window.innerHeight + window.scrollMaxY; } else if(document.body.scrollHeight > document.body.offsetHeight) // All but Explorer Mac { xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight; } else // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari { xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; } var windowWidth, windowHeight; if(self.innerHeight) // all except Explorer { windowWidth = self.innerWidth; windowHeight = self.innerHeight; } else if(document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode { windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight; } else if (document.body) // other Explorers { windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight; } var pageHeight, pageWidth; // For small pages with total height less then height of the viewport if(yScroll < windowHeight) { pageHeight = windowHeight; } else { pageHeight = yScroll; } // For small pages with total width less then width of the viewport if(xScroll < windowWidth) { pageWidth = windowWidth; } else { pageWidth = xScroll; } var arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight); return arrayPageSize; } }; var expandables = { init: function() { expanders = $$('img.expander'); if(expanders.length > 0) { expanders.each(function(expander) { if(!expander.id) { return; } Event.observe(expander, "click", this.expandCollapse.bindAsEventListener(this)); if(MyBB.browser == "ie") { expander.style.cursor = "hand"; } else { expander.style.cursor = "pointer"; } expander.controls = expander.id.replace("_img", ""); var row = $(expander.controls); if(row) { Event.observe(row, "dblclick", this.expandCollapse.bindAsEventListener(this)); row.controls = expander.id.replace("_img", ""); } }.bind(this)); } }, expandCollapse: function(e) { element = Event.element(e) if(!element || !element.controls) { return false; } var expandedItem = $(element.controls+"_e"); var collapsedItem = $(element.controls+"_c"); if(expandedItem && collapsedItem) { if(expandedItem.style.display == "none") { expandedItem.show(); collapsedItem.hide(); this.saveCollapsed(element.controls); } else { expandedItem.hide(); collapsedItem.show(); this.saveCollapsed(element.controls, 1); } } else if(expandedItem && !collapsedItem) { if(expandedItem.style.display == "none") { expandedItem.show(); element.src = element.src.replace("collapse_collapsed.gif", "collapse.gif"); element.alt = "[-]"; element.title = "[-]"; this.saveCollapsed(element.controls); } else { expandedItem.hide(); element.src = element.src.replace("collapse.gif", "collapse_collapsed.gif"); element.alt = "[+]"; element.title = "[+]"; this.saveCollapsed(element.controls, 1); } } return true; }, saveCollapsed: function(id, add) { var saved = new Array(); var newCollapsed = new Array(); var collapsed = Cookie.get("collapsed"); if(collapsed) { saved = collapsed.split("|"); saved.each(function(item) { if(item != id && item != "") { newCollapsed[newCollapsed.length] = item; } }); } if(add == 1) { newCollapsed[newCollapsed.length] = id; } Cookie.set("collapsed", newCollapsed.join("|")); } }; var ActivityIndicator = Class.create(); ActivityIndicator.prototype = { initialize: function(owner, options) { var image; if(options && options.image) { image = "\"\""; } else { image = ""; } this.height = options.height || 150; this.width = options.width || 150; if(owner == "body") { arrayPageSize = DomLib.getPageSize(); arrayPageScroll = DomLib.getPageScroll(); var top = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - this.height) / 2); var left = ((arrayPageSize[0] - 20 - this.width) / 2); owner = document.getElementsByTagName("body").item(0); } else { if($(owner)) { owner = $(owner); } var offset = Position.positionedOffset(owner); left = offset[0]; top = offset[1]; } this.spinner = document.createElement("div"); this.spinner.style.border = "1px solid #000000"; this.spinner.style.background = "#FFFFFF"; this.spinner.style.color = "#000000"; this.spinner.style.position = "absolute"; this.spinner.style.zIndex = 1000; this.spinner.style.textAlign = "center"; this.spinner.style.verticalAlign = "middle"; this.spinner.style.fontSize = "13px"; this.spinner.innerHTML = "
"+image+"

"+loading_text+""; this.spinner.style.width = this.width + "px"; this.spinner.style.height = this.height + "px"; this.spinner.style.top = top + "px"; this.spinner.style.left = left + "px"; this.spinner.id = "spinner"; owner.insertBefore(this.spinner, owner.firstChild); }, destroy: function() { Element.remove(this.spinner); } }; /* Lang this! */ var lang = { }; /* additions for IE5 compatibility */ if(!Array.prototype.shift) { Array.prototype.shift = function() { firstElement = this[0]; this.reverse(); this.length = Math.max(this.length-1,0); this.reverse(); return firstElement; } } if(!Array.prototype.unshift) { Array.prototype.unshift = function() { this.reverse(); for(var i=arguments.length-1;i>=0;i--) { this[this.length]=arguments[i] } this.reverse(); return this.length } } if(!Array.prototype.push) { Array.prototype.push = function() { for(var i=0;i