var connected = false;
var userList = new Array();
var privChats = new Array();
// var ServerHost = "184.73.175.102";
// var ServerHost = "speak-toanexpert.com";
var ServerHost = "speak-tome.com";
var ServerPort = 9997;
var contextActive = true;
var XmlDeclaration = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n";
//var NickColors = Array("#FF0000", "#0000CC", "#999999", "#993399", "#999933", "#FF9900", "#FF00CC", "#FF8080", "#A4B6C8", "#6BBE44", "#8080C0", "#FFCC66", "#3CAFAB", "#FF6600", "#0099FF", "#000080", "#800040", "#006600", "#C75000");
var NickColors = Array("#000000");
var MyGuid;
var MyUserName;
var MyAccessLevel;
var UserCount = 0;

// Font Stuff
var Bold = false;
var Italic = false;
var Underline = false;
var FontSize = 12;
var FontColor = "#000000";
var FontFace = "Arial";
var CurrentMode = "Idle";

function RefreshFont()
{
    document.getElementById("colorBtn").style.backgroundColor = "#" + document.getElementById("fontColorField").value;
	FontSize = document.getElementById("fontSize").options[document.getElementById("fontSize").selectedIndex].value;
	FontFace = document.getElementById("fontFace").options[document.getElementById("fontFace").selectedIndex].value;
	FontColor = "#" + document.getElementById("fontColorField").value;
	document.getElementById("colorBtn").style.backgroundColor = FontColor;

		
	var theRules = document.getElementById("message");

	theRules.style.fontWeight = Bold ? "bold" : "";
	theRules.style.fontStyle = Italic ? "italic" : "";
	theRules.style.textDecoration = Underline ? "underline" : "";
	theRules.style.fontSize = FontSize + "px";
	theRules.style.color = FontColor;
	theRules.style.fontFamily = FontFace;

	document.getElementById("boldBtn").style.border = Bold ? "inset 1px" : "";
	document.getElementById("italicBtn").style.border = Italic ? "inset 1px" : "";
	document.getElementById("underlineBtn").style.border = Underline ? "inset 1px" : "";
	document.getElementById("boldBtn").style.margin = Bold ? "0px" : "1px";
	document.getElementById("italicBtn").style.margin  = Italic ? "0px" : "1px";
	document.getElementById("underlineBtn").style.margin  = Underline ? "0px" : "1px";
	
	if(!document.getElementById("message").disabled && document.getElementById("message").disabled != "disabled")
		document.getElementById("message").focus();

	// Set cookies
	createCookie("fbold", Bold, 7);
	createCookie("fitalic", Italic, 7);
	createCookie("funderline", Underline, 7);
	createCookie("fcolor", FontColor, 7);
}

