Ajax Shoutbox

Started by greentide, August 07, 2012, 11:18:16 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DarkWarrior

///////////session/////////////////
mysql_query("UPDATE users SET page=1 WHERE id = " . $CURUSER["id"]) or sqlerr(__FILE__,__LINE__);
///////////////////////////////////


look at  your user base in phpmyadmin to see if the line is there look at the query in there if not add it

rickandmary

it seems like it's part of another mod, i would comment it out or add that column to users table

greentide

#1
Hi there im trying to get this to work for a friend. The thing is im getting a mysql error.

QuoteSQL Error
Unknown column 'page' in 'field list'

in /home/****/www/shoutbox.php, line 19

here is the guide :)

.
create chat.php:

<h2>AJAX CHAT</h2>
<?
print("<form action=\"shoutbox.php\" method=\"post\" name=\"shoutform\" onsubmit=\"return sendShout(this);\">");

?>
<table cellspacing="0" cellpadding="5" width="100%"  >
<tr>
<td colspan="2" style="white-space: nowrap" width="100%" >

    <input type="text" name="shout" style="width: 83%"  MAXLENGTH="200" />
    <input type="submit" value="Send" />
    <INPUT TYPE="button" VALUE="Smiles" onClick="javascript:winop()">
   

</td>
</tr>

<tr>
<td >

    <div id="shoutbox" style="overflow: auto; height: 350px; width: 100%; padding-top: 0cm">
          Loading, please wait.....
    </div>
    </td>
    <td style="white-space: nowrap" valign="top" width="18%">
    <div id="wol">

        </div> 

</td>
</tr>
<?
print("</table>");
print("</form>");

?>


<div id="loading-layer" style="display: none; font-family: Lucida Sans Unicode; font-size: 11px; width: 200px; height: 50px; background: #EDFCEF; padding: 10px; text-align: center; border: 1px solid #000">
    <div style="font-weight:bold" id="loading-layer-text"><font color="red"> Sending, please wait.....</font></div><br />
    <img src="pic/loading.gif" border="0" />
</div>
<script language="javascript" type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript">
<!--

function winop()
{
windop = window.open("moresmiles.php?form=shoutform&text=shout","mywin","height=500,width=600,resizable=no,scrollbars=yes");
}

function sendShout(formObj) {

    /*if (postingShout) {
        alert('Sending, mesage.....')
        return false
    }*/

    Shout = formObj.shout.value

    if (Shout.replace(/ /g, '') == '') {
        alert('Please, write something!')
        return false
    }

    sb_Clear();

    var ajax = new tbdev_ajax();
    ajax.onShow ('');
    //ajax.onShow = function() { };
    var varsString = "";
    ajax.requestFile = "shoutbox.php";
    ajax.setVar("do", "shout");
    ajax.setVar("shout", escape(Shout));
    ajax.method = 'GET';
    ajax.element = 'shoutbox';
    ajax.sendAJAX(varsString);

    return false
}

function getShouts() {

    var ajax = new tbdev_ajax();
    ajax.onShow = function() { };
    var varsString = "";
    ajax.requestFile = "shoutbox.php";
    ajax.method = 'GET';
    ajax.element = 'shoutbox';
    ajax.sendAJAX(varsString);
    setTimeout("getShouts();", 10000);

    return false

}


function sb_Clear() {
    document.forms["shoutform"].shout.value = ''
    return true;
}

function getWOL() {

    var ajax = new tbdev_ajax();
    ajax.onShow = function() { };
    var varsString = "";
    ajax.requestFile = "online.php";
    ajax.method = 'GET';
    ajax.setVar("wol", 1);
    ajax.element = 'wol';
    ajax.sendAJAX(varsString);
    setTimeout("getWOL();", 10000);
    return false
}

function deleteShout(id) {

    if (confirm("Sure?")) {
        var ajax = new tbdev_ajax();
        ajax.onShow = function() { };
        var varsString = "";
        ajax.requestFile = "shoutbox.php";
        ajax.setVar("do", "delete");
        ajax.setVar("id", id);
        ajax.method = 'GET';
        ajax.element = 'shoutbox';
        ajax.sendAJAX(varsString);
    }
   
    return false

}
getShouts();
getWOL();

-->
</script>


Next, shoutbox.php

<?
require_once("include/bittorrent.php");
dbconn();
loggedinorreturn();
header("Content-Type: text/html; charset=utf-8");


if ($CURUSER["schoutboxpos"] == 'no')
{
echo '<table class=main align=center width=400 border=0 cellpadding=0 cellspacing=0><tr><td align=center class=embedded>
</br><h1>Sorry</h1><table width=300px border=1 cellspacing=0 cellpadding=10><tr><td class=text align=center>Yo are BAN from Shoutbox .</td></tr></table></td></tr></table>';

exit;
}

if ($CURUSER)
{
///////////session/////////////////
mysql_query("UPDATE users SET page=1 WHERE id = " . $CURUSER["id"]) or sqlerr(__FILE__,__LINE__);
///////////////////////////////////

}

