function chatlog() {
	var input = document.getElementById('input');
	var output = document.getElementById('output');

	var os = trim_whitespace(input.value);
	os = strip_tags(os, document.getElementById('tags').checked);

	if (!document.getElementById('reminder_text').checked) {
		os = strip_parens(os);
		os = strip_spaces(os);
	}

	os = add_newlines(os);
	os = trim_whitespace(os);

	output.value = os;
}

function trim_whitespace(s) {
  while (s.charAt(0).match(/\s/)) {
    s = s.substring(1, s.length);
  }

  while (s.charAt(s.length - 1).match(/\s/)) {
    s = s.substring(0, s.length - 1);
  }

  return s;
}

function strip_parens(s) {
	var lp = [];
	var rp = [];

	for (var i = 0; i < s.length; i++) {
		if (s.charAt(i) == '(') {
			lp.push(i);
		}
		if (s.charAt(i) == ')') {
			rp.push(i);
		}
	}

	for (var i = 0; i < lp.length; i++) {
		if (s.charAt(lp[i] + 1) == 'X') {
			lp[i] = -1;
			rp[i] = -1;
			continue;
		}

		if (s.substring(lp[i], lp[i] + 14) == "(with Sunburst") {
			lp[i] = -1;
			rp[i] = -1;
			continue;
		}
	}

	for (var i = lp.length - 1; i >= 0; i--) {
		if (lp[i] == -1) {
			continue;
		}

		var lh = s.substring(0, lp[i]);
		var rh = s.substring(rp[i] + 1, s.length);
		s = lh + "" + rh;
	}

	return s;
}

function strip_spaces(s) {
	return s.replace(/ \./g, ".");
}

function strip_tags(s, tags) {
	// mana symbols
	s = s.replace(/\[sW]/g, '{W}');
	s = s.replace(/\[sU]/g, '{U}');
	s = s.replace(/\[sB]/g, '{B}');
	s = s.replace(/\[sR]/g, '{R}');
	s = s.replace(/\[sG]/g, '{G}');
	s = s.replace(/\[sP]/g, '{S}');
	s = s.replace(/\[sX]/g, '{X}');
	s = s.replace(/\[s([0-9])]/g, '{$1}');
	s = s.replace(/\[sa]/g, '{10}');
	s = s.replace(/\[sb]/g, '{11}');
	s = s.replace(/\[sc]/g, '{12}');
	s = s.replace(/\[sd]/g, '{13}');
	s = s.replace(/\[se]/g, '{14}');
	s = s.replace(/\[sf]/g, '{15}');
	s = s.replace(/\[sg]/g, '{16}');
	s = s.replace(/\[s+]/g, '{WU}');
	s = s.replace(/\[s;]/g, '{WB}');
	s = s.replace(/\[s$]/g, '{UB}');
	s = s.replace(/\[s`]/g, '{UR}');
	s = s.replace(/\[s=]/g, '{BR}');
	s = s.replace(/\[s_]/g, '{BG}');
	s = s.replace(/\[s']/g, '{RG}');
	s = s.replace(/\[s~]/g, '{RW}');
	s = s.replace(/\[s-]/g, '{GW}');
	s = s.replace(/\[s&]/g, '{GU}');
	s = s.replace(/\[s!]/g, '{2W}');
	s = s.replace(/\[s@]/g, '{2U}');
	s = s.replace(/\[s%]/g, '{2B}');
	s = s.replace(/\[s<]/g, '{2R}');
	s = s.replace(/\[s>]/g, '{2G}');

	// spell types
	s = s.replace(/\[sSpellL]/g, '{land}');
	s = s.replace(/\[sSpellA]/g, '{artifact}');
	s = s.replace(/\[sSpellC]/g, '{creature}');
	s = s.replace(/\[sSpellS]/g, '{sorcery}');
	s = s.replace(/\[sSpellI]/g, '{instant}');
	s = s.replace(/\[sSpellE]/g, '{enchantment}');
	s = s.replace(/\[sPlaneswalker]/g, '{planeswalker}');
	s = s.replace(/\[sBooster]/g, '{booster}');

	// rarity symbols
	s = s.replace(/\[sSET ([^\]]*)]/g, '{$1}');

	// misc
	s = s.replace(/\[s(.)]/g, '{$1}'.toLowerCase());
	s = s.replace(/\[n]/g, '\n');
	s = s.replace(/\[p]/g, '');
	s = s.replace(/\[r]/g, '');
	s = s.replace(/\[@xFF\d*]/g, '');

	// @K
	s = s.replace(/\[@K]/g, '');

	if (tags) {
		// [card] tags
		s = s.replace(/\[a:url=card[^\]]*]/g, '[card]');
		s = s.replace(/\[card](.*?)\[\/a]/g, '[card]$1[/card]');

		// [url] tags
		s = s.replace(/\[a:url/g, '[url');
		s = s.replace(/\[\/a]/g, '[/url]');

		// colors
		s = s.replace(/\[@A]/g, '[color=ash]');
		s = s.replace(/\[@B]/g, '[color=blue]');
		s = s.replace(/\[@C]/g, '[color=cyan]');
		s = s.replace(/\[@G]/g, '[color=green]');
		s = s.replace(/\[@O]/g, '[color=orange]');
		s = s.replace(/\[@P]/g, '[color=purple]');
		s = s.replace(/\[@R]/g, '[color=red]');
		s = s.replace(/\[@S]/g, '[color=slate]');
		s = s.replace(/\[@W]/g, '[color=white]');
		s = s.replace(/\[@Y]/g, '[color=yellow]');
		s = s.replace(/\[\/@]/g, '[/color]');
	} else {
		// text formatting
		s = s.replace(/\[\/?b]/g, '');
		s = s.replace(/\[\/?i]/g, '');
		s = s.replace(/\[\/?u]/g, '');

		// [card] tags
		s = s.replace(/\[@<]\[@G]/g, '');
		s = s.replace(/\[@>]/g, '');

		// [url] tags
		s = s.replace(/\[a:url[^\]]*]/g, '');
		s = s.replace(/\[\/a]/g, '');

		// colors
		s = s.replace(/\[@[ABCGOPRSWY]]/g, '');
		s = s.replace(/\[\/@]/g, '');
	}

	// Colors don't work...kill them for now
	s = s.replace(/\[color=[^\]]*]/g, '');
	s = s.replace(/\[\/color]/g, '');

	return s;
}

function add_newlines(s) {
	s = s.replace(/(1?[0-9]:[0-9]{1,2})/g, "\n$1")
	return s.replace(/ \n(1?[0-9]:[0-9]{1,2})/g, " $1");
}