/* SOCKET FUNCTIONS */
function SocketReady()
{
    document.getElementById("needFlash").style.display="none";
	if(connected != true)
		AppendMessage("Connecting to server...");
	thisMovie("XMLSocket").LoadSecurity("xmlsocket://" + ServerHost + ":" + ServerPort);
	thisMovie("XMLSocket").SocketConnect(ServerHost, ServerPort);
}
function SocketDataReceived(Packet)
{
    var oDomDoc = Sarissa.getDomDocument();
    oDomDoc = (new DOMParser()).parseFromString(Packet, "text/xml");
	
	var action = Sarissa.getText(oDomDoc.selectSingleNode("/CE/@A"));

	/*
	if(action == "AuthenticationError") // Authentication unsuccessful
	{
	    var error = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Status"));
	    
	    if(error == "Banned")
		    AppendMessage("Authentication Error: <b>You have been banned from this channel</b>" );
		else if(error == "UnknownUser")
		    AppendMessage("Authentication Error: <b>We were unable to authorize your account, please try logging in again.</b>" );
		else if(error == "UnknownError")
		    AppendMessage("Authentication Error: <b>An unkown error occurred, please try again later.</b>" );
		else if(error == "Restricted")
		    AppendMessage("Authentication Error: <b>This chat room has been restricted.</b>" );
		else if(error == "SessionExists")
		{
		    AppendMessage("Authentication Error: <b>A Duplicate session already exists.</b>" );
		}
		else
		    AppendMessage("Authentication Error: <b>" + error + "</b>" );
	}
	*/

	if(action == "AuthenticationError") // Authentication unsuccessful
	{
	    var error = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Status"));

	    if(error == "Banned")
		    AppendMessage("<b>You have been banned from this channel</b>" );
		else if(error == "UnknownUser")
		    AppendMessage("<b>We were unable to authorize your account, please try logging in again.</b>" );
		else if(error == "UnknownError")
		    AppendMessage("<b>An unknown error occurred, please try again later.</b>" );
		else if(error == "Restricted")
		//	AppendMessage("<b>This expert is currently speaking with a client. Click <a href='javascript:window.location.reload()'>here</a> to see if the expert has become available.</b>" );
			AppendMessage("<b>This expert is currently speaking with a client.</b>" );
		else if(error == "ExistingPrivateSession")
		    AppendMessage("<b>This expert is currently speaking with a client.</b>" );
		else if(error == "SessionExists")
		    AppendMessage("<b>A Duplicate session already exists.</b>" );
		else if(error == "Offline")
			AppendMessage("");
//			AppendMessage("<b>The expert is currently unavailable.</b>");
		else
		    AppendMessage("<b>" + error + "</b>" );
	}
	else if(action == "ChatWelcome")
	{
		AppendMessage("Now chatting with " + Sarissa.getText(oDomDoc.selectSingleNode("/CE/ChatName")));
		// Set self variables
		MyGuid = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/SelfInfo/@Guid")), "-", "");
		MyUserName = Sarissa.getText(oDomDoc.selectSingleNode("/CE/SelfInfo/@UserName"));
		MyAccessLevel = Sarissa.getText(oDomDoc.selectSingleNode("/CE/SelfInfo/@AccessLevel"));
		
		// chat mode
		var mode = Sarissa.getText(oDomDoc.selectSingleNode("/CE/ChatMode"));
		
		CurrentMode = mode;

		// Build initial members list
		document.getElementById("aListContainer").style.display = "none";
		document.getElementById("nListContainer").style.display = "none";
		document.getElementById("vListContainer").style.display = "none";
		document.getElementById("aList").innerHTML = "";
		document.getElementById("nList").innerHTML = "";
		document.getElementById("vList").innerHTML = "";
		UserCount = 0;
		var objNodeList = oDomDoc.selectNodes("/CE/Members/Member");
		for(i=0;i<objNodeList.length;i++)
		{
			var MemberGuid = replaceAll(Sarissa.getText(objNodeList[i].selectSingleNode("@Guid")), "-", "");
			var MemberUserName = Sarissa.getText(objNodeList[i].selectSingleNode("@UserName"));
		    var MemberProfileUrl = Sarissa.getText(objNodeList[i].selectSingleNode("@ProfileUrl"));
		    var MemberAvatarUrl = Sarissa.getText(objNodeList[i].selectSingleNode("@AvatarUrl"));
		    var MemberAccessLevel = Sarissa.getText(objNodeList[i].selectSingleNode("@AccessLevel"));
			AddUser(MemberGuid, MemberUserName, MemberAvatarUrl, MemberProfileUrl, MemberAccessLevel, false);
		}

		// Build initial members list
		document.getElementById("emoticons").innerHTML = "";
		objNodeList = oDomDoc.selectNodes("/CE/Emoticons/Emoticon");
		for(i=0;i<objNodeList.length;i++)
		{
			var Code = Sarissa.getText(objNodeList[i].selectSingleNode("@Code"));
			var Url = Sarissa.getText(objNodeList[i].selectSingleNode("@Url"));
			var img = document.createElement("img");
			img.style.padding = "1px";
			img.style.border="none";
			img.style.cursor="pointer";
			img.src = Url;
			img.alt = Code;
			img.onclick = function(){addEmote(this.alt);};
			document.getElementById("emoticons").appendChild(img);
		}

		// Enable elements
		connected = true;
		if(MyAccessLevel == "Normal" || MyAccessLevel == "Administrator" || MyAccessLevel == "ChannelOwner" || MyAccessLevel == "Private")
		{
			document.getElementById("message").disabled = false;
			document.getElementById("Submit").disabled = false;
			document.getElementById("message").focus();
		}
		else
		{
			document.getElementById("message").disabled = true;
			document.getElementById("Submit").disabled = true;
			document.getElementById("message").value = "To paticipate in this room please login or register.";
		}
//		document.title = Sarissa.getText(oDomDoc.selectSingleNode("/CE/ChatName"));
		createCookie("UserName", MyUserName, 7);

		document.getElementById("message").focus();
		document.getElementById("vidPictures").style.display="none";

		
		var s1 = new SWFObject("flash/player.swf","ply","320","260","9","#FFFFFF");
		s1.addParam("flashvars", "autostart=true&streamer=rtmp://" + ServerHost + "/videochat&file=" + Sarissa.getText(oDomDoc.selectSingleNode("/CE/BroadcastPoint")) + ".flv");
		s1.addParam("allowfullscreen","true");
		s1.addParam("wmode", "transparent");
		s1.addParam("allowscriptaccess","always");
		s1.write("vidContainer");

		localStart();

	}
	else if(action == "ChatJoin")
	{
		var MemberGuid = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/Member/@Guid")), "-", "");
		var MemberUserName = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Member/@UserName"));
		var MemberProfileUrl = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Member/@ProfileUrl"));
		var MemberAvatarUrl = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Member/@AvatarUrl"));
		var MemberAccessLevel = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Member/@AccessLevel"));
		AddUser(MemberGuid, MemberUserName, MemberAvatarUrl, MemberProfileUrl, MemberAccessLevel, true);
	}
	else if(action == "ChatPart")
	{
		var MemberGuid = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/Member/@Guid")), "-", "");
		DeleteUser(MemberGuid, true);
	}
	else if(action == "RCM")
	{
		var Message = Sarissa.getText(oDomDoc.selectSingleNode("/CE/M"));
		var Guid = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/M/@S")), "-", "");
		if(userList[Guid].Ignored == false)
		{
			if(Message == "{Chat Enabled}" || Message == "{Chat Disabled}")
				return;

		    link = "<span style='font-weight: bold; color:" + userList[Guid].Color + "'>" + userList[Guid].UserName + ":</span>";

		    var span = document.createElement("span");
		    span.innerHTML = Message;

			var font_array = Sarissa.getText(oDomDoc.selectSingleNode("/CE/M/@f")).split("|");

		    span.style.fontWeight = font_array[3] == "t" ? "bold" : "";
		    span.style.fontStyle = font_array[4] == "t" ? "italic" : "";
		    span.style.textDecoration = font_array[5] == "t" ? "underline" : "";
		    span.style.fontSize = font_array[1] + "px";
		    span.style.color = font_array[2];
		    span.style.fontFamily = font_array[0];

		    // Nasty hack since outerHTML does not work with firefox
		    var pObject = document.createElement("div");
		    pObject.appendChild(span);

		    AppendMessage(link + " " + pObject.innerHTML);
		}
	}
	else if(action == "ReceivePrivateMessage")
	{
		var Message = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Message"));
		var SenderId = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/SenderId")), "-", "");
		var RecipientId = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/RecipientId")), "-", "");

        if(SenderId == MyGuid)
        {
		    // Create window
		    createWindow(RecipientId);
		    var link = "<span style='font-weight: bold; color:" + userList[SenderId]["Color"] + "'>" + userList[SenderId]["UserName"] + ":</span>";
		    AppendMessage(link + " " + Message, "contents_" + RecipientId);
        }
	    else if(userList[SenderId].Ignored == false)
		{
		    // Create window
		    createWindow(SenderId);
		    var link = "<span style='font-weight: bold; color:" + userList[SenderId]["Color"] + "'>" + userList[SenderId]["UserName"] + ":</span>";
		    AppendMessage(link + " " + Message, "contents_" + SenderId);
        }
		return;
    }
	else if(action == "SystemMessage")
	{
		var Message = Sarissa.getText(oDomDoc.selectSingleNode("/CE/Message"));
		//alert(Message);
//		AppendMessage("<b>SYSTEM MESSAGE</b>: " + Message);
	}
	else if(action == "ChangeNick")
	{
		var NewNick = Sarissa.getText(oDomDoc.selectSingleNode("/CE/NewNick"));
		var UserGuid = replaceAll(Sarissa.getText(oDomDoc.selectSingleNode("/CE/UserGuid")), "-", "");

		var oldLink = "<span style='font-weight: bold; color:" + userList[UserGuid]["Color"] + "'>" + userList[UserGuid]["UserName"] + "</span>";

		if(UserGuid == MyGuid)
		{
			MyUserName = NewNick;
			createCookie("UserName", MyUserName, 7);
		}
		userList[UserGuid]["UserName"] = NewNick;

		var ul = document.getElementById("link_" + UserGuid);
		if(ul)
		{
			if(document.all){
				 document.getElementById("link_" + UserGuid).innerText = NewNick;
			} else{
				document.getElementById("link_" + UserGuid).textContent = NewNick;
			}

		}

		var newLink = "<span style='font-weight: bold; color:" + userList[UserGuid]["Color"] + "'>" + userList[UserGuid]["UserName"] + "</span>";
		AppendMessage(oldLink + " has changed their nick to " + newLink);
	}
	else if(action == "CM")
	{
		var mode = Sarissa.getText(oDomDoc.selectSingleNode("/CE/M"));
		
		CurrentMode = mode;
	}
	else if(action == "Reload")
	{
		AppendMessage("<b>Converting chat to private mode.</b>" );
		window.location.reload();
	}
	else if(action == "PrivateDenied")
	{
		AppendMessage("<b>Your SpeakToMe request has been denied.</b>" );
	}
	else if(action == "PrivateInsufficientBalance")
	{
		AppendMessage("<b>You must have enough credits for at least one minute</b>");
	}
	else if(action == "ChannelOffline")
	{
		AppendMessage("<b>The expert has gone offline.</b>");
	}
	else if(action == "PrivateEnded")
	{
		AppendMessage("<b>The SpeakToMe session has ended.</b>");
		window.location.reload();
	}
	else if(action == "SwitchPrivate")
	{
		AppendMessage("<b>This expert is currently speaking with a client.</b>");
	}
	else
	{
		alert(Packet);
	}
}