function decode_unicode_url($str) {
    $res = '';

    $i = 0;
    $max = strlen($str) - 6;
    while ($i <= $max) {
        $character = $str[$i];
        if ($character == '%' && $str[$i + 1] == 'u') {
        $value = hexdec(substr($str, $i + 2, 4));
        $i += 6;

        if ($value < 0x0080) // 1 byte: 0xxxxxxx
            $character = chr($value);
        else if ($value < 0x0800) // 2 bytes: 110xxxxx 10xxxxxx
            $character =
                chr((($value & 0x07c0) >> 6) | 0xc0)
                . chr(($value & 0x3f) | 0x80);
        else // 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx
            $character =
                chr((($value & 0xf000) >> 12) | 0xe0)
                . chr((($value & 0x0fc0) >> 6) | 0x80)
                . chr(($value & 0x3f) | 0x80);
        } else
            $i++;

        $res .= $character;
    }

    return $res . substr($str, $i);
}

function convert_text($s)
{
$out = "";

for ($i=0; $i<strlen($s); $i++)
{
  $c1 = substr ($s, $i, 1);
  $byte1 = ord ($c1);
  if ($byte1>>5 == 6) // 110x xxxx, 110 prefix for 2 bytes unicode
  {
  $i++;
  $c2 = substr ($s, $i, 1);
  $byte2 = ord ($c2);
  $byte1 &= 31; // remove the 3 bit two bytes prefix
  $byte2 &= 63; // remove the 2 bit trailing byte prefix
  $byte2 |= (($byte1 & 3) << 6); // last 2 bits of c1 become first 2 of c2
  $byte1 >>= 2; // c1 shifts 2 to the right

  $word = ($byte1<<8) + $byte2;
  if ($word==1025) $out .= chr(168);                    // ?
  elseif ($word==1105) $out .= chr(184);                // ?
  elseif ($word>=0x0410 && $word<=0x044F) $out .= chr($word-848); // ?-? ?-?
  else
  {
    $a = dechex($byte1);
    $a = str_pad($a, 2, "0", STR_PAD_LEFT);
    $b = dechex($byte2);
    $b = str_pad($b, 2, "0", STR_PAD_LEFT);
    $out .= "&#x".$a.$b.";";
  }
  }
  else
  {
  $out .= $c1;
  }
}

return $out;
}

if ($_GET["do"] == "shout") {
    $shout = convert_text(urldecode(decode_unicode_url($_GET["shout"])));
    if ($shout == "clearshout" && get_user_class() >= UC_ADMINISTRATOR) {
        mysql_query("TRUNCATE TABLE shoutbox");
        die("Cleared!No messages!");
    }
    $sender = $CURUSER["id"];
    if (!empty($shout)) {
        $shout = preg_replace("/\/me /", $CURUSER["username"]." ", $shout);
$datee=time();
        mysql_query("INSERT INTO shoutbox (date, text, userid) VALUES (".implode(", ", array_map("sqlesc", array($datee, $shout, $sender))).")") or sqlerr(__FILE__,__LINE__);
    } else
        print("<script>alert('Write message');</script>");
} elseif ($_GET["do"] == "delete" && get_user_class() >= UC_MODERATOR && is_valid_id($_GET["id"])) {
    $id = $_GET["id"];
    mysql_query("DELETE FROM shoutbox WHERE id = $id") or sqlerr(__FILE__,__LINE__);
}
$res = mysql_query("SELECT shoutbox.*, users.username, users.warned, users.id as uid, users.class FROM shoutbox INNER JOIN users ON shoutbox.userid = users.id ORDER BY id DESC LIMIT 35") or sqlerr(__FILE__,__LINE__);

if (mysql_num_rows($res) == 0)
    die("No messages");
