var rootPath = (window.location.toString().indexOf('/html/') >= 0) ? '../' : '';
var flashPath = rootPath + 'flash/';
var swfInstallFile = flashPath + 'swfobject-2.1/expressInstall.swf';
var flashVersion = '9.0.0';
var flashParams = {wmode: 'opaque', quality: 'high'};

if (/MSIE/.test(navigator.userAgent)) {
	document.write('<style type="text/css">.quote {display: none}</style>');
	document.write('<style type="text/css">#homeNews li {display: none}</style>');
}

window.addEvent('domready', function() {
	new SubMenu('navbar');
	new QuotesDisplayer('homeNews', {defaultElementDisplay: 'inline'});

	var nb4 = $('nb4');
	var nb5 = $('nb5');
	if (nb4 && nb5) {
		if (nb4.hasClass('on')) {
			nb5.addClass('adjacentOn');
		}
		else if (nb5.hasClass('on')) {
			nb4.addEvent('mouseenter', function () { nb5.toggleClass('adjacentOn'); });
			nb4.addEvent('mouseleave', function () { nb5.toggleClass('adjacentOn'); });
		}
	}

	//flash
	if ($('homeBanner')) {
		var langs  = ['de', 'en', 'es', 'fr', 'it'];
		var lang = 'en';
		langs.each(function (l) {
			if (window.location.toString().indexOf('/' + l + '/') >= 0) {
				lang = l;
			}
		});
		var version = '';
		$A(document.styleSheets).each(function (ss) {
			if (ss.href.indexOf('-v3.css') >= 0 || ss.href.indexOf('-v4.css') >= 0) {
				version = '-v3';
			}
		});
		swfobject.embedSWF(flashPath + 'quadriga_web_banner_' + lang + version + '.swf', 'flashBanner', '974', '244', flashVersion, swfInstallFile, {}, flashParams);
	}
	var flashIndex = 0;
	$$('a.startFlashVideo').each(function(e) {
		//get the src of the link
		var swf = e.getAttribute('href');
		if (/\.swf$/.test(swf)) {
			//swfobject require the dom element to be replaced to have an id, so add one if necessary
			var eId = e.getAttribute('id');
			if (!eId) {
				eId = 'startFlashVideo' + ++flashIndex;
				e.setAttribute('id', eId);
			}
			eParent = e.getParent();
			swfWidth = 0;
			swfHeight = 0;
			if (eParent.hasClass('sideImage') || eParent.hasClass('flashPosition')) {
				swfWidth = 156;
				swfHeight = 120;
			}

			if (swfWidth && swfHeight) {
				swfobject.embedSWF(swf, eId, swfWidth, swfHeight, flashVersion, swfInstallFile, {}, flashParams);
			}
		}
	});

	//select links
	$$('select.goto').each(function(e) {
		e.addEvent('change', function() {
			if (this.value != '') {
				window.location = this.value;
			}
		});
	});

	//lightbox
	Slimbox.scanPage();

	//random quote
	new ElementRandomiser($$('.quote'));

	// extranet login box
	var el = $('extranet-login');
	if (el) {
		el.getElements('h3 a').addEvent('click', function (evt) {
			evt.stop();
			$('extranet-login').toggleClass('extranet-login-closed');
		});
		new ClearField('extranet-login-username', ['username']);
		$('extranet-login-placeholder').addEvent('focus', function () {
			$('extranet-login-placeholder').setStyle('display', 'none');
			var e = $('extranet-login-password');
			$('extranet-login-password').setStyle('display', 'inline').focus();
		});
	}


	if (typeof DD_belatedPNG != 'undefined') {
		DD_belatedPNG.fix('.png');
	}

	// Images scrolling on Sensiq pages
	var imageScroll = $('imageScroll');
	if (imageScroll && imageScroll.getChildren().length > 2) {
		new Jp_Slider(null, 'imageScroll', {
			updateUrl: false,
			duration: 1500,
			period: 6000,
			onTargetUpdated: function() {
				this.getPrevious().inject(this.innerContainer);
				this.goTo(this.currentTarget, true);
			}
		});
	}

	// Home page 2010 scrolling (latest news and blog entries)
	homeScrollersOptions = {
		updateUrl: false,
		duration: 1500,
		fastDuration: 250,
		period: 6000
	};
	blogPostsTriggers = $$('#blog-posts-triggers a');
	if (blogPostsTriggers && blogPostsTriggers.length) {
		new Jp_Slider(blogPostsTriggers, 'blog-posts-container', homeScrollersOptions);
	}
	blogPostsTriggers = $$('#news-triggers a');
	if (blogPostsTriggers && blogPostsTriggers.length) {
		new Jp_Slider(blogPostsTriggers, 'news-container', homeScrollersOptions);
	}

	// home page 2010 tabs
	var el = $('tabProducts');
	if (el) {
		var togglers = el.getElements('.tabs a');
		var elements = el.getElements('.product-tab');
		new TabbedContent(togglers, elements);
	}
});


var TabbedContent = new Class({
	togglers: [],
	elements: [],
	initialize: function(togglers, elements) {
		this.togglers = togglers;
		this.elements = elements;
		this.togglers.addEvent('click', this.togglerClickListener.bindWithEvent(this));
		this.show(0);
	},
	show: function (n) {
		this.togglers.removeClass('on');
		this.togglers[n].addClass('on');
		this.elements.setStyle('display', 'none');
		this.elements[n].setStyle('display', 'block');
	},
	togglerClickListener: function (evt) {
		evt.stop();
		this.togglers.each(function (toggler, i) {
			if (toggler == evt.target) {
				this.show(i);
			}
		}, this);
	}
});

var ClearField = new Class({
	element: null,
	nullvalues: [],
	cleared: false,
	initialValue : '',
	initialize: function(element, nullvalues){
		this.element = $(element);
		this.nullvalues = nullvalues || [];
		if (!this.element) {
			return;
		}

		this.initialValue = this.element.value;
		this.element.addEvent('focus', function() {
			this.clearDefault();
		}.bind(this));
		this.element.addEvent('blur', function() {
			this.setToDefault();
		}.bind(this));
	},
	getValue: function(actual) {
		var value = this.element.value;
		if (!actual) {
			var i = 0;
			while (i < this.nullvalues.length) {
				if (value == this.nullvalues[i]) {
					value = '';
					break;
				}
				i++;
			}
		}
		return value;
	},
	clearDefault: function() {
		if (this.element && !this.cleared) {
			this.element.value = '';
		}
		this.cleared = true;
	},
	setToDefault: function () {
		if (this.getValue(true) == '') {
			this.element.value = this.initialValue;
			this.cleared = false;
		}
	}
});

Slimbox.scanPage = function() {
	var links = $$("a").filter(function(el) {
		return el.rel && (el.rel.test(/^lightbox/i) || el.rel.test(/^movie_\d+_\d+$/i));
	});
	var linkMapper = function(el) {
		return [el.href, el.title, el.rel];
	};
	$$(links).slimbox({/* Put custom options here */}, linkMapper, function(el) {
		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
	});
};

var SubMenu = new Class({
	Implements: Options,
	menuBarId: 'menu',
	options: {
		addShadow: true,
		glow: false
	},
	initialize: function (menuBarId, options) {
		this.setOptions(options);
		this.menuBarId = menuBarId || this.menuBarId;
		var submenus = $$('#' + this.menuBarId +  ' .submenu');
		if (this.options.glow) {
			this.shadows = ['ne', 'ee', 'se', 'ss', 'sw', 'ww', 'nw', 'nn'];
		}
		else {
			this.shadows = ['ne', 'ee', 'se', 'ss', 'sw'];
		}
		this.submenus = submenus;

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

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

		// do the setup required for all browsers
		this.submenus.each(function (submenu) {
			var topLink = submenu.getElement('a');
			if (topLink) {
				topLink.addClass('top');
			}

			// set the width - required for proper operation in IE
			var w1 = submenu.getSize().x - parseInt(submenu.getStyle('paddingLeft')) - parseInt(submenu.getStyle('paddingRight'));
			var w2 = submenu.getParent().getSize().x;
			submenu.setStyles({
				width: w1 > w2 ? w1 : w2
			});

			var s = {};

			//add shadows
			if (this.options.addShadow) {
				this.shadows.each(function (shadow) {
					var e = $(document.createElement('div'));
					e.addClass(shadow.toString());
					submenu.appendChild(e);
					e.size = e.getSize();
					s[shadow] = e;
				});

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

				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
				});
				if (this.options.glow) {
					s.ww.setStyles({
						height: size.y - s.nw.size.y -  s.sw.size.y - offset.y
					});
					s.nn.setStyles({
						width: size.x - s.nw.size.x - s.ne.size.x - offset.x
					});
				}
			}
		}, this);

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

		// hide the menu again
		this.submenus.each(function (submenu) {
			submenu.setStyles({
				display: '',
				visibility: ''
			})
		});
	},
	prepForIE6: function () {
		$$('#' + this.menuBarId +  ' li').each(function (e) {
			e.addEvent('mouseenter', function () {e.addClass('hover')});
			e.addEvent('mouseleave', function () {e.removeClass('hover')});
		});

		var regex = /url\(['"](.*)['"]\)/;
		this.submenus.each(function (submenu) {
			var p = submenu.getParent();

			var size = submenu.getSize();
			//p.addEvent('mouseenter', function () {submenu.setStyles({display: 'block'})});
			//p.addEvent('mouseleave', function () {submenu.setStyles({display: ''})});

			if (this.options.addShadow) {
				this.shadows.each(function (shadow) {
					var e = submenu.getElement('.' + shadow);
					if (shadow.substr(0, 1) == 's') {
						e.setStyles({
							bottom: 'auto',
							top: size.y - e.getSize().y - parseInt(e.getStyle('bottom'))
						})
					}
					if (shadow.substr(1, 1) == 'e') {
						e.setStyles({
							right: 'auto',
							left: size.x - e.getSize().x - parseInt(e.getStyle('right'))
						})
					}

					var matches = regex.exec(e.getStyle('backgroundImage'));
					if (matches) {
						e.setStyles({
							background: 'none',
							filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod="crop", src="' + matches[1] + '")'
						})
					}
				});
			}

			var as = submenu.getElementsByTagName('a');
			preloadedImages = [];
			$A(as).each(function (e) {
				e = $(e);
				var matches = regex.exec(e.getStyle('backgroundImage'));
				if (matches) {
					var img = matches[1].replace('.png', '_ie6.png');
					var hoverImg = matches[1].replace('.png', '_hover.png');
					e.setStyles({
						background: 'none',
						cursor: 'pointer',
						filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod="crop", src="' + img + '")'
					})

					e.addEvent('mouseenter', function () {e.setStyles({
						filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod="crop", src="' + hoverImg + '")'
					})});
					e.addEvent('mouseleave', function () {e.setStyles({
						filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod="crop", src="' + img + '")'
					})});

					//preload images
					preloadedImages.push(new Image());
					preloadedImages[preloadedImages.length - 1].src = img;
				}
			});
		}, this);
	}
});