function SocketConnected()
{
	AppendMessage("Authenticating...");

	// Perform authentication
	var CE = new Object();
	CE.A = "DoAuthenticate";
	
	CE.ChannelId = ChannelId;
	CE.UserName = UserName;
	CE.UserId = UserId;
	CE.UserPass = UserPass;

	var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
	thisMovie("XMLSocket").SocketSendData(xmlData);

	localConnected();
}
function ChangeNick()
{
	if(document.getElementById('nickChangePanel').style.display == "none")
		return;

    document.getElementById('nickmain').style.display='none';
    document.getElementById('nickChangePanel').style.display='none';
	    
	var CE = new Object();
	CE.A = "ChangeNick";
	CE.NewNick = document.getElementById("nickname").value;

	var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
	thisMovie("XMLSocket").SocketSendData(xmlData);
	
	if(!document.getElementById("message").disabled && document.getElementById("message").disabled != "disabled")
		document.getElementById("message").focus();
}
function SocketDisconnected()
{
	AppendMessage("Expert not available.");
//	AppendMessage("Connection to server lost.");
	connected = false;
	document.getElementById("message").disabled = true;
	document.getElementById("Submit").disabled = true;

	for(var user in userList)
	{
	    DeleteUser(user, false);
	}
	UserCount=0;
	document.getElementById("userCnt").innerHTML = UserCount;

	
	document.getElementById("aListContainer").style.display = "none";
	document.getElementById("nListContainer").style.display = "none";
	document.getElementById("vListContainer").style.display = "none";
	document.getElementById("aList").innerHTML = "";
	document.getElementById("nList").innerHTML = "";
	document.getElementById("vList").innerHTML = "";
	
	document.getElementById("container").innerHTML = "";

	localDisconnect();
}
function SocketError(value)
{
	AppendMessage("<b>Error:</b> " + value);
}
function getClockTime()
{
   var now    = new Date();
   var hour   = now.getHours();
   var minute = now.getMinutes();
   var second = now.getSeconds();
   var ap = "AM";
   if (hour   > 11) { ap = "PM";             }
   if (hour   > 12) { hour = hour - 12;      }
   if (hour   == 0) { hour = 12;             }
   if (hour   < 10) { hour   = hour;   }
   if (minute < 10) { minute = "0" + minute; }
   if (second < 10) { second = "0" + second; }
   var timeString = hour +
                    ':' +
                    minute +
                    ':' +
                    second +
                    " " +
                    ap;
   return timeString;
}
function AppendMessage(message, destination)
{
    if(!destination)
        destination = "ScrollDiv";
        
	// Generate Timestamp
	var ts = "<span class='timestamp'>[" + getClockTime() + "]&nbsp;</span>";

	var aDiv = document.createElement("div");
	aDiv.innerHTML = "&nbsp;&nbsp;" + ts + message + "<br />";
	
	document.getElementById(destination).appendChild(aDiv);

    if(document.getElementById(destination).scrollHeight-document.getElementById(destination).offsetHeight-document.getElementById(destination).scrollTop < 70)
    {
	    document.getElementById(destination).scrollTop = 10000;
	}
}
function AddUser(Guid, UserName, AvatarUrl, ProfileUrl, AccessLevel, Verbose)
{
	UserCount++;
	var thisArray = new Array();
	thisArray.Guid = Guid;
	thisArray.AccessLevel = AccessLevel;
	thisArray.UserName = UserName;
	thisArray.Color = NickColors[Math.floor(Math.random()*(NickColors.length))];
	thisArray.Ignored = false;
	thisArray.AvatarUrl = AvatarUrl;
	thisArray.ProfileUrl = ProfileUrl;
	userList[Guid] = thisArray;
	
	// New code to add name to list
	var container;
	var listBox;
	if(AccessLevel == "Administrator" || AccessLevel == "ChannelOwner")
	{
		listBox = document.getElementById("aList");
		container = document.getElementById("aListContainer");
	}
	else if(AccessLevel == "Normal" || AccessLevel == "Private")
	{
		listBox = document.getElementById("nList");
		container = document.getElementById("nListContainer");
	}
	else if(AccessLevel == "ViewOnly")
	{
		listBox = document.getElementById("vList");
		container = document.getElementById("vListContainer");
	}
	var x = document.createElement("li");
	var a = document.createElement("span");
	
	// Set ID of list item and styles
	x.id = "user" + Guid;
	//x.style.fontWeight = "bold";
	x.style.cursor = "pointer";
	x.verticalAlign = "middle";
	x.style.height = "20px";
	x.style.color = thisArray["Color"];
	
	// Create text object
	a.appendChild(document.createTextNode(thisArray["UserName"]));
	a.style.paddingLeft = "5px";
	a.id = "link_" + Guid;
	
	// Create avatar url
	var img = document.createElement("img");
	img.style.maxHeight="20px";
	img.style.maxWidth="25px";
	img.onload = function(){FixAvatar(this, Guid);}
	img.src = AvatarUrl;
	img.id="avatar_" + Guid;
	x.onmouseover = function(){this.style.backgroundColor='#ECF1EF';};
	x.onmouseout = function(){this.style.backgroundColor='';};
	
	// Append items
	x.appendChild(img);
	x.appendChild(a);
	x.onclick = ShowContextWindow;
	x.oncontextmenu = ShowContextWindow;
	x.tag = Guid;
	listBox.appendChild(x);

	if(listBox.childNodes.length == 1)
	{
		container.style.display = "block";
	}

	if(Verbose)
	{
//		link = "<span style='font-weight: bold; color:" + thisArray["Color"] + "'>" + thisArray["UserName"] + "</span>";
//		AppendMessage(link + " has entered the chat.");
	}
		
	document.getElementById("userCnt").innerHTML = UserCount;
}
function KickUser(Guid)
{
    var CE = new Object();
    CE.A = "KickUser";
    CE.RecipientId = Guid;
    
    var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
    thisMovie("XMLSocket").SocketSendData(xmlData);
}

function BanUser(Guid)
{
    if(!confirm("Are you sure you want to permanently ban this user?"))
        return false;
    var CE = new Object();
    CE.A = "BanUser";
    CE.RecipientId = Guid;
    
    var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
    thisMovie("XMLSocket").SocketSendData(xmlData);
}
function FixAvatar(obj, Guid)
{
    var switchBack = false;
    if(document.getElementById("duserlist").style.display == "none")
    {
        uButtonClick();
        switchBack = true;
    }
    obj.style.display = "";
    
	if(Guid != null)
	{
		userList[Guid].AvatarNormalHeight=obj.height
		userList[Guid].AvatarNormalWidth=obj.width
	}

	while(obj.height > 20 || obj.width > 30)
	{
		var origHeight = obj.height;
		var origWidth = obj.width;
		
		if(obj.height>20)
			var scaleFactor = 20/origHeight;
		else if(obj.width>30)
			var scaleFactor = 30/origWidth;
		else
			var scaleFactor = 1;
		
		obj.height = origHeight * scaleFactor;
		obj.width = origWidth * scaleFactor;
	}
    
	if(Guid != null)
	{
		userList[Guid].AvatarSmallHeight=obj.height
		userList[Guid].AvatarSmallWidth=obj.width
	}
    
    var linkNode = obj;
    linkNode.style.paddingLeft = (30 - obj.width) + "px";
    
    if(switchBack)
        rButtonClick();
}
function IgnoreUser(Guid)
{
    userList[Guid].Ignored = !userList[Guid].Ignored;
    
	if(userList[Guid].Ignored)
	    setOpacity(document.getElementById("user" + Guid), 4);
	else
	    setOpacity(document.getElementById("user" + Guid), 10);
}
function setOpacity(obj, value)
{
	obj.style.opacity = value/10;
	obj.style.filter = 'alpha(opacity=' + value*10 + ')';
}
function ShowContextWindow(e)
{
    HideContextWindow();
    
    var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	
	Guid = this.tag;
	
    var menuObj = document.createElement("ul");
    menuObj.className = "contextMenu";
    menuObj.id = "contextMenu";
    menuObj.style.display = "block";
	menuObj.style.left = posx - 25 + "px";
	menuObj.style.top  = posy + 5 + "px";
	if(MyAccessLevel == "Administrator" || MyAccessLevel == "Normal" || MyAccessLevel == "ViewOnly" || MyAccessLevel == "ChannelOwner")
	{
		var imBtn = document.createElement("li");
		imBtn.onmouseover = highlightMenuItem;
		imBtn.onmouseout = deHighlightMenuItem;
		imBtn.onclick = function() {createWindow(Guid);return false;};
		var imBtnA = document.createElement("a");
		imBtnA.href="#";
		imBtnA.innerHTML = "Private Message";
		imBtn.appendChild(imBtnA);
	}
	
	var ignoreBtn = document.createElement("li");
	ignoreBtn.onmouseover = highlightMenuItem;
	ignoreBtn.onmouseout = deHighlightMenuItem;
	ignoreBtn.onclick = function() {IgnoreUser(Guid);return false;};
	var ignoreBtnA = document.createElement("a");
	ignoreBtnA.href="#";
	ignoreBtnA.innerHTML = userList[Guid].Ignored == false ? "Ignore" : "Do Not Ignore";
	ignoreBtn.appendChild(ignoreBtnA);
	
	if(MyAccessLevel == "Administrator" || MyAccessLevel == "ChannelOwner")
	{
	    var kickBtn = document.createElement("li");
	    kickBtn.onmouseover = highlightMenuItem;
	    kickBtn.onmouseout = deHighlightMenuItem;
	    kickBtn.onclick = function() {KickUser(Guid); return false;};
	    var kickBtnA = document.createElement("a");
	    kickBtnA.href="#";
	    kickBtnA.innerHTML = "Kick";
	    kickBtn.appendChild(kickBtnA);
    	
	    var banBtn = document.createElement("li");
	    banBtn.onmouseover = highlightMenuItem;
	    banBtn.onmouseout = deHighlightMenuItem;
	    banBtn.onclick = function() {BanUser(Guid); return false;};
	    var banBtnA = document.createElement("a");
	    banBtnA.href="#";
	    banBtnA.innerHTML = "Ban";
	    banBtn.appendChild(banBtnA);
	}
	
	
	if(userList[Guid].ProfileUrl != "")
	{
	    var profileBtn = document.createElement("li");	
	    profileBtn.onmouseover = highlightMenuItem;
	    profileBtn.onmouseout = deHighlightMenuItem;
	    var profileBtnA = document.createElement("a");
	    profileBtnA.href=userList[Guid].ProfileUrl;
	    profileBtnA.innerHTML = "View Profile";
	    profileBtnA.target = "_blank";
	    profileBtn.appendChild(profileBtnA);
	}	
	
	if(MyAccessLevel == "Administrator" || MyAccessLevel == "Normal" || MyAccessLevel == "ViewOnly" || MyAccessLevel == "ChannelOwner" || MyAccessLevel == "Private")
	{
	    menuObj.appendChild(imBtn);
	}
    menuObj.appendChild(ignoreBtn);
    if(MyAccessLevel == "Administrator" || MyAccessLevel == "ChannelOwner")
	{
        menuObj.appendChild(kickBtn);
        //menuObj.appendChild(banBtn);
    }
    if(userList[Guid].ProfileUrl != "")
	{
        menuObj.appendChild(profileBtn);
	}
    document.body.appendChild(menuObj);
    contextActive = true;
    window.setTimeout("document.documentElement.onclick = HideContextWindow", 10);
    window.setTimeout("document.documentElement.oncontextmenu = HideContextWindow", 10);
    return false;
    
}
function highlightMenuItem()
{
	this.className='contextMenuHighlighted';
	this.childNodes[0].style.color="#fff";
}

function deHighlightMenuItem()
{
	this.className='';
	this.childNodes[0].style.color="#000";
}
function HideContextWindow()
{
    if(document.getElementById("contextMenu"))
    {
        var menu = document.getElementById("contextMenu");
        menu.parentNode.removeChild(menu);
    }
    document.documentElement.onclick = function(){};
    document.documentElement.oncontextmenu = function(){};
}

function DeleteUser(Guid, Verbose)
{
	// Delete item from UL
	if(userList[Guid] == null) return false;
	
	UserCount--;
	
	if(Verbose)
	{
//	    link = "<span style='font-weight: bold; color:" + userList[Guid]["Color"] + "'>" + userList[Guid]["UserName"] + "</span>";
//	    AppendMessage(link + " has left the chat.");
	}

	var ul = document.getElementById("user" + Guid);
	if(ul)
	{
		if(ul.parentNode.childNodes.length == 1)
		{
			ul.parentNode.parentNode.style.display = "none"
		}
		ul.parentNode.removeChild(ul);
	}
	userList[Guid] = null;
	
	document.getElementById("userCnt").innerHTML = UserCount;
}

function replaceAll( str, from, to )
{
	var idx = str.indexOf( from );

	while ( idx > -1 ) {
		str = str.replace( from, to );
		idx = str.indexOf( from );
	}

	return str;
}

