
window.isIE6 = /MSIE\s6/.test(navigator.userAgent);
window.isIE = /MSIE/.test(navigator.userAgent);

window.addEvent('domready', function() {
	new EpeNav();
	new EpeHomeNav();
	new EpeMenu();
	fixLayout();
});

window.addEvent('resize', function() {
	fixLayout();
});

var current = {y1: 0, y2: 0};
function fixLayout() {
	if ($E('body').id == 'pHome') {
		return;
	}

	var y1 = window.getSize().size.y;
	if (current.y1 == y1) {
		return;
	}
	var y2 = $('footer').getPosition().y + 200;
	var bottom = window.isIE6 ? '-1' : '0';
	if (y2 < y1) {
		$('footer').setStyles({
			position: 'absolute',
			bottom: bottom
		})
	}
	else {
		$('footer').setStyles({
			position: '',
			bottom: ''
		})
	}
	current.y1 = window.getSize().size.y;
	//current.y2 = $('footer').getPosition().y + 200;
}

var EpeHomeNav = new Class({
	initialize: function () {
		var e = $('homeContent');
		if (!e) {
			return;
		}
		this.offset = $('homeContent').getPosition().y;
		var navs = $ES('#homeContent li a');
		var me = this;
		navs.each(function (nav, i) {
			nav.addEvent('mouseenter', me.enter.bindWithEvent(me, nav));
			nav.addEvent('mouseleave', me.leave.bindWithEvent(me, nav));
		});
	},
	enter: function (evt, e) {
		var y = e.getPosition().y - this.offset;
		$('homeArrow').setStyles({
			top: y,
			display: 'block'
		});
	},
	leave: function (evt, e) {
		$('homeArrow').setStyles({
			display: 'none'
		});
	}
});


