View Single Post
  #4  
Old 12-02-2004, 08:02 PM
GraphicW GraphicW is offline
 
Join Date: Oct 2001
Location: Charleston, WV
Posts: 55
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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" />&nbsp;&nbsp;
        <img alt="W3C CSS" src="script/images/css.gif" onclick="popup('http://jigsaw.w3.org/css-validator/check/referer')" height="15" width="94" />&nbsp;&nbsp;
        <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.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01247 seconds
  • Memory Usage 1,987KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_code
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete