function Kmsg(kmsg_user,kmsg_div,kmsg_class,kmsg_nocookie) {
	var k = this;
	var d = document;
	var ns = (navigator.appName.indexOf("Netscape") != -1);
	var userme = "";
	var kmsg_rt = 3000;
	var kmsg_rtm = 1000;	
	var kmsg_rt_orig = kmsg_rt;
	var kmsg_rtm_orig = kmsg_rtm;	
	var idme = -1;
	var typeidme = -1;
	var last = 0;
	var offset = 150;
	var topZ = 100010;
	var unknownArray = [];var openWindows = [];var names = [];var nicknames = [];var queue = [];var arrayAnon = [];
	var checkingMsgs = false;var unread = false;var moved = false;
	var title = d.title;
	var color = '#6699CC';
	var color2 = '#E3C4C9';
	var stoppedReq = 0;
	var focusedID;
	var anon = 0;
	var lastGet = 0;
	var timeOut;
	var lastAct;
	var chatAvail = -1;
	var nameUpdate = -1;
	var status = 1, statC = 1;
	var displayChat_div = kmsg_div;
	var displayChat_class = kmsg_class;
	var custRep;
	var custRepID;
	var forceWI = true;
	var km_active = 0;
	var promptStore = '';
	var promptFlag = false;
	var setopen = false;
	var embed = null;
	var pageID = -1;
	var soundavail = false;
	var debug = false;
	var pageRejected = false;
	var loadingCount = 0;
	
	function iLoc(name) {return 'https://secure.juliannarae.com/kmsg/' + name + '.GIF';}
	function PreImg(){var myimages=new Array();for (i=0;i<PreImg.arguments.length;i++){myimages[i] = new Image();myimages[i].src = PreImg.arguments[i];}}
	PreImg(iLoc('chatliveBlue'),iLoc('chatliveRed'),iLoc('km_close'),iLoc('km_close2'));
	function createObj(t,n,i,c) {var tmp = d.createElement(t);tmp.id = (i) ? n + i : n;if (c || i) {tmp.className = (c) ? c : n;}return tmp;}
	function in_array(arr,need) {for(var i=0;i<arr.length;i++) {if(arr[i] == need) {return true;}}return false;}
	function exists(el) {return (d.getElementById(el) == null) ? false : true;}

	this.setFocus=function(id){focusedID = id;}
	this.updateTopZ=function(id){topZ++;id.style.zIndex = topZ;}
	this.hide=function(id){if(id != null){id.style.display = 'none';}}
	this.show=function(id){if(id != null){id.style.display = 'block';}}
	this.moreLast=function(msgid){if(last < parseInt(msgid)){return true;} else {return false;}}
	this.updateLast=function(msgid){if(last < parseInt(msgid)){last = parseInt(msgid);return true;}else{return false;}}
	this.clearChatWindow=function(id){d.getElementById('kmsg_chat' + id).value = '';}
	this.nameExists = function(user) {for (var x=0;x<=names.length;x++){if(names[x]==user.toLowerCase()){return openWindows[x];}}return -1;}
	this.addWindow=function(id){openWindows.push(id);}
	this.addName=function(id){names.push(id.toLowerCase());}
	this.addNickName=function(id){nicknames.push(id.toLowerCase());}
	this.getNodeText=function(node) {return (node.firstChild != null) ? node.firstChild.nodeValue : '';}
	this.removeWindow = function(id) {
		var newArray = [];var newArray2 = [];
		for (var i=0;i<openWindows.length;i++) {
			if (openWindows[i] != id) {
				newArray.push(openWindows[i]);
				newArray2.push(names[i]);
			}
		}
		openWindows = newArray;
		names = newArray2;		
		var tempNode = document.getElementById('kmsg_win' + id);
	    tempNode.parentNode.removeChild(tempNode);
	}
		
	this.readMsg = function(u) {
		var jtop_div = d.getElementById('kmsg_top' + u);
		if (jtop_div != null) {
			if (d.title != title) {d.title = title;}
			d.getElementById('kmsg_unread' + u).value = 0;
			unread = true;
		}
	}
	
	this.unreadMsg = function(name,u,type) {
		if ((typeidme == 3) && (!forceWI)) {
			if (!soundavail) {
				try {
					soundavail = true;
					soundManager.createSound({id:'newmsg',url:'https://secure.juliannarae.com/sounds/bubble.mp3'});
				}
				catch(err){}
			}
			try {
				if (debug) {
					d.body.appendChild(d.createTextNode('soundplayed'));
					d.body.appendChild(d.createElement('br'));
				}
				soundManager.play('newmsg');
			}
			catch(err){if (debug) {alert(err);}}
		}
		d.title = name + ' says..';
		d.getElementById('kmsg_unread' + u).value = 1;
		unread = true;
	}

	function Browser() {
		var ua, s, i;this.isIE=false;this.isNS=false;this.version=null;
		ua = navigator.userAgent;
		s = "MSIE";
		if ((i = ua.indexOf(s)) >= 0) {
			this.isIE = true;
			this.version = parseFloat(ua.substr(i + s.length));
			return;
		}
		s = "Netscape6/";
		if ((i = ua.indexOf(s)) >= 0) {
			this.isNS = true;
			this.version = parseFloat(ua.substr(i + s.length));
			return;
		}
		s = "Gecko";
		if ((i = ua.indexOf(s)) >= 0) {
			this.isNS = true;
			this.version = 6.1;
			return;
		}
	}	
	var browser = new Browser();

	var drag = new Object();
	drag.zIndex = 0;

	var dragArr = [];
	
	this.dragStart = function(event,id) {
		dragArr['kmsg_search'] = true;
		var x,y;
		drag.target = d.getElementById(id);
		if (browser.isIE) {
			x = window.event.clientX + d.documentElement.scrollLeft + d.body.scrollLeft;
			y = window.event.clientY + d.documentElement.scrollTop + d.body.scrollTop;
		}
		else if (browser.isNS) {
			x = event.clientX + window.scrollX;
			y = event.clientY + window.scrollY;
		}
		drag.cursorStartX = x;
		drag.cursorStartY = y;
		drag.startX  = parseInt(drag.target.style.left, 10);
		drag.startY  = parseInt(drag.target.style.top, 10);
		if (isNaN(drag.startX)) {drag.startX=0;}
		if (isNaN(drag.startY)) {drag.startY=0;}
		drag.target.style.zIndex = ++drag.zIndex;
		if (browser.isIE) {
			d.attachEvent("onmousemove", k.dragGo);
			d.attachEvent("onmouseup",   k.dragStop);
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		else if (browser.isNS) {
			d.addEventListener("mousemove", k.dragGo, true);
			d.addEventListener("mouseup", k.dragStop, true);
			event.preventDefault();
		}
	}

	this.dragGo = function(event) {
		var x,y;
		if (browser.isIE) {
			x = window.event.clientX + d.documentElement.scrollLeft + d.body.scrollLeft;
			y = window.event.clientY + d.documentElement.scrollTop + d.body.scrollTop;
		}
		else if (browser.isNS) {
			x = event.clientX + window.scrollX;
			y = event.clientY + window.scrollY;
		}
		drag.target.style.left = (drag.startX + x - drag.cursorStartX) + "px";
		drag.target.style.top  = (drag.startY + y - drag.cursorStartY) + "px";
		if (browser.isIE) {window.event.cancelBubble = true;window.event.returnValue = false;}
		if (browser.isNS) {event.preventDefault();}
	}

	this.dragStop = function(event) {
		dragArr['kmsg_search'] = false;
		k.checkWindows();
		k.setMoved();
		if (browser.isIE) {
			d.detachEvent("onmousemove", k.dragGo);
			d.detachEvent("onmouseup", k.dragStop);
		}
		else if (browser.isNS) {
			d.removeEventListener("mousemove", k.dragGo, true);
			d.removeEventListener("mouseup", k.dragStop, true);
		}
	}

	this.checkWindows = function() {
		var xpos, ypos;
		for (var i=0;i<openWindows.length;i++) {
			xpos = d.getElementById('kmsg_win' + openWindows[i]).style.left;
			ypos = d.getElementById('kmsg_win' + openWindows[i]).style.top;
			xpos = xpos.replace('px','');
			ypos = ypos.replace('px','');
			
			if (xpos < 0) {
				d.getElementById('kmsg_win' + openWindows[i]).style.left = '0px';
			}
			if (ypos < 0) {
				d.getElementById('kmsg_win' + openWindows[i]).style.top = '0px';
			}
			if ((xpos < 0) || (ypos < 0)) {
				this.setMoved();
			}
		}
	}

	this.printTime = function() {
		if (debug) {
			var tempDate = new Date();
			var minutes = tempDate.getMinutes() + "";
			if (minutes.length == 1) {
				minutes = "0" + minutes;
			}
			var seconds = tempDate.getSeconds() + "";
			if (seconds.length == 1) {
				seconds = "0" + seconds;
			}
			d.body.appendChild(d.createTextNode(tempDate.getHours() + ':' + minutes + ':' + seconds));
		}
	}

	this.getMessages = function(norepeat) {
		if (!pageRejected) {
		this.printTime();
		if ((new Date()).getTime() < lastGet + kmsg_rtm) {return;}
		if (!norepeat) {
			clearTimeout(timeOut);
			timeOut = setTimeout('kmsg.getMessages()',kmsg_rt);
		}
		var node, msgid, user, u, fromme, time, content,
		pos, xpos, ypos, postvars, postvals, i, sentIDs, type, read, groupname;

		var xmlDoc, record, numR;
		var cb = function (result) {
			try {
			if (debug) {
				d.body.appendChild(d.createTextNode(result.responseText));
				d.body.appendChild(d.createElement('br'));
			}
			
			xmlDoc = result.responseXML.documentElement;
			
			numR = xmlDoc.getElementsByTagName('prompt').length;
			if (numR > 0) {
				k.promptName();
			}

			if (xmlDoc.getElementsByTagName('data').length > 0) {
				numR = xmlDoc.getElementsByTagName('idme').length;
				if (numR > 0) {
					node = xmlDoc.getElementsByTagName('idme').item(0);
					idme = node.getAttribute('id');
					typeidme = parseInt(node.getAttribute('typeid'));
					k.createCookie('kmessage',idme + ',' + node.getAttribute('nonce') + ',' + userme,60);
				}

				numR = xmlDoc.getElementsByTagName('pagerejected').length;
				if (numR > 0) {
					k.rejectPage();
				}
				numR = xmlDoc.getElementsByTagName('info').length;
				for (i=0;i<numR;i++) {
					node = xmlDoc.getElementsByTagName('info').item(i);	
					k.changeWin(node.getAttribute('name'),node.getAttribute('id'),node.getAttribute('x'),node.getAttribute('y'),node.getAttribute('read'),node.getAttribute('status'),parseInt(node.getAttribute('type')));						
				}
				numR = xmlDoc.getElementsByTagName('msg').length;
				for (i=0;i<numR;i++) {
					node = xmlDoc.getElementsByTagName('msg').item(i);
					k.displayMessage(node.getAttribute('name'),node.getAttribute('id'),unescape(k.getNodeText(node)),node.getAttribute('fromme'),node.getAttribute('time'),node.getAttribute('msgid'),node.getAttribute('userid'));
				}
				numR = xmlDoc.getElementsByTagName('updateid').length;
				for (i=0;i<numR;i++) {
					k.updateLast(k.getNodeText(xmlDoc.getElementsByTagName('updateid').item(i)));
				}						
				numR = xmlDoc.getElementsByTagName('status').length;
				for (i=0;i<numR;i++) {
					node = xmlDoc.getElementsByTagName('status').item(i);	
					k.updateStatus(node.getAttribute('id'),parseInt(node.getAttribute('type')),parseInt(node.getAttribute('stat')),node.getAttribute('name'),node.getAttribute('userid'));
				}
				
				numR = xmlDoc.getElementsByTagName('sent').length;
				if (numR > 0) {
					node = xmlDoc.getElementsByTagName('sent').item(0);
					sentIDs = node.getAttribute('ids').split(',');
					k.removeFromQueue(sentIDs);
				}
				k.checkWindows();
				
			}
			forceWI = false;
			}
			catch(err){ if (debug) {alert(err);}
			}
			checkingMsgs = false;
			stoppedReq = 0;
		};
		if ((!checkingMsgs) || (stoppedReq > 2)) {			
			if (debug) {
				d.body.appendChild(d.createTextNode('s' + stoppedReq + 's'));
			}
			
			lastGet = (new Date()).getTime();
					
			if (stoppedReq > 2) {
				stoppedReq = 0;
			}
			checkingMsgs = true;
			if (idme == -1) {
				postvars = ['func','name','lastmsg'];
				postvals = ['getMessages',userme,last];
			}
			else {
				postvars = ['func','userid','lastmsg'];
				postvals = ['getMessages',idme,last];
			}
						
			if (moved || unread || setopen) {
				pos = this.getWindowData();
				postvars = postvars.concat(pos[0]);
				postvals = postvals.concat(pos[1]);
				moved = false;
				unread = false;
			}
			
			if (queue.length > 0) {
				pos = this.convertQueue();
				postvars = postvars.concat(pos[0]);
				postvals = postvals.concat(pos[1]);
			}

			postvars = postvars.concat('page');
			postvals = postvals.concat(window.location.href);
			
			if (statC) {
				statC = false;
				postvars = postvars.concat('status');
				postvals = postvals.concat(status);
			}

			if (forceWI) {
				postvars = postvars.concat('forceWI');
				postvals = postvals.concat('1');
			}
			postvars = postvars.concat('pageID');
			postvals = postvals.concat(pageID);
			
			if (setopen) {
				postvars = postvars.concat('setopen');
				postvals = postvals.concat('1');
				
				postvars = postvars.concat('custrepid');
				postvals = postvals.concat(custRepID);
				setopen = false;
			}

			k.AJCall(cb, [], [postvars,postvals]);
		}
		else {
			stoppedReq++;
			if (debug) {
				d.body.appendChild(d.createTextNode('s' + stoppedReq + 's'));
			}
		}
		}
	}

	this.rejectPage = function() {
		pageRejected = true;
		for(var i=0;i<openWindows.length;i++) {
			div = d.getElementById('kmsg_win' + openWindows[i]);
			d.getElementById('kmsg_view' + openWindows[i]).innerHTML = '<font class="kmsg_div">It seems that you\'ve more recently opened or used another ' + companyname + ' browser window. Chatting is available there now. If you would like to chat here instead, either refresh this page or click a link!</font>';
			d.getElementById('kmsg_chat' + openWindows[i]).innerHTML = 'Chat is disabled here. See above.';
			d.getElementById('kmsg_chat' + openWindows[i]).style.backgroundColor = '#EEEEEE';
			d.getElementById('kmsg_chat' + openWindows[i]).disabled = true;			
		}
	}

	this.send = function(id,msg,admin) {
		if (msg == '') {return false;}
		if (id == idme) {alert('No sending yourself messages!');this.clearChatWindow(id);return;}
		
		if (debug) {
			d.body.appendChild(d.createTextNode('sent'));
			this.printTime();
		}
			
		if (promptFlag) {
			promptFlag = false;
			this.clearChatWindow(id);
			d.getElementById('kmsg_view' + custRepID).innerHTML = '<font class="kmsg_div">Loading..</font>';
			loadingCount = loadingCount + 1;
			var cb = function (result) {
				xmlDoc = result.responseXML.documentElement;
				if (xmlDoc.getElementsByTagName('success').length > 0) {kmsg.getMessages();}
			};
			k.AJCall(cb, [], [['func','name','userid','custrepid'],['setName',msg,idme,custRepID]]);
		}
		else {			
			var dd = new Date();
			queue.push([id + '_' + dd.getTime(),msg]);
			this.addToView('',id,msg,1);
			this.clearChatWindow(id);
			this.updateTime(id,dd.getTime());
			this.getMessages();
		}
	}
	
	this.convertQueue = function() {
		var copyQueue = queue;
		var retvars = [];
		var retvals = [];
		var users = '';

		for(var i=0;i<copyQueue.length;i++) {
			users += copyQueue[i][0] + ',';
			retvars.push('s' + copyQueue[i][0]);
			retvals.push(copyQueue[i][1]);
		}
		retvars.push('su');
		retvals.push(users);
		return [retvars,retvals];
	}

	this.removeFromQueue = function(sentIDs) {
		var copyQueue = queue;
		queue = [];
		var i,j,keep;
		var newArray = [];
		for(i=0;i<copyQueue.length;i++) {
			keep = true;
			for(j=0;j<sentIDs.length;j++) {
				if (copyQueue[i][0] == sentIDs[i]) {
					keep = false;
				}
			}
			if (keep) {
				newArray.push(copyQueue[i]);
			}
		}
		queue = queue.concat(newArray);
	}
		
	this.setMoved = function() {
		moved = true;
		this.getMessages();
	}
	
	this.getWindowData = function() {
		var retvars = [];
		var retvals = [];
		var div;
		var val;
		for(var i=0;i<openWindows.length;i++) {
			div = d.getElementById('kmsg_win' + openWindows[i]);
			val = openWindows[i] + ',' + div.style.left + ',' + div.style.top;
			if (d.getElementById('kmsg_unread' + openWindows[i]).value == 1) {
				val += ',u';
			}
			else {
				val += ',r';
			}
			retvars.push('u' + i);
			retvals.push(val);
		}
		return [retvars,retvals];
	}
	
	this.changeWin = function(name,u,xpos,ypos,read,stat,type) {
		if (!exists('kmsg_win' + u)) {
			this.createChat(u,name,type,xpos,ypos);
		}
		this.updateName(u,name);
		if (read == 0) {this.unreadMsg(name,u,type);}
		
		if (!type) {
			changeStatus(u,stat);
		}
	}

	function changeStatus(u,stat) {
		if (d.getElementById('kmsg_sts' + u) != null) {
			d.getElementById('kmsg_sts' + u).style.backgroundColor = (stat == '1') ? '#00FF00' : (stat == '2') ? '#FFFF00' : '#CCCCCC';
		}
	}
	
	this.displayMessage = function(user,u,content,fromme,time,msgid,userid) {
		var type;
		if (u == userid) {
			type = 0;
		}
		else {
			type = 1;
		}
		if (!exists('kmsg_win' + u)) {
			this.createChat(u,user,0);
			this.updateName(u,user);
		}
		this.updateTime(u,time*1000);
		this.addToView(user,u,content,fromme,msgid,time*1000);
		this.show(d.getElementById('kmsg_win' + u));
		this.updateTopZ(d.getElementById('kmsg_win' + u));
		if (!forceWI) {
			if (fromme == 0) {
				if (focusedID != u) {
					this.unreadMsg(user,u,type);
				}
			}
			else {
				this.readMsg(u);
			}
		}
	}
	
	this.addToView = function(user,u,content,fromme,msgid,time) {
		if ((d.getElementById('kmsg_view' + custRepID) != null) && (d.getElementById('kmsg_view' + custRepID).innerHTML.indexOf('>Loading..<') != -1) && (loadingCount > 0)) {
			d.getElementById('kmsg_view' + custRepID).innerHTML = '';
			loadingCount = loadingCount - 1;
		}
		
		var jview_div = d.getElementById('kmsg_view' + u);
		var msg = d.createElement('div');
		msg.className = 'kmsg_div';
		if (msgid) {msg.id = msgid;}
		if ((this.moreLast(msgid)) || (!msgid)) {
			if (fromme == 2) {
				var dd = new Date();
				dd.setTime(time);
				var hours = (dd.getHours() > 12) ? (dd.getHours() - 12) : dd.getHours()
				var minutes = dd.getMinutes() + "";
				if (minutes.length == 1) {
					minutes = "0" + minutes;
				}
				var ampm = (dd.getHours() > 11) ? 'PM' : 'AM';
				var timeText = (dd.getMonth() + 1) + '/' + dd.getDate() + ', ' + hours + ':' + minutes + ' ' + ampm;
				
				msg.innerHTML = content + ' ' + timeText;
				msg.style.color = '#CCCCCC';
				
				if (content == 'Session ended on') {
					d.getElementById('kmsg_chat' + u).innerHTML = 'Your chat has ended. Please start a new session.';
					d.getElementById('kmsg_chat' + u).style.backgroundColor = '#EEEEEE';
					d.getElementById('kmsg_chat' + u).disabled = true;
				}
				else if (d.getElementById('kmsg_chat' + u).disabled) {
					d.getElementById('kmsg_chat' + u).disabled = false;
					d.getElementById('kmsg_chat' + u).style.backgroundColor = '#FFFFFF';
					d.getElementById('kmsg_chat' + u).innerHTML = '';
				}
			}
			else {
				msg.innerHTML = (fromme == 1) ? '<b>me' : '<b>' + user;
				msg.innerHTML += ': &nbsp;&nbsp;</b>' + content + "\n";
			}
			jview_div.appendChild(msg);
			jview_div.scrollTop = jview_div.scrollHeight;
		}
	}
	
	this.updateName = function(u,user) {d.getElementById('kmsg_name' + u).innerHTML = user;}
	this.updateTime = function(u,time) {
		var tempDate = new Date();
		tempDate.setTime(time);
		var hours = (tempDate.getHours() > 12) ? (tempDate.getHours() - 12) : tempDate.getHours()
		var minutes = tempDate.getMinutes() + "";
		if (minutes.length == 1) {
			minutes = "0" + minutes;
		}
		var ampm = (tempDate.getHours() > 11) ? 'PM' : 'AM';
		d.getElementById('kmsg_time' + u).innerHTML = 	(tempDate.getMonth() + 1) + '/' + tempDate.getDate() + ', ' + hours + ':' + minutes + ' ' + ampm;
	}

	this.updateStatus = function(id,type,stat,name,u) {
		if (type == 1) {
			this.updateGroup(id,stat,name,u);
		}
		else if (type == 0){
			changeStatus(u,stat);
		}
	}

	this.isOpen = function(u) {
		if (exists('kmsg_win' + u)) {
			if (in_array(openWindows,u)) {			
				alert('That window is already open!');
			}
			else {
				this.show(d.getElementById('kmsg_win' + u));
			}
			return true;
		}
		else {
			return false;
		}
	}

	this.closeChat = function(u,type) {	
		var conf = '1';
		var resp;
				
		if (d.getElementById('kmsg_chat' + u).disabled) {
			resp = true;
			conf = '0';
		}
		else {
			if (typeidme == 3) {
				resp = confirm("Are you sure you want to close\nthe session with this user?");
				
				if (resp) {
					resp = confirm("Are you REALLY sure you want to close\nthe session with this user?");	
				}
			}
			else {
				resp = confirm("Are you sure you want to close the chat window?\n\nIf you do, you'll need to start a new session with " + custRep + '.');
			}	
		}
		
		
		if (resp) {
			var k_window_div = d.getElementById('kmsg_win' + u);
			this.hide(k_window_div);
			this.removeWindow(u);
	
			var cb = function (result) {
				var xmlDoc = result.responseXML.documentElement;
				if (xmlDoc.getElementsByTagName('success').length > 0) {
					if (typeidme != 3) {
						kmsg.getMessages(true);
						clearTimeout(timeOut);
					}
				}
			};
			k.AJCall(cb, [], [['func','to','from','type','conf'],['close',u,idme,type,conf]]);
		}
	}
	
	this.getID = function (name,temp_anon,type) {
		if (!type) {type = 0;}
		var page = '';
		var xmlDoc, ss;
		if (type == 2) {page = window.location.href;}
		if (arrayAnon[temp_anon]) {
			var cb = function (result) {
				xmlDoc = result.responseXML.documentElement;
				if (xmlDoc.getElementsByTagName('success').length > 0) {
					ss = xmlDoc.getElementsByTagName('success').item(0);
					k.popChat(ss.getAttribute('id'),ss.getAttribute('name'),ss.getAttribute('stat'),temp_anon,type);
				}
				else {
					arrayAnon[temp_anon] = false;
					d.getElementById('kmsg_chat' + temp_anon).innerHTML = 'That name does not exist on the messaging network!';
				}
			};				
				
			k.AJCall(cb, [], [['func','name','type','page','userid'],['getID',name,type,page,idme]]);
			setTimeout('kmsg.getID("' + name + '","' + temp_anon + '")',1000);
		}
	}
	
	this.promptName = function() {
		var xmlDoc, ss;		
		promptStore = d.getElementById('kmsg_view' + custRepID).innerHTML;
		promptFlag = true;
		d.getElementById('kmsg_view' + custRepID).innerHTML = '<font class="kmsg_div">Please type your name in the chat box below and press Enter. Then we can begin chatting!</font>';
	}
	
	this.openChat = function(user,type) {
		if (!type) {type = 0;}
		var temp_id = this.nameExists(user);
		if (temp_id != -1) {
			this.show(d.getElementById('kmsg_win' + temp_id));
		}
		else {
			var temp_anon = 'anon' + anon;
			anon++;
			this.createChat(temp_anon,user,type);
			d.getElementById('kmsg_chat' + temp_anon).innerHTML = 'One moment please..';
			d.getElementById('kmsg_chat' + temp_anon).disabled = true;
			this.show(d.getElementById('kmsg_win' + temp_anon));
			this.updateTopZ(d.getElementById('kmsg_win' + temp_anon));
			this.updateName(temp_anon,user);
			arrayAnon[temp_anon] = true;
			this.getID(user,temp_anon,type);			
		}
	}
		
	this.popChat = function(u,user,stat,temp_anon,type) {
		if (arrayAnon[temp_anon]) {
			arrayAnon[temp_anon] = false;
			var tempArray = ['kmsg_win','kmsg_top','kmsg_name','kmsg_time','kmsg_close','kmsg_view','kmsg_chat','kmsg_unread'];
			if (!type) {
				tempArray.push('kmsg_sts');
			}
			for (var name in tempArray) {
				d.getElementById(tempArray[name] + temp_anon).id = tempArray[name] + u;
			}
			this.updateName(u,user);
			var k_chat = d.getElementById('kmsg_chat' + u);
			k_chat.innerHTML = '';
			k_chat.disabled = false;

			d.getElementById('kmsg_win' + u).onmousedown = function() {kmsg.readMsg(u);kmsg.updateTopZ(this);};
			d.getElementById('kmsg_close' + u).onclick = function() {return kmsg.closeChat(u,type);}
	
			k_chat.onkeypress = function(event) {return kmsg.keypress(this,event);};
			k_chat.onfocus = function() {this.style.border = '2px solid black';kmsg.setFocus(u);};
			k_chat.onblur = function() {this.style.border = '1px solid gray';kmsg.setFocus(u);};

			d.getElementById('kmsg_top' + u).onmousedown = function(event) {kmsg.dragStart(event, 'kmsg_win' + u);};
			if (type) {
				d.getElementById('kmsg_win' + u).style.width = '400px';
				d.getElementById('kmsg_top' + u).style.width = '400px';
				d.getElementById('kmsg_view' + u).style.width = '396px';
				d.getElementById('kmsg_chat' + u).style.width = '388px';
			}
			
			this.removeWindow(temp_anon);
			this.addWindow(u);
			this.addName(user);
			changeStatus(u,stat);
		}
	}
	
	this.getUserLoc = function(u) {
		var cb = function (result) {
			if (debug) {
				d.body.appendChild(d.createTextNode(result.responseText));
				d.body.appendChild(d.createElement('br'));
			}
			
			xmlDoc = result.responseXML.documentElement;
			if (xmlDoc.getElementsByTagName('success').length > 0) {
				kmsg.setChatAvail(1);

				node = xmlDoc.getElementsByTagName('success').item(0);
				window.location = node.getAttribute('loc');
			}
		};		
		k.AJCall(cb, [], [['func','userid'],['getUserLoc',u]]);
	}
	
	this.createChat = function(u,user,type,xpos,ypos) {
		var k_win = createObj('div','kmsg_win',u);
		this.hide(k_win);

		if (xpos && (xpos != '')) {
			k_win.style.left = xpos + 'px';
		}
		else {
			k_win.style.left = offset + 'px';
			offset = offset + 50;
		}

		k_win.style.top = (ypos && (ypos != ''))  ? ypos + 'px' : '50px';		
		k_win.onmousedown = function() {kmsg.readMsg(u);kmsg.updateTopZ(this);};

		var k_top = createObj('div','kmsg_top',u);
		k_top.onmousedown = function(event) {kmsg.readMsg(u);kmsg.updateTopZ(d.getElementById('kmsg_win' + u));kmsg.dragStart(event, 'kmsg_win' + u);};
		k_top.innerHTML = '&nbsp;';
		
		var k_name = createObj('div','kmsg_name',u);
		if (typeidme == 3) {
			k_name.style.textDecoration = 'underline';
			k_name.style.cursor = 'pointer';
			k_name.innerHTML = user;
			k_name.onclick = function(event) {kmsg.getUserLoc(u)};
		}
		else {
			k_name.innerHTML = user;			
		}
		var k_time = createObj('div','kmsg_time',u);
		
		var k_close = createObj('img','kmsg_close',u,'kmsg_box');
		k_close.style.right = '0px';
		k_close.src = iLoc('km_close');
		k_close.onmouseover = function(event) {kmsg.swapImg(this,'km_close2');};
		k_close.onmouseout = function(event) {kmsg.swapImg(this,'km_close');};
		
		k_close.onclick = function() {return kmsg.closeChat(u,type);}

		if (typeidme == 3) {
			var k_sts = createObj('span','kmsg_sts',u);
			k_sts.innerHTML = '&nbsp;';
			k_top.appendChild(k_sts);
		}
		else {
			k_name.style.left = '5px';
		}

		k_top.appendChild(k_name);
		k_top.appendChild(k_time);
		k_top.appendChild(k_close);

		var k_view = createObj('div','kmsg_view',u);
		var kmsg_chat_cont = createObj('div','kmsg_chat_cont',u);
		var k_chat = createObj('textarea','kmsg_chat',u);
		k_chat.onkeypress = function(event) {return kmsg.keypress(this,event);};
		k_chat.onfocus = function() {this.style.border = '2px solid black';kmsg.setFocus(u);};
		k_chat.onblur = function() {this.style.border = '1px solid gray';kmsg.setFocus('');};

		var k_logo = createObj('img','kmsg_logo');
		k_logo.src = iLoc('logo');
		k_logo.style.position = 'absolute';
		k_logo.style.top = '44px';
		k_logo.style.left = '3px';

		var k_endsess = createObj('button','kmsg_button',u);
		k_endsess.innerHTML = 'End Session';
		k_endsess.onclick = function(event) {kmsg.closeChat(u,type);};
		k_endsess.style.position = 'absolute';
		k_endsess.style.top = '44px';
		k_endsess.style.right = '0px';
		
		kmsg_chat_cont.appendChild(k_chat);
		kmsg_chat_cont.appendChild(k_logo);
		kmsg_chat_cont.appendChild(k_endsess);
		
		var k_unread = createObj('input','kmsg_unread',u);
		k_unread.value = '0';

		k_win.appendChild(k_top);
		k_win.appendChild(k_view);
		k_win.appendChild(kmsg_chat_cont);
		k_win.appendChild(k_unread);

		d.body.appendChild(k_win);
				
		if (browser.isNS) {
			d.getElementById('kmsg_chat_cont' + u).style.width = '268px';
			d.getElementById('kmsg_view' + u).style.width = '268px';
			d.getElementById('kmsg_top' + u).style.width = '268px';			
			d.getElementById('kmsg_chat_cont' + u).style.height = '60px';
		}
		this.addWindow(u);
		this.addName(user);
		this.show(k_win);
	}
	
	this.keypress = function(myfield,e) {
		var code;
		if (!e) {var e = window.event;}
		if (e.keyCode) {code = e.keyCode;}
		else if (e.which) {code = e.which;}
		else {return true;}
		
		var id = myfield.id;
		id = id.replace('kmsg_chat','');
		this.readMsg(id);
		if (code == 13) {kmsg.send(id,myfield.value);return false;}
		else {return true;}
	}
		
	this.AJCall = function(callback, args, postArray) {
		var url = d.URL;
		var domain = d.domain;
		var prefix = url.substring(0,(parseInt(url.indexOf(domain)) + domain.length)) + '/';

		var url = prefix + 'kmsg_send.php';
		var postStr = '';
		if (postArray)  {
			for(i=0;i<postArray[0].length;i++) {
				postStr += postArray[0][i] + '=' + escape(postArray[1][i]);
				if (i != (postArray[0].length - 1)) {
					postStr += '&';
				}
			}
		}
	    var request = null;
	    var _cb = function () {try {if ((request.readyState == 4) && (request.status == 200)) {args.unshift(request);callback.apply(this,args);}} catch(e){}}	    
		if (window.ActiveXObject) {
	        request = new ActiveXObject("Microsoft.XMLHTTP");
	        if (request) {
	            try {request.onreadystatechange = _cb;request.open('POST', url, true);request.send(postStr);} catch(e) {request = null;}
	        }
	    }
	    else if (window.XMLHttpRequest) {
	        request = new XMLHttpRequest();
	        if (request) {
	            try {request.onreadystatechange = _cb;request.open('POST', url, true);request.send(postStr);} catch(e) {request = null;}
	        }
	    }
	}
	
	this.setChatAvail = function(val) {
		chatAvail = val;
	}
	
	this.setCustRep = function(id,name,active) {
		km_active = active;
		custRep = name;
		custRepID = id;
		if (chatAvail == 1) {
			this.displayChat(displayChat_div,displayChat_class);
			this.displayChat2(displayChat_div + '2',displayChat_class);
			this.displayChat3(displayChat_div + '3',displayChat_class);
		}
		if (km_active == 1) {
			kmsg.getMessages();
		}
		else {
			kmsg.getMessages(true);
		}
	}
	
	this.isChatAvail = function() {
		var xmlDoc, ss, numR, node, cookie, cookieArr;
		var override = '0';
		var nonce = '0';
		var nocookie = '0';
		if (kmsg_nocookie) {
			userme = kmsg_user;
			override = 0;
			nocookie = '1';
		}
		else {
			cookie = this.readCookie('kmessage');
			if (cookie != null) {
				if (debug) {
					d.body.appendChild(d.createTextNode('cookieread' + cookie));
					d.body.appendChild(d.createElement('br'));
				}
				
				cookieArr = cookie.split(',');
				if (cookieArr.length == 3) {
					idme = cookieArr[0];
					nonce = cookieArr[1];
					userme = cookieArr[2];
				}
			}
			
			if ((kmsg_user) && (kmsg_user != userme)) {
				if (debug) {
					d.body.appendChild(d.createTextNode('override?' + kmsg_user + ' : ' + userme));
					d.body.appendChild(d.createElement('br'));
				}
	
				userme = kmsg_user;
				override = '1';
			}			
		}
		
		if (chatAvail == -1) {
			var cb = function (result) {
				if (debug) {
					d.body.appendChild(d.createTextNode(result.responseText));
					d.body.appendChild(d.createElement('br'));
				}
				
				xmlDoc = result.responseXML.documentElement;
				if (xmlDoc.getElementsByTagName('success').length > 0) {
					kmsg.setChatAvail(1);

					node = xmlDoc.getElementsByTagName('success').item(0);
					idme = node.getAttribute('userid');
					userme = node.getAttribute('username');					
					companyname = node.getAttribute('companyname');
					typeidme = parseInt(node.getAttribute('typeid'));
					if (typeidme != 3) {
						k.createCookie('kmessage',idme + ',' + node.getAttribute('nonce') + ',' + userme,60);
					}

					if (typeidme == 3) {
						try {
							soundManager.createSound({id:'newmsg',url:'https://secure.juliannarae.com/sounds/bubble.mp3'});
							soundavail = true;
						}
						catch(err) {}
						kmsg_rt = 1500;
						kmsg_rtm = 500;
						kmsg_rt_orig = kmsg_rt;
						kmsg_rtm_orig = kmsg_rtm;
						kmsg.displayChat(displayChat_div,displayChat_class);
						kmsg.getMessages();
					}
					else {
						kmsg.setCustRep(node.getAttribute('id'),node.getAttribute('name'),parseInt(node.getAttribute('active')));												
					}
				}
				else {kmsg.setChatAvail(0);}
			};
			k.AJCall(cb, [], [['func','userid','name','override','pageid','nonce','nocookie'],['isChatAvail',idme,userme,override,pageID,nonce,nocookie]]);	
			setTimeout('kmsg.isChatAvail()',1000);
		}
	}
	
	this.swapImg = function(el,src) {
		el.src = iLoc(src);
	}

	this.chatOver = function(el) {
		el.src = iLoc('chatliveRed');
	}

	this.chatOut = function(el) {
		el.src = iLoc('chatliveBlue');
	}

	this.displayChat = function(divname,classname) {
		if ((divname) && (d.getElementById(divname) != null) && (d.getElementById('kmsg_' + divname) == null)) {
			var k_div = d.createElement('span');
			k_div.id = 'kmsg_' + divname;
			var beforediv = d.getElementById(divname);
			k_div.innerHTML = '<span style="cursor:pointer;font-family: serif; font-size: 12px; color: #3366CC;" onclick="kmsg.startChat();" >' +
					'<img id="kmsg_chat" src="https://secure.juliannarae.com/kmsg/chatliveBlue.GIF" onmouseover="kmsg.chatOver(this);" onmouseout="kmsg.chatOut(this);" /></span>';
			if (classname) {k_div.className = classname;}
			beforediv.parentNode.insertBefore(d.createElement('br'),beforediv);
			beforediv.parentNode.insertBefore(d.createTextNode(" "),beforediv);
			beforediv.parentNode.insertBefore(k_div,beforediv);
		}
	}
	
	this.displayChat2 = function(divname,classname) {
		if ((divname) && (d.getElementById(divname) != null) && (d.getElementById('kmsg_' + divname) == null)) {
			var k_div =d.createElement('span');
			k_div.id = 'kmsg_' + divname;
			var beforediv = d.getElementById(divname);
			k_div.innerHTML = 'Questions?<br /><span style="text-decoration:underline;cursor:pointer;" onclick="kmsg.startChat();" >Live Chat</span>';
			if (classname) {k_div.className = classname;}
			beforediv.parentNode.insertBefore(k_div,beforediv);
		}
	}
	
	this.displayChat3 = function(divname,classname) {
		if ((divname) && (d.getElementById(divname) != null) && (d.getElementById('kmsg_' + divname) == null)) {
			var k_div =d.createElement('span');
			k_div.id = 'kmsg_' + divname;
			var beforediv = d.getElementById(divname);
			k_div.innerHTML = 'Connect with our concierge. <span style="text-decoration:underline;cursor:pointer;" onclick="kmsg.startChat();" >Live Chat</span>';
			if (classname) {k_div.className = classname;}

			beforediv.parentNode.insertBefore(k_div,beforediv);
		}
	}
	
	this.startChat = function() {
		var dLeft = 0;
		var dTop = 0;
		if (custRepID != null) {
			if (d.getElementById('kmsg_win' + custRepID) == null) {
				this.createChat(custRepID,custRep,0,600,180);
				d.getElementById('kmsg_win' + custRepID).style.zIndex = '9999';
				setopen = true;
				forceWI = true;			
				pageRejected = false;	
				this.getMessages(false);
			}
			else {
				this.show(d.getElementById('kmsg_win' + custRepID));
			}
		}
		else {
			alert('Sorry, it seems that chat is unavailable right now. Please try back later.');
		}
	}

	function setHere() {status = 1;}
	function setIdle() {status = 2;}
	function setBusy() {status = 3;}
		
	var timerID = -1;
	
	function resetTimer() {
		if (timerID != -1) {
			clearTimeout(timerID);
			startTimer();
			if (status == 2) {
				setHere();
				statC = true;
				kmsg_rt = kmsg_rt_orig;
				kmsg_rtm = kmsg_rtm_orig;
				if ((!checkingMsgs) && (km_active == 1)) {
					kmsg.getMessages();
				}
			}
		}
	}
		
	if (browser.isIE) {
		d.attachEvent("onmousemove", resetTimer);
	}
	else if (browser.isNS) {
		d.addEventListener("mousemove", resetTimer, true);
	}

	function startTimer() {
		timerID = window.setTimeout('kmsg.timeOut()',600000);
	}
	
	this.timeOut = function() {
		if (timerID != -1) {
			if (status == 1) {
				statC = true;
				setIdle();				
			}
			startTimer();
			kmsg_rt = 15000;
			kmsg_rtm = 1000;
		}
	}
	
	this.setRand = function(rand) {
		pageID = rand;
		if (debug) {
			d.body.appendChild(d.createTextNode('rand' + pageID));
			d.body.appendChild(d.createElement('br'));
		}
	}
	
	this.createCookie = function(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 = "";
		
		var domain = d.domain;
		var domArr = domain.split('.');
		if (domArr.length >= 2) {
			domain = domArr[domArr.length - 2] + '.' + domArr[domArr.length - 1];
			document.cookie = name+"="+value+expires+"; domain="+domain+";path=/";
		}
		else {
			document.cookie = name+"="+value+expires+"; path=/";
		}	
			
		if (debug) {
			d.body.appendChild(d.createTextNode('cookiecreated' + value));
			d.body.appendChild(d.createElement('br'));
		}
	}
	
	this.readCookie = function(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;
	}
		
	this.eraseCookie = function(name) {
		this.createCookie(name,"",-1);
	}
	
	this.testCookie = function() {
		if (this.readCookie('testcookie')!='enabled') {
			this.createCookie('testcookie','enabled',1);		
		}

		if (this.readCookie('testcookie')=='enabled') {
			return true;
		}
		else {
			return false;
		}
	}
		
	startTimer();
};

kmsg_div = 'jr_questions';

if (kmsg_user == null) {
	kmsg_user = false;
}
if (kmsg_div == null) {
	kmsg_div = false;
}
if (kmsg_class == null) {
	kmsg_class = false;
}
if (kmsg_nocookie == null) {
	kmsg_nocookie = false;
}
var kmsg = new Kmsg(kmsg_user,kmsg_div,kmsg_class,kmsg_nocookie);
if (kmsg.testCookie()) {
	kmsg.setRand(Math.ceil(Math.random()*(new Date()).getTime()/1000))
	kmsg.isChatAvail();
}