var AEGON = {
	flags: {
		browserCapable: function() {
			return !!(document.getElementById && document.createElement);
		}(),

		isIE: function() {
			var agent = navigator.userAgent.toLowerCase();
			return !!((agent.indexOf("msie") != -1) && (agent.indexOf("opera") == -1));
		}()
	},

	css: {
		getStyle: function(oElm, strCssRule){
			var strValue = "";
			if (document.defaultView && document.defaultView.getComputedStyle){
				strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
			}
			else if (oElm.currentStyle){
				strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1) {
					return p1.toUpperCase();
				});
				strValue = oElm.currentStyle[strCssRule];
			}
			return strValue;
		}
	},

	links: {
		popup: function (url, options, message) {
			if (message) {
				alert(message);
			}
			if (!options) {
				options = 'location=no,scrollbars=yes,menubar=no,toolbar=yes,resizable=yes,left=75,top=75,width=700,height=640';
			}
			window.open(url, 'smallWindow', options);
			return false;
		},

		createPopupLinks: function() {
			var anchors = AEGON.dom.getElementsBySelector('a[rel=help]');
			for (var i = 0; anchor = anchors[i]; i++) {
				if (anchor.title) {
					anchor.title += ' (opens in a new window)';
				}
				else {
					anchor.title = 'Opens in a new window'
				}
				anchor.onclick = function () {
					return AEGON.links.popup(this.href);
				};
			}
		}
	},

	dom: {
		/*
		The addLoadEvent and getElementsBySelector functions are copyright
		Simon Willison.
		*/
		addLoadEvent: function(func) {
			var oldonload = window.onload;
			if (typeof window.onload != 'function') {
				window.onload = func;
			}
			else {
				window.onload = function() {
					oldonload();
					func();
				}
			}
		},

		getElementsBySelector: function(selector) {
			function getAllChildren(e) {
				// Returns all children of element. Workaround required for IE5/Windows. Ugh.
				return e.all ? e.all : e.getElementsByTagName('*');
			}
			// Attempt to fail gracefully in lesser browsers
			if (!document.getElementsByTagName) {
				return new Array();
			}
			// Split selector in to tokens
			var tokens = selector.split(' ');
			var currentContext = new Array(document);
			for (var i = 0; i < tokens.length; i++) {
				token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
				if (token.indexOf('#') > -1) {
					// Token is an ID selector
					var bits = token.split('#');
					var tagName = bits[0];
					var id = bits[1];
					var element = document.getElementById(id);
					if (tagName && element.nodeName.toLowerCase() != tagName) {
						// tag with that ID not found, return false
						return new Array();
					}
					// Set currentContext to contain just this element
					currentContext = new Array(element);
					continue; // Skip to next token
				}
				if (token.indexOf('.') > -1) {
					// Token contains a class selector
					var bits = token.split('.');
					var tagName = bits[0];
					var className = bits[1];
					if (!tagName) {
						tagName = '*';
					}
					// Get elements matching tag, filter them for class selector
					var found = new Array;
					var foundCount = 0;
					for (var h = 0; h < currentContext.length; h++) {
						var elements;
						if (tagName == '*') {
							elements = getAllChildren(currentContext[h]);
						} else {
							elements = currentContext[h].getElementsByTagName(tagName);
						}
						for (var j = 0; j < elements.length; j++) {
							found[foundCount++] = elements[j];
						}
					}
					currentContext = new Array;
					var currentContextIndex = 0;
					for (var k = 0; k < found.length; k++) {
						if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
							currentContext[currentContextIndex++] = found[k];
						}
					}
					continue; // Skip to next token
				}
				// Code to deal with attribute selectors
				if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
					var tagName = RegExp.$1;
					var attrName = RegExp.$2;
					var attrOperator = RegExp.$3;
					var attrValue = RegExp.$4;
					if (!tagName) {
						tagName = '*';
					}
					// Grab all of the tagName elements within current context
					var found = new Array;
					var foundCount = 0;
					for (var h = 0; h < currentContext.length; h++) {
						var elements;
						if (tagName == '*') {
							elements = getAllChildren(currentContext[h]);
						} else {
							elements = currentContext[h].getElementsByTagName(tagName);
						}
						for (var j = 0; j < elements.length; j++) {
							found[foundCount++] = elements[j];
						}
					}
					currentContext = new Array;
					var currentContextIndex = 0;
					var checkFunction; // This function will be used to filter the elements
					switch (attrOperator) {
						case '=': // Equality
							checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
							break;
						case '~': // Match one of space seperated words 
							checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
							break;
						case '|': // Match start with value followed by optional hyphen
							checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
							break;
						case '^': // Match starts with value
							checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
							break;
						case '$': // Match ends with value - fails with "Warning" in Opera 7
							checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
							break;
						case '*': // Match ends with value
							checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
							break;
						default :
							// Just test for existence of attribute
							checkFunction = function(e) { return e.getAttribute(attrName); };
					}
					currentContext = new Array;
					var currentContextIndex = 0;
					for (var k = 0; k < found.length; k++) {
						if (checkFunction(found[k])) {
							currentContext[currentContextIndex++] = found[k];
						}
					}
					continue; // Skip to next token
				}

				if (!currentContext[0]){
					return;
				}

				// If we get here, token is JUST an element (not a class or ID selector)
				tagName = token;
				var found = new Array;
				var foundCount = 0;
				for (var h = 0; h < currentContext.length; h++) {
					var elements = currentContext[h].getElementsByTagName(tagName);
					for (var j = 0; j < elements.length; j++) {
						found[foundCount++] = elements[j];
					}
				}
				currentContext = found;
			}
			return currentContext;
		}
	},

	pages: {},

	initialise: function() {
		// Add the current year to the copyright statement in the footer.
		var today = new Date();
		var currentYear = today.getFullYear();
		if (currentYear < 2000) {
			currentYear += 1900;
		}
		var copyright = document.getElementById('copyright');
		for (var i = 0; j = copyright.childNodes[i]; i++) {
			copyright.removeChild(j);
		}
		copyright.innerHTML = '&#169; ' + currentYear + ' AEGON Scottish Equitable:';

		// Add an onclick event for each link that should be a popup.
		AEGON.links.createPopupLinks();
	}
}


// Dirty old popup code.
function popupPage(url) {
	return AEGON.links.popup(url);
}
function popupPageAl(url) {
	return AEGON.links.popup(url,
		'location=yes,scrollbars=yes,menubar=yes,toolbar=yes,resizable=yes,left=75,top=75,width=700,height=420',
		'AEGON Scottish Equitable: Member of the AEGON Group. Scottish Equitable plc is authorised and regulated by the Financial Services Authority.'
	);
}
function popupPageCl(url) {
	return AEGON.links.popup(url,
		'location=no,scrollbars=yes,menubar=yes,toolbar=yes,resizable=yes,left=75,top=75,width=800,height=420',
		"You are about to view pages over a secure connection.\rThe site is hosted by Medibureau Ltd who are employed by Scottish Equitable and comply with the Data Protection Act 1998."
	);
}

function popupform(myform, windowname){
	if (! window.focus)return true;
	window.open('', windowname, 'height=550,width=770,scrollbars=yes');
	myform.target=windowname;
	return true;
}

AEGON.dom.addLoadEvent(AEGON.initialise);