var tag_count = 0;
var ansi_high = false;
var ansi_bghigh = false;
var ansi_fgcolor = 7;
var ansi_bgcolor = 0;
var ansi_black = 0;
var ansi_blue = 1;
var ansi_green = 2;
var ansi_cyan = 3;
var ansi_red = 4;
var ansi_magenta = 5;
var ansi_brown = 6;
var ansi_white = 7;

if (document.getElementById == undefined)
	alert("Please upgrade to a modern browser.");

function $(id) {
	return document.getElementById(id);
}

function getSizeWH() {
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return [ myWidth, myHeight ];
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement &&
      ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function getElementSizeWH(e) {
	if( typeof( e.innerWidth ) == 'number' )
		return [e.innerWidth, e.innerHeight];
	else
		return [e.clientWidth, e.clientHeight];
		
	
}

function scrollToBottom(e) {
	e.scrollTop = ((e.innerHeight)?e.innerHeight:e.clientHeight) + 9999;
}

function login_bbs_website(f) {
	var f2 = document.forms['BbsLoginForm'];
	f2.elements['bbs_login_submit'].value = "yes";
	f2.elements['bbs_login_username'].value = f.elements['un'].value;
	f2.elements['bbs_login_password'].value = f.elements['pw'].value;
	f2.submit();
}

function htmlEncode(strIn) {
	var ret = "";
	var x;
	for (var i=0; i<strIn.length; i++) {
		x = strIn.substr(i,1);
		if ((/[A-Za-z0-9]/).test(x))
			ret += x;
		else if ((/\s/).test(x) || x.charCodeAt(0) < 32)
			ret += " ";
		else
			ret += "&#" + x.charCodeAt(0) + ";";
	}
	return ret;
}

function getBbsColor(color, bg) {
	if (color == 0) return "Black";
	if (color == 1) return "Blue";
	if (color == 2) return "Green";
	if (color == 3) return "Cyan";
	if (color == 4) return "Red";
	if (color == 5) return "Magenta";
	if (color == 6) return "Brown";
	if (color == 7) return "White";
	
}

function getColorTag(color, bright, bg) {
	return "<div class=\"" + ((bright)?"lt":"dk") + getBbsColor(color) + ((bg)?"BG":"") + "\">";
}

function parseBbsColors(strIn) {
	var ret = ""
	tag_count = 0;
	var isbg = false;
	
	var x, x2, n, n2;
	for (var i=0; i<strIn.length; i++) {
		x = strIn.substr(i,1);
		n = strIn.substr(i+1,1);
		n2 = strIn.substr(i+2,1);
		
		if ((x == x.charCodeAt(0) == 1 && n.charCodeAt(0) == 1) || (x == "|" && n == "|")) {
			//escaped pipe or ctrl+a
			i++;
			ret += htmlEncode(x);
		} else if (x.charCodeAt(0) == 1) {
			//sbbs color code
			if (!(/[krgybmcwhin0-9]/i).test(n))
				ret += htmlEncode(x);
			else {
				isbg = false;
				if (n == "0") { isbg = true; ansi_bgcolor=ansi_black; }
				if (n == "1") { isbg = true; ansi_bgcolor=ansi_red; }
				if (n == "2") { isbg = true; ansi_bgcolor=ansi_green; }
				if (n == "3") { isbg = true; ansi_bgcolor=ansi_brown; }
				if (n == "4") { isbg = true; ansi_bgcolor=ansi_blue; }
				if (n == "5") { isbg = true; ansi_bgcolor=ansi_magenta; }
				if (n == "6") { isbg = true; ansi_bgcolor=ansi_cyan; }
				if (n == "7") { isbg = true; ansi_bgcolor=ansi_white; }
				if (n == "k") { ansi_fgcolor=ansi_black; }
				if (n == "r") { ansi_fgcolor=ansi_red; }
				if (n == "g") { ansi_fgcolor=ansi_green; }
				if (n == "y") { ansi_fgcolor=ansi_brown; }
				if (n == "b") { ansi_fgcolor=ansi_blue; }
				if (n == "m") { ansi_fgcolor=ansi_magenta; }
				if (n == "c") { ansi_fgcolor=ansi_cyan; }
				if (n == "w") { ansi_fgcolor=ansi_white; }
				if (n == "h") { ansi_high = true }
				if (n == "i") { ansi_bghigh = true; }
				if (n == "n") { ansi_high = false; ansi_bghigh = false; ansi_fgcolor = 7; ansi_bgcolor = 0; ret += getColortag(ansi_bgcolor, ansi_bghigh, true); i++; tag_count++; }
				
				i++;
				tag_count++;
				ret += getColorTag(((isbg)?ansi_bgcolor:ansi_fgcolor), ((isbg)?ansi_bghigh:ansi_high), isbg);
			}
		} else if (x == "|" && (!isNaN(n)) && (!isNaN(n2))) {
			//renegade color code -- require leading 0 for < 10
			n = parseInt(n);
			n2 = parseInt(n2);
			x2 = (n == 0)?n2:(n * 10) + n2;

			if (x2 < 0 || x2 > 31)
				ret += htmlEncode(x);
			else {
				i += (n2 == NaN)?1:2;
				tag_count++;
				//alert("|" + x2 + " " + (x2&7) + " " + ((x2&15) > 7) + " " + (x >= 15))
				ret += getColorTag(x2&7, (x2&15) > 7, x2 > 15);
			}
		} else
			ret += htmlEncode(x);
	}


	return ret;
}

function parseBbsText(strIn) {
	var i = -1;
	var s1, s2;
	var a1;
	var t1 = strIn;
	var t2 = "";
	
	tag_count = 0;
	ansi_high = false;
	ansi_bghigh = false;
	fgcolor = 7;
	bgcolor = 0;
	
	var retag = /\<A([^\>]*)\>(.*?)\<\/A\>/ig
	var rehref = /^.*?(href[\s]*?=[\s]*?(\"|\'){1})([^\"\']+).*$/i
	
	try {	
		//preserve links...
		t1 = t1.replace(retag, "___STARTLINK___$1___$2___ENDLINK___");
		
		//process text
		while (-1 != (i = t1.indexOf("___STARTLINK___"))) {
			t2 += parseBbsColors(t1.substring(0,i));
			t1 = t1.substring(i);
			s1 = t1.substring(0, t1.indexOf("___ENDLINK___") + 13)
			t1 = t1.substring(s1.length);
			a1 = s1.split("___");
			s1 = a1[2];
			s2 = a1[3];
			
			if (!rehref.test(s1)) {
				t2 += parseBbsColors(s2);
			} else {
				s1 = s1.replace(rehref, "$3");
				if (s1.toLowerCase().indexOf("javascript:") >= 0)
					t2 += parseBbsColors(s2);
				else
					t2 += "<a href=\"" + s1 + "\" target=\"_blank\">" + htmlEncode(s2) + "</a>";
			}
		}
		t1 = t2 + parseBbsColors(t1);
		t2 = "";
		for (var i=0; i<tag_count; i++)
			t1 += "</div>";
		t1 = t1.replace(/([\w]{40})/g, "$1 "); //force breaks
		if ((/(\<div)/g).test(t1) && t1.match(/(\<div)/g).length > 10)
			t1 = t1.replace(/(\<div)/g, " $1"); //force breaks
		while ((/  /g).test(t1))
			t1 = t1.replace(/  /g, "&nbsp; "); //preserve spacing
		
		//alert(t1);
		return t1;
	} catch(err) {
		return "!!!Error Parsing Input!!!"
	}
}

function setFooter() {
	/* not used, not using fixed positioning. */
}

function loadSite() {
	//don't frame me...
	if (window.top != window.self)
		window.top.location.replace(location.href);
	
	try { loadMasterPage(); } catch(err) {}
	try { loadSiteBrowser(); } catch(err) {}
	try { loadPage(); } catch(err) {}
	try { loadPageBrowser(); } catch(err) {}
}