var DOMAIN = 'http://www.fpsbanana.com';
var IMAGE_DOMAIN = 'http://image.fpsbanana.com';
var CLEAR_DIV = '<div style="height:0px;clear:both;padding:0px"></div>';

ico = new Image();
ico.src = IMAGE_DOMAIN+'/ico/ok.gif';
ico = new Image();
ico.src = IMAGE_DOMAIN+'/ico/error.gif';
ico = new Image();
ico.src = IMAGE_DOMAIN+'/ico/load.gif';

function sd_all(fname,name)
{
	var t,bool=1,sel='Check All',desel='Uncheck All';

	if (document.forms[fname].sd.value == sel)
	{
		document.forms[fname].sd.value = desel;
	}
	else
	{
		document.forms[fname].sd.value = sel;
		bool = 0;
	}

	if (!document.forms[fname].elements[name][1]) document.forms[fname].elements[name].checked = bool;
	else for (t,i=0;t=document.forms[fname].elements[name][i++]; t.checked=bool);
}

function StaticResponse(response_div,response)
{
	if (response.charAt(0) === '!' && response.charAt(1) === '=')
	{
		var resp = response.substring(2);
		resp = resp.replace('##','<br>');
		SimpleResponse(response_div,resp);

		return true;
	}
	else
	{
		return false;
	}
}

function ShowDiv(id)
{
	if (typeof(id)=='string') id = document.getElementById(id);
	if (id.style.display == 'none') id.style.display = 'block';
	else id.style.display = 'none';
}

function SetDisplay(id,display)
{
	if (typeof(id)=='string') document.getElementById(id).style.display = display;
	else id.style.display = display;
}

function ShowDivRemote(id,linkid,show_msg,hide_msg)
{
	if (document.getElementById(id).style.display == 'none')
	{
		var msg = hide_msg;
		var display = 'block';
	}
	else
	{
		var msg = show_msg;
		var display = 'none';
	}

	document.getElementById(linkid).innerHTML = msg;
	document.getElementById(id).style.display = display;

	// x131109
	//return display;
}

function GameFilter(reloaduri,menu_div_id)
{
	this.reloaduri=reloaduri;
	this.menu_div_id=menu_div_id;
	this.menu = undefined;
	this.menu_open = false;
}

GameFilter.prototype.DoRequest = function(pollid,choice)
{
	if (!this.menu_open)
	{
		this.menu_open = true;
		SetDisplay(this.menu_div_id,'block');

		if (this.menu == undefined) this.ParseResponse(this,gamefilter_contents);
		document.getElementById(this.menu_div_id).innerHTML = this.menu;
	}
	else
	{
		this.menu_open = false;
		SetDisplay(this.menu_div_id,'none');
	}
}

GameFilter.prototype.ParseResponse = function(parentObj,resultText)
{
	var ar = resultText.split(DELIMITER_2);

	var indent_level = 0;

	var contents = '<div style=\"padding:0px\"><a class=\"red\" href=\"'+parentObj.reloaduri+'0\"><b>All Games</b> (Cancel filter)</a></div>';
	for (var i=0;i<ar.length;++i)
	{
		var game = ar[i].split(DELIMITER_1);

		var indent = parseInt(game[1].substring(0,1));
		game[1] = game[1].substring(1);

		if (indent > indent_level)
		{
			contents += '<img style=\"position:relative;top:5px;left:'+25*indent+'px;\" src=\"'+IMAGE_DOMAIN+'/ico/dline.gif\"> ';
		}

		indent_level = indent;

		contents += '<div style=\"top:-15px;padding:'+(indent==0?10:0)+'px 0px 0px '+(indent>0?25*indent+15:0)+'px\">';

		if (game[0] == '-') contents += '<b>'+game[1]+'</b></div>';
		else contents += '<a href=\"'+parentObj.reloaduri+game[0]+'\">'+game[1]+'</a></div>';
	}

	parentObj.menu = contents;
}

function PreviewText(prev_id,text_id) {	document.getElementById(prev_id).innerHTML = document.getElementById(text_id).value.replace(/\n/g,'<br>'); }
function TextFromSelect(id,text) { document.getElementById(id).value = text; }

function in_array(val,ar)
{
	for (var i=0;i<ar.length;i++) if(ar[i]==val) return true;
	return false;
}

function array_unset(val,ar)
{
	for (var i=0;i<ar.length;i++)
	{
		if (ar[i] == val)
		{
			ar.splice(i,1);
			break;
		}
	}
}

function SetOpacity(id,opacity)
{
	if (typeof(id)=='string') id = document.getElementById(id);
	id.style.opacity = id.style.MozOpacity = opacity/100;
	id.style.filter = 'alpha(opacity='+opacity+')';
}

function outerHTML(obj) { return obj.outerHTML || document.createElement('div').appendChild(obj.cloneNode(true)).parentNode.innerHTML;}

function DEBUG(append,text)
{
	if (append)
	{
		var html = document.getElementById('debug').innerHTML;
		document.getElementById('debug').innerHTML = html+'<br>'+text;
	}
	else document.getElementById('debug').innerHTML = text;
}

// AJAXLib v. 1.0
// author: Jacek Karaszewski, http://www.karaszewski.com/tools/ajaxlib/
// licenced under Creative Commons Attribution 2.5 License

date = new Date();
var start_time = date.getTime();
var last_request;
var DELIMITER_1 = '^@(';
var DELIMITER_2 = '&#)';
var DELIMITER_3 = '*!-';

function LoadDoc(passthruObj,url,callFunc,floodcheck)
{
	if (floodcheck)
	{
		date = new Date();
		request_time = date.getTime();

		if (start_time+5000<request_time)
		{
			if (last_request+200 > request_time) return;
			last_request = request_time;
		}
	}

	if (window.XMLHttpRequest) var RequestObj = new XMLHttpRequest();
	else var RequestObj = CreateIEAjax();


	RequestObj.onreadystatechange = function()
	{
		try
		{
			if(RequestObj.status !== undefined && RequestObj.status != 0)
			{
				var httpStatus = RequestObj.status;
			}
			else
			{
				var httpStatus = 13030;
			}
		}
		catch(e)
		{
			// 13030 is the custom code to indicate the condition -- in Mozilla/FF --
			// when the o object's status and statusText properties are
			// unavailable, and a query attempt throws an exception.
			var httpStatus = 13030;
		}

		if (RequestObj.readyState == 4 && (httpStatus == 200 || httpStatus == 304))
		{
			callFunc(passthruObj,RequestObj.responseText)
		}
	}
	RequestObj.open("GET", url, true);
	RequestObj.send(null);
}

function CreateIEAjax()
{
	types = ['Microsoft.XMLHTTP','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP'];

	for (var i = 0; i < types.length; i++)
	{
		try
		{
			return new ActiveXObject(types[i]);
		}
		catch(e) {}
	}

	return undefined;
}

function SimpleResponse(id,string)
{
	if (typeof(id)=='string') id = document.getElementById(id);
	if (string == '') SetDisplay(id,'none');
	else
	{
		if (id.tagName == 'SPAN') SetDisplay(id,'inline');
		else SetDisplay(id,'block');
	}
	id.innerHTML = string;
}

function MessageLoading(message)
{
	return '<b class="blue"><img src="'+IMAGE_DOMAIN+'/ico/load.gif"> '+message+'</b>';
}

function MessageError(message)
{
	return '<b class="red"><img src="'+IMAGE_DOMAIN+'/ico/error.gif"> '+message+'</b>';
}

function MessageOk(message)
{
	return '<b class="green"><img src="'+IMAGE_DOMAIN+'/ico/ok.gif"> '+message+'</b>';
}

function TrashItem(uri,response_div_id,type_title)
{
	this.uri=uri;
	this.response_div_id=response_div_id;
	this.type_title=type_title;
}

TrashItem.prototype.DoRequest = function(rowid,itemid)
{
	var inp = confirm('Really trash this '+ this.type_title +'?');

	if (inp)
	{
		this.rowid = rowid;
		SimpleResponse(this.response_div_id,MessageLoading('Trashing...'));
		LoadDoc(this,this.uri+'&itemid='+itemid,this.ParseResponse,true);
	}
}

TrashItem.prototype.ParseResponse = function(parentObj,resultText)
{
	if (resultText == 1)
	{
		RemoveNode(parentObj.rowid);
		var msg = MessageOk('Trashed '+parentObj.type_title);
	}
	else
	{
		var msg = MessageError('Failed to trash '+parentObj.type_title+' - please contact an admin!');
	}

	SimpleResponse(parentObj.response_div_id,msg);
}

function RemoveNode(id)
{
	var node = document.getElementById(id);
	node.parentNode.removeChild(node);
}

function CreateNode(parent_obj,tag,contents)
{
	var element = document.createElement(tag);
	if (contents != undefined) element.innerHTML = contents;

	parent_obj.appendChild(element);
	return element;
}

function CachedRequest(response_div_id)
{
	this.response_div_id=response_div_id;
	this.cache_uris = new Array();
	this.cache_data = new Array();
}

CachedRequest.prototype.DoRequest = function(uri)
{
	for (i=0;i<this.cache_uris.length;++i)
	{
		if (this.cache_uris[i] == uri && this.cache_data[i] != undefined)
		{
			document.getElementById(this.response_div_id).innerHTML = this.cache_data[i];
			return;
		}
	}

	SimpleResponse(this.response_div_id,MessageLoading('Loading...'));
	LoadDoc(this,uri,this.ParseResponse,true);
	this.cache_uris.push(uri);
}

CachedRequest.prototype.ParseResponse = function(parentObj,resultText)
{
	parentObj.cache_data.push(resultText);
	document.getElementById(parentObj.response_div_id).innerHTML = resultText;
}

function RawRequest(init_div_id,exec_div_id,do_caching)
{
	this.init_div = (!init_div_id?false:document.getElementById(init_div_id));
	this.exec_div = (!exec_div_id?false:document.getElementById(exec_div_id));
	this.do_caching = do_caching;
	this.cache_uris = new Array();
	this.cache_data = new Array();
	this.loading_message = 'Loading...';
	this.final_subsystems = false;

	this.DoRequest = function(uri)
	{
		if (this.do_caching)
		{
			for (var i=0;i<this.cache_uris.length;++i)
			{
				if (this.cache_uris[i] == uri && this.cache_data[i] != undefined)
				{
					this.Output(this,this.cache_data[i][0],this.cache_data[i][1]);
					return;
				}
			}
		}

		SimpleResponse(this.init_div,MessageLoading(this.loading_message));
		LoadDoc(this,uri,this.ParseResponse,false);
		this.cache_uris.push(uri);
	}

	this.Output = function(obj,init_str,exec_str)
	{
		if (obj.init_div.id === obj.exec_div.id)
		{
			if (init_str.length > 0 && exec_str.length > 0)
			{
				SimpleResponse(obj.init_div,init_str+exec_str);
			}
			else if (init_str.length > 0)
			{
				SimpleResponse(obj.init_div,init_str);
			}
			else
			{
				SimpleResponse(obj.init_div,exec_str);
			}
		}
		else
		{
			if (obj.init_div !== false) SimpleResponse(obj.init_div,init_str);
			if (obj.exec_div !== false) SimpleResponse(obj.exec_div,exec_str);
		}

		if (obj.final_subsystems !== false)
		{
			for (var i=0;i<obj.final_subsystems.length;++i)
			{
				obj.final_subsystems[i]();
			}
		}
	}

	this.ParseResponse = function(parentObj,resultText)
	{
		resultText = resultText.split(DELIMITER_1);

		parentObj.cache_data.push(new Array(resultText[0],resultText[1]));

		parentObj.Output(parentObj,resultText[0],resultText[1]);
	}
}

function Bump(obj_name,action_uri,info_uri)
{
	this.obj_name=obj_name;
	this.action_uri=action_uri;
	this.info_uri=info_uri;
}

