/* Adds a function to the load-event of the page */
var addOnload = function(func) {
	if (typeof window.onload == 'function') {
		var mOnLoad = window.onload;
		window.onload = function(){mOnLoad(); func();}
	} else window.onload = func;
}
/*
 * Sets, finds or removes cookies
 */function createCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + days * 86400000);
		var expires = ' expires=' + date.toGMTString() + ';';
	}
	else
		var expires = '';
	document.cookie = name + '=' + value + expires + '; path=/';
}

function existsCookie(name) {
	return (new RegExp(name + '=([^;]+)(;|$)', 'i')).test(document.cookie);
}

function removeCookie(name) {
	createCookie(name, '');
}
/* Wraps all buttons around 3 or 4 spans, depending on whether a class is present or not.
 * Click-events and classes present on the button are added to the link
 */
var createTextButton = function(object, className) {
	var spans = 4;
	var textButton = document.createElement('span');
	
	if (typeof className == 'string' && className != '')
		textButton.className = className + ' textButton';
	else
		textButton.className = 'textButton';
	
	textTarget = textButton;
	for (var j = 0; j < (spans - 1); j++) {
		textTarget = textTarget.appendChild(document.createElement('span'));
	}
	
	if (object.parentNode != null) {
		if (object.nextSibling != null)
			object.parentNode.insertBefore(textButton, object.nextSibling);
		else
			object.parentNode.appendChild(textButton);
		object.parentNode.removeChild(object);
	}

	textTarget.appendChild(object);

	return textButton;
}
var createLinkBasedTextButton = function(text, href, onclick, className) {
	var aLink = document.createElement('a');
	aLink.appendChild(document.createTextNode(text));
	aLink.href = href;
	if (typeof onclick == 'function')
		aLink.onclick = onclick;
	return createTextButton(aLink, className);
}
var replace = function() {
	var buttons = document.getElementsByTagName('button');
	var length = buttons.length;
	
	for(var i = 0; i < length; i++) {
		createTextButton(buttons[i]);
	}
}
var replaceCheckbox = function() {
	var projects = document.getElementById('projects');
	if (!projects) return;
	var divs = projects.getElementsByTagName('div');
	for(var i = 0; i < divs.length; i++) {
		if (divs[i].className == 'inputs') {
			/*divs[i].style.display = 'none';*/
			var onClick = function(e) {
				if (!e) e = window.event;
				this.getElementsByTagName('input')[0].checked = true;
				this.className = this.className + ' choosen';
				this.onclick = unClick;
				this.getElementsByTagName('input')[0].onclick = unCheckClick;
				return false;
			}
			var onCheckClick = function(e) {
				if (!e) e = window.event;
				this.parentNode.parentNode.className = this.parentNode.parentNode.className + ' choosen';
				this.onclick = unCheckClick;
				supressEvent(e);
			}
			var unClick = function(e) {
				if (!e) e = window.event;
				this.getElementsByTagName('input')[0].checked = false;
				this.className = this.className.replace(' choosen', '');
				this.onclick = onClick;
				this.getElementsByTagName('input')[0].onclick = onCheckClick;
				return false;
			} 
			var unCheckClick = function(e) {
				if (!e) e = window.event;
				this.parentNode.parentNode.className = this.parentNode.parentNode.className.replace(' choosen', '');
				this.onclick = onCheckClick;
				supressEvent(e);
			}
			
			divs[i].parentNode.className = divs[i].parentNode.className + ' js';
			if (divs[i].parentNode.getElementsByTagName('input')[0].checked) {
				divs[i].parentNode.className = divs[i].parentNode.className + ' choosen';
				divs[i].parentNode.onclick = unClick;
				divs[i].parentNode.getElementsByTagName('input')[0].onclick = unCheckClick;
			} else {
				divs[i].parentNode.onclick = onClick;
				divs[i].parentNode.getElementsByTagName('input')[0].onclick = onCheckClick;
			}
		}
	}
}
/*
 * Places a javascript activated inline popup for the loginform connected to the loginlink
 */
function fixAsBox(target) {
	var table = document.createElement('table');
	table.className = 'productBox';

	var tbody = table.appendChild(document.createElement('tbody'));
	
	var top = tbody.appendChild(document.createElement('tr'));
	top.className = 'top';
	top.appendChild(document.createElement('td')).className = 'left';
	top.appendChild(document.createElement('td')).className = 'middle';
	top.appendChild(document.createElement('td')).className = 'right';
	
	var box = tbody.appendChild(document.createElement('tr'));
	box.className = 'box';
	box.appendChild(document.createElement('td')).className = 'left';
	var content = box.appendChild(document.createElement('td'));
	content.className = 'content';
	box.appendChild(document.createElement('td')).className = 'right';

	var bottom = tbody.appendChild(document.createElement('tr'));
	bottom.className = 'bottom';
	bottom.appendChild(document.createElement('td')).className = 'left';
	bottom.appendChild(document.createElement('td')).className = 'middle';
	bottom.appendChild(document.createElement('td')).className = 'right';

	target.parentNode.replaceChild(table, target);
	if (target.className != '')
		table.className = target.className;
	
	return content.appendChild(target);
}
function createButton(text, type) {
	if (typeof type != 'string' || (type != 'reset' && type != 'button' && type != 'submit')) type = 'submit';

	if (typeof this.dummyElement != 'object')
		this.dummyElement = document.createElement('div');
	
	this.dummyElement.innerHTML = '<button type="' + type + '"></button>';
	var object = this.dummyElement.childNodes[0];
	this.dummyElement.removeChild(object);
	object.appendChild(document.createTextNode(text));
	return object;
}
createSubmitButton = createButton;
function inlineLoginForm() {
	var login = document.getElementById('loginLink');
	var login2 = document.getElementById('loginLink2');
	if (login2 && typeof login2 == 'object') {
		login = login2;
	}
	if (login && typeof login == 'object') {
		function createLoginForm() {
			var loginForm = document.createElement('form');
			var loginFieldset = document.createElement('fieldset');
			var referer = document.createElement('input');
			var userLabel = document.createElement('label');
			var userInput = document.createElement('input');
			var passLabel = document.createElement('label');
			var passInput = document.createElement('input');

			var loginButton = createSubmitButton('Log in');
			var loginTextButton = createTextButton(loginButton);

			var cancelButton = createButton('Cancel', 'reset');
			cancelButton.onclick = function() {
				disableLoginForm();
			}
			var cancelTextButton = createTextButton(cancelButton);
	
			loginForm.id = 'loginForm';
			loginForm.action = '/account/login.do';
			loginForm.method = 'post';
			
			userLabel.htmlFor = userInput.id = 'userInput';
			userInput.type = 'text'
			userInput.name = 'email';
			userLabel.appendChild(document.createTextNode('E-mail:'));
	
			passLabel.htmlFor = passInput.id = 'passInput';
			passInput.type = 'password'
			passInput.name = 'password';
			passLabel.appendChild(document.createTextNode('Password:'));
			
			var forgotPassword = document.createElement('a');
			forgotPassword.appendChild(document.createTextNode('Forgot your password?'));
			forgotPassword.href = '/account/forgotPassword';
			
			//<input type="hidden" name="referer" value="<?php echo base64_encode($this->referer); ?>" />
			referer.type = 'hidden';
			referer.name = 'referer';
			referer.value = window.location;
			
			loginForm.appendChild(loginFieldset);

			loginFieldset = fixAsBox(loginFieldset);
			
			loginFieldset.appendChild(referer);
			loginFieldset.appendChild(userLabel);
			loginFieldset.appendChild(userInput);
			loginFieldset.appendChild(passLabel);
			loginFieldset.appendChild(passInput);
			loginFieldset.appendChild(forgotPassword);
			loginFieldset.appendChild(loginTextButton);
			loginFieldset.appendChild(cancelTextButton);
		
			document.getElementById('siteWrapper').appendChild(loginForm);
			
			return loginForm;
		}
		function activateLoginForm() {
			var loginForm = document.getElementById('loginForm');
			if (loginForm == null)
				loginForm = createLoginForm();
			if (loginForm != null && typeof loginForm == 'object') {
				loginForm.className = 'active';
				login.onclick = disableLoginForm;
				return false;
			}
		}
		function disableLoginForm() {
			var loginForm = document.getElementById('loginForm');
			if (loginForm != null) loginForm.className = '';
			login.onclick = activateLoginForm;
			return false;
		}
		login.onclick = activateLoginForm;
	}
}
/*
 * Set external links to open in new window
 */
function extLinkToNewWin() {
	var links = document.getElementsByTagName('a');
	var length = links.length;
	if (length) {
		for (var i = 0; i < length; i++) {
			if (links[i].rel == 'external')
				links[i].target = '_blank';
		}
	}
}
/*
 * Universal hover
 */
function flagAsHovered(o, c) {
	var oldC = o.className;
	o.onmouseout = function() {
		this.className = oldC;
	}
	o.className += ' ' + c;
}
/*
 * Fix text overflow
 */
function getTextNode(obj) {
	while (obj.nodeType && obj.childNodes && obj.nodeType != 3 && obj.childNodes.length != 0)
		obj = obj.childNodes[0];
	if (obj.nodeType && obj.nodeType == 3) return obj;
	return false;
}
textOverflow = {
	wordRegExp:(new RegExp('\\s+\\S*$')),
	replace:function(obj, textNode, height, oldHeight) {
		var overflow = this;
		
		if (obj.offsetHeight > height && textNode.nodeValue.length > 3) {
			textNode.nodeValue = textNode.nodeValue.replace(this.wordRegExp, '') + '...';
			
			setTimeout(function(){
				overflow.replace(obj, textNode, height, oldHeight);
			}, 0);
		} else
			obj.style.height = oldHeight;
	},
	fix:function(obj) {
		var height = obj.offsetHeight;
		var oldHeight = obj.style.height;
		var textNode = getTextNode(obj);
		var overflow = this;
		
		obj.style.height = 'auto';
	
		setTimeout(function(){
			overflow.replace(obj, textNode, height, oldHeight);
		}, 0);
	}
}
function fixProductHeaders() {
	var el = document.getElementById('products');
	if (el == null)
		return;
	var products = el.getElementsByTagName('table');
	var length = products.length;
	for (var i = 0; i < length; i++) {
		if (products[i].id == 'didyouknow')
			continue;
		textOverflow.fix(products[i].getElementsByTagName('dt')[0], 30, 'checked');
	}
}
addOnload(fixProductHeaders);
addOnload(extLinkToNewWin);
addOnload(inlineLoginForm);
addOnload(replace);
addOnload(replaceCheckbox);

function popularCategories(){
	var popular = document.getElementById('popularCategories');
	
	for (var cur = popular.firstChild; cur != null; cur = cur.nextSibling) {
		if (cur.nodeName == 'TABLE') {
			cur.onclick = click;
			cur.onmouseover = mouseover;
			cur.style.cursor = 'pointer';
		}
	}
	
	function click(e) {
		document.location = this.getElementsByTagName('a')[0].href;
	}
	function mouseover(e) {
		flagAsHovered(this, 'productHover');
	}
}

/* vehicles */
function addnew() {
	if (vehCount > 6) {
		return;
	}
	
	var vehicles = document.getElementById('vehicles');
	
	var div = document.createElement('div');
	div.innerHTML = document.getElementById('vehicleTpl').innerHTML.replace('{nr}', ++vehCount);
	
	vehicles.appendChild(div);
}

function supressEvent(e) {
	if (e.stopPropagation) {
		e.stopPropagation();
	} else {
		e.cancelBubble = true;
	}
}

function openWindow(url) {
	
	var w = Math.round(screen.availWidth * 0.7);
	var h = Math.round(screen.availHeight * 0.7);
	
	var top = Math.round((screen.availHeight - screen.availHeight * 0.7)/2);
	var left = Math.round((screen.availWidth - screen.availWidth * 0.7)/2);

	var params = 'width=' + w + ',height=' + h + ',top=' + top + ',left=' + left + ',toolbar=yes,status=yes,location=yes,resizable=yes,scrollbars=yes,menubar=yes';
	
	var w = window.open(url, '_', params);

	return false;
}

var Geometry = {};

Geometry.getX = function(e) {
	var x = 0;
	while (e) {
		x += e.offsetLeft;;
		e = e.offsetParent;
	}
	return x;
}

Geometry.getY = function(e) {
	var y = 0;
	while (e) {
		y += e.offsetTop;
		e = e.offsetParent;
	}
	return y;
}

if (window.innerWidth) {
	Geometry.getViewportWidth = function() { return window.innerWidth; }
} else if (document.documentElement && document.documentElement.clientWidth) {
	Geometry.getViewportWidth = function() { return document.documentElement.clientWidth; }
} else if (document.body.clientWidth) {
	Geometry.getViewportWidth = function() { return document.body.clientWidth; }
}