var EpeNav = new Class({
	initialize: function () {
		var navs = $$('#navigation li a');
		var subnavs = $$('#navigation li li a');
		var activeIndex = -2;
		var me = this;

		var cleanedNavs = [];
		navs.each(function (nav) {
			if (subnavs.contains(nav)) {
				return;
			}
			cleanedNavs.push(nav);
		});
		navs = cleanedNavs;

		subnavs.each(function (subnav) {
			if (subnav.hasClass('active')) {
				subnav.getParent().getParent().setStyles({display: 'block'});
				var nav = subnav.getParent().getParent().getParent().getElement('a');
				nav.addClass('subnormal');
				nav.getParent().removeClass('bot');
			}
		});

		navs.each(function (nav, i) {
			if (nav.hasClass('active')) {
				nav.removeClass('active');
				nav.addClass('current');
			}
			nav.addEvent('mouseenter', me.enter.bindWithEvent(me, nav));
			nav.addEvent('mouseleave', me.leave.bindWithEvent(me, nav));

			// see if this nav has a subnav
			var ul = nav.getParent().getElement('ul');
			if (ul) {
				nav.addEvent('click', me.click.bindWithEvent(me, [nav, ul]));
			}

			if (i > 0) {
				var ul = $E('ul', navs[i - 1].getParent());
                if (ul && ul.getStyle('display') == 'block') {					
                var a = $ES('a', ul).getLast();
					if (a.hasClass('active')) {
						nav.addClass('normalsubactive');
					}
					else {
						nav.addClass('normalsubnormal');
					}
					return;
				}
			}

			if (nav.hasClass('current')) {
				activeIndex = i;
				nav.addClass('activenormal');
			}

			if (i == activeIndex + 1) {
				nav.addClass('normalactive');
			}
		});

		subnavs.each(function (nav) {
			nav.addEvent('mouseenter', me.enter.bindWithEvent(me, [nav, true]));
			nav.addEvent('mouseleave', me.leave.bindWithEvent(me, [nav, true]));
		});

		this.active = activeIndex;
		this.subnavs = subnavs;
		this.navs = navs;
	},
	getIndex: function (e) {
		var j = 0;
		this.navs.each(function (nav, i) {
			if (nav == e) {
				j = i;
				return;
			}
		});
		return j;
	},
	click: function (evt, nav, ul) {
		evt.stop();
		var hide = ul.getStyle('display') == 'block';
		if (hide) {
			if (nav == this.navs.getLast()) {
				nav.getParent().addClass('bot');
			}
			ul.setStyles({display: 'none'});

			var c = 'activenormal';
			if (nav.hasClass('subactive')) {
				c = 'activeactive';
				nav.removeClass('subactive');
			}
			else if (nav.hasClass('subsubnormal')) {
				c = 'activesubnormal';
				nav.removeClass('subsubnormal');
			}
			else if (nav.hasClass('subsubactive')) {
				c = 'activesubactive';
				nav.removeClass('subsubactive');
			}
			nav.addClass(c);
			nav.removeClass('subnormal');

			// check the last subnav
			var j = this.getIndex(nav) + 1;
			if (j < this.navs.length) {
				var e = this.navs[j];
				if (ul.getElements('a').getLast().hasClass('active')) {
					e.addClass('normalactive');
					e.removeClass('normalsubactive');
					e.removeClass('normalsubnormal');
				}
				else {
					if (e.hasClass('normalsubnormal')) {
						e.addClass('normalactive');
						e.removeClass('normalsubnormal');
					}
					else if (e.hasClass('activesubnormal')) {
						e.addClass('activeactive');
						e.removeClass('activesubnormal');
					}
				}
			}
		}
		else {
			ul.setStyles({display: 'block'});
			if (nav.getParent().hasClass('bot')) {
				nav.getParent().removeClass('bot');
			}

			var c = 'subnormal';
			if (nav.hasClass('activeactive')) {
				c = 'subactive';
				nav.removeClass('activeactive');
			}
			else if (nav.hasClass('activesubnormal')) {
				c = 'subsubnormal';
				nav.removeClass('activesubnormal');
			}
			else if (nav.hasClass('activesubactive')) {
				c = 'subsubactive';
				nav.removeClass('activesubactive');
			}
			nav.addClass(c);
			nav.removeClass('activenormal');
			/*
			if (nav.hasClass('activeactive')) {
				nav.removeClass('activeactive');
				nav.addClass('subactive');
			}
			*/

			// check the last subnav
			var j = this.getIndex(nav) + 1;
			if (j < this.navs.length) {
				var e = this.navs[j];
				if (ul.getElements('a').getLast().hasClass('active')) {
				}
				else {
					if (e.hasClass('normalactive')) {
						e.removeClass('normalactive');
						e.addClass('normalsubnormal');
					}
					else if (e.hasClass('activeactive')) {
						e.removeClass('activeactive');
						e.addClass('activesubnormal');
					}
				}
			}
		}
	},
	enter: function (evt, e, subnav) {
		if (subnav) {
			var navLinks = e.getParent().getParent().getParent().getElements('a');
			if (navLinks.getLast() != e) {
				return;
			}
			var nav = navLinks[0];

			var j = this.getIndex(nav) + 1;
			if (j < this.navs.length) {
				var e = this.navs[j];
				var c = 'normalsubactive';
				if (e.hasClass('activesubnormal')) {
					c = 'activesubactive';
				}
				e.addClass(c);

				e.removeClass('normalsubnormal');
				e.removeClass('activesubnormal');
			}
			return;
		}
		var c = 'activenormal';
		if (e.hasClass('normalactive')) {
			c = 'activeactive';
		}
		else if (e.hasClass('normalsubnormal')) {
			c = 'activesubnormal';
		}
		else if (e.hasClass('normalsubactive')) {
			c = 'activesubactive';
		}
		else if (e.hasClass('subnormal') || e.hasClass('subactive') || e.hasClass('subsubnormal') || e.hasClass('subsubactive')) {
			c = '';
		}
		e.addClass(c);

		e.removeClass('normalactive');
		e.removeClass('normalsubnormal');
		e.removeClass('normalsubactive');

		var j = this.getIndex(e) + 1;
		if (j < this.navs.length) {
			var e = this.navs[j];
			var c = 'normalactive';
			if (e.hasClass('activenormal')) {
				c = 'activeactive';
				e.removeClass('activenormal');
			}
			else if (e.hasClass('subnormal')) {
				c = 'subactive';
				e.removeClass('subnormal');
			}
			else if (e.hasClass('normalsubnormal') || e.hasClass('normalsubactive') || e.hasClass('activesubnormal') || e.hasClass('activesubactive')) {
				c = '';
			}
			e.addClass(c);
		}
	},
	leave: function (evt, e, subnav) {
		if (subnav || e.hasClass('current')) {
			var navLinks = e.getParent().getParent().getParent().getElements('a');
			if (navLinks.getLast() != e || e.hasClass('active')) {
				return;
			}
			var nav = navLinks[0];

			var j = this.getIndex(nav) + 1;
			if (j < this.navs.length) {
				var e = this.navs[j];
				var c = 'normalsubnormal';
				if (e.hasClass('activesubactive')) {
					c = 'activesubnormal';
				}
				e.addClass(c);

				e.removeClass('normalsubactive');
				e.removeClass('activesubactive');
			}
			return;
		}
		var c = '';
		if (e.hasClass('activeactive')) {
			c = 'normalactive';
		}
		else if (e.hasClass('activesubnormal')) {
			c = 'normalsubnormal';
		}
		else if (e.hasClass('activesubactive')) {
			c = 'normalsubactive';
		}
		e.addClass(c);
		
		e.removeClass('activenormal');
		e.removeClass('activeactive');
		e.removeClass('activesubactive');
		e.removeClass('activesubnormal');

		var j = this.getIndex(e) + 1;
		if (j < this.navs.length) {
			var e = this.navs[j];
			var c = 'normalnormal';
			if (e.hasClass('activeactive')) {
				c = 'activenormal';
				e.removeClass('activeactive');
			}
			else if (e.hasClass('subactive')) {
				c = 'subnormal';
				e.removeClass('subactive');
			}
			else if (e.hasClass('normalsubnormal') || e.hasClass('normalsubactive') || e.hasClass('activesubnormal') || e.hasClass('activesubactive')) {
				c = '';
			}
			e.removeClass('normalactive');
			e.addClass(c);
		}
	}
});