Bump.prototype.DoRequest = function(id_prefix,itemid,type)
{
	this.id_prefix=id_prefix;
	this.itemid=itemid;
	var num = parseInt(document.getElementById(id_prefix+'_num').innerHTML);
	this.num=(type=='down'?num-1:num+1);

	if (type == 'down')
	{
		var rsn_obj = document.getElementById(id_prefix+'_rsn');
		if (rsn_obj) var rsn_val = rsn_obj.value.replace(/^\s+|\s+$/g,'');

		if (rsn_val == undefined || rsn_val == '' || document.getElementById(id_prefix+'_resp').style.display == 'none')
		{
			SimpleResponse(id_prefix+'_resp','<b>Reason:</b> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <img onclick="ShowDiv(\''+id_prefix+'_resp\');" style="cursor:pointer" src="'+IMAGE_DOMAIN+'/ico/closed.gif"><br><input style="margin-top:3px" id="'+id_prefix+'_rsn" type="textbox" class="textbox" size="20" maxlength="100"> <img class="icon" title="Thumbs Down!" onclick="'+this.obj_name+'.DoRequest(\''+id_prefix+'\','+itemid+',\'down\')" src="'+IMAGE_DOMAIN+'/ico/bdwn.gif">');
			return;
		}
	}

	LoadDoc(this,this.action_uri+'&itemid='+itemid+'&type='+type+(type=='down'?'&reason='+rsn_val:''),this.ParseResponse,true);
	SimpleResponse(id_prefix+'_resp',MessageLoading('Saving...'));
}

Bump.prototype.ParseResponse = function(parentObj,resultText)
{
	var closer = '<img onclick="ShowDiv(\''+parentObj.id_prefix+'_resp\');" style="cursor:pointer" src="'+IMAGE_DOMAIN+'/ico/closed.gif">';
	response_types = {'0':MessageError('An error occurred'),'1':MessageOk('Saved'),'2':MessageOk('Changed to a thumbs down'),'3':MessageOk('Changed to a thumbs up'),'4':MessageError('You already gave a thumbs down'),'5':MessageError('You already gave a thumbs up'),'6':MessageError('Your thumb is snapped'),'7':MessageError('This user has blocked you'),'8':MessageError('This user\'s cLvL is frozen'),'9':MessageError('Please login')}

	for (var key in response_types)
	{
		if (key == resultText)
		{
			SimpleResponse(parentObj.id_prefix+'_resp',response_types[key]+' '+closer);
			if (resultText == '1' || resultText == '2' || resultText == '3') SimpleResponse(parentObj.id_prefix+'_count','<a title="Show Thumbers" style="cursor:help" href="javascript:'+parentObj.obj_name+'.GetInfo(\''+parentObj.id_prefix+'\','+parentObj.itemid+')"><img src=\"'+IMAGE_DOMAIN+'/ico/'+(parentObj.num>=0?'bup.gif':'bdwn.gif')+'\"> x <b id="'+parentObj.id_prefix+'_num">'+Math.abs(parentObj.num)+'</b></a>');
			return;
		}
	}

	SimpleResponse(parentObj.id_prefix+'_resp','An error occurred '+closer);
}

Bump.prototype.GetInfo = function(id_prefix,itemid)
{
	if (document.getElementById(id_prefix+'_resp').style.display == 'none')
	{
		this.id_prefix=id_prefix;
		SimpleResponse(id_prefix+'_resp',MessageLoading('Loading...'));
		LoadDoc(this,this.info_uri+'&itemid='+itemid,this.ParseInfo,true);
	}
	else
	{
		ShowDiv(id_prefix+'_resp');
	}
}

Bump.prototype.ListType = function(thumber_str,css_class,title,icon)
{
	var bumps = thumber_str.split(DELIMITER_2);
	var num_bumps = bumps.length;
	if (num_bumps > 0)
	{
		ar = new Array();
		for (var i=0;i<num_bumps;++i)
		{
			var bits = bumps[i].split(DELIMITER_1);
			if (icon == 'bdwn') ar.push('<a href="'+DOMAIN+'/members/'+bits[0]+'">'+bits[1]+'</a> ('+bits[2]+')<br>');
			else ar.push('<a href="'+DOMAIN+'/members/'+bits[0]+'">'+bits[1]+'</a>');
		}

		return '<div class="tmid"><b class="'+css_class+'"><img src=\"'+IMAGE_DOMAIN+'/ico/'+icon+'.gif\"> x '+num_bumps+'</b> '+title+'</div><div style="width:200px;white-space:normal">'+ar.join((icon=='bdwn'?'':', '))+'</div>';
	}
}