function msgCallback()
{
	if(document.getElementById("message").value == "")
	{
		return false;
	}
	
	var CE = new Object();
	CE.A = "SendChatMessage";
	CE.Message = document.getElementById("message").value;
	CE.Message = CE.Message.replace(new RegExp('\\u005c', 'g'), "\\\\");
	CE.FontFace = FontFace;
	CE.FontSize = FontSize;
	CE.FontColor = FontColor;
	CE.Bold = Bold;
	CE.Italic = Italic;
	CE.Underline = Underline;
	
	var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
	thisMovie("XMLSocket").SocketSendData(xmlData);
	
	document.getElementById("message").value = "";
	document.getElementById("Submit").disabled=true;
	document.getElementById("message").focus();
}

function DetectKeyPress(e) 
{
	window.setTimeout("document.getElementById('message').focus()", 20);
	document.getElementById("Submit").disabled=false;

	var charCode;
	if(e && e.which)
		charCode = e.which
	else
	{
		e = window.event;
		charCode = e.keyCode;
	}
	if (charCode == 13)
	{
		msgCallback();
		return false;
	}
	else{
	return true;
	}

}
function thisMovie(movieName)
{
  if (navigator.appName.indexOf("Microsoft") != -1 || navigator.appName.indexOf("Opera") != -1) {
	  return window[movieName];
  } else {
	  return document[movieName];
  }
}
function SendPrivateMessage(target)
{
    if(document.getElementById("panel_" + target))
    {
        if(document.getElementById("input_" + target).value == "")
	    {
		    return false;
	    }
	    if(userList[target] == null)
	    {
	        AppendMessage("<b>This user is no longer online.</b>", "contents_" + target);
	        return;
	    }
	    var CE = new Object();
	    CE.A = "SendPrivateMessage";
	    CE.Message = document.getElementById("input_" + target).value;
	    CE.Message = CE.Message.replace(new RegExp('\\u005c', 'g'), "\\\\");
	    CE.RecipientId = target;
	    
	    var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
	    thisMovie("XMLSocket").SocketSendData(xmlData);
    	
	    document.getElementById("input_" + target).value = "";
	    document.getElementById("input_" + target).focus();
    }
}