/*
var EpeNav = new Class({
	initialize: function () {
		var navs = $$('#navigation li a');
		var subnavs = $$('#navigation li li a');
		var activeIndex = -2;
		var me = this;

		var cleanedNavs = [];
		navs.each(function (nav) {
			if (subnavs.contains(nav)) {
				return;
			}
			cleanedNavs.push(nav);
		});
		navs = cleanedNavs;

		navs.each(function (nav, i) {
			nav.addEvent('mouseenter', me.enter.bindWithEvent(me, nav));
			nav.addEvent('mouseleave', me.leave.bindWithEvent(me, nav));

			if (i > 0) {
				var ul = $E('ul', navs[i - 1].getParent());
				if (ul) {
					var a = $ES('a', ul).getLast();
					if (a.hasClass('active')) {
						nav.addClass('normalsubactive');
					}
					else {
						nav.addClass('normalsubnormal');
					}
					return;
				}
			}

			if (nav.hasClass('active')) {
				activeIndex = i;
				nav.addClass('activenormal');
			}
			else if (nav.hasClass('sub')) {
				activeIndex = i;
				nav.addClass('subnormal');
			}
			if (i == activeIndex + 1) {
				nav.addClass('normalactive');
			}
		});

		subnavs.each(function (nav) {
			nav.addEvent('mouseenter', me.enter.bindWithEvent(me, [nav, true]));
			nav.addEvent('mouseleave', me.leave.bindWithEvent(me, [nav, true]));
		});

		this.active = activeIndex;
		this.navs = navs;
	},
	getIndex: function (e) {
		var j = 0;
		this.navs.each(function (nav, i) {
			if (nav == e) {
				j = i;
				return;
			}
		});
		return j;
	},
	enter: function (evt, e, subnav) {
		if (subnav) {
			var navLinks = e.getParent().getParent().getParent().getElements('a');
			if (navLinks.getLast() != e) {
				return;
			}
			var nav = navLinks[0];

			var j = this.getIndex(nav) + 1;
			if (j < this.navs.length) {
				var e = this.navs[j];
				e.addClass('normalsubactive');
			}
			return;
		}
		var c = 'hovernormal';
		if (e.hasClass('normalactive')) {
			c = 'hoveractive';
		}
		else if (e.hasClass('normalsubnormal')) {
			c = 'hoversubnormal';
		}
		else if (e.hasClass('normalsubactive')) {
			c = 'hoversubactive';
		}

		e.addClass(c);

		var j = this.getIndex(e) + 1;
		if (j < this.navs.length) {
			var e = this.navs[j];
			var c = 'normalhover';
			if (e.hasClass('activenormal')) {
				c = 'activehover';
			}
			else if (e.hasClass('subnormal')) {
				c = 'subhover';
			}
			e.addClass(c);
		}
	},
	leave: function (evt, e, subnav) {
		if (subnav) {
			var navLinks = e.getParent().getParent().getParent().getElements('a');
			if (navLinks.getLast() != e || e.hasClass('active')) {
				return;
			}
			var nav = navLinks[0];

			var j = this.getIndex(nav) + 1;
			if (j < this.navs.length) {
				var e = this.navs[j];
				e.removeClass('normalsubactive');
			}
			return;
		}
		e.removeClass('hoveractive');
		e.removeClass('hovernormal');
		e.removeClass('hoversubnormal');
		e.removeClass('hoversubactive');

		var j = this.getIndex(e) + 1;
		if (j < this.navs.length) {
			var e = this.navs[j];
			e.removeClass('activehover');
			e.removeClass('normalhover');
			e.removeClass('subhover');
		}
	}
});
*/

