// Coded by hand by Pipian (pipian@pipian.com)
// Though some code glanced from http://www.brainjar.com/dhtml/windows/demo.html
// To speed up the window resizing and so forth.  It didn't really help, but
// I dropped from toString() functions as a result.

textArray = new Array("C", "O", "N", "N", "E", "C", "T", "I", "N", "G", " ", "T" , "O", " ", "A", "L", "T", "I", "M", "I", "T", "-", "O", "S", ".", "N", "E", "T", "<BR>", "I", "P", " ", "R", "E", "S", "O", "L", "V", "E", "D", "<BR>", "B", "O", "O", "T", "I", "N", "G", " ", "P", "R", "O", "J", "E", "C", "T", ":", " ", "A", "L", "T", "I", "M", "I", "T");
gaprow = document.getElementById("gap");
hr1 = document.getElementById("rh1");
hr2 = document.getElementById("rh2");
load = document.getElementById("loading");
logoimg = document.getElementById("logo");
gaptbl = document.getElementById("gaptable");
logotbl = document.getElementById("logotable");
skippydiv = document.getElementById("skipdiv");
// This timeout should help us avoid most of that annoying clipping while loading images...
initTimer = setTimeout("text(0);", 3000);

agent = navigator.userAgent.toLowerCase();
mozilla = (navigator.product == 'Gecko');
msie = ((agent.indexOf("msie") != -1) && !mozilla);
var xterm = document.getElementById("xterminal");
xterm.titlerow = document.getElementById("xterm-title");
xterm.menu = document.getElementById("xterm-menu");
xterm.min = document.getElementById("xterm-min");
xterm.max = document.getElementById("xterm-max");
xterm.close = document.getElementById("xterm-close");
xterm.rest = document.getElementById("xterm-rest");
xterm.hr1 = document.getElementById("xterm-hr1");
xterm.hr2 = document.getElementById("xterm-hr2");
xterm.cont = document.getElementById("xterm-contents");
xterm.table = xterm.parentNode.parentNode.parentNode;
if(xterm.table.nodeName == "TBODY") xterm.table = xterm.table.parentNode;
xterm.style.width = "0px";
xterm.style.height = "0px";
xterm.opened = 0;
xterm.windowshade = 0;
xterm.titlerowtext = "xterm";
xterm.varname = "xterm";
xterm.closed = 0;
var dragwindow = 0;
start = document.getElementById("startbutton");
taskbarinuse = new Array(0, 0, 0, 0, 0, 0);
taskbarspots = new Array(document.getElementById("task1"), document.getElementById("task2"), document.getElementById("task3"), document.getElementById("task4"), document.getElementById("task5"), document.getElementById("task6"));
startdiv = document.getElementById("starttbl");
startentry = new Array(document.getElementById("startentry1"), document.getElementById("startentry2"), document.getElementById("startentry3"), document.getElementById("startentry4"), document.getElementById("startentry5"), document.getElementById("startentry6"));
var stopboot = 0;
if(mozilla) xterm.style.display = "table";
else
{
	// IE doesn't like making SPAN tags with paddibuttonng if nothing's in them...
	for(i=0;i<6;i++) taskbarspots[i].innerHTML = "&nbsp;";
	xterm.style.display = "block";
}
document.onmousemove = dragging;

// This first part handles the initial boot process (the part that can be skipped)

// Handles the text additions.
function text(start)
{
	if(initTimer)
	{
		clearTimeout("initTimer");
		initTimer = 0;
	}
	i = start;
	if(i < textArray.length)
	{
		hr1.innerHTML += textArray[i];
		i++;
		textTimer = setTimeout("text(i);",20);
	}
	else wide();
}

// Starts the timer for widening the gap
function wide()
{
	gapTimer = setTimeout("gap(0);",100);
}

// The actual gap widening (buggy in IE, as it works from top down.)
function gap(start)
{
	i = start;
	if(i < 100)
	{
		i += 10;
		hr1.style.height = "0%";
		if(mozilla)
		{
			gaprow.parentNode.style.display = "table-row";
		}
		else
		{
			gaprow.parentNode.style.display = "block";
		}
		gaprow.style.height = i + "%";
		gapTimer = setTimeout("gap(i);",100);
	}
	else
	{
		// And at the end of course, you queue the logo.
		clearTimeout("gapTimer");
		gaptbl.style.display = "none";
		loadtop = logoimg.offsetTop + 28;
		loadleft = logoimg.offsetLeft + 164;
		load.style.top = loadtop + "px";
		load.style.left = loadleft + "px";
		load.src = "images/loading.gif";
		load.style.display = "inline";
		if(!stopboot) bootTimer = setTimeout("openwindow(xterm);",9000);
	}
}

// Let's the skip button work.
function skip()
{
	clearTimeout("textTimer");
	clearTimeout("gapTimer");
	clearTimeout("bootTimer");
	gaptbl.style.display = "none";
	stopboot = 1;
	openwindow(xterm);
}

// This next part works the actual xterm window.  Probably have to recode it some to work with the right window.

// The initial opening height part.
function height(windowname, start)
{
	i = start;
	if(i < 400)
	{
		i += 50;
		windowname.style.height = i + "px";
		widthTimer = setTimeout("height(" + windowname.varname + ",i);",10);
	}
	else
	{
		clearTimeout(heightTimer);
		widthTimer = setTimeout("width(" + windowname.varname + ",0);",10);
	}
}

// And then the width part.
function width(windowname, start)
{
	i = start;
	if(i < 600)
	{
		i += 50;
		windowname.style.width = i + "px";
		widthTimer = setTimeout("width(" + windowname.varname + ",i);",10);
		if(i == 100)
		{
			windowname.titlerow.innerHTML = windowname.titlerowtext;
		}
		if(i == 200)
		{
			windowname.menu.style.display = "inline";
			windowname.min.style.display = "inline";
			windowname.max.style.display = "inline";
			windowname.close.style.display = "inline";
		}
	}
	else
	{
		windowname.titlerow.style.width = "528px";
		windowname.cont.style.display = "block";
		clearTimeout(widthTimer);
	}
}

// The initial open function.  This will need to be edited for sure.  I kludge the skipping part by setting the opened variable.
function openwindow(windowname)
{
	if(windowname.opened != 1)
	{
		if(windowname.table.style.display = "none")
		{
			if(mozilla) windowname.table.style.display = "table";
			else windowname.table.style.display = "block";
		}
		skippydiv.style.display = "none";
		logotbl.style.display = "none";
		heightTimer = setTimeout("height(" + windowname.varname + ", 0);",10);
		windowname.opened = 1;
	}
}

// This just closes the window.
function close(windowname)
{
	windowname.opened = 0;
	windowname.titlerow.innerHTML = "";
	windowname.menu.style.display = "none";
	windowname.min.style.display = "none";
	windowname.max.style.display = "none";
	windowname.close.style.display = "none";
	windowname.style.top = "";
	windowname.style.left = "";
	windowname.style.height = "0px";
	windowname.style.width = "0px";
	windowname.table.style.display = "none";
	windowname.cont.style.display = "none";
	windowname.style.position = "relative";
	windowname.parentNode.setAttribute("valign", "center");
	windowname.parentNode.setAttribute("align", "center");
	windowname.closed = 1;
}

// Resizing (the initial setup)button
function resizeon(windowname, dir)
{
	dragwindow = windowname;
	if(dir == "n")
	{
		windowname.resize = "n";
		windowname.xdiff = windowname.offsetLeft;
		windowname.ydiff = locY - windowname.offsetTop;
		windowname.heightdiff = parseInt(windowname.style.height) + windowname.offsetTop;
	}
	else if(dir == "s")
	{
		windowname.resize = "s";
		windowname.xdiff = windowname.offsetLeft;
		windowname.ydiff = parseInt(windowname.style.height) - locY;
		windowname.heightdiff = windowname.offsetTop;
	}
	else if(dir == "e")
	{
		windowname.resize = "e";
		windowname.xdiff = parseInt(windowname.style.width) - locX;
		windowname.ydiff = windowname.offsetTop;
		windowname.widthdiff = windowname.offsetLeft;
	}
	else if(dir == "w")
	{
		windowname.resize = "w";
		windowname.xdiff = locX - windowname.offsetLeft;
		windowname.ydiff = windowname.offsetTop;
		windowname.widthdiff = parseInt(windowname.style.width) + windowname.offsetLeft;
	}
	else if(dir == "ne")
	{
		windowname.resize = "ne";
		windowname.xdiff = parseInt(windowname.style.width) - locX;
		windowname.ydiff = locY - windowname.offsetTop;
		windowname.widthdiff = windowname.offsetLeft;
		windowname.heightdiff = parseInt(windowname.style.height) + windowname.offsetTop;
	}
	else if(dir == "nw")
	{
		windowname.resize = "nw";
		windowname.xdiff = locX - windowname.offsetLeft;
		windowname.ydiff = locY - windowname.offsetTop;
		windowname.widthdiff = parseInt(windowname.style.width) + windowname.offsetLeft;
		windowname.heightdiff = parseInt(windowname.style.height) + windowname.offsetTop;
	}
	else if(dir == "se")
	{
		windowname.resize = "se";
		windowname.xdiff = parseInt(windowname.style.width) - locX;
		windowname.ydiff = parseInt(windowname.style.height) - locY;
		windowname.widthdiff = windowname.offsetLeft;
		windowname.heightdiff = windowname.offsetTop;
	}
	else if(dir == "sw")
	{
		windowname.resize = "sw";
		windowname.xdiff = locX - windowname.offsetLeft;
		windowname.ydiff = parseInt(windowname.style.height) - locY;
		windowname.widthdiff = parseInt(windowname.style.width) + windowname.offsetLeft;
		windowname.heightdiff = windowname.offsetTop;
	}
}

// On mouse out
function resizeoff(windowname)
{
	windowname.resize = 0;
	dragwindow = 0;
}

// The maximize button
function maximize(windowname)
{
	if(windowname.windowshade) menudown(windowname);
	windowname.oldwidth = windowname.style.width;
	windowname.oldheight = windowname.style.height;
	windowname.oldx = windowname.offsetLeft;
	windowname.oldy = windowname.offsetTop;
	windowname.titlerow.oldwidth = windowname.titlerow.style.width;
	if(windowname.style.position != "absolute")
	{
		windowname.parentNode.removeAttribute("align");
		windowname.parentNode.removeAttribute("valign");
		windowname.style.position = "absolute";
	}
	windowname.style.top = "0px";
	windowname.style.left = "0px";
	windowname.style.width = "100%";
	windowname.style.height = "100%";
	windowname.titlerow.style.width = windowname.offsetWidth - 72 + "px";
	windowname.max.style.display = "none";
	windowname.rest.style.display = "inline";
}

// The minimize button
function minimize(windowname)
{
	if(windowname.style.position != "absolute")
	{
		windowname.style.left = windowname.offsetLeft + "px";
		windowname.style.top = windowname.offsetTop + "px";
		windowname.parentNode.removeAttribute("align");
		windowname.parentNode.removeAttribute("valign");
		windowname.style.position = "absolute";
	}
	windowname.table.style.display = "none";
	for(i=0;i<6;i++)
	{
		if(taskbarinuse[i] == 0)
		{
			taskbarinuse[i] = 1;
			taskbarspots[i].style.paddingLeft = "3px";
			taskbarspots[i].style.paddingRight = "3px";
			taskbarspots[i].innerHTML = "<a class=\"taskbarlink\" button href=\"javascript:minrestore(" + windowname.varname + ")\" onmouseover=\"taskdown(" + i + ");\" onmouseout=\"taskup(" + i + ");\">" + windowname.titlerowtext + "</a>";
			windowname.taskbar = i;
			break;
		}
	}
}

// The minimize restoration function
function minrestore(windowname)
{
	if(mozilla)
	{
		windowname.table.style.display = "table";
		taskbarspots[windowname.taskbar].innerHTML = "";
	}
	else
	{
		windowname.table.style.display = "block";
		taskbarspots[windowname.taskbar].innerHTML = "&nbsp;";
	}
	taskbarspots[windowname.taskbar].style.paddingLeft = "8px";
	taskbarspots[windowname.taskbar].style.paddingRight = "8px";
	taskup(windowname.taskbar);
}

function taskdown(buttonid)
{
	if(buttonid == "start")
	{
		startcancel = 1;
		taskitem = start;
	}
	else taskitem = taskbarspots[buttonid];
	taskitem.style.borderTop = "2px solid black";
	taskitem.style.borderLeft = "2px solid black";
	taskitem.style.borderRight = "2px solid white";
	taskitem.style.borderBottom = "2px solid white";
}

function taskup(buttonid)
{
	if(buttonid == "start")
	{
		taskitem = start;
		if(startdiv.style.display == "block")
		{
			startcancel = 0;
			menuTimer = setTimeout("startmenuclose();",500);
			return;
		}
	}
	else taskitem = taskbarspots[buttonid];
	taskitem.style.borderTop = "2px solid white";
	taskitem.style.borderLeft = "2px solid white";
	taskitem.style.borderRight = "2px solid black";
	taskitem.style.borderBottom = "2px solid black";
}

function startmenu(startspot)
{
	start.style.borderTop = "2px solid black";
	start.style.borderLeft = "2px solid black";
	start.style.borderRight = "2px solid white";
	start.style.borderBottom = "2px solid white";
	if(startdiv.style.display != "block") startdiv.style.display = "block";
	i = startspot;
	if(i < 300)
	{
		i += 50;
		startdiv.style.height = i + "px";
		startentry[Math.floor((i - 50) / 50)].style.display = "block";
		widthTimer = setTimeout("startmenu(i);",20);
	}
	else
	{
		clearTimeout(widthTimer);
	}
}

function startmenuclose()
{
	if(!startcancel)
	{
		startdiv.style.height = "0px";
		startdiv.style.display = "none";
		start.style.borderTop = "2px solid white";
		start.style.borderLeft = "2px solid white";
		start.style.borderRight = "2px solid black";
		start.style.borderBottom = "2px solid black";
		for(i=0;i<6;i++) startentry[i].style.display = "none";
	}
}

function hilight(entryid)
{
	startentry[entryid].style.color = "black";
	startentry[entryid].style.background = "white";
}

function unhilight(entryid)
{
	startentry[entryid].style.color = "white";
	startentry[entryid].style.background = "black";
}

// The restore button
function restore(windowname)
{
	windowname.style.width = windowname.oldwidth;
	windowname.style.height = windowname.oldheight;
	if(windowname.style.position != "absolute") windowname.style.position = "absolute";
	windowname.style.left = windowname.oldx + "px";
	windowname.style.top = windowname.oldy + "px";
	windowname.titlerow.style.width = windowname.titlerow.oldwidth;
	windowname.rest.style.display = "none";
	windowname.max.style.display = "inline";
}

// The menuup button (or double clicking (buggy in IE))
function menuup(windowname)
{
	windowname.oldheight2 = windowname.style.height;
	windowname.style.top = windowname.offsetTop + "px";
	windowname.style.left = windowname.offsetLeft + "px";
	if(windowname.style.position != "absolute")
	{
		windowname.parentNode.removeAttribute("align");
		windowname.parentNode.removeAttribute("valign");
		windowname.style.position = "absolute";
	}
	windowname.style.height = "22px";
	windowname.hr1.style.display = "none";
	windowname.hr2.style.display = "none";
	windowname.menu.parentNode.href = "javascript:menudown(" + windowname.varname + ")";
	windowname.titlerow.setAttribute("ondblclick", "menudown(" + windowname.varname + ");");
	windowname.windowshade = 1;
}

// And going back down.
function menudown(windowname)
{
	windowname.style.height = windowname.oldheight2;
	if(mozilla)
	{
		windowname.hr1.style.display = "table-row";
		windowname.hr2.style.display = "table-row";
	}
	else
	{
		windowname.hr1.style.display = "block";
		windowname.hr2.style.display = "block";
	}
	windowname.menu.parentNode.href = "javascript:menuup(" + windowname.varname + ")";
	windowname.titlerow.setAttribute("ondblclick", "menuup(" + windowname.varname + ");");
	windowname.windowshade = 0;
}

// The actual dragging/resizing function.  Could be optimized?
function dragging(e)
{
	if(msie)
	{
		locX = event.clientX;
		locY = event.clientY;
	}
	else
	{
		locX = e.pageX;
		locY = e.pageY;
	}
	if(!dragwindow) return;
	windowname = dragwindow;
	if(windowname.titlerow.drag == 1)
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newleft = locX - windowname.xdiff;
		windowname.newtop = locY - windowname.ydiff;
		windowname.style.left = windowname.newleft + "px";
		windowname.style.top = windowname.newtop + "px";
	}
	else if(windowname.resize == "n")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newtop = locY - windowname.ydiff;
		windowname.newheight = windowname.heightdiff - locY + windowname.ydiff;
		windowname.style.left = windowname.xdiff + "px";
		windowname.style.top = windowname.newtop + "px";
		windowname.style.height = windowname.newheight + "px";
	}
	else if(windowname.resize == "s")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newheight = locY + windowname.ydiff;
		windowname.style.left = windowname.xdiff + "px";
		windowname.style.top = windowname.heightdiff + "px";
		windowname.style.height = windowname.newheight + "px";
	}
	else if(windowname.resize == "e")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newwidth = locX + windowname.xdiff;
		windowname.style.left = windowname.widthdiff + "px";
		windowname.style.top = windowname.ydiff + "px";
		windowname.style.width = windowname.newwidth + "px";
		windowname.titlerow.style.width = windowname.newwidth - 72 + "px";
	}
	else if(windowname.resize == "w")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newleft = locX - windowname.xdiff;
		windowname.newwidth = windowname.widthdiff - locX + windowname.xdiff;
		windowname.style.left = windowname.newleft + "px";
		windowname.style.top = windowname.ydiff + "px";
		windowname.style.width = windowname.newwidth + "px";
		windowname.titlerow.style.width = windowname.newwidth - 72 + "px";
	}
	else if(windowname.resize == "ne")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newtop = locY - windowname.ydiff;
		windowname.newwidth = locX + windowname.xdiff;
		windowname.newheight = windowname.heightdiff - locY + windowname.ydiff;
		windowname.style.left = windowname.widthdiff + "px";
		windowname.style.top = windowname.newtop + "px";
		windowname.style.width = windowname.newwidth + "px";
		windowname.style.height = windowname.newheight + "px";
		windowname.titlerow.style.width = windowname.newwidth - 72 + "px";
	}
	else if(windowname.resize == "nw")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newleft = locX - windowname.xdiff;
		windowname.newtop = locY - windowname.ydiff;
		windowname.newwidth = windowname.widthdiff - locX + windowname.xdiff;
		windowname.newheight = windowname.heightdiff - locY + windowname.ydiff;
		windowname.style.left = windowname.newleft + "px";
		windowname.style.top = windowname.newtop + "px";
		windowname.style.width = windowname.newwidth + "px";
		windowname.style.height = windowname.newheight + "px";
		windowname.titlerow.style.width = windowname.newwidth - 72 + "px";
	}
	else if(windowname.resize == "se")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newwidth = locX + windowname.xdiff;
		windowname.newheight = locY + windowname.ydiff;
		windowname.style.left = windowname.widthdiff + "px";
		windowname.style.top = windowname.heightdiff + "px";
		windowname.style.width = windowname.newwidth + "px";
		windowname.style.height = windowname.newheight + "px";
		windowname.titlerow.style.width = windowname.newwidth - 72 + "px";
	}
	else if(windowname.resize == "sw")
	{
		if(windowname.style.position != "absolute")
		{
			windowname.parentNode.removeAttribute("align");
			windowname.parentNode.removeAttribute("valign");
			windowname.style.position = "absolute";
		}
		windowname.newleft = locX - windowname.xdiff;
		windowname.newwidth = windowname.widthdiff - locX + windowname.xdiff;
		windowname.newheight = locY + windowname.ydiff;
		windowname.style.left = windowname.newleft + "px";
		windowname.style.top = windowname.heightdiff + "px";
		windowname.style.width = windowname.newwidth + "px";
		windowname.style.height = windowname.newheight + "px";
		windowname.titlerow.style.width = windowname.newwidth - 72 + "px";
	}
}

// Turning dragging on
function dragon(windowname)
{
	windowname.titlerow.drag = 1;
	windowname.xdiff = locX - windowname.offsetLeft;
	windowname.ydiff = locY - windowname.offsetTop;
	if(windowname.ydiff < 0 && msie) windowname.ydiff = Math.floor(locY - windowname.offsetTop / 2);
	/*if(windowname.closed == 1 && msie)
	{
		windowname.ydiff = windowname.ydiff + windowname.offsetParent.offsetTop;
	}*/
	dragwindow = windowname;
}

// And off.
function dragoff(windowname)
{
	dragwindow = 0;
	windowname.titlerow.drag = 0;
}

