
/********************************************
 * Copyright (c) 2006 - 2009 Geoffrey Swift *
 * All rights reserved                      *
 ********************************************/


/* arrayprototype.js : 2007-11-08T00:37:10+00:00 */

if (typeof Array.prototype.push == 'undefined')
{
	Array.prototype.push = function ()
	{
		var i;

		for (i = 0; i < arguments.length; i++)
		{
			this[this.length] = arguments[i];
		}

		return this.length;
	};
}

if (typeof Array.prototype.indexOf == 'undefined')
{
	Array.prototype.indexOf = function (value, startIndex)
	{
		var i;

		if (startIndex == null)
		{
			startIndex = 0;
		}
		else if (startIndex < 0)
		{
			startIndex += this.length;
			if (startIndex < 0)
			{
				startIndex = 0;
			}
		}
		
		for (i = startIndex; i < this.length; i++)
		{
			if (this[i] === value)
			{
				return i;
			}
		}

		return -1;
	}
}

/* onload.js : 2007-11-08T00:29:01+00:00 */

var onloadFunctions = new Array();

window.onload = function ()
{
	if (!document.body) 
	{
		document.body = document.getElementsByTagName('body')[0];
	}
	for (var i = 0; i < onloadFunctions.length; i++)
	{
		onloadFunctions[i]();
	}
};

/* config.js : 2007-08-14T00:56:09+01:00 */

var uribase = 'http://www.trollied.org/~blimey/';
var emailAddress = 'notblimey@trollied.org'.slice('not'.length);
_uacct = 'UA-477084-1';

/* cgiparams.js : 2007-11-08T00:17:59+00:00 */

function getArgs(search)
{
	if (search == "" || typeof search == "undefined")
	{
		return new Array();
	}
	else if (search.charAt(0) == '?')
	{
		return search.slice(1).split('&');
	}
	else
	{
		return search.split('&');
	}
}

function getFieldFromSearch(search, fieldName)
{
	var args = getArgs(search);

	for (var i = 0; i < args.length; i++)
	{
		if (args[i].indexOf('=') != -1)
		{
			var pair = args[i].split('=');

			if (pair[0] == fieldName)
			{
				return unescape(pair[1]);
			}
		}
	}

	return null;
}

function getFieldFromURI(uri, fieldName)
{
	if (uri.indexOf('#') != -1)
	{
		uri = uri.slice(0, uri.indexOf('#'));
	}

	if (uri.indexOf('?') == -1)
	{
		return '';
	}
	else
	{
		var search = uri.slice(uri.indexOf('?') + 1);
		return getFieldFromSearch(search, fieldName);
	}
}

/* date.js : 2007-07-09T23:35:16+01:00 */

function monthName(i)
{  
	return (new Array('January',
		'February',
		'March',
		'April',
		'May',
		'June',
		'July',
		'August',
		'September',
		'October',
		'November',
		'December'))[i];
}

/* xml.js : 2007-11-04T23:20:02+00:00 */

function XMLNodeValue(node)
{
	if (node.nodeValue)
	{
		return node.nodeValue;
	}
	else if (node.firstChild)
	{
		return XMLNodeValue(node.firstChild);
	}
	else
	{
		return '';
	}
}

/* atom.js : 2007-11-08T19:16:52+00:00 */

function atomToMenuByDate(xmlDoc)
{
	var menu = createSubMenu();
	var publishedNodes = xmlDoc.getElementsByTagName('published');
	var lastQuery = '';
	for (var i = 0; i < publishedNodes.length; i++)
	{
		var query = XMLNodeValue(publishedNodes[i]).substring(0, 7);
		if (query != lastQuery)
		{
			var month = parseInt(query.substring(5, 7), 10) - 1;
			var year = query.substring(0, 4);
			menu.appendChild(menuLink(monthName(month) + ' ' + year, uribase + 'archive.php?month=' + escape(query)));
			lastQuery = query;
		}
	}

	return menu;
}


function atomCategories(xmlDoc)
{
	var category;
	var categoryNodes = xmlDoc.getElementsByTagName('category');
	var result = new Array();
	for (var i = 0; i < categoryNodes.length; i++)
	{
		category = categoryNodes[i].getAttribute('term');
		if (categoryNodes[i].parentNode.tagName == 'feed')
		{
			result.push(category);
		}
	}
	return result;
}

function atomToMenuByCategory(xmlDoc, category)
{
	var menu = createSubMenu();

	var entryNodes = xmlDoc.getElementsByTagName('entry');
	for (var i = 0; i < entryNodes.length; i++)
	{
		var entry = entryNodes[i];
		var title = '';
		var id = '';
		var categories = new Array();
		for (var node = entry.firstChild; node; node = node.nextSibling)
		{
			if (node.nodeName == 'title')
			{
				title = XMLNodeValue(node);
			}
			else if (node.nodeName == 'id')
			{
				id = XMLNodeValue(node);
			}
			else if (node.nodeName == 'category')
			{
				categories.push(node.getAttribute('term'));
			}
		}
		var valid = false;
		if (category)
		{
			valid = (-1 != categories.indexOf(category));
		}
		else
		{
			valid = true;
		}
		if ((title !== '') && (id !== '') && (valid))
		{
			menu.appendChild(menuLink(title, uribase + 'blog.php?id=' + escape(id)));
		}
	}

	return menu;
}

/* ajax.js : 2007-11-24T18:09:34+00:00 */

function NewXMLHttp()
{
	if (window.XMLHttpRequest)
	{
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		return new ActiveXObject('Microsoft.XMLHTTP');
	}
	else
	{
		return null;
	}
}

function loadXML(url)
{
	var XMLHttp = NewXMLHttp();

	if (XMLHttp)
	{
		try
		{
			XMLHttp.open('GET', url, false);
			XMLHttp.send(null);
			if (XMLHttp.status == 200)
			{
				return XMLHttp.responseText;
			}
		}
		catch (e)
		{
		}
	}

	return '';
}

function loadXML2(url, f)
{
	var XMLHttp = NewXMLHttp();
	if (XMLHttp)
	{
		try
		{
			XMLHttp.open('GET', url, true);
			XMLHttp.onreadystatechange = function ()
			{
				if ((XMLHttp.readyState == 4) && (XMLHttp.status == 200))
				{
					var lastModified = '';
					var eTag = '';
					if (typeof XMLHttp.getResponseHeader == 'function') 
					{
						lastModified = XMLHttp.getResponseHeader('Last-Modified');
						eTag = XMLHttp.getResponseHeader('ETag');
					}
					if (('' == lastModified) && ('' == eTag))
					{
						f(XMLHttp.responseText);
					}
					else
					{
						var XMLHttp2 = NewXMLHttp();
						XMLHttp2.open('GET', url, false);
						if ('' != lastModified)
						{
							XMLHttp2.setRequestHeader('If-Modified-Since', lastModified);
						}
						if ('' != eTag)
						{
							XMLHttp2.setRequestHeader('If-None-Match', eTag);
						}
						XMLHttp2.setRequestHeader('Pragma', 'no-cache');
						XMLHttp2.send(null);
						if (XMLHttp2.status == 304)
						{
							f(XMLHttp.responseText);
						}
						else if (XMLHttp2.status == 200)
						{
							f(XMLHttp2.responseText);
						}
						else if (XMLHttp2.status == 500)
						{
							f(XMLHttp2.responseText);
						}
					}
				}
			};
			XMLHttp.send(null);
		}
		catch (e)
		{
		}
	}
}

function parseXML(xml)
{
	var xmlDoc;
	if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
		xmlDoc.async = false;
		xmlDoc.loadXML(xml);
	}
	else
	{
		xmlDoc = (new DOMParser()).parseFromString(xml, 'text/xml');
	}
	return xmlDoc;
}

function importXML(url)
{
	var xml = loadXML(url);
	if (xml)
	{
		return parseXML(xml);
	}
}

function importXML2(url, f)
{
	loadXML2(url, function (xml)
	{
		if (xml)
		{
			f(parseXML(xml));
		}
	});
}

/* dictlist.js : 2007-12-01T20:35:23+00:00 */

function stripText(s)
{
	if (s)
	{
		return s.replace(/<[^>]+>/g, '').replace(/&amp;/g, '&').replace(/ *$/, '');
	}
	else
	{
		return '';
	}
}

function initDictionaryList()
{
	if (typeof document.getElementsByTagName == 'undefined')
	{
		return;
	}
	var dts = document.getElementsByTagName('dt');
	var dt;
	for (var i = 0; i < dts.length; i++)
	{
		dt = dts[i];
		var hfeed = (dt.parentNode.getAttribute('class') == 'hfeed') || (dt.parentNode.getAttribute('className') == 'hfeed');
		var expandolist = (dt.parentNode.getAttribute('class') == 'expandolist') || (dt.parentNode.getAttribute('className') == 'expandolist');
		if (!(hfeed || expandolist))
		{
			continue;
		}
		dt.frob = function (visible)
		{
			var dt = this;
			var node = this.nextSibling;
			while (node)
			{
				if (node.nodeType == 1)
				{
					if ('dd' == node.tagName.toLowerCase())
					{
						node.style.display = (visible ? '' : 'none');
						node.show = function()
						{
							dt.show();
						}
						node.hide = function ()
						{
							dt.hide();
						}
					}
					else if ('dt' == node.tagName.toLowerCase())
					{
						break;
					}
				}
				node = node.nextSibling;
			}
		};
		dt.hide = function ()
		{
			this.firstChild.firstChild.nodeValue = '+';
			this.frob(false);
			this.title = 'Click to show' + (this.firstChild.nextSibling ? ' "' + stripText(this.firstChild.nextSibling.nodeValue) + '"' : '');
			this.onclick = this.show;
		};
		dt.show = function ()
		{
			this.firstChild.firstChild.nodeValue = '-';
			this.frob(true);
			this.title = 'Click to hide' + (this.firstChild.nextSibling ? ' "' + stripText(this.firstChild.nextSibling.nodeValue) + '"' : '');
			this.onclick = this.hide;
		};
		try
		{
			dt.style.cursor = 'pointer';
		}
		catch (e)
		{
			dt.style.cursor = 'hand'; 
		}
		
		var span = document.createElement('span');
		span.setAttribute('class', 'expandobox');
		span.setAttribute('className', 'expandobox');
		span.appendChild(document.createTextNode('?'));
		dt.insertBefore(span, dt.firstChild);

		var visible = true;
		if (hfeed)
		{
			visible = (dt === dt.parentNode.getElementsByTagName('dt')[0]);
		}
		else
		{
			visible = false;//(dt.parentNode.parentNode.tagName.toLowerCase() != 'dd');
		}	
		
		if (visible)
		{
			dt.show();
		}
		else
		{
			dt.hide();
		}
		dt.onmouseover = function ()
		{
			this.oldClassName = this.className;
			this.className = 'mouseover';
		};
		dt.onmouseout = function ()
		{
			this.className = this.oldClassName;
		};
		dt.onselectstart = function ()
		{
			return false;
		};
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initDictionaryList);
}

/* docwrite.js : 2008-04-17T22:21:49+01:00 */

function myCloneNode(document, node)
{
	if (node.nodeType == 3)
	{
		return document.createTextNode(node.nodeValue);
	}
	else if (node.nodeType == 1)
	{
		var result = document.createElement(node.tagName);
		for (var child = node.firstChild; child; child = child.nextSibling)
		{		
			if ((child.nodeType == 1) && (child.tagName.toLowerCase() == 'style'))
			{
				document.getElementsByTagName('head')[0].appendChild(myCloneNode(document, child));
			}
			else
			{
				result.appendChild(myCloneNode(document, child));
			}
		}
		for (var i = 0; i < node.attributes.length; i++)
		{
			if (node.attributes[i].specified)
			{
				result.setAttribute(node.attributes[i].nodeName, node.attributes[i].nodeValue);
			}
		}
		return result;
	}
}

function appendXML(parentNode, xml)
{
	var HTMLNode;
	if (window.ActiveXObject)
	{
		xmlDoc = (new ActiveXObject('Microsoft.XMLDOM'));
		xmlDoc.loadXML(xml);
		if (xmlDoc.parseError.errorCode !== 0)
		{
			return;
		}
	}
	else if (window.DOMParser)
	{
		xmlDoc = (new DOMParser()).parseFromString(xml, 'application/xhtml+xml');
		if ('parsererror' == xmlDoc.documentElement.tagName)
		{
			return;
		}
	}
	else
	{
		return;
	}
	
	try
	{
		HTMLNode = myCloneNode(document, xmlDoc.documentElement);
		parentNode.appendChild(HTMLNode);
	}
	catch (e)
	{
		HTMLNode = document.createElement('span');
		HTMLNode.innerHTML = xmlDoc.documentElement.xml;
		parentNode.appendChild(HTMLNode);
		if (document.getElementsByTagName('style').length && document.getElementsByTagName('style')[0].styleSheet)
		{
			var styleSheets = xmlDoc.getElementsByTagName('style');
			for (var i = 0; i < styleSheets.length; i++)
			{
				document.getElementsByTagName('style')[0].styleSheet.cssText += styleSheets[i].firstChild.nodeValue;
			}
		}
	}
}

function initDocWriting()
{
	document.writeln = document.write = function () {};

	
	docWritten = docWritten.replace(/<script language=[^"].*<\/script>/g, '');
	if (docWritten)
	{
  		var xml = '<div>' + docWritten + '</div>';
  		docWritten = '';
		if (typeof document.getElementById != 'undefined')
		{
  			appendXML(document.getElementById('docwriting'), xml);
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
        onloadFunctions.push(initDocWriting);
}

var docWritten = '';

document.write = function (s)
{
	if (arguments.length == 1)
	{
		docWritten += s;
	}
	else
	{
		for (var i = 0; i < arguments.length; i++)
		{
			document.write(arguments[i]);
		}
	}
};

document.writeln = function (s)
{
	for (var i = 0; i < arguments.length; i++)
	{
		document.write(arguments[i]);
	}
	document.write(String.fromCharCode(10));
};

/* searchterms.js : 2008-03-25T01:54:58+00:00 */

function regExpEscape(s)
{
	return s.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
}

function searchResult(text)
{
	var span = document.createElement('span');
	span.setAttribute('class', 'searchresult');
	span.setAttribute('className', 'searchresult');
	span.appendChild(document.createTextNode(text));
	return span;
}

function hilightNode(node, query)
{
	var reg = new RegExp('\\b' + regExpEscape(query) + '\\b', 'ig');
	var matches = node.nodeValue.match(reg);
	if (!matches)
	{
		return;
	}
	var parent = node.parentNode;
	var chunks = (' ' + node.nodeValue).split(reg);
	if (chunks.length)
	{
		chunks[0] = chunks[0].slice(1);
	}
	var span = document.createElement('span');
	for (var i = 0; i < Math.max(chunks.length, matches.length); i++)
	{
		if (i < chunks.length)
		{
			span.appendChild(document.createTextNode(chunks[i]));
		}
		if (i < matches.length)
		{
			span.appendChild(searchResult(matches[i]));
		}
	}
	parent.replaceChild(span, node);
	while (parent && parent.style)
	{
		if (parent.style.display == 'none')
		{
			if (typeof parent.show != 'undefined')
			{
				parent.show();
			}
			else
			{
				parent.style.display = '';
			}
		}
		parent = parent.parentNode;
	}
}

function hilightSearchTerms(parent, query)
{
	
	var node = parent.firstChild;
	var next;

	while (node)
	{
		
		next = node.nextSibling;

		if (node.nodeType === 3)
		{
			hilightNode(node, query);
		}
		else
		{
			hilightSearchTerms(node, query);
		}

		node = next;
	}
}

function parseSearchTerms(s)
{
	return s.replace(/\+/g, ' ').match(/\b[^ \b"]+\b|"[^"]+"/g);
}

function hilightUnparsedSearchTerms(query)
{
	var searchTerms = parseSearchTerms(query);
	var term;

	if (!searchTerms)
	{
		return;
	}
	for (term = 0; term < searchTerms.length; term++)
	{
		hilightSearchTerms(document.body, searchTerms[term].replace(/"/g, ''));
	}
}

function initSearchTerms()
{
	var query;

	
	if (query = getFieldFromSearch(location.search, 'q'))
	{
		hilightUnparsedSearchTerms(query);
	}
	else if (document.referrer)
	{
		if (document.referrer.slice(0, uribase.length) == uribase)
		{
		}
		else if (query = getFieldFromURI(document.referrer, 'q'))
		{
			hilightUnparsedSearchTerms(query); // Google
		}
		else if (query = getFieldFromURI(document.referrer, 'p'))
		{
			hilightUnparsedSearchTerms(query); // Yahoo!
		}
		else if (query = getFieldFromURI(document.referrer, 'query'))
		{
			hilightUnparsedSearchTerms(query); // AOL / Lycos
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initSearchTerms);
}

/* email.js : 2007-07-21T17:25:53+01:00 */

function initEmailAddress()
{
	if (typeof document.getElementsByTagName == 'undefined')
	{
		return;
	}
	var a = document.getElementsByTagName('a');
	for (var i = 0; i < a.length; i++)
	{
		if (a[i].href == 'mailto:')
		{
			a[i].href += emailAddress;
			if (a[i].firstChild)
			{
				a[i].replaceChild(document.createTextNode(emailAddress), a[i].firstChild);
			}
			else
			{
				a[i].appendChild(document.createTextNode(emailAddress));
			}
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initEmailAddress);
}

/* resizer.js : 2008-04-14T21:39:30+01:00 */



function setFontSize(fontSize)
{
	if (document.body && document.body.style)
	{
		document.body.style.fontSize = fontSize;
	}
	if (typeof SetCookie != 'undefined')
	{
		SetCookie('fontSize', fontSize);
	}
}

function fontResizeLetter(fontSize)
{
	var spanElement = document.createElement('span');
	if (spanElement.style)
	{
		spanElement.style.fontSize = fontSize;
	}
	else
	{
		spanElement.setAttribute('style', 'font-size: ' + fontSize);
	}
	spanElement.onclick = function ()
	{
		setFontSize(fontSize);
		return false;
	};
	var anchorElement = document.createElement('a');
	anchorElement.setAttribute('href', '#');
	anchorElement.setAttribute('title', 'Set font size to ' + fontSize);
	anchorElement.appendChild(document.createTextNode('A'));
	spanElement.appendChild(anchorElement);
	return spanElement;
}

function addFontResizer()
{
	var fontSizes = ['xx-large', 'x-large', 'large', 'medium', 'small', 'x-small'].slice(1).reverse();
	if (typeof document.getElementById == 'undefined')
	{
		return;
	}
	var resizer = document.getElementById('resizer');
	if (resizer && resizer.style)
	{
		var table = document.createElement('table');
		var tbody = document.createElement('tbody');
		var tr = document.createElement('tr');
		for (var i = 0; i < fontSizes.length; i++)
		{
			var td = document.createElement('td');
			td.appendChild(fontResizeLetter(fontSizes[i]));
			tr.appendChild(td);
		}
		tbody.appendChild(tr);
		table.appendChild(tbody);
		resizer.appendChild(table);
	}
}

function initFontResizer()
{
	addFontResizer();
	if ((typeof GetCookie != 'undefined') &&
		(typeof document.cookie != 'undefined'))
	{
		var fontSize = GetCookie('fontSize') || 'medium';
		if (fontSize)
		{
			setFontSize(fontSize);
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initFontResizer);
}

/* form.js : 2008-03-06T23:29:54+00:00 */

function labelFor(formElement)
{
	if (typeof document.getElementsByTagName == 'undefined')
	{
		return;
	}
	var labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++)
	{
		if (labels[i].getAttribute('for') == formElement.getAttribute('id'))
		{
			return labels[i];
		}
	}
	return null;
}

function validateForm(form)
{
	var result = true;
	if (typeof form.getElementsByTagName == 'undefined')
	{
		return true;
	}
	var formElement;
	var label;
	for (var i = 0; i < form.elements.length; i++)
	{
		formElement = form.elements[i];
		if (formElement.className == 'mandatory')
		{
			if (formElement.tagName.toUpperCase() == 'SELECT')
			{
				if (formElement.selectedIndex == -1)
				{
					result = false;
				}
			}
			else if (!formElement.value.replace(/\s/g, ''))
			{
				result = false
			}

			if (!result)
			{
				label = labelFor(formElement);
				alert((label ? label.firstChild.nodeValue : formElement.name) + ' must not be blank.');
			}
		}

		if ((formElement.name == 'email') && (!formElement.value.match(/(.+@.+)|^$/)))
		{
			alert('The email address is not valid.');
			result = false;
		}

		if (!result)
		{
			formElement.focus();
			break;
		}
	}
	return result;
}

function setFormDefaults(form)
{
	for (var i = 0; i < form.elements.length; i++)
	{
		var value;
		if (value = GetCookie(form.elements[i].id))
		{
			if (form.elements[i].type == 'checkbox')
			{
				form.elements[i].checked = true;
			}
			else if (form.elements[i].type == 'text')
			{
				form.elements[i].value = value;
			}
		}
	}
}

function setFormValidation(form)
{
	
	form.oldonsubmit = form.onsubmit || function (event)
	{
		return true;
	};

	
	form.onsubmit = function (event)
	{
		return validateForm(this) && this.oldonsubmit(event);
	};
}

function setFormResizing(form)
{
	for (var i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].type == 'textarea')
		{
			var oldrows = form.elements[i].rows;

			form.elements[i].onkeypress = function ()
			{
				
				var lines = this.value.split(/\n/).length;
				this.rows = Math.max(lines, oldrows);
			}

			form.elements[i].onkeypress();
		}
	}
}

var initFormsDone = false;

function initForms()
{
	if (initFormsDone)
	{
		return;
	}
	initFormsDone = true;
	if (typeof document.forms == 'undefined')
	{
		document.forms = document.getElementsByTagName('form');
	}
	var i;
	var form;
	for (i = 0; i < document.forms.length; i++)
	{
		form = document.forms[i];
		setFormValidation(form);
		setFormDefaults(form);
		setFormResizing(form);
	}
}

function moveFormElement(element, n)
{
	var i;
	var j;
	var form = element.form;

	for (i = 0; i < form.elements.length; i++)
	{
		if (element == form.elements[i])
		{
			elementIndex = i;
			break;
		}
	}
	
	i = elementIndex;
	for (j = 0; j < Math.abs(n);)
	{
		if (n > 0)
		{
			i = (i + 1) % form.elements.length;
		}
		else
		{
			i = (i - 1 + form.elements.length) % form.elements.length;
		}

		if (form.elements[i].type != 'hidden')
		{
			j++
		}
	}
	return form.elements[i];
}


function keypressEventToString(event)
{
	if (window.event)
	{
		return String.fromCharCode(window.event.keyCode);
	}
	else if (event)
	{
		return String.fromCharCode(event.which);
	}
}

function validateKeyPress(event, regex)
{
	var key = keypressEventToString(event);

	if ((key < ' ') || key.match(regex))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function validateHTML(htmlenabled, html)
{
	if (!htmlenabled || '' == html)
	{
		return true;
	}

	if (window.XMLHttpRequest)
	{
		XMLHttp = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		XMLHttp = new ActiveXObject('Microsoft.XMLHTTP');
	}
	else
	{
		return true;
	}
	XMLHttp.open('POST', 'validatehtml.php', false);
	XMLHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	var content = 'html=' + encodeURIComponent(html);
	XMLHttp.setRequestHeader('Content-Length', content.length.toString());
	XMLHttp.send(content);

	if (XMLHttp.responseText != '')
	{
		alert(XMLHttp.responseText);
		return false;
	}

	return true;
}

function validateXHTML(htmlenabled, xhtml)
{
	if (xhtml == '')
	{
		return true;
	}
	if (htmlenabled)
	{
		xhtml = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>test</title></head><body><div>' + xhtml + '</div></body></html>';
		try
		{
			var xmlDoc;
			if (window.ActiveXObject)
			{
				xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
				xmlDoc.async = false;
				xmlDoc.loadXML(xhtml);
			}
			else
			{
				xmlDoc = (new DOMParser()).parseFromString(xhtml, 'application/xhtml+xml');
			}
		}
		catch (e)
		{
			if (e.code == 81) // LSException.PARSE_ERR = 81;
			{
				alert('Parse error.'); // Opera
			}
			else
			{
				alert(e.message);
			}
			return false;
		}
		if ((xmlDoc.parseError) && (0 !== xmlDoc.parseError.errorCode))
		{
			alert(xmlDoc.parseError.reason);
			return false;
		}
		else if ((xmlDoc.documentElement) && ('parsererror' == xmlDoc.documentElement.tagName))
		{
			alert(XMLNodeValue(xmlDoc.documentElement));
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		return true;
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initForms);
}

/* menu.js : 2008-04-08T22:48:01+01:00 */

function menuLink(title, href)
{
	var link = document.createElement('a');
	link.setAttribute('class', 'menuitem');
	link.setAttribute('className', 'menuitem');
	if ((href == location.href) ||
		(href == unescape(location.href)) ||
		(href == location.href.replace(/[\?#].*$/, '')))
	{
		link.setAttribute('id', 'selected');
	}
	link.setAttribute('href', href); 
	link.setAttribute('title', title);
	link.setAttribute('style', 'text-decoration: none;'); // Opera
	var text = document.createTextNode(title.replace(/(^.{15}).*$/, '$1...'));
	link.appendChild(text); 
	var span = document.createElement('span');
	span.appendChild(link);
	return span;
}

function addSubMenu(link, subMenu)
{
	if (!link || !subMenu)
	{
		return;
	}
	if (subMenu.style)
	{
		subMenu.style.display = 'none';
	}
	else
	{
		return;
	}
	var blogMenuLink = document.getElementById('menublog');
	var links = subMenu.getElementsByTagName('a');
	for (var i = 0; i < links.length; i++)
	{
		if (links[i].getAttribute('id') == 'selected')
		{
			if (blogMenuLink)
			{
				blogMenuLink.firstChild.removeAttribute('id');
			}
			link.firstChild.setAttribute('id', 'selected');
		}
	}
	if (subMenu.getElementsByTagName('a').length > 15)
	{
		subMenu.style.height = '15em';
		subMenu.style.overflowY = 'scroll';
	}
	link.onmouseover = function ()
	{
		subMenu.style.zIndex = '3';
		subMenu.style.opacity = 0.95;
		subMenu.style.filter = 'alpha(opacity=' + subMenu.style.opacity * 100 + ')';
		subMenu.style.display = '';
		var intervalID = link.getAttribute('intervalID');
		if (intervalID)
		{
			link.removeAttribute('intervalID');
			clearInterval(intervalID);
		}
	};
	link.onmouseout = function ()
	{
		subMenu.style.zIndex = '2';
		var intervalID = setInterval(function ()
		{
			subMenu.style.opacity -= 0.1;
			subMenu.style.filter = 'alpha(opacity=' + subMenu.style.opacity * 100 + ')';
			if (subMenu.style.opacity <= 0)
			{
				subMenu.style.display = 'none';
				link.removeAttribute('intervalID');
				clearInterval(intervalID);
			}
		}, 40);
		link.setAttribute('intervalID', intervalID);
	};
	link.appendChild(subMenu);
}

function addFeedMenuLinks()
{
	importXML2('atomsummary.php', addFeedMenuLinksFromDoc);
}

function addFeedMenuLinksFromDoc(xmlDoc)
{
	var archiveMenuLink = document.getElementById('menuarchive');
	var blogMenuLink = document.getElementById('menublog');
	var categories = atomCategories(xmlDoc);
	addSubMenu(archiveMenuLink, atomToMenuByDate(xmlDoc));
	addSubMenu(blogMenuLink, atomToMenuByCategory(xmlDoc, ''));
	for (var i = 0; i < categories.length; i++)
	{
		addSubMenu(document.getElementById('menu' + categories[i]), atomToMenuByCategory(xmlDoc, categories[i]));
	}
}

var initMenuDone = false;

function createMenu()
{
	var menu = document.createElement('div');
	menu.setAttribute('class', 'container');
	menu.setAttribute('className', 'container');
	return menu;
}

function createSubMenu()
{
	var menu = createMenu();
	menu.setAttribute('class', 'submenu');
	menu.setAttribute('className', 'submenu');
	return menu;
}

function initMenu()
{
	if (initMenuDone)
	{
		return;
	}
	initMenuDone = true;
	addFeedMenuLinks();
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initMenu);
}

/* links.js : 2008-04-27T21:54:32+01:00 */

var initLinksDone = false;

function initLinks()
{
	if (initLinksDone)
	{
		return;
	}
	if (typeof document.getElementsByTagName == 'undefined')
	{
		return;
	}
	var links = document.getElementsByTagName('a');
	for (var i = 0; i < links.length; i++)
	{
		if (typeof links[i].href != 'undefined')
		{
			if (links[i].href.slice(0, 'javascript:'.length) == 'javascript:')
			{
				continue;
			}
			else if ('' == links[i].href)
			{
				continue;
			}
			else if (links[i].href.slice(0, uribase.length) != uribase)
			{
				links[i].target = '_blank';
			}
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initLinks);
}

/* images.js : 2008-04-27T21:57:59+01:00 */

var initImagesDone = false;

function initImages()
{
	if (initImagesDone)
	{
		return;
	}
	if (typeof document.getElementsByTagName == 'undefined')
	{
		return;
	}
	var images = document.getElementsByTagName('img');
	for (var i = 0; i < images.length; i++)
	{
		var image = images[i];
		if ('a' == image.parentNode.tagName.toLowerCase())
		{
			continue;
		}
		else if (image.onclick)
		{
			continue;
		}
		else if (typeof image.src != 'undefined')
		{
			if (image.src.slice(0, uribase.length) == uribase)
			{
				image.onclick = function ()
				{
					window.open(image.src);
				}
			}
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initImages);
}

/* google.js : 2007-09-03T18:25:22+01:00 */

var initUrchinTrackerDone = false;

function initUrchinTracker()
{
	if (initUrchinTrackerDone)
	{
		return;
	}
	if (typeof urchinTracker != 'undefined')
	{
		urchinTracker();
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initUrchinTracker);
}

/* wordwrap.js : 2008-03-15T00:45:09+00:00 */

var initWordWrapDone = false;

function wordWrap(parent)
{
	var node = parent.firstChild;
	while (node)
	{
		if (node.nodeType === 3)
		{
			node.nodeValue = node.nodeValue.replace(/([~?&;,\\])/g, '$1\u200B');
		}
		else if (node.nodeType === 1)
		{
			if ('option' == node.tagName.toLowerCase())
			{
			}
			else if ('input' == node.tagName.toLowerCase())
			{
			}
			else if ('textarea' == node.tagName.toLowerCase())
			{
			}
			else if ('code' == node.tagName.toLowerCase())
			{
			}
			else
			{
				wordWrap(node);
			}
		}

		node = node.nextSibling;
	}
}

function initWordWrap()
{
	if (initWordWrapDone)
	{
		return;
	}
	
	if (navigator.appName != 'Microsoft Internet Explorer')
	{
		wordWrap(document.body);
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(initWordWrap);
}

/* blogedit.js : 2008-03-08T23:13:41+00:00 */

function addCategory(form)
{
	var value = form.tag.value;
	if (!value)
	{
		return false;
	}
	var option;

	for (var i = 0; i < form.category.length; i++)
	{
		option = form.category.options[i];
		if (option.value == value)
		{
			option.selected = true;
			return false;
		}
	}

	option = new Option(value, value, true, true);
	form.category.options.add(option);
	return true;
}

function addEnclosure(form)
{
	return true;
}

/* eolas.js : 2007-11-26T22:00:55+00:00 */

function encodeHTML(s)
{
	var result = '';
	for (var i = 0; i < s.length; i++)
	{
		result += '&#' + s.charCodeAt(i) + ';';
	}
	return result;
}

function nodeOuterHTML(node)
{
	if (node.nodeType == 3)
	{
		return node.nodeValue;
	}
	else if (node.nodeType == 1)
	{
		var result = '<' + node.tagName;
		for (var i = 0; i < node.attributes.length; i++)
		{
			if (node.attributes[i].specified)
			{
				result += ' ' + node.attributes[i].nodeName + '="' + encodeHTML(node.attributes[i].nodeValue) + '"';
			}
		}
		result += '>';
		for (var child = node.firstChild; child; child = child.nextSibling)
		{
			result += nodeOuterHTML(child);
		}
		return result + '</' + node.tagName + '>';
	}
}


function eolasWorkaround()
{
	if ('Microsoft Internet Explorer' == navigator.appName) 
	{
		var ieVersion = parseFloat(navigator.appVersion.replace(/^.*MSIE/, '').replace(/;.*$/, ''));
		if (isNaN(ieVersion) || (ieVersion < 7.0))
		{
			return;
		}
	}
	else if ('Opera' == navigator.appName)
	{
		var operaVersion = parseFloat(navigator.appVersion);
		if (isNaN(operaVersion) || (operaVersion < 9.0))
		{
			return;
		}
	}
	else
	{
		return;
	}

	var elements;
	var e;
	var tags = ['object', 'embed'];
	var t;
	for (t = 0; t < tags.length; t++)
	{	
		elements = document.getElementsByTagName(tags[t]);
		for (e = 0; e < elements.length; e++)
		{
			elements[e].outerHTML = nodeOuterHTML(elements[e]);
		}
	}
}

if (typeof onloadFunctions != 'undefined')
{
	onloadFunctions.push(eolasWorkaround);
}

/* cookie.js : 2007-07-27T22:38:20+01:00 */

function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}
function FixCookieDate (date) {
  var base = new Date(0);
  var skew = base.getTime(); // dawn of (Unix) time - should be 0
  if (skew > 0)  // Except on the Mac - ahead of its time
    date.setTime (date.getTime() - skew);
}
function GetCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
  }
  return null;
}
function SetCookie (name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

function DeleteCookie (name,path,domain) {
  if (GetCookie(name)) {
    document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}