print("\n");
while ($arr = mysql_fetch_array($res)) {


if ($arr["warned"] == "yes")
$warn = "<img src=\"pic/warned.gif\" alt=\"Warned\"/>";
else
$warn = "";
$username = $arr["username"];



$arr["text"] = format_comment($arr["text"]);

$arr["text"] = str_replace("[$CURUSER[username]]","<font color=#000000>{</font><b style='color: red; background: #FFFFFF;'>$CURUSER[username]</b><font color=#000000>}</font>",$arr["text"]);

$arr["text"] = preg_replace("/\[((\s|.)+?)\]/", "<font color=#000000>[</font><b style='color: black;'>\\1</b><font color=#000000>]</font>", $arr["text"]);

if (strpos($arr["text"], "privat($CURUSER[username])") !== false) {

$variabila = "privat($CURUSER[username])";
$nume = substr($variabila, 7);
$nume = substr($nume, 0, strlen($nume)-1);

if (($CURUSER["username"] == $nume) || ($CURUSER["id"] == "".$arr["userid"]."")) {

$arr["text"] = str_replace("privat($CURUSER[username])","<b style='color: red; background: #FFFFFF;'>$CURUSER[username]</b>:",$arr["text"]);

$arr["text"] = preg_replace("/privat\(([^()<>\s]+?)\)/i","<b style='color: #000000; background: #FFFFFF;'>\\1</b>", $arr["text"]);

print("<span style=\"background: #ffffff;\"><font color=#a2a2a2>|".strftime("%H:%M",$arr["date"])."|</font> " . (get_user_class() >= UC_MODERATOR ? "<span onclick=\"deleteShout($arr[id]);\" style=\"cursor: pointer; color: red; font-weight: bold; \">X</span> | " : "") . " <span onclick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='privat($username) '+parent.document.shoutform.shout.value;return false;\" style=\"cursor: pointer; color: red; font-weight: bold;\">P</span> <b><a class=user href=\"userdetails.php?id=".$arr["uid"]."\" onClick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='[".$username."] '+parent.document.shoutform.shout.value;return false;\">".get_user_class_color($arr["class"], $arr["username"]) . "</a></b>$warn: ".($arr["text"])."</span><br />\n");
}
} else
if ((($CURUSER["id"] == "".$arr["userid"]."") OR (get_user_class() >= UC_MODERATOR)) AND (get_user_class() >= $arr["class"]) AND (strpos($arr["text"], "privat(") !== false)) {

$arr["text"] = preg_replace("/privat\(([^()<>\s]+?)\)/i","<b style='color: #000000; background: #FFFFFF;'>\\1</b>", $arr["text"]);

print("<span style=\"background: #ffffff;\"><font color=#a2a2a2>|".strftime("%H:%M",$arr["date"])."|</font> " . (get_user_class() >= UC_MODERATOR ? "<span onclick=\"deleteShout($arr[id]);\" style=\"cursor: pointer; color: red; font-weight: bold; \">X</span> | " : "") . " <span onclick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='privat($username) '+parent.document.shoutform.shout.value;return false;\" style=\"cursor: pointer; color: red; font-weight: bold;\">P</span> <b><a class=user href=\"userdetails.php?id=".$arr["uid"]."\" onClick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='[".$username."] '+parent.document.shoutform.shout.value;return false;\">".get_user_class_color($arr["class"], $arr["username"]) . "</a></b>$warn: ".($arr["text"])."</span><br />\n");
} elseif (strpos($arr["text"], "privat(") !== false) {
} else {
print("<font color=#a2a2a2>|".strftime("%H:%M",$arr["date"])."|</font> " . (get_user_class() >= UC_MODERATOR ? "<span onclick=\"deleteShout($arr[id]);\" style=\"cursor: pointer; color: red; font-weight: bold; \">X</span> | " : "") . " <span onclick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='privat($username) '+parent.document.shoutform.shout.value;return false;\" style=\"cursor: pointer; color: red; font-weight: bold;\">P</span> <b><a class=user href=\"userdetails.php?id=".$arr["uid"]."\" onClick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='[".$username."] '+parent.document.shoutform.shout.value;return false;\">".get_user_class_color($arr["class"], $arr["username"]) . "</a></b>$warn: ".($arr["text"])."<br />\n");
}
}

?>


online.php

<?
include_once("include/bittorrent.php");
gzip();
dbconn();

header("Content-Type: text/html; charset=Windows-1251");

print "    <div id=\"wol\">";



$dt = gmtime() - 5;
$dt = sqlesc(get_date_time($dt));
$res = mysql_query("SELECT id, username, class, donor, warned, parked FROM users WHERE last_access >= $dt ORDER BY username") or print(mysql_error());
while ($arr = mysql_fetch_assoc($res)) {

    $username = $arr['username'];
    $id = $arr['id'];

        echo "<span onclick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='privat($username) '+parent.document.shoutform.shout.value;return false;\" style=\"cursor: pointer; color: red; font-weight: bold;\">P</span> <a href=userdetails.php?id=$id onclick=\"parent.document.shoutform.shout.focus();parent.document.shoutform.shout.value='[$username] '+parent.document.shoutform.shout.value;return false;\" target=_blank>$username</a></br>";
}
print "</div>";
?>


insert mysql into db

DROP TABLE IF EXISTS `shoutbox`;
CREATE TABLE `shoutbox` (
  `id` smallint(6) NOT NULL auto_increment,
  `userid` smallint(6) NOT NULL default '0',
  `class` int(11) NOT NULL default '0',
  `username` varchar(25) /*!40101 collate cp1251_bin */ NOT NULL default '',
  `date` int(11) NOT NULL default '0',
  `text` text /*!40101 collate cp1251_bin */ NOT NULL,
  `orig_text` text /*!40101 collate cp1251_bin */ NOT NULL,
  `warned` enum('yes','no') /*!40101 collate cp1251_bin */ NOT NULL default 'no',
  `donor` enum('yes','no') /*!40101 collate cp1251_bin */ NOT NULL default 'no',
  `gender` enum('1','2','3') /*!40101 collate cp1251_bin */ NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1118 /*!40101 DEFAULT CHARSET=cp1251 */ /*!40101 COLLATE=cp1251_bin */; 


ok, now we must create folder "js", after we must create in this folder ajax.js:

function _get_obj_toppos(obj)
{
var top = obj.offsetTop;
while( (obj = obj.offsetParent) != null )
{
top += obj.offsetTop;
}
return top;
}
function center_div()
{
this.divname = '';
this.divobj  = '';
}
center_div.prototype.clear_div = function()
{
try
{
if ( ! this.divobj )
{
return;
}
else
{
this.divobj.style.display  = 'none';
}
}
catch(e)
{
return;
}
}
center_div.prototype.Ywindow = function()
{
var scrollY = 0;
if ( document.documentElement && document.documentElement.scrollTop )
{
scrollY = document.documentElement.scrollTop;
}
else if ( document.body && document.body.scrollTop )
{
scrollY = document.body.scrollTop;
}
else if ( window.pageYOffset )
{
scrollY = window.pageYOffset;
}
else if ( window.scrollY )
{
scrollY = window.scrollY;
}
return scrollY;
}
center_div.prototype.move_div = function()
{
try
{
this.divobj = document.getElementById( this.divname );
}
catch(e)
{
return;
}
// Figure width and height
var my_width  = 0;
var my_height = 0;
if ( typeof( window.innerWidth ) == 'number' )
{
my_width  = window.innerWidth;
my_height = window.innerHeight;
}
else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
{
my_width  = document.documentElement.clientWidth;
my_height = document.documentElement.clientHeight;
}
else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
{
my_width  = document.body.clientWidth;
my_height = document.body.clientHeight;
}
this.divobj.style.position = 'absolute';
this.divobj.style.display  = 'block';
this.divobj.style.zIndex   = 99;
var divheight = parseInt( this.divobj.style.Height );
var divwidth  = parseInt( this.divobj.style.Width );
divheight = divheight ? divheight : 50;
divwidth  = divwidth  ? divwidth  : 200;
var scrolly = this.Ywindow();
var setX = ( my_width  - divwidth  ) / 2;
var setY = ( my_height - divheight ) / 2 + scrolly;
setX = ( setX < 0 ) ? 0 : setX;
setY = ( setY < 0 ) ? 0 : setY;
this.divobj.style.left = setX + "px";
this.divobj.style.top  = setY + "px";
}
function tbdev_ajax(file){
this.AjaxFailedAlert = "Ваш браузер не поддерживает расширенные возможности управления сайтом, мы настоятельно рекомендуем сменить браузер.\n";
this.requestFile = file;
this.method = "POST";
this.URLString = "";
this.encodeURIString = true;
this.execute = false;
this.loading_fired        = 0;
this.centerdiv          = null;
this.onLoading = function() { };
this.onLoaded = function() { };
this.onInteractive = function() { };
this.onCompletion = function() { };
this.onShow = function( message )
{
if ( ! this.loading_fired )
{
this.loading_fired = 1;
// Change text?
if ( message )
{
document.getElementById( 'loading-layer-text' ).innerHTML = message;
}
this.centerdiv         = new center_div();
this.centerdiv.divname = 'loading-layer';
this.centerdiv.move_div();
}
return;
};
this.onHide = function()
{
try
{
if ( this.centerdiv && this.centerdiv.divobj )
{
this.centerdiv.clear_div();
}
}
catch(e)
{
}
this.loading_fired = 0;
return;
};
this.createAJAX = function() {
try {
this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (err) {
this.xmlhttp = null;
}
}
if(!this.xmlhttp && typeof XMLHttpRequest != "undefined")
this.xmlhttp = new XMLHttpRequest();
if (!this.xmlhttp){
this.failed = true;
}
};
this.setVar = function(name, value){
if (this.URLString.length < 3){
this.URLString = name + "=" + value;
} else {
this.URLString += "&" + name + "=" + value;
}
}
this.encVar = function(name, value){
var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
return varString;
}
this.encodeURLString = function(string){
varArray = string.split('&');
for (i = 0; i < varArray.length; i++){
urlVars = varArray[i].split('=');
if (urlVars[0].indexOf('amp;') != -1){
urlVars[0] = urlVars[0].substring(4);
}
varArray[i] = this.encVar(urlVars[0],urlVars[1]);
}
return varArray.join('&');
}
this.encodeVAR = function(url){
url = url.toString();
var regcheck = url.match(/[\x90-\xFF]/g);
if ( regcheck )
{
for (var i = 0; i < i.length; i++)
{
url = url.replace(regcheck[i], '' + (regcheck[i].charCodeAt(0) & 0xFF).toString(16).toUpperCase());
}
}
return escape(url).replace(/\+/g, "%2B");
}
this.runResponse = function(){
eval(this.response);
}
this.sendAJAX = function(urlstring){
this.responseStatus = new Array(2);
if(this.failed && this.AjaxFailedAlert){
alert(this.AjaxFailedAlert);
} else {
if (urlstring){
if (this.URLString.length){
this.URLString = this.URLString + "&" + urlstring;
} else {
this.URLString = urlstring;
}
}
if (this.encodeURIString){
var timeval = new Date().getTime();
this.URLString = this.encodeURLString(this.URLString);
//this.setVar("rndval", timeval);
}
if (this.element) { this.elementObj = document.getElementById(this.element); }
if (this.xmlhttp) {
var self = this;
if (this.method == "GET") {
var totalurlstring = this.requestFile + "?" + this.URLString;
this.xmlhttp.open(this.method, totalurlstring, true);
} else {
this.xmlhttp.open(this.method, this.requestFile, true);
}
if (this.method == "POST"){
try {
this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
} catch (e) {}
}
this.xmlhttp.send(this.URLString);
this.xmlhttp.onreadystatechange = function() {
switch (self.xmlhttp.readyState){
case 1:
self.onLoading();
break;
case 2:
self.onLoaded();
break;
case 3:
self.onInteractive();
break;
case 4:
self.response = self.xmlhttp.responseText;
self.responseXML = self.xmlhttp.responseXML;
self.responseStatus[0] = self.xmlhttp.status;
self.responseStatus[1] = self.xmlhttp.statusText;
self.onCompletion();
if(self.execute){ self.runResponse(); }
if (self.elementObj) {
var elemNodeName = self.elementObj.nodeName;
elemNodeName.toLowerCase();
self.onHide();
if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
if (self.response == 'error') { alert('Доступ отклонен'); } else {
self.elementObj.value = self.response;
}
} else {
if (self.response == 'error') { alert('Доступ отклонен'); } else {
self.elementObj.innerHTML = self.response;
}
}
}
self.URLString = "";
break;
}
};
}
}
};
this.createAJAX();


and online.js:

//\/////
//\  overLIB 4.21 - You may not remove or change this notice.
//\  Copyright Erik Bosrup 1998-2004. All rights reserved.
//\
//\  Contributors are listed on the homepage.
//\  This file might be old, always check for the latest version at:
//\  http://www.bosrup.com/web/overlib/
//\
//\  Please read the license agreement (available through the link above)
//\  before using overLIB. Direct any licensing questions to erik@bosrup.com.
//\
//\  Do not sell this as your own work or remove this copyright notice.
//\  For full details on copying or changing this script please read the
//\  license agreement at the link above. Please give credit on sites that
//\  use overLIB and submit changes of the script so other people can use
//\  them as well.
//   $Revision: 1.119 $                $Date: 2005/07/02 23:41:44 $
//\/////
//\mini

////////
// PRE-INIT
// Ignore these lines, configuration is below.
////////
var olLoaded = 0;var pmStart = 10000000; var pmUpper = 10001000; var pmCount = pmStart+1; var pmt=''; var pms = new Array(); var olInfo = new Info('4.21', 1);
var FREPLACE = 0; var FBEFORE = 1; var FAFTER = 2; var FALTERNATE = 3; var FCHAIN=4;
var olHideForm=0;  // parameter for hiding SELECT and ActiveX elements in IE5.5+
var olHautoFlag = 0;  // flags for over-riding VAUTO and HAUTO if corresponding
var olVautoFlag = 0;  // positioning commands are used on the command line
var hookPts = new Array(), postParse = new Array(), cmdLine = new Array(), runTime = new Array();
// for plugins
registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');

////////
// DEFAULT CONFIGURATION
// Settings you want everywhere are set here. All of this can also be
// changed on your html page or through an overLIB call.
////////
if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#CCCCFF";
if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#333399";
if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";
if (typeof ol_capcolor=='undefined') var ol_capcolor="#000000";
if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";
if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";
if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";
if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";
if (typeof ol_textsize=='undefined') var ol_textsize="1";
if (typeof ol_captionsize=='undefined') var ol_captionsize="1";
if (typeof ol_closesize=='undefined') var ol_closesize="1";
if (typeof ol_width=='undefined') var ol_width="300";
if (typeof ol_border=='undefined') var ol_border="0";
if (typeof ol_cellpad=='undefined') var ol_cellpad=2;
if (typeof ol_offsetx=='undefined') var ol_offsetx=10;
if (typeof ol_offsety=='undefined') var ol_offsety=10;
if (typeof ol_text=='undefined') var ol_text="Default Text";
if (typeof ol_cap=='undefined') var ol_cap="";
if (typeof ol_sticky=='undefined') var ol_sticky=0;
if (typeof ol_background=='undefined') var ol_background="";
if (typeof ol_close=='undefined') var ol_close="Close";
if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT;
if (typeof ol_status=='undefined') var ol_status="";
if (typeof ol_autostatus=='undefined') var ol_autostatus=0;
if (typeof ol_height=='undefined') var ol_height=-1;
if (typeof ol_snapx=='undefined') var ol_snapx=0;
if (typeof ol_snapy=='undefined') var ol_snapy=0;
if (typeof ol_fixx=='undefined') var ol_fixx=-1;
if (typeof ol_fixy=='undefined') var ol_fixy=-1;
if (typeof ol_relx=='undefined') var ol_relx=null;
if (typeof ol_rely=='undefined') var ol_rely=null;
if (typeof ol_fgbackground=='undefined') var ol_fgbackground="";
if (typeof ol_bgbackground=='undefined') var ol_bgbackground="";
if (typeof ol_padxl=='undefined') var ol_padxl=1;
if (typeof ol_padxr=='undefined') var ol_padxr=1;
if (typeof ol_padyt=='undefined') var ol_padyt=1;
if (typeof ol_padyb=='undefined') var ol_padyb=1;
if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0;
if (typeof ol_vpos=='undefined') var ol_vpos=BELOW;
if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0;
if (typeof ol_capicon=='undefined') var ol_capicon="";
if (typeof ol_frame=='undefined') var ol_frame=self;
if (typeof ol_timeout=='undefined') var ol_timeout=0;
if (typeof ol_function=='undefined') var ol_function=null;
if (typeof ol_delay=='undefined') var ol_delay=0;
if (typeof ol_hauto=='undefined') var ol_hauto=0;
if (typeof ol_vauto=='undefined') var ol_vauto=0;
if (typeof ol_closeclick=='undefined') var ol_closeclick=0;
if (typeof ol_wrap=='undefined') var ol_wrap=0;
if (typeof ol_followmouse=='undefined') var ol_followmouse=1;
if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0;
if (typeof ol_closetitle=='undefined') var ol_closetitle='Close';
if (typeof ol_compatmode=='undefined') var ol_compatmode=0;
if (typeof ol_css=='undefined') var ol_css=CSSOFF;
if (typeof ol_fgclass=='undefined') var ol_fgclass="";
if (typeof ol_bgclass=='undefined') var ol_bgclass="";
if (typeof ol_textfontclass=='undefined') var ol_textfontclass="";
if (typeof ol_captionfontclass=='undefined') var ol_captionfontclass="";
if (typeof ol_closefontclass=='undefined') var ol_closefontclass="";

////////
// ARRAY CONFIGURATION
////////

// You can use these arrays to store popup text here instead of in the html.
if (typeof ol_texts=='undefined') var ol_texts = new Array("Text 0", "Text 1");
if (typeof ol_caps=='undefined') var ol_caps = new Array("Caption 0", "Caption 1");

////////
// END OF CONFIGURATION
// Don't change anything below this line, all configuration is above.
////////





////////
// INIT
////////
// Runtime variables init. Don't change for config!
var o3_text="";
var o3_cap="";
var o3_sticky=0;
var o3_background="";
var o3_close="Close";
var o3_hpos=RIGHT;
var o3_offsetx=2;
var o3_offsety=2;
var o3_fgcolor="";
var o3_bgcolor="";
var o3_textcolor="";
var o3_capcolor="";
var o3_closecolor="";
var o3_width=100;
var o3_border=1;
var o3_cellpad=2;
var o3_status="";
var o3_autostatus=0;
var o3_height=-1;
var o3_snapx=0;
var o3_snapy=0;
var o3_fixx=-1;
var o3_fixy=-1;
var o3_relx=null;
var o3_rely=null;
var o3_fgbackground="";
var o3_bgbackground="";
var o3_padxl=0;
var o3_padxr=0;
var o3_padyt=0;
var o3_padyb=0;
var o3_fullhtml=0;
var o3_vpos=BELOW;
var o3_aboveheight=0;
var o3_capicon="";
var o3_textfont="Verdana,Arial,Helvetica";
var o3_captionfont="Verdana,Arial,Helvetica";
var o3_closefont="Verdana,Arial,Helvetica";
var o3_textsize="1";
var o3_captionsize="1";
var o3_closesize="1";
var o3_frame=self;
var o3_timeout=0;
var o3_timerid=0;
var o3_allowmove=0;
var o3_function=null;
var o3_delay=0;
var o3_delayid=0;
var o3_hauto=0;
var o3_vauto=0;
var o3_closeclick=0;
var o3_wrap=0;
var o3_followmouse=1;
var o3_mouseoff=0;
var o3_closetitle='';
var o3_compatmode=0;
var o3_css=CSSOFF;
var o3_fgclass="";
var o3_bgclass="";
var o3_textfontclass="";
var o3_captionfontclass="";
var o3_closefontclass="";

// Display state variables
var o3_x = 0;
var o3_y = 0;
var o3_showingsticky = 0;
var o3_removecounter = 0;

// Our layer
var over = null;
var fnRef, hoveringSwitch = false;
var olHideDelay;

// Decide browser version
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var olOp = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode);  // Opera 7
var olNs4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4);
var olNs6 = (document.getElementById) ? true : false;
var olKq = (olNs6 && /konqueror/i.test(navigator.userAgent));
var olIe4 = (document.all) ? true : false;
var olIe5 = false;
var olIe55 = false; // Added additional variable to identify IE5.5+
var docRoot = 'document.body';