Bump.prototype.ParseInfo = function(parentObj,resultText)
{
	var bits = resultText.split(DELIMITER_3);

	var msg = '';
	if (bits[0] != '') msg += parentObj.ListType(bits[0],'green','Thumbs Up','bup');
	if (bits[1] != '') msg += parentObj.ListType(bits[1],'red','Thumbs Down','bdwn');

	if (bits[2] != undefined)
	{
		var stats = bits[2].split(DELIMITER_1);

		msg += '<div><span class="tmid"><a href="'+DOMAIN+'/members/'+stats[0]+'">'+stats[1]+'</a> - cLvL '+stats[2]+'</span>';
		msg += '<br><img style="background-color:#6EE16C" width="'+(stats[3]/stats[4]*180)+'" height="7" src="'+IMAGE_DOMAIN+'/ico/blank.gif"><img style="background-color:#8D8D8D" width="'+(200-(stats[3]/stats[4]*180))+'" height="7" src="'+IMAGE_DOMAIN+'/ico/blank.gif"> '+Math.round(stats[3]/stats[4]*100)+'%';
		msg += '<br>'+stats[3]+'/'+stats[4]+' ('+(stats[4]-stats[3])+' thumbs needed)</div>';
		msg += '<div style="text-align:right"><a class="grey" href="'+DOMAIN+'/pages/815">Rules</a></div>';
	}

	SimpleResponse(parentObj.id_prefix+'_resp',msg);
}

function ToolTip(tt_id)
{
	this.tt_id = tt_id;
	this.x_offset = 5;
	this.y_offset = -5;
	this.direction = 'right';
	this.shadow_offset = 3;
	this.is_closed = true;
}

ToolTip.prototype.Open = function(id,text)
{
	this.is_closed = false;

	var tt_obj = document.getElementById(this.tt_id);
	var tt_obj_shadow = document.getElementById(this.tt_id+'_shadow');

	tt_obj.innerHTML = text;
	tt_obj.style.visibility = 'visible';
	tt_obj_shadow.style.visibility = 'visible';

	var content_obj = document.getElementById(id);
	var position = get_corner(content_obj,content_obj.offsetWidth+this.x_offset,this.y_offset);
	tt_obj.style.top = position.y+'px';
	tt_obj_shadow.style.top = (position.y+this.shadow_offset)+'px';

	tt_obj_shadow.style.width = tt_obj.offsetWidth+'px';
	tt_obj_shadow.style.height = tt_obj.offsetHeight+'px';

	if (this.direction == 'left')
	{
		var size = get_window_size();
		tt_obj.style.right = (size.x-position.x)+'px';
		tt_obj_shadow.style.right = (size.x-position.x+this.shadow_offset)+'px';
	}
	else
	{
		tt_obj.style.left = position.x+'px';
		tt_obj_shadow.style.left = (position.x+this.shadow_offset)+'px';
	}
}

ToolTip.prototype.SetShadow = function()
{
	if (this.is_closed) return;

	var tt_obj = document.getElementById(this.tt_id);
	var tt_obj_shadow = document.getElementById(this.tt_id+'_shadow');

	tt_obj_shadow.style.visibility = 'visible';
	tt_obj_shadow.style.width = tt_obj.offsetWidth+'px';
	tt_obj_shadow.style.height = tt_obj.offsetHeight+'px';

	tt_obj_shadow.style.top = (tt_obj.style.top+this.shadow_offset)+'px';

	if (this.direction == 'left')
	{
		tt_obj_shadow.style.right = (tt_obj.style.right+this.shadow_offset)+'px';
	}
	else
	{
		tt_obj_shadow.style.left = (tt_obj.style.left+this.shadow_offset)+'px';
	}
}

ToolTip.prototype.Close = function()
{
	this.is_closed = true;
	document.getElementById(this.tt_id).style.visibility = 'hidden';
	document.getElementById(this.tt_id+'_shadow').style.visibility = 'hidden';
}

get_corner = function(obj,x_offset,y_offset)
{
	var pos = {x:0, y:0};

	if (obj.offsetParent)
	{
		pos.x = obj.offsetLeft+x_offset;
		pos.y = obj.offsetTop+y_offset;

		while (obj = obj.offsetParent)
		{
			pos.x += obj.offsetLeft;
			pos.y += obj.offsetTop;
		}
	}

	return pos;
}

