
/********************************************
 * Copyright (c) 2006 - 2008 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 : 2008-04-14T21:05:29+01:00 */

var uribase = 'http://www.geoffswift.com/';
var emailAddress = 'notwebmaster@geoffswift.com'.slice('not'.length);
_uacct = 'UA-477084-4';

/* 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);
}

/* 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);
}

/* 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";
  }
}