// Resize fix for NS4.x to keep track of layer
if (olNs4) {
    var oW = window.innerWidth;
    var oH = window.innerHeight;
    window.onresize = function() { if (oW != window.innerWidth || oH != window.innerHeight) location.reload(); }
}

// Microsoft Stupidity Check(tm).
if (olIe4) {
    var agent = navigator.userAgent;
    if (/MSIE/.test(agent)) {
        var versNum = parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);
        if (versNum >= 5){
            olIe5=true;
            olIe55=(versNum>=5.5&&!olOp) ? true : false;
            if (olNs6) olNs6=false;
        }
    }
    if (olNs6) olIe4 = false;
}

// Check for compatability mode.
if (document.compatMode && document.compatMode == 'CSS1Compat') {
    docRoot= ((olIe4 && !olOp) ? 'document.documentElement' : docRoot);
}

// Add window onload handlers to indicate when all modules have been loaded
// For Netscape 6+ and Mozilla, uses addEventListener method on the window object
// For IE it uses the attachEvent method of the window object and for Netscape 4.x
// it sets the window.onload handler to the OLonload_handler function for Bubbling
if(window.addEventListener) window.addEventListener("load",OLonLoad_handler,false);
else if (window.attachEvent) window.attachEvent("onload",OLonLoad_handler);

var capExtent;

////////
// PUBLIC FUNCTIONS
////////

// overlib(arg0,...,argN)
// Loads parameters into global runtime variables.
function overlib() {
    if (!olLoaded || isExclusive(overlib.arguments)) return true;
    if (olCheckMouseCapture) olMouseCapture();
    if (over) {
        over = (typeof over.id != 'string') ? o3_frame.document.all['overDiv'] : over;
        cClick();
    }

    // Load defaults to runtime.
  olHideDelay=0;
    o3_text=ol_text;
    o3_cap=ol_cap;
    o3_sticky=ol_sticky;
    o3_background=ol_background;
    o3_close=ol_close;
    o3_hpos=ol_hpos;
    o3_offsetx=ol_offsetx;
    o3_offsety=ol_offsety;
    o3_fgcolor=ol_fgcolor;
    o3_bgcolor=ol_bgcolor;
    o3_textcolor=ol_textcolor;
    o3_capcolor=ol_capcolor;
    o3_closecolor=ol_closecolor;
    o3_width=ol_width;
    o3_border=ol_border;
    o3_cellpad=ol_cellpad;
    o3_status=ol_status;
    o3_autostatus=ol_autostatus;
    o3_height=ol_height;
    o3_snapx=ol_snapx;
    o3_snapy=ol_snapy;
    o3_fixx=ol_fixx;
    o3_fixy=ol_fixy;
    o3_relx=ol_relx;
    o3_rely=ol_rely;
    o3_fgbackground=ol_fgbackground;
    o3_bgbackground=ol_bgbackground;
    o3_padxl=ol_padxl;
    o3_padxr=ol_padxr;
    o3_padyt=ol_padyt;
    o3_padyb=ol_padyb;
    o3_fullhtml=ol_fullhtml;
    o3_vpos=ol_vpos;
    o3_aboveheight=ol_aboveheight;
    o3_capicon=ol_capicon;
    o3_textfont=ol_textfont;
    o3_captionfont=ol_captionfont;
    o3_closefont=ol_closefont;
    o3_textsize=ol_textsize;
    o3_captionsize=ol_captionsize;
    o3_closesize=ol_closesize;
    o3_timeout=ol_timeout;
    o3_function=ol_function;
    o3_delay=ol_delay;
    o3_hauto=ol_hauto;
    o3_vauto=ol_vauto;
    o3_closeclick=ol_closeclick;
    o3_wrap=ol_wrap;   
    o3_followmouse=ol_followmouse;
    o3_mouseoff=ol_mouseoff;
    o3_closetitle=ol_closetitle;
    o3_css=ol_css;
    o3_compatmode=ol_compatmode;
    o3_fgclass=ol_fgclass;
    o3_bgclass=ol_bgclass;
    o3_textfontclass=ol_textfontclass;
    o3_captionfontclass=ol_captionfontclass;
    o3_closefontclass=ol_closefontclass;
   
    setRunTimeVariables();
   
    fnRef = '';
   
    // Special for frame support, over must be reset...
    o3_frame = ol_frame;
   
    if(!(over=createDivContainer())) return false;

    parseTokens('o3_', overlib.arguments);
    if (!postParseChecks()) return false;

    if (o3_delay == 0) {
        return runHook("olMain", FREPLACE);
     } else {
        o3_delayid = setTimeout("runHook('olMain', FREPLACE)", o3_delay);
        return false;
    }
}

// Clears popups if appropriate
function nd(time) {
    if (olLoaded && !isExclusive()) {
        hideDelay(time);  // delay popup close if time specified

        if (o3_removecounter >= 1) { o3_showingsticky = 0 };
       
        if (o3_showingsticky == 0) {
            o3_allowmove = 0;
            if (over != null && o3_timerid == 0) runHook("hideObject", FREPLACE, over);
        } else {
            o3_removecounter++;
        }
    }
   
    return true;
}

// The Close onMouseOver function for stickies
function cClick() {
    if (olLoaded) {
        runHook("hideObject", FREPLACE, over);
        o3_showingsticky = 0;   
    }   
    return false;
}

// Method for setting page specific defaults.
function overlib_pagedefaults() {
    parseTokens('ol_', overlib_pagedefaults.arguments);
}


////////
// OVERLIB MAIN FUNCTION
////////

// This function decides what it is we want to display and how we want it done.
function olMain() {
    var layerhtml, styleType;
     runHook("olMain", FBEFORE);
     
    if (o3_background!="" || o3_fullhtml) {
        // Use background instead of box.
        layerhtml = runHook('ol_content_background', FALTERNATE, o3_css, o3_text, o3_background, o3_fullhtml);
    } else {
        // They want a popup box.
        styleType = (pms[o3_css-1-pmStart] == "cssoff" || pms[o3_css-1-pmStart] == "cssclass");

        // Prepare popup background
        if (o3_fgbackground != "") o3_fgbackground = "background=\""+o3_fgbackground+"\"";
        if (o3_bgbackground != "") o3_bgbackground = (styleType ? "background=\""+o3_bgbackground+"\"" : o3_bgbackground);

        // Prepare popup colors
        if (o3_fgcolor != "") o3_fgcolor = (styleType ? "bgcolor=\""+o3_fgcolor+"\"" : o3_fgcolor);
        if (o3_bgcolor != "") o3_bgcolor = (styleType ? "bgcolor=\""+o3_bgcolor+"\"" : o3_bgcolor);

        // Prepare popup height
        if (o3_height > 0) o3_height = (styleType ? "height=\""+o3_height+"\"" : o3_height);
        else o3_height = "";

        // Decide which kinda box.
        if (o3_cap=="") {
            // Plain
            layerhtml = runHook('ol_content_simple', FALTERNATE, o3_css, o3_text);
        } else {
            // With caption
            if (o3_sticky) {
                // Show close text
                layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, o3_close);
            } else {
                // No close text
                layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, "");
            }
        }
    }   

    // We want it to stick!
    if (o3_sticky) {
        if (o3_timerid > 0) {
            clearTimeout(o3_timerid);
            o3_timerid = 0;
        }
        o3_showingsticky = 1;
        o3_removecounter = 0;
    }

    // Created a separate routine to generate the popup to make it easier
    // to implement a plugin capability
    if (!runHook("createPopup", FREPLACE, layerhtml)) return false;

    // Prepare status bar
    if (o3_autostatus > 0) {
        o3_status = o3_text;
        if (o3_autostatus > 1) o3_status = o3_cap;
    }

    // When placing the layer the first time, even stickies may be moved.
    o3_allowmove = 0;

    // Initiate a timer for timeout
    if (o3_timeout > 0) {         
        if (o3_timerid > 0) clearTimeout(o3_timerid);
        o3_timerid = setTimeout("cClick()", o3_timeout);
    }

    // Show layer
    runHook("disp", FREPLACE, o3_status);
    runHook("olMain", FAFTER);

    return (olOp && event && event.type == 'mouseover' && !o3_status) ? '' : (o3_status != '');
}

////////
// LAYER GENERATION FUNCTIONS
////////
// These functions just handle popup content with tags that should adhere to the W3C standards specification.

// Makes simple table without caption
function ol_content_simple(text) {
    var cpIsMultiple = /,/.test(o3_cellpad);
    var txt = '<table class="useronline" width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_height)+'><tr><td><table class="useronline" width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' : ((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';

    set_background("");
    return txt;
}

// Makes table with caption and optional close link
function ol_content_caption(text,title,close) {
    var nameId, txt, cpIsMultiple = /,/.test(o3_cellpad);
    var closing, closeevent;

    closing = "";
    closeevent = "onmouseover";
    if (o3_closeclick == 1) closeevent = (o3_closetitle ? "title='" + o3_closetitle +"'" : "") + " onclick";
    if (o3_capicon != "") {
      nameId = ' hspace = \"5\"'+' align = \"middle\" alt = \"\"';
      if (typeof o3_dragimg != 'undefined' && o3_dragimg) nameId =' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';
      o3_capicon = '<img src=\"'+o3_capicon+'\"'+nameId+' />';
    }

    if (close != "")
        closing = '<td '+(!o3_compatmode && o3_closefontclass ? 'class="'+o3_closefontclass : 'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode && o3_closefontclass) ? ' class="' + o3_closefontclass + '" ' : ' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass ? '' : wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass ? '' : wrapStr(1,o3_closesize,'close'))+'</a></td>';
    txt = '<table class="useronline" width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table class="useronline" width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass ? ' class="'+o3_captionfontclass+'">' : '>')+(o3_captionfontclass ? '' : '<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass ? '' : wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table class="useronline" width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize)) + '</td></tr></table></td></tr></table>';

    set_background("");
    return txt;
}

// Sets the background picture,padding and lots more. :)
function ol_content_background(text,picture,hasfullhtml) {
    if (hasfullhtml) {
        txt=text;
    } else {
        txt='<table class="useronline" class="useronline" width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass ? '" class="'+o3_textfontclass : '')+'">'+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';
    }

    set_background(picture);
    return txt;
}

// Loads a picture into the div.
function set_background(pic) {
    if (pic == "") {
        if (olNs4) {
            over.background.src = null;
        } else if (over.style) {
            over.style.backgroundImage = "none";
        }
    } else {
        if (olNs4) {
            over.background.src = pic;
        } else if (over.style) {
            over.style.width=o3_width + 'px';
            over.style.backgroundImage = "url("+pic+")";
        }
    }
}

////////
// HANDLING FUNCTIONS
////////
var olShowId=-1;

// Displays the popup
function disp(statustext) {
    runHook("disp", FBEFORE);
   
    if (o3_allowmove == 0) {
        runHook("placeLayer", FREPLACE);
        (olNs6&&