function createWindow(target)
{
    // Check if window has already been created
    if(document.getElementById("panel_" + target))
    {
        // Focus and exit
        z++;
        document.getElementById("panel_" + target).style.zIndex = z;
        document.getElementById("input_" + target).focus();
        return;
    }
    // Create Panel Div
    var panelDiv = document.createElement("div");
    panelDiv.className = "panelDiv Body";
    panelDiv.id = "panel_" + target;
    
    // Add to main document
    document.body.appendChild(panelDiv);
    
    var dd = new ChatWindow("panel_" + target, target);

    var targetInfo = userList[target];
    link = "<span style='font-weight: bold; text-decoration: underline;color:" + targetInfo["Color"] + "'>" + targetInfo["UserName"] + "</span>";
	AppendMessage("Private chat session with " + link, "contents_" + target);
	
    // set input box on focus
    document.getElementById("input_" + target).focus();
	return true;
}

function displayEmoticons(e)
{
	if(document.getElementById("emoticons").style.display == "block")
	{
		return hideEmoticons();
	}
	
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	
	var x = document.getElementById("emoticons");
	document.getElementById("emoticonBtn").style.border = "inset 1px";
	x.style.display = "block";
	x.style.left = (posx - 5) + "px";
	x.style.top  = (posy - x.style.height.replace("px", "") - 45) + "px";
}

function hideEmoticons()
{
	document.getElementById("emoticons").style.display = "none";
	document.getElementById("emoticonBtn").style.border = "";
}

function addEmote(o)
{
	document.getElementById("message").value = document.getElementById("message").value + o;
	hideEmoticons();
	document.getElementById("Submit").disabled=false;
	if(!document.getElementById("message").disabled && document.getElementById("message").disabled != "disabled")
		document.getElementById("message").focus();
}
function swapTimestamp(obj)
{
	if (!document.styleSheets) return;
	var theRules = new Array();
	if (document.styleSheets[0].cssRules)
		theRules = document.styleSheets[0].cssRules;
	else if (document.styleSheets[0].rules)
		theRules = document.styleSheets[0].rules;
	else return
	
	if(theRules[0].style.display != "none")
	{
		obj.style.border = "";
		theRules[0].style.display = "none";
	}
	else
	{
		obj.style.border = "inset 1px";
		theRules[0].style.display = "";
	}
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function EnableWebcam()
{
    // Create Panel Div
    var panelDiv = document.createElement("div");
    panelDiv.className = "panelDiv";
    panelDiv.id = "VideoWindow";
    
    // Add to main document
    document.body.appendChild(panelDiv);
    
	var window = new VideoWindow();
	
	
	$("#enableWebcamLink").hide();
	$("#disableWebcamLink").show();
	
	var CE = new Object();
	CE.A = "SendChatMessage";
	CE.Message = "{Chat Enabled}";
	CE.FontFace = FontFace;
	CE.FontSize = FontSize;
	CE.FontColor = FontColor;
	CE.Bold = Bold;
	CE.Italic = Italic;
	CE.Underline = Underline;
	
	var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
	thisMovie("XMLSocket").SocketSendData(xmlData);
}

function DisableWebcam()
{
	document.getElementById("VideoWindow").parentNode.removeChild(document.getElementById("VideoWindow"));
	
	$("#enableWebcamLink").show();
	$("#disableWebcamLink").hide();
	
	
	var CE = new Object();
	CE.A = "SendChatMessage";
	CE.Message = "{Chat Disabled}";
	CE.FontFace = FontFace;
	CE.FontSize = FontSize;
	CE.FontColor = FontColor;
	CE.Bold = Bold;
	CE.Italic = Italic;
	CE.Underline = Underline;
	
	var xmlData = XmlDeclaration + Sarissa.xmlize(CE, "CE");
	thisMovie("XMLSocket").SocketSendData(xmlData);
}