/* FRESH */// 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.preceties.lv/forums/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('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
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
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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./mods/smileys/images/smiley23.gif'; editor_tools_smileys_a[1] = 'thumbs down'; editor_tools_subjectsmileys[1] = '(td)'; editor_tools_subjectsmileys_r[1] = 'http://www.preceties.lv/forums/./mods/smileys/images/smiley23.gif'; editor_tools_subjectsmileys_a[1] = 'thumbs down'; editor_tools_smileys[2] = '(tu)'; editor_tools_smileys_r[2] = 'http://www.preceties.lv/forums/./mods/smileys/images/smiley24.gif'; editor_tools_smileys_a[2] = 'thumbs up'; editor_tools_subjectsmileys[2] = '(tu)'; editor_tools_subjectsmileys_r[2] = 'http://www.preceties.lv/forums/./mods/smileys/images/smiley24.gif'; editor_tools_subjectsmileys_a[2] = 'thumbs up'; editor_tools_smileys[3] = ':)-D'; editor_tools_smileys_r[3] = 'http://www.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./mods/smileys/images/smiley16.gif'; editor_tools_smileys_a[7] = 'drinking smiley'; editor_tools_subjectsmileys[7] = ':)o'; editor_tools_subjectsmileys_r[7] = 'http://www.preceties.lv/forums/./mods/smileys/images/smiley16.gif'; editor_tools_subjectsmileys_a[7] = 'drinking smiley'; editor_tools_smileys[8] = '::o'; editor_tools_smileys_r[8] = 'http://www.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./mods/smileys/images/smilie7.gif'; editor_tools_smileys_a[9] = 'smoking smiley'; editor_tools_subjectsmileys[9] = 'B)-'; editor_tools_subjectsmileys_r[9] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie7.gif'; editor_tools_subjectsmileys_a[9] = 'smoking smiley'; editor_tools_smileys[10] = ':('; editor_tools_smileys_r[10] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie2.gif'; editor_tools_smileys_a[10] = 'sad smiley'; editor_tools_subjectsmileys[10] = ':('; editor_tools_subjectsmileys_r[10] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie2.gif'; editor_tools_subjectsmileys_a[10] = 'sad smiley'; editor_tools_smileys[11] = ':)'; editor_tools_smileys_r[11] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie1.gif'; editor_tools_smileys_a[11] = 'smiling smiley'; editor_tools_subjectsmileys[11] = ':)'; editor_tools_subjectsmileys_r[11] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie1.gif'; editor_tools_subjectsmileys_a[11] = 'smiling smiley'; editor_tools_smileys[12] = ':?'; editor_tools_smileys_r[12] = 'http://www.preceties.lv/forums/./mods/smileys/images/smiley17.gif'; editor_tools_smileys_a[12] = 'moody smiley'; editor_tools_subjectsmileys[12] = ':?'; editor_tools_subjectsmileys_r[12] = 'http://www.preceties.lv/forums/./mods/smileys/images/smiley17.gif'; editor_tools_subjectsmileys_a[12] = 'moody smiley'; editor_tools_smileys[13] = ':D'; editor_tools_smileys_r[13] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie5.gif'; editor_tools_smileys_a[13] = 'grinning smiley'; editor_tools_subjectsmileys[13] = ':D'; editor_tools_subjectsmileys_r[13] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie5.gif'; editor_tools_subjectsmileys_a[13] = 'grinning smiley'; editor_tools_smileys[14] = ':P'; editor_tools_smileys_r[14] = 'http://www.preceties.lv/forums/./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.preceties.lv/forums/./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.preceties.lv/forums/./mods/smileys/images/smilie11.gif'; editor_tools_smileys_a[15] = 'confused smiley'; editor_tools_subjectsmileys[15] = ':S'; editor_tools_subjectsmileys_r[15] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie11.gif'; editor_tools_subjectsmileys_a[15] = 'confused smiley'; editor_tools_smileys[16] = ':X'; editor_tools_smileys_r[16] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie9.gif'; editor_tools_smileys_a[16] = 'angry smiley'; editor_tools_subjectsmileys[16] = ':X'; editor_tools_subjectsmileys_r[16] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie9.gif'; editor_tools_subjectsmileys_a[16] = 'angry smiley'; editor_tools_smileys[17] = ':o'; editor_tools_smileys_r[17] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie4.gif'; editor_tools_smileys_a[17] = 'yawning smiley'; editor_tools_subjectsmileys[17] = ':o'; editor_tools_subjectsmileys_r[17] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie4.gif'; editor_tools_subjectsmileys_a[17] = 'yawning smiley'; editor_tools_smileys[18] = ';)'; editor_tools_smileys_r[18] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie3.gif'; editor_tools_smileys_a[18] = 'winking smiley'; editor_tools_subjectsmileys[18] = ';)'; editor_tools_subjectsmileys_r[18] = 'http://www.preceties.lv/forums/./mods/smileys/images/smilie3.gif'; editor_tools_subjectsmileys_a[18] = 'winking smiley'; editor_tools_smileys[19] = 'B)'; editor_tools_smileys_r[19] = 'http://www.preceties.lv/forums/./mods/smileys/images/cool.gif'; editor_tools_smileys_a[19] = 'cool smiley'; editor_tools_subjectsmileys[19] = 'B)'; editor_tools_subjectsmileys_r[19] = 'http://www.preceties.lv/forums/./mods/smileys/images/cool.gif'; editor_tools_subjectsmileys_a[19] = 'cool smiley'; editor_tools_smileys[20] = 'X('; editor_tools_smileys_r[20] = 'http://www.preceties.lv/forums/./mods/smileys/images/hot.gif'; editor_tools_smileys_a[20] = 'hot smiley'; editor_tools_subjectsmileys[20] = 'X('; editor_tools_subjectsmileys_r[20] = 'http://www.preceties.lv/forums/./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, 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 = '
' + 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 ? '' : '') + '' + (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 x x" 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 ? '' : '') + '' + (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 = '
' + 'Image error<\/strong>' + res + '
' + '
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: '
CLOSE X<\/div>', //Define HTML for footer interface defineLoading: ' 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>'+this.definefooter+'<\/div>') document.write('
'+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='' //Construct HTML for shown image if (this.enableTitle && link.getAttribute("title")) //Use title attr of the link as description? imageHTML+='
'+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=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.preceties.lv/forums/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 = ''; 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.preceties.lv/forums/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.preceties.lv/forums/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 = ' '; } 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=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 = ''; 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;no255)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]); }