var EpeMenu = new Class({
	initialize: function () {
		var submenus = $ES('#header .submenu');
		var me = this;
		this.shadows = ['nw', 'nn', 'ne', 'ee', 'se', 'ss', 'sw', 'ww'];
		this.submenus = submenus;


		// set the menu to be in position but hidden so that the sizes will be calculated correctly
		this.submenus.each(function (submenu) {
			submenu.setStyles({
				display: 'block',
				visibility: 'hidden'
			})
		});

		if (window.isIE) {
			this.prepForIE();
		}

		// do the setup required for all browsers
		this.submenus.each(function (submenu) {
			var s = {};
			me.shadows.each(function (shadow) {
				var e = $(document.createElement('div'));
				e.addClass(shadow.toString());
				submenu.appendChild(e);
				e.size =  e.getSize().size;
				s[shadow] = e;
			});

			//$E('li', submenu).addClass('first');

			var size = submenu.getSize().size;
			var offset = {x: 0, y: 9};

			s.nn.setStyles({
				width: size.x - s.nw.size.x - s.ne.size.x - offset.x
			})
			s.ee.setStyles({
				height: size.y - s.ne.size.y - s.se.size.y - offset.y
			})
			s.ss.setStyles({
				width: size.x - s.sw.size.x - s.se.size.x - offset.x
			})
			s.ww.setStyles({
				height: size.y - s.nw.size.y - s.sw.size.y - offset.y
			})
		});

		if (window.isIE6) {
			this.prepForIE6();
		}

		// hide the menu again
		this.submenus.each(function (submenu) {
			submenu.setStyles({
				display: '',
				visibility: ''
			})
		});
	},
	prepForIE: function () {
		var offset = 0;
		if (window.isIE6) {
			offset = 1;
		}
		this.submenus.each(function (submenu) {
			var paddings = $E('a', submenu).getStyles('paddingLeft', 'paddingRight');
			var width = $E('li', submenu).getSize().size.x - parseInt(paddings.paddingLeft) - parseInt(paddings.paddingRight) + offset;
			$ES('a', submenu).each(function (e) {
				e.setStyles({
					width: width
				});
			});
		});
	},
	prepForIE6: function () {
		var me = this;
		var regex = /url\(['"](.*)['"]\)/;
		this.submenus.each(function (submenu) {
			var p = submenu.getParent();
			p.addEvent('mouseenter', function () {submenu.setStyles({display: 'block'})});
			p.addEvent('mouseleave', function () {submenu.setStyles({display: ''})});
			me.shadows.each(function (shadow) {
				var shadow = $E('.' + shadow, submenu);
				var matches = regex.exec(shadow.getStyle('backgroundImage'));
				if (matches) {
					shadow.setStyles({
						background: 'none',
						filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod="crop", src="' + matches[1] + '")'
					})
				}
			});
		});
	}
});

function checkForm() {
	var errorMsg;
	var badFields = new Array();

	var f = {
		name: 'field1636715',
		address1: 'field1636716',
		city: 'field1636719',
		postcode: 'field1636721',
		email: 'field1636722'
	}
	
	if (document.getElementById(f.name).value == '') {
		badFields.push({id: f.name, name: 'Name'});
	}
	if (document.getElementById(f.address1).value == '') {
		badFields.push({id: f.address1, name: 'Address 1'});
	}
	if (document.getElementById(f.city).value == '') {
		badFields.push({id: f.city, name: 'City'});
	}
	if (document.getElementById(f.postcode).value == '') {
		badFields.push({id: f.postcode, name: 'Postcode'});
	}
	if (!document.getElementById(f.email).value.match(/.+\@.+\..+/)) {
		badFields.push({id: f.email, name: 'Email'});
	}

	var badFieldsLength = badFields.length;
	if (badFieldsLength > 0) {
		errorMsg = 'The following fields do not appear to be valid:\n';
		for (i = 0; i < badFieldsLength; i++) {
			errorMsg += '- ' + badFields[i].name + '\n';
		}
		// damn FF bug 236791
		document.getElementById(badFields[0].id).setAttribute('autocomplete', 'off');
		document.getElementById(badFields[0].id).focus();
		document.getElementById(badFields[0].id).setAttribute('autocomplete', '');
		alert(errorMsg);
		return false;
	}
	else {
		return true;
	}
}

function checkForm2() {
	var errorMsg;
	var badFields = new Array();

	var f = {
		name: 'field1657950',
		address1: 'field1657951',
		city: 'field1657954',
		postcode: 'field1657956',
		email: 'field1657957'
	}
	
	if (document.getElementById(f.name).value == '') {
		badFields.push({id: f.name, name: 'Name'});
	}
	if (document.getElementById(f.address1).value == '') {
		badFields.push({id: f.address1, name: 'Address 1'});
	}
	if (document.getElementById(f.city).value == '') {
		badFields.push({id: f.city, name: 'City'});
	}
	if (document.getElementById(f.postcode).value == '') {
		badFields.push({id: f.postcode, name: 'Postcode'});
	}
	if (!document.getElementById(f.email).value.match(/.+\@.+\..+/)) {
		badFields.push({id: f.email, name: 'Email'});
	}

	var badFieldsLength = badFields.length;
	if (badFieldsLength > 0) {
		errorMsg = 'The following fields do not appear to be valid:\n';
		for (i = 0; i < badFieldsLength; i++) {
			errorMsg += '- ' + badFields[i].name + '\n';
		}
		// damn FF bug 236791
		document.getElementById(badFields[0].id).setAttribute('autocomplete', 'off');
		document.getElementById(badFields[0].id).focus();
		document.getElementById(badFields[0].id).setAttribute('autocomplete', '');
		alert(errorMsg);
		return false;
	}
	else {
		return true;
	}
}