/* MBP - Mobile boilerplate helper functions */
(function(document) {
	window.MBP = window.MBP || {}; 

	// Fix for iPhone viewport scale bug 
	// http://www.blog.highub.com/mobile-2/a-fix-for-iphone-viewport-scale-bug/

	MBP.viewportmeta = document.querySelector && document.querySelector('meta[name="viewport"]');
	MBP.ua = navigator.userAgent;

	MBP.scaleFix = function () {
		if (MBP.viewportmeta && /iPhone|iPad/.test(MBP.ua) && !/Opera Mini/.test(MBP.ua)) {
			MBP.viewportmeta.content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0";
			document.addEventListener("gesturestart", MBP.gestureStart, false);
		}
	};

	MBP.gestureStart = function () {
		MBP.viewportmeta.content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";
	};


	// Hide URL Bar for iOS and Android by Scott Jehl
	// https://gist.github.com/1183357

	MBP.hideUrlBar = function () {
		var win = window,
		doc = win.document;

		// If there's a hash, or addEventListener is undefined, stop here
		if(!location.hash || !win.addEventListener) {
			// scroll to 1
			window.scrollTo(0, 1);
			var scrollTop = 1,

			// reset to 0 on bodyready, if needed
			bodycheck = setInterval(function() {
				if (doc.body) {
					clearInterval(bodycheck);

					scrollTop = "scrollTop" in doc.body ? doc.body.scrollTop : 1;
					win.scrollTo(0, scrollTop === 1 ? 0 : 1);
				}
			}, 15);

			win.addEventListener("load", function() {
				setTimeout(function() {
					// reset to hide addr bar at onload
					win.scrollTo(0, scrollTop === 1 ? 0 : 1);
				}, 0);
			}, false);
		}
	};


	// Fast Buttons - read wiki below before using
	// https://github.com/shichuan/mobile-html5-boilerplate/wiki/JavaScript-Helper

	MBP.fastButton = function (element, handler) {
		this.element = element;
		this.handler = handler;

		if (element.addEventListener) {
			element.addEventListener('touchstart', this, false);
			element.addEventListener('click', this, false);
		}
	};

	MBP.fastButton.prototype.handleEvent = function(event) {
		switch (event.type) {
			case 'touchstart': this.onTouchStart(event); break;
			case 'touchmove': this.onTouchMove(event); break;
			case 'touchend': this.onClick(event); break;
			case 'click': this.onClick(event); break;
		}
	};

	MBP.fastButton.prototype.onTouchStart = function(event) {
		event.stopPropagation();

		this.element.addEventListener('touchend', this, false);
		document.body.addEventListener('touchmove', this, false);

		this.startX = event.touches[0].clientX;
		this.startY = event.touches[0].clientY;
		this.element.style.backgroundColor = "rgba(0,0,0,.7)";
	};

	MBP.fastButton.prototype.onTouchMove = function(event) {
		if (Math.abs(event.touches[0].clientX - this.startX) > 10 || Math.abs(event.touches[0].clientY - this.startY) > 10) {
			this.reset();
		}
	};

	MBP.fastButton.prototype.onClick = function(event) {
		event.stopPropagation();
		this.reset();
		this.handler(event);

		if (event.type == 'touchend') {
			MBP.preventGhostClick(this.startX, this.startY);
		}

		this.element.style.backgroundColor = "";
	};

	MBP.fastButton.prototype.reset = function() {
		this.element.removeEventListener('touchend', this, false);
		document.body.removeEventListener('touchmove', this, false);
		this.element.style.backgroundColor = "";
	};

	MBP.preventGhostClick = function (x, y) {
		MBP.coords.push(x, y);
		window.setTimeout(function () {
			MBP.coords.splice(0, 2);
		}, 2500);
	};

	MBP.ghostClickHandler = function (event) {
		for (var iCnt = 0, iLen = MBP.coords.length; iCnt < iLen; iCnt += 2) {
			var x = MBP.coords[iCnt];
			var y = MBP.coords[iCnt + 1];

			if (Math.abs(event.clientX - x) < 25 && Math.abs(event.clientY - y) < 25) {
				event.stopPropagation();
				event.preventDefault();
			}
		}
	};


	if (document.addEventListener) {
		document.addEventListener('click', MBP.ghostClickHandler, true);
	}

	MBP.coords = [];


	// iOS Startup Image
	// https://github.com/shichuan/mobile-html5-boilerplate/issues#issue/2

	MBP.splash = function () {
		var filename = navigator.platform === 'iPad' ? 'h/' : 'l/';
		document.write('<link rel="apple-touch-startup-image" href="/img/' + filename + 'splash.png" />' );
	};


	// Autogrow
	// http://googlecode.blogspot.com/2009/07/gmail-for-mobile-html5-series.html

	MBP.autogrow = function (element, lh) {
		function handler(e) {
			var newHeight = this.scrollHeight, currentHeight = this.clientHeight;

			if (newHeight > currentHeight) {
				this.style.height = newHeight + 3 * textLineHeight + "px";
			}
		}

		var setLineHeight = (lh) ? lh : 12;
		var textLineHeight = element.currentStyle ? element.currentStyle.lineHeight : getComputedStyle(element, null).lineHeight;

		textLineHeight = (textLineHeight.indexOf("px") == -1) ? setLineHeight : parseInt(textLineHeight, 10);

		element.style.overflow = "hidden";
		element.addEventListener ? element.addEventListener('keyup', handler, false) : element.attachEvent('onkeyup', handler);
	};
})(document);


/********** LUDENS ************************************************/
	$$('a[href$="#"]').addEvent('click', function() { return false; });

	window.addEvent('domready', function() {
		// iPhone Scale Bug Fix, read this when using http://www.blog.highub.com/mobile-2/a-fix-for-iphone-viewport-scale-bug/
		MBP.scaleFix();


		// Only use HTML5 form placeholders on mobile devices
		if (iViewportWidth > 463) {
			$$('form [placeholder]').removeProperty('placeholder');
		} else {
			// === Mobile devices ==========


			// Links which turn on the appearance of forms lower on the page, should scroll to them on mobile to give focus
			if ($$('#map_info_1 a.directeopvangicon')[0]) {
				$$('#map_info_1 a.directeopvangicon').addEvent('click', function() {
					var fxScrollDown = new Fx.Scroll(window, {duration: 800}).toElement('quickFormBox');
				});
			}


			// Table lists of locations are too wide - get rid of one hyperlink after copying its value to another
			if ($$('.tblScholen tr td:first-child a')[0] && $$('.tblScholen tr td:last-child a')[0]) {
				$$('.tblScholen tr td:first-child a').each(function(oLink) {
					var oOtherLink = oLink.getParent().getSiblings('td:last-child').getChildren('a');
					if (oOtherLink[0]) {
						oLink.set('href', oOtherLink[0].get('href'));
						oLink.removeProperty('rel');
						oLink.removeClass('multibox');
					}
				});
			}
		}


		// Toggle the display of the main menu
		$$('#top a.menu').addEvent('click', fToggleMenu);
	});


	function fToggleMenu() {
		var oMenu = $('mainLeft');

		if (oMenu.getStyle('display') == 'none') {
			oMenu.setStyle('display', 'inline-block');
			$$('#container [id!="mainLeft"]').addEvent('click', fToggleMenu);
		} else {
			oMenu.setStyle('display', 'none');

			$$('#container [id!="mainLeft"]').removeEvent('click', fToggleMenu);
			$$('#top a.menu').addEvent('click', fToggleMenu);
		}
	}
