// Phorum object. Other JavaScript code for Phorum can extend
// this one to implement functionality without risking name
// name space collissions.
Phorum = {};
/* Added by module "core", file "include/ajax/client.js.php" */
// Create the Phorum object if it's not available. It it created in the
// core javascript.php, but when loading this code from an external
// page, it might not be available.
if (!document.Phorum || Phorum == undefined) Phorum = {};
Phorum.Ajax = {};
// The version of this lib
Phorum.Ajax.version = '1.0.0';
// The URL that we use to access the Phorum Ajax layer.
Phorum.Ajax.URL = 'http://www.celestialdarkness.com/forum/ajax.php';
// Storage for Ajax call return data. This acts as a local cache
// for keeping track of already retrieved items.
Phorum.Ajax.cache = {};
/**
* Create an XMLHttpRequest object.
* Used internally by Phorum.Ajax.call().
* Raise an onFailure event in case no object can be created.
* Return either an object or null if the object creation failed.
*/
Phorum.Ajax.getXMLHttpRequest = function(req)
{
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
var versions = [
'MSXML2.XMLHttp.5.0',
'MSXML2.XMLHttp.4.0',
'MSXML2.XMLHttp.3.0',
'MSXML2.XMLHttp',
'Microsoft.XMLHttp'
];
for (var i=0; i < versions.length; i++) {
try { xhr = new ActiveXObject(versions[i]); } catch (e) { }
}
}
if (xhr) {
return xhr;
}
if (req.onFailure) req.onFailure(
'Phorum: Unable to create an XMLHttpRequest object',
-1, null
);
return null;
}
/**
* Execute an Ajax Phorum call.
*/
Phorum.Ajax.call = function(req)
{
// If the store property is set for the request, then check
// if the data for the request is already available in the
// local cache. If yes, then return the data immediately.
if (req.store) {
if (req.store != null && Phorum.Ajax.cache[req.store]) {
if (req.onSuccess) {
// true = data retrieved from cache.
req.onSuccess(Phorum.Ajax.cache[req.store], true);
}
return;
}
}
// Check the request data.
if (! req['call']) {
if (req.onFailure) req.onFailure(
'Phorum.Ajax.call() error: missing property ' +
'"call" for the request object.',
-1, null
);
return;
}
// Check if there is an XMLHttpRequest object available.
var xhr = Phorum.Ajax.getXMLHttpRequest(req);
if (! xhr) return;
// Convert the request object to JSON.
var json = Phorum.JSON.encode(req);
// Notify the start of the request loading stage.
if (req.onRequest) req.onRequest(json);
xhr.open("post", Phorum.Ajax.URL, true);
xhr.setRequestHeader("Content-Type", "text/x-json");
xhr.onreadystatechange = function()
{
if (req.onReadStateChange) req.onReadyStateChange(req);
switch (xhr.readyState)
{
case 1:
if (req.onLoading) req.onLoading(xhr);
break;
case 2:
if (req.onLoaded) req.onLoaded(xhr);
break;
case 3:
if (req.onInteractive) req.onInteractive(xhr);
break;
case 4:
if (req.onComplete)req.onComplete(xhr);
if (req.onResponse) req.onResponse(xhr.responseText);
if (xhr.status == 200) {
// Evaluate the returned JSON code. If evaluation fails,
// then run the onFailure event for the Phorum.Ajax.call.
try {
var res = Phorum.JSON.decode(xhr.responseText);
} catch (e) {
if (req.onFailure) req.onFailure(
'Ajax Phorum API call succeeded, but the return ' +
'data could not be parsed as JSON data.',
xhr.status, xhr.responseText
);
return;
}
// If the req.store property is set, then we store
// the result data in the Phorum cache.
if (req.store) Phorum.Ajax.cache[req.store] = res;
// false = data not retrieved from store.
if (req.onSuccess) req.onSuccess(res, false);
} else {
if (req.onFailure) req.onFailure(
'The Ajax Phorum API call failed',
xhr.status, xhr.responseText
);
}
break;
}
};
xhr.send(json);
}
// Invalidate a single cache item of the full cache.
Phorum.Ajax.invalidateCache = function(key)
{
if (key) {
Phorum.Ajax.cache[key] = null;
} else {
Phorum.Ajax.cache = new Array();
}
}
// Parse out javascript blocks from the data to eval them. Adding them
// to the page using innerHTML does not invoke parsing by the browser.
Phorum.Ajax.evalJavaScript = function(data)
{
var cursor = 0;
var start = 1;
var end = 1;
while (cursor < data.length && start > 0 && end > 0) {
start = data.indexOf('<script', cursor);
end = data.indexOf('</script', cursor);
if (end >start && end > -1) {
if (start > -1) {
var res = data.substring(start, end);
start = res.indexOf('>') + 1;
res = res.substring(start);
if (res.length != 0) {
eval(res);
}
}
cursor = end + 1;
}
}
}
// ======================================================================
// JSON encoder and decoder
// Based on byteson by Andrea Giammarchi
// (http://www.devpro.it/byteson/)
// ======================================================================
Phorum.JSON = {};
Phorum.JSON.common =
{
// characters object, useful to convert some char in a JSON compatible way
c:{'\b':'b','\t':'t','\n':'n','\f':'f','\r':'r','"':'"','\\':'\\','/':'/'},
// decimal function, returns a string with length === 2 for date convertion
d:function(n){return n < 10 ? '0'.concat(n) : n},
// integer function, returns integer value from a piece of string
i:function(e, p, l){return parseInt(e.substr(p, l))},
// slash function, add a slash before a common.c char
s:function(i,d){return '\\'.concat(Phorum.JSON.common.c[d])},
// unicode function, return respective unicode string
u:function(i,d){var n = d.charCodeAt(0).toString(16);return '\\u'.concat(n.length < 2 ? '000' : '00', n)}
};
Phorum.JSON.convert = function(params, result)
{
switch(params.constructor) {
case Number:
result = isFinite(params) ? String(params) : 'null';
break;
case Boolean:
result = String(params);
break;
case Date:
result = concat(
'"',
params.getFullYear(), '-',
Phorum.JSON.common.d(params.getMonth() + 1), '-',
Phorum.JSON.common.d(params.getDate()), 'T',
Phorum.JSON.common.d(params.getHours()), ':',
Phorum.JSON.common.d(params.getMinutes()), ':',
Phorum.JSON.common.d(params.getSeconds()),
'"'
);
break;
case String:
if(/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/.test(params)){
result = new Date;
result.setHours(Phorum.JSON.common.i(params, 11, 2));
result.setMinutes(Phorum.JSON.common.i(params, 14, 2));
result.setSeconds(Phorum.JSON.common.i(params, 17, 2));
result.setMonth(Phorum.JSON.common.i(params, 5, 2) - 1);
result.setDate(Phorum.JSON.common.i(params, 9, 2));
result.setFullYear(Phorum.JSON.common.i(params, 0, 4));
};
break;
default:
var n, tmp = [];
if(result) {
for(n in params) result[n] = params[n];
} else {
for(n in params) {
if(params.hasOwnProperty(n) && !!(result = Phorum.JSON.encode(params[n])))
tmp.push(Phorum.JSON.encode(n).concat(':', result));
};
result = '{'.concat(tmp.join(','), '}');
};
break;
};
return result;
}
Phorum.JSON.encode = function(params)
{
var result = '';
if(params === null)
{
result = 'null';
}
else if(!{'function':1,'undefined':1,'unknown':1}[typeof(params)])
{
switch(params.constructor)
{
case Array:
for(var i = 0, j = params.length, tmp = []; i < j; i++) {
if(!!(result = Phorum.JSON.encode(params[i])))
tmp.push(result);
};
result = '['.concat(tmp.join(','), ']');
break;
case String:
result = '"'.concat(params.replace(
/(\x5c|\x2F|\x22|[\x0c-\x0d]|[\x08-\x0a])/g, Phorum.JSON.common.s
).replace(
/([\x00-\x07]|\x0b|[\x0e-\x1f])/g, Phorum.JSON.common.u
), '"');
break;
default:
result = Phorum.JSON.convert(params);
break;
};
};
return result;
};
Phorum.JSON.decode = function(json)
{
eval('var res = '+json);
if (res === undefined) {
throw new SyntaxError('The Phorum JSON data cannot be parsed');
}
return res;
};
/* Added by module "editor_tools", file "mods/editor_tools/editor_tools.js" */
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2008 Phorum Development Team //
// http://www.phorum.org //
// //
// This program is free software. You can redistribute it and/or modify //
// it under the terms of either the current Phorum License (viewable at //
// phorum.org) or the Phorum License that was distributed with this file //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY, without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
// //
// You should have received a copy of the Phorum License //
// along with this program. //
// //
///////////////////////////////////////////////////////////////////////////////
// Javascript code for the Phorum editor_tools module.
// Valid object ids for textarea objects to handle. The first object
// that can be matched will be use as the object to work with.
// This is done to arrange for backward compatibility between
// Phorum versions.
var editor_tools_textarea_ids = new Array(
'phorum_textarea', // Phorum 5.1
'body', // Phorum 5.2
'message' // PM interface
);
// Valid object ids for subject text field objects to handle.
var editor_tools_subject_ids = new Array(
'phorum_subject', // Phorum 5.1
'subject' // Phorum 5.2
);
// Storage for language translation strings from the Phorum language system.
var editor_tools_lang = new Array();
// Some variables for storing objects that we need globally.
var editor_tools_textarea_obj = null;
var editor_tools_subject_obj = null;
var editor_tools_help_picker_obj = null;
// A variable for storing the current selection range of the 
// textarea. Needed for working around an MSIE problem.
var editor_tools_textarea_range = null;
// A variable for storing all popup objects that we have, so we
// can hide them all at once.
var editor_tools_popup_objects = new Array();
// Storage for the tools that have to be added to the editor tools panel.
// The array value contains the following fields:
//
// 1) the id for the tool (must be unique)
// 2) a description to use as the tooltip title for the button
// 3) the icon image to display as a button.
// 4) the javascript action to run when the user clicks the button
// 5) optional: the width of the icon image
// 6) optional: the height of the icon image (presumed 20px by default)
//
// This array will be filled from PHP-generated javascript.
var editor_tools = new Array();
// Storage for help chapters that must be put under the editor tools
// help button. The array value contains the following fields:
//
// 1) a description that will be used as the clickable link text.
// 2) the url for the help page (absolute or relative to the Phorum dir).
//
// This array will be filled from PHP-generated javascript.
var editor_tools_help_chapters = new Array();
// The dimensions of the help window.
var editor_tools_help_width = '400px';
var editor_tools_help_height = '400px';
// The default height for our icons.
// This one is filled from PHP-generated javascript.
var editor_tools_default_iconheight;
// A simple browser check. We need to know the browser version, because
// the color picker won't work on at least MacOS MSIE 5.
var OLD_MSIE =
navigator.userAgent.indexOf('MSIE')>=0 &&
navigator.appVersion.replace(/.*MSIE (\d\.\d).*/g,'$1')/1 < 6;
// ----------------------------------------------------------------------
// Uitilty functions
// ----------------------------------------------------------------------
// Find the Phorum textarea object and return it. In case of
// problems, null will be returned.
function editor_tools_get_textarea()
{
if (editor_tools_textarea_obj != null) {
return editor_tools_textarea_obj;
}
for (var i=0; editor_tools_textarea_ids[i]; i++) {
editor_tools_textarea_obj =
document.getElementById(editor_tools_textarea_ids[i]);
if (editor_tools_textarea_obj) break;
}
if (! editor_tools_textarea_obj) {
alert('editor_tools.js library reports: ' +
'no textarea found on the current page.');
return null;
}
return editor_tools_textarea_obj;
}
// Find the Phorum subject field object and return it. In case of
// problems, null will be returned.
function editor_tools_get_subjectfield()
{
if (editor_tools_subject_obj != null) {
return editor_tools_subject_obj;
}
for (var i=0; editor_tools_subject_ids[i]; i++) {
editor_tools_subject_obj =
document.getElementById(editor_tools_subject_ids[i]);
if (editor_tools_subject_obj) break;
}
if (! editor_tools_subject_obj) {
return null;
}
return editor_tools_subject_obj;
}
// Return a translated string, based on the Phorum language system.
function editor_tools_translate(str)
{
if (editor_tools_lang[str]) {
return editor_tools_lang[str];
} else {
return str;
}
}
// Strip whitespace from the start and end of a string.
function editor_tools_strip_whitespace(str, return_stripped)
{
var strip_pre = '';
var strip_post = '';
// Strip whitespace from end of string.
for (;;) {
var lastchar = str.substring(str.length-1, str.length);
if (lastchar == ' ' || lastchar == '\r' ||
lastchar == '\n' || lastchar == '\t') {
strip_post = lastchar + strip_post;
str = str.substring(0, str.length-1);
} else {
break;
}
}
// Strip whitespace from start of string.
for (;;) {
var firstchar = str.substring(0,1);
if (firstchar == ' ' || firstchar == '\r' ||
firstchar == '\n' || firstchar == '\t') {
strip_pre += firstchar;
str = str.substring(1);
} else {
break;
}
}
if (return_stripped) {
return new Array(str, strip_pre, strip_post);
} else {
return str;
}
} 
// Close all popup windows and move the focus to the textarea.
function editor_tools_focus_textarea()
{
var textarea_obj = editor_tools_get_textarea();
if (textarea_obj == null) return;
editor_tools_hide_all_popups();
textarea_obj.focus();
}
// Close all popup windows and move the focus to the subject field.
function editor_tools_focus_subjectfield()
{
var subjectfield_obj = editor_tools_get_subjectfield();
if (subjectfield_obj == null) return;
editor_tools_hide_all_popups();
subjectfield_obj.focus();
}
// ----------------------------------------------------------------------
// Construction of the editor tools
// ----------------------------------------------------------------------
// Add the editor tools panel to the page.
function editor_tools_construct()
{
var textarea_obj;
var div_obj;
var parent_obj;
var a_obj;
var img_obj;
// If the browser does not support document.getElementById,
// then the javascript code won't run. Do not display the
// editor tools at all in that case.
if (! document.getElementById) return;
// No editor tools selected to display? Then we're done.
if (editor_tools.length == 0) return;
// Find the textarea and subject field object.
textarea_obj = editor_tools_get_textarea();
if (textarea_obj == null) return; // we consider this fatal.
var subjectfield_obj = editor_tools_get_subjectfield();
// Insert a<div>for containing the buttons, just before the textarea,
// unless there is already an object with id "editor-tools". In that
// case, the existing object is used instead.
div_obj = document.getElementById('editor-tools');
if (! div_obj) {
parent_obj = textarea_obj.parentNode;
div_obj = document.createElement('div');
div_obj.id = 'editor-tools';
parent_obj.insertBefore(div_obj, textarea_obj);
}
// Add the buttons to the new<div>for the editor tools.
for (var i = 0; i < editor_tools.length; i++)
{
var toolinfo = editor_tools[i];
var tool = toolinfo[0];
var description = toolinfo[1];
var icon = toolinfo[2];
var jsaction = toolinfo[3];
var iwidth = toolinfo[4];
var iheight = toolinfo[5];
var target = toolinfo[6];
// Do not use the color picker on MSIE 5. I tested this on a
// Macintosh OS9 system and the color picker about hung MSIE.
if (tool == 'color' && OLD_MSIE) continue;
a_obj = document.createElement('a');
a_obj.id = 'editor-tools-a-' + tool;
a_obj.href = 'javascript:' + jsaction;
img_obj = document.createElement('img');
img_obj.id = 'editor-tools-img-' + tool;
img_obj.className = 'editor-tools-button';
img_obj.src = icon;
img_obj.width = iwidth;
img_obj.height = iheight;
img_obj.style.padding = '2px';
img_obj.alt = description;
img_obj.title = description;
// If an icon is added that is less high than our default icon
// height, we try to make the button the same height as the
// others by adding some dynamic padding to it.
if (iheight < editor_tools_default_iconheight) {
var fill = editor_tools_default_iconheight - iheight;
var addbottom = Math.round(fill / 2);
var addtop = fill - addbottom;
img_obj.style.paddingTop = (addtop + 2) + 'px';
img_obj.style.paddingBottom = (addbottom + 2) + 'px';
}
a_obj.appendChild(img_obj);
// Add the button to the page.
// target = subject is a feature that was added for supporting
// the subjectsmiley tool. This one is added to the subject field
// instead of the textarea. 
if (target == 'subject') {
// Find the subject text field. If we can't find one,
// then simply ignore this tool.
if (subjectfield_obj) {
img_obj.style.verticalAlign = 'top';
var parent = subjectfield_obj.parentNode;
var sibling = subjectfield_obj.nextSibling;
parent.insertBefore(a_obj, sibling);
}
} else {
div_obj.appendChild(a_obj);
}
}
// Hide any open popup when the user clicks the textarea or subject field.
textarea_obj.onclick = function() {
editor_tools_hide_all_popups();
};
if (subjectfield_obj) {
subjectfield_obj.onclick = function() {
editor_tools_hide_all_popups();
}
}
}
// ----------------------------------------------------------------------
// Popup window utilities
// ----------------------------------------------------------------------
// Create a popup window.
function editor_tools_construct_popup(create_id, anchor)
{
// Create the outer div for the popup window.
var popup_obj = document.createElement('div');
popup_obj.id = create_id;
popup_obj.className = 'editor-tools-popup';
popup_obj.style.display = 'none';
document.getElementById('editor-tools').appendChild(popup_obj);
popup_obj._anchor = anchor;
// Create the inner content div.
var content_obj = document.createElement('div');
content_obj.id = create_id + '-content';
popup_obj.appendChild(content_obj);
return new Array(popup_obj, content_obj);
}
// Toggle a popup window.
function editor_tools_toggle_popup(popup_obj, button_obj, width, leftoffset)
{
// Determine where to show the popup on screen.
var work_obj = button_obj;
var top = work_obj.offsetTop + work_obj.offsetHeight + 2;
var left = work_obj.offsetLeft;
while (work_obj.offsetParent != null) {
work_obj = work_obj.offsetParent;
left += work_obj.offsetLeft;
top += work_obj.offsetTop;
}
if (leftoffset) left -= leftoffset;
if (width) popup_obj.style.width = width;
// Move the popup window to the right place.
if (popup_obj._anchor == 'r')
{
// Determine the screen width.
var scrwidth = null;
if (document.documentElement.clientWidth) {
// Firefox screen width.
scrwidth = document.documentElement.clientWidth;
} else {
scrwidth = document.body.clientWidth;
// -16 for scrollbar that is counted in in some browsers.
if (document.getElementById && !document.all) {
scrwidth -= 16;
}
}
var right = scrwidth - left - button_obj.offsetWidth;
popup_obj.style.right = right + 'px';
popup_obj.style.top = top + 'px';
} else {
popup_obj.style.left = left + 'px';
popup_obj.style.top = top + 'px';
}
// Toggle the popup window's visibility.
if (popup_obj.style.display == 'none') {
editor_tools_hide_all_popups();
popup_obj.style.display = 'block';
} else {
popup_obj.style.display = 'none';
editor_tools_focus_textarea();
}
}
// Register an object as a popup, so editor_tools_hide_all_popups() 
// can hide it.
function editor_tools_register_popup_object(object)
{
if (! object) return;
editor_tools_popup_objects[editor_tools_popup_objects.length] = object;
}
// Hide all objects that were registered as a popup.
function editor_tools_hide_all_popups()
{
for (var i = 0; i < editor_tools_popup_objects.length; i++) {
var object = editor_tools_popup_objects[i];
object.style.display = 'none';
}
}
// Save the selection range of the textarea. This is needed because
// sometimes clicking in a popup can clear the selection in MSIE.
function editor_tools_store_range()
{
var ta = editor_tools_get_textarea();
if (ta == null || ta.setSelectionRange || ! document.selection) return;
ta.focus();
editor_tools_textarea_range = document.selection.createRange();
}
// Restored a saved textarea selection range.
function editor_tools_restore_range()
{
if (editor_tools_textarea_range != null)
{
editor_tools_textarea_range.select();
editor_tools_textarea_range = null;
}
}
// ----------------------------------------------------------------------
// Textarea manipulation
// ----------------------------------------------------------------------
// Add tags to the textarea. If some text is selected, then place the
// tags around the selected text. If no text is selected and a prompt_str
// is provided, then prompt the user for the data to place inside
// the tags.
function editor_tools_add_tags(pre, post, target, prompt_str)
{
var text;
var pretext;
var posttext;
var range;
var ta = target ? target : editor_tools_get_textarea();
if (ta == null) return;
// Store the current scroll offset, so we can restore it after
// adding the tags to its contents.
var offset = ta.scrollTop;
if (ta.setSelectionRange)
{
// Get the currently selected text.
pretext = ta.value.substring(0, ta.selectionStart);
text = ta.value.substring(ta.selectionStart, ta.selectionEnd);
posttext = ta.value.substring(ta.selectionEnd, ta.value.length);
// Prompt for input if no text was selected and a prompt is set.
if (text == '' && prompt_str) {
text = prompt(prompt_str, '');
if (text == null) return;
}
// Strip whitespace from text selection and move it to the
// pre- and post.
var res = editor_tools_strip_whitespace(text, true);
text = res[0];
pre = res[1] + pre;
post = post + res[2];
ta.value = pretext + pre + text + post + posttext;
// Reselect the selected text.
var cursorpos1 = pretext.length + pre.length;
var cursorpos2 = cursorpos1 + text.length;
ta.setSelectionRange(cursorpos1, cursorpos2);
ta.focus();
}
else if (document.selection) /* MSIE support */
{
// Get the currently selected text.
ta.focus();
range = document.selection.createRange();
// Fumbling to work around newline selections at the end of
// the text selection. MSIE does not include them in the
// range.text, but it does replace them when setting range.text
// to a new value :-/
var virtlen = range.text.length;
if (virtlen > 0) {
while (range.text.length == virtlen) {
range.moveEnd('character', -1);
}
range.moveEnd('character', +1);
}
// Prompt for input if no text was selected and a prompt is set.
text = range.text;
if (text == '' && prompt_str) {
text = prompt(prompt_str, '');
if (text == null) return;
}
// Strip whitespace from text selection and move it to the
// pre- and post.
var res = editor_tools_strip_whitespace(text, true);
text = res[0];
pre = res[1] + pre;
post = post + res[2];
// Add pre and post to the text.
range.text = pre + text + post;
// Reselect the selected text. Another MSIE anomaly has to be
// taken care of here. MSIE will include carriage returns
// in the text.length, but it does not take them into account
// when using selection range moving methods :-/
// By setting the range.text before, the cursor is now after
// the replaced code, so we will move the start and the end
// back in the text.
var mvstart = post.length + text.length -
((text + post).split('\r').length - 1);
var mvend = post.length +
(post.split('\r').length - 1);
range.moveStart('character', -mvstart);
range.moveEnd('character', -mvend);
range.select();
}
else /* Support for really limited browsers, e.g. MSIE5 on MacOS */
{
ta.value = ta.value + pre + post;
}
ta.scrollTop = offset;
}
// ----------------------------------------------------------------------
// Tool: Help
// ----------------------------------------------------------------------
function editor_tools_handle_help()
{
var c = editor_tools_help_chapters;
// Shouldn't happen.
if (c.length == 0) {
alert('No help chapters available');
return;
}
// Exactly one help chapter available. Immediately open the chapter.
if (c.length == 1) {
editor_tools_handle_help_select(c[0][1]);
return;
}
// Multiple chapters available. Show a help picker menu with some
// choices. Create the help picker on first access.
if (!editor_tools_help_picker_obj)
{
// Create a new popup.
var popup = editor_tools_construct_popup('editor-tools-help-picker','r');
editor_tools_help_picker_obj = popup[0];
var content_obj = popup[1];
// Populate the new popup.
for (var i = 0; i < editor_tools_help_chapters.length; i++) 
{
var helpinfo = editor_tools_help_chapters[i];
var a_obj = document.createElement('a');
a_obj.href = 'javascript:editor_tools_handle_help_select("' + helpinfo[1] + '")';
a_obj.innerHTML = helpinfo[0];
content_obj.appendChild(a_obj);
content_obj.appendChild(document.createElement('br'));
}
// Register the popup with the editor tools.
editor_tools_register_popup_object(editor_tools_help_picker_obj);
}
// Display the popup.
var button_obj = document.getElementById('editor-tools-img-help');
editor_tools_toggle_popup(editor_tools_help_picker_obj, button_obj);
}
function editor_tools_handle_help_select(url)
{
var help_window = window.open(
url,
'editor_tools_help',
'resizable=yes,' +
'menubar=no,' +
'directories=no,' +
'scrollbars=yes,' +
'toolbar=no,' +
'status=no,' +
'width=' + editor_tools_help_width + ',' +
'height=' + editor_tools_help_height
);
editor_tools_focus_textarea();
help_window.focus();
}
/* Added by module "smileys", file "mods/smileys/smileys_editor_tools.js.php" */
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2007 Phorum Development Team //
// http://www.phorum.org //
// //
// This program is free software. You can redistribute it and/or modify //
// it under the terms of either the current Phorum License (viewable at //
// phorum.org) or the Phorum License that was distributed with this file //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY, without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
// //
// You should have received a copy of the Phorum License //
// along with this program. //
///////////////////////////////////////////////////////////////////////////////
// Javascript code for Smileys support in the Phorum editor_tools module.
// Some variables for storing objects that we need globally.
var editor_tools_smiley_picker_obj = null;
var editor_tools_subjectsmiley_picker_obj = null;
// Smileys for the smiley picker.
// *_s = search strings (smileys)
// *_r = replace strings (image urls)
var editor_tools_smileys = new Array();
var editor_tools_smileys_r = new Array();
var editor_tools_smileys_a = new Array();
var editor_tools_subjectsmileys = new Array();
var editor_tools_subjectsmileys_r = new Array();
var editor_tools_subjectsmileys_a = new Array();
// The width and offset to the left for the smiley picker popup menus.
// These values can be tweaked from the smiley module settings page.
var editor_tools_smileys_popupwidth = '150px';
var editor_tools_smileys_popupoffset = 0;
var editor_tools_subjectsmileys_popupwidth = '150px';
var editor_tools_subjectsmileys_popupoffset = 0;
// The available smileys.
editor_tools_smileys[0] = '(:P)';
editor_tools_smileys_r[0] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley25.gif';
editor_tools_smileys_a[0] = 'spinning smiley sticking its tongue out';
editor_tools_subjectsmileys[0] = '(:P)';
editor_tools_subjectsmileys_r[0] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley25.gif';
editor_tools_subjectsmileys_a[0] = 'spinning smiley sticking its tongue out';
editor_tools_smileys[1] = '(td)';
editor_tools_smileys_r[1] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley23.gif';
editor_tools_smileys_a[1] = 'thumbs down';
editor_tools_subjectsmileys[1] = '(td)';
editor_tools_subjectsmileys_r[1] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley23.gif';
editor_tools_subjectsmileys_a[1] = 'thumbs down';
editor_tools_smileys[2] = '(tu)';
editor_tools_smileys_r[2] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley24.gif';
editor_tools_smileys_a[2] = 'thumbs up';
editor_tools_subjectsmileys[2] = '(tu)';
editor_tools_subjectsmileys_r[2] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley24.gif';
editor_tools_subjectsmileys_a[2] = 'thumbs up';
editor_tools_smileys[3] = ':)-D';
editor_tools_smileys_r[3] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley15.gif';
editor_tools_smileys_a[3] = 'smileys with beer';
editor_tools_subjectsmileys[3] = ':)-D';
editor_tools_subjectsmileys_r[3] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley15.gif';
editor_tools_subjectsmileys_a[3] = 'smileys with beer';
editor_tools_smileys[4] = '>:D<';
editor_tools_smileys_r[4] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley14.gif';
editor_tools_smileys_a[4] = 'the finger smiley';
editor_tools_subjectsmileys[4] = '>:D<';
editor_tools_subjectsmileys_r[4] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley14.gif';
editor_tools_subjectsmileys_a[4] = 'the finger smiley';
editor_tools_smileys[5] = '(:D';
editor_tools_smileys_r[5] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley12.gif';
editor_tools_smileys_a[5] = 'smiling bouncing smiley';
editor_tools_subjectsmileys[5] = '(:D';
editor_tools_subjectsmileys_r[5] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley12.gif';
editor_tools_subjectsmileys_a[5] = 'smiling bouncing smiley';
editor_tools_smileys[6] = '8-)';
editor_tools_smileys_r[6] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie8.gif';
editor_tools_smileys_a[6] = 'eye rolling smiley';
editor_tools_subjectsmileys[6] = '8-)';
editor_tools_subjectsmileys_r[6] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie8.gif';
editor_tools_subjectsmileys_a[6] = 'eye rolling smiley';
editor_tools_smileys[7] = ':)o';
editor_tools_smileys_r[7] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley16.gif';
editor_tools_smileys_a[7] = 'drinking smiley';
editor_tools_subjectsmileys[7] = ':)o';
editor_tools_subjectsmileys_r[7] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley16.gif';
editor_tools_subjectsmileys_a[7] = 'drinking smiley';
editor_tools_smileys[8] = '::o';
editor_tools_smileys_r[8] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie10.gif';
editor_tools_smileys_a[8] = 'eye popping smiley';
editor_tools_subjectsmileys[8] = '::o';
editor_tools_subjectsmileys_r[8] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie10.gif';
editor_tools_subjectsmileys_a[8] = 'eye popping smiley';
editor_tools_smileys[9] = 'B)-';
editor_tools_smileys_r[9] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie7.gif';
editor_tools_smileys_a[9] = 'smoking smiley';
editor_tools_subjectsmileys[9] = 'B)-';
editor_tools_subjectsmileys_r[9] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie7.gif';
editor_tools_subjectsmileys_a[9] = 'smoking smiley';
editor_tools_smileys[10] = ':(';
editor_tools_smileys_r[10] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie2.gif';
editor_tools_smileys_a[10] = 'sad smiley';
editor_tools_subjectsmileys[10] = ':(';
editor_tools_subjectsmileys_r[10] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie2.gif';
editor_tools_subjectsmileys_a[10] = 'sad smiley';
editor_tools_smileys[11] = ':)';
editor_tools_smileys_r[11] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie1.gif';
editor_tools_smileys_a[11] = 'smiling smiley';
editor_tools_subjectsmileys[11] = ':)';
editor_tools_subjectsmileys_r[11] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie1.gif';
editor_tools_subjectsmileys_a[11] = 'smiling smiley';
editor_tools_smileys[12] = ':?';
editor_tools_smileys_r[12] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley17.gif';
editor_tools_smileys_a[12] = 'moody smiley';
editor_tools_subjectsmileys[12] = ':?';
editor_tools_subjectsmileys_r[12] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smiley17.gif';
editor_tools_subjectsmileys_a[12] = 'moody smiley';
editor_tools_smileys[13] = ':D';
editor_tools_smileys_r[13] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie5.gif';
editor_tools_smileys_a[13] = 'grinning smiley';
editor_tools_subjectsmileys[13] = ':D';
editor_tools_subjectsmileys_r[13] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie5.gif';
editor_tools_subjectsmileys_a[13] = 'grinning smiley';
editor_tools_smileys[14] = ':P';
editor_tools_smileys_r[14] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie6.gif';
editor_tools_smileys_a[14] = 'tongue sticking out smiley';
editor_tools_subjectsmileys[14] = ':P';
editor_tools_subjectsmileys_r[14] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie6.gif';
editor_tools_subjectsmileys_a[14] = 'tongue sticking out smiley';
editor_tools_smileys[15] = ':S';
editor_tools_smileys_r[15] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie11.gif';
editor_tools_smileys_a[15] = 'confused smiley';
editor_tools_subjectsmileys[15] = ':S';
editor_tools_subjectsmileys_r[15] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie11.gif';
editor_tools_subjectsmileys_a[15] = 'confused smiley';
editor_tools_smileys[16] = ':X';
editor_tools_smileys_r[16] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie9.gif';
editor_tools_smileys_a[16] = 'angry smiley';
editor_tools_subjectsmileys[16] = ':X';
editor_tools_subjectsmileys_r[16] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie9.gif';
editor_tools_subjectsmileys_a[16] = 'angry smiley';
editor_tools_smileys[17] = ':o';
editor_tools_smileys_r[17] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie4.gif';
editor_tools_smileys_a[17] = 'yawning smiley';
editor_tools_subjectsmileys[17] = ':o';
editor_tools_subjectsmileys_r[17] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie4.gif';
editor_tools_subjectsmileys_a[17] = 'yawning smiley';
editor_tools_smileys[18] = ';)';
editor_tools_smileys_r[18] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie3.gif';
editor_tools_smileys_a[18] = 'winking smiley';
editor_tools_subjectsmileys[18] = ';)';
editor_tools_subjectsmileys_r[18] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/smilie3.gif';
editor_tools_subjectsmileys_a[18] = 'winking smiley';
editor_tools_smileys[19] = 'B)';
editor_tools_smileys_r[19] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/cool.gif';
editor_tools_smileys_a[19] = 'cool smiley';
editor_tools_subjectsmileys[19] = 'B)';
editor_tools_subjectsmileys_r[19] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/cool.gif';
editor_tools_subjectsmileys_a[19] = 'cool smiley';
editor_tools_smileys[20] = 'X(';
editor_tools_smileys_r[20] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/hot.gif';
editor_tools_smileys_a[20] = 'hot smiley';
editor_tools_subjectsmileys[20] = 'X(';
editor_tools_subjectsmileys_r[20] = 'http://www.celestialdarkness.com/forum/./mods/smileys/images/hot.gif';
editor_tools_subjectsmileys_a[20] = 'hot smiley';
// ----------------------------------------------------------------------
// Tool: smiley
// ----------------------------------------------------------------------
function editor_tools_handle_smiley()
{
// Create the smiley picker on first access.
if (!editor_tools_smiley_picker_obj)
{
// Create a new popup.
var popup = editor_tools_construct_popup('editor-tools-smiley-picker','l');
editor_tools_smiley_picker_obj = popup[0];
var content_obj = popup[1];
editor_tools_smiley_picker_obj.style.width = editor_tools_smileys_popupwidth;
// Populate the new popup.
for (var i = 0; i < editor_tools_smileys.length; i++)
{
var s = editor_tools_smileys[i];
var r = editor_tools_smileys_r[i];
var a = editor_tools_smileys_a[i];
var a_obj = document.createElement('a');
a_obj.href = 'javascript:editor_tools_handle_smiley_select("'+s+'")';
var img_obj = document.createElement('img');
img_obj.src = r;
img_obj.title = a;
img_obj.alt = a;
a_obj.appendChild(img_obj);
content_obj.appendChild(a_obj);
}
// Register the popup with the editor tools.
editor_tools_register_popup_object(editor_tools_smiley_picker_obj);
}
// Display the popup.
var button_obj = document.getElementById('editor-tools-img-smiley');
editor_tools_toggle_popup(
editor_tools_smiley_picker_obj,
button_obj,
editor_tools_smileys_popupwidth,
editor_tools_smileys_popupoffset
);
}
// Called by the smiley picker.
function editor_tools_handle_smiley_select(smiley)
{
smiley = editor_tools_strip_whitespace(smiley);
editor_tools_add_tags(smiley, '');
editor_tools_focus_textarea();
}
function editor_tools_handle_subjectsmiley()
{
// Create the smiley picker on first access.
if (!editor_tools_subjectsmiley_picker_obj)
{
// Create a new popup.
var popup = editor_tools_construct_popup('editor-tools-subjectsmiley-picker','l');
editor_tools_subjectsmiley_picker_obj = popup[0];
var content_obj = popup[1];
// Populate the new popup.
for (var i = 0; i < editor_tools_subjectsmileys.length; i++)
{
var s = editor_tools_subjectsmileys[i];
var r = editor_tools_subjectsmileys_r[i];
var a = editor_tools_subjectsmileys_a[i];
var a_obj = document.createElement('a');
a_obj.href = 'javascript:editor_tools_handle_subjectsmiley_select("'+s+'")';
var img_obj = document.createElement('img');
img_obj.src = r;
img_obj.alt = a;
img_obj.title = a;
a_obj.appendChild(img_obj);
content_obj.appendChild(a_obj);
}
// Register the popup with the editor tools.
editor_tools_register_popup_object(editor_tools_subjectsmiley_picker_obj);
}
// Display the popup.
var button_obj = document.getElementById('editor-tools-img-subjectsmiley');
editor_tools_toggle_popup(
editor_tools_subjectsmiley_picker_obj,
button_obj,
editor_tools_subjectsmileys_popupwidth,
editor_tools_subjectsmileys_popupoffset
);
}
// Called by the subject smiley picker.
function editor_tools_handle_subjectsmiley_select(smiley)
{
smiley = editor_tools_strip_whitespace(smiley);
editor_tools_add_tags(smiley, '', editor_tools_subject_obj);
editor_tools_focus_subjectfield();
}
// ----------------------------------------------------------------------
// Tool: subject smiley
// ----------------------------------------------------------------------
function editor_tools_handle_subjectsmiley()
{
// Create the smiley picker on first access.
if (!editor_tools_subjectsmiley_picker_obj)
{
// Create a new popup.
var popup = editor_tools_construct_popup('editor-tools-subjectsmiley-picker','l');
editor_tools_subjectsmiley_picker_obj = popup[0];
var content_obj = popup[1];
// Populate the new popup.
for (var i = 0; i < editor_tools_subjectsmileys.length; i++)
{
var s = editor_tools_subjectsmileys[i];
var r = editor_tools_subjectsmileys_r[i];
var a = editor_tools_subjectsmileys_a[i];
var a_obj = document.createElement('a');
a_obj.href = 'javascript:editor_tools_handle_subjectsmiley_select("'+s+'")';
var img_obj = document.createElement('img');
img_obj.src = r;
img_obj.alt = a;
img_obj.title = a;
a_obj.appendChild(img_obj);
content_obj.appendChild(a_obj);
}
// Register the popup with the editor tools.
editor_tools_register_popup_object(editor_tools_subjectsmiley_picker_obj);
}
// Display the popup.
var button_obj = document.getElementById('editor-tools-img-subjectsmiley');
editor_tools_toggle_popup(
editor_tools_subjectsmiley_picker_obj,
button_obj,
editor_tools_subjectsmileys_popupwidth,
editor_tools_subjectsmileys_popupoffset
);
}
// Called by the subject smiley picker.
function editor_tools_handle_subjectsmiley_select(smiley)
{
smiley = editor_tools_strip_whitespace(smiley);
editor_tools_add_tags(smiley, '', editor_tools_subject_obj);
editor_tools_focus_subjectfield();
}
/* Added by module "embed_images", file "mods/embed_images/embed_images.js" */
function mod_embed_images_loadimage(viewer_id, thumbnail_url, fullimage_url, ajax_url, target_url, message_id, max_w, max_h, loading_txt, rescheduled)
{
var container = document.getElementById('imagediv_'+viewer_id);
if (!container) return;
// If the image for the viewer id is already on the page, then we are
// handling a cached thumbnail for which no Ajax magic is required,
// but which is already loaded in the page. We'll only use this function
// for setting up a full size image viewer.
var image = document.getElementById('image_'+viewer_id);
if (image)
{
// If a function was loaded for a viewer to initialize the
// viewer, then hand over the image data to that function.
// Don't do this in case we have a target_url.
if (window.mod_embed_images_initviewer && !target_url) {
var link = document.getElementById('link_'+viewer_id);
mod_embed_images_initviewer(
container, image, link, fullimage_url, message_id
);
}
return;
}
if (!rescheduled)
{
// We use a bit of a strange hack here, by checking for readyState.
// This is not availble in all browsers. That's no problem though.
// We mainly want MSIE to check it and to let it postpone image
// loading till after the page is fully loaded. When doing things
// earlier in MSIE from script code that is not a direct descendant
// of<body>, we might get "operation aborted" errors.
if (document.readyState &&
document.readyState != 'loaded' &&
document.readyState != 'complete' &&
window.attachEvent &&
!window.opera) {
window.attachEvent('onload', function() {
mod_embed_images_loadimage(
viewer_id, thumbnail_url, fullimage_url,
ajax_url, target_url, message_id,
max_w, max_h, loading_txt, true
);
});
return;
}
// Display a "Loading ..." message to the user.
container.innerHTML =
'<div class="mod_embed_images_loading">' +
loading_txt +
'<\/div>';
}
// Create the XMLHttpRequest object that we can use to send an
// Ajax request to the server.
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
var versions = [
"MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
"MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
"Microsoft.XMLHttp"
];
for (var i=0; i < versions.length; i++)
try { xhr = new ActiveXObject(versions[i]); } catch (e) { }
}
// No XMLHttpRequest object found? Fallback to a simpler way of
// displaying the thumbnail image. This way we won't have
// loading or error feedback and full size viewer support,
// but at least we do show the image. This should't happen for
// modern browsers.
if (!xhr)
{
target.innerHTML =
(target_url ? '<a href="'+target_url+'">' : '') +
'<img id="image_'+viewer_id+'" src="'+thumbnail_url+'"/>' +
(target_url ? '<\/a>' : '');
return;
}
// Setup the XMLHttpRequest object for the request.
xhr.open("get", ajax_url, true);
xhr.setRequestHeader("Content-Type", "text/plain");
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
var res = xhr.responseText;
// An "OK <w>x<h> <scw>x<sch>" message was returned.
if (res.substr(0,2) == 'OK')
{
// Parse the respones message.
// I know... a bit old school parsing.
var dim = res.substr(3);
var xpos = dim.indexOf('x');
var spos = dim.indexOf(' ');
var origw = dim.substr(0,xpos);
var origh = dim.substr(xpos+1, spos-xpos-1);
dim = dim.substr(spos+1);
xpos = dim.indexOf('x');
var w = dim.substr(0,xpos);
var h = dim.substr(xpos+1);
var origsize = origw+"x"+origh;
var scalesize = w+"x"+h;
var is_scaled = (origsize != scalesize);
// Opera does not seem to load images that are not visible :(
// So for those, we never get an onload event. Therefore,
// we make the image 0x0 pixels and resize it to the real
// size after loading.
var html =
(target_url ? '<a href="'+target_url+'">' : '') +
'<img style="width:0px;height:0px" ' +
'id="image_'+viewer_id+'" ' +
'onload="' +
'mod_embed_images_image_loaded(this,'+w+','+h+')" ' +
'src="'+thumbnail_url+'"/>' +
(target_url ? '<\/a>' : '');
container.innerHTML += html;
// Go to extended viewer mode if the image was scaled down
// or if a target URL was provided.
if (is_scaled || target_url)
{
var info = document.getElementById('info_'+viewer_id);
if (info) info.style.display = 'block';
var div = document.getElementById('div_'+viewer_id);
if (div) div.className = 'mod_embed_images_extended';
}
// If a function was loaded for a viewer to initialize the
// viewer, then hand over the image data to that function.
if (window.mod_embed_images_initviewer) {
var image = document.getElementById('image_'+viewer_id);
var link = document.getElementById('link_'+viewer_id);
mod_embed_images_initviewer(
container, image, link, fullimage_url, message_id
);
}
}
// Some error message was returned. Show the error to the user.
else container.innerHTML =
'<div class="mod_embed_images_error">' +
'<strong>Image error<\/strong><br\/>' +
res + '<br/>' +
'<a href="' + fullimage_url + '">open image URL<\/a>' +
'<\/div>';
}
}
// Send the request to the server.
xhr.send('');
}
function mod_embed_images_image_loaded(image, w, h)
{
image.style.width = w+'px';
image.style.height = h+'px';
var container = image.parentNode;
while (container.className != 'mod_embed_images_image') {
container = container.parentNode;
if (!container) return; // Should not happen.
}
container.style.width = image.width + 'px';
container.parentNode.style.width = parseInt(image.width) + 'px';
container.style.height = image.height + 'px';
for (var i = 0; i < container.childNodes.length; i++) {
if (container.childNodes[i].className == 'mod_embed_images_loading') {
container.childNodes[i].style.display = 'none';
}
}
}
/* Added by module "embed_images/viewer:dynadrive", file "mods/embed_images/viewers/dynadrive/code/thumbnailviewer.js" */
// -------------------------------------------------------------------
// Image Thumbnail Viewer Script- By Dynamic Drive, available at: http://www.dynamicdrive.com
// Last updated: Jan 22nd, 2007
// -------------------------------------------------------------------
var thumbnailviewer={
enableTitle: true, //Should "title" attribute of link be used as description?
enableAnimation: true, //Enable fading animation?
definefooter: '<div class="footerbar">CLOSE X<\/div>', //Define HTML for footer interface
defineLoading: '<img src="loading.gif" \/> Loading Image...', //Define HTML for "loading" div
/////////////No need to edit beyond here/////////////////////////
scrollbarwidth: 16,
opacitystring: 'filter:progid:DXImageTransform.Microsoft.alpha(opacity=10); -moz-opacity: 0.1; opacity: 0.1',
targetlinks:[], //Array to hold links with rel="thumbnail"
createthumbBox:function(){
//write out HTML for Image Thumbnail Viewer plus loading div
document.write('<div id="thumbBox" onClick="thumbnailviewer.closeit()"><div id="thumbImage"><\/div>'+this.definefooter+'<\/div>')
document.write('<div id="thumbLoading">'+this.defineLoading+'<\/div>')
this.thumbBox=document.getElementById("thumbBox")
this.thumbImage=document.getElementById("thumbImage") //Reference div that holds the shown image
this.thumbLoading=document.getElementById("thumbLoading") //Reference "loading" div that will be shown while image is fetched
this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body //create reference to common "body" across doctypes
},
centerDiv:function(divobj){ //Centers a div element on the page
var ie=document.all && !window.opera
var dom=document.getElementById
var scroll_top=(ie)? this.standardbody.scrollTop : window.pageYOffset
var scroll_left=(ie)? this.standardbody.scrollLeft : window.pageXOffset
var docwidth=(ie)? this.standardbody.clientWidth : window.innerWidth-this.scrollbarwidth
var docheight=(ie)? this.standardbody.clientHeight: window.innerHeight
var docheightcomplete=(this.standardbody.offsetHeight>this.standardbody.scrollHeight)? this.standardbody.offsetHeight : this.standardbody.scrollHeight //Full scroll height of document
var objwidth=divobj.offsetWidth //width of div element
var objheight=divobj.offsetHeight //height of div element
var topposition=(docheight>objheight)? scroll_top+docheight/2-objheight/2+"px" : scroll_top+10+"px" //Vertical position of div element: Either centered, or if element height larger than viewpoint height, 10px from top of viewpoint
// Phorum fixed:
//Center div element horizontally
if (objwidth > docwidth) {
divobj.style.left=0;
} else {
divobj.style.left=docwidth/2-objwidth/2+"px";
}
divobj.style.top=Math.floor(parseInt(topposition))+"px"
divobj.style.visibility="visible"
},
showthumbBox:function(){ //Show ThumbBox div
this.centerDiv(this.thumbBox)
if (this.enableAnimation){ //If fading animation enabled
this.currentopacity=0.1 //Starting opacity value
this.opacitytimer=setInterval("thumbnailviewer.opacityanimation()", 20)
}
},
loadimage:function(link){ //Load image function that gets attached to each link on the page with rel="thumbnail"
if (this.thumbBox.style.visibility=="visible") //if thumbox is visible on the page already
this.closeit() //Hide it first (not doing so causes triggers some positioning bug in Firefox
var imageHTML='<img src="'+link.getAttribute("href")+'" style="'+this.opacitystring+'" />' //Construct HTML for shown image
if (this.enableTitle && link.getAttribute("title")) //Use title attr of the link as description?
imageHTML+='<br />'+link.getAttribute("title")
this.centerDiv(this.thumbLoading) //Center and display "loading" div while we set up the image to be shown
this.thumbImage.innerHTML=imageHTML //Populate thumbImage div with shown image's HTML (while still hidden)
this.featureImage=this.thumbImage.getElementsByTagName("img")[0] //Reference shown image itself
this.featureImage.onload=function(){ //When target image has completely loaded
thumbnailviewer.thumbLoading.style.visibility="hidden" //Hide "loading" div
thumbnailviewer.showthumbBox() //Display "thumbbox" div to the world!
}
if (document.all && !window.createPopup) //Target IE5.0 browsers only. Address IE image cache not firing onload bug: panoramio.com/blog/onload-event/
this.featureImage.src=link.getAttribute("href")
this.featureImage.onerror=function(){ //If an error has occurred while loading the image to show
thumbnailviewer.thumbLoading.style.visibility="hidden" //Hide "loading" div, game over
}
},
setimgopacity:function(value){ //Sets the opacity of "thumbimage" div per the passed in value setting (0 to 1 and in between)
var targetobject=this.featureImage
if (targetobject.filters && targetobject.filters[0]){ //IE syntax
if (typeof targetobject.filters[0].opacity=="number") //IE6
targetobject.filters[0].opacity=value*100
else //IE 5.5
targetobject.style.filter="alpha(opacity="+value*100+")"
}
else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
targetobject.style.MozOpacity=value
else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
targetobject.style.opacity=value
else //Non of the above, stop opacity animation
this.stopanimation()
},
opacityanimation:function(){ //Gradually increase opacity function
this.setimgopacity(this.currentopacity)
this.currentopacity+=0.1
if (this.currentopacity>1)
this.stopanimation()
},
stopanimation:function(){
if (typeof this.opacitytimer!="undefined")
clearInterval(this.opacitytimer)
},
closeit:function(){ //Close "thumbbox" div function
this.stopanimation()
this.thumbBox.style.visibility="hidden"
this.thumbImage.innerHTML=""
this.thumbBox.style.left="-2000px"
this.thumbBox.style.top="-2000px"
},
cleanup:function(){ //Clean up routine on page unload
this.thumbLoading=null
if (this.featureImage) this.featureImage.onload=null
this.featureImage=null
this.thumbImage=null
for (var i=0; i<this.targetlinks.length; i++)
this.targetlinks[i].onclick=null
this.thumbBox=null
},
dotask:function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
if (target.addEventListener)
target.addEventListener(tasktype, functionref, false)
else if (target.attachEvent)
target.attachEvent(tasktype, functionref)
},
init:function(){ //Initialize thumbnail viewer script by scanning page and attaching appropriate function to links with rel="thumbnail"
if (!this.enableAnimation)
this.opacitystring=""
var pagelinks=document.getElementsByTagName("a")
for (var i=0; i<pagelinks.length; i++){ //BEGIN FOR LOOP
if (pagelinks[i].getAttribute("rel") && pagelinks[i].getAttribute("rel")=="thumbnail"){ //Begin if statement
pagelinks[i].onclick=function(){
thumbnailviewer.stopanimation() //Stop any currently running fade animation on "thumbbox" div before proceeding
thumbnailviewer.loadimage(this) //Load image
return false
}
this.targetlinks[this.targetlinks.length]=pagelinks[i] //store reference to target link
} //end if statement
} //END FOR LOOP
//Reposition "thumbbox" div when page is resized
this.dotask(window, function(){if (thumbnailviewer.thumbBox.style.visibility=="visible") thumbnailviewer.centerDiv(thumbnailviewer.thumbBox)}, "resize")
} //END init() function
}
//thumbnailviewer.createthumbBox() //Output HTML for the image thumbnail viewer
thumbnailviewer.dotask(window, function(){thumbnailviewer.init()}, "load") //Initialize script on page load
thumbnailviewer.dotask(window, function(){thumbnailviewer.cleanup()}, "unload")
/* Added by module "embed_images/viewer:dynadrive", file "mods/embed_images/viewers/dynadrive/viewer.js" */
// We do not use the thumbnailviewer init code for setting up the thumbnails.
// Instead, we setup the required events and data ourselves for each image,
// right after it is loaded. This is useful in case we dynamically add images
// to the page (e.g. through spoilers) and for making the image viewer act
// on image clicks as soon as possible.
function mod_embed_images_initviewer(container, image, link, url, message_id)
{
var a = document.createElement('a');
a.href = url;
container.appendChild(a);
a.appendChild(image);
a.rel = 'thumbnail';
a.onclick = function() {
thumbnailviewer.stopanimation()
thumbnailviewer.loadimage(this)
return false;
}
thumbnailviewer.targetlinks[thumbnailviewer.targetlinks.length] = a;
if (link) {
link.onclick = function() {
thumbnailviewer.stopanimation()
thumbnailviewer.loadimage(this)
return false;
}
thumbnailviewer.targetlinks[thumbnailviewer.targetlinks.length] = link;
}
}
/* Added by module "jumpmenu", file "mods/jumpmenu/jumpmenu.js" */
var PhorumJumpMenu =
{
'active' : {},
'visible' : {},
'menuspacing' : -1,
'timer' : null,
'init': function()
{
// Make sure that events will not fire at unload time, because that
// generates JavaScript warnings in Firefox about PhorumJumpMenu
// that does not exist anymore at that time.
var oldunload = window.onunload;
window.onunload = function()
{
if (oldunload) oldunload();
var root = document.getElementById('mod_jumpmenu_root');
if (root) {
root.onmouseover = null;
root.onmouseout = null;
}
var ahrefs = document.getElementsByTagName('a');
for (var i=0; i<ahrefs.length; i++)
{
if (!ahrefs[i].rel) continue;
var obj = ahrefs[i];
if (obj.rel.indexOf('mod_jumpmenu_') == 0) {
obj.onmouseover = null;
obj.onmouseout = null;
}
}
}
// Events for the root jumpmenu item.
var r = document.getElementById('mod_jumpmenu_root');
if (!r) return;
r.onmouseover = function() {
PhorumJumpMenu.stopCloseTimer();
PhorumJumpMenu.openSubMenu(null);
};
r.onmouseout = function() {
PhorumJumpMenu.startCloseTimer();
};
// Events for the folders and forums.
var ahrefs = document.getElementsByTagName('a');
for (var i=0; i<ahrefs.length; i++)
{
if (!ahrefs[i].rel) continue;
var obj = ahrefs[i];
if (obj.rel == 'mod_jumpmenu_forum')
{
obj.onmouseover = function() {
PhorumJumpMenu.stopCloseTimer();
PhorumJumpMenu.openSubMenu(this);
};
obj.onmouseout = function() {
PhorumJumpMenu.startCloseTimer();
};
}
else if (obj.rel.substring(0,19) == 'mod_jumpmenu_folder')
{
var info = obj.rel.substring(20, obj.rel.length-1).split(',');
obj.menu_id = info[0];
obj.parent_id = info[1];
obj.onmouseover = function() {
PhorumJumpMenu.stopCloseTimer();
PhorumJumpMenu.openSubMenu(this);
};
obj.onmouseout = function() {
PhorumJumpMenu.startCloseTimer();
};
}
}
},
'hideAll': function()
{
for (var depth in PhorumJumpMenu.visible) {
for (var idx in PhorumJumpMenu.visible[depth]) {
var o = PhorumJumpMenu.visible[depth][idx];
o.style.display = 'none';
if (o.work_around_iframe) {
o.work_around_iframe.style.display = 'none';
}
}
}
PhorumJumpMenu.active = {};
PhorumJumpMenu.visible = {};
},
'startCloseTimer': function()
{
if (PhorumJumpMenu.timer != null) {
clearTimeout(PhorumJumpMenu.timer);
}
PhorumJumpMenu.timer = setTimeout(function() {
PhorumJumpMenu.timer = null;
PhorumJumpMenu.hideAll();
}, 500);
},
'stopCloseTimer': function()
{
if (PhorumJumpMenu.timer != null) {
clearTimeout(PhorumJumpMenu.timer);
PhorumJumpMenu.timer = null;
}
},
// Thanks to www.quirksmode.org for info on viewport properties:
// http://www.quirksmode.org/viewport/compatibility.html
'getScreenInfo': function()
{
var width, height;
// All, except Explorer.
if (self.innerHeight) {
width = self.innerWidth;
height = self.innerHeight;
}
// Explorer 6 Strict Mode.
else if (document.documentElement &&
document.documentElement.clientHeight) {
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
}
// Other Explorers.
else if (document.body) {
width = document.body.clientWidth;
height = document.body.clientHeight;
}
// -16 for scrollbar that is counted in in some browsers.
width -= 16;
height -= 16;
var scroll_x, scroll_y;
// All, except Explorer.
if (self.pageYOffset) {
scroll_x = self.pageXOffset;
scroll_y = self.pageYOffset;
}
// Explorer 6 Strict.
else if (document.documentElement && document.documentElement.scrollTop) {
scroll_x = document.documentElement.scrollLeft;
scroll_y = document.documentElement.scrollTop;
}
// All other Explorers.
else if (document.body) {
scroll_x = document.body.scrollLeft;
scroll_y = document.body.scrollTop;
}
return {
'width' : width,
'height' : height,
'scroll_x' : scroll_x,
'scroll_y' : scroll_y,
'visible_x' : width + scroll_x,
'visible_y' : height + scroll_y
};
},
'getStyle': function(obj, element)
{
if (obj.currentStyle) {
return obj.currentStyle[element];
} else if (window.getComputedStyle) {
var s = document.defaultView.getComputedStyle(obj, null);
return s.getPropertyValue(element);
} else {
return null;
}
},
'getScreenPos': function(obj)
{
var top = left = 0;
var rel_top = rel_left = null;
do {
top += obj.offsetTop;
left += obj.offsetLeft;
if (obj && rel_top == null) {
var pos = PhorumJumpMenu.getStyle(obj, 'position');
if (pos == 'relative' || pos == 'absolute') {
rel_top = top;
rel_left = left;
}
}
obj = obj.offsetParent;
} while (obj);
if (rel_left == null) {
rel_left = left;
rel_top = top;
}
return {
'top' : top,
'left' : left,
'rel_left' : rel_left,
'rel_top' : rel_top
};
},
'openSubMenu': function(menu)
{
// If the menu is a menu item, then find its parent menu.
// This way, deeper submenus that are possible opened
// will be collapsed.
if (menu && menu.className.indexOf('mod_jumpmenu_forum') !== -1) {
var n = menu.parentNode.id;
if (n.indexOf('mod_jumpmenu_menu_content_') == 0) {
var menu_id = n.substr(26);
if (menu_id == 0) {
menu = null;
} else {
var pid = 'mod_jumpmenu_item_' + menu_id;
var p = document.getElementById(pid);
if (p) menu = p;
}
}
}
// Find the parent menu, parent item and child menu.
var menu_id = menu == null ? 0 : menu.menu_id;
var parent_id = menu == null ? null : menu.parent_id;
var p_menu = menu_id == 0
? null
: document.getElementById('mod_jumpmenu_menu_' + parent_id);
var p_item = menu_id == 0
? document.getElementById('mod_jumpmenu_root')
: document.getElementById('mod_jumpmenu_item_' + menu_id);
var c_menu = document.getElementById('mod_jumpmenu_menu_' + menu_id);
// If we did not find the required objects, then silently ignore
// the problem and stop processing.
if (!p_item || !c_menu) return;
if (menu_id != 0 && !p_menu) return;
// Do some dimension handling and storage the first time that the
// menu is opened.
if (!c_menu.jumpmenu_init_done)
{
// Without making the menu visible, we don't know the width/height
// of the menu div, because those are only available after rendering
// the menu HTML code. So for positioning the menu, we have a
// chicken/egg problem to fix. I fix it by moving the egg out of
// the visible screen area before making it visible.
c_menu.style.top = '-500px';
c_menu.style.left = '-500px';
c_menu.style.display = 'block';
// This should put the menus on top at most pages.
c_menu.style.zIndex = 1000;
// force the widths for the <a href="...">tags. this is needed to
// make the links hoverable and clickable over the full menu width
// in msie6 :(
// the "var w" is used to prevent variable tag widths due to
// accidental resizing of the menu while setting the tag widths
// (i've seen that happening in opera).
var ahrefs = c_menu.getElementsByTagName('a');
var w = null;
for (var i=0; i<ahrefs.length; i++) {
var a = ahrefs[i];
if (!w) w = a.offsetWidth;
a.style.width = w;
}
// store the displaying dimensions in the div object.
c_menu.jumpmenu_width = c_menu.offsetWidth;
c_menu.jumpmenu_height = c_menu.offsetHeight;
// In MSIE, we have to fix the problem that windowed controls
// like<select>will always be on top of<div>s. We can use
// some special behavior of<iframe>for this. It's ugly but
// the only way to make this work cleanly.
// We do a check for MSIE here. It's no problem if other browsers
// use a modified userAgent for some reason, triggering this code.
// I only want to make sure that it is at least used in MSIE.
if (navigator.userAgent && navigator.userAgent.indexOf('MSIE')>=0)
{
var i = document.createElement('iframe');
i.scrolling = 'no';
i.frameborder = '0';
i.src = 'javascript:false';
i.style.border = 'none';
i.style.display = 'block';
i.style.left = '0px';
i.style.top = '0px';
i.style.width = c_menu.jumpmenu_width + 'px';
i.style.height = c_menu.jumpmenu_height + 'px';
i.style.position = 'absolute';
i.style.zIndex = c_menu.style.zIndex - 1;
c_menu.parentNode.appendChild(i);
c_menu.work_around_iframe = i;
}
c_menu.jumpmenu_init_done = 1;
c_menu.style.display = 'none';
}
// keep track of the menu depth and menu drawing direction.
// first level menu.
if (menu_id == 0)
{
c_menu.depth = 1;
// at the first level, we look at the main menu item. if that one
// uses rel="mod_jumpmenu_left", then the direction of the whole
// menu structure will be left. by default, this direction is right.
c_menu.direction = 'right';
if (p_item.rel && p_item.rel == 'mod_jumpmenu_left') {
c_menu.direction = 'left';
}
}
// second level and deeper.
else
{
c_menu.depth = p_menu.depth + 1;
// inherit the parent's menu direction.
c_menu.direction = p_menu.direction;
}
// determine the screen dimensions.
var scr = PhorumJumpMenu.getScreenInfo();
// determine the top-left of the parent menu item.
var p_item_pos = PhorumJumpMenu.getScreenPos(p_item);
var top = p_item_pos.rel_top;
var left = p_item_pos.rel_left;
// determine the location of the child menu.
// the first level menu is placed directly beneath the main menu object.
if (menu_id == 0)
{
top = top + p_item.offsetHeight;
if (c_menu.direction == 'left')
{
left = left - (c_menu.jumpmenu_width - p_item.offsetWidth);
if (left < scr.scroll_x) left = scr.scroll_x + 2;
}
else
{
left = left;
if ((left + c_menu.jumpmenu_width) > scr.width) {
left = scr.width - c_menu.jumpmenu_width - 2;
}
}
}
// second level and deeper levels are handled as standard menu popups
// (placed to the right or left of the selected item).
else
{
var dir = c_menu.direction;
var left_pos =
left // the left side of the parent menu item
- PhorumJumpMenu.menuspacing // handle menu spacing
- p_item.parentNode.offsetLeft // adjustment for padding;
- c_menu.jumpmenu_width; // add child menu width;
var right_pos =
left // the left side of the parent menu item
+ PhorumJumpMenu.menuspacing // handle menu spacing
- p_item.parentNode.offsetLeft // adjustment for padding;
+ p_menu.offsetWidth; // add parent menu width
if (dir == 'left') {
if (left_pos < scr.scroll_x) {
dir = 'right';
} else {
left = left_pos;
}
}
if (dir == 'right') {
if ((right_pos + c_menu.jumpmenu_width) > scr.visible_x) {
left = left_pos;
} else {
left = right_pos;
}
}
}
// take extra vertical space into account for adjusting for
// padding of the menu div.
if (menu_id) {
top -= p_item.parentNode.offsetTop;
}
// move the menu up if needed.
if ((top + c_menu.jumpmenu_height) > scr.visible_y) {
top = scr.visible_y - c_menu.jumpmenu_height - 2;
if (top < scr.scroll_y) top = scr.scroll_y + 2;
}
// move the menu into position and make it visible.
c_menu.style.top = top + 'px';
c_menu.style.left = left + 'px';
c_menu.style.display = 'block';
// If we have an iframe for working around an MSIE problem, then
// place that one as well. This one needs different placement in
// case the menu is running within some absolute or relative div.
if (c_menu.work_around_iframe) {
i = c_menu.work_around_iframe;
i.style.top = top + 'px';
i.style.left = left + 'px';
i.style.display = 'block';
}
// keep track of the active menu for the current menu level.
PhorumJumpMenu.active[c_menu.depth] = c_menu;
// cleanup the menus that should not be visible anymore.
for (var depth in PhorumJumpMenu.visible) {
for (var idx in PhorumJumpMenu.visible[depth]) {
var o = PhorumJumpMenu.visible[depth][idx];
if (depth > c_menu.depth ||
o.id != PhorumJumpMenu.active[depth].id) {
o.style.display = 'none';
if (o.work_around_iframe) {
o.work_around_iframe.style.display = 'none';
}
}
}
}
// keep track of visible menus.
PhorumJumpMenu.visible[c_menu.depth] = {};
PhorumJumpMenu.visible[c_menu.depth][c_menu.id] = c_menu;
}
};
/* Added by module "wowitemstats", file "mods/wowitemstats/overlib/overlib.js" */
var olLoaded=0,pmStart=10000000,pmUpper=10001000,pmCount=pmStart+1,pmt='',pms=new Array(),olInfo=new Info('4.21',1),FREPLACE=0,FBEFORE=1,FAFTER=2,FALTERNATE=3,FCHAIN=4,olHideForm=0,olHautoFlag=0,olVautoFlag=0,hookPts=new Array(),postParse=new Array(),cmdLine=new Array(),runTime=new Array();
registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
if(typeof ol_fgcolor=='undefined')var ol_fgcolor="#CCCCFF";if(typeof ol_bgcolor=='undefined')var ol_bgcolor="#333399";if(typeof ol_textcolor=='undefined')var ol_textcolor="#000000";if(typeof ol_capcolor=='undefined')var ol_capcolor="#FFFFFF";if(typeof ol_closecolor=='undefined')var ol_closecolor="#9999FF";if(typeof ol_textfont=='undefined')var ol_textfont="Verdana,Arial,Helvetica";if(typeof ol_captionfont=='undefined')var ol_captionfont="Verdana,Arial,Helvetica";if(typeof ol_closefont=='undefined')var ol_closefont="Verdana,Arial,Helvetica";if(typeof ol_textsize=='undefined')var ol_textsize="1";if(typeof ol_captionsize=='undefined')var ol_captionsize="1";if(typeof ol_closesize=='undefined')var ol_closesize="1";if(typeof ol_width=='undefined')var ol_width="200";if(typeof ol_border=='undefined')var ol_border="1";if(typeof ol_cellpad=='undefined')var ol_cellpad=2;if(typeof ol_offsetx=='undefined')var ol_offsetx=10;if(typeof ol_offsety=='undefined')var ol_offsety=10;if(typeof ol_text=='undefined')var ol_text="Default Text";if(typeof ol_cap=='undefined')var ol_cap="";if(typeof ol_sticky=='undefined')var ol_sticky=0;if(typeof ol_background=='undefined')var ol_background="";if(typeof ol_close=='undefined')var ol_close="Close";if(typeof ol_hpos=='undefined')var ol_hpos=RIGHT;if(typeof ol_status=='undefined')var ol_status="";if(typeof ol_autostatus=='undefined')var ol_autostatus=0;if(typeof ol_height=='undefined')var ol_height=-1;if(typeof ol_snapx=='undefined')var ol_snapx=0;if(typeof ol_snapy=='undefined')var ol_snapy=0;if(typeof ol_fixx=='undefined')var ol_fixx=-1;if(typeof ol_fixy=='undefined')var ol_fixy=-1;if(typeof ol_relx=='undefined')var ol_relx=null;if(typeof ol_rely=='undefined')var ol_rely=null;if(typeof ol_fgbackground=='undefined')var ol_fgbackground="";if(typeof ol_bgbackground=='undefined')var ol_bgbackground="";if(typeof ol_padxl=='undefined')var ol_padxl=1;if(typeof ol_padxr=='undefined')var ol_padxr=1;if(typeof ol_padyt=='undefined')var ol_padyt=1;if(typeof ol_padyb=='undefined')var ol_padyb=1;if(typeof ol_fullhtml=='undefined')var ol_fullhtml=0;if(typeof ol_vpos=='undefined')var ol_vpos=BELOW;if(typeof ol_aboveheight=='undefined')var ol_aboveheight=0;if(typeof ol_capicon=='undefined')var ol_capicon="";if(typeof ol_frame=='undefined')var ol_frame=self;if(typeof ol_timeout=='undefined')var ol_timeout=0;if(typeof ol_function=='undefined')var ol_function=null;if(typeof ol_delay=='undefined')var ol_delay=0;if(typeof ol_hauto=='undefined')var ol_hauto=0;if(typeof ol_vauto=='undefined')var ol_vauto=0;if(typeof ol_closeclick=='undefined')var ol_closeclick=0;if(typeof ol_wrap=='undefined')var ol_wrap=0;if(typeof ol_followmouse=='undefined')var ol_followmouse=1;if(typeof ol_mouseoff=='undefined')var ol_mouseoff=0;if(typeof ol_closetitle=='undefined')var ol_closetitle='Close';if(typeof ol_compatmode=='undefined')var ol_compatmode=0;if(typeof ol_css=='undefined')var ol_css=CSSOFF;if(typeof ol_fgclass=='undefined')var ol_fgclass="";if(typeof ol_bgclass=='undefined')var ol_bgclass="";if(typeof ol_textfontclass=='undefined')var ol_textfontclass="";if(typeof ol_captionfontclass=='undefined')var ol_captionfontclass="";if(typeof ol_closefontclass=='undefined')var ol_closefontclass="";
if(typeof ol_texts=='undefined')var ol_texts=new Array("Text 0","Text 1");if(typeof ol_caps=='undefined')var ol_caps=new Array("Caption 0","Caption 1");
var o3_text="",o3_cap="",o3_sticky=0,o3_background="",o3_close="Close",o3_hpos=RIGHT,o3_offsetx=2,o3_offsety=2,o3_fgcolor="",o3_bgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",o3_width=100,o3_border=1,o3_cellpad=2,o3_status="",o3_autostatus=0,o3_height=-1,o3_snapx=0,o3_snapy=0,o3_fixx=-1,o3_fixy=-1,o3_relx=null,o3_rely=null,o3_fgbackground="",o3_bgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,o3_vpos=BELOW,o3_aboveheight=0,o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="Verdana,Arial,Helvetica",o3_closefont="Verdana,Arial,Helvetica",o3_textsize="1",o3_captionsize="1",o3_closesize="1",o3_frame=self,o3_timeout=0,o3_timerid=0,o3_allowmove=0,o3_function=null,o3_delay=0,o3_delayid=0,o3_hauto=0,o3_vauto=0,o3_closeclick=0,o3_wrap=0,o3_followmouse=1,o3_mouseoff=0,o3_closetitle='',o3_compatmode=0,o3_css=CSSOFF,o3_fgclass="",o3_bgclass="",o3_textfontclass="",o3_captionfontclass="",o3_closefontclass="";
var o3_x=0,o3_y=0,o3_showingsticky=0,o3_removecounter=0;
var over=null,fnRef,hoveringSwitch=false,olHideDelay;
var isMac=(navigator.userAgent.indexOf("Mac")!=-1),olOp=(navigator.userAgent.toLowerCase().indexOf('opera')>-1&&document.createTextNode),olNs4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4),olNs6=(document.getElementById)?true:false,olKq=(olNs6&&/konqueror/i.test(navigator.userAgent)),olIe4=(document.all)?true:false,olIe5=false,olIe55=false,docRoot='document.body';
if(olNs4){var oW=window.innerWidth;var oH=window.innerHeight;window.onresize=function(){if(oW!=window.innerWidth||oH!=window.innerHeight)location.reload();}}
if(olIe4){var agent=navigator.userAgent;if(/MSIE/.test(agent)){var versNum=parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);if(versNum>=5){olIe5=true;olIe55=(versNum>=5.5&&!olOp)?true:false;if(olNs6)olNs6=false;}}
if(olNs6)olIe4=false;}
if(document.compatMode&&document.compatMode=='CSS1Compat'){docRoot=((olIe4&&!olOp)?'document.documentElement':docRoot);}
if(window.addEventListener)window.addEventListener("load",OLonLoad_handler,false);else if(window.attachEvent)window.attachEvent("onload",OLonLoad_handler);
var capExtent;
function overlib(){if(!olLoaded||isExclusive(overlib.arguments))return true;if(olCheckMouseCapture)olMouseCapture();if(over){over=(typeof over.id!='string')?o3_frame.document.all['overDiv']:over;cClick();}
olHideDelay=0;o3_text=ol_text;o3_cap=ol_cap;o3_sticky=ol_sticky;o3_background=ol_background;o3_close=ol_close;o3_hpos=ol_hpos;o3_offsetx=ol_offsetx;o3_offsety=ol_offsety;o3_fgcolor=ol_fgcolor;o3_bgcolor=ol_bgcolor;o3_textcolor=ol_textcolor;o3_capcolor=ol_capcolor;o3_closecolor=ol_closecolor;o3_width=ol_width;o3_border=ol_border;o3_cellpad=ol_cellpad;o3_status=ol_status;o3_autostatus=ol_autostatus;o3_height=ol_height;o3_snapx=ol_snapx;o3_snapy=ol_snapy;o3_fixx=ol_fixx;o3_fixy=ol_fixy;o3_relx=ol_relx;o3_rely=ol_rely;o3_fgbackground=ol_fgbackground;o3_bgbackground=ol_bgbackground;o3_padxl=ol_padxl;o3_padxr=ol_padxr;o3_padyt=ol_padyt;o3_padyb=ol_padyb;o3_fullhtml=ol_fullhtml;o3_vpos=ol_vpos;o3_aboveheight=ol_aboveheight;o3_capicon=ol_capicon;o3_textfont=ol_textfont;o3_captionfont=ol_captionfont;o3_closefont=ol_closefont;o3_textsize=ol_textsize;o3_captionsize=ol_captionsize;o3_closesize=ol_closesize;o3_timeout=ol_timeout;o3_function=ol_function;o3_delay=ol_delay;o3_hauto=ol_hauto;o3_vauto=ol_vauto;o3_closeclick=ol_closeclick;o3_wrap=ol_wrap;o3_followmouse=ol_followmouse;o3_mouseoff=ol_mouseoff;o3_closetitle=ol_closetitle;o3_css=ol_css;o3_compatmode=ol_compatmode;o3_fgclass=ol_fgclass;o3_bgclass=ol_bgclass;o3_textfontclass=ol_textfontclass;o3_captionfontclass=ol_captionfontclass;o3_closefontclass=ol_closefontclass;
setRunTimeVariables();
fnRef='';
o3_frame=ol_frame;
if(!(over=createDivContainer()))return false;
parseTokens('o3_',overlib.arguments);if(!postParseChecks())return false;
if(o3_delay==0){return runHook("olMain",FREPLACE);}else{o3_delayid=setTimeout("runHook('olMain',FREPLACE)",o3_delay);return false;}}
function nd(time){if(olLoaded&&!isExclusive()){hideDelay(time);
if(o3_removecounter>=1){o3_showingsticky=0 };
if(o3_showingsticky==0){o3_allowmove=0;if(over!=null&&o3_timerid==0)runHook("hideObject",FREPLACE,over);}else{o3_removecounter++;}}
return true;}
function cClick(){if(olLoaded){runHook("hideObject",FREPLACE,over);o3_showingsticky=0;}
return false;}
function overlib_pagedefaults(){parseTokens('ol_',overlib_pagedefaults.arguments);}
function olMain(){var layerhtml,styleType;runHook("olMain",FBEFORE);
if(o3_background!=""||o3_fullhtml){
layerhtml=runHook('ol_content_background',FALTERNATE,o3_css,o3_text,o3_background,o3_fullhtml);}else{
styleType=(pms[o3_css-1-pmStart]=="cssoff"||pms[o3_css-1-pmStart]=="cssclass");
if(o3_fgbackground!="")o3_fgbackground="background=\""+o3_fgbackground+"\"";if(o3_bgbackground!="")o3_bgbackground=(styleType?"background=\""+o3_bgbackground+"\"":o3_bgbackground);
if(o3_fgcolor!="")o3_fgcolor=(styleType?"bgcolor=\""+o3_fgcolor+"\"":o3_fgcolor);if(o3_bgcolor!="")o3_bgcolor=(styleType?"bgcolor=\""+o3_bgcolor+"\"":o3_bgcolor);
if(o3_height>0)o3_height=(styleType?"height=\""+o3_height+"\"":o3_height);else o3_height="";
if(o3_cap==""){
layerhtml=runHook('ol_content_simple',FALTERNATE,o3_css,o3_text);}else{
if(o3_sticky){
layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,o3_close);}else{
layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,"");}}}
if(o3_sticky){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;}
o3_showingsticky=1;o3_removecounter=0;}
if(!runHook("createPopup",FREPLACE,layerhtml))return false;
if(o3_autostatus>0){o3_status=o3_text;if(o3_autostatus>1)o3_status=o3_cap;}
o3_allowmove=0;
if(o3_timeout>0){if(o3_timerid>0)clearTimeout(o3_timerid);o3_timerid=setTimeout("cClick()",o3_timeout);}
runHook("disp",FREPLACE,o3_status);runHook("olMain",FAFTER);
return(olOp&&event&&event.type=='mouseover'&&!o3_status)?'':(o3_status!='');}
function ol_content_simple(text){var cpIsMultiple=/,/.test(o3_cellpad);var txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_height)+'><tr><td><table width="100%" border="0" '+((olNs4||!cpIsMultiple)?'cellpadding="'+o3_cellpad+'" ':'')+'cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">':((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
set_background("");return txt;}
function ol_content_caption(text,title,close){var nameId,txt,cpIsMultiple=/,/.test(o3_cellpad);var closing,closeevent;
closing="";closeevent="onmouseover";if(o3_closeclick==1)closeevent=(o3_closetitle?"title='"+o3_closetitle+"'":"")+" onclick";if(o3_capicon!=""){nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';if(typeof o3_dragimg!='undefined'&&o3_dragimg)nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';o3_capicon='<img src=\"'+o3_capicon+'\"'+nameId+' />';}
if(close!="")
closing='<td '+(!o3_compatmode&&o3_closefontclass?'class="'+o3_closefontclass:'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode&&o3_closefontclass)?' class="'+o3_closefontclass+'" ':' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass?'':wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass?'':wrapStr(1,o3_closesize,'close'))+'</a></td>';txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass?' class="'+o3_captionfontclass+'">':'>')+(o3_captionfontclass?'':'<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass?'':wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" '+((olNs4||!cpIsMultiple)?'cellpadding="'+o3_cellpad+'" ':'')+'cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
set_background("");return txt;}
function ol_content_background(text,picture,hasfullhtml){if(hasfullhtml){txt=text;}else{txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass?'" class="'+o3_textfontclass:'')+'">'+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';}
set_background(picture);return txt;}
function set_background(pic){if(pic==""){if(olNs4){over.background.src=null;}else if(over.style){over.style.backgroundImage="none";}
}else{if(olNs4){over.background.src=pic;}else if(over.style){over.style.width=o3_width+'px';over.style.backgroundImage="url("+pic+")";}}}
var olShowId=-1;
function disp(statustext){runHook("disp",FBEFORE);
if(o3_allowmove==0){runHook("placeLayer",FREPLACE);(olNs6&&olShowId<0)?olShowId=setTimeout("runHook('showObject',FREPLACE,over)",1):runHook("showObject",FREPLACE,over);o3_allowmove=(o3_sticky||o3_followmouse==0)?0:1;}
runHook("disp",FAFTER);
if(statustext!="")self.status=statustext;}
function createPopup(lyrContent){runHook("createPopup",FBEFORE);
if(o3_wrap){var wd,ww,theObj=(olNs4?over:over.style);theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);layerWrite(lyrContent);wd=(olNs4?over.clip.width:over.offsetWidth);if(wd>(ww=windowWidth())){lyrContent=lyrContent.replace(/\&nbsp;/g,' ');o3_width=ww;o3_wrap=0;}}
layerWrite(lyrContent);
if(o3_wrap)o3_width=(olNs4?over.clip.width:over.offsetWidth);
runHook("createPopup",FAFTER,lyrContent);
return true;}
function placeLayer(){var placeX,placeY,widthFix=0;
if(o3_frame.innerWidth)widthFix=18;iwidth=windowWidth();
winoffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset;
placeX=runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
if(o3_frame.innerHeight){iheight=o3_frame.innerHeight;}else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')){iheight=eval('o3_frame.'+docRoot+'.clientHeight');}
scrolloffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset;placeY=runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
repositionTo(over,placeX,placeY);}
function olMouseMove(e){var e=(e)?e:event;
if(e.pageX){o3_x=e.pageX;o3_y=e.pageY;}else if(e.clientX){o3_x=eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');o3_y=eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');}
if(o3_allowmove==1)runHook("placeLayer",FREPLACE);
if(hoveringSwitch&&!olNs4&&runHook("cursorOff",FREPLACE)){(olHideDelay?hideDelay(olHideDelay):cClick());hoveringSwitch=!hoveringSwitch;}}
function no_overlib(){return ver3fix;}
function olMouseCapture(){capExtent=document;var fN,str='',l,k,f,wMv,sS,mseHandler=olMouseMove;var re=/function[ ]*(\w*)\(/;
wMv=(!olIe4&&window.onmousemove);if(document.onmousemove||wMv){if(wMv)capExtent=window;f=capExtent.onmousemove.toString();fN=f.match(re);if(fN==null){str=f+'(e);';}else if(fN[1]=='anonymous'||fN[1]=='olMouseMove'||(wMv&&fN[1]=='onmousemove')){if(!olOp&&wMv){l=f.indexOf('{')+1;k=f.lastIndexOf('}');sS=f.substring(l,k);if((l=sS.indexOf('('))!=-1){sS=sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,'');if(eval("typeof "+sS+"=='undefined'"))window.onmousemove=null;else str=sS+'(e);';}}
if(!str){olCheckMouseCapture=false;return;}
}else{if(fN[1])str=fN[1]+'(e);';else{l=f.indexOf('{')+1;k=f.lastIndexOf('}');str=f.substring(l,k)+'\n';}}
str+='olMouseMove(e);';mseHandler=new Function('e',str);}
capExtent.onmousemove=mseHandler;if(olNs4)capExtent.captureEvents(Event.MOUSEMOVE);}
function parseTokens(pf,ar){
var v,i,mode=-1,par=(pf!='ol_'),fnMark=(par&&!ar.length?1:0);
for(i=0;i<ar.length;i++){if(mode<0){
if(typeof ar[i]=='number'&&ar[i]>pmStart&&ar[i]<pmUpper){fnMark=(par?1:0);i--;}else{switch(pf){case 'ol_':
ol_text=ar[i].toString();break;default:
o3_text=ar[i].toString();}}
mode=0;}else{
if(ar[i]>=pmCount||ar[i]==DONOTHING){continue;}
if(ar[i]==INARRAY){fnMark=0;eval(pf+'text=ol_texts['+ar[++i]+'].toString()');continue;}
if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[++i]+'].toString()');continue;}
if(ar[i]==STICKY){if(pf!='ol_')eval(pf+'sticky=1');continue;}
if(ar[i]==BACKGROUND){eval(pf+'background="'+ar[++i]+'"');continue;}
if(ar[i]==NOCLOSE){if(pf!='ol_')opt_NOCLOSE();continue;}
if(ar[i]==CAPTION){eval(pf+"cap='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==CENTER||ar[i]==LEFT||ar[i]==RIGHT){eval(pf+'hpos='+ar[i]);if(pf!='ol_')olHautoFlag=1;continue;}
if(ar[i]==OFFSETX){eval(pf+'offsetx='+ar[++i]);continue;}
if(ar[i]==OFFSETY){eval(pf+'offsety='+ar[++i]);continue;}
if(ar[i]==FGCOLOR){eval(pf+'fgcolor="'+ar[++i]+'"');continue;}
if(ar[i]==BGCOLOR){eval(pf+'bgcolor="'+ar[++i]+'"');continue;}
if(ar[i]==TEXTCOLOR){eval(pf+'textcolor="'+ar[++i]+'"');continue;}
if(ar[i]==CAPCOLOR){eval(pf+'capcolor="'+ar[++i]+'"');continue;}
if(ar[i]==CLOSECOLOR){eval(pf+'closecolor="'+ar[++i]+'"');continue;}
if(ar[i]==WIDTH){eval(pf+'width='+ar[++i]);continue;}
if(ar[i]==BORDER){eval(pf+'border='+ar[++i]);continue;}
if(ar[i]==CELLPAD){i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad'));continue;}
if(ar[i]==STATUS){eval(pf+"status='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==AUTOSTATUS){eval(pf+'autostatus=('+pf+'autostatus==1)?0:1');continue;}
if(ar[i]==AUTOSTATUSCAP){eval(pf+'autostatus=('+pf+'autostatus==2)?0:2');continue;}
if(ar[i]==HEIGHT){eval(pf+'height='+pf+'aboveheight='+ar[++i]);continue;}
if(ar[i]==CLOSETEXT){eval(pf+"close='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==SNAPX){eval(pf+'snapx='+ar[++i]);continue;}
if(ar[i]==SNAPY){eval(pf+'snapy='+ar[++i]);continue;}
if(ar[i]==FIXX){eval(pf+'fixx='+ar[++i]);continue;}
if(ar[i]==FIXY){eval(pf+'fixy='+ar[++i]);continue;}
if(ar[i]==RELX){eval(pf+'relx='+ar[++i]);continue;}
if(ar[i]==RELY){eval(pf+'rely='+ar[++i]);continue;}
if(ar[i]==FGBACKGROUND){eval(pf+'fgbackground="'+ar[++i]+'"');continue;}
if(ar[i]==BGBACKGROUND){eval(pf+'bgbackground="'+ar[++i]+'"');continue;}
if(ar[i]==PADX){eval(pf+'padxl='+ar[++i]);eval(pf+'padxr='+ar[++i]);continue;}
if(ar[i]==PADY){eval(pf+'padyt='+ar[++i]);eval(pf+'padyb='+ar[++i]);continue;}
if(ar[i]==FULLHTML){if(pf!='ol_')eval(pf+'fullhtml=1');continue;}
if(ar[i]==BELOW||ar[i]==ABOVE){eval(pf+'vpos='+ar[i]);if(pf!='ol_')olVautoFlag=1;continue;}
if(ar[i]==CAPICON){eval(pf+'capicon="'+ar[++i]+'"');continue;}
if(ar[i]==TEXTFONT){eval(pf+"textfont='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==CAPTIONFONT){eval(pf+"captionfont='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==CLOSEFONT){eval(pf+"closefont='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==TEXTSIZE){eval(pf+'textsize="'+ar[++i]+'"');continue;}
if(ar[i]==CAPTIONSIZE){eval(pf+'captionsize="'+ar[++i]+'"');continue;}
if(ar[i]==CLOSESIZE){eval(pf+'closesize="'+ar[++i]+'"');continue;}
if(ar[i]==TIMEOUT){eval(pf+'timeout='+ar[++i]);continue;}
if(ar[i]==FUNCTION){if(pf=='ol_'){if(typeof ar[i+1]!='number'){v=ar[++i];ol_function=(typeof v=='function'?v:null);}}else{fnMark=0;v=null;if(typeof ar[i+1]!='number')v=ar[++i]; opt_FUNCTION(v);} continue;}
if(ar[i]==DELAY){eval(pf+'delay='+ar[++i]);continue;}
if(ar[i]==HAUTO){eval(pf+'hauto=('+pf+'hauto==0)?1:0');continue;}
if(ar[i]==VAUTO){eval(pf+'vauto=('+pf+'vauto==0)?1:0');continue;}
if(ar[i]==CLOSECLICK){eval(pf+'closeclick=('+pf+'closeclick==0)?1:0');continue;}
if(ar[i]==WRAP){eval(pf+'wrap=('+pf+'wrap==0)?1:0');continue;}
if(ar[i]==FOLLOWMOUSE){eval(pf+'followmouse=('+pf+'followmouse==1)?0:1');continue;}
if(ar[i]==MOUSEOFF){eval(pf+'mouseoff=('+pf+'mouseoff==0)?1:0');v=ar[i+1];if(pf!='ol_'&&eval(pf+'mouseoff')&&typeof v=='number'&&(v<pmStart||v>pmUpper))olHideDelay=ar[++i];continue;}
if(ar[i]==CLOSETITLE){eval(pf+"closetitle='"+escSglQuote(ar[++i])+"'");continue;}
if(ar[i]==CSSOFF||ar[i]==CSSCLASS){eval(pf+'css='+ar[i]);continue;}
if(ar[i]==COMPATMODE){eval(pf+'compatmode=('+pf+'compatmode==0)?1:0');continue;}
if(ar[i]==FGCLASS){eval(pf+'fgclass="'+ar[++i]+'"');continue;}
if(ar[i]==BGCLASS){eval(pf+'bgclass="'+ar[++i]+'"');continue;}
if(ar[i]==TEXTFONTCLASS){eval(pf+'textfontclass="'+ar[++i]+'"');continue;}
if(ar[i]==CAPTIONFONTCLASS){eval(pf+'captionfontclass="'+ar[++i]+'"');continue;}
if(ar[i]==CLOSEFONTCLASS){eval(pf+'closefontclass="'+ar[++i]+'"');continue;}
i=parseCmdLine(pf,i,ar);}}
if(fnMark&&o3_function)o3_text=o3_function();
if((pf=='o3_')&&o3_wrap){o3_width=0;
var tReg=/<.*\n*>/ig;if(!tReg.test(o3_text))o3_text=o3_text.replace(/[ ]+/g,'&nbsp;');if(!tReg.test(o3_cap))o3_cap=o3_cap.replace(/[ ]+/g,'&nbsp;');}
if((pf=='o3_')&&o3_sticky){if(!o3_close&&(o3_frame!=ol_frame))o3_close=ol_close;if(o3_mouseoff&&(o3_frame==ol_frame))opt_NOCLOSE(' ');}}
function layerWrite(txt){txt+="\n";if(olNs4){var lyr=o3_frame.document.layers['overDiv'].document
lyr.write(txt)
lyr.close()
}else if(typeof over.innerHTML!='undefined'){if(olIe5&&isMac)over.innerHTML='';over.innerHTML=txt;}else{range=o3_frame.document.createRange();range.setStartAfter(over);domfrag=range.createContextualFragment(txt);
while(over.hasChildNodes()){over.removeChild(over.lastChild);}
over.appendChild(domfrag);}}
function showObject(obj){runHook("showObject",FBEFORE);
var theObj=(olNs4?obj:obj.style);theObj.visibility='visible';
runHook("showObject",FAFTER);}
function hideObject(obj){runHook("hideObject",FBEFORE);
var theObj=(olNs4?obj:obj.style);if(olNs6&&olShowId>0){clearTimeout(olShowId);olShowId=0;}
theObj.visibility='hidden';theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);
if(o3_timerid>0)clearTimeout(o3_timerid);if(o3_delayid>0)clearTimeout(o3_delayid);
o3_timerid=0;o3_delayid=0;self.status="";
if(obj.onmouseout||obj.onmouseover){if(olNs4)obj.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);obj.onmouseout=obj.onmouseover=null;}
runHook("hideObject",FAFTER);}
function repositionTo(obj,xL,yL){var theObj=(olNs4?obj:obj.style);theObj.left=xL+(!olNs4?'px':0);theObj.top=yL+(!olNs4?'px':0);}
function cursorOff(){var left=parseInt(over.style.left);var top=parseInt(over.style.top);var right=left+(over.offsetWidth>=parseInt(o3_width)?over.offsetWidth:parseInt(o3_width));var bottom=top+(over.offsetHeight>=o3_aboveheight?over.offsetHeight:o3_aboveheight);
if(o3_x<left||o3_x>right||o3_y<top||o3_y>bottom)return true;
return false;}
function opt_FUNCTION(callme){o3_text=(callme?(typeof callme=='string'?(/.+\(.*\)/.test(callme)?eval(callme):callme):callme()):(o3_function?o3_function():'No Function'));
return 0;}
function opt_NOCLOSE(unused){if(!unused)o3_close="";
if(olNs4){over.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);over.onmouseover=function(){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }
over.onmouseout=function(e){if(olHideDelay)hideDelay(olHideDelay);else cClick(e);}
}else{over.onmouseover=function(){hoveringSwitch=true;if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }}
return 0;}
function opt_MULTIPLEARGS(i,args,parameter){var k=i,re,pV,str='';
for(k=i;k<args.length;k++){if(typeof args[k]=='number'&&args[k]>pmStart)break;str+=args[k]+',';}
if(str)str=str.substring(0,--str.length);
k--;pV=(olNs4&&/cellpad/i.test(parameter))?str.split(',')[0]:str;eval(parameter+'="'+pV+'"');
return k;}
function nbspCleanup(){if(o3_wrap){o3_text=o3_text.replace(/\&nbsp;/g,' ');o3_cap=o3_cap.replace(/\&nbsp;/g,' ');}}
function escSglQuote(str){return str.toString().replace(/'/g,"\\'");}
function OLonLoad_handler(e){var re=/\w+\(.*\)[;\s]+/g,olre=/overlib\(|nd\(|cClick\(/,fn,l,i;
if(!olLoaded)olLoaded=1;
if(window.removeEventListener&&e.eventPhase==3)window.removeEventListener("load",OLonLoad_handler,false);else if(window.detachEvent){window.detachEvent("onload",OLonLoad_handler);var fN=document.body.getAttribute('onload');if(fN){fN=fN.toString().match(re);if(fN&&fN.length){for(i=0;i<fN.length;i++){if(/anonymous/.test(fN[i]))continue;while((l=fN[i].search(/\)[;\s]+/))!=-1){fn=fN[i].substring(0,l+1);fN[i]=fN[i].substring(l+2);if(olre.test(fn))eval(fn);}}}}}}
function wrapStr(endWrap,fontSizeStr,whichString){var fontStr,fontColor,isClose=((whichString=='close')?1:0),hasDims=/[%\-a-z]+$/.test(fontSizeStr);fontSizeStr=(olNs4)?(!hasDims?fontSizeStr:'1'):fontSizeStr;if(endWrap)return(hasDims&&!olNs4)?(isClose?'</span>':'</div>'):'</font>';else{fontStr='o3_'+whichString+'font';fontColor='o3_'+((whichString=='caption')? 'cap':whichString)+'color';return(hasDims&&!olNs4)?(isClose?'<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+';color: '+eval(fontColor)+';font-size: '+fontSizeStr+';">':'<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+';color: '+eval(fontColor)+';font-size: '+fontSizeStr+';">'):'<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7?'7':fontSizeStr)+'">';}}
function quoteMultiNameFonts(theFont){var v,pM=theFont.split(',');for(var i=0;i<pM.length;i++){v=pM[i];v=v.replace(/^\s+/,'').replace(/\s+$/,'');if(/\s/.test(v)&&!/['"]/.test(v)){v="\'"+v+"\'";pM[i]=v;}}
return pM.join();}
function isExclusive(args){return false;}
function setCellPadStr(parameter){var Str='',j=0,ary=new Array(),top,bottom,left,right;
Str+='padding: ';ary=parameter.replace(/\s+/g,'').split(',');
switch(ary.length){case 2:
top=bottom=ary[j];left=right=ary[++j];break;case 3:
top=ary[j];left=right=ary[++j];bottom=ary[++j];break;case 4:
top=ary[j];right=ary[++j];bottom=ary[++j];left=ary[++j];break;}
Str+=((ary.length==1)?ary[0]+'px;':top+'px '+right+'px '+bottom+'px '+left+'px;');
return Str;}
function hideDelay(time){if(time&&!o3_delay){if(o3_timerid>0)clearTimeout(o3_timerid);
o3_timerid=setTimeout("cClick()",(o3_timeout=time));}}
function horizontalPlacement(browserWidth,horizontalScrollAmount,widthFix){var placeX,iwidth=browserWidth,winoffset=horizontalScrollAmount;var parsedWidth=parseInt(o3_width);
if(o3_fixx>-1||o3_relx!=null){
placeX=(o3_relx!=null?( o3_relx<0?winoffset+o3_relx+iwidth-parsedWidth-widthFix:winoffset+o3_relx):o3_fixx);}else{
if(o3_hauto==1){if((o3_x-winoffset)>(iwidth/2)){o3_hpos=LEFT;}else{o3_hpos=RIGHT;}}
if(o3_hpos==CENTER){placeX=o3_x+o3_offsetx-(parsedWidth/2);
if(placeX<winoffset)placeX=winoffset;}
if(o3_hpos==RIGHT){placeX=o3_x+o3_offsetx;
if((placeX+parsedWidth)>(winoffset+iwidth-widthFix)){placeX=iwidth+winoffset-parsedWidth-widthFix;if(placeX<0)placeX=0;}}
if(o3_hpos==LEFT){placeX=o3_x-o3_offsetx-parsedWidth;if(placeX<winoffset)placeX=winoffset;}
if(o3_snapx>1){var snapping=placeX % o3_snapx;
if(o3_hpos==LEFT){placeX=placeX-(o3_snapx+snapping);}else{
placeX=placeX+(o3_snapx-snapping);}
if(placeX<winoffset)placeX=winoffset;}}
return placeX;}
function verticalPlacement(browserHeight,verticalScrollAmount){var placeY,iheight=browserHeight,scrolloffset=verticalScrollAmount;var parsedHeight=(o3_aboveheight?parseInt(o3_aboveheight):(olNs4?over.clip.height:over.offsetHeight));
if(o3_fixy>-1||o3_rely!=null){
placeY=(o3_rely!=null?(o3_rely<0?scrolloffset+o3_rely+iheight-parsedHeight:scrolloffset+o3_rely):o3_fixy);}else{
if(o3_vauto==1){if((o3_y-scrolloffset)>(iheight/2)&&o3_vpos==BELOW&&(o3_y+parsedHeight+o3_offsety-(scrolloffset+iheight)>0)){o3_vpos=ABOVE;}else if(o3_vpos==ABOVE&&(o3_y-(parsedHeight+o3_offsety)-scrolloffset<0)){o3_vpos=BELOW;}}
if(o3_vpos==ABOVE){if(o3_aboveheight==0)o3_aboveheight=parsedHeight;
placeY=o3_y-(o3_aboveheight+o3_offsety);if(placeY<scrolloffset)placeY=scrolloffset;}else{
placeY=o3_y+o3_offsety;}
if(o3_snapy>1){var snapping=placeY % o3_snapy;
if(o3_aboveheight>0&&o3_vpos==ABOVE){placeY=placeY-(o3_snapy+snapping);}else{placeY=placeY+(o3_snapy-snapping);}
if(placeY<scrolloffset)placeY=scrolloffset;}}
return placeY;}
function checkPositionFlags(){if(olHautoFlag)olHautoFlag=o3_hauto=0;if(olVautoFlag)olVautoFlag=o3_vauto=0;return true;}
function windowWidth(){var w;if(o3_frame.innerWidth)w=o3_frame.innerWidth;else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth'))
w=eval('o3_frame.'+docRoot+'.clientWidth');return w;}
function createDivContainer(id,frm,zValue){id=(id||'overDiv'),frm=(frm||o3_frame),zValue=(zValue||1000);var objRef,divContainer=layerReference(id);
if(divContainer==null){if(olNs4){divContainer=frm.document.layers[id]=new Layer(window.innerWidth,frm);objRef=divContainer;}else{var body=(olIe4?frm.document.all.tags('BODY')[0]:frm.document.getElementsByTagName("BODY")[0]);if(olIe4&&!document.getElementById){body.insertAdjacentHTML("beforeEnd",'<div id="'+id+'"></div>');divContainer=layerReference(id);}else{divContainer=frm.document.createElement("DIV");divContainer.id=id;body.appendChild(divContainer);}
objRef=divContainer.style;}
objRef.position='absolute';objRef.visibility='hidden';objRef.zIndex=zValue;if(olIe4&&!olOp)objRef.left=objRef.top='0px';else objRef.left=objRef.top=-10000+(!olNs4?'px':0);}
return divContainer;}
function layerReference(id){return(olNs4?o3_frame.document.layers[id]:(document.all?o3_frame.document.all[id]:o3_frame.document.getElementById(id)));}
function isFunction(fnRef){var rtn=true;
if(typeof fnRef=='object'){for(var i=0;i<fnRef.length;i++){if(typeof fnRef[i]=='function')continue;rtn=false;break;}
}else if(typeof fnRef!='function'){rtn=false;}
return rtn;}
function argToString(array,strtInd,argName){var jS=strtInd,aS='',ar=array;argName=(argName?argName:'ar');
if(ar.length>jS){for(var k=jS;k<ar.length;k++)aS+=argName+'['+k+'], ';aS=aS.substring(0,aS.length-2);}
return aS;}
function reOrder(hookPt,fnRef,order){var newPt=new Array(),match,i,j;
if(!order||typeof order=='undefined'||typeof order=='number')return hookPt;
if(typeof order=='function'){if(typeof fnRef=='object'){newPt=newPt.concat(fnRef);}else{newPt[newPt.length++]=fnRef;}
for(i=0;i<hookPt.length;i++){match=false;if(typeof fnRef=='function'&&hookPt[i]==fnRef){continue;}else{for(j=0;j<fnRef.length;j++)if(hookPt[i]==fnRef[j]){match=true;break;}}
if(!match)newPt[newPt.length++]=hookPt[i];}
newPt[newPt.length++]=order;
}else if(typeof order=='object'){if(typeof fnRef=='object'){newPt=newPt.concat(fnRef);}else{newPt[newPt.length++]=fnRef;}
for(j=0;j<hookPt.length;j++){match=false;if(typeof fnRef=='function'&&hookPt[j]==fnRef){continue;}else{for(i=0;i<fnRef.length;i++)if(hookPt[j]==fnRef[i]){match=true;break;}}
if(!match)newPt[newPt.length++]=hookPt[j];}
for(i=0;i<newPt.length;i++)hookPt[i]=newPt[i];newPt.length=0;
for(j=0;j<hookPt.length;j++){match=false;for(i=0;i<order.length;i++){if(hookPt[j]==order[i]){match=true;break;}}
if(!match)newPt[newPt.length++]=hookPt[j];}
newPt=newPt.concat(order);}
hookPt=newPt;
return hookPt;}
function setRunTimeVariables(){if(typeof runTime!='undefined'&&runTime.length){for(var k=0;k<runTime.length;k++){runTime[k]();}}}
function parseCmdLine(pf,i,args){if(typeof cmdLine!='undefined'&&cmdLine.length){for(var k=0;k<cmdLine.length;k++){var j=cmdLine[k](pf,i,args);if(j >-1){i=j;break;}}}
return i;}
function postParseChecks(pf,args){if(typeof postParse!='undefined'&&postParse.length){for(var k=0;k<postParse.length;k++){if(postParse[k](pf,args))continue;return false;}}
return true;}
function registerCommands(cmdStr){if(typeof cmdStr!='string')return;
var pM=cmdStr.split(',');pms=pms.concat(pM);
for(var i=0;i< pM.length;i++){eval(pM[i].toUpperCase()+'='+pmCount++);}}
function registerNoParameterCommands(cmdStr){if(!cmdStr&&typeof cmdStr!='string')return;pmt=(!pmt)?cmdStr:pmt+','+cmdStr;}
function registerHook(fnHookTo,fnRef,hookType,optPm){var hookPt,last=typeof optPm;
if(fnHookTo=='plgIn'||fnHookTo=='postParse')return;if(typeof hookPts[fnHookTo]=='undefined')hookPts[fnHookTo]=new FunctionReference();
hookPt=hookPts[fnHookTo];
if(hookType!=null){if(hookType==FREPLACE){hookPt.ovload=fnRef;if(fnHookTo.indexOf('ol_content_')>-1)hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef;
}else if(hookType==FBEFORE||hookType==FAFTER){var hookPt=(hookType==1?hookPt.before:hookPt.after);
if(typeof fnRef=='object'){hookPt=hookPt.concat(fnRef);}else{hookPt[hookPt.length++]=fnRef;}
if(optPm)hookPt=reOrder(hookPt,fnRef,optPm);
}else if(hookType==FALTERNATE){if(last=='number')hookPt.alt[pms[optPm-1-pmStart]]=fnRef;}else if(hookType==FCHAIN){hookPt=hookPt.chain;if(typeof fnRef=='object')hookPt=hookPt.concat(fnRef);else hookPt[hookPt.length++]=fnRef;}
return;}}
function registerRunTimeFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){runTime=runTime.concat(fn);}else{runTime[runTime.length++]=fn;}}}
function registerCmdLineFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){cmdLine=cmdLine.concat(fn);}else{cmdLine[cmdLine.length++]=fn;}}}
function registerPostParseFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){postParse=postParse.concat(fn);}else{postParse[postParse.length++]=fn;}}}
function runHook(fnHookTo,hookType){var l=hookPts[fnHookTo],k,rtnVal=null,optPm,arS,ar=runHook.arguments;
if(hookType==FREPLACE){arS=argToString(ar,2);
if(typeof l=='undefined'||!(l=l.ovload))rtnVal=eval(fnHookTo+'('+arS+')');else rtnVal=eval('l('+arS+')');
}else if(hookType==FBEFORE||hookType==FAFTER){if(typeof l!='undefined'){l=(hookType==1?l.before:l.after);
if(l.length){arS=argToString(ar,2);for(var k=0;k<l.length;k++)eval('l[k]('+arS+')');}}
}else if(hookType==FALTERNATE){optPm=ar[2];arS=argToString(ar,3);
if(typeof l=='undefined'||(l=l.alt[pms[optPm-1-pmStart]])=='undefined'){rtnVal=eval(fnHookTo+'('+arS+')');}else{rtnVal=eval('l('+arS+')');}
}else if(hookType==FCHAIN){arS=argToString(ar,2);l=l.chain;
for(k=l.length;k>0;k--)if((rtnVal=eval('l[k-1]('+arS+')'))!=void(0))break;}
return rtnVal;}
function FunctionReference(){this.ovload=null;this.before=new Array();this.after=new Array();this.alt=new Array();this.chain=new Array();}
function Info(version,prerelease){this.version=version;this.prerelease=prerelease;
this.simpleversion=Math.round(this.version*100);this.major=parseInt(this.simpleversion/100);this.minor=parseInt(this.simpleversion/10)-this.major * 10;this.revision=parseInt(this.simpleversion)-this.major * 100-this.minor * 10;this.meets=meets;}
function meets(reqdVersion){return(!reqdVersion)?false:this.simpleversion>=Math.round(100*parseFloat(reqdVersion));}
registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSOFF);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSOFF);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSOFF);registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSCLASS);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSCLASS);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSCLASS);registerPostParseFunction(checkPositionFlags);registerHook("hideObject",nbspCleanup,FAFTER);registerHook("horizontalPlacement",horizontalPlacement,FCHAIN);registerHook("verticalPlacement",verticalPlacement,FCHAIN);if(olNs4||(olIe5&&isMac)||olKq)olLoaded=1;registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
var olCheckMouseCapture=true;if((olNs4||olNs6||olIe4)){olMouseCapture();}else{overlib=no_overlib;nd=no_overlib;ver3fix=true;}
/* Added by module "wowitemstats", file "mods/wowitemstats/wowitemstats_editor_tools.js" */
// Javascript code for WoW Itemstats support in the Phorum editor_tools module.
// ----------------------------------------------------------------------
// Tool: [item]
// ----------------------------------------------------------------------
function editor_tools_handle_wowitemstats() {
editor_tools_add_tags('[item]', '[/item]');
editor_tools_focus_textarea();
}
/* Added by module "bbcode", file "mods/bbcode_video/bbcode_video.js" */
function bbcode_video_editor_tool()
{
editor_tools_add_tags(
'[video]', '[/video]',
null,
editor_tools_translate("enter video url")
);
editor_tools_focus_textarea();
}
/* Added by module "bbcode", file "mods/bbcode/bbcode_editor_tools.js" */
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2008 Phorum Development Team //
// http://www.phorum.org //
// //
// This program is free software. You can redistribute it and/or modify //
// it under the terms of either the current Phorum License (viewable at //
// phorum.org) or the Phorum License that was distributed with this file //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY, without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
// //
// You should have received a copy of the Phorum License //
// along with this program. //
// //
///////////////////////////////////////////////////////////////////////////////
// Javascript code for BBcode support in the Phorum editor_tools module.
// Some variables for storing objects that we need globally.
var editor_tools_size_picker_obj = null;
var editor_tools_list_picker_obj = null;
// Valid sizes to select from for the size picker. If you add or change sizes,
// remember to change the module language file to supply some display strings.
var editor_tools_size_picker_sizes = new Array(
'x-large',
'large',
'medium',
'small',
'x-small'
);
// Valid list types to select from for the list picker. If you add or change
// types, remember to change the module language file to supply some
// display strings.
var editor_tools_list_picker_types = new Array(
'b', // bullets
'1', // numbers
'a', // letters
'A', // capital letters
'i', // roman numbers
'I' // capital roman numbers
);
// Helper function: quote a bbcode argument if needed.
function quote_bbcode_argument(str)
{
// Check if quoting is required.
if (str.indexOf(' ') != -1 ||
str.indexOf('"') != -1 ||
str.indexOf(']') != -1)
{
var quoted = '';
for (var i = 0; i < str.length; i++) {
var c = str[i];
if (c == '\\' || c == '"') {
quoted += '\\';
}
quoted += c;
}
return '"' + quoted + '"';
}
else
{
return str;
}
}
// ----------------------------------------------------------------------
// Tool: [hr] or [hline] (horizontal line)
// ----------------------------------------------------------------------
function editor_tools_handle_hr() {
editor_tools_add_tags('\n[hr]\n', '');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [b]...[/b] (bold)
// ----------------------------------------------------------------------
function editor_tools_handle_b() {
editor_tools_add_tags('[b]', '[/b]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [s]...[/s] (strike through)
// ----------------------------------------------------------------------
function editor_tools_handle_s() {
editor_tools_add_tags('[s]', '[/s]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [u]...[/u] (underline)
// ----------------------------------------------------------------------
function editor_tools_handle_u() {
editor_tools_add_tags('[u]', '[/u]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [i]...[/i] (italic)
// ----------------------------------------------------------------------
function editor_tools_handle_i() {
editor_tools_add_tags('[i]', '[/i]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [center]...[/center] (center text)
// ----------------------------------------------------------------------
function editor_tools_handle_center() {
editor_tools_add_tags('[center]', '[/center]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [sub]...[/sub] (subscript)
// ----------------------------------------------------------------------
function editor_tools_handle_sub() {
editor_tools_add_tags('[sub]', '[/sub]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [sup]...[/sup] (superscript)
// ----------------------------------------------------------------------
function editor_tools_handle_sup() {
editor_tools_add_tags('[sup]', '[/sup]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [small]...[/small] (small font)
// ----------------------------------------------------------------------
function editor_tools_handle_small() {
editor_tools_add_tags('[small]', '[/small]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [large]...[/large] (large font)
// ----------------------------------------------------------------------
function editor_tools_handle_large() {
editor_tools_add_tags('[large]', '[/large]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [code]...[/code] (formatted code)
// ----------------------------------------------------------------------
function editor_tools_handle_code() {
editor_tools_add_tags('[code]\n', '\n[/code]\n');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [email]...[/email] (email address link)
// ----------------------------------------------------------------------
function editor_tools_handle_email()
{
var email = prompt(editor_tools_translate("enter email"), '');
if (email == null) return;
email = editor_tools_strip_whitespace(email);
var subject = prompt(editor_tools_translate("enter subject"), '');
if (subject == null) return;
subject = editor_tools_strip_whitespace(subject);
if (subject != '') {
subject = ' subject=' + quote_bbcode_argument(subject);
}
if (email == '') {
editor_tools_add_tags('[email'+subject+']', '[/email]');
} else {
editor_tools_add_tags('[email'+subject+']'+email+'[/email]', '');
}
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [url=...]...[/url] (URL link)
// ----------------------------------------------------------------------
function editor_tools_handle_url()
{
var url = 'http://';
for (;;)
{
// Read input.
url = prompt(editor_tools_translate("enter url"), url);
if (url == null) return; // Cancel clicked.
url = editor_tools_strip_whitespace(url);
// Check the URL scheme (http, https, ftp and mailto are allowed).
copy = url.toLowerCase();
if (copy == 'http://' || (
copy.substring(0,7) != 'http://' &&
copy.substring(0,8) != 'https://' &&
copy.substring(0,6) != 'ftp://' &&
copy.substring(0,7) != 'mailto:')) {
alert(editor_tools_translate("invalid url"));
continue;
}
break;
}
editor_tools_add_tags('[url=' + url + ']', '[/url]', null, editor_tools_translate("enter url description"));
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [color=...]...[/color] (text color)
// ----------------------------------------------------------------------
function editor_tools_handle_color()
{
editor_tools_store_range();
// Display the color picker.
var img_obj = document.getElementById('editor-tools-img-color');
showColorPicker(img_obj);
return;
}
// Called by the color picker library.
function editor_tools_handle_color_select(color)
{
editor_tools_restore_range();
editor_tools_add_tags('[color=' + color + ']', '[/color]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [size=...]...[/size] (text size)
// ----------------------------------------------------------------------
function editor_tools_handle_size()
{
editor_tools_store_range();
// Create the size picker on first access.
if (!editor_tools_size_picker_obj)
{
// Create a new popup.
var popup = editor_tools_construct_popup('editor-tools-size-picker','l');
editor_tools_size_picker_obj = popup[0];
var content_obj = popup[1];
// Populate the new popup.
for (var i = 0; i < editor_tools_size_picker_sizes.length; i++)
{
var size = editor_tools_size_picker_sizes[i];
var a_obj = document.createElement('a');
a_obj.href = 'javascript:editor_tools_handle_size_select("' + size + '")';
a_obj.style.fontSize = size;
a_obj.innerHTML = editor_tools_translate(size);
content_obj.appendChild(a_obj);
var br_obj = document.createElement('br');
content_obj.appendChild(br_obj);
}
// Register the popup with the editor tools.
editor_tools_register_popup_object(editor_tools_size_picker_obj);
}
// Display the popup.
var button_obj = document.getElementById('editor-tools-img-size');
editor_tools_toggle_popup(editor_tools_size_picker_obj, button_obj);
}
function editor_tools_handle_size_select(size)
{
editor_tools_hide_all_popups();
editor_tools_restore_range();
size = editor_tools_strip_whitespace(size);
editor_tools_add_tags('[size=' + size + ']', '[/size]');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [img]...[/img] (Image URL)
// ----------------------------------------------------------------------
function editor_tools_handle_img()
{
var url = 'http://';
for (;;)
{
// Read input.
url = prompt(editor_tools_translate("enter image url"), url);
if (url == null) return; // Cancel clicked.
url = editor_tools_strip_whitespace(url);
// Check the URL scheme (http, https, ftp and mailto are allowed).
var copy = url.toLowerCase();
if (copy == 'http://' || (
copy.substring(0,7) != 'http://' &&
copy.substring(0,8) != 'https://' &&
copy.substring(0,6) != 'ftp://')) {
alert(editor_tools_translate("invalid image url"));
continue;
}
break;
}
editor_tools_add_tags('[img]' + url + '[/img]', '');
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [quote]...[/quote] (add a quote)
// ----------------------------------------------------------------------
function editor_tools_handle_quote()
{
// Read input.
var who = prompt(editor_tools_translate("enter who you quote"), '');
if (who == null) return;
who = editor_tools_strip_whitespace(who);
if (who == '') {
editor_tools_add_tags('[quote]', '[/quote]');
}
else
{
who = quote_bbcode_argument(who);
editor_tools_add_tags('[quote=' + who + "]\n", "\n[/quote]");
}
editor_tools_focus_textarea();
}
// ----------------------------------------------------------------------
// Tool: [list] [*]item1 [*]item2 [/list]
// ----------------------------------------------------------------------
function editor_tools_handle_list()
{
// Create the list picker on first access.
if (!editor_tools_list_picker_obj)
{
// Create a new popup.
var popup = editor_tools_construct_popup('editor-tools-list-picker', 'l');
editor_tools_list_picker_obj = popup[0];
var content_obj = popup[1];
// Populate the new popup.
var wrapper = document.createElement('div');
wrapper.style.marginLeft = '1em';
for (var i = 0; i < editor_tools_list_picker_types.length; i++)
{
var type = editor_tools_list_picker_types[i];
var list;
if (type == 'b') {
list = document.createElement('ul');
} else {
list = document.createElement('ol');
list.type = type;
}
list.style.padding = 0;
list.style.margin = 0;
var item = document.createElement('li');
var a_obj = document.createElement('a');
a_obj.href = 'javascript:editor_tools_handle_list_select("' + type + '")';
a_obj.innerHTML = editor_tools_translate('list type ' + type);
item.appendChild(a_obj);
list.appendChild(item);
wrapper.appendChild(list);
}
content_obj.appendChild(wrapper);
// Register the popup with the editor tools.
editor_tools_register_popup_object(editor_tools_list_picker_obj);
}
// Display the popup.
var button_obj = document.getElementById('editor-tools-img-list');
editor_tools_toggle_popup(editor_tools_list_picker_obj, button_obj);
}
function editor_tools_handle_list_select(type)
{
editor_tools_hide_all_popups();
var items = new Array();
var idx = 0;
// Read items.
for (;;)
{
var item = prompt(editor_tools_translate('enter new list item'), '');
if (item == null) return;
item = editor_tools_strip_whitespace(item);
if (item == '') break;
items[idx++] = item;
}
if (items.length == 0) {
items = new Array(
'...',
'...'
);
}
var itemlist = '';
for (var i = 0; i < items.length; i++) {
itemlist += '[*] ' + items[i] + "\n";
}
if (type == 'b') {
type = '';
} else {
type = '='+type;
}
editor_tools_add_tags("[list"+type+"]\n"+itemlist+"[/list]\n", '');
}
/* Added by module "bbcode", file "mods/bbcode/colorpicker/js_color_picker_v2.js.php" */
/************************************************************************************************************
(C) www.dhtmlgoodies.com, October 2005
This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website. 
Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.
Thank you!
www.dhtmlgoodies.com
Alf Magne Kalleland
************************************************************************************************************/ 
var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false;
var navigatorVersion = navigator.appVersion.replace(/.*MSIE (\d\.\d).*/g,'$1')/1;
/* Changed for Phorum editor tools */
var form_widget_amount_slider_handle = 'http://www.celestialdarkness.com/forum/mods/bbcode/colorpicker/images/slider_handle.gif';
var slider_handle_image_obj = false;
var sliderObjectArray = new Array();
var slider_counter = 0;
var slideInProgress = false;
var handle_start_x;
var event_start_x;
var currentSliderIndex;
function form_widget_cancel_event()
{
return false; 
}
function getImageSliderHeight(){
if(!slider_handle_image_obj){
slider_handle_image_obj = new Image();
slider_handle_image_obj.src = form_widget_amount_slider_handle;
}
if(slider_handle_image_obj.width>0){
return;
}else{
setTimeout('getImageSliderHeight()',50);
}
}
function positionSliderImage(e,theIndex,inputObj)
{
if(this)inputObj = this;
if(!theIndex)theIndex = inputObj.getAttribute('sliderIndex');
var handleImg = document.getElementById('slider_handle' + theIndex);
var ratio = sliderObjectArray[theIndex]['width'] / (sliderObjectArray[theIndex]['max']-sliderObjectArray[theIndex]['min']);
var currentValue = sliderObjectArray[theIndex]['formTarget'].value-sliderObjectArray[theIndex]['min']; 
handleImg.style.left = currentValue * ratio + 'px'; 
setColorByRGB();
}
function adjustFormValue(theIndex)
{
var handleImg = document.getElementById('slider_handle' + theIndex); 
var ratio = sliderObjectArray[theIndex]['width'] / (sliderObjectArray[theIndex]['max']-sliderObjectArray[theIndex]['min']);
var currentPos = handleImg.style.left.replace('px','');
sliderObjectArray[theIndex]['formTarget'].value = Math.round(currentPos / ratio) + sliderObjectArray[theIndex]['min'];
}
function initMoveSlider(e)
{
if(document.all)e = event; 
slideInProgress = true;
event_start_x = e.clientX;
handle_start_x = this.style.left.replace('px','');
currentSliderIndex = this.id.replace(/[^\d]/g,'');
return false;
}
function startMoveSlider(e)
{
if(document.all)e = event; 
if(!slideInProgress)return; 
var leftPos = handle_start_x/1 + e.clientX/1 - event_start_x;
if(leftPos<0)leftPos = 0;
if(leftPos/1>sliderObjectArray[currentSliderIndex]['width'])leftPos = sliderObjectArray[currentSliderIndex]['width'];
document.getElementById('slider_handle' + currentSliderIndex).style.left = leftPos + 'px';
adjustFormValue(currentSliderIndex);
if(sliderObjectArray[currentSliderIndex]['onchangeAction']){
eval(sliderObjectArray[currentSliderIndex]['onchangeAction']);
}
}
function stopMoveSlider()
{
slideInProgress = false;
}
function form_widget_amount_slider(targetElId,formTarget,width,min,max,onchangeAction)
{
if(!slider_handle_image_obj){
getImageSliderHeight();
}
slider_counter = slider_counter +1;
sliderObjectArray[slider_counter] = new Array();
sliderObjectArray[slider_counter] = {"width":width - 9,"min":min,"max":max,"formTarget":formTarget,"onchangeAction":onchangeAction};
formTarget.setAttribute('sliderIndex',slider_counter);
formTarget.onchange = positionSliderImage;
var parentObj = document.createElement('DIV');
parentObj.style.width = width + 'px';
parentObj.style.height = '12px'; // The height of the image
parentObj.style.position = 'relative';
parentObj.id = 'slider_container' + slider_counter;
document.getElementById(targetElId).appendChild(parentObj);
var obj = document.createElement('DIV');
obj.className = 'form_widget_amount_slider';
obj.innerHTML = '<span></span>';
obj.style.width = width + 'px';
obj.id = 'slider_slider' + slider_counter;
obj.style.position = 'absolute';
obj.style.bottom = '0px';
parentObj.appendChild(obj);
var handleImg = document.createElement('IMG');
handleImg.style.position = 'absolute';
handleImg.style.left = '0px';
handleImg.style.zIndex = 5;
handleImg.src = slider_handle_image_obj.src;
handleImg.id = 'slider_handle' + slider_counter;
handleImg.onmousedown = initMoveSlider;
if(document.body.onmouseup){
if(document.body.onmouseup.toString().indexOf('stopMoveSlider')==-1){
alert('You allready have an onmouseup event assigned to the body tag');
}
}else{
document.body.onmouseup = stopMoveSlider; 
document.body.onmousemove = startMoveSlider; 
}
handleImg.ondragstart = form_widget_cancel_event;
parentObj.appendChild(handleImg);
positionSliderImage(false,slider_counter);
}
var namedColors = new Array('AliceBlue','AntiqueWhite','Aqua','Aquamarine','Azure','Beige','Bisque','Black','BlanchedAlmond','Blue','BlueViolet','Brown',
'BurlyWood','CadetBlue','Chartreuse','Chocolate','Coral','CornflowerBlue','Cornsilk','Crimson','Cyan','DarkBlue','DarkCyan','DarkGoldenRod','DarkGray',
'DarkGreen','DarkKhaki','DarkMagenta','DarkOliveGreen','Darkorange','DarkOrchid','DarkRed','DarkSalmon','DarkSeaGreen','DarkSlateBlue','DarkSlateGray',
'DarkTurquoise','DarkViolet','DeepPink','DeepSkyBlue','DimGray','DodgerBlue','Feldspar','FireBrick','FloralWhite','ForestGreen','Fuchsia','Gainsboro',
'GhostWhite','Gold','GoldenRod','Gray','Green','GreenYellow','HoneyDew','HotPink','IndianRed','Indigo','Ivory','Khaki','Lavender','LavenderBlush',
'LawnGreen','LemonChiffon','LightBlue','LightCoral','LightCyan','LightGoldenRodYellow','LightGrey','LightGreen','LightPink','LightSalmon','LightSeaGreen',
'LightSkyBlue','LightSlateBlue','LightSlateGray','LightSteelBlue','LightYellow','Lime','LimeGreen','Linen','Magenta','Maroon','MediumAquaMarine',
'MediumBlue','MediumOrchid','MediumPurple','MediumSeaGreen','MediumSlateBlue','MediumSpringGreen','MediumTurquoise','MediumVioletRed','MidnightBlue',
'MintCream','MistyRose','Moccasin','NavajoWhite','Navy','OldLace','Olive','OliveDrab','Orange','OrangeRed','Orchid','PaleGoldenRod','PaleGreen',
'PaleTurquoise','PaleVioletRed','PapayaWhip','PeachPuff','Peru','Pink','Plum','PowderBlue','Purple','Red','RosyBrown','RoyalBlue','SaddleBrown',
'Salmon','SandyBrown','SeaGreen','SeaShell','Sienna','Silver','SkyBlue','SlateBlue','SlateGray','Snow','SpringGreen','SteelBlue','Tan','Teal','Thistle',
'Tomato','Turquoise','Violet','VioletRed','Wheat','White','WhiteSmoke','Yellow','YellowGreen');
var namedColorRGB = new Array('#F0F8FF','#FAEBD7','#00FFFF','#7FFFD4','#F0FFFF','#F5F5DC','#FFE4C4','#000000','#FFEBCD','#0000FF','#8A2BE2','#A52A2A','#DEB887',
'#5F9EA0','#7FFF00','#D2691E','#FF7F50','#6495ED','#FFF8DC','#DC143C','#00FFFF','#00008B','#008B8B','#B8860B','#A9A9A9','#006400','#BDB76B','#8B008B',
'#556B2F','#FF8C00','#9932CC','#8B0000','#E9967A','#8FBC8F','#483D8B','#2F4F4F','#00CED1','#9400D3','#FF1493','#00BFFF','#696969','#1E90FF','#D19275',
'#B22222','#FFFAF0','#228B22','#FF00FF','#DCDCDC','#F8F8FF','#FFD700','#DAA520','#808080','#008000','#ADFF2F','#F0FFF0','#FF69B4','#CD5C5C','#4B0082',
'#FFFFF0','#F0E68C','#E6E6FA','#FFF0F5','#7CFC00','#FFFACD','#ADD8E6','#F08080','#E0FFFF','#FAFAD2','#D3D3D3','#90EE90','#FFB6C1','#FFA07A','#20B2AA',
'#87CEFA','#8470FF','#778899','#B0C4DE','#FFFFE0','#00FF00','#32CD32','#FAF0E6','#FF00FF','#800000','#66CDAA','#0000CD','#BA55D3','#9370D8','#3CB371',
'#7B68EE','#00FA9A','#48D1CC','#C71585','#191970','#F5FFFA','#FFE4E1','#FFE4B5','#FFDEAD','#000080','#FDF5E6','#808000','#6B8E23','#FFA500','#FF4500',
'#DA70D6','#EEE8AA','#98FB98','#AFEEEE','#D87093','#FFEFD5','#FFDAB9','#CD853F','#FFC0CB','#DDA0DD','#B0E0E6','#800080','#FF0000','#BC8F8F','#4169E1',
'#8B4513','#FA8072','#F4A460','#2E8B57','#FFF5EE','#A0522D','#C0C0C0','#87CEEB','#6A5ACD','#708090','#FFFAFA','#00FF7F','#4682B4','#D2B48C','#008080',
'#D8BFD8','#FF6347','#40E0D0','#EE82EE','#D02090','#F5DEB3','#FFFFFF','#F5F5F5','#FFFF00','#9ACD32'); 
var color_picker_div = false;
var color_picker_active_tab = false;
var color_picker_form_field = false;
var color_picker_active_input = false;
function baseConverter (number,ob,nb) {
number = number + "";
number = number.toUpperCase();
var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var dec = 0;
for (var i = 0; i <= number.length; i++) {
dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1)));
}
number = "";
var magnitude = Math.floor((Math.log(dec))/(Math.log(nb)));
for (var i = magnitude; i >= 0; i--) {
var amount = Math.floor(dec/Math.pow(nb,i));
number = number + list.charAt(amount); 
dec -= amount*(Math.pow(nb,i));
}
if(number.length==0)number=0;
return number;
}
function colorPickerGetTopPos(inputObj)
{
var returnValue = inputObj.offsetTop;
while((inputObj = inputObj.offsetParent) != null){
returnValue += inputObj.offsetTop;
}
return returnValue;
}
function colorPickerGetLeftPos(inputObj)
{
var returnValue = inputObj.offsetLeft;
while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
return returnValue;
}
function cancelColorPickerEvent(){
return false;
}
function showHideColorOptions(e,inputObj)
{
var thisObj = this;
if(inputObj){
var parentNode = inputObj.parentNode; 
thisObj = inputObj;
}else var parentNode = this.parentNode;
var activeColorDiv = false;
var subDiv = parentNode.getElementsByTagName('DIV')[0];
counter=0; 
var initZIndex = 10; 
var contentDiv = document.getElementById('color_picker_content').getElementsByTagName('DIV')[0];
do{ 
if(subDiv.tagName=='DIV' && subDiv.className!='colorPickerCloseButton'){
if(subDiv==thisObj){
thisObj.className='colorPickerTab_active';
thisObj.style.zIndex = 50;
var img = thisObj.getElementsByTagName('IMG')[0];
/* Changed for Phorum editor tools */
img.src = "http://www.celestialdarkness.com/forum/mods/bbcode/colorpicker/images/tab_right_active.gif"
img.src = img.src.replace(/inactive/,'active'); 
contentDiv.style.display='block';
activeColorDiv = contentDiv;
}else{
subDiv.className = 'colorPickerTab_inactive'; 
var img = subDiv.getElementsByTagName('IMG')[0];
/* Changed for Phorum editor tools */
img.src = "http://www.celestialdarkness.com/forum/mods/bbcode/colorpicker/images/tab_right_inactive.gif";
if(activeColorDiv)
subDiv.style.zIndex = initZIndex - counter;
else
subDiv.style.zIndex = counter;
contentDiv.style.display='none';
}
counter++;
}
subDiv = subDiv.nextSibling;
if(contentDiv.nextSibling)contentDiv = contentDiv.nextSibling;
}while(subDiv);
document.getElementById('colorPicker_statusBarTxt').innerHTML = '&nbsp;';
}
function createColorPickerTopRow(inputObj){
/* Changed for Phorum editor tools */
var tabs = [editor_tools_lang['rgb'],editor_tools_lang['named'],editor_tools_lang['slides']];
var tabWidths = [
parseInt(editor_tools_lang['rgb_size']),
parseInt(editor_tools_lang['named_size']),
parseInt(editor_tools_lang['slides_size'])
];
var div = document.createElement('DIV');
div.className='colorPicker_topRow';
inputObj.appendChild(div); 
var currentWidth = 0;
for(var no=0;no<tabs.length;no++){
var tabDiv = document.createElement('DIV');
tabDiv.onselectstart = cancelColorPickerEvent;
tabDiv.ondragstart = cancelColorPickerEvent;
if(no==0){
suffix = 'active'; 
color_picker_active_tab = this;
}else suffix = 'inactive';
tabDiv.id = 'colorPickerTab' + no;
tabDiv.onclick = showHideColorOptions;
if(no==0)tabDiv.style.zIndex = 50; else tabDiv.style.zIndex = 1 + (tabs.length-no);
tabDiv.style.left = currentWidth + 'px';
tabDiv.style.position = 'absolute';
tabDiv.className='colorPickerTab_' + suffix;
var tabSpan = document.createElement('SPAN');
tabSpan.innerHTML = tabs[no];
tabDiv.appendChild(tabSpan);
var tabImg = document.createElement('IMG');
/* Changed for Phorum editor tools */
tabImg.src = "http://www.celestialdarkness.com/forum/mods/bbcode/colorpicker/images/tab_right_" + suffix + ".gif";
tabDiv.appendChild(tabImg);
div.appendChild(tabDiv);
if(navigatorVersion<6 && MSIE){ /* Lower IE version fix */
tabSpan.style.position = 'relative';
tabImg.style.position = 'relative';
tabImg.style.left = '-3px'; 
tabDiv.style.cursor = 'hand'; 
} 
currentWidth = currentWidth + tabWidths[no];
}
var closeButton = document.createElement('DIV');
closeButton.className='colorPickerCloseButton';
closeButton.innerHTML = 'x';
closeButton.onclick = closeColorPicker;
closeButton.onmouseover = toggleCloseButton;
closeButton.onmouseout = toggleOffCloseButton;
div.appendChild(closeButton);
}
function toggleCloseButton()
{
this.style.color='#FFF';
this.style.backgroundColor = '#317082'; 
}
function toggleOffCloseButton()
{
this.style.color='';
this.style.backgroundColor = ''; 
}
function closeColorPicker()
{
color_picker_div.style.display='none';
}
function createWebColors(inputObj){
var webColorDiv = document.createElement('DIV');
webColorDiv.style.paddingTop = '1px';
inputObj.appendChild(webColorDiv);
for(var r=15;r>=0;r-=3){
for(var g=0;g<=15;g+=3){
for(var b=0;b<=15;b+=3){
var red = baseConverter(r,10,16) + '';
var green = baseConverter(g,10,16) + '';
var blue = baseConverter(b,10,16) + '';
var color = '#' + red + red + green + green + blue + blue;
var div = document.createElement('DIV');
div.style.backgroundColor=color;
div.innerHTML = '<span></span>';
div.className='colorSquare';
div.title = color; 
div.onclick = chooseColor;
div.setAttribute('rgbColor',color);
div.onmouseover = colorPickerShowStatusBarText;
div.onmouseout = colorPickerHideStatusBarText;
webColorDiv.appendChild(div);
}
}
}
}
function createNamedColors(inputObj){
var namedColorDiv = document.createElement('DIV');
namedColorDiv.style.paddingTop = '1px';
namedColorDiv.style.display='none';
inputObj.appendChild(namedColorDiv);
for(var no=0;no<namedColors.length;no++){
var color = namedColorRGB[no];
var div = document.createElement('DIV');
div.style.backgroundColor=color;
div.innerHTML = '<span></span>';
div.className='colorSquare';
div.title = namedColors[no]; 
div.onclick = chooseColor;
div.onmouseover = colorPickerShowStatusBarText;
div.onmouseout = colorPickerHideStatusBarText;
div.setAttribute('rgbColor',color);
namedColorDiv.appendChild(div); 
} 
}
function colorPickerHideStatusBarText()
{
document.getElementById('colorPicker_statusBarTxt').innerHTML = '&nbsp;';
}
function colorPickerShowStatusBarText()
{
var txt = this.getAttribute('rgbColor');
if(this.title.indexOf('#')<0)txt = txt + " (" + this.title + ")";
document.getElementById('colorPicker_statusBarTxt').innerHTML = txt; 
}
function createAllColorDiv(inputObj){
var allColorDiv = document.createElement('DIV');
allColorDiv.style.display='none';
allColorDiv.className = 'js_color_picker_allColorDiv';
allColorDiv.style.paddingLeft = '3px';
allColorDiv.style.paddingTop = '5px';
allColorDiv.style.paddingBottom = '5px';
inputObj.appendChild(allColorDiv); 
var labelDiv = document.createElement('DIV');
labelDiv.className='colorSliderLabel';
labelDiv.innerHTML = 'R';
allColorDiv.appendChild(labelDiv); 
var innerDiv = document.createElement('DIV');
innerDiv.className = 'colorSlider';
innerDiv.id = 'sliderRedColor'; 
allColorDiv.appendChild(innerDiv); 
var innerDivInput = document.createElement('DIV');
innerDivInput.className='colorInput';
var input = document.createElement('INPUT');
input.id = 'js_color_picker_red_color';
input.maxlength = 3;
input.style.width = '48px';
input.style.fontSize = '11px';
input.name = 'redColor';
input.value = 0;
innerDivInput.appendChild(input);
allColorDiv.appendChild(innerDivInput);
var labelDiv = document.createElement('DIV');
labelDiv.className='colorSliderLabel';
labelDiv.innerHTML = 'G';
allColorDiv.appendChild(labelDiv); 
var innerDiv = document.createElement('DIV');
innerDiv.className = 'colorSlider';
innerDiv.id = 'sliderGreenColor'; 
allColorDiv.appendChild(innerDiv); 
var innerDivInput = document.createElement('DIV');
innerDivInput.className='colorInput';
var input = document.createElement('INPUT');
input.id = 'js_color_picker_green_color';
input.maxlength = 3;
input.style.width = '48px';
input.style.fontSize = '11px';
input.name = 'GreenColor';
input.value = 0;
innerDivInput.appendChild(input);
allColorDiv.appendChild(innerDivInput);
var labelDiv = document.createElement('DIV');
labelDiv.className='colorSliderLabel';
labelDiv.innerHTML = 'B';
allColorDiv.appendChild(labelDiv); 
var innerDiv = document.createElement('DIV');
innerDiv.className = 'colorSlider';
innerDiv.id = 'sliderBlueColor'; 
allColorDiv.appendChild(innerDiv); 
var innerDivInput = document.createElement('DIV');
innerDivInput.className='colorInput';
var input = document.createElement('INPUT');
input.id = 'js_color_picker_blue_color';
input.maxlength = 3;
input.style.width = '48px';
input.style.fontSize = '11px';
input.name = 'BlueColor';
input.value = 0;
innerDivInput.appendChild(input);
allColorDiv.appendChild(innerDivInput);
var colorPreview = document.createElement('DIV');
colorPreview.className='colorPreviewDiv';
colorPreview.id = 'colorPreview';
colorPreview.style.backgroundColor = '#000000';
colorPreview.innerHTML = '<span></span>'; 
colorPreview.title = 'Click on me to assign color'; 
allColorDiv.appendChild(colorPreview);
colorPreview.onclick = chooseColorSlider;
var colorCodeDiv = document.createElement('DIV');
colorCodeDiv.className='colorCodeDiv'; 
var input = document.createElement('INPUT');
input.id = 'js_color_picker_color_code';
colorCodeDiv.appendChild(input);
input.maxLength = 7;
input.style.fontSize = '11px';
input.style.width = '48px'; 
input.value = '#000000';
input.onchange = setPreviewColorFromTxt;
input.onblur = setPreviewColorFromTxt;
allColorDiv.appendChild(colorCodeDiv);
var clearingDiv = document.createElement('DIV');
clearingDiv.style.clear = 'both';
allColorDiv.appendChild(clearingDiv);
form_widget_amount_slider('sliderRedColor',document.getElementById('js_color_picker_red_color'),170,0,255,"setColorByRGB()");
form_widget_amount_slider('sliderGreenColor',document.getElementById('js_color_picker_green_color'),170,0,255,"setColorByRGB()");
form_widget_amount_slider('sliderBlueColor',document.getElementById('js_color_picker_blue_color'),170,0,255,"setColorByRGB()");
}
function setPreviewColorFromTxt()
{
if(this.value.match(/\#[0-9A-F]{6}/g)){
document.getElementById('colorPreview').style.backgroundColor=this.value;
var r = this.value.substr(1,2);
var g = this.value.substr(3,2);
var b = this.value.substr(5,2);
document.getElementById('js_color_picker_red_color').value = baseConverter(r,16,10);
document.getElementById('js_color_picker_green_color').value = baseConverter(g,16,10);
document.getElementById('js_color_picker_blue_color').value = baseConverter(b,16,10);
positionSliderImage(false,1,document.getElementById('js_color_picker_red_color'));
positionSliderImage(false,2,document.getElementById('js_color_picker_green_color'));
positionSliderImage(false,3,document.getElementById('js_color_picker_blue_color'));
}
}
function chooseColor()
{
/* Changed for Phorum editor tools */
//color_picker_form_field.value = this.getAttribute('rgbColor');
editor_tools_handle_color_select(this.getAttribute('rgbColor'));
color_picker_div.style.display='none';
}
function createStatusBar(inputObj)
{
var div = document.createElement('DIV');
div.className='colorPicker_statusBar'; 
var innerSpan = document.createElement('SPAN');
innerSpan.id = 'colorPicker_statusBarTxt';
div.appendChild(innerSpan);
inputObj.appendChild(div);
}
function chooseColorSlider()
{
/* Changed for Phorum editor tools */
//color_picker_form_field.value = document.getElementById('js_color_picker_color_code').value;
editor_tools_handle_color_select(document.getElementById('js_color_picker_color_code').value);
color_picker_div.style.display='none'; 
}
function showColorPicker(inputObj)
{
if(!color_picker_div){
color_picker_div = document.createElement('DIV');
color_picker_div.id = 'dhtmlgoodies_colorPicker';
color_picker_div.style.display='none';
document.body.appendChild(color_picker_div);
createColorPickerTopRow(color_picker_div); 
var contentDiv = document.createElement('DIV');
contentDiv.id = 'color_picker_content';
color_picker_div.appendChild(contentDiv); 
createWebColors(contentDiv);
createNamedColors(contentDiv);
createAllColorDiv(contentDiv);
createStatusBar(color_picker_div); 
/* Changed for Phorum editor tools */
editor_tools_register_popup_object(color_picker_div);
} 
/* Changed for Phorum editor tools */
if(color_picker_div.style.display=='none' || color_picker_active_input!=inputObj){editor_tools_hide_all_popups(); color_picker_div.style.display='block';} else color_picker_div.style.display='none'; 
color_picker_div.style.left = colorPickerGetLeftPos(inputObj) + 'px';
color_picker_div.style.top = colorPickerGetTopPos(inputObj) + inputObj.offsetHeight + 2 + 'px';
color_picker_active_input = inputObj; 
}
function setColorByRGB()
{
var formObj = document.forms[0]; 
var r = document.getElementById('js_color_picker_red_color').value.replace(/[^\d]/,'');
var g = document.getElementById('js_color_picker_green_color').value.replace(/[^\d]/,'');
var b = document.getElementById('js_color_picker_blue_color').value.replace(/[^\d]/,''); 
if(r/1>255)r=255;
if(g/1>255)g=255;
if(b/1>255)b=255;
r = baseConverter(r,10,16) + '';
g = baseConverter(g,10,16) + '';
b = baseConverter(b,10,16) + '';
if(r.length==1)r = '0' + r;
if(g.length==1)g = '0' + g;
if(b.length==1)b = '0' + b;
document.getElementById('colorPreview').style.backgroundColor = '#' + r + g + b;
document.getElementById('js_color_picker_color_code').value = '#' + r + g + b; 
} 
/* Added by module "bbcode", file "mods/bbcode/colorpicker/color_functions.js" */
function baseConverter (number,ob,nb) {
number = number + "";
number = number.toUpperCase();
var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var dec = 0;
for (var i = 0; i <= number.length; i++) {
dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1)));
}
number = "";
var magnitude = Math.floor((Math.log(dec))/(Math.log(nb)));
for (var i = magnitude; i >= 0; i--) {
var amount = Math.floor(dec/Math.pow(nb,i));
number = number + list.charAt(amount); 
dec -= amount*(Math.pow(nb,i));
}
if(number.length==0)number=0;
return number;
}

// Converts a RGB color to HSV
function toHSV(rgbColor){
rgbColor = rgbColor.replace('#',''); 

red = baseConverter(rgbColor.substr(0,2),16,10);
green = baseConverter(rgbColor.substr(2,2),16,10);
blue = baseConverter(rgbColor.substr(4,2),16,10);
if(red.length==0)red=0;
if(green.length==0)green=0;
if(blue.length==0)blue=0;
red = red/255;
green = green/255;
blue = blue/255;

maxValue = Math.max(red,green,blue);
minValue = Math.min(red,green,blue);

var hue = 0;

if(maxValue==minValue){
hue = 0;
saturation=0;
}else{
if(red == maxValue){
hue = (green - blue) / (maxValue-minValue)/1; 
}else if(green == maxValue){
hue = 2 + (blue - red)/1 / (maxValue-minValue)/1; 
}else if(blue == maxValue){
hue = 4 + (red - green) / (maxValue-minValue)/1; 
}
saturation = (maxValue-minValue) / maxValue;
}
hue = hue * 60; 
valueBrightness = maxValue;

if(valueBrightness/1<0.5){
//saturation = (maxValue - minValue) / (maxValue + minValue);
}
if(valueBrightness/1>= 0.5){
//saturation = (maxValue - minValue) / (2 - maxValue - minValue);
} 


returnArray = [hue,saturation,valueBrightness];
return returnArray;
}

function toRgb(hue,saturation,valueBrightness){
Hi = Math.floor(hue / 60);
if(hue==360)Hi=0;
f = hue/60 - Hi;
p = (valueBrightness * (1- saturation)).toPrecision(2);
q = (valueBrightness * (1 - (f * saturation))).toPrecision(2);
t = (valueBrightness * (1 - ((1-f)*saturation))).toPrecision(2);

switch(Hi){
case 0:
red = valueBrightness;
green = t;
blue = p; 
break;
case 1: 
red = q;
green = valueBrightness;
blue = p;
break;
case 2: 
red = q;
green = valueBrightness;
blue = t;
break;
case 3: 
red = p;
green = q;;
blue = valueBrightness;
break;
case 4:
red = t;
green = p;
blue = valueBrightness;
break;
case 5:
red = valueBrightness;
green = p;
blue = q;
break;
}

if(saturation==0){
red = valueBrightness;
green = valueBrightness;
blue = valueBrightness; 
}

red*=255;
green*=255;
blue*=255;

red = Math.round(red);
green = Math.round(green);
blue = Math.round(blue); 

red = baseConverter(red,10,16);
green = baseConverter(green,10,16);
blue = baseConverter(blue,10,16);

red = red + "";
green = green + "";
blue = blue + "";

while(red.length<2){
red = "0" + red;
} 
while(green.length<2){
green = "0" + green;
} 
while(blue.length<2){
blue = "0" + "" + blue;
}
rgbColor = "#" + red + "" + green + "" + blue;
return rgbColor.toUpperCase();
}

function findColorByDegrees(rgbColor,degrees){
rgbColor = rgbColor.replace('#','');
myArray = toHSV(rgbColor);
myArray[0]+=degrees;
if(myArray[0]>=360)myArray[0]-=360;
if(myArray[0]<0)myArray[0]+=360; 
return toRgb(myArray[0],myArray[1],myArray[2]);
}

function findColorByBrightness(rgbColor,brightness){

rgbColor = rgbColor.replace('#','');
myArray = toHSV(rgbColor);

myArray[2]+=brightness/100;
if(myArray[2]>1)myArray[2]=1;
if(myArray[2]<0)myArray[2]=0; 

myArray[1]+=brightness/100;
if(myArray[1]>1)myArray[1]=1;
if(myArray[1]<0)myArray[1]=0; 

return toRgb(myArray[0],myArray[1],myArray[2]); 

}