get_window_size = function()
{
	if (typeof(window.innerWidth) == 'number') return {x:window.innerWidth,y:window.innerHeight};
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) return {x:document.documentElement.clientWidth,y:document.documentElement.clientHeight};
	else if (document.body && (document.body.clientWidth || document.body.clientHeight)) return {x:document.body.clientWidth,y:document.body.clientHeight};
}

get_scroll_position = function()
{
	var pos = {x:0, y:0};
	if (typeof(window.pageYOffset) == 'number')
	{
		pos.x = window.pageXOffset;
		pos.y = window.pageYOffset;
	}
	else if (document.body && (document.body.scrollLeft || document.body.scrollTop))
	{
		pos.x = document.body.scrollLeft;
		pos.y = document.body.scrollTop;
	}
	else if	(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
	{
		pos.x = document.documentElement.scrollLeft;
		pos.y = document.documentElement.scrollTop;
	}

	return pos;
}

get_cursor_position = function(isIE,e)
{
	if (isIE)
	{
		return {x:e.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft),y:e.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)};
	}
	else return {x:e.pageX,y:e.pageY};
}

function HoverPanel(content_div_id,panel_div_id,shadow_div_id,this_name)
{
	this.content_div_obj=document.getElementById(content_div_id);
	this.panel_div_obj=document.getElementById(panel_div_id);
	this.shadow_div_obj=document.getElementById(shadow_div_id);
	this.this_name=this_name;

	this.float_open=false;
	this.float_timeout_defined=false;

	if (document.all) this.isIE=true;
	else this.isIE=false;

	this.Open = function(e)
	{
		var obj = this;
		if (this.float_open)
		{
			this.Close(obj,e);
		}
		else
		{
			this.float_open = true;
			if (this.float_timeout_defined)
			{
				clearTimeout(this.float_timeout);
				this.float_timeout_defined = false;
			}
			SetDisplay(this.content_div_obj,'block');

			this.SetShadow();

			if (this.isIE)
			{
				this.panel_div_obj.attachEvent('onclick',function(e) {return;});
				window.event.cancelBubble = true;
				document.attachEvent('onclick',CloseFunc = function(e) {obj.Close(obj,e);});
			}
			else
			{
				document.addEventListener('click',CloseFunc = function(e) {obj.Close(obj,e);},true);
			}
		}
	}

	this.Close = function(obj,e)
	{
		var mousepos = get_cursor_position(obj.isIE,e);
		var obj_corner = get_corner(obj.panel_div_obj,0,0);
		var obj_dims = { w:obj.panel_div_obj.offsetWidth,h:obj.panel_div_obj.offsetHeight }

		if (mousepos.x < obj_corner.x || mousepos.x > obj_corner.x+obj_dims.w || mousepos.y < obj_corner.y || mousepos.y > obj_corner.y+obj_dims.h)
		{
			SetDisplay(obj.content_div_obj,'none');

			if (obj.panel_div_obj.id == obj.content_div_obj.id)
			{
				obj.shadow_div_obj.style.visibility = 'hidden';
			}
			else
			{
				obj.SetShadow();
			}

			if (obj.isIE) document.detachEvent('onclick',CloseFunc);
			else
			{
				document.removeEventListener('click',CloseFunc,true);
				e.stopPropagation();
			}

			obj.float_open = false;
		}
	}

	this.SetShadow = function()
	{
		var pos = get_corner(this.panel_div_obj,0,0);

		this.shadow_div_obj.style.width = this.panel_div_obj.offsetWidth+'px';
		this.shadow_div_obj.style.height = this.panel_div_obj.offsetHeight+'px';
		this.shadow_div_obj.style.visibility = 'visible';
		this.shadow_div_obj.style.top = (pos.y+4)+'px';
		this.shadow_div_obj.style.left = (pos.x+4)+'px';
	}
}

function BrowseMenu(obj_name,icon_expand,icon_collapse,div_prefix,i,uri,loadable_lists,root_div_id,open_div_id)
{
	this.obj_name=obj_name;
	this.icon_expand=icon_expand;
	this.icon_collapse=icon_collapse;
	this.div_prefix=div_prefix;
	this.i=i;
	this.uri=uri;
	this.loadable_lists=loadable_lists;
	this.root_div_id = root_div_id;
	this.open_div_id = open_div_id;

	this.Initialize = function()
	{
		this.OpenParents(this.open_div_id);
		if (this.open_div_id != this.root_div_id) this.OpenChildren(this.open_div_id);
	}

	this.OpenParents = function(div_id)
	{
		if (div_id == this.root_div_id)
		{
			SetDisplay(div_id,'block');
		}
		else
		{
			SetDisplay(div_id,'block');
			this.OpenParents(document.getElementById(div_id).parentNode.id);
		}
	}

	this.OpenChildren = function(div_id)
	{
		document.getElementById('toggle_'+div_id).innerHTML = this.icon_collapse;

		var child_nodes = document.getElementById(div_id).childNodes;
		for (var i=0;i<child_nodes.length;++i)
		{
			if (child_nodes[i].tagName == 'DIV') SetDisplay(child_nodes[i].id,'block');
		}
	}

	this.Open = function(div_id)
	{
		var toggle = document.getElementById('toggle_'+div_id);

		if (toggle.innerHTML == this.icon_collapse)
		{
			toggle.innerHTML = this.icon_expand;

			var child_nodes = document.getElementById(div_id).childNodes;
			for (var i=0;i<child_nodes.length;++i)
			{
				if (child_nodes[i].tagName == 'DIV') SetDisplay(child_nodes[i].id,'none');
			}
		}
		else
		{
			this.open_div_id = div_id;
			this.open_div = document.getElementById(div_id);

			SetDisplay(this.open_div,'block');

			var loadable = false;
			for (i=0;i<this.loadable_lists.length;++i)
			{
				if (this.loadable_lists[i][0] == div_id)
				{
					loadable = true;
					break;
				}
			}

			if (loadable)
			{
				this.responder = CreateNode(this.open_div,'div','');
				this.responder.id = 'bsmu_responder';

				SimpleResponse(this.responder.id,MessageLoading('Loading...'));
				LoadDoc(this,this.uri+this.loadable_lists[i][1],this.ParseResponse,true);
			}
			else
			{
				this.OpenChildren(div_id);
			}
		}
	}

	this.ParseResponse = function(parentObj,resultText)
	{
		if (!StaticResponse(parentObj.responder.id,resultText))
		{
			resultText = resultText.split(DELIMITER_1);

			var ar = resultText[1].split(DELIMITER_2);

			var contents;
			for (var i=0;i<ar.length;++i)
			{
				var row = ar[i].split(DELIMITER_3);

				if (row[0] == '-')
				{
					contents = row[1];
				}
				else
				{
					contents = '<a href="'+row[0]+'">'+row[1]+'</a>';
				}

				if (row[2] != '-')
				{
					contents += ' <a id="toggle_'+parentObj.div_prefix+parentObj.i+'" href="javascript:'+parentObj.obj_name+'.Open(\''+parentObj.div_prefix+parentObj.i+'\')\">'+parentObj.icon_expand+'</a>';
					parentObj.loadable_lists.push(new Array(parentObj.div_prefix+parentObj.i,row[2]));
				}

				row = CreateNode(parentObj.open_div,'div',contents);
				row.id = parentObj.div_prefix+parentObj.i;
				row.style.paddingLeft = '20px';
				row.style.paddingRight = '20px';

				++parentObj.i;
			}

			document.getElementById('toggle_'+parentObj.open_div.id).innerHTML = parentObj.icon_collapse;

			RemoveNode(parentObj.responder.id);

			for (i=0;i<parentObj.loadable_lists.length;++i)
			{
				if (parentObj.loadable_lists[i][0] == parentObj.open_div_id)
				{
					parentObj.loadable_lists.splice(i,1);
					break;
				}
			}
		}
	}
}

Login = function()
{
	this.UnsetUsername = function(obj)
	{
		if (obj.value == 'Username') obj.value = '';
	}

	this.SetUsername = function(obj)
	{
		if (obj.value == '') obj.value = 'Username';
	}

	this.UnsetPassword = function(obj)
	{
		if (obj.type == 'text')
		{
			obj.type = 'password';
			obj.value = '';
		}
	}

	this.SetPassword = function(obj)
	{
		if (obj.value == '')
		{
			obj.type = 'text';
			obj.value = 'Password';
		}
	}
}