	var TipId="Tooltip";
	var colorpicker=null;
	var months=new Array();

	function passwordretrieval(tf)
	{
		document.getElementById("retrieval").style.display = tf ? "" : "none";
		document.getElementById("loginstuff").style.display = tf ? "none" : "";
	}

	function bbcodeguide()
	{
		window.open("http://www.dkpsystem.com/guide.php?guideid=49","bbcode","width=860,height=700,resizable=yes,scrollbars=yes,status=1,toolbar=1,location=1,menubar=1");
	}

	function repeatstring(str,num)
	{
		var ret = "";
		for(var i=0;i<num;i++)
			ret += str;
		return ret;
	}

	function setforumlayoutid(type,id,scope)
	{
		engine(function(msg){forumlayoutresponse(type,msg)},"setforumlayoutid.php?type=" + type + "&scope=" + scope + "&id=" + id);
	}

	function forumlayoutresponse(type,msg)
	{
		document.location.href = document.location.href;
	}

	function trim(str)
	{
		return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
	}

	function openchat()
	{
		window.open("chat.php","chatwindow","width=600,height=500,scrollbars=yes,resizable=yes");
	}

	function openmusicplayer(key)
	{
		window.open("http://www.dkpsystem.com/mp3player.php?k=" + key,"musicplayer","width=300,height=250,scrollbars=no,resizable=yes,location=no,directories=no,status=no,menubar=no,toolbar=no");
	}
		


	function tippify(s,csswidth)
	{
		if(!csswidth)
			csswidth = "350px";
		var popstart = "<div style='color:white;font-size:8pt;width:" + csswidth + ";padding:5px;'>";
		var popend = "</div>";
		
		return popstart + s + popend;
	}


	function getcalfilter()
	{
		engine("calendar","geteventfilter.php");
	}
	
	function showhiddentag(tag)
	{
		document.getElementById("show" + tag).style.display="none";
		document.getElementById(tag).style.display="";
	}

	function dge(t)
	{
		return document.getElementById(t)
	}

	function createchar_needservers(g)
	{
		engine(createchar_fillservers,"serverinput.php?game=" + g);
	}

	function createchar_fillservers(msg)
	{
		var i;
		var td = getElementsByName_iefix("td","createcharserverdropdown");
		var tr = getElementsByName_iefix("tr","createcharserver");
		for(i=0;i<td.length;i++)
		{
			if(msg=="noservers")
				tr[i].style.display="none";
			else
			{
				td[i].innerHTML = msg;
				tr[i].style.display="";
			}
		}
	}

	function applycalfilter()
	{
		var qs = "";
		var i = 0;
		var f = document.forms['filters'].elements;
		while(f['eventcategoryid[' + i + ']'])
		{
			if(f['eventcategoryid[' + i + ']'].checked)
				qs += "eventcategoryid[]=" + f['eventcategoryid[' + i + ']'].value + '&';
			i++;
		}
		engine(filterapplied,'saveeventfilter.php?' + qs);
	}

	function loadshoutbox()
	{
		engine(shoutcontent,"loadshoutbox.php");
	}

	function shoutcontent(msg)
	{
		/*if(document.getElementById("shoutbox_menu"))
			document.getElementById("shoutbox_menu").innerHTML = msg;*/
		//var cals = document.getElementsByName("calendiv");
		var sb = getElementsByName_iefix("div","shoutbox_menu");
		var i;
		for(i=0;i<sb.length;i++)
			sb[i].innerHTML = msg;
	}

	var shoutprompt = "<table class=shoutbox_popup class=list cellspacing=0 cellpadding=5 style='width:400px;height:150px'><tr class=listlabel align=center><td>Adding a Shout</td></tr><tr class=list1 align=center><td><textarea id=shouttext rows=4 cols=40></textarea></td></tr><tr class=listlabel align=center><td><input type=button class=button value=Cancel onClick='ctt()'><input type=button class=button value='Submit' onClick='saveshout()'></td></tr></table>";
	
	function addshout()
	{
		tt(shoutprompt);
	}

	function dropdown_delete_value(list,value)
	{
		for(i=0;i<list.options.length;i++)
			if(list.options[i].value==value)
				list.remove(i);
	}

	function deleteshout(id)
	{
		redoshout();
		engine(shoutcontent,"loadshoutbox.php?delete=" + id);
	}

	function redoshout()
	{
		msg = document.getElementById("shoutbox_menu").innerHTML;
		shoutcontent("<blink>Reloading Shouts...</blink><hr>" + msg);
	}


	function saveshout()
	{
		var shout = document.getElementById("shouttext").value;
		shout = shout.replace(/&/,"%26").replace(/\+/,"%2B");
		redoshout();
		engine(shoutcontent,"loadshoutbox.php","txt=" + shout);
		ctt();
	}

	function filterapplied(msg)
	{
		loadcal('','',horiz);
	}

	function unixtime()
	{
		var d = new Date();
		return Math.floor(d.getTime()/1000);
	}

	var pageloadtime = unixtime();
	var chatkey=0;
	var chatdb;
	var invitetimer;
	var curinvitetimer = 0;
	var invitewindow = null;

	function startinvites(key,db)
	{
		if(key)
		{
			chatkey = key;
			chatdb=db;
			set_invite_timer(1);
		}
	}

	function set_invite_timer(secs)
	{
		if(curinvitetimer != secs)
		{
			curinvitetimer = secs;
			clearInterval(invitetimer);
			invitetimer = setInterval("checkinvites()",secs*1000);
		}
	}

	function revise_invite_timer()
	{
		var passed = unixtime() - pageloadtime;

		if(passed < 60)	// < 1 min
			set_invite_timer(15);
		else if(passed < 60*5)	// < 5 mins
			set_invite_timer(60);
		else if(passed < 10*60)	// < 20 mins
			set_invite_timer(120);
		else	// > 10 mins
			clearInterval(invitetimer);
	}

	function checkinvites()
	{
		engine(chatinvite,"/settings/" + chatdb + "/invites/" + chatkey + "?" + Math.random());
		revise_invite_timer();
	}

	function clearinvites()
	{
		engine("nothing","chatinvite.php?action=clear");
	}

	function declineinvite()
	{
		engine("nothing","chatinvite.php?action=decline");
		close_movable_window(invitewindow);
	}

	function chatinvite(msg)
	{
		clearinvites();
		var resp = msg.split("\n");
		var invitetime = resp[0];
		var invitename = resp[1];

		if(invitetime > unixtime() - 15*60)	//if invite is at most 15 minutes old
		{
			var invitemsg = "<div style='width:100%;text-align:center'><b>" + invitename + "</b> thinks you're <i>super cool</i> and is inviting you to chat.<br /><br /><b>Join chat?</b><br /><br /><input type='button' class='button' value='Yes, Join Chat' onclick='openchat();close_movable_window(invitewindow)'> &nbsp; <a href=\"javascript:declineinvite()\">No way!</a></div>";
			invitewindow = movable_window("You're Popular!",invitemsg,300,140);
		}

	}

	/* Creates a div that's hidden and movable */
	function init_div(name)
	{
		var newdiv = document.createElement("div");
		newdiv.setAttribute("id",name);
		newdiv.style.position = "absolute";
		newdiv.style.cssText = "position:absolute;z-index:10000;display:none;text-align:left;";
		document.body.appendChild(newdiv);
	}

	// Movable Window
	function movable_window(label,html,w,h)
	{
		var divname = label.replace(/\W/g,"")/* + "_" + Math.floor(Math.random()*10000)*/;
		if(!dge(divname))
			init_div(divname);

		var div = dge(divname);
		div.style.width=w + "px";
		div.style.height=h + "px";
		//div.style.background

		if(document.addEventListener)
		{
			document.addEventListener("mousemove",function(e){move_movable(divname,e)},false);
			document.addEventListener("mouseup",function(e){stop_moving_movable(divname)},false);
		}
		else if(window.attachEvent)
		{
			window.attachEvent("onmousemove",function(e){move_movable(divname,e)});
			window.attachEvent("onmouseup",function(e){stop_moving_movable(divname)});
		}
		else
		{
			window.onmousemove = function(e){move_movable(divname,e)};
			window.onmouseup = function(){stop_moving_movable(divname)};
		}
	
		div.innerHTML = "<table style='border-style:outset;border-width:1px;width:100%;height:100%' class=movablewindow cellspacing=0 cellpadding=4 onMouseUp=\"stop_moving_movable('" + divname + "')\" onMouseMove=\"move_movable('" + divname + "',event);return false\"><tr class=listlabel style='height:20px;cursor:move'><td style='width:" + (w-20) + "px' align=center onMouseDown=\"start_moving_movable('" + divname + "',event);return false;\">" + label + "</td><td align=right style='width:20px;font-weight:bold;font-size:12pt;font-family:sans-serif;text-align:right'><a href=\"javascript:close_movable_window('" + divname + "')\">X</a></td></tr><tr class='list1 list2'><td colspan=2>" + html + "</td></tr></table>";

		var viewports = getviewport();
		var scrolltop = getscrolltop();
		var scrollleft = getscrollleft();

		var newtop = scrolltop + (viewports[1] - h)/2;
		var newleft = scrollleft + (viewports[0] - w)/2;

		div.style.top = newtop + "px";
		div.style.left = newleft + "px";

		div.style.display="";
		return divname;
	}

	function close_movable_window(id)
	{
		var divname = id.replace(/\W/g,"");
		jq("#" + divname).fadeOut(400);
	}

	function nopx(v)
	{
		if(v.match(/px$/))
		{
			return v.substr(0,v.length-2);
		}
		return nopx;
	}
	var movexdiff,moveydiff;
	var move_dragging;
	function move_movable(id,e)
	{
		if(move_dragging)
		{
			var div = dge(id);
			e = e || window.event;
			getMouseXY(e);
			div.style.left = (tt_mousex - movexdiff) + "px";
			div.style.top = (tt_mousey - moveydiff) + "px";
		}
	}

	function start_moving_movable(id,e)
	{
		var div = dge(id);
		getMouseXY(e);
		movexdiff = tt_mousex - nopx(div.style.left);
		moveydiff = tt_mousey - nopx(div.style.top);
		move_dragging = true;
	}


	function stop_moving_movable(id)
	{
		move_dragging = false;
	}

	// Drop Down List
	var dd_close_if_click;
	var dd_timer;
	var dd_hover_closer;
	var dd_onclose;
	function dyn_drop_down(src,html,w,h,rightanchor,hover,onclose)
	{
		dd_set_close(0);
		var xy = findPos(src);
		var ch = src.clientHeight ? src.clientHeight : src.offsetHeight;
		var cw = src.clientWidth ? src.clientWidth : src.offsetWidth;

		var newtop = xy[1] + ch + 5;
		var newleft = xy[0];
		if(!dge("dropdowndiv"))
			init_div("dropdowndiv");
		var d = dge("dropdowndiv");
		
		d.innerHTML = html;
		d.style.top = newtop + "px";
		d.style.zIndex = 10000;	
		d.style.height = "";
		d.style.width = "";

		d.style.display = "";

		if(w)
			d.style.width=w + "px";
		if(h)
		{
			var curh = d.clientHeight ? d.clientHeight : d.offsetHeight;
			//alert(curh);
			if(curh > h)
			{
				d.style.height=h + "px";
				d.style.overflowY = "auto";
			}
		}


		dd_onclose = onclose;
		if(rightanchor)
		{
			thiswidth = d.clientWidth ? d.clientWidth : d.offsetWidth;
			newleft = xy[0] + cw - thiswidth;
		}

		d.style.left = newleft + "px";
		document.onclick = function() {dd_try_close()}
		d.onmouseover = function() {dd_set_close(0)};
		if(hover)

			d.onmouseout = function() {dd_hover_close()};
		else
			d.onmouseout = function() {if(dd_timer) clearTimeout(dd_timer);dd_timer=null;dd_set_close(1)};
		dd_timer = setTimeout("dd_set_close(1)",100);
	}

	function dd_hover_close(time)
	{
		if(!time)
			time = 500;
		if(dd_timer)
			clearTimeout(dd_timer);
		dd_timer=null;
		dd_set_close(1);
		dd_hover_closer = setTimeout("dd_try_close()",time);
	}

	function dd_set_close(v)
	{
		dd_close_if_click = v;
	}

	function dd_close()
	{
		if(dd_onclose)
			dd_onclose();
		dge("dropdowndiv").style.display="none";
	}

	function dd_try_close()
	{
		if(dd_close_if_click)
			dd_close();
	}

	function refreshitem(id)
	{
		engine(donothing,"refreshitem.php?generalitemid=" + id);
	}

	function refreshthottitem(id)
	{
		engine(donothing,"refreshthottitem.php?thottitemid=" + id);
	}

	function refreshaocitem(id)
	{
		engine(donothing,"refreshaocitem.php?aocitemid=" + id);
	}

	function refreshromitem(id)
	{
		engine(donothing,"refreshromitem.php?romitemid=" + id);
	}

	
	function refresheq2item(id)
	{
		engine(donothing,"refresheq2item.php?eq2itemid=" + id);
	}
	
	function refresheqitem(id)
	{
		engine(donothing,"refresheqitem.php?eqitemid=" + id);
	}

	function refreshvanguarditem(id)
	{
		engine(donothing,"refreshvanguarditem.php?vanguarditemid=" + id);
	}
	
	function refreshlotroitem(id)
	{
		engine(donothing,"refreshlotroitem.php?lotroitemid=" + id);
	}

	function refreshffxiitem(id)
	{
		engine(donothing,"refreshffxiitem.php?ffxiitemid=" + id);
	}


	

	function donothing()
	{}

	var engine_cache = Array();
	//expires = number of seconds to expire
	function cengine(type,page,text,expires)
	{
		var d = new Date();
		var time = Math.floor(d.getTime()/1000);
		//alert(time + " = " + (time + expires));
		expiretime = time + expires;

		if(engine_cache[page])
			if(engine_cache[page][text])
			{
				if(engine_cache[page][text].expires > time)
					return cengine_response(type,engine_cache[page][text].html);
			}
		engine(	function(msg)
			{
				if(!engine_cache[page])
					engine_cache[page] = new Array();
				if(!engine_cache[page][text])
					engine_cache[page][text] = new Object();
				engine_cache[page][text].expires = expiretime;
				engine_cache[page][text].html = msg;
				cengine_response(type,msg);
			},page,text);
	}

	function cengine_response(type,msg)
	{
		if(typeof type == 'function')
			type(msg);
		else
			engineresponse(type,msg);
	}

	function engine(type,page,text)
	{
		var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		if(x)
		{
			x.onreadystatechange =
				function() 
				{
					if(x.readyState==4)
					{
						if(x.status==200)
						{
							if(x.responseText.length>0)
							{
								if(typeof type == 'function')
									type(x.responseText);
								else
									engineresponse(type,x.responseText);
							}
						}
					}
				}
		
			x.open(text==null ? "GET" : "POST",page, true);
			if(text!=null)
				x.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			x.send(text);
		}
	}

	function xengine(type,page,text)
	{
		var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		if(x)
		{
			x.onreadystatechange =
				function() 
				{
					if(x.readyState==4)
					{
						if(x.status==200)
						{
							type(x.responseXML);
						}
					}
				}
		
			x.open(text==null ? "GET" : "POST",page, true);
			if(text!=null)
				x.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			x.send(text);
		}
	}

	function xpostform(callback,page,form)
	{
		var i;
		var post = "";
		for(i=0;i<form.elements.length;i++)
		{
			post += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
		}
		engine(callback,page,post);
	}

	// if disp is true, then use "Display:none"
	// otherwise, use "Visibility:hidden"
	function showhtc(showhide,disp)
	{
		show_css_class(".htc",showhide,disp);
	}
	
	function show_css_class(selectorclass,showhide,disp)
	{
		var display;
		
		if(disp)
			display = showhide ? "" : "none";
		else
			display = showhide ? "visible" : "hidden";
			
		var i = document.styleSheets.length-1;
		var ss = document.styleSheets;
	
		for(var i = 0;i<ss.length;i++)
		{
			try{

				var rules = ss[i].rules ? ss[i].rules : ss[i].cssRules;
				for(var r = 0;r<rules.length;r++)
				{
					if(rules[r].selectorText.toLowerCase()==selectorclass)
					{
						if(disp)
							rules[r].style.display = display;
						else
							rules[r].style.visibility=display;
						return;
					}
				}
			}catch(ex){}
		}
		
	}

	function loadcommedit(id)
	{
		engine(commeditgotten,"getcommunityedit.php?communityeditpostid=" + id + "&edit=0");
	}

	function editcommedit(id)
	{
		engine(commeditgotten,"getcommunityedit.php?communityeditpostid=" + id + "&edit=1");
	}

	function savecommedit(id)
	{
		var txt = document.getElementById("commedittext" + id).value;
		txt = txt.replace("/&/","%24");
		engine(loadcommedit,"savecommunityedit.php?communityeditpostid=" + id,"txt=" + txt);
	}

	function commeditgotten(msg)
	{
		var thesplit=msg.split("*:|:*",2);
		var id = thesplit[0];
		document.getElementById("commedit" + id).innerHTML = thesplit[1];
	}

	function enablecreatechar(tf)
	{
		var text = getElementsByName_iefix("a","createchartext");
		var table = getElementsByName_iefix("table","createchartable");
		for(i=0;i<text.length;i++)
		{
			//alert(i);
			text[i].style.display=tf ? "none" : "";
			table[i].style.display=tf ? "" : "none";
		}
	}

	function createchar(f)
	{
		var name=f.elements["member"].value;
		var game=f.elements["game"].value;
		var server="",serverstatusid="";
		if(f.elements["server"])
		{
			server=f.elements["server"].value;
			if(server.length==0)
			{
				alert("Please enter a server");
				return;
			}
			else
				server=f.elements["server"].value;
		}
		else if(f.elements["serverstatusid"])
		{
			serverstatusid=f.elements["serverstatusid"].value;
			if(serverstatusid.length==0)
			{
				alert("Please select a server");
				return;
			}
		}

		if(name.length==0)
			alert("Please enter a character name");
		else if(game.length==0)
			alert("Please choose a game");
		else
			engine(parsenewcharacter,"newcharacter.php?member=" + name + "&game=" + game + "&server=" + server + "&serverstatusid=" + serverstatusid);
	}	

	function editwelcomemessage()
	{
		engine(welcomemessagepopup,"editwelcomemessage.php");	
	}

	var wm_div;
	function welcomemessagepopup(msg)
	{
		wm_div = movable_window("Welcome Message",msg,400,300);
	}

	function savewelcomemessage()
	{
		var title = encodeURIComponent(dge("abouttitle").value);
		var text = encodeURIComponent(dge("abouttext").value);
		var post = "title=" + title + "&text=" + text;
		close_movable_window(wm_div);
		engine(welcomemessagesaved,"editwelcomemessage.php",post);
	}

	function welcomemessagesaved(msg)
	{
		alert(msg);
		document.location.href="news.php";
	}

	function update_old_profiles()
	{
		engine("oldprofiles","oldprofiles.php");
	}

	function getElementsByName_iefix(tag, name)
	{
		var elem = document.getElementsByTagName(tag);
		var arr = new Array();
		for(i = 0,iarr = 0; i < elem.length; i++)
		{
			att = elem[i].getAttribute("name");
			if(att == name)
			{
				arr[iarr] = elem[i];
				iarr++;
			}
		}
		return arr;
	}

	function load_gv(game,prefix)
	{
		if(!prefix)
			prefix="";
		engine(function(msg){fill_gv(msg,prefix)},"preloadgame.php?mine=1&game=" + game);
	}

	function fill_gv(msg,prefix)
	{
		if(!prefix)
			prefix="";
		var lines = msg.split(/\n/);
		var i,fld,val,tags,f;
		for(i=0;i<lines.length;i++)
		{
			if(lines[i]!="")
			{
				var s = lines[i].split(/:=/);
				fld = s[0];
				val = s[1];
				tags = getElementsByName_iefix("span","gv_" + fld + prefix);
				toggles = getElementsByName_iefix("tr","gvt_" + fld + prefix);
				for(f=0;f<tags.length;f++)
					tags[f].innerHTML=val;
				for(f=0;f<toggles.length;f++)
					toggles[f].style.display = parseInt(val)==0 ? "none" : "";
			}
		}
	}

	function engineresponse(type,response)
	{
		switch(type)
		{
			case("password"):
				if(response.substr(0,5)=="A new")
					passwordretrieval(false);
				alert(response);
				break;
			case("calendar"):
				if(document.getElementById("cal"))
					document.getElementById("cal").innerHTML = response;
				//var cals = document.getElementsByName("calendiv");
				var cals = getElementsByName_iefix("div","calendiv");
				var i;
				for(i=0;i<cals.length;i++)
					cals[i].innerHTML = response;
				break;
			case("colorpicker"):
				colorpicker=response;
				break;
			case("thread"):
				updatethread(response);
				break;
			case("avail"):
				availresponse(response);
				break;
			case("savesetting"):
			case("regencss"):
			case("rankchange"):
				alert(response);
				break;
			case("getsetting"):
				enablesetting(response);
				break;
			case("submitvote"):
			case("retractvote"):
				parseresults(response);
				break;
			case("getsnapshot"):
				setsnapshot(response);
				break;
			case("dkpday"):
				showday(response);
				break;
			case("dkpraid"):
				showraid(response);
				break;
		}
	}

	function showproperdate(id,tf)
	{
		dge("formatteddate" + id).style.display=tf ? "none" : "";
		dge("fulldate" + id).style.display= tf ? "" : "none";
	}

	function challengerank()
	{
		var newrank = document.getElementById("newrank").value;
		engine("rankchange","challengerank.php?new=" + newrank);
		ctt();
	}
	
	var rankchallengehtml = null;
	function enablerankchallenge()
	{
		if(rankchallengehtml==null)
			engine(showrankchallenge,"getrankchallengedropdown.php");
		else
			tt(rankchallengehtml);
	}


	function showrankchallenge(msg)
	{
		rankchallengehtml = msg;
		tt(rankchallengehtml);
	}

	function parsenewcharacter(msg)
	{
		if(msg=="exists")
		{
			alert("This character already exists on this website.  A request has been entered to get that character associated with your account and will be reviewed by those in charge.");
			enablecreatechar(false);
		}
		else if(msg=="mine")
			alert("Silly you!  That character is already associated with your account! Get with the program!");
		else if(msg=="invalid server")
			alert("Please choose a valid server");
		else if(msg=="invalid game")
			alert("Please choose a valid game");
		else if(msg=="invalid name")
			alert("Please Enter a character Name");
		else
		{
			var memberid=msg;
			alert("Character Created.  Redirecting you to the 'Edit Character' Screen for this new character");
			document.location.href='memberprofile.php?edit=1&memberid=' + memberid;
		}
	}

	function set_gallery_pic_to(slot,imgi)
	{

		dge("gallerylink" + slot).href = "viewpic.php?id=" + gallerypics[imgi][0];
		dge("galleryimg" + slot).src = gallerypics[imgi][1];
		dge("gallerytitle" + slot).innerHTML = "";//gallerypics[imgi][2];
		dge("gallerydesc" + slot).innerHTML = "";//gallerypics[imgi][3];
	}


	var gallery_updates_left = 20;
	function init_gallery_preview(onepic)
	{
		var num = gallerypics.length;

		var i;

		var numslots = 0;
		for(i=0;dge("gallerylink" + i);i++)
			numslots++;

		if(numslots==0 || gallerypics.length==0)
			return;

		if(onepic)
		{
			i = Math.floor(Math.random()*numslots);
			var imgi = Math.floor(Math.random()*num);
			set_gallery_pic_to(i,imgi);
		}
		else
		{
			for(i=0;dge("gallerylink" + i);i++)
			{
				var imgi = Math.floor(Math.random()*num);
				set_gallery_pic_to(i,imgi);
			}

			for(i=0;dge("gallerypreview" + i);i++)
				dge("gallerypreview" + i).style.display="";
		}
		
		if(gallery_updates_left > 0)
		{
			gallery_updates_left--;
			setTimeout("init_gallery_preview(true)",5000);
		}
	}

	function eventdetails(m,d,y)
	{
		var date = m + '/' + d + '/' + y;
		var filename = "eventdetails.php?date=" + date;
		window.open(filename,"cal"+(m*d+y),"width=900,height=600,scrollbars=yes,resizable=yes");
	}

	function eventdetails_by_id(id)
	{
		var filename = "eventdetails.php?id=" + id
		window.open(filename,"calevent" + id,"width=900,height=600,scrollbars=yes,resizable=yes");
	}

	
	function OpenTicketPostWindow(ThreadID, PostID, ticketid)
	{
		var settings='width=650,height=600,top=50,left=50,scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
		var filename='editpost.php?threadid=' + ThreadID + '&postid=' + PostID + "&ticketid=" + ticketid
		window.open(filename, "editpost"+PostID+"0"+ThreadID+"0"+ticketid, settings);
	}

	function OpenPostWindow(ThreadID, PostID, ttid)
	{
		var settings='width=650,height=600,top=50,left=50,scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
		var filename='editpost.php?threadid=' + ThreadID + '&postid=' + PostID + "&ttid=" + ttid;
		var PostID = "" + PostID;
		var windowname = "editpost"+PostID.replace(/\W/g,"")+"0"+ThreadID;
		window.open(filename,windowname, settings);
	}

	
	function OpenEditPostWindow(ThreadID, PostID)
	{
		var filename='editpost.php?threadid=' + ThreadID + '&srcpostid=' + PostID;
		/*if(dge("editpost" + PostID))
		{
			engine(function(msg){loadeditpost(PostID,msg)},filename);
		}
		else
		{*/
			var settings='width=650,height=600,top=50,left=50,scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
			window.open(filename, "editpost"+PostID+"0"+ThreadID, settings);
		//}
	}

	/*
	function loadeditpost(postid,msg)
	{
		dge("editpost" + postid).innerHTML = msg;
		dge("editpost" + postid).style.display="";
		dge("displaypost" + postid).style.display="none";
	}*/

	function OpenPrivatePost(loginid)
	{
		var settings='width=650,height=600,top=50,left=50,scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
		var filename='editpost.php?threadid=0&postid=0&loginid=' + loginid;
		window.open(filename, "editpost"+loginid, settings);
	}

	function OpenNewsPost(newsid)
	{
		var settings='width=650,height=600,top=50,left=50,scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
		var filename='editpost.php?newsid=' + newsid + '&postid=0';
		window.open(filename, "editnewspost"+newsid, settings);
	}

	function OpenGalleryPost(galleryid)
	{
		var settings='width=650,height=600,top=50,left=50,scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
		var filename='editpost.php?galleryid=' + galleryid + '&postid=0';
		window.open(filename, "editgallerypost"+galleryid, settings);
	}

	/*
	function togglefav(img,threadid)
	{
		var tf = img.src.match(/circleopen.png/) ? 1 : 0;
		engine("favorite","markfavorite.php?threadid=" + threadid + "&tf=" + tf);
		img.src = tf ? img.src.replace(/circleopen\.png/,"circleclosed.png") : img.src.replace(/circleclosed\.png/,"circleopen.png");
	}*/

	function togglefav(div,threadid)
	{
		var setfav = div.className == "forum_fav" ? 0 : 1; // if currently a favorite, then we want to make it non-fav
		div.className = setfav ? "forum_fav" : "forum_nonfav";
		engine("nothing","markfavorite.php?threadid=" + threadid + "&tf=" + setfav);
	}


	function submitpw()
	{
		var email = document.getElementById("email").value;
		var page = "passwordretrieval.php?email=" + email;
		engine("password",page);
	}

	var horiz=0;
	function loadcal(m,y,hor)
	{
		if(hor)
			horiz = hor;
		var page="calendar.php?month=" + m + "&year=" + y + "&horiz=" + horiz;
		var response = engine("calendar",page);
	}


	// Quick Post Stuff
	function quick_post(threadid,quotepostid)
	{
		if(quotepostid)
			engine(function(msg){quick_post_form(threadid,msg)},"loadquickedit.php?quote=1&threadid=" + threadid + "&postid=" + quotepostid);
		else
			quick_post_form(threadid,"");
	}

	var quickreply;
	function quick_post_form(threadid,msg)
	{
		var html = "<div style='text-align:center'><textarea rows=15 cols=30 style='height:300px;width:90%' id=quickposttext" + threadid + ">" + msg + "</textarea><br /><input type=button class=button value=Submit onClick='save_quick_post(" + threadid + ")' /><input type=button class=button value=Cancel onClick='close_movable_window(quickreply)' /></div>";
		quickreply = movable_window("Quick Reply",html,500,400);
	}

	function save_quick_post(threadid)
	{
		var post = dge("quickposttext" + threadid).value;
		var qs;
		if(trim(post).length>0)
		{
			qs = "threadid=" + threadid + "&post=" + encodeURIComponent(trim(post));
			engine(quick_post_saved,"savequickpost.php",qs);

			close_movable_window(quickreply);
		}
		else
			alert("Please enter some text");
	}

	function quick_post_saved(msg)
	{
		var splits = msg.split(/\n/);
		if(splits[0]=="qpsuccess")
		{
			var postid = splits[1];
			viewpost(postid);
		}
		else
			alert(splits[1]);
	}


	function close_quick_post()
	{
		close_movable_window(quickreply);
	}


	// BBCode
	function togglebbcodecollapse(rnd)
	{
		var tf = dge("collapse" + rnd).style.display=="none";
		var display = tf ? "" : "none";
		dge("collapse" + rnd).style.display = display;
		dge("collapseimg" + rnd).src="http://dkpfiles.com/dkp-extras/img/sq" + (tf ? "up" : "down") + ".gif";
	}

	function gotoguidetitle(rnd,type)
	{
		if(dge("guide" + type + rnd) && dge("guide" + type + rnd).scrollIntoView)
			dge("guide" + type + rnd).scrollIntoView();
	}

	// thanks to
	// http://www.quirksmode.org/js/findpos.html
	// for the findPos function
	function findPos(obj)
	{
		var curleft = curtop = 0;
		if (obj.offsetParent)
		{
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent)
			{
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
	}

	function parseaccal(datestr,notime)
	{
		var curd = new Date();
		var curyear = curd.getFullYear();
		var y,mo,d,h,mi,ampm;
		var m;
		var re;
		//re=/(\d{4})-(\d+)-(\d+)\s+(\d+)


		re=/(\d{4})-(\d{2})-(\d{2})(?:\s+(\d{2})(?::(\d{2})(?::\d{2})?)?\s*(am|pm)?)?/i;
		if(m=re.exec(datestr))
		{
			y = m[1];
			mo = m[2];
			d = m[3];
			h = m[4];
			mi = m[5];
			h = h % 12;
			if(h==0)
				h = 12;

			if(m[6] && m[6].toLowerCase()=="pm")
				ampm="pm";
			else
				ampm="am";
			
			return loadaccal(y,mo,y,mo,d,h,mi,ampm,notime);
		}
		re=/(\d+)[\/-](\d+)[\/-](\d{2,4})(?:\s+(\d+)(?::(\d+)(?::\d+)?)?\s*(am|pm)?)?/i;
		if(m=re.exec(datestr))
		{
			mo = m[1];
			d = m[2];
			y = m[3];
			h = m[4] ? m[4] : 0;
			if(h > 12)
				m[6] = "pm";
			h = h % 12;
			if(h==0)
				h = 12;
			mi = m[5] ? m[5] : 0;
			if(m[6] && m[6].toLowerCase()=="pm")
				ampm="pm";
			else
				ampm="am";
			return loadaccal(y,mo,y,mo,d,h,mi,ampm,notime);
		}

		return loadaccal(curd.getFullYear(),curd.getMonth()+1,curd.getFullYear(),curd.getMonth()+1,curd.getDate(),curd.getHours(),curd.getMinutes(),(curd.getHours()>=12 ? "pm" : "am"),notime);
	}

	function displayaccal(newy,newmo,y,mo,da,h,mi,ampm,notime)
	{
		document.getElementById("acdiv").innerHTML = loadaccal(newy,newmo,y,mo,da,h,mi,ampm,notime);
	}

	function loadaccal(newy,newmo,y,mo,da,h,mi,ampm,notime)
	{
		var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
		var d = new Date();
		if(!notime)
			notime=0;
		d.setYear(y);
		d.setMonth(mo);
		d.setDate(da);
		d.setHours(h);
		d.setMinutes(mi);

		var fd = new Date();
		fd.setFullYear(newy,newmo-1,1);

		var fdow = fd.getDay()+1;
		var dim = days_in_month(newmo,newy);

		var prevmonth = parseInt(newmo)-1;
		var prevyear = parseInt(newy);
		if(prevmonth <= 0)
		{
			prevmonth = 12;
			prevyear--;
		}

		var nextmonth = 1+parseInt(newmo);
		var nextyear = newy;
		if(nextmonth > 12)
		{
			nextmonth = 1;
			nextyear++;
		}
		var monthtext = months[newmo-1];


		var str = "<table border=0 align=center onMouseOver='accal_set_close(0)' onMouseOut='accal_set_close(1)' class=popupcal cellpadding=1 cellspacing=0><tr class=popupcalheader><td style='width:20px'><a href='javascript:void(0)' onClick='displayaccal(" + prevyear + "," + prevmonth + "," + y + "," + mo + "," + da + "," + h + "," + mi + ",\"" + ampm + "\"," + notime + ")'>&lt;&lt;</a></td><td colspan=5 align=center>" + monthtext + " " + newy + "</td><td align=right><a href='javascript:void(0)' onClick='displayaccal(" + nextyear + "," + nextmonth + "," + y + "," + mo + "," + da + "," + h + "," + mi + ",\"" + ampm + "\"," + notime + ")'>&gt;&gt;</a></td></tr>";
		str+="<tr class=popupcalheader align=center><td>S</td><td>M</td><td>T</td><td>W</td><td>R</td><td>F</td><td>S</td></tr>";
		curday =0;
		while(curday<dim)
		{
			str+="<tr align=center class=popupcalrow>";
			for(i=1;i<=7;i++)
			{
				if((curday>0 || i>=fdow) && curday<dim)
				{
					curday++;
					if(newmo==mo && newy==y && da==curday)
						thisclass = "popupcaldayselected";
					else
						thisclass = "popupcalday";
					str+="<td class=" + thisclass + " align=center id='" + newy + "_" + newmo + "_" + curday + "' onMouseOver='this.className=\"popupcalday_hover\"' onMouseOut='this.className=\"" + thisclass + "\"' onClick='acselectday(" + newy + "," + newmo + "," + curday + "," + notime + ")'>" + curday + "</td>";
				}
				else
					str+="<td>&nbsp;</td>";
			}
			str+="</tr>";
		}
		if(!notime)
		{
			var onChangeStr = "onClick='accal_set_close(0);accal_set_date(" + y + "," + mo + "," + da + ")' onMouseOver='accal_set_close(0)' onMouseOut='accal_set_close(1)'";
			str+="<tr class=popupcalrow><td colspan=7 align=center>&nbsp;</td></tr>";
			str+="<tr class=popupcalrow><td colspan=7 align=center>";
			str+="<select id=popupcalhour " + onChangeStr + ">";
			for(i=0;i<12;i++)
				str+="<option value=" + (i==0 ? 12 : i) + " " + (i==h || i+12==h ? "selected" : "") + ">" + (i==0 ? 12 : i) + "</option>";
			str+="</select> : <select id=popupcalminute " + onChangeStr + ">";
			for(i=0;i<60;i++)
				str+="<option value=" + lz(i) + " " + (i==mi ? "selected" : "") + ">" + lz(i) + "</option>";
			str+="</select> <select id=popupcalampm " + onChangeStr + ">";
			str+="<option value=am " + (ampm=='am' ? "selected" : "") + ">AM</option>";
			str+="<option value=pm " + (ampm=='pm' || h > 12 ? "selected" : "") + ">PM</option>";
			str+="</select></td></tr>";
		}

		str+="</table>";
		return str;
	}

	function days_in_month(month,year)
	{
		var m = [31,28,31,30,31,30,31,31,30,31,30,31];
		if(month != 2)
			return m[month - 1];
		if(year%4 != 0)
			return m[1];
		if(year%100 == 0 && year%400 != 0)
			return m[1];
		return m[1] + 1;
	}
	
	var rfiform = "<form method=post action='rfi.php'><table cellspacing=0 cellpadding=4 class=list><tr class=listlabel><td colspan=2 align=center>Requesting an Item</td></tr><tr class=list1><td>Item Requested:</td><td><input type=text name=item value=''></td></tr><tr class=list2><td>Quantity Desired:</td><td><input type=text name=qty value=1></td></tr><tr class=list2><td colspan=2>Why you want it (please be brief)<br><textarea name=usernotes cols=35></textarea></td></tr><tr class=listlabel><td colspan=2 align=center><input type=button value=Cancel class=button onClick=\"ctt('rfi')\"><input type=submit class=button name=newrfi value=Submit></td></tr></table></form>";
	function newrfi(itemname)
	{
		if(!itemname)
			tt(rfiform,10,10,'rfi');
		else
		{
			var tempform = rfiform.replace(/''/,"\"" + itemname.replace(/\"/,"&quot;") + "\"");
			tt(tempform);
		}
	}	


/**
*
* Javascript sprintf
* http://www.webtoolkit.info/
*
*
**/

sprintfWrapper = {

    init : function () {

        if (typeof arguments == "undefined") { return null; }
        if (arguments.length < 1) { return null; }
        if (typeof arguments[0] != "string") { return null; }
        if (typeof RegExp == "undefined") { return null; }

        var string = arguments[0];
        var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
        var matches = new Array();
        var strings = new Array();
        var convCount = 0;
        var stringPosStart = 0;
        var stringPosEnd = 0;
        var matchPosEnd = 0;
        var newString = '';
        var match = null;

        while (match = exp.exec(string)) {
            if (match[9]) { convCount += 1; }

            stringPosStart = matchPosEnd;
            stringPosEnd = exp.lastIndex - match[0].length;
            strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

            matchPosEnd = exp.lastIndex;
            matches[matches.length] = {
                match: match[0],
                left: match[3] ? true : false,
                sign: match[4] || '',
                pad: match[5] || ' ',
                min: match[6] || 0,
                precision: match[8],
                code: match[9] || '%',
                negative: parseInt(arguments[convCount]) < 0 ? true : false,
                argument: String(arguments[convCount])
            };
        }
        strings[strings.length] = string.substring(matchPosEnd);

        if (matches.length == 0) { return string; }
        if ((arguments.length - 1) < convCount) { return null; }

        var code = null;
        var match = null;
        var i = null;

        for (i=0; i<matches.length; i++) {

            if (matches[i].code == '%') { substitution = '%' }
            else if (matches[i].code == 'b') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'c') {
                matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'd') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'f') {
                matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'o') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 's') {
                matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'x') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'X') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
            }
            else {
                substitution = matches[i].match;
            }

            newString += strings[i];
            newString += substitution;

        }
        newString += strings[i];

        return newString;

    },

    convert : function(match, nosign){
        if (nosign) {
            match.sign = '';
        } else {
            match.sign = match.negative ? '-' : match.sign;
        }
        var l = match.min - match.argument.length + 1 - match.sign.length;
        var pad = new Array(l < 0 ? 0 : l).join(match.pad);
        if (!match.left) {
            if (match.pad == "0" || nosign) {
                return match.sign + pad + match.argument;
            } else {
                return pad + match.sign + match.argument;
            }
        } else {
            if (match.pad == "0" || nosign) {
                return match.sign + match.argument + pad.replace(/0/g, ' ');
            } else {
                return match.sign + match.argument + pad;
            }
        }
    }
}