var QuotesDisplayer = new Class({
	Implements: [Options, Events],
	elements: null,
	current: 0,
	moving: false,
	fx: null,
	elementDisplay: '',
	options: {
		delay: 5000,
		selector: 'li',
		property: 'opacity',
		onStart: Class.empty,
		onComplete: Class.empty,
		defaultElementDisplay: 'block'
	},
	initialize: function(element, options) {
		this.setOptions(options);

		element = $(element);
		if (!element) {
			return;
		}

		// get the elements
		this.elements = element.getElements(this.options.selector);

		// hide them all
		this.elements.each(function(e) {
			e.setStyles({
				opacity: '0',
				display: 'none'
			});
		}, this);

		this.next();
	},
	onHideStart: function (e) {
		this.moving = true;
	},
	onHideComplete: function (e) {
		e.setStyles({
			display: 'none'
		});

		this.moving = false;
		this.fireEvent('onComplete', this.current, 10);
		this.next.delay(10, this);
	},
	onShowStart: function (e) {
		e.setStyles({
			display: this.options.defaultElementDisplay
		});

		//reposition copy if too long
//		var copy = e.getFirst();
//		if (copy) {
//			if (copy.innerHTML.length > 200) {
//				e.getParent().setStyle('margin-top', '15px');
//			}
//			else {
//				e.getParent().setStyle('margin-top', '30px');
//			}
//		}

		this.moving = true;
		this.fireEvent('onStart', this.current, 10);
	},
	onShowComplete: function (e) {
		this.moving = false;
		this.hide.delay(this.options.delay, this);
	},
	hide: function () {
		if (this.moving) {
			return;
		}
		var element = this.elements[this.current - 1];
		options = this.options;
		options.onStart = this.onHideStart.bind(this);
		options.onComplete = this.onHideComplete.bind(this);
		this.fx = new Fx.Tween(element, this.options);
		this.fx.start(1, 0);
	},
	show: function (quote) {
		if (quote < 1 || quote > this.elements.length || this.moving) {
			return;
		}

		this.current = quote;
		var element = this.elements[this.current - 1];
		options = this.options;
		options.onStart = this.onShowStart.bind(this);
		options.onComplete = this.onShowComplete.bind(this);
		this.fx = new Fx.Tween(element, this.options);
		this.fx.start(0, 1);
	},
	next: function () {
		var quote = this.current + 1;
		this.show(quote > this.elements.length ? 1 : quote)
	}
});


var ElementRandomiser = new Class({
	initialize: function(elements) {
		var elementToDisplay = $random(0, elements.length - 1);
		for (var i = 0; i < elements.length; i++ ) {
			if (i == elementToDisplay) {
				var defaultDisplay = 'block';
				$(elements[i]).setStyle('display', defaultDisplay);
			}
			else {
				$(elements[i]).setStyle('display', 'none');
			}
		}
	}
});


function checkForm(frm) {
	frm = $(frm);

	// check all required fields
	var fields = frm.getElements('.jpFrmRequired');
	var error = 0;

	fields.each(function (e) {
		var bad = false;
		var type = e.type.toLowerCase();
		switch (type) {
			case 'select-one':
			case 'text':
			case 'password':
			case 'textarea':
			case 'file':
				bad = e.value == '' ? 1 : 0;
				if (!bad) {
					if (e.hasClass('jpFrmEmail')) {
						bad = e.value.match(/.+\@.+\..+/) ? 0 : 1;
					}
					else if (e.hasClass('jpFrmNumeric')) {
						bad = e.value.match(/\d+/) ? 0 : 1;
					}
				}
				break;
		}
		error += bad;
		if (bad) {
			// highlight field
			e.addClass('jpFrmError');
		}
		else {
			e.removeClass('jpFrmError');
		}
	});

	var msg = $('jpFrmMessage');
	if (error) {
		msg.setStyles({
			display: 'block'
		});
		return false;
	}
	/*
	msg.setStyles({
		display: 'none'
	});
	*/
	return true;
}