// This file (except where specified otherwise) is property of Runboard.com
// Unauthorized use is prohibited




function mouseCoords(e) {
	var IE = document.all?true:false;
	if (!IE) document.captureEvents(Event.MOUSEMOVE)
	var tempX = 0;
	var tempY = 0;
	if (IE) { // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.documentElement.scrollLeft - document.body.clientLeft;
		tempY = event.clientY + document.documentElement.scrollTop - document.body.clientTop;
	} else {  // grab the x-y pos.s if browser is NS
		tempX = e.pageX;
		tempY = e.pageY;
	}  
	if (tempX < 0){tempX = 0;}
	if (tempY < 0){tempY = 0;}  
	return {
		x:tempX,
		y:tempY
	};
}
function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}
function post_new_blog() {
	e=document.getElementById("editor");
	e.style['display'] = 'block';
	newpostlink=document.getElementById("post_new_blog_link");
	newpostlink.style['display'] = 'none';
	

}
function post_new_blog_submit__() {
	var req = new XMLHttpRequest();
	req.open('POST', '/blaha', true);
	req.onreadystatechange = function() {

	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('boink=m&newfolder='+newfolder+'&to_folder='+choice+'&ak_delete_opms='+selection);
	return false;
}
function post_new_blog_submit(){
	var ajaxRequest;  // The variable that makes Ajax possible!
	
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("Your browser broke!");
				return false;
			}
		}
	}

	// Create a function that will receive data sent from the server
	ajaxRequest.onreadystatechange = function(){
		if(ajaxRequest.readyState == 4){
			document.myForm.time.value = ajaxRequest.responseText;
		}
	}
	ajaxRequest.open("GET", "serverTime.php", true);
	ajaxRequest.send(null); 

}



function comments_show_entry_cmdbar(entry, show) {
	var menu=document.getElementById("comment_entry_cmdbar_" + entry);
	if (show == 1) {
		menu.style['display'] = 'block';
	} else {
		menu.style['display'] = 'none';
	}
}
function comments_delete_entry(url, txt, editor_tag) {

	var conf = confirm(txt);
	if (conf) {
		var req = new XMLHttpRequest();
		req.open('GET', url);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				evalstr='comment_refresh_'+editor_tag+'(0);';
				eval(evalstr);
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('');

	}

}
function comments_edit_entry(getdata_url, editor_tag, comment_tag, loading_txt, param_cmtid) {

	var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;
	var blk=getref("comment_content_"+editor_tag+'_'+comment_tag);
	var ed=getref("comment_editor_"+editor_tag);
	var area=getref("comment_editor_textarea_"+editor_tag);
	var cmtid=getref("comment_editor_cmtid_"+editor_tag);
	var txt = loading_txt;
	var done = 0;
	blk.parentNode.replaceChild(ed, blk);
	ed.style['display'] = 'block';
	eval('comment_submit_type_'+editor_tag+' = "edit"');
	var req = new XMLHttpRequest();
	req.open('GET', getdata_url);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			area.innerHTML = req.responseText;
			cmtid.value = param_cmtid;
		}
	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('');


}
function comment_box_display(editor_tag, show) {

	var editor=document.getElementById("comment_editor_" + editor_tag);
	var editor_box=document.getElementById("comment_editor_textarea_" + editor_tag);
	var comment_link=document.getElementById("comment_link_" + editor_tag);
	var enable_link=document.getElementById("comment_enable_" + editor_tag);
	var disable_link=document.getElementById("comment_disable_" + editor_tag);
	var hide_link=document.getElementById("comment_hide_" + editor_tag);
	var unhide_link=document.getElementById("comment_unhide_" + editor_tag);
	var comment_messages=document.getElementById("comment_messages_" + editor_tag);
	if (show == 1) {
		editor_box.value = '';
		editor.style['display'] = 'block';
		comment_link.style['display'] = 'none';
		if (enable_link) {
			enable_link.style['display'] = 'none';
		}
		if (disable_link) {
			disable_link.style['display'] = 'none';
		}
		if (hide_link) {
			hide_link.style['display'] = 'none';
		}
		if (unhide_link) {
			unhide_link.style['display'] = 'none';
		}
		if (comment_messages) {
			comment_messages.style['display'] = 'none';
		}
	} else {
		editor.style['display'] = 'none';
		comment_link.style['display'] = 'inline-block';
		if (enable_link) {
			enable_link.style['display'] = 'inline-block';
		}
		if (disable_link) {
			disable_link.style['display'] = 'inline-block';
		}
		if (hide_link) {
			hide_link.style['display'] = 'inline-block';
		}
		if (unhide_link) {
			unhide_link.style['display'] = 'inline-block';
		}
		if (comment_messages) {
			comment_messages.style['display'] = 'block';
		}
	}
}
function comment_box_submit(objtype, objid, editor_tag) {

	eval('var submit_type = comment_submit_type_'+editor_tag);
	var s = document.getElementById('comment_editor_textarea_' + editor_tag);
	var body = s.value;
	if (body == '') {
		return 0;
	}
	var req = new XMLHttpRequest();
	var editor_box=document.getElementById("comment_editor_" + editor_tag);
	var editor_textarea=document.getElementById("comment_editor_textarea_" + editor_tag);
	var cmtid=getref("comment_editor_cmtid_"+editor_tag);
	req.open('POST', '/portal/comment_submit/objtype:'+objtype+'/objid:'+objid+'/cmtid:'+cmtid.value, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			var comment_link=document.getElementById("comment_link_" + editor_tag);
			var enable_link=document.getElementById("comment_enable_" + editor_tag);
			var disable_link=document.getElementById("comment_disable_" + editor_tag);
			editor_box.style['display'] = 'none';
			comment_link.style['display'] = 'inline';
			if (enable_link) {
				enable_link.style['display'] = 'inline';
			}
			if (disable_link) {
				disable_link.style['display'] = 'inline';
			}
			evalstr='comment_refresh_'+editor_tag+'(0);';
			eval(evalstr);
			eval('comment_submit_type_'+editor_tag+' = "new"');
		}
	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('body='+encodeURIComponent(body)+'&submit_type='+submit_type);
	editor_textarea.style.backgroundImage = "url(/img/rb/misc/spin.gif)";
	editor_textarea.style.backgroundPosition = "center center";
	editor_textarea.style.backgroundRepeat = "no-repeat";


}
function comment_toggle_comments(objtype, objid, editor_tag, toggle, toggle_type) {

	var req = new XMLHttpRequest();
	req.open('POST', '/portal/comment_toggle/objtype:'+objtype+'/objid:'+objid+'/toggle_type:'+toggle_type+'/toggle:'+toggle, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			evalstr='comment_refresh_'+editor_tag+'(0);';
			eval(evalstr);
		}
	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('');

}


function profile_blog_show_entry_menu(entry, show) {

	var menu=document.getElementById("profile_blog_entry_menu_" + entry);
	if (show == 1) {
		if (window.ak_lockmouse == 1) {
			return false;
		}
		menu.style['display'] = 'block';
	} else {
		menu.style['display'] = 'none';
	}
}
function profile_disable_tab(tab) {
	var nav_a = getref('profile_nav_tab_'+tab+'_a');
	var thetab = getref('profile_'+tab);
	var span = getref('profile_nav_tab_'+tab+'_span');
	nav_a.style['display'] = 'none';
	span.style['display'] = 'none';
	thetab.style['display'] = 'none';
}
function profile_switch_to_tab(tab, modurl) {

	// XXX do it in an at least slightly less ugly way

	var blog = document.getElementById('profile_blog');
    var misc = document.getElementById('profile_misc');
    var friends = document.getElementById('profile_friends');
    var status = document.getElementById('profile_status');

	var blog_nav_a = document.getElementById('profile_nav_tab_blog_a');
    var misc_nav_a = document.getElementById('profile_nav_tab_misc_a');
    var friends_nav_a = document.getElementById('profile_nav_tab_friends_a');
    var status_nav_a = document.getElementById('profile_nav_tab_status_a');

	var blog_nav_span = document.getElementById('profile_nav_tab_blog_span');
    var misc_nav_span = document.getElementById('profile_nav_tab_misc_span');
    var friends_nav_span = document.getElementById('profile_nav_tab_friends_span');
    var status_nav_span = document.getElementById('profile_nav_tab_status_span');


    blog.style['display'] = 'none';
    misc.style['display'] = 'none';
    friends.style['display'] = 'none';
    status.style['display'] = 'none';

    blog_nav_a.style.backgroundPosition = 'left top';
    misc_nav_a.style.backgroundPosition = 'left top';
    friends_nav_a.style.backgroundPosition = 'left top';
    status_nav_a.style.backgroundPosition = 'left top';

    blog_nav_span.style.backgroundPosition = 'right top';
    misc_nav_span.style.backgroundPosition = 'right top';
    friends_nav_span.style.backgroundPosition = 'right top';
    status_nav_span.style.backgroundPosition = 'right top';

	if (modurl == 0 && document.location.hash != '') {
		tab = document.location.hash.substr(1);
	}
	var urlok = 0;
    switch (tab) {
        case 'blog':
            blog.style['display'] = 'block';
    		blog_nav_a.style.backgroundPosition = 'left -41px';
   			blog_nav_span.style.backgroundPosition = 'right -41px';
		    misc_nav_a.style.backgroundPosition = 'left top';
		    misc_nav_span.style.backgroundPosition = 'right top';
		    friends_nav_a.style.backgroundPosition = 'left top';
		    friends_nav_span.style.backgroundPosition = 'right top';
		    status_nav_a.style.backgroundPosition = 'left top';
		    status_nav_span.style.backgroundPosition = 'right top';
			urlok = 1;
            break;
        case 'misc':
            misc.style['display'] = 'block';
    		blog_nav_a.style.backgroundPosition = 'left top';
   			blog_nav_span.style.backgroundPosition = 'right top';
		    misc_nav_a.style.backgroundPosition = 'left -41px';
		    misc_nav_span.style.backgroundPosition = 'right -41px';
    		friends_nav_a.style.backgroundPosition = 'left top';
   			friends_nav_span.style.backgroundPosition = 'right top';
    		status_nav_a.style.backgroundPosition = 'left top';
   			status_nav_span.style.backgroundPosition = 'right top';
			urlok = 1;
            break;
        case 'friends':
            friends.style['display'] = 'block';
    		blog_nav_a.style.backgroundPosition = 'left top';
   			blog_nav_span.style.backgroundPosition = 'right top';
    		misc_nav_a.style.backgroundPosition = 'left top';
   			misc_nav_span.style.backgroundPosition = 'right top';
    		status_nav_a.style.backgroundPosition = 'left top';
   			status_nav_span.style.backgroundPosition = 'right top';

		    friends_nav_a.style.backgroundPosition = 'left -41px';
		    friends_nav_span.style.backgroundPosition = 'right -41px';
			urlok = 1;
			friends_refresh_full();
            break;
        case 'status':
            status.style['display'] = 'block';
    		blog_nav_a.style.backgroundPosition = 'left top';
   			blog_nav_span.style.backgroundPosition = 'right top';
    		misc_nav_a.style.backgroundPosition = 'left top';
   			misc_nav_span.style.backgroundPosition = 'right top';
    		friends_nav_a.style.backgroundPosition = 'left top';
   			friends_nav_span.style.backgroundPosition = 'right top';

		    status_nav_a.style.backgroundPosition = 'left -41px';
		    status_nav_span.style.backgroundPosition = 'right -41px';
			urlok = 1;
			status_refresh(0, 0);
            break;
        default:
            status.style['display'] = 'block';
    }
	if (modurl == 1) {
		if (urlok == 1) {
			document.location.hash = tab;
		}
	}
	infobox_refresh();
}

function textlimit(field, maxlen) {
	if (field.value.length > maxlen) {
		field.value = field.value.substring(0, maxlen);
		field.focus();
		field.value = field.value;
	}
}


function profile_archive_toggle_month(year, month) {
	var where = getref("profile_archive_entries_" + year + "_" + month);
	var month = getref("profile_archive_month_" + year + "_" + month);
	if (where.style['display'] != 'block') {
		where.style['display'] = 'block';
		month.className = 'month_expanded';
	} else {
		where.style['display'] = 'none';
		month.className = 'month_collapsed';
	}
	

}

function share_popup(url, share_button, title) {


	hide_all_like('div', 'share_popup_');
	var oldpop = getref('share_popup_temp');
	if (oldpop != null && oldpop != 'undefined') {
		share_popup_close();
	}
	window.share_popup_in = 0;
	var hid=document.getElementById("share_hidden");
	var orig_button=document.getElementById(share_button);
	var pop=hid.cloneNode(true);
	document.body.appendChild(pop);
	pop.id = 'share_popup_temp';
	pop.style['display'] = 'block';
	pop.style['position'] = 'absolute';
	var z = maxZindex(document);
	z++;
	pop.style['zIndex'] = z;



	var x = findPosX(orig_button) - (pop.offsetWidth - 50);
	var y = findPosY(orig_button) - (pop.offsetHeight + 10);
	if (x < 0) { x = 0};
	if (y < 0) { y = 0};
	x += 'px';
	y += 'px';
	pop.style['left'] = x;
	pop.style['top'] = y;
	var children = pop.childNodes;
	var j = 0;
	var link = 0;
	for (var i = 0;  i < children.length;  i++) {
		if (children[i].nodeName == 'DIV') {
			var child_tbl = children[i].childNodes;
			for (j = 0;  j < child_tbl.length;  j++) {
				if (child_tbl[j].nodeName == 'A') {
					link = child_tbl[j];
					link.href = link.href.replace('_URL_', url);
					link.href = link.href.replace('_TITLE_', title);
				}
			}
		}
	}

}


function share_popup_close() {


			var pop=document.getElementById("share_popup_temp");
			if (pop != null && pop != 'undefined') {
				document.body.removeChild(pop);
				delete pop;
			}

}


function isVisible(obj) {
    if (obj == document) return true
    
    if (!obj) return false
    if (!obj.parentNode) return false
    if (obj.style) {
        if (obj.style.display == 'none') return false
        if (obj.style.visibility == 'hidden') return false
    }
    
    //Try the computed style in a standard way
    if (window.getComputedStyle) {
        var style = window.getComputedStyle(obj, "")
        if (style.display == 'none') return false
        if (style.visibility == 'hidden') return false
    }
    
    //Or get the computed style using IE's silly proprietary way
    var style = obj.currentStyle
    if (style) {
        if (style['display'] == 'none') return false
        if (style['visibility'] == 'hidden') return false
    }
    
    return isVisible(obj.parentNode)
}

function friends_cancel_req(url, txt) {

	var conf = confirm(txt);
	if (conf) {
		var req = new XMLHttpRequest();
		req.open('GET', url);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				location.reload(true);
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('');

	}

}
function friends_add(url, msgtxt, fan) {

	if (fan == 0) {
		var msg = prompt(msgtxt, '');
	} else {
		var msg = confirm(msgtxt);
	}
	if (msg != '' && msg != null) {
		var req = new XMLHttpRequest();
		req.open('POST', url, true);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				location.reload(true);
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		if (fan == 0) {
			req.send('message='+encodeURIComponent(msg));
		} else {
			req.send('message=');
		}
	}
}
function friends_accept_request(url, msgtxt) {

	var conf = confirm(msgtxt, '');
	if (conf) {
		var req = new XMLHttpRequest();
		req.open('GET', url, true);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				location.reload(true);
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('');
	}
}
function friends_deny_request(url, msgtxt) {

	var conf = confirm(msgtxt, '');
	if (conf) {
		var req = new XMLHttpRequest();
		req.open('GET', url, true);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				location.reload(true);
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('');
	}
}

function friends_avatar_fix(img) {

	var i = getref('friends_avatar_img_' + img);
	var ok = 1;
	if (i) {
		if (!i.complete) {
			ok = 0;
		} else if (typeof i.naturalWidth != "undefined" && i.naturalWidth == 0) {
			ok = 0;
		}
		if (ok == 0) {
			i.src = '/img/profile/avatar_unknown.gif';
		}
	}
}

function friends_avatar_popup(tag, what, fr, user) {

	var t = getref('friends_avatar_popup_' + tag);
	if (t) {
		if (what == 1) {
			t.style['display'] = 'block';
			t.style['position'] = 'absolute';
			var x = findPosX(fr) - (t.offsetWidth - fr.offsetWidth);
			var y = findPosY(fr) + 0;
			if (x < 0) { x = 0};
			if (y < 0) { y = 0};
			x += 'px';
			y += 'px';
			t.style['left'] = x;
			t.style['top'] = y;
		} else {
			t.style['display'] = 'none';
		}
	}
}

function friends_go(user, tag) {
	p = getref('friends_avatar_popup_' + tag);
	p.style['display'] = 'none';
	location.href = '/U' + user;
}

function friends_remove(e, user, tag, msgtxt, url) {

	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();

	var conf = confirm(msgtxt);
	if (conf) {
		var req = new XMLHttpRequest();
		req.open('GET', url, true);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				location.reload(true);
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('');
	}
}

function setXJS(elt, html) {
	var div = getref(elt);
	div.innerHTML = html;
	var x = div.getElementsByTagName("script");
	for(var i=0;i<x.length;i++) {
		eval(x[i].text);
	}
}

function profile_tagline_update(tagline, url) {

	var req = new XMLHttpRequest();
	req.open('POST', url, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			location.reload(true);
		}
	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('tagline='+encodeURIComponent(tagline));
}

function profile_postownwall(tagline, url) {

	var req = new XMLHttpRequest();
	req.open('POST', url, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			location.reload(true);
		}
	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('tagline='+encodeURIComponent(tagline));
}

function status_play_youtube(id) {

	var i;
	i = getref('ak_status_youtube_thumbnail_' + id);
	if (i) {
		i.style.display = 'none';
	}
	i = getref('ak_status_youtube_player_' + id);
	if (i) {
		i.style.display = 'block';
	}


}

function status_youtube_fill_info(d) {
	//window.bleha = d;
	getref('ak_status_youtube_title_'+ d.data.id).innerHTML = d.data.title;
}

function status_older(url) {

	var req = new XMLHttpRequest();
	var div = getref('profile_status_older_entries');
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == 200) {
					div.parentNode.removeChild(div)
					var status_box = getref('status_box');
                    setXJS('status_box', status_box.innerHTML + req.responseText);
                }
            }
        };

	div.style.backgroundImage = "url(/img/rb/misc/spin.gif)";
	div.style.backgroundPosition = "center center";
	div.style.backgroundRepeat = "no-repeat";
	req.open("GET", url , true);
	req.send(null);
}

function status_show_entry_cmdbar(entry, show) {
	if (window.ak_lockmouse == 1) {
		return false;
	}
	var menu=document.getElementById("status_entry_cmdbar_" + entry);
	if (show == 1) {
		menu.style['display'] = 'block';
	} else {
		menu.style['display'] = 'none';
	}
}

function status_hide_entry(entry, url, msgtxt, likediv) {

	if (window.ak_lockmouse == 1) {
		return false;
	}

	var conf = confirm(msgtxt);
	if (conf) {
		var req = new XMLHttpRequest();
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.status == 200) {
					var div = getref('status_entry_' + entry);
					var div_comments = getref('status_entry_comments_' + entry);
					if (div) {
						div.parentNode.removeChild(div)
					}
					if (div_comments) {
						div_comments.parentNode.removeChild(div_comments)
					}
					var div_avatar = getref('status_entry_avatar_' + entry);
					if (div_avatar) {
						div_avatar.parentNode.removeChild(div_avatar)
					}
					if (likediv != '') {
						var likedivobj = getref(likediv);
						if (likedivobj != null) {
							likedivobj.parentNode.removeChild(likedivobj);
						}
					}
   	             }
   	         }
   	     };

		req.open("GET", url , true);
		req.send(null);
	}
}

function status_shoutout_link(show) {

	var link = getref('status_shoutout_link');
	var form = getref('status_shoutout_form');
	var text = getref('status_shoutout_text');
	if (show == 1) {
		link.style['display'] = 'none';
		form.style['display'] = 'block';
		text.focus();
	} else {
		link.style['display'] = 'inline';
		form.style['display'] = 'none';
	}
}


function like_submit(objtype, objid, url, xtk) {

	var req = new XMLHttpRequest();
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == 200) {
				setXJS('like__' + objtype + '__' + objid, req.responseText);
   	        }
		}
	};

	req.open("POST", url , true);
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('xtk=' + xtk);
}

function hide_all_like(tag, str) {
	var x = document.getElementsByTagName(tag);
	for(var i=0;i<x.length;i++) {
		if (x[i].id.match('^' + str + '.*$')) {
			getref(x[i].id).style['display'] = 'none';
		}
	}
}

function kill_all_like(tag, str) {
	var x = document.getElementsByTagName(tag);
	for(var i=0;i<x.length;i++) {
		if (x[i].id.match('^' + str + '.*$')) {
			getref(x[i].id).parentNode.removeChild(getref(x[i].id));

		}
	}
}

function getInternetExplorerVersion() {
// Returns the version of Windows Internet Explorer or a -1
// (indicating the use of another browser).
   var rv = -1; // Return value assumes failure.
   if (navigator.appName == 'Microsoft Internet Explorer') {
      var ua = navigator.userAgent;
      var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
      if (re.exec(ua) != null)
         rv = parseFloat( RegExp.$1 );
   }
   return rv;
}

function user_popup(e, tag, show) {

	var z;

//show = 1: show
//show = 2: hide
	if (!e) var e = window.event;
	if (e) {
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
	}

	var iever=getInternetExplorerVersion();
	if (show == 1) {


		var pop=getref('user_popup_' + tag);
		var clone = getref('user_popup_clone_' + tag);
		if (clone == null || clone == 'null' || clone == 'undefined') {
			var clone = pop.cloneNode(true);
			clone.setAttribute('id', 'user_popup_clone_' + tag);
			clone.className = 'user_popup';
			document.body.appendChild(clone);
			z = maxZindex(document);
			z++;
			clone.style['zIndex'] = z;
		}
		var link=getref('user_link_' + tag);
		pop.style['position'] = 'absolute';
		pop.style['display'] = 'block';
		if (iever == 7) {
			var e = (window.event) ? window.event : evt;
			pop.style.left = e.clientX + 'px';
			pop.style.top = e.clientY + 'px';
			pop.style['top'] = getY(pop) + 'px';
		}
		pop.style['display'] = 'none';
		clone.style['display'] = 'block';
		clone.style['position'] = 'absolute';
		clone.style['left'] = getX(link) + 'px';
		clone.style['top'] = getY(link) + 'px';
		if (window['ak_userpopup_timeout_' + tag]) {
			clearTimeout(window['ak_userpopup_timeout_' + tag]);
		}
	} else if (show == 2) {
		var clone=getref('user_popup_clone_' + tag);
		if (clone != null && clone != 'null' && clone != 'undefined') {
			window['ak_userpopup_timeout_' + tag] = setTimeout("user_popup_hide('" + tag + "')", 500);
		}
	}
}

function user_popup_hide(tag) {

	var clone;

	clone = getref('user_popup_clone_' + tag);
	clone.parentNode.removeChild(clone);

}

function user_link_go(user, where) {
	var cur_user = 0;
	if (window.ak_current_user) {
		if (window.ak_current_user != null && window.ak_current_user != 'null' && window.ak_current_user != 'undefined') {
			if (window.ak_current_user == user) {
				cur_user = 1;
			}
		}
	}
	if (cur_user == 1) {
		profile_switch_to_tab(where == '' ? 'status' : where, 1);
	} else {
		window.location = '/U' + user + (where == '' ? '' : '#' + where);
	}
}

function bookmarks_show(close) {

	if (window.ak_lockmouse == 1) {
		return false;
	}
	hide_all_like('div', 'bookmarks_popup');
	if (close == 0) {
		var pop=getref('bookmarks_popup');
		pop.style['display'] = 'block';
	}

}

function ak_rndreq() {

	return Math.floor(Math.random()*100000000000);

}

function status_youtube_popup(pick_txt, views_txt, rating_txt) {
	misc_popup_remote(1, 'misc_popup_remote_youtube', '/portal/youtube_video_search/rndreq:' + ak_rndreq() + '/', 0, 1);
	window.ak_youtube_pick_this_video = pick_txt;
	window.ak_youtube_views = views_txt;
	window.ak_youtube_rating = rating_txt;

}

function youtube_pick_video(id) {
	misc_popup_remote(0, 'misc_popup_remote_youtube', '', '', 0);
	insertAtCursor(getref('status_shoutout_text'), ('[youtube=' + id + ']'));

}

function misc_popup_remote(open, tag, url, justload, closeable) {

	var wrapper = getref('wrapper');
	if (justload == 0) {

		var div = getref(tag);
		var closediv = getref('misc_popup_remote_closediv');
		if (div != null && div != 'undefined' && div != 'null') {
			div.parentNode.removeChild(div);
			delete div;
		}
		if (closediv != null && closediv != 'undefined' && closediv != 'null') {
			closediv.parentNode.removeChild(closediv);
			delete closediv;
		}
		if (open != 1) {
			grayOut(false);
			return;
		}
		grayOut(true);
		var div = document.createElement('div');
		div.setAttribute('id', tag);
		div.className = 'misc_popup_remote';
		if (tag != 'misc_popup_remote') {
			div.className = 'misc_popup_remote ' + tag;
		}
		document.body.appendChild(div);
		if (closeable == 1) {
			var closediv = document.createElement('div');
			closediv.setAttribute('id', 'misc_popup_remote_closediv');
			closediv.className = 'misc_popup_remote_close';
			document.body.appendChild(closediv);
			closediv.innerHTML = '<img src="/img/rb/misc/remote-popup-close.png" width="18" height="18">';
			closediv.onclick = function() {
				misc_popup_remote(0, tag, '', 0, 0);

			}
			var x = findPosX(div) + div.offsetWidth;
			var y = findPosY(div) - (closediv.offsetHeight);
			x += 'px';
			y += 'px';
			closediv.style.left = x;
			closediv.style.top = y;
		}
	} else {
		var div = getref(tag);
		if (div == null || div == 'undefined' || div == 'null') {
			return;
		}
	}
	url = url.replace('_RAND_', Math.floor(Math.random()*10000000000));


	var req = new XMLHttpRequest();
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == 200) {
					div.style.backgroundImage = "";
					div.style.backgroundPosition = "";
					div.style.backgroundRepeat = "";
                    setXJS(tag, req.responseText);
                }
            }
        };

	setXJS(tag, '');
	div.style.backgroundImage = "url(/img/rb/misc/spin.gif)";
	div.style.backgroundPosition = "center center";
	div.style.backgroundRepeat = "no-repeat";
	req.open("GET", url , true);

	req.send(null);

}

function grayOut(vis, options) {
  // Pass true to gray out screen, false to ungray
  // options are optional.  This is a JSON object with the following (optional) properties
  // opacity:0-100         // Lower number = less grayout higher = more of a blackout 
  // zindex: #             // HTML elements with a higher zindex appear on top of the gray out
  // bgcolor: (#xxxxxx)    // Standard RGB Hex color code
  // grayOut(true, {'zindex':'50', 'bgcolor':'#0000FF', 'opacity':'70'});
  // Because options is JSON opacity/zindex/bgcolor are all optional and can appear
  // in any order.  Pass only the properties you need to set.
  var options = options || {}; 
  var zindex = options.zindex || 50;
  var opacity = options.opacity || 70;
  var opaque = (opacity / 100);
  var bgcolor = options.bgcolor || '#000000';
  var dark=document.getElementById('darkenScreenObject');
  if (!dark) {
    // The dark layer doesn't exist, it's never been created.  So we'll
    // create it here and apply some basic styles.
    // If you are getting errors in IE see: http://support.microsoft.com/default.aspx/kb/927917
    var tbody = document.getElementsByTagName("body")[0];
    var tnode = document.createElement('div');           // Create the layer.
        tnode.style.position='absolute';                 // Position absolutely
        tnode.style.top='0px';                           // In the top
        tnode.style.left='0px';                          // Left corner of the page
        tnode.style.overflow='hidden';                   // Try to avoid making scroll bars            
        tnode.style.display='none';                      // Start out Hidden
        tnode.id='darkenScreenObject';                   // Name it so we can find it later
    tbody.appendChild(tnode);                            // Add it to the web page
    dark=document.getElementById('darkenScreenObject');  // Get the object.
  }
  if (vis) {
    // Calculate the page width and height 
    if( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) {
        var pageWidth = document.body.scrollWidth+'px';
        var pageHeight = document.body.scrollHeight+'px';
    } else if( document.body.offsetWidth ) {
      var pageWidth = document.body.offsetWidth+'px';
      var pageHeight = document.body.offsetHeight+'px';
    } else {
       var pageWidth='100%';
       var pageHeight='100%';
    }   
    //set the shader to cover the entire page and make it visible.
    dark.style.opacity=opaque;                      
    dark.style.MozOpacity=opaque;                   
    dark.style.filter='alpha(opacity='+opacity+')'; 
    dark.style.zIndex=zindex;        
    dark.style.backgroundColor=bgcolor;  
    dark.style.width= pageWidth;
    dark.style.height= pageHeight;
    dark.style.display='block';                          
  } else {
     dark.style.display='none';
  }
}

function getY( oElement )
{
var iReturnValue = 0;
while( oElement != null ) {
iReturnValue += oElement.offsetTop;
oElement = oElement.offsetParent;
}
return iReturnValue;
}

function getX( oElement )
{
var iReturnValue = 0;
while( oElement != null ) {
iReturnValue += oElement.offsetLeft;
oElement = oElement.offsetParent;
}
return iReturnValue;
}

function signup_check(e, field, type, class_ok, class_failed, class_unknown, next_field, minlen, maxlen, regex, but, inp, stat, err_short, err_long, err_failed_check, err_ok_check, err_failed_regex) {

	var button = getref(but);
	var input = getref(inp);
	if (field == 'login') {
		var url = '/portal/validity_check/rndreq:' + Math.floor(Math.random()*10000000000) + '/type:available_username/value:' + input.value;
	} else if (field == 'email') {
		var url = '/portal/validity_check/rndreq:' + Math.floor(Math.random()*10000000000) + '/type:valid_email/value:' + input.value;
		input.value = trim(input.value);
	}
	if (next_field != '') {
		var next = getref(next_field);
	}
	var result = getref(stat);
	var len = 0;
	if (type == 0) {

		if (!button.ak_clickable) {
			return false;
		}
		if (button.ak_clickable != 1) {
			return false;
		}
		input.value = trim(input.value);
		if (!e) var e = window.event;
		if (e) {
			e.cancelBubble = true;
			if (e.stopPropagation) e.stopPropagation();
		}

	
		var req = new XMLHttpRequest();
		req.open('GET', url);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				button.style.backgroundImage = "";
				button.style.backgroundPosition = "";
				button.style.backgroundRepeat = "";
				if (req.responseText == 'ok') {
					input.className = class_ok;
					if (next) {
						next.focus();
					}
					result.innerHTML = err_ok_check;
				} else {
					input.className = class_failed;
					input.focus();
					result.innerHTML = err_failed_check;
				}
			}
		}
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('');
		button.style.backgroundImage = "url(/img/rb/misc/spin.gif)";
		button.style.backgroundPosition = "center center";
		button.style.backgroundRepeat = "no-repeat";
	} else {
		var prem_checks_ok = true;
		input.className = class_unknown;


		if (prem_checks_ok == true) {
			if (minlen != '') {
				if (check_minlen(input.value, minlen) == false) {
					result.innerHTML = err_short;
					prem_checks_ok = false;
				}
			}
		}

		if (prem_checks_ok == true) {
			if (maxlen != '') {
				if (check_maxlen(input.value, maxlen) == false) {
					result.innerHTML = err_long;
					prem_checks_ok = false;
				}
			}
		}

		if (prem_checks_ok == true) {
			if (regex != '') {
				if (check_regex(input.value, regex) == false) {
					result.innerHTML = err_failed_regex;
					prem_checks_ok = false;
				}
			}
		}

		if (prem_checks_ok == true) {
			button.className = 'check_username_ok';
			result.innerHTML = '';
			button.ak_clickable = 1;
		 } else {
			button.className = 'check_username_greyed';
			button.ak_clickable = 0;
		}
		return prem_checks_ok;
	}
}

function check_minlen(str, minlen) {
	var ret = false;
	var len = trim(str).length;
	if (len >= minlen) {
		ret = true;
	} else {
		ret = false;
	}
	return ret;
}


function check_maxlen(str, maxlen) {
	var ret = false;
	var len = trim(str).length;
	if (len <= maxlen) {
		ret = true;
	} else {
		ret = false;
	}
	return ret;
}

function check_regex(str, regex) {
	var ret = false;
	var len = trim(str).length;
	if (str.match(regex)) {
		ret = true;
	} else {
		ret = false;
	}
	return ret;
}

function login_ajax(code_ok, code_nope) {

	var req = new XMLHttpRequest();
	var url = '/portal/login_ajax/'+rndreq();
	req.open('POST', url, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == 200) {
				if (req.responseText == 'ok') {
					eval(code_ok);
				} else {
					eval(code_nope);
				}
			}
		}
	}
	req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	req.send('submit=yes&login='+document.newcomm_login_form.login.value+'&password='+document.newcomm_login_form.password.value);

}

function language_switch(l) {

	var req = new XMLHttpRequest();
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == 200) {
				window.location.reload();
                }
            }
        };

	req.open("GET", '/portal/language_switch/' + rndreq() + '/lang:' + l, true);
	req.send(null);

}

function rndreq() {

	return 'rndreq:' + Math.floor(Math.random()*10000000000);

}

function newcomm_showurl(a) {
	var b;
	var c;
	var d;
	var len;
	var i;
	c = a.toLowerCase();
	c = c.replace(/\ /g, "");
	d = "";
	for (i = 0;  i < c.length;  i++) {
		switch (c.substr(i, 1)) {
			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case 'q':
			case 'w':
			case 'e':
			case 'r':
			case 't':
			case 'y':
			case 'u':
			case 'i':
			case 'o':
			case 'p':
			case 'a':
			case 's':
			case 'd':
			case 'f':
			case 'g':
			case 'h':
			case 'j':
			case 'k':
			case 'l':
			case 'z':
			case 'x':
			case 'c':
			case 'v':
			case 'b':
			case 'n':
			case 'm':
				d = d + c.substr(i, 1);
				break;
		}
	}
	c = d;
	len = c.length;
	if (len < 6) {
		for (i = 1;  i <= (6 - len);  i++) {
			c = c + i;
		}
	}
	document.boardform.urlpreviewtxt.value = c;
}

function login_secure(event, salt, stime) {


	return true;

}

function cli_move(e) {
	var move = getref('cli_move');
	var around = getref('cli_around');
	cli_stop_poll();
	var scroll = scroll_offset();
	var pos = 0;
	window.ak_lockmouse = 1;
	document.onmousemove = function(event) {
		var coords = mouseCoords(event);
		var wsize = window_size();
		var rightside = 0;
		var downside = 0;
		if ((coords['x'] - scroll['x']) > (wsize['width'] / 2)) {
			rightside = 1;
		} else {
			rightside = 0;
		}
		if ((coords['y'] - scroll['y']) > (wsize['height'] / 2)) {
			downside = 1;
		} else {
			downside = 0;
		}
		if (downside == 1) {
			if (rightside == 1) {
				pos = 4;
			} else {
				pos = 3;
			}
		} else {
			if (rightside == 1) {
				pos = 2;
			} else {
				pos = 1;
			}
		}
		cli_stick_corner(pos);
		getref('cli_resize1').style['display'] = 'none';
		getref('cli_resize2').style['display'] = 'none';
		getref('cli_resize3').style['display'] = 'none';
		getref('cli_resize4').style['display'] = 'none';
		return false;
	};
	document.onmouseup = function(event) {
		window.ak_lockmouse = 0;
		document.onmousemove = null;
		document.onmouseup = null;
		cli_setopt('pos', pos);
		window.ak_cli_pos = pos;
		getref('cli_resize' + pos).style['display'] = 'block';
		cli_start_poll();
		return false;
	};
	return false;
	
}

function cli_stop_poll() {
	if (window.ak_cli_interval) {
		clearInterval(window.ak_cli_interval);
	}
}

function cli_start_poll() {
	if (window.ak_cli_open == 1) {
		window.ak_cli_interval = setInterval("cli_get_log()", window.ak_cli_interval_time);
	} else if (window.ak_cli_open == 0) {
		window.ak_cli_interval = setInterval("cli_get_log()", window.ak_cli_interval_time_minimized);
	}
}

function cli_toggle() {

	var iever=getInternetExplorerVersion();
	if (iever > 0 && iever < 8) {
		return false;
	}
	var toggle_off = getref('cli_toggle_off');
	var toggle_on = getref('cli_toggle_on');
	var main = getref('cli_main');
	var around = getref('cli_around');
	var tmp;
	if (cli_getopt('disable_chat') == 1) {
		window.ak_cli_open = 0;
		main.style.display = 'none';
		toggle_off.style.display = 'none';
		toggle_on.style.display = 'none';
		getref('cli_resize' + window.ak_cli_pos).style['display'] = 'block';
		around.style['display'] = 'none';
	} else {
		if (main.style.display == 'block') {
			window.ak_cli_open = 0;
			main.style.display = 'none';
			toggle_off.style.display = 'none';
			toggle_on.style.display = 'block';
			cli_changebg(cli_getopt('bg'));
			around.style['height'] = null;
			around.style['width'] = null;
			getref('cli_resize' + window.ak_cli_pos).style['display'] = 'none';
			cli_float();
		} else {
			window.ak_cli_open = 1;
			cli_changebg(cli_getopt('bg'));
			toggle_off.style.display = 'block';
			toggle_on.style.display = 'none';
			main.style.display = 'block';
	
			tmp = getref('cli_friend_txt_' + window.ak_cli_current_user);
			if (tmp) tmp.scrollTop = tmp.scrollHeight;
			cli_room_scroll_bottom();

			cli_float();
			if (goodBrowser()) {
				cli_get_log();
			}
			getref('cli_cmd_text_focus').focus();
			getref('cli_resize' + window.ak_cli_pos).style['display'] = 'block';
			cli_room_scroll_bottom();
		}
	}
	cli_stop_poll();
	if (goodBrowser()) {
		cli_start_poll();
	}
}



function cli_float() {


	if (window.ak_cli_pos) {
		cli_stick_corner(window.ak_cli_pos);
	} else {
		cli_stick_corner(4);
	}


}

function cli_check_disp(interval, interval_minimized, txt_chatwith, txt_day, txt_days, txt_unreadtitle, txt_current_room, txt_room_says, txt_room_left, txt_room_joined, userlogin, txt_room_notloggedin) {
	var toggle_off = getref('cli_toggle_off');
	var toggle_on = getref('cli_toggle_on');
	var main = getref('cli_main');
	var around = getref('cli_around');
	var tmp, tmp2;
	var curuser;
	var pos;
	var width, height;
	window.ak_cli_userlogin = userlogin;
	window.ak_cli_interval_time = interval;
	window.ak_cli_interval_time_minimized = interval_minimized;
	curuser = cli_getopt('curuser');
	curroom = cli_getopt('curroom');
	width = parseInt(cli_getopt('width'));
	height = parseInt(cli_getopt('height'));
	if (width < 350) width = 350;
	if (height < 292) height = 292;
	window.ak_cli_txt_room_notloggedin = txt_room_notloggedin;
	window.ak_cli_txt_room_left = txt_room_left;
	window.ak_cli_txt_room_joined = txt_room_joined;
	window.ak_cli_room_quiet_userlist_change = 1;
	window.ak_cli_txt_room_says = txt_room_says;
	window.ak_cli_roomlist_redraw = 0;
	window.ak_cli_height = height;
	window.ak_cli_width = width;
	window.ak_cli_room_fullname = '';
	window.ak_cli_current_user = curuser;
	window.ak_cli_current_room = curroom;;
	window.ak_cli_roomts = 0;
	window.ak_cli_room_userlist = '';
	window.ak_cli_txt_chatwith = txt_chatwith;
	window.ak_cli_txt_current_room = txt_current_room;
	window.ak_cli_txt_days = txt_days;
	window.ak_cli_txt_day = txt_day;
	window.ak_cli_txt_unreadtitle = txt_unreadtitle;
	window.ak_cli_lastts = 0;
	window.ak_cli_logtype = 'full';
	window.ak_cli_pagetitle = document.title;
	window.ak_cli_initialroomset = 0;
	window.ak_cli_session = Math.floor(Math.random()*100000000);
	window.ak_cli_rooms = new Array();
	window.ak_cli_rooms_usernumber = new Array();


	cli_disable_input();

	if (cli_getopt('disable_chat') == 1) {
		cli_change_status('o');
	} else {
		around.className = 'cli_around_minimized';
		toggle_on.style.display = 'block';
	}
	window.ak_cli_open = 0;
	main.style.display = 'none';
	toggle_off.style.display = 'none';
	if (window.ak_cli_interval) {
		clearInterval(window.ak_cli_interval);
	}
	cli_get_log();
	window.ak_cli_interval = setInterval("cli_get_log()", window.ak_cli_interval_time_minimized);
	pos = parseInt(cli_getopt('pos'));
	if (pos != 1 && pos != 2 && pos != 3 && pos != 4) pos = 4;
	window.ak_cli_pos = pos;



	window.ak_cli_soundmode = 1;
	tmp = parseInt(cli_getopt('sound'));
	if (tmp != '') {
		if (tmp >= 0 && tmp <= 2) {
			window.ak_cli_soundmode = tmp;
		}
	}
	cli_switch_sound(0);

	cli_float();

	if (cli_getopt('current_tab') == 'rooms') {
		cli_tab('rooms', 0);
	} else {
		cli_tab('friends', 0);
	}
}
function goodBrowser() {
	var iever;
	iever = getInternetExplorerVersion();
	if (iever > 0 && iever < 8) {
		return 0;
	}
	return 1;
}

function cli_stick_corner(pos) {

	var around = getref('cli_around');
	var mypos = 4;
	around.style.right = null;
	around.style.top = null;
	around.style.left = null;
	around.style.bottom = null;
	if (window.ak_cli_open == 1) {
		mypos = pos;
	}
	if (mypos == 2 || mypos == 4) {
		around.style.right = '16px';
	}
	if (mypos == 1 || mypos == 3) {
		around.style.left = '16px';
	}
	if (mypos == 3 || mypos == 4) {
		around.style.bottom = '0px';
	}
	if (mypos == 1 || mypos == 2) {
		around.style.top = '0px';
	}
	cli_resize_fit();
	return false;
}

function cli_set_seen(u, room, ts) {

	if (!iever) var iever;
	if (!url) var url;
	if (!test) var test;
	
	iever=getInternetExplorerVersion();
	if (iever > 0 && iever < 8) {
		return false;
	}


	if (!window.ak_cli_setreq) {
		window.ak_cli_setreq = new XMLHttpRequest();
	}
	url = '/portal/cli_get_log/rndreq:' + Math.floor(Math.random()*10000000000) + '/z:0/s:x/type:2/u:' + u + '/room:' + room + '/lastts:' + ts + '/o:' + window.ak_cli_open;
	window.ak_cli_setreq.open('GET', url);
	window.ak_cli_setreq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	window.ak_cli_setreq.send('');
}

function cli_get_log() {

	if (!iever) var iever;
	if (!url) var url;
	if (!test) var test;
	if (!output) var output;
	if (!around) var around;
	var reqts;
	var tempts;
	var manstatus;
	var sess_ts;
	var sess_id;
	var sess_state;
	manstatus = '';
	if (!reqts)
		reqts = new Date();

	



	if (!window.ak_cli_current_room) {
		window.ak_cli_current_room = '';
	}

	iever=getInternetExplorerVersion();
	if (iever > 0 && iever < 8) {
		return false;
	}


	if (!window.ak_cli_req) {
		window.ak_cli_req = new XMLHttpRequest();
	}
	if (!window.ak_cli_req.onreadystatechange) {
		window.ak_cli_req.onreadystatechange = function() {
			if (window.ak_cli_req.readyState == 4) {
				cli_process_response();
			}
		}
	}
	if (window.ak_cli_manstatus) {
		if (window.ak_cli_manstatus != '') {
			manstatus = window.ak_cli_manstatus;
		}
	}

	tempts = reqts.getTime();


	sess_ts = cli_getopt('sess_ts');
	sess_id = cli_getopt('sess_id');
	sess_state = cli_getopt('sess_state');
	if (sess_ts && sess_id && sess_state) {
		if (sess_ts != '' && sess_id != '' && sess_state != '') {
			if (sess_ts < tempts) {
				if (sess_id != window.ak_cli_session) {
					if (((tempts - sess_ts) < 6000) && (sess_state == 0)) {
						cli_badsession();
						return;
					}
					if (((tempts - sess_ts) < 1000) && (sess_state == 1)) {
						cli_badsession();
						return;
					}
				}
			}
		}
	}

	cli_setopt('sess_ts', tempts);
	cli_setopt('sess_id', window.ak_cli_session);
	cli_setopt('sess_state', window.ak_cli_open);

	around = getref('cli_around');
	if (around.style['display'] != 'block') {
		if (cli_getopt('disable_chat') != 1) {
			around.style['display'] = 'block';
		}
	}

	if (!window.ak_cli_reqstart) {
		window.ak_cli_reqstart = 0;
	}
	if ((tempts - window.ak_cli_reqstart) < 20000) {
		if (window.ak_cli_req.readyState != 4) {
			return;
		}
	} else {
		window.ak_cli_req.abort();
		window.ak_cli_reqstart = tempts;
	}
	url = '/portal/cli_get_log/rndreq:' + Math.floor(Math.random()*10000000000) + Math.floor(Math.random()*10000000000) + '/z:' + window.ak_cli_session + '/type:1/u:0/lastts:' + (window.ak_cli_lastts) + '/s:' + manstatus + '/o:' + (cli_getopt('disable_chat') == 1 ? '3' : window.ak_cli_open) + '/room:' + window.ak_cli_current_room + '/roomts:' + window.ak_cli_roomts;
	output = getref('cli_output');
	window.ak_cli_req.open('GET', url);
	window.ak_cli_req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	window.ak_cli_req.send('');
	window.ak_cli_reqstart = tempts;
	window.ak_cli_manstatus = '';

	
}

function cli_change_status(s) {
	if (s == 'a' || s == 'i' || s == 'o') {
		window.ak_cli_manstatus = s;
	}
}
	

function cli_process_response() {
	var s;
	var i;
	var j;
	var cmd;
	var key, value;
	var type, user, ts, payload;
	var blink;
	var t;
	var room;

	blink = 0;
	s = window.ak_cli_req.responseText.split(/\<AKCHAT/g);
	for (i = 0;  i < s.length;  i++) {
		s[i] = trim(s[i]);
		s[i] = s[i].replace(/\>/g, '');
		if(s[i].length > 0) {
			cmd = s[i].split(/\"\ /g);
			key = '';
			value = '';
			type = '';
			user = '';
			ts = '';
			payload = '';
			for (j = 0;  j < cmd.length;  j++) {

				cmd[j] = cmd[j].replace(/\"/g, '');
				cmd[j] = trim(cmd[j]);

				key = cmd[j].split(/\=/)[0];
				value = cmd[j].split(/\=/)[1];

				cmd[j] = cmd[j].replace(/__AKQTE__/g, '"');
				cmd[j] = cmd[j].replace(/__AKLT__/g, '<');
				cmd[j] = cmd[j].replace(/__AKGT__/g, '>');
				cmd[j] = cmd[j].replace(/__AKEQ__/g, '=');


				if (key == 't') {
					type = value;
				} else if (key == 'ts') {
					ts = value;
				} else if (key == 'u') {
					user = value;
				} else if (key == 'c') {
					payload = value;
					payload = payload.replace("\r", '');
					payload = payload.replace("\n", '');

				} else if (key == 'r') {
					room = value;
				}



			}
			if (type == 'friends') {
				blink = cli_update_friends(payload, ts);
				if (window.ak_cli_open == 0) {
					if (blink == 1) {
						window.ak_cli_blink = 1;
					} 
				}
			} else if (type == 'from' || type == 'to') {
				cli_update_chat(type, ts, user, payload, (s.length == 3 ? 1 : 0));

			} else if (type == 'badsession') {
				cli_badsession();
			} else if (type == 'roomlist') {
				cli_roomlist(ts, payload);
				if (window.ak_cli_initialroomset == 0) {
					cli_setcurroom(window.ak_cli_current_room, 0);
				}
			} else if (type == 'roomchat') {
				cli_update_room(ts, user, payload, room);
			} else if (type == 'roomuserlist') {
				cli_update_room_userlist(room, payload);
			}
		}
	}

	if (window.ak_cli_blink == 1 && window.ak_cli_open == 0) {
		getref('cli_around').className = 'cli_around_minimized_blink';
		getref('cli_around').style['display'] = 'block';
	}
	cli_resize_fit();
}

function cli_msg_unescape(s) {
	s = s.replace(/__AKQTE__/g, '&quot;');
	s = s.replace(/__AKAMP__/g, '&amp;');
	s = s.replace(/__AKLT__/g, '&#60;');
	s = s.replace(/__AKGT__/g, '&#62;');
	s = s.replace(/__AKEQ__/g, '&#61;');
	return s;
}

function cli_update_chat(type, ts, user, payload, fadein) {
	var msgwin;
	var tmparray;
	var key;
	var i;
	var tmpts;
	var hours;
	var minutes;
	var date;
	var msgline;
	var agosec;
	var agodays;
	var tmp;
	var lastchatdiv;
	var lastline;
	var clone;
	var newbubble;
	var dots;
	var clonets;

	if (!window.ak_cli_lastchatdivtype) {
		window.ak_cli_lastchatdivtype = new Array();
	}
	if (!window.ak_cli_lastchatdivtype[user]) {
		window.ak_cli_lastchatdivtype[user] = 'first';
	} 

	if (!window.ak_cli_chat_ts) {
		window.ak_cli_chat_ts = new Array();
	}



	if (window.ak_cli_lastts < ts) {
		window.ak_cli_lastts = ts;
	}


	newbubble = 0;


	
	payload = cli_smileys(cli_msg_unescape(payload));
	msgwin = getref('cli_friend_txt_' + user);
	if (!msgwin) {
		alert('got chat msg(' + payload + ') for ' + user + ' but no friend_txt window to match');
	} else {
		tmpts = ts * 10;
		if (date) delete date;
		date = new Date(tmpts);
		hours = date.getHours();
		minutes = date.getMinutes();
		if (minutes == 0) {
			minutes = '00';
		} else { 
			if (minutes < 10) {
				 minutes = '0' + minutes;
			}
		}
		dots = 0;
		agosec = ((window.ak_cli_servertime_ms - tmpts) / 1000);
		if (agosec > 86400) {
			agodays = Math.round(agosec / 86400);
			minutes += sprintf((agodays == 1 ? window.ak_cli_txt_day : window.ak_cli_txt_days), agodays);
		}
		if (!window.ak_cli_chat_ts['user']) {
			window.ak_cli_chat_ts['user'] = tmpts;
			dots = 1;
		}
		if ((tmpts - window.ak_cli_chat_ts['user']) > 600000) {
			dots = 1;
			window.ak_cli_chat_ts['user'] = tmpts;
		}
		tmp = '[' + hours + ':' + minutes + ']';

		if (window.ak_cli_lastchatdivtype[user] == type && dots == 0) {
			lastchatdiv = getref('cli_lastchatdiv_' + user);
			if (lastchatdiv) {
				lastline = lastchatdiv.lastChild;
				if (lastline) {
					lastline.className = null;
				}
			}
		} else {

			lastchatdiv = getref('cli_lastchatdiv_' + user);
			if (lastchatdiv) {
				lastchatdiv.setAttribute('id', null);
			}
			clonets = getref('cli_friend_txt_chat_ts').cloneNode(true);
			clonets.innerHTML = tmp;
			msgwin.appendChild(clonets);
			clonets.className = 'cli_timestamp';
			clonets.style['display'] = 'block';
			clonets.setAttribute('id', null);


			clone = getref('cli_friend_txt_chat_div').cloneNode(true);
			clone.setAttribute('id', 'cli_lastchatdiv_' + user);
			msgwin.appendChild(clone);
			clone.className = 'cli_friend_txt_' + (type == 'to' ? 'left' : 'right');
			lastchatdiv = clone;
			clone.innerHTML = '<span class="cli_tl"></span><span class="cli_tr"></span><span class="cli_t"></span>';
			clone.innerHTML += '<span class="cli_bl"></span><span class="cli_br"></span><span class="cli_b"></span>';
			newbubble = 1;
			dots = 1;
		}

		window.ak_cli_lastchatdivtype[user] = type;

		lastchatdiv.removeChild(lastchatdiv.lastChild);
		lastchatdiv.removeChild(lastchatdiv.lastChild);
		lastchatdiv.removeChild(lastchatdiv.lastChild);


		tmp = '';
		lastchatdiv.innerHTML += ('<p><span><span>' + (type == 'to' ? tmp : '') + payload + (type == 'from' ? tmp : '') + '</span></span></p>');
		lastline = lastchatdiv.lastChild;
		if (lastline) {
			lastline.className = 'cli_last_chat_line';
		}
		lastchatdiv.innerHTML += '<span class="cli_bl"></span><span class="cli_br"></span><span class="cli_b"></span>';

		if (fadein == 1 && newbubble == 1) {
			if (!window.ak_cli_fadein) {
				window.ak_cli_fadein = 10;
				setOpacity(lastchatdiv, 0);
				window.ak_cli_fadein_interval = setInterval("cli_fadein()", 1);
				window.ak_cli_fadein_lcd = lastchatdiv;

			}
		}

		if (type == 'to') {
			if (agosec < 5) {
				if ((window.ak_cli_open == 0 && window.ak_cli_soundmode > 0) || (window.ak_cli_open == 1 && window.ak_cli_soundmode == 2)) {
					if (window.ak_cli_msgsound_done < window.ak_cli_servertime_ms) {
						window.ak_cli_msgsound_done = window.ak_cli_servertime_ms;
							cli_make_sound();
					}
				}
			}
		}
	}
	msgwin.scrollTop = msgwin.scrollHeight;
}

function setOpacity(elt, perc) {
	elt.style['opacity'] = perc / 100;
	elt.style['-ms-filter'] = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + perc + ')';
	elt.style['filter'] = 'alpha(opacity=' + perc + ')';
	elt.style['-khtml-opacity'] = perc / 100;
	elt.style['-moz-opacity'] = perc / 100;
	elt.style['zoom'] = 1;
}

function cli_fadein() {

	if (window.ak_cli_fadein) {
		if (window.ak_cli_fadein == 100) {
			window.ak_cli_fadein = null;
			clearInterval(window.ak_cli_fadein_interval);
			return;
		}
	} else {
		clearInterval(window.ak_cli_fadein_interval);
		return;
	}

	window.ak_cli_fadein += 10;
	setOpacity(window.ak_cli_fadein_lcd, window.ak_cli_fadein);

}
function discardElement(element) { 
	if (!garbageBin) var garbageBin;
	garbageBin = document.getElementById('IELeakGarbageBin'); 
	if (!garbageBin) { 
		garbageBin = document.createElement('DIV'); 
		garbageBin.id = 'IELeakGarbageBin'; 
		garbageBin.style.display = 'none'; 
		document.body.appendChild(garbageBin); 
	}
	// move the element to the garbage bin 
	garbageBin.appendChild(element); 
	garbageBin.innerHTML = ''; 
}
function cli_set_mystatus(s) {
	var i;
	var thing;
	var tmp;
	if (window.ak_cli_manstatus != '') {
		return;
	}
	tmp = 'cli_friend_status_';
	if (s == 'a') {
		i = 0;
		tmp += 'active';
	} else if (s == 'i') {
		i = 1;
		tmp += 'idle';
	} else if (s == 'o') {
		i = 2;
		tmp += 'offline';
	}
	thing = getref('cli_status_manual_select');
	if (thing.selectedIndex != i) {
		thing.selectedIndex = i;
	}
	getref('cli_mystatus').className = tmp;
}
function cli_update_friends(payload, ts) {
	if (!s) var s;
	if (!i) var i;
	if (!orig) var orig;
	if (!container) var container;
	if (!clone) var clone;
	if (!clone_txt) var clone_txt;
	if (!container_txt) var container_txt;
	if (!orig_txt) var orig_txt;
	if (!z) var z;
	if (!tmp) var tmp;
	var status;
	var lastreadts, lastmsgts;
	var tmp2;
	var unreadstuff;
	var noteverythingisread;
	var logapp;
	var nodes;
	var sortedsomething;
	var tmpnode;
	var tmpname;
	var mustsort;
	window.ak_cli_msgsound_done = 0;
	window.ak_cli_servertime_ms = ts * 10;
	window.ak_cli_blink = 0;
	window.ak_cli_numunreadpeople = 0;
	window.ak_cli_servertime = ts;
	noteverythingisread = 0;
	s = payload.split(/,/g);

	if (s.length < 2) {
		getref('cli_nofriendsfound').style['display'] = 'block';
		getref('cli_nofriendselected').style['display'] = 'none';
	} else {
		getref('cli_nofriendsfound').style['display'] = 'none';
	}


	orig = getref('cli_friend');
	container = getref('cli_friends');
	nodes = container.childNodes;
	window.ak_cli_numfriends = 0;
	cnt = 0;
	for (i = 0;  i < s.length;  i++) {
		unreadstuff = 0;
		s[i] = trim(s[i]);
		s[i] = s[i].replace(/\s/g, '');
		if (s[i] != '') {
			status = s[i][0];
			if (status == 'a') status = 'active';
			if (status == 'i') status = 'idle';
			if (status == 'o') status = 'offline';
			s[i] = s[i].substring(2);

			tmp2 = s[i].split(':');
			s[i] = tmp2[0];
  			logapp = tmp2[3].replace(/-/g,' ');
			window['ak_cli_logapp_' + s[i]] = logapp;

			if (tmp2[1] > tmp2[2]) {
				unreadstuff = 1;
				window.ak_cli_numunreadpeople++;
			}


			if (s[i][0] == '!') {
				cli_set_mystatus(status[0]);
				continue;
			} else {
				if (status == 'active' || status == 'idle') {
					window.ak_cli_numfriends++;
				}
			}

			clone = getref('cli_friend_' + s[i]);
			if (!clone) {
				clone = orig.cloneNode(true);
				clone.setAttribute('id', 'cli_friend_' + s[i]);
				container.appendChild(clone);
				clone.onclick = Function("cli_setcuruser(\'" + s[i] + "\', 1); return false;");
				clone.innerHTML = '<span id="cli_friend_status_' + s[i] + '">&nbsp;</span><a href="#" onclick="cli_setcuruser(\'' + s[i] + '\', 1); return false;">' + logapp + '</a>';
				clone.innerHTML += ('<span id="cli_friend_bullet_' + s[i] + '" class="cli_friend_unreadstuff">&bull;</span>');
			}
			clone.ak_cli_name = s[i];

			if (window.ak_cli_current_user == s[i]) {
	 			if (clone.className != 'cli_friend_visible_selected') {
					clone.className = 'cli_friend_visible_selected';
				}
			} else {
	 			if (clone.className != 'cli_friend_visible') {
					clone.className = 'cli_friend_visible';
				}
			}

			if (getref('cli_friend_status_' + s[i]).className != ('cli_friend_status_' + status)) {
				getref('cli_friend_status_' + s[i]).className = 'cli_friend_status_' + status;
			}
			

			getref('cli_friend_bullet_' + s[i]).style['display'] = (unreadstuff == 1 ? 'inline' : 'none');
			if (unreadstuff == 1) {
				if (cli_getopt('current_tab') != 'friends') {
					getref('cli_tabs_friends').className = 'cli_tabs_friends_off_warning';
				}
			}

			
			tmp = getref('cli_friend_txt_' + s[i]);
			if (!tmp) {
				orig_txt = getref('cli_friend_txt');
				clone_txt = orig_txt.cloneNode(true);
				clone_txt.setAttribute('id', 'cli_friend_txt_' + s[i]);
				clone_txt.className = 'cli_friend_txt';
				container_txt = getref('cli_output_txt');
				container_txt.appendChild(clone_txt);
			}



			if (unreadstuff == 1) {
				if (window.ak_cli_current_user == s[i]) {
					if (window.ak_cli_open == 1) {
						cli_set_seen(s[i], '', ts);
						unreadstuff = 0;
					}
				}
			}
			if (unreadstuff == 1) {
				noteverythingisread = 1;
			}
		}
	}



	getref('cli_num_friends_online').innerHTML = window.ak_cli_numfriends;

	sortedsomething = 1;
	while (sortedsomething == 1) {
		sortedsomething = 0;
		for (i = 0;  i < (nodes.length - 1);  i++) {
			mustsort = 0;
			if (nodes[i].nodeName == 'DIV' && nodes[i+1].nodeName == 'DIV') {
				tmp = getref('cli_friend_status_' + nodes[i].ak_cli_name).className;
				tmp2 = getref('cli_friend_status_' + nodes[i+1].ak_cli_name).className;
				if (tmp && tmp2) {
					if (tmp == 'cli_friend_status_offline') {
						if (tmp2 == 'cli_friend_status_active' || tmp2 == 'cli_friend_status_idle') {
							mustsort = 1;
						}
					}
					if (mustsort == 0) {
						if (tmp == 'cli_friend_status_idle' && tmp2 == 'cli_friend_status_active') {
							mustsort = 1;
						}
					}
					if (mustsort == 0) {
						if (tmp == tmp2) {
							if (nodes[i].ak_cli_name > nodes[i+1].ak_cli_name) {
								mustsort = 1;
							}
						}
					}
	
	
	
					if (mustsort == 1) {
						sortedsomething = 1;
						tmpnode = nodes[i+1].cloneNode(true);
						tmpname = nodes[i+1].ak_cli_name;
						container.removeChild(nodes[i+1]);
						container.insertBefore(tmpnode, nodes[i]);
						tmpnode.ak_cli_name = tmpname;
						i = 0;
						nodes = container.childNodes;
					}
				}
			}
		}
	}


	if (cli_getopt('current_tab') == 'friends') {
		cli_setcuruser(window.ak_cli_current_user, 0);
	}
	if (noteverythingisread == 1) {
		if (document.title == window.ak_cli_pagetitle) {
			document.title = sprintf(window.ak_cli_txt_unreadtitle, window.ak_cli_numunreadpeople, document.title);
		}
	} else {
		document.title = window.ak_cli_pagetitle;
	}
	return noteverythingisread;

}
function cli_hide_all_friend_txt() {

	var container;
	var i;
	container = getref('cli_output_txt');
	for (i = 0;  i < container.childNodes.length;  i++) {
		if (container.childNodes[i].nodeName != '#text') {
			if (container.childNodes[i].id.match('^cli_friend_txt_.*$')) {
				if (container.childNodes[i].className != 'cli_friend_txt') {
	 				container.childNodes[i].className = 'cli_friend_txt';
				} 
			}
		}
	}

}
function cli_setcuruser(u, userasked) {
	var old; 
	var orig;
	var clone;
	var container;
	var i;
	var txt;
	var f;
	old = getref('cli_friend_' + window.ak_cli_current_user);
	if (old) {
		old.className = 'cli_friend_visible';
	}


		

	window.ak_cli_current_user = u;

	cli_setopt('curuser', u);
	f = getref('cli_friend_' + u);
	if (!f) return;
	getref('cli_nofriendselected').style['display'] = 'none';
	f.className = 'cli_friend_visible_selected';

	container = getref('cli_output_txt');
	cli_hide_all_friend_txt();

	txt = getref('cli_friend_txt_' + u);
	if (!txt) {
		orig = getref('cli_friend_txt');
		clone = orig.cloneNode(true);
		clone.setAttribute('id', 'cli_friend_txt_' + u);
		clone.className = 'cli_friend_txt_visible';
		container.appendChild(clone);
		txt = getref('cli_friend_txt_' + u);
	}

	txt.className = 'cli_friend_txt_visible';
	if (userasked == 1) {
		txt.scrollTop = txt.scrollHeight;
		getref('cli_cmd_text_focus').focus();
	}
	cli_float();
	cli_enable_input();


	if (cli_getopt('current_tab') == 'friends') {
		cli_set_title(window.ak_cli_txt_chatwith, window['ak_cli_logapp_' + u]);
	}


	if (cli_getopt('current_tab') == 'friends') {
		if (getref('cli_friend_status_' + u).className == 'cli_friend_status_offline') {
			getref('cli_friend_offline_txt').style.display = 'block';
		} else {
			getref('cli_friend_offline_txt').style.display = 'none';
		}
	}
}
function cli_set_title(format, txt) {
	getref('cli_chatwith').innerHTML = sprintf(format, txt);
}
function cli_run(cmd) {

	var ok;
	ok = 1;

	if (cmd.length == 0) {
		return;
	}


	if (cmd[0] != '/') {
		if (cli_getopt('current_tab') == 'friends') {
			if (window.ak_cli_current_user == '') {
				ok = 0;
			}
			cmd = '/msg ' + window.ak_cli_current_user + ' ' + cmd;
		} else if (cli_getopt('current_tab') == 'rooms') {
			if (window.ak_cli_current_room == '') {
				ok = 0;
			}
			cmd = '/msg ' + '#' + window.ak_cli_current_room + ' ' + cmd;
		}

	}

	if (trim(cmd) != '' && ok == 1) {
		getref('cli_cmd_text_focus').value = '';
		getref('cli_cmd_text_focus').focus();
		var req = new XMLHttpRequest();
		var url = '/portal/cli_run/rndreq:' + Math.floor(Math.random()*10000000000);
		req.open('POST', url);
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('cmd='+encodeURIComponent(cmd));
	}

}
function cli_clone() {

	var orig=getref('cli_around');
	var clone = orig.cloneNode(true);
	orig.parentNode.removeChild(orig)
	clone.setAttribute('id', 'cli_around');
	document.body.appendChild(clone);
	clone.className = 'cli_around';
	var z = maxZindex(document);
	z++;
	clone.style['zIndex'] = z;
} 

function maxZindex(obj){  
   var highestIndex = 0;  
   var currentIndex = 0;  
   var elArray = Array();  
   if(obj){ elArray = obj.getElementsByTagName('*'); }else{ elArray = document.getElementsByTagName('*'); }  
   for(var i=0; i < elArray.length; i++){  
      if (elArray[i].currentStyle){  
         currentIndex = parseFloat(elArray[i].currentStyle['zIndex']);  
      }else if(window.getComputedStyle){  
         currentIndex = parseFloat(document.defaultView.getComputedStyle(elArray[i],null).getPropertyValue('z-index'));  
      }  
      if(!isNaN(currentIndex) && currentIndex > highestIndex){ highestIndex = currentIndex; }  
   }  
   return(highestIndex+1);  
}
function window_size() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
	return {
		width:myWidth,
		height:myHeight
	};
}
function scrollbar_width() {  
    var inner = document.createElement('p');  
    inner.style.width = "100%";  
    inner.style.height = "200px";  
  
    var outer = document.createElement('div');  
    outer.style.position = "absolute";  
    outer.style.top = "0px";  
    outer.style.left = "0px";  
    outer.style.visibility = "hidden";  
    outer.style.width = "200px";  
    outer.style.height = "150px";  
    outer.style.overflow = "hidden";  
    outer.appendChild (inner);  
  
    document.body.appendChild (outer);  
    var w1 = inner.offsetWidth;  
    outer.style.overflow = 'scroll';  
    var w2 = inner.offsetWidth;  
    if (w1 == w2) w2 = outer.clientWidth;  
  
    document.body.removeChild (outer);  
  
    return (w1 - w2);  
};  
function scroll_offset() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return {x:scrOfX, y:scrOfY};
}
function removepx(s) {
  return s.replace(/px/g,"");
}
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;
}



/**
sprintf() for JavaScript 0.7-beta1
http://www.diveintojavascript.com/projects/javascript-sprintf

Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of sprintf() for JavaScript nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Changelog:
2010.09.06 - 0.7-beta1
  - features: vsprintf, support for named placeholders
  - enhancements: format cache, reduced global namespace pollution

2010.05.22 - 0.6:
 - reverted to 0.4 and fixed the bug regarding the sign of the number 0
 Note:
 Thanks to Raphael Pigulla <raph (at] n3rd [dot) org> (http://www.n3rd.org/)
 who warned me about a bug in 0.5, I discovered that the last update was
 a regress. I appologize for that.

2010.05.09 - 0.5:
 - bug fix: 0 is now preceeded with a + sign
 - bug fix: the sign was not at the right position on padded results (Kamal Abdali)
 - switched from GPL to BSD license

2007.10.21 - 0.4:
 - unit test and patch (David Baird)

2007.09.17 - 0.3:
 - bug fix: no longer throws exception on empty paramenters (Hans Pufal)

2007.09.11 - 0.2:
 - feature: added argument swapping

2007.04.03 - 0.1:
 - initial release
**/

var sprintf = (function() {
	function get_type(variable) {
		return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
	}
	function str_repeat(input, multiplier) {
		for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
		return output.join('');
	}

	var str_format = function() {
		if (!str_format.cache.hasOwnProperty(arguments[0])) {
			str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
		}
		return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
	};

	str_format.format = function(parse_tree, argv) {
		var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
		for (i = 0; i < tree_length; i++) {
			node_type = get_type(parse_tree[i]);
			if (node_type === 'string') {
				output.push(parse_tree[i]);
			}
			else if (node_type === 'array') {
				match = parse_tree[i]; // convenience purposes only
				if (match[2]) { // keyword argument
					arg = argv[cursor];
					for (k = 0; k < match[2].length; k++) {
						if (!arg.hasOwnProperty(match[2][k])) {
							throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
						}
						arg = arg[match[2][k]];
					}
				}
				else if (match[1]) { // positional argument (explicit)
					arg = argv[match[1]];
				}
				else { // positional argument (implicit)
					arg = argv[cursor++];
				}

				if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
					throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
				}
				switch (match[8]) {
					case 'b': arg = arg.toString(2); break;
					case 'c': arg = String.fromCharCode(arg); break;
					case 'd': arg = parseInt(arg, 10); break;
					case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
					case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
					case 'o': arg = arg.toString(8); break;
					case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
					case 'u': arg = Math.abs(arg); break;
					case 'x': arg = arg.toString(16); break;
					case 'X': arg = arg.toString(16).toUpperCase(); break;
				}
				arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
				pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
				pad_length = match[6] - String(arg).length;
				pad = match[6] ? str_repeat(pad_character, pad_length) : '';
				output.push(match[5] ? arg + pad : pad + arg);
			}
		}
		return output.join('');
	};

	str_format.cache = {};

	str_format.parse = function(fmt) {
		var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
		while (_fmt) {
			if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
				parse_tree.push(match[0]);
			}
			else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
				parse_tree.push('%');
			}
			else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
				if (match[2]) {
					arg_names |= 1;
					var field_list = [], replacement_field = match[2], field_match = [];
					if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
						field_list.push(field_match[1]);
						while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
							if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
								field_list.push(field_match[1]);
							}
							else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
								field_list.push(field_match[1]);
							}
							else {
								throw('[sprintf] huh?');
							}
						}
					}
					else {
						throw('[sprintf] huh?');
					}
					match[2] = field_list;
				}
				else {
					arg_names |= 2;
				}
				if (arg_names === 3) {
					throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
				}
				parse_tree.push(match);
			}
			else {
				throw('[sprintf] huh?');
			}
			_fmt = _fmt.substring(match[0].length);
		}
		return parse_tree;
	};

	return str_format;
})();

var vsprintf = function(fmt, argv) {
	argv.unshift(fmt);
	return sprintf.apply(null, argv);
};

function cli_smileys(t) {
	t = t.replace(/\:\)/g, '<img src="/img/default_post_icons/happy.gif" width="15" height="15" />');
	t = t.replace(/\:\(/g, '<img src="/img/default_post_icons/sigh.gif" width="15" height="15" />');
	t = t.replace(/\:\|/g, '<img src="/img/default_post_icons/blah.gif" width="15" height="15" />');
	t = t.replace(/\:holy\:/g, '<img src="/img/default_post_icons/holycow.gif" width="15" height="15" />');
	t = t.replace(/\:D/g, '<img src="/img/default_post_icons/yay.gif" width="15" height="15" />');
	t = t.replace(/8\(/g, '<img src="/img/default_post_icons/mad.gif" width="15" height="15" />');
	t = t.replace(/\:omg\:/g, '<img src="/img/default_post_icons/ohmygod.gif" width="15" height="15" />');
	t = t.replace(/\:oops\:/g, '<img src="/img/default_post_icons/oops.gif" width="15" height="15" />');
	t = t.replace(/\:roar\:/g, '<img src="/img/default_post_icons/roar.gif" width="15" height="15" />');
	t = t.replace(/&#61;D/g, '<img src="/img/default_post_icons/teef.gif" width="15" height="15" />');
	t = t.replace(/\:p/g, '<img src="/img/default_post_icons/tongue.gif" width="15" height="15" />');
	t = t.replace(/;\)/g, '<img src="/img/default_post_icons/wink.gif" width="15" height="15" />');
	t = t.replace(/\:lol\:/g, '<img src="/img/cli/laugh.gif" width="15" height="15" />');
	t = t.replace(/\\m\//g, '<img src="/img/cli/metalhead.gif" width="15" height="15" />');
	t = t.replace(/\:\*/g, '<img src="/img/cli/kiss.gif" width="15" height="15" />');
	t = t.replace(/&#60;3/g, '<img src="/img/cli/heart.gif" width="15" height="15" />');
	t = string_replace(t, 'shpx lbh'.rot13(), '<img src="/img/cli/middlefinger.gif" width="15" height="15" />');
	t = string_replace(t, ':obbbbbbbbbbbbbovrf:'.rot13(), '<img src="/img/cli/boobies.gif" width="15" height="15" />');

	return t;

}
function cli_make_sound() {
	getref('cli_sound').innerHTML = '<embed type="application/x-shockwave-flash" src="/img/player.swf?audioUrl=/img/cli/newmsg.mp3&autoPlay=true" width="1" height="1" allowscriptaccess="never" wmode="window" flashvars="playerMode=embedded" />'; 
}
function cli_resize(e) {
	var scroll = scroll_offset();
	cli_stop_poll();
	window.ak_lockmouse = 1;
	document.onmousemove = function(event) {
		var coords = mouseCoords(event);
		var wsize = window_size();
		var rightside = 0;
		var downside = 0;
		if (window.ak_cli_pos == 3) {
			window.ak_cli_width = (coords['x'] - scroll['x']);
			window.ak_cli_height = wsize['height'] - (coords['y'] - scroll['y']);
		}
		if (window.ak_cli_pos == 4) {
			window.ak_cli_width = wsize['width'] - (coords['x'] - scroll['x']);
			window.ak_cli_height = wsize['height'] - (coords['y'] - scroll['y']);
		}
		if (window.ak_cli_pos == 1) {
			window.ak_cli_width = (coords['x'] - scroll['x']);
			window.ak_cli_height = (coords['y'] - scroll['y']);
		}
		if (window.ak_cli_pos == 2) {
			window.ak_cli_width = wsize['width'] - (coords['x'] - scroll['x']);
			window.ak_cli_height = (coords['y'] - scroll['y']);
		}


		cli_resize_fit();
		return false;
	};
	document.onmouseup = function(event) {
		window.ak_lockmouse = 0;
		document.onmousemove = null;
		document.onmouseup = null;
		cli_setopt('height', window.ak_cli_height);
		cli_setopt('width', window.ak_cli_width);
		cli_start_poll();
		if (window.ak_cli_current_user) {
			getref('cli_friend_txt_' + window.ak_cli_current_user).scrollTop = getref('cli_friend_txt_' + window.ak_cli_current_user).scrollHeight;
		}
		cli_room_scroll_bottom();
		return false;
	};
	return false;
	
}
function cli_resize_fit() {
	if (window.ak_cli_open == 0) {
		return;
	}
	var around, rbar, lbar, ftxt, lbarw, lbarh, aroundw, aroundh, wsize;
	around = getref('cli_around');
	lbar = getref('cli_leftcol');
	rbar = getref('cli_rightcol');
	wsize = window_size();
	if (window.ak_cli_width > (wsize['width'] - 50)) {
		window.ak_cli_width = wsize['width'] - 50;
	}
	if (window.ak_cli_height > (wsize['height'] - 50)) {
		window.ak_cli_height = wsize['height'] - 50;
	}
	if (window.ak_cli_width < 350) window.ak_cli_width = 350;
	if (window.ak_cli_height < 292) window.ak_cli_height = 292;

	around.style['width'] = window.ak_cli_width + 'px';
	around.style['height'] = window.ak_cli_height + 'px';
	aroundw = around.offsetWidth;
	aroundh = around.offsetHeight;
	lbarw = lbar.offsetWidth;

	rbar.style['width'] = (aroundw - lbarw - 4) + 'px';
	rbar.style['height'] = (aroundh - 4) + 'px';
	lbar.style['height'] = (aroundh - 6) + 'px';
	cli_output_fit();
}
function cli_badsession() {

	cli_stop_poll();
	window.ak_cli_req.abort();
	getref('cli_around').style['display'] = 'none';

}
function cli_wbr(s) {


	var cnt;
	var i;
	var out;
	cnt = 0;
	out = '';

	for (i = 0;  i < s.length;  i++) {
		out += s[i];
		if (cnt++ == 10) {
			cnt = 0;
			out += '&shy;<wbr />';
		}
	}

	return out;

}
function cli_getopt(s) {
	var c;
	var i;
	var tmp;
	var ret;
	ret = '';
	c = readCookie('cli_opts');
	if (!c) {
		c = '';
	}

	a = c.split(/,/g);
	for (i = 0;  i < a.length;  i++) {
		if (a[i].length > 2) {
			tmp = a[i].split(/=/g);
			if (tmp.length == 2) {
				if (tmp[0] && tmp[1]) {
					if (tmp[0] == s) {
						ret = trim(tmp[1]);
					}
				}
			}
		}
	}
	if (!ret || ret == '') {
		if (s == 'width') ret = 0;
		if (s == 'height') ret = 0;
		if (s == 'bg') ret = 0;
		if (s == 'sess_id') ret = 0;
		if (s == 'sess_ts') ret = 0;
		if (s == 'sess_state') ret = 0;
		if (s == 'sound') ret = 0;
		if (s == 'curuser') ret = '';
		if (s == 'curroom') ret = '';
		if (s == 'pos') ret = 4;
		if (s == 'disable_chat') ret = 0;
		if (s == 'current_tab') ret = 'friends';
	}
	return ret;
}
function cli_setopt(k, v) {
	var opts;
	var i;
	var c;
	var tmp;
	var newone;
	newone = 1;
	c = '';
	if (!opts) {
		opts = new Array('bg', 'sess_id', 'sess_ts', 'sess_state', 'sound', 'height', 'width', 'curuser', 'pos', 'disable_chat', 'current_tab', 'curroom');
	}
	for (i = 0;  i < opts.length;  i++) {
		tmp = cli_getopt(opts[i]);
		c += opts[i] + '=';
		if (k == opts[i]) {
			c += v;
			newone = 0;
		} else {
			c += tmp;
		}
		c += ',';
	}
	document.cookie = 'cli_opts=' + c + '; expires=Thu, 2 Aug 2100 20:47:11 UTC; domain=runboard.com; path=/';
}
function cli_nextbg() {
	var b;

	b = Number(cli_getopt('bg'));
	b++;
	if (b > 2) b = 0;
	cli_changebg(b);
}
function cli_changebg(b) {

	var around;
	var tmp;

	if (window.ak_cli_open == 1) {
		tmp = 'cli_around';
	} else {
		tmp = 'cli_around_minimized';
	}

	if (!b || b == '') b = 0;
	if (b < 0 || b > 2) b = 0;

	around = getref('cli_around');
	tmp += ' cli_around_bg_' + b;

	around.className = tmp;
	if (cli_getopt('bg') != b) {
		cli_setopt('bg', b);
	}
}
function cli_smileys_popup() {
	var s;
	var orig, clone;
	var cl;
	var sm;
	
	cl = getref('cli_smileys_popup');
	if (cl.style['display'] == 'block') {
		cl.style['display'] = 'none';
		return;
	}
	cl.style['display'] = 'block';

}
function cli_smileys_popup_old() {
	var s;
	var orig, clone;
	var cl;
	var sm;
	
	cl = getref('cli_smileys_popup_clone');
	if (cl) {
		cl.parentNode.removeChild(cl);
		return;
	}

	sm = getref('cli_smileys');
	orig = getref('cli_smileys_popup');
	clone = orig.cloneNode(true);
	clone.setAttribute('id', 'cli_smileys_popup_clone');
	var x = findPosX(sm) + 20;
	var y = findPosY(sm) + 20;
	x += 'px';
	y += 'px';
	clone.className = 'cli_smileys_popup';
	clone.style['display'] = 'block';
	clone.style['position'] = 'absolute';
	clone.style['left'] = x;
	clone.style['top'] = y;
	document.body.appendChild(clone);
	var z = maxZindex(document);
	z++;
	clone.style['zIndex'] = z;
	clone.style['display'] = 'block';


}
function cli_switch_sound(mode) {

	if (mode == 1) {
		window.ak_cli_soundmode++;
		if (window.ak_cli_soundmode > 2) {
			window.ak_cli_soundmode = 0;
		}
	}
	getref('cli_soundswitch').className = 'cli_soundswitch cli_soundswitch_' + window.ak_cli_soundmode;
	cli_setopt('sound', window.ak_cli_soundmode);
}
function cli_help() {
	window.location = 'http://bakheva.runboard.com/t15390';
}
function cli_add_smiley(s) {
	var t;
	t = getref('cli_cmd_text_focus');
	insertAtCursor(t, s.title);
	setCaretPosition(t, doGetCaretPosition(t) + s.title.length);	
	t.focus();
	cli_smileys_popup();
}

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/string/rot13 [rev. #1]

String.prototype.rot13 = function(){
    return this.replace(/[a-zA-Z]/g, function(c){
        return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
    });
};
function string_replace(haystack, find, sub) {
    return haystack.split(find).join(sub);
}
function insertAtCursor(myField, myValue) {

  //IE support

  if (document.selection) {

    myField.focus();

    sel = document.selection.createRange();

    sel.text = myValue;

  }

  //MOZILLA/NETSCAPE support

  else if (myField.selectionStart || myField.selectionStart == '0') {

    var startPos = myField.selectionStart;

    var endPos = myField.selectionEnd;

    myField.value = myField.value.substring(0, startPos)

                  + myValue

                  + myField.value.substring(endPos, myField.value.length);

  } else {

    myField.value += myValue;

  }

}
function doGetCaretPosition (ctrl) {
 
	var CaretPos = 0;
	// IE Support
	if (document.selection) {
 
		ctrl.focus ();
		var Sel = document.selection.createRange ();
 
		Sel.moveStart ('character', -ctrl.value.length);
 
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;
 
	return (CaretPos);
 
}
function setCaretPosition(ctrl, pos) {
 
	if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
	else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}
function insertAtCursor(myField, myValue) {

  //IE support

  if (document.selection) {

    myField.focus();

    sel = document.selection.createRange();

    sel.text = myValue;

  }

  //MOZILLA/NETSCAPE support

  else if (myField.selectionStart || myField.selectionStart == '0') {

    var startPos = myField.selectionStart;

    var endPos = myField.selectionEnd;

    myField.value = myField.value.substring(0, startPos)

                  + myValue

                  + myField.value.substring(endPos, myField.value.length);

  } else {

    myField.value += myValue;

  }

}
function findPosX(obj) {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }
function findPosY(obj) {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}

function cli_disable_chat(dis, en) {

	var sw;
	sw = getref('ak_cli_chat_disable_switch');

	if (cli_getopt('disable_chat') == 1) {
		cli_change_status('a');
		cli_setopt('disable_chat', 0);
		cli_toggle();
		if (sw) {
			sw.innerHTML = dis;
		}
	} else {
		cli_change_status('o');
		cli_setopt('disable_chat', 1);
		cli_toggle();
		if (sw) {
			sw.innerHTML = en;
		}
	}
}

function cli_tab(tab, userasked) {

	cli_disable_input();
	if (tab == 'friends') {
		cli_enable_friends_display()
		cli_disable_room_display()
		cli_setopt('current_tab', 'friends');
	} else if (tab == 'rooms') {
		if (userasked == 1) {
			window.ak_cli_room_quiet_userlist_change = 1;
		}
		cli_disable_friends_display()
		cli_enable_room_display()
		cli_setopt('current_tab', 'rooms');
		
	}
	cli_output_fit();
	cli_room_scroll_bottom();
	cli_friend_scroll_bottom();
}

function cli_disable_friends_display() {
	cli_hide_all_friend_txt();
	getref('cli_tabs_friends').className = 'cli_tabs_friends_off';
	getref('cli_friends').style.display = 'none';
	cli_set_title('', '');
	getref('cli_nofriendselected').style.display = 'none';
	getref('cli_friend_offline_txt').style.display = 'none';
}
function cli_enable_friends_display() {
	getref('cli_tabs_friends').className = 'cli_tabs_friends_on';
	getref('cli_friends').style.display = 'block';
	if (window.ak_cli_current_user != '') {
		cli_set_title(window.ak_cli_chatwith, window.ak_cli_current_user);
	} else {
		getref('cli_nofriendselected').style.display = 'block';
	}
}
function cli_disable_room_display() {
	getref('cli_tabs_rooms').className = 'cli_tabs_rooms_off';
	getref('cli_rooms').style.display = 'none';
	getref('cli_room_output_around').style.display = 'none';
	getref('cli_room_output_content').className = 'cli_room_output_content_hidden';
	getref('cli_room_output_users').style.display = 'none';
	getref('cli_noroomselected').style.display = 'none';
	getref('cli_room_leave').style.display = 'none';
	cli_set_title('', '');
}
function cli_enable_room_display() {
	getref('cli_tabs_rooms').className = 'cli_tabs_rooms_on';
	getref('cli_rooms').style.display = 'block';
	if (window.ak_cli_current_room != '') {
		cli_setcurroom(window.ak_cli_current_room, 0);
	} else {
		getref('cli_noroomselected').style.display = 'block';
	}
	getref('cli_room_output_around').style.display = 'block';
	getref('cli_room_output_content').className = 'cli_room_output_content_visible';
	getref('cli_room_output_users').style.display = 'block';
	if (window.ak_cli_room_fullname != '') {
		cli_set_title(window.ak_cli_txt_current_room, window.ak_cli_room_fullname);
		getref('cli_room_leave').style.display = 'inline';
	}
}

function cli_roomlist(ts, payload) {
	var redraw;
	var cnt;
	var clone;
	window.ak_cli_rooms.length = 0;
	redraw = 0;
	s = payload.split(/,/g);
	cnt = 0;
	for (i = 0;  i < s.length;  i++) {
		if (s[i].length > 2) {
			t = s[i].split(/:/g);
			window.ak_cli_rooms[cnt++] = { 'shortname':t[0], 'name':t[1], 'usernumber':t[2] };
		}
	}
	cont = getref('cli_rooms');
	nodes = cont.childNodes;
	if (nodes.length != window.ak_cli_rooms.length) {
		redraw = 1;
		
	} else {
		for (i = 0;  i < nodes.length;  i++) {
			if (nodes[i].id != ('cli_room_name_' + window.ak_cli_rooms[i]['shortname'])) {
				redraw = 1;
			} else if (nodes[i].ak_cli_roomname != window.ak_cli_rooms[i]['name']) {
				redraw = 1;
			} else if (nodes[i].ak_cli_room_usernumber != window.ak_cli_rooms[i]['usernumber']) {
				redraw = 1;
			}
		}
	}

	if (redraw == 1 || window.ak_cli_roomlist_redraw == 1) {
		window.ak_cli_roomlist_redraw = 0;
		cont.innerHTML = '';
		for (i = 0;  i < window.ak_cli_rooms.length;  i++) {
			clone = getref('cli_room_name').cloneNode(true);
			clone.id = 'cli_room_name_' + window.ak_cli_rooms[i]['shortname'];
			clone.innerHTML = window.ak_cli_rooms[i]['name'];
			clone.innerHTML += ('(' + window.ak_cli_rooms[i]['usernumber'] + ')');
			clone.ak_cli_roomname = window.ak_cli_rooms[i]['name'];
			clone.ak_cli_room_usernumber = window.ak_cli_rooms[i]['usernumber'];
			clone.style.display = 'block';
			if (window.ak_cli_rooms[i]['shortname'] == window.ak_cli_current_room) {
				clone.className = 'cli_room_name_selected';
			}
			clone.onclick = Function("cli_setcurroom(\'" + window.ak_cli_rooms[i]['shortname'] + "\', 1); return false;");
			cont.appendChild(clone);

		}
	}
}

function cli_setcurroom(room, userasked) {
	var rname;
	var routard;
	var routusr;
	var routcont;
	var out;
	var change;

	if (room == '') {
		return;
	}

	if (userasked == 1) {
		window.ak_cli_room_quiet_userlist_change = 1;
	}

	if (window.ak_cli_current_room != room) {
		change = 1;
		window.ak_cli_current_room = room;
		window.ak_cli_roomts = 0;
		window.ak_cli_room_userlist = '';
		window.ak_cli_initialroomset = 0;
	} else {
		change = 0;
	}

	for (i = 0;  i < window.ak_cli_rooms.length;  i++) {
		rname = getref('cli_room_name_' + window.ak_cli_rooms[i]['shortname']);
		if (rname) {
			if (window.ak_cli_rooms[i]['shortname'] == room) {
				rname.className = 'cli_room_name_selected';
				getref('cli_noroomselected').style.display = 'none';
				window.ak_cli_room_fullname = window.ak_cli_rooms[i]['name'];
			} else {
				if (rname.className == 'cli_room_name_selected') {
					rname.className = 'cli_room_name';
				}
			}
		}
	}
	out = getref('cli_output');
	routard = getref('cli_room_output_around');
	routusr = getref('cli_room_output_users');
	routcont = getref('cli_room_output_content');
	if (change == 1) {
		routcont.innerHTML = '';
		routusr.innerHTML = '';
	}
	routard.style.display = 'block';
	cli_enable_input();
	cli_setopt('curroom', room);
	if (cli_getopt('current_tab') == 'rooms') {
		if (window.ak_cli_room_fullname != '') {
			window.ak_cli_initialroomset = 1;
			cli_set_title(window.ak_cli_txt_current_room, window.ak_cli_room_fullname);
			getref('cli_room_leave').style.display = 'inline';
		}
	}

}
function cli_disable_input() {
	getref('cli_cmd_text_focus').disabled = true;
}
function cli_enable_input() {
	getref('cli_cmd_text_focus').disabled = false;
}
function cli_update_room(ts, user, payload, room) {

	room = trim(room);
	if (window.ak_cli_current_room != room) {
		return;
	}
	rcont = getref('cli_room_output_content');
	payload = cli_smileys(cli_msg_unescape(payload));
	rcont.innerHTML += sprintf(window.ak_cli_txt_room_says, user, payload);
	if (window.ak_cli_roomts < ts) {
		window.ak_cli_roomts = ts;
		if (window.ak_cli_open == 0) {
			if (window.ak_cli_servertime) {
				if ((window.ak_cli_servertime - ts) < 5000) {
					window.ak_cli_blink = 1;
					if (cli_getopt('current_tab') != 'rooms') {
						getref('cli_tabs_rooms').className = 'cli_tabs_rooms_off_warning';
					}
				}
			}
		} else {
			if (window.ak_cli_servertime) {
				if (cli_getopt('current_tab' != 'rooms')) {
						getref('cli_tabs_rooms').className = 'cli_tabs_rooms_off_warning';
				}
			}
		}
	}
	//rcont.scrollTop = rcont.scrollHeight;
	if (window.ak_cli_open == 1) {
		cli_room_scroll_bottom();
	}

}

function cli_update_room_userlist(room, payload) {
	var t;
	var status;
	var s;
	var ul;
	var prof_link;
	var oldlist;
	var newlist;
	var stillthere;
	var i;
	var tmptxt;
	var j;
	var skipcomparizon;
	var rcont;
	if (room.length < 1) {
		return;
	}
	if (room != window.ak_cli_current_room) {
		return;
	}
	if (cli_getopt('current_tab') != 'rooms') {
		return;
	}

	if (window.ak_cli_room_userlist == payload) {
		return;
	}
	if (oldlist) {
		delete oldlist;
	}
	if (newlist) {
		delete newlist;
	}
	oldlist = new Array();
	newlist = new Array();


	if (window.ak_cli_initialroomset == 1 && window.ak_cli_room_userlist != '' && window.ak_cli_room_quiet_userlist_change == 0) {
		s = window.ak_cli_room_userlist.split(/,/g);
		for (i = 0;  i < s.length;  i++) {
			if (s[i].length > 2) {
				t = s[i].split(/:/g);
				oldlist.push(t[0]);
			}
		}
		skipcomparizon = 0;
	} else {
		skipcomparizon = 1;
	}

	window.ak_cli_room_userlist = payload;

	s = payload.split(/,/g);
	ul = getref('cli_room_output_users');
	tmptxt = '<ul>';
	for (i = 0;  i < s.length;  i++) {
		if (s[i].length > 2) {
			t = s[i].split(/:/g);
			if (t[1] == 'a') {
				status = 'active';
			} else if (t[1] == 'i') {
				status = 'idle';
			} else {
				status = 'offline';
			}
			prof_link = t[0].toLowerCase();
			prof_link = prof_link.replace(/-/g, '_');

			tmptxt += '<li>';
			tmptxt += ('<span class="cli_friend_status_' + status + '">&nbsp;</span><a href="/U' + prof_link + '">' + t[0].replace(/-/g, ' ') + '</a>');
			tmptxt += '</li>';
			newlist.push(t[0]);
		}
	}
	tmptxt += '</ul>';
	ul.innerHTML = tmptxt;

	if (window.ak_cli_initialroomset == 1 && skipcomparizon == 0 && window.ak_cli_room_quiet_userlist_change == 0) {
		rcont = getref('cli_room_output_content');
		for (i = 0;  i < oldlist.length;  i++) {
			stillthere = 0;
			for (j = 0;  j < newlist.length;  j++) {
				if (oldlist[i] == newlist[j]) {
					stillthere = 1;
					j = newlist.length;
				}
			}
			if (stillthere == 0) {
				rcont.innerHTML += sprintf(window.ak_cli_txt_room_left, oldlist[i].replace(/-/g, ' '));
				cli_room_scroll_bottom();
				i = oldlist.length;
			}
		}
	
		for (j = 0;  j < newlist.length;  j++) {
			stillthere = 0;
			for (i = 0;  i < oldlist.length;  i++) {
				if (oldlist[i] == newlist[j]) {
					stillthere = 1;
					i = oldlist.length;
				}
			}
			if (stillthere == 0) {
				rcont.innerHTML += sprintf(window.ak_cli_txt_room_joined, newlist[j].replace(/-/g, ' '));
				cli_room_scroll_bottom();
				j = newlist.length;
			}
		}
	}

	delete newlist;
	delete oldlist;

	if (window.ak_cli_room_quiet_userlist_change == 1) {
		window.ak_cli_room_quiet_userlist_change = 0;
	}
}

function toHex(str) {
	var hex = '';
	for(var i=0;i<str.length;i++) {
		hex += ''+str.charCodeAt(i).toString(16);
	}
	return hex;
}

function cli_room_scroll_bottom() {
	if (window.ak_cli_current_room != '') {
		getref('cli_room_output_content').scrollTop = getref('cli_room_output_content').scrollHeight;
	}
}
function cli_friend_scroll_bottom() {
	var tmp;
	if (window.ak_cli_current_user != '') {
		tmp = getref('cli_friend_txt_' + window.ak_cli_current_user);
		if (tmp) {
			tmp.scrollTop = tmp.scrollHeight;
		}
	}
}

function cli_room_leave() {
	window.ak_cli_current_room = '';
	window.ak_cli_room_fullname = '';
	window.ak_cli_roomlist_redraw = 1;
	cli_setopt('curroom', '');
	cli_set_title('', '');
	getref('cli_room_output_content').innerHTML = '';
	getref('cli_room_output_users').innerHTML = '';
	getref('cli_room_leave').style.display = 'none';
	getref('cli_noroomselected').style.display = 'block';
	cli_output_fit();
	

}
function cli_output_fit() {
	var t;
	var lbar;
	var cli_friends = getref('cli_friends');
	var cli_around = getref('cli_around');
	var cli_friend_offline_txt = getref('cli_friend_offline_txt');
	var cli_rooms = getref('cli_rooms');
	var cli_output = getref('cli_output');
	var cli_output_txt = getref('cli_output_txt');
	var cli_leftcol = getref('cli_leftcol');
	var cli_rightcol = getref('cli_rightcol');
	var cli_status_top = getref('cli_status_top');
	var cli_tools = getref('cli_tools');
	var cli_room_output_content = getref('cli_room_output_content');
	var cli_cmd_form = getref('cli_cmd_form');
	var cli_tabs = getref('cli_tabs');
	var cli_noroomselected = getref('cli_noroomselected');
	var cli_room_leave = getref('cli_room_leave');
	var cli_room_output_users = getref('cli_room_output_users');
	var cli_ftcu;

	cli_ftcu = '';
	if (window.ak_cli_current_user) {
		if (window.ak_cli_current_user != '') {
			cli_ftcu = getref('cli_friend_txt_' + window.ak_cli_current_user);
		}
	}

	cli_output.style.height = (cli_rightcol.offsetHeight - cli_status_top.offsetHeight) + 'px';

	cli_room_output_content.style.height = (cli_around.offsetHeight - cli_tools.offsetHeight - cli_cmd_form.offsetHeight - cli_room_output_users.offsetHeight - cli_room_leave.offsetHeight - cli_noroomselected.offsetHeight + 2) + 'px';

	cli_rooms.style.height = (cli_leftcol.offsetHeight - cli_tabs.offsetHeight - cli_tools.offsetHeight) + 'px';

	if (cli_ftcu != '') {
		if (cli_ftcu != null) {
			t = (cli_around.offsetHeight - (cli_friend_offline_txt.offsetHeight) - cli_tools.offsetHeight - cli_cmd_form.offsetHeight);
			t -= 15;
			if (cli_friend_offline_txt.offsetHeight > 0) {
				t -= 5;
			}
			cli_ftcu.style.height = t + 'px';
		}
	}

	cli_friends.style.height = (cli_leftcol.offsetHeight - cli_tools.offsetHeight - cli_tabs.offsetHeight - 10) + 'px';
	cli_friends.style.height = (cli_leftcol.offsetHeight - cli_tools.offsetHeight - cli_tabs.offsetHeight - 10) + 'px';

	cli_friend_offline_txt.style.left = (getX(cli_around) + cli_leftcol.offsetWidth) + 'px';
	cli_friend_offline_txt.style.top = getY(cli_output_txt) + 'px';
	cli_friend_offline_txt.style.width = cli_output_txt.offsetWidth - 40 + 'px';

}

function cli_unescape(t) {
	t = t.replace(/__AKQTE__/g, '"');
	t = t.replace(/__AKLT__/g, '<');
	t = t.replace(/__AKGT__/g, '>');
	t = t.replace(/__AKEQ__/g, '=');
	t = t.replace(/__AKAMT__/g, '&');
}

function cli_room_open(r) {
	if (window.ak_cli_userlogin == '') {
		alert(window.ak_cli_txt_room_notloggedin);
		return;
	}

	if (window.ak_cli_open == 0) {
		cli_toggle();
	}
	cli_tab('rooms');
	cli_setcurroom(r);
}

function devlog(t) {
	if (window.ak_current_user == 'thor') {
		console.log(t);
	}
}