sprintf = sprintfWrapper.init;
var tt_div;
var arr_tt_div = Array();

var is_dev = false;

//engine(dev_result,"isdev.php");

var ajaxtooltiptimer;
var ajaxtooltipshown = false;
var ajaxsummary = Array();
function ajaxtooltip(t,url)
{
	if(!page_fully_loaded)
		return;
	transtooltip(t,"Loading...");
	if(ajaxsummary[url])
		transtooltip(t,ajaxsummary[url]);
	else
		ajaxtooltiptimer = setTimeout(
					function(){
						engine(
							function(msg){
								ajaxsummary[url]=msg;
								transtooltip(t,msg)
							},url)
					},500);
}

function transtooltip(t,html,width)
{
	if(!page_fully_loaded)
		return;
	if(!width)
		width = 300;
	if(!isNaN(width))
		csswidth = width + "px";

	ajaxtooltipshown = true;
	var ie6 = !t.addEventListener;
	var img = "http://dkpfiles.com/dkp-extras/img/tooltip." + (ie6 ? "gif" : "png");

	var h = "<table class=transtooltip style='background-color:#000000;border-style:solid;width:" + csswidth + ";border-width:1px;color:white;border-width:1px;font-size:9pt' cellspacing=0 cellpadding=5><tr><td style='color:white'>" + tippify(html,csswidth) + "</td></tr></table>";

	if(ajaxtooltipshown)
	{
		tt(h,0,0,"transtooltip");
		if(t.addEventListener)
		{
			t.addEventListener("mousemove",movetranstooltip,false);
			t.addEventListener("mouseout",closetranstooltip,false);
		}
		else
		{
			t.attachEvent("onmousemove",movetranstooltip);
			t.attachEvent("onmouseout",closetranstooltip);
		}
	}
}

function closetranstooltip()
{
	if(ajaxtooltiptimer)
	{
		clearTimeout(ajaxtooltiptimer);
		ajaxtooltiptimer = 0;
		ajaxtooltipshown = false;
	}
	ctt("transtooltip");
}

function movetranstooltip()
{
	tt(0,0,0,"transtooltip");
}

function dev_result(msg)
{
	is_dev = (msg=="dev");
}

var _dev_log = "";
function devlog(msg)
{
	_dev_log += msg + "<br>";
	printdebug(_dev_log);
}
function printdebug(m)
{
	if(is_dev)
	{
		if(!document.getElementById("pdbg"))
			init_div("pdbg");
		
		document.getElementById("pdbg").style.color = "#000000";
		document.getElementById("pdbg").style.background = "#ffffff";

		document.getElementById("pdbg").style.left = "0px";
		document.getElementById("pdbg").style.top = getscrolltop() + "px";
		document.getElementById("pdbg").style.display="";
		document.getElementById("pdbg").innerHTML = m;
	}
}


// Call stack code
function showCallStack(){
	var f=showCallStack,result="Call stack:\n\n";

	while((f=f.caller)!==null){
		result += "F:" + f.toString().match(/^function (\w+)\(/)[1] + "\n";
		result += "A:" + parseArguments(f.arguments) + "\n";
		result += "\n";
	}
	alert(result);
}

function parseArguments(a){
	var result=[];

	for(var i=0; i<a.length; i++){
		if ('string' == typeof a[i])
			result.push("\"" + a[i] + "\"");
		else
			result.push(a[i]);
	}
	return "(" + result.join(", ") + ")";
}


function is_ie()
{
	return navigator.userAgent.match(/MSIE/i);
}


var page_fully_loaded = false;
var do_hw_checks = true;
var hw_check_done = false;
// h and w must be provided with units (ie 350px or 25em)
function tt(t,xoffset,yoffset,ttindex,w,h)
{
	if(!page_fully_loaded)
		return;

	if(!xoffset)
		xoffset = 50;
	if(!yoffset)
		yoffset = -30;
	var _tt;
	if(!ttindex)
		ttindex = "NewTooltip";		//tt = tt_div;
	if(!arr_tt_div[ttindex])
	{
		var newdiv = document.createElement("div");
		newdiv.setAttribute("id","autotooltip" + ttindex);
		//newdiv.style.position = "absolute";
		newdiv.style.cssText = "position:absolute;visibility:hidden;";
		if(w)
			newdiv.style.width = w;
		if(h)
			newdiv.style.height = h;
		document.body.appendChild(newdiv);
		arr_tt_div[ttindex] = document.getElementById("autotooltip" + ttindex);
	}
	_tt = arr_tt_div[ttindex];
	
	var maxh = document.body.clientHeight;
	var maxw = document.body.clientWidth;

	if(!hw_check_done)
	{
		if(!(navigator.userAgent.match(/MSIE/i) && dge("glowtopleft") && dge("fireleft") && dge("rune")))
			do_hw_checks = 1;
		hw_check_done = true;
	}


	if(_tt.innerHTML!=t && t!=0)
		_tt.innerHTML=t;

	_tt.style.visibility="visible";
	_tt.style.zIndex = 10000;

	var ch = 0;
	var cw = 0;

	if(do_hw_checks)
	{
		ch = _tt.clientHeight;
		cw = _tt.clientWidth;
	}

	var scrolltop = getscrolltop();

	if(tt_mousey + yoffset + ch > maxh)
	{
		var newtop = tt_mousey-Math.abs(yoffset)-ch;

		if(newtop < 0)
			newtop = 0;
	}
	else
		newtop=tt_mousey+yoffset;

	if(newtop < scrolltop + 10)
		newtop = scrolltop + 10;


	_tt.style.top = newtop + "px";

	if(tt_mousex + xoffset + cw > maxw)
		_tt.style.left=(tt_mousex-Math.abs(xoffset)-cw) + "px";
	else
		_tt.style.left=(tt_mousex+xoffset)+"px";

	if(_tt.innerHTML!=t && t!=0)
		_tt.innerHTML=t;
}

function test_ce()
{
	document.createElement("div");
}

/*function movett(t)
{
	
}*/



var tt_mousex,tt_mousey;
var tt_IE = document.all?true:false

if(document.addEventListener)
	document.addEventListener("mousemove",getMouseXY,false);
else if(document.attachEvent)
	document.attachEvent('onmousemove',getMouseXY);
else
	document.onmousemove = getMouseXY;

function getscrolltop()
{
	if (document.documentElement.scrollTop)
		return document.documentElement.scrollTop;
	if (document.body.scrollTop)
		return document.body.scrollTop;
	if (window.pageYOffset)
		return window.pageYOffset;
	return 0;
}

function getscrollleft()
{
	if (document.documentElement.scrollLeft)
		return document.documentElement.scrollLeft;
	if (document.body.scrollLeft)
	{
		return document.body.scrollLeft;
	}
	if (window.pageXOffset)
		return window.pageXOffset;
	return 0;

}

function getviewport()
{
	var viewportwidth;
	var viewportheight;

	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight

	if (typeof window.innerWidth != 'undefined')
	{
		viewportwidth = window.innerWidth,
		viewportheight = window.innerHeight
	}

	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)

	else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0)
	{
		viewportwidth = document.documentElement.clientWidth,
		viewportheight = document.documentElement.clientHeight
	}

	// older versions of IE

	else
	{
		viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
		viewportheight = document.getElementsByTagName('body')[0].clientHeight
	}
	var ret = new Array(viewportwidth,viewportheight);
	return ret;
}

function getMouseXY(e)
{

	//alert("move");
	var tempX = 0
	var tempY = 0

	if (tt_IE) { // grab the x-y pos.s if browser is tt_IE
		tempX = event.clientX + getscrollleft(); //document.body.scrollLeft
		tempY = event.clientY + getscrolltop(); //document.body.scrollTop
	}else{  // grab the x-y pos.s if browser is NS
		tempX = e.pageX
		tempY = e.pageY
	}  
	// catch possible negative values in NS4
	if (tempX < 0){tempX = 0}
	if (tempY < 0){tempY = 0}  
	// show the position values in the form named Show
	// in the text fields named MouseX and MouseY
	/* Follow Code	
	tt_div.style.left=tempX + "px";
	tt_div.style.top=tempY + "px";
	//*/
	
	tt_mousex = tempX
	tt_mousey = tempY
}

function ctt(ttindex) {
	if(!page_fully_loaded)
		return;
	if(!ttindex)
		ttindex="NewTooltip";
	
	if(arr_tt_div[ttindex])
	{
		arr_tt_div[ttindex].innerHTML="";
		//printdebug(arr_tt_div[ttindex].clientWidth);
		arr_tt_div[ttindex].style.visibility="hidden";
	}
}

var _ddl = Array();
function dhtml_ddl_init(name,onchange)
{
	_ddl[name] = new Object();
	_ddl[name].arr = new Array();
	_ddl[name].onchange = onchange;
}

function dhtml_ddl_item(name,id,val)
{
	if(!_ddl[name])
	{
		alert("Trying to add items to a nonexistent DHTML Drop Down List named " + name);
		return;
	}
	var newval = new Object();
	newval.id = id;
	newval.val = val;
	_ddl[name].arr.push(newval);
}
function dhtml_ddl_show(name)
{
	var src = dge("dhtml_ddl_div_" + name);
	src.style.borderStyle = "inset";
	var cw = src.clientWidth ? src.clientWidth : src.offsetWidth;

	var html = "<div class='dhtml_ddl_list list1' style='cursor:pointer;border: 1px solid #777777;'>";
	if(_ddl[name] && _ddl[name].arr)
	{
		for(var i in _ddl[name].arr)
		{
			var v = _ddl[name].arr[i];
			html += "<div id='dhtml_ddl_item_'" + v.id + "' class='dhtml_ddl_listitem' style='cursor:pointer;width:100%;' onclick=\"dhtml_ddl_select('" + name + "','" + v.id + "');" + _ddl[name].onchange + ";\" onmouseover=\"dhtml_ddl_highlight(this)\">";
			html += "<span style='margin-left:5px'>" + v.val + "</span>";
			html += "</div>";
		}
	}
	html += "</div>";

	// for some reason, the images on the toolbars are z-indexing over the drop down, but only on click.  No idea why. This is a temporary fix to at least make it work until then.
	var listheight = is_ie() ? 140 : 350;
	dyn_drop_down(src,html,cw,listheight,0,0,function(){src.style.borderStyle = "outset";});
}

function dhtml_ddl_get_value(name,id)
{
	var arr = _ddl[name].arr;
	for(var i in arr)
		if(arr[i].id==id)
			return arr[i].val;
}

function dhtml_ddl_select(name,id)
{
	dge("ddl_field_" + name).value = id;
	dge("dhtml_ddl_div_" + name).innerHTML = dhtml_ddl_get_value(name,id);
	dd_close();
}

function dhtml_ddl_highlight(t)
{
	var origclass = t.className;
	t.className="dhtml_ddl_listitem_highlight newlist1";
	attachevent(t,"mouseout",function(){t.className=origclass;});
}


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

function attachevent(t,e,fn)
{
	if(t.addEventListener)
	{
		t.addEventListener(e,function(){fn()},false);
	}
	else if(t.attachEvent)
	{
		t.attachEvent("on" + e,function(){fn()});
	}
}

function attach_summary(t,id,p,fn)
{
	attachevent(t,"mouseover",function(){fn(t,id,p)});
}


json = Array();
//tableid is the id of the container div, and is also the index of the json array
function build_json_table(tableid)
{

}

function fix_bbcode_emails()
{
	jq("span.bbcemail span.bbcat").text("@");
	jq("span.bbcemail span.bbchidden").text("");
	jq("span.bbcemail").each(function(){
		var email = jq(this).text();
		jq(this).html("<a href=\"mailto:" + email + "\">" + email + "</a>");
	});
}

function apply_thread_summaries(acceptablehosts)
{
	var links = document.getElementsByTagName("a");
	for(var i=0;i<links.length;i++)
	{
		var href = links[i].href;
		var matches = href.match(/http:\/\/([^\/]+)\/(oldviewthread|viewthread|forum)\.php\?.*(threadid|postid)=(\d+)/);

		if(matches)
		{
			var pmatch = href.match(/[&\?]p=(\d+)/);
			var p = "";
			if(pmatch)
				p = pmatch[1];
			var host = matches[1].toLowerCase();
			var type = matches[3];
			var id = matches[4];
			var fn = type=="threadid" ? thread_summary : post_summary;

			if(inarray(acceptablehosts,host))
				attach_summary(links[i],id,p,fn);
		}

	}
}

function target_blank(acceptablehosts)
{
	var links = document.getElementsByTagName("a");
	for(var i=0;i<links.length;i++)
	{
		var href = links[i].href;
		var matches = href.match(/^https?:\/\/([^\/]+)/);
		if(matches)
		{
			var host = matches[1].toLowerCase();
			if(!inarray(acceptablehosts,host))
				links[i].target="_blank";
		}
	}
}


function thread_summary(t,threadid,p)
{
	ajaxtooltip(t,"threadsummary.php?threadid=" + threadid + "&p=" + p);
}

// p is unused for now.
function post_summary(t,postid,p)
{
	ajaxtooltip(t,"threadsummary.php?postid=" + postid);
}


function close_summary()
{
	closetranstooltip();
}

function load_private(t)
{

}

function open_private_threads()
{
	engine(show_private_threads,"privatethreads.php");
}

function show_private_threads(msg)
{

	movable_window("Private Threads",msg,700,500);
}


if(window.addEventListener)
	window.addEventListener("load",function(event){page_fully_loaded=true},false);
else if(window.attachEvent)
	window.attachEvent("onload",function(event){page_fully_loaded=true});
else
{
	var oldonload = window.onload;
	if(typeof(oldonload)=='function')
		window.onload=function(){oldonload();page_fully_loaded=true;};
	else
		window.onload=function(){page_fully_loaded=true;};
}
