Here are the files in question in regard to getting this to work:
First, the chat_chatbit template:
Code:
<table align="center" border="0" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" class="tborder" width="100%">
<tr id="cat">
<td class="tcat" width="100%"><span class="normalfont"><b>Chat</b></span></td>
</tr>
<tr>
<td class="alt1" width="100%" align="center">
<script src="config.js" type="text/javascript"></script>
<script src="inc.js" type="text/javascript"></script>
<body>
<div id="body">
<div id="chatbox">
<div id="chatbox-top">
Cavy Compendium Chat
</div>
<div id="chatbox-mid">
<div id="chatbox-mid-head">
<script type="text/javascript">
//<![CDATA[
doWrite('menubar');
//]]>
</script>
</div>
<script type="text/javascript">
//<![CDATA[
smy_doSmileys();
doWrite('chat');
//]]>
</script>
</div>
</div>
<script type="text/javascript">
//<![CDATA[
doWrite('status');
//]]>
</script>
<p>
<img alt="W3C XHTML 1.1" src="script/images/xhtml11.gif" onclick="popup('http://validator.w3.org/check/referer')" height="15" width="94" />
<img alt="W3C CSS" src="script/images/css.gif" onclick="popup('http://jigsaw.w3.org/css-validator/check/referer')" height="15" width="94" />
<img alt="Get Firefox" src="script/images/firefox.png" onclick="popup('http://www.mozilla.org/products/firefox')" height="15" width="94" />
</p>
<p>
Web Chat Powered by WillyPS' <a href="javascript:;" onclick="popup('http://gojirc.willyps.com')">GojIRC Front End 2.0</a>.
</p>
</div>
<script type="text/javascript">
//<![CDATA[
doWrite('sound');
//]]>
</script>
<iframe src="$vboptions[bburl]/chat.php?do=extendsession" width=0 height=0 frameborder=0></iframe>
</td>
</tr>
</table>
Next is the lib.js which includes the call to the XML file:
Code:
// =====================================================================
//
// { GojIRC Front End }
//
// Version: 2.0
// Author: WillyPS
// Web: gojirc.willyps.com
// Copyright (c) 2001 - 2004 WillyPS
//
// File: lib.js
// File Version: 1.0
// Description: Functions' library.
// File Author: WillyPS
//
// ----------------------------------------------------------------------
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// 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. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// =====================================================================
// ---------------------------------------------------------------------------
// COMMON JAVASCRIPT API
// ---------------------------------------------------------------------------
// Get an element by it's id
function get(id) {
return document.getElementById(id);
}
// Echo string
function echo(str) {
return document.write(str);
}
// Show element
function show(id) {
var st = '';
if (id == 'statusbox') { st = 'block'; }
else { st = 'inline'; }
if (typeof id == 'string'){
get(id).style.display = st;
}
else {
id.style.display = st;
}
}
// Hide element
function hide(id) {
if (typeof id == 'string'){
get(id).style.display = "none";
}
else {
id.style.display = "none";
}
}
// Process irc commands.
function command(cmd) {
get('jchat').processJInput(cmd);
}
// Retrive values (own nick, highlithed nick, current channel)
function read(str) {
if (typeof get('jchat') != 'undefined') {
return get('jchat').readJOutput(str);
}
else { return f; }
}
// Play Sound.
// Short for playSound() in fsapi mod.
function play(soundObj) {
if (SoundMod) {
playSound(soundObj);
}
}
// Create <param> tag.
function param(name,value) {
echo('<param name="'+name+'" value="'+value+'" />');
}
// Reset a var's value to blank
// Support multiple values (comma separated list).
function rezet() {
var arg = rezet.arguments;
for(i = 0; i < arg.length; i++) {
var type = typeof arg[i];
if (type == 'string') { arg[i] = '';}
else if (type == 'number') { arg[i] = 0; }
else if (type == 'array') { arg[i] = ['']; }
}
}
// Preload imgs
function preload() {
if(document.images) {
if(typeof document.pimg == 'undefined' || !document.pimg) {
document.pimg = new Array();
var pm = document.pimg.length, arg = preload.arguments;
for(i = 0; i < arg.length; i++) {
if (arg[i].indexOf('#') != 0) {
document.pimg[pm] = new Image();
document.pimg[pm++].src = arg[i];
}
}
}
}
}
// Open a pop-up window
function popup(url) {
window.open(url);
}
// Read datafile
function readFile(datafile) {
if (document.getElementById) {
Xml.open('GET',datafile,false);
Xml.send(null);
return Xml.responseText;
}
}
// ---------------------------------------------------------------------------
// SINGLE FUNCTIONS
// ---------------------------------------------------------------------------
// Concat array params into AppletParams
function concatParams(arr) {
if (_ns) {
AppletParams = AppletParams.concat(arr); // for sun's jvm
}
else {
AppletParams = arr.concat(AppletParams); // for msjvm
AppletParams = AppletParams.concat(arr); // for sun's jvm
}
}
//
function addParams(prm) {
// Add parameters from params.xml
if (prm == 'config' || prm == 'theme') {
var param, params = readFile(EngineDir+'parameters/default.xml').split('\n');
for (i = 0; i < params.length; i++) {
if (params[i].match('<param ')) {
param = params[i].match(/\x22.*\x22/g); // get values inside of comiles
if (param != null) {
param = param.toString(); // string it
param = param.replace(/\x22/g,''); // remove comiles
param = param.replace(/value=/,' => '); // replace attribute with delimiter1
concatParams([param]); // add to AppletParams[]
}
}
}
}
// Add theme params
if (prm == 'theme') {
var param, params = readFile(ThemeDir+'params.theme.xml').split('\n');
for (i = 0; i < params.length; i++) {
if (params[i].match('<param ')) {
param = params[i].match(/\x22.*\x22/g); // get values inside of comiles
if (param != null) {
param = param.toString(); // string it
param = param.replace(/\x22/g,''); // remove comiles
param = param.replace(/value=/,' => '); // replace attribute with delimiter1
concatParams([param]); // add to AppletParams[]
ThemeParams[ThemeParams.length] = param;
}
}
}
}
// Label wordings from lang file
if (prm == 'lang') {
// Use Language[] because for some reason Lang[] doesn't work here.
for (i = 0; i < (Language.length -1); i++) {
if (Language[i].match(/^Applet_/)) {
var lparam = Language[i].replace(/^Applet_/,'');
lparam = lparam.split(delimiter1);
if (lparam[0] == 'FieldNameQuitMsg') {
lparam[1] += ' ? GojIRC ['+ GoVersion +'] ? http://gojirc.willyps.com ?';
}
concatParams([lparam[0]+' => '+lparam[1]]);
}
}
}
}
// Add resquested FilterKeys & Vals to FilterParams[].
function addFilter(filt,ext) {
ext = ext ? ext : '.gif'; // no extension supplied, use .gif
var loops = (filt[filt.length -1] == '' || filt[filt.length -1] == ' ') ? filt.length -1 : filt.length ;
for (i = 0; i < loops; i++) {
var tmp = filt[i].split(delimiter1);
var sname = tmp[0];
var svals = tmp[1].split(/\x20/);
for (j = 0; j < svals.length; j++) {
FilterParams[0] += ' '+svals[j]; // Add all available keys
FilterParams[1] += ' '+sname+ext; // Add all names for keys
}
}
}
// Create Lang[] vars.
function doLang(arr){
var lang;
if (typeof arr == 'object') {
for(i = 0; i < (arr.length -1); i++) {
lang = arr[i].split(delimiter1);
if (typeof lang[1] == 'undefined') {
lang[1] = '';
}
Lang[lang[0]] = unescape(lang[1]);
}
}
}
// Status icon actions when double-clicked.
function statusAction(action) {
if (AwayOn) {
gojirc('away');
}
else { gojirc('quit'); }
}
// Status image change.
function statusImg(event) {
if (Theme && (DisplayStatus == '1')) {
var sicon = get('status-icon');
if (event == 'disconnex') {
sicon.src = ImgStatus[0].src;
sicon.title = Lang['Status_IconDisconnected'];
}
else if (event == 'connex') {
sicon.src = ImgStatus[1].src;
sicon.title = Lang['Status_IconConnected'];
}
else if (event == 'away') {
sicon.src = ImgStatus[2].src;
sicon.title = Lang['Status_IconAway'];
}
}
}
// Check connex.
// Check if user is connected to the IRC.
function connex() {
if (jout) { // 2.7.x and up only
// Connected?
try {
// connected
if (read('%$N') == '') { return f; }
// not connected
else { return read('%$N'); }
}
catch (e) {
// Stop ReadJOutput error after 3 loops to prevent crashes.
if ((typeof errNoReadJOutput != 'undefined') && (errNoReadJOutput > 2)) {
EnableReadJOutput = "0";
jout = f;
return jout;
}
else {
e.filename = (typeof e.filename == 'undefined') ? document.location : e.filename;
errNoReadJOutput++;
return getError('js',e.name,e.message,e.lineNumber,e.filename,'This error could be related with:\n- jIRC version
incompatibility. Set EnableReadJOutput to cero in config.\n- the applet did not loaded. Check all paths and files are correct.');
}
}
}
// 2.6.0 and older
else { return t; }
}
// Check selected nickname.
function sNick() {
if (jout) { // 2.7.x and up only
thissnick = '';
thissnick = read('%$HN');
// selected nickname?
if (thissnick == x || thissnick == '') { return f; }
// seleted nick
else { return thissnick; }
}
// 2.6.0 support
else { return t; }
}
// Saves a window session log.
function goLog(ref,event) {
if (ref == 'dostat') {
statuslog[statuslog.length] = event; // add to log
return t;
}
else {
for (i = 0, mystatuslog = ''; i < statuslog.length; i++) {
mystatuslog += statuslog[i]+'\n'; // add to active log
}
return mystatuslog;
}
}
// Set IRC Staus messages.
function doStatus(msg) {
if (DisplayStatus == '1') {
var statusmsg = get('status-msg'); //var statusmsg = get('status-msg').childNodes[0];
// add time stamp
if (TimeStamp == '1') {
getUserTime();
msg = stamp + msg;
}
// apply msg to status
statusmsg.innerHTML = msg; //statusmsg.nodeValue = msg;
// add to historial
goLog('dostat',statusmsg.innerHTML);
}
}
// Create HTML elements.
function doWrite(type,arg) {
// Sound object
if (type == 'sound' && (EnableSound == '1')) {
// If modules detected, create sound objects.
if (SoundMod) { doSoundObj(); }
// No module present
else { getError('cfg','','No sound module installed or detected!\n\nIf you want to use sounds in GojIRC, install a sound\nmodule (e.g. Flash
Sound) in the Modules section of config.\nOtherwise, consider one of these values for EnableSound\nwich doesn\'t require a sound module:\n\n0\tDisable
sounds\n2\tUse Only Old Load Sound + Applet Sounds\n3\tUse Only Applet Sounds\n\nSet one of the above values in EnableSound in config.'); }
}
// Menubar
if (((type == 'menu') || (type == 'menubar')) && (typeof Menubar == 'object')) {
doMenu(Menubar,'runCmd','gojirc');
}
// Status bar
if (((type == 'status') || (type == 'statusbar')) && (DisplayStatus == '1')) {
StatusOn = t;
echo(
'<div id="statusbox">'+
'<table id="status">'+
'<tr>'+
'<td width="3%" id="status-left">'
);
if (Modules.toString().match('myoptions')) {
echo('<img alt="[opts]" title="'+Lang['Menu_MyOptions']+'" onclick="myo_options()" style="cursor: pointer;"
src="'+ModDir+'myoptions/options.gif" />');
}
echo(
'</td>'+
'<td width="94%" id="status-center">'+
'<div id="status-msg">GojIRC Front End '+GoVersion+' by WillyPS</div>'+
'</td>'+
'<td width="3%" id="status-right">'+
'<img alt="'+Lang['Text_Status']+'" id="status-icon" ondblclick="statusAction()" src="'+ImgStatus[1].src+'" />'+
'</td>'+
'</tr>'+
'</table>'+
'</div>'
);
}
// Quick bar
if ((type == 'quick') || (type == 'quickbar')) {
QuickOn = t;
echo(
'Nick: <a href="javascript:gojirc(\'newnick\')" id="quick_nick">No nick</a>'
);
}
// No Java alt text
if (type == 'nojava') {
echo(
'<div style="text-align: center;">'+
'<div style="margin: 20px 5px 5px;">'+
'<span style="font-size: 16px; font-weight: bold;">'+Lang['Text_NoJavaTitle']+'</span><br /><br />'+
'<img src="classes/applet_images/duke.gif" alt="Duke says: Bye!" width="55" height="68" /><br /><br
/>'+Lang['Text_NoJavaConsider']+'<br /><br />'+
'<div style="margin-left: 20%; text-align: left;">'+Lang['Text_NoJavaOpt']+'<br /></div>'+
'</div>'+
'</div>'
);
}
// Applet/Object tag
if ((type == 'applet') || (type == 'object')) {
if (type == 'applet') {
alert(type);
if (arg == 'close') { echo('</applet>'); }
else {
rezet(AppletParams);
echo('<applet id="'+jid+'" archive="'+archive+'" codebase="'+codebase+'" code="'+codeclass+'" MAYSCRIPT>');
doWrite('appletparams');
doWrite('nojava');
}
}
else {
if (arg == 'close') { echo('</object>'); }
else {
rezet(AppletParams);
echo('<object id="'+jid+'" archive="'+archive+'" codebase="'+codebase+'" classid="java:'+codeclass+'"
codetype="application/java">');
doWrite('appletparams');
doWrite('nojava');
}
}
}
// Chat
if (type == 'chat') {
var chatopentag = '', chatclosetag = '';
if (arg == 'obj' || arg == 'object') {
chatopentag = '<object classid="java:'+codeclass+'" codetype="application/java"';
chatclosetag = '</object>';
}
else {
chatopentag = '<applet code="'+codeclass+'" MAYSCRIPT';
chatclosetag = '</applet>';
}
if (jout) {
chatopentag += ' codebase="'+codebase+'"';
}
chatopentag += ' id="'+jid+'" archive="'+archive+'">';
echo(chatopentag);
doWrite('appletparams');
doWrite('nojava');
echo(chatclosetag);
}
// Applet Params
if (type == 'appletparams') {
// CABBASE
if (arg == 'obj' || arg == 'object') {
for (i = 0, tmp = '', _cabbase = cabbase.split(/\x2C/); i < _cabbase.length; i++) {
tmp += 'classes/'+_cabbase[i]+',';
}
cabbase = tmp.slice(0, tmp.length -1);
param('CABBASE',cabbase);
}
else { param('CABBASE',cabbase); }
// Filter Params
if (typeof FilterParams == 'object') {
concatParams(FilterParams);
}
// Sound params
if (EnableSound) {
// disabled
if (EnableSound == '0') {
concatParams(['AllowSound => false','AllowJoinSound => false','AllowLeaveSound => false','DisplaySoundControl => false']);
}
// enable
else if (EnableSound != '0') {
concatParams(['AllowSound => true','AllowJoinSound => true','AllowLeaveSound => true','DisplaySoundControl => true']);
}
}
// URL strings
if (ReqNickname) {
ParamNickName = ReqNickname;
concatParams(['NickName => '+ReqNickname]);
}
if (DirectStart) {
var connex = DirectStart ? 'true' : 'false';
ParamDirectStart = (connex == 'true') ? '1' : '0';
concatParams(['DirectStart => '+connex]);
}
// Config.js
if (LoginCmd) {
concatParams(['NickAuthString => '+LoginCmd.replace(/^\x2F/,'')]);
}
if (ProfileUrl != '') {
concatParams(['UserProfileURL => '+ProfileUrl]);
}
// Create channel params from Channels[]
// To dinamicly add channels, do it in the channel drop-down creation,
// to avoid duplication in the applet's channel drop-down.
if (typeof Channels == 'object') {
var ChannelsTmp = new Array();
for (i = 0, j = 1; i < (Channels.length -1); i++, j++) {
tmp = Channels[i].split(delimiter1);
ChannelsTmp[i] = 'Channel'+ j +' => '+tmp[0].replace(/^\x23/,'');
}
concatParams(ChannelsTmp);
}
// Add server params from Servers[] to AppletParams[]
// Needs to be added and not to create params directly from here,
// because localhost then would not be added (if DevMode).
if (typeof Servers == 'object') {
var ServersTmp = new Array();
// If DevMod, add localhost for testing porpouses
if (DevMode) {
Servers = [localhost].concat(Servers);
}
for (i = 0, j = 1; i < (Servers.length -1); i++, j++) {
ServersTmp[i] = 'ServerName'+ j +' => '+ Servers[i];
}
concatParams(ServersTmp);
}
// Applet params
if (typeof AppletParams == 'object') {
// General applet params
for (i = 0, j = 0; i < (AppletParams.length -1); i++) {
if (AppletParams[i] != '') {
var aparam = AppletParams[i].split(delimiter1);
// If no value, add a blank one to prevent problems.
if (typeof aparam[1] == 'undefined') {
aparam[1] = '';
}
// Get some params values
if (aparam[0] == 'AliasList') { ParamAliasList = aparam[1]; } // aliases
if (aparam[0] == 'NickName' && !ReqNickname) { ParamNickName = aparam[1]; } // nick
if (aparam[0] == 'RealName') { ParamRealName = aparam[1]; } //realname
if (aparam[0] == 'DirectStart' && !DirectStart) { // direct start
ParamDirectStart = (aparam[1].toLowerCase() == 'true') ? '1' : '0';
}
// RealName
if (aparam[0] == 'RealName') {
aparam[1] += ' ? GojIRC ['+GoVersion+'] ? http://gojirc.willyps.com ?';
}
param(aparam[0],aparam[1]);
}
}
}
}
}
// Menu builder.
// menu array, <select> function, <option> function
function doMenu(menu,selfunc,optfunc) {
for (i = 0; i < menu.length; i++) {
if (menu[i] == '') { break; } // stop loop if blank entry (wich is supposed to be the end)
var tmp = menu[i].split(delimiter1);
var tag = tmp[0]; // select or option
var args = tmp[1]; // tag arguments
var option;
var props;
if (args) {
var prop;
tmp = args.split(delimiter2);
option = tmp[0]; // tag id, title, hr or cmd
// lang and arguments
if (typeof tmp[1] != 'undefined') { prop = tmp[1]; }
else { prop = undefined; }
}
if (prop) {
props = prop.split(delimiter3);
}
doOption(tag,option,props,selfunc,optfunc);
}
}
// Build menubar's menus.
function doOption(tag,option,props,selfunc,optfunc) {
// Tag <select>
if (tag == 'select' || tag == 'menu') {
if (option == 'open') {
echo('<select size="1" id="'+props+'" onchange="'+selfunc+'(this.id)">');
pastselect = props;
}
else if (option == 'close'){
echo('</select>');
get(pastselect).selectedIndex = 0;
}
}
// Tag is <option>
else if (tag == 'option' || tag == 'item') {
// Get the value of the respective asosiative Lang[]
if (typeof props != 'undefined') {
var txt;
// check if it's a Lang[] asosiative
if (props[0].match(/^(Lang\[{1})/g)) {
txt = props[0].replace(/(Lang\[\x27)|(\x27\])/g,'');
txt = eval('Lang[\''+txt+'\']');
}
// Use user custome...
else { txt = props[0]; }
}
// Drop-down title
if (option == 'title') {
echo('<option value="none" selected="selected">'+txt+'</option>');
}
// Command option
else if (option == 'cmd') {
if (props[0] == 'channels') { // channels' list.
// Requested channel by URL string
if (ReqChannel) { Channels = ReqChannel.concat(Channels); }
// Use specified channels in Channels[] in config.js...
for (j = 0; j < (Channels.length - 1); j++) { // Used j to avoid conflicts with i in doOption().
var ch = Channels[j].split(delimiter1);
if ((typeof ch[1] == 'undefined') || (ch[1] == '') || (ch[1] == ' ') || (ch[1] == x)) { ch[1] = ch[0]; }
echo('<option value="javascript:'+optfunc+'(\'channel\',\''+ch[0]+'\')"
onmouseover="window.status=\''+ch[1]+'\';return true;" onmouseout="window.status=\''+Lang['Text_WinStatus']+'\';return true;">'+ch[1]+'</option>');
}
}
// double argument
else if (typeof props[2] != 'undefined' && (props[2] || props[2] != '')) {
echo('<option value="javascript:'+optfunc+'(\''+props[1]+'\',\''+props[2]+'\')" id="opt_'+props[1]+'_'+props[2]+'"
onmouseover="window.status=\''+txt+'\';return true;" onmouseout="window.status=\''+Lang['Text_WinStatus']+'\';return true;">'+txt+'</option>');
}
// single argument
else {
// Don't write option if no valet config (in config.js)
if (props[1] == 'login' && LoginCmd == '') { return t; }
if (props[1] == 'register' && RegCmd == '') { return t; }
if (props[1] == 'status' && DisplayStatus == '0') { return t; }
if (props[1] == 'profile' && ProfileUrl == '') { return t; }
if (props[1] == 'channelinfo' && ChannelinfoCmd == '') { return t; }
// Write every option
else { echo('<option value="javascript:'+optfunc+'(\''+props[1]+'\')" id="opt_'+props[1]+'"
onmouseover="window.status=\''+txt+'\';return true;" onmouseout="window.status=\''+Lang['Text_WinStatus']+'\';return true;">'+txt+'</option>'); }
}
}
// Horizontal rule
else if (option == 'hr') {
if (typeof props[0] == 'undefined') { props[0] = 'mid'}
var hr = props[0];
hrcount++;
if (hr == 'thiner') { hr = "--------------"; }
else if (hr == 'thin') { hr = "----------------"; }
else if (hr == 'mid') { hr = "------------------"; }
else if (hr == 'wide') { hr = "--------------------"; }
else if (hr == 'wider') { hr = "----------------------"; }
echo('<option value="none" id="hr_'+hrcount+'" onmouseover="window.status=\' \';return true;"
onmouseout="window.status=\''+Lang['Text_WinStatus']+'\';return true;">'+hr+'</option>');
}
}
}
// Add option to <select> menu
function addOption(menu,option,props,optfunc,position) {
// Position ???
if ((typeof position != 'undefined') && (position != '')) {
var tomove = new Array();
// In place of option...
if (isNaN(position)) {
var pid = position; // position is id
for (i = 0; i < get(menu).options.length; i++) {
if (get(menu).options[i].id == pid) { // match place id
position = i; // position number
// backup options...
for (j = 0; i < get(menu).options.length; i++, j++) {
tomove[j] = get(menu).options[i];
}
// add option
get(menu).options[position] = doAddOption(menu,option,props,optfunc);
// readd backuped options...
for (j = 0; j < tomove.length; j++) {
position++;
get(menu).options[position] = tomove[j];
}
}
}
}
// In place number...
else {
for (i = 0; i < get(menu).options.length; i++) {
if (i == position) { // match place number
// backup options...
for (j = 0; i < get(menu).options.length; i++, j++) {
tomove[j] = get(menu).options[i];
}
// add option
get(menu).options[position] = doAddOption(menu,option,props,optfunc);
// readd backuped options...
for (j = 0; j < tomove.length; j++) {
position++;
get(menu).options[position] = tomove[j];
}
}
}
}
}
// No position specified, add to the end.
else {
get(menu).options[get(menu).length] = doAddOption(menu,option,props,optfunc);
}
}
// Do add option to <select> menu
function doAddOption(menu,option,props,optfunc) {
var defaultSelected = t, selected = f, optionName, txt;
props = props.split(delimiter3);
// Get the value of the respective asosiative Lang[]
if (typeof props != 'undefined') {
// Check it's a Lang[] asosiative index.
if (props[0].match(/^(Lang\[{1})/g)) {
txt = props[0].replace(/(Lang\[\x27)|(\x27\])/g,'');
txt = eval('Lang[\''+txt+'\']');
}
// Use user custome...
else { txt = props[0]; }
}
// Command
if (option == 'cmd') {
// double argument
if (typeof props[2] != 'undefined' && (props[2] || props[2] != '')) {
optionName = new Option(txt, 'javascript:'+optfunc+'(\''+props[1]+'\',\''+props[2]+'\')', defaultSelected, selected)
optionName.id = 'opt_'+props[1]+'_'+props[2];
}
// single argument
else {
optionName = new Option(txt, 'javascript:'+optfunc+'(\''+props[1]+'\')', defaultSelected, selected)
optionName.id = 'opt_'+props[1];
}
}
// Horizontal rule
else if (option == 'hr') {
if (typeof props[0] == 'undefined') { props[0] = 'mid'}
var hr = props[0];
hrcount++;
if (hr == 'thiner') { hr = "--------------"; }
else if (hr == 'thin') { hr = "----------------"; }
else if (hr == 'mid') { hr = "------------------"; }
else if (hr == 'wide') { hr = "--------------------"; }
else if (hr == 'wider') { hr = "----------------------"; }
optionName = new Option(hr, 'none', defaultSelected, selected)
optionName.id = 'hr_'+hrcount;
}
return optionName;
}
// Set a specified message by the user for different actions.
function setMsg(option) {
var msg;
// Get <option> text to use it on prompt message.
// This will make the message to be totaly translated.
if (get('opt_'+option)) {
option = get('opt_'+option).text;
option = option.toLowerCase();
}
// Prompt message.
if ((msg = prompt(Lang['Prompt_Set1'] +' '+ option +' '+ Lang['Prompt_Set2'],''))) {
return msg;
}
else { return f; }
}
// Nick message for: Whois, Ping, Finger, Client version/info,
// Time user, Ignore/activate, Give/Remove voice/@p, Kick (fast/reason), Ban
function setNick(option) {
var nick;
// Get <option> text to use it on prompt message.
// This will make the message to be totaly translated.
if (get('opt_'+option)) {
option = get('opt_'+option).text;
option = option.toLowerCase();
}
// Use selected nick.
if (sNick()) { nick = thissnick; }
else { nick = ''; } // no selected nick
// Prompt message.
if ((nick = prompt(Lang['Prompt_Nick1'] +' '+ option +' '+ Lang['Prompt_Nick2'],nick))) {
return nick;
}
else { return f; }
}
// On Mouse Over.
function mOver(act,id) {
if (act == 'winstatus') {
window.status = Lang['Text_WinStatus'];
}
return t;
}
// On Mouse Out
function mOut(act,id) {
return t;
}
// Change PrompNickType
// To be used to alternate prompt when primary condition isn't met.
function changePromptNT(value,cmd,option) {
if (connex()){
if (!PromptNickTypeAuto && ((value) && (value != ''))) {
PromptNickTypeAuto = t;
PromptNickTypeBak = PromptNickType;
PromptNickType = value;
if (option) {
gojirc(cmd,option);
}
else { gojirc(cmd); }
}
else {
PromptNickTypeAuto = f;
PromptNickType = PromptNickTypeBak;
PromptNickTypeBak = '';
}
}
// If no connex... dumb.
else { dumb('connex'); }
}
// Auto Away system.
function startIdle() {
// Check auto away is enable.
if (IdleTime != '') {
UserIdleTime += 1;
// Activate auto away.
if ((connex()) && (UserIdleTime == IdleTime) && !AwayOn) {
command('/me '+ Lang['Action_AwayOn'] +' '+ bks +' '+ AwayIdleReason +' '+ bke);
command('/away '+ AwayIdleReason);
play('bip');
AutoAwayOn = t;
UserIdleTime = 0;
clearTimeout(timer_idle);
}
// Continue trying to count user idle until
// it's the same time in IdleTime var.
else if ((connex()) && !AutoAwayOn && !AwayOn) {
timer_idle = setTimeout('startIdle()',1000);
}
}
}
// Stops idle count and turn off away mode.
function stopIdle() {
// Deactivate auto away if enabled and running.
if ((IdleTime != '') && AutoAwayOn) {
command('/me '+ Lang['Action_AwayOff'] +' '+ bks +' '+ AwayIdleReason +' '+ bke);
command('/away');
play('bip');
AutoAwayOn = f;
UserIdleTime = 0;
}
}
/*/ Create Chat # in dev #
function createChat() {
var prop = document.createElement('applet');
prop.setAttribute('id','jchat');
prop.setAttribute('codebase','classes');
prop.setAttribute('code','Chat.class');
prop.setAttribute('cabbase','jirc_mss.cab,resources.cab');
prop.setAttribute('archive','jirc_nss.zip,resources.zip');
prop.setAttribute('width','100');
prop.setAttribute('height','100');
var chat = document.getElementById('chat');
chat.appendChild(prop);
//checkAppletLoad(); // exec applet check.
}*/
// Init runtimes.
// Executions at chat startup.
function runInit() {
if (!get("opt_about")) {if(!noabout){noabout=t;getError('NoAbout');}}
// checks if the browser is Java-enabled.
if (_java) {
checkAppletLoad(); // exec applet check.
}
// no java
else if (!_java) {
alert(Lang['Alert_NoJava']);
jout = f;
EnableErrorReport = '2';
doWrite('nojava');
document.close();
hide('body');
}
}
// Last runtimes.
// Executions at chat quit.
function runLast() {
if (typeof winhelp != 'undefined' &&winhelp) {
winhelp.close();
}
if (typeof winmyoptions != 'undefined' && winmyoptions) {
winmyoptions.close();
}
clearTimeout(timer_checkstatus);
clearTimeout(timer_getusertime);
clearTimeout(timer_awaycount);
}
// ---------------------------------------------------------------------------
// COMPLEX FUNCTIONS
// ---------------------------------------------------------------------------
// Get time.
// Retrives User's Time (HH:MM).
function getUserTime() {
var date = new Date(); // get date object.
var hours = date.getHours(); // get hours.
var minutes = date.getMinutes(); // get mins.
// if hour is 0-9, add zero before it.
if (hours < 10) {
hours = '0'+ hours;
}
// if mins is 0-9, add zero before it.
if (minutes < 10) {
minutes = '0'+ minutes;
}
// get hours and mins and define user time.
var UserTime = hours +':'+ minutes;
// do resulting time stamp
stamp = bks + UserTime + bke +' ';
}
// Dumb points.
// Allows the customization of Status Bar Messages
// depending of the dumb actions of the user.
function dumb(type) {
if (type == 'connex') {
DumbConnex += 1;
if (DumbConnex == 1) {
doStatus(Lang['Status_DumbConnex1']);
}
else if (DumbConnex == 2) {
doStatus(Lang['Status_DumbConnex2']);
}
else if (DumbConnex == 3) {
doStatus(Lang['Status_DumbConnex3']);
}
else if (DumbConnex == 4) {
doStatus(Lang['Status_DumbConnex4']);
}
else {
doStatus(Lang['Status_DumbConnex5']);
alert(Lang['Status_DumbConnex5']);
}
play('tonk');
}
if (type == 'selnick') {
DumbSelectNick += 1;
if (DumbSelectNick > 2) {
alert(Lang['Alert_SelectNick']);
DumbSelectNick = 1;
}
else {
command('/notice %$N '+ Lang['Alert_SelectNick']);
play('fail');
}
}
if (type == 'samenick') {
DumbSameNick += 1;
if (DumbSameNick > 2) {
alert(Lang['Alert_SameNick']);
DumbSameNick = 1;
}
else {
command('/notice %$N '+ Lang['Alert_SameNick']);
play('fail');
}
}
}
// Applet check.
// Check if applet loads succesfully.
function checkAppletLoad() {
if (!get("opt_about")) {if(!noabout){noabout=t;getError('NoAbout');}}
// If document.jchat exist and is active...
if (_ie) {
if (get('jchat')) {
// Strech chat box if enabled.
if (StretchChat == '1') {
get('chatbox').style.margin = '0';
get('chatbox').style.width = '100%';
get('chatbox').style.height = '85%';
get('statusbox').style.width = '100%';
get('status').style.width = '100%';
get('body').style.height = '100%';
get('jchat').style.width = '100%';
get('jchat').style.height = _resH / 1.6;
}
clearTimeout(timer_appletload);
checkStatus(); // exec GojIRC status
doStatus(Lang['Status_JChatLoaded']);
play('load');
isLoaded = t;
}
else {
timer_appletload = setTimeout('checkAppletLoad()',250);
}
}
else {
setTimeout('checkStatus()',1000); // start status check
setTimeout('doStatus(Lang["Status_JChatLoaded"])',1000);
setTimeout('play("load")',1000);
isLoaded = t;
}
}
// GojIRC Status bar.
// Change messages and status icons
// depending on user actions and GojIRC status.
function checkStatus() {
if (!get("opt_about")) {if(!noabout){noabout=t;getError('NoAbout');}}
// Connected?
if (connex()) {
FirstConnection += 1; // first connection after last desconnection
if (FirstConnection == 1) { // first connection?
// status actions...
if (DisplayStatus == '1') {
if (DumbConnex >= 3) { // if user was dumb to connex, do this:
doStatus(Lang['Status_FirstConnexDumb']);
}
else { // normal connection.
// 2.7.x only
if (jout) { mynick = read('%$N'); }
// 2.6.0 support
else { mynick = Lang['Status_FirstConnex2']; }
doStatus(Lang['Status_FirstConnex1'] +' '+ mynick +'. GojIRC \@ <a href=\"http://gojirc.willyps.com\"
target=\"_blank\" title=\"Visit GojIRC site\">gojirc.willyps.com</a>');
}
statusImg('connex'); // change icon.
DumbConnex = 0; // reset dumb connex.
}
if (jout) { play('connex'); } // play sound.
if (QuickOn) { get('quick_nick').innerHTML = mynick; }
}
}
// Not connected?
else {
// use disconnected status icon and img title.
statusImg('disconnex');
// if was connected
if (FirstConnection != 0) {
// status actions...
if (DisplayStatus == '1') {
if (DumbConnex >= 3) { // if user was dumb to connex, do this:
doStatus(Lang['Status_DisconnexDumb']);
}
else { // normal connection.
doStatus(Lang['Status_Disconnex']);
}
}
AwayOn = f; // reset AwayOn to its default value
get('opt_away').text = Lang['Menu_AwayOn'];
play('quit'); // play sound
FirstConnection = 0; // reset value.
}
}
// keep checking GojIRC status every x time:
timer_checkstatus = setTimeout('checkStatus()',250);
}
// Away count system.
function startAwayCount(mode) {
// get shure his connected by...
if ((mode == 'count') && AwayOn) { // mode and AwayOn values
// add one sec on every exec.
AwayTimeSecs += 1;
AwayTime2 += 1;
// if 60 secs reached, add one min and reset secs.
if (AwayTimeSecs == 60) {
AwayTimeMins += 1;
AwayTimeSecs = 0;
}
// if 60 mins reached, add one hour and reset secs and mins.
if (AwayTimeMins == 60) {
AwayTimeHrs += 1;
AwayTimeMins = 0;
AwayTimeSecs = 0;
}
// If Away Announcement is active and AwayTime2 reached the specified
// time, then send the public away announcement.
if (AwayAnnounceOn && (AwayTime2 == AwayAnnounceTime)) {
getUserTime();
if (AwayTimeHrs > 0) {
command('/me '+ Lang['Action_AwayOn'] +' '+ bks +' '+ Lang['Action_AwayReason'] + AwayReasonSpace + AwayReasonMsg +' '+ bke
+' '+ bks +' '+ AwayTimeHrs +' '+ Lang['Status_Hrs'] +', '+ AwayTimeMins + ' '+ Lang['Status_Mins'] +', '+ AwayTimeSecs +' '+ Lang['Status_Secs'] +' '+ bke);
}
else {
command('/me '+ Lang['Action_AwayOn'] +' '+ bks +' '+ Lang['Action_AwayReason'] + AwayReasonSpace + AwayReasonMsg +' '+ bke
+' '+ bks +' '+ AwayTimeMins + ' '+ Lang['Status_Mins'] +', '+ AwayTimeSecs +' '+ Lang['Status_Secs'] +' '+ bke);
}
AwayTime2 = 0; // reset value.
}
// away status bar messages...
if (AwayTimeHrs > 0) { // If more than zero hours reached, use this message.
doStatus(Lang['Status_AwayOn'] +' \"'+ AwayReasonMsg +'\". '+ AwayTimeHrs +' '+ Lang['Status_Hrs'] +', '+ AwayTimeMins +' '+
Lang['Status_Mins'] +', '+ AwayTimeSecs +' '+ Lang['Status_Secs'] +'.');
}
else { // else, use this one.
doStatus(Lang['Status_AwayOn'] +' \"'+ AwayReasonMsg +'\". '+ AwayTimeMins +' '+ Lang['Status_Mins'] +', '+ AwayTimeSecs +' '+
Lang['Status_Secs'] +'.');
}
// keep exec every second!
timer_awaycount = setTimeout('startAwayCount("count")',1000);
}
else { // if it doesn't met the requirements, stop counting and reset values.
clearTimeout(timer_awaycount);
AwayTimeSecs = 0;
AwayTimeMins = 0;
AwayTimeHrs = 0;
AwayTime2 = 0;
AwayAnnounceOn = f;
}
}
// Prompt for Announce
function runAwayAnnounce() {
var awayannouncetimetyped = prompt(Lang['Prompt_AwayAnnounce'],pastawaytime);
// check if alpha or alpha-num entered.
if (!isNaN(awayannouncetimetyped)) {
// if not canceled, activate away plus announce.
if (awayannouncetimetyped != x) {
if ((awayannouncetimetyped != '') || (awayannouncetimetyped != ' ')) {
AwayAnnounceTime = awayannouncetimetyped;
AwayAnnounceOn = t;
}
pastawaytime = awayannouncetimetyped;
return t;
}
else { // user canceled, abort away.
return f;
}
}
else { // tell user to enter a numeric value
alert(Lang['Alert_AwayAnnounceTime']);
return runAwayAnnounce();
}
}
// Ignore list manager
function ignore(act,nick) {
// search the list
if (act == 'find') {
for (i = 0; i < ignorelist.length; i++) {
if ((typeof ignorelist[i] != 'undefined') && (ignorelist[i].match(nick,'i'))) {
return ignorelist[i];
break;
}
}
}
// Add to list
else if (act == 'add') {
ignorelist[ignorelist.length] = nick; // add to array
doStatus(Lang['Status_Ignore'] +' '+ nick +'.');
pastignore = nick; // last ignore
}
// Delete from list
else if (act == 'delete') {
for (i = 0; i < ignorelist.length; i++) {
if ((typeof ignorelist[i] != 'undefined') && (ignorelist[i].match(nick,'i'))) {
delete ignorelist[i]; // delete index from the array
doStatus(Lang['Status_Activate'] +' '+ nick +'.');
pastignore = nick; // last activate
break;
}
}
}
}
// ---------------------------------------------------------------------------
// SOME STUFF
// ---------------------------------------------------------------------------
// Some Declarations...
GoVersion = '2.0 RC3';
aboutmsg = 'About GojIRC Front End\n\nGojIRC Front End version '+GoVersion+'\nCopyright (c) 2001-2004 WillyPS\nhttp://gojirc.willyps.com\n\nGojIRC Front End
comes with ABSOLUTELY NO\nWARRANTY. This is free software, and you are\nwelcome to redistribute it under certain conditions.\nPlease, refer to the
license.txt file for more info.'+LineBrake+'Chat owner: '+OwnerName+'\nContact e-mail: '+WebmasterEmail+'\nSite address: '+HomepageUrl+LineBrake;
// Prelead components...
if (DisplayStatus == '1') { // Status imgs
ImgStatus[0] = new Image();
ImgStatus[0].src = ThemeDir +'disconnex.gif';
ImgStatus[1] = new Image();
ImgStatus[1].src = ThemeDir +'connex.gif';
ImgStatus[2] = new Image();
ImgStatus[2].src = ThemeDir +'away.gif';
}
// ---------------------------------------------------------------------------
// EXECs
// ---------------------------------------------------------------------------
doLang(Language); // create Language[]
addParams('lang'); // lang file
addParams('theme');
addParams('config'); // params.xml file
addFilter(FilterKeysAndVals); // config.js filters
window.onload = runInit;
window.onunload = runLast;
window.onblur = startIdle;
window.onfocus = stopIdle;
window.defaultStatus = Lang['Text_WinStatus'];
The following is the function in lib.js making call to xml File:
Code:
//
function addParams(prm) {
// Add parameters from params.xml
if (prm == 'config' || prm == 'theme') {
var param, params = readFile(EngineDir+'parameters/default.xml').split('\n');
for (i = 0; i < params.length; i++) {
if (params[i].match('<param ')) {
param = params[i].match(/\x22.*\x22/g); // get values inside of comiles
if (param != null) {
param = param.toString(); // string it
param = param.replace(/\x22/g,''); // remove comiles
param = param.replace(/value=/,' => '); // replace attribute with delimiter1
concatParams([param]); // add to AppletParams[]
}
Here is the XML file:
Code:
<?xml version="1.0"?>
<parameters>
<!-- Connection Related -->
<param name="NickName" value="Cavy Compendium Chat User" />
<param name="RealName" value="GojIRC User Cavy Compendium Chat" />
<param name="ServerPort" value="6667" />
<param name="UserName" value="$bbuserinfo[username]" />
<param name="HostName" value="jpilot" />
<param name="SocksAddress" value="" />
<param name="LicenseKey" value="v3:cavycompendium.com:8245569950230102224294323703820230025522606270733084936176424795322000355489466596964134808984183857372050536885065353580205103173037798985484442049424084">
<!-- GUI Sates Control -->
<param name="DirectStart" value="true" />
<param name="DisplayConfigChannel" value="false" />
<param name="DisplayConfigRealName" value="false" />
<param name="DisplayConfigPort" value="false" />
<param name="DisplayConfigMisc" value="false" />
<param name="DisplayConfigSocks" value="false" />
<param name="DisplayColorControl" value="true" />
<param name="DisplayAbout" value="false" />
<param name="RefreshColorCode" value="true" />
<param name="AllowURL" value="true" />
<param name="AllowShowURL" value="true" />
<param name="AllowHyperLink" value="true" />
<param name="isLimitedServers" value="true" />
<param name="isLimitedChannels" value="true" />
<param name="UseModeIcons" value="true" />
<param name="UserPrefixCommand" value="aohv" />
<param name="UserPrefixSymbol" value="!@%+" />
<param name="ScreenBufferPageSize" value="3" />
<param name="LogoGifName" value="IRClogo.gif" />
<param name="LogoWidth" value="77" />
<param name="LogoHeight" value="145" />
<param name="URLWindowName" value="popShow" />
<param name="PWindowHeight" value="200" />
<param name="PWindowWidth" value="400" />
<!-- Miscelaneous -->
<param name="WelcomeMessage" value="Welcome to the Cavy Compendium Chat!" />
<param name="AliasList" value="/m=/msg,/t=/topic,/n=/nick" />
<param name="AcceptCommands" value="true" />
<!-- 2.8 -->
<param name="UseImageButton" value="true" />
<param name="UserMenuList" value="Send File=/dccsend $bbuserinfo[username],Private Message=/msg $bbuserinfo[username],Ignore=/ignore $bbuserinfo[username],Whois=/whois $bbuserinfo[username],See User Profile=/showprofile $bbuserinfo[username]" />
<param name="AllowAddressDisplay" value="false" />
<param name="AllowDCCTransfer" value="true" />
<param name="CopyMethod" value="JVM" />
</parameters>
I hope this information helps without adding more to the problem. Thanks for any help you can give me.
|