function hideShow(id) {
	var elem = document.getElementById(id);
	if (elem.style.display == "")
		elem.style.display = "none";
	else
		elem.style.display = "";
}
function hide(id) {
	var elem = document.getElementById(id);
	elem.style.display = "none";
}
function nlStrFromNum(num) {
	num = num + '';
	if (num == "NaN")
		return "";
	var tmp = (num + '').replace(/[.]/, ',');
	var idx = tmp.indexOf(',');
	if (idx >= 0 && idx < tmp.length - 3)
		tmp = tmp.substring(0, idx + 3);
	return tmp;
}

function numFromNlStr(str) {
	return str.replace(/[,]/, '.');
}

var keepOpenId = -1;
function keepOpenSwitch(id) {
	if (keepOpenId != -1) {
		var elem = document.getElementById(keepOpenId);
		elem.style.height = "";
		elem.style.display = "none";
	}
	if (keepOpenId != id) {
		var elem = document.getElementById(id);
		elem.style.height = "200px";
		elem.style.display = "";
		keepOpenId = id;
	} else {
		keepOpenId = -1;
	}
}

function hideAdvanced(id) {
	if (keepOpenId != id)
		hide(id);
}

function show(id, popup) {
	bb_show(id, popup);
}
function bb_show(id, popup) {
	var elem = document.getElementById(id);
	elem.style.display = "";
	if (popup)
		elem.style.position = "absolute";
}
function managementPopup(url,width,height) {
	if (!width || !height) {
		width = 170;
		height = 750;
	}
	var managementWindow = window
			.open(
					url,
					"dlpopup",
					"width="+width+",height="+height+",menubar=no,location=no,status=no,toolbar=no,resizable=yes,screenX=0,screenY=0");
	return false;
}

function mailWindow(url) {
	var currentPage = window.location;
	var currentTitle = window.document.title;
	var fullurl = url;
	if (url.indexOf('?') >= 0)
		fullurl += "&";
	else
		fullurl += "?";

	fullurl += "value(referrerToUrl)=" + encodeURIComponent(currentPage)
			+ "&referrerToUrl=" + encodeURIComponent(currentPage)
			+ "&referrerToTitle=" + encodeURIComponent(currentTitle)
			+ "&value(referrerToTitle)=" + encodeURIComponent(currentTitle)
			+ "%0A%0A";
	myWindow = window
			.open(
					fullurl,
					"",
					"toolbar,width=630,height=575,menubar=no,location=no,status=no,toolbar=no,scrollbars=yes,screenX=50,screenY=50");
	return false;
}
function mailWindowId(url, id) {
	var fullurl = url;
	if (url.indexOf('?') >= 0)
		fullurl += "&";
	else
		fullurl += "?";

	fullurl += "id=" + id;
	myWindow = window
			.open(
					fullurl,
					"",
					"toolbar,width=630,height=535,menubar=no,location=no,status=no,toolbar=no,scrollbars=yes,screenX=50,screenY=50");
	return false;
}
function mailForwardWindow(url, id, mode) {
	var fullurl = url;
	if (url.indexOf('?') >= 0)
		fullurl += "&";
	else
		fullurl += "?";

	fullurl += "id=" + id;
	fullurl += "&";
	fullurl += "mode=" + mode;
	myWindow = window
			.open(
					fullurl,
					"",
					"toolbar,width=630,height=535,menubar=no,location=no,status=no,toolbar=no,scrollbars=yes,screenX=50,screenY=50");
	return false;
}

function mailDetailsWindow(url, contextPath, type) {
	var currentPage = window.location.host;
	var currentTitle = window.document.title;
	var mailedUrl = "http://" + currentPage + contextPath + "type.do?id="
			+ type;

	var fullurl = url;
	if (url.indexOf('?') >= 0)
		fullurl += "&";
	else
		fullurl += "?";
	fullurl += "referrerToTitle=%0D%0A" + encodeURIComponent(currentTitle)
			+ "%0A%0D&value(referrerToTitle)=%0D%0A"
			+ encodeURIComponent(currentTitle) + "%0A%0D&referrerToUrl="
			+ encodeURIComponent(mailedUrl) + "&value(referrerToUrl)="
			+ encodeURIComponent(mailedUrl);

	myWindow = window
			.open(
					fullurl,
					"",
					"toolbar,width=630,height=535,menubar=no,location=no,status=no,toolbar=no,scrollbars=yes,screenX=50,screenY=50");
	return false;
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function togglePanels(panel1, panel2) {
	var p1 = document.getElementById(panel1);
	var p2 = document.getElementById(panel2);
	EffectSlideUpAndDown(panel1);
	EffectSlideUpAndDown(panel2);
}

function togglePanel(panel1) {
	var p1 = $(panel1);
	if (p1.hasChildNodes())
		EffectSlideUpAndDown(panel1);
}

EffectSlideUpAndDown = function(element) {
	EffectSlideUpAndDownThrottled(element, '0.25');
}

EffectSlideUpAndDownThrottled = function(element, dur) {
	element = $(element);
	if (element.visible()) {
		new Effect.SlideUp(element, {
			duration :dur
		});
	} else {
		new Effect.SlideDown(element, {
			duration :dur
		});
	}
}

function checkValueEmptyness(value) {
	if (value == '') {
		alert('Wel even een bestand selecteren!');
		return false;
	}
	return true;
}

function CarTypeList(props) {
	this.carTypeList = new Hash();
	this.properties = props;
	this.add = function(typeNodeId, carProperties) {
		if (!$('typeRow'+typeNodeId))
			alert(typeNodeId + ' typeRow not found');
		if (!$('typeLink'+typeNodeId))
			alert(typeNodeId + ' typeLink not found');
		carProperties.defaultLink = $('typeLink'+typeNodeId).href;
		var co2imageElem = $('co2'+typeNodeId);
		if (co2imageElem) {
			carProperties.defaultCo2Image = co2imageElem.src;
			carProperties.defaultCo2Text = co2imageElem.title;
		}
		this.carTypeList.set(typeNodeId, carProperties);
	};
	this.updateFilter = function() {
		var allFuels = [];
		var activeFuels = [];
		var addAutomatic = ($('gearboxSelect').getValue() == 'A');
		var deleteAutomatic = ($('gearboxSelect').getValue() == 'M');
		this.carTypeList.each(function(carTypeItem) {
			var typeNodeId = carTypeItem.key;
			var carProperties = carTypeItem.value;

			if (!allFuels.include(carProperties.fuel))
				allFuels[allFuels.length] = carProperties.fuel;
			if (this.matches(carProperties)) {
				if (!activeFuels.include(carProperties.fuel))
					activeFuels[activeFuels.length] = carProperties.fuel;
				$('typeRow'+typeNodeId).show();
			} else
				$('typeRow'+typeNodeId).hide();
			if (carProperties.gearboxOption) {
				var co2imageElem = $('co2'+typeNodeId);
				if (addAutomatic) {
					$('typeLink'+typeNodeId).href = carProperties.defaultLink+'&addedOptionIds='+carProperties.gearboxOption;
					if (co2imageElem) {
						co2imageElem.src = '/images/co2/X.png';
						co2imageElem.title = '';
					}
				} else {
					if (co2imageElem) {
						co2imageElem.src = carProperties.defaultCo2Image;
						co2imageElem.title = carProperties.defaultCo2Text;
					}
					if (deleteAutomatic) {
						$('typeLink'+typeNodeId).href = carProperties.defaultLink+'&deletedOptionIds='+carProperties.gearboxOption;
					} else
						$('typeLink'+typeNodeId).href = carProperties.defaultLink;
				}
			}
		}.bind(this));
		allFuels.each(function(fuelId) {
			if (activeFuels.include(fuelId))
				$('fuelBox_'+fuelId).show();
			else
				$('fuelBox_'+fuelId).hide();
		});
	};
	this.matches = function(carProperties) {
		var result = true;
		this.properties.each(function(property) {
			if (!result)
				return;

			var selectBox = $(property+'Select');
			var valueArray = [ selectBox.getValue() ];
			if (selectBox.getValue().length)
				valueArray = selectBox.getValue();

			var carValue = carProperties[property];

			var anyOk = false;
			valueArray.each(function(value) {
				if (value=='')
					anyOk = true;
				if (anyOk)
					return;
				if (carValue.length && typeof carValue=='object') {
					if (carValue.include(value))
						anyOk = true;
				} else if (carValue == value)
					anyOk = true;
			});
			if (!anyOk) {
				result = false;
			}
		});
		return result;
	};
	this.properties.each(function(property) {
		var selectBox = $(property+'Select'); 
		selectBox.value = '';
		selectBox.observe('change', this.updateFilter.bindAsEventListener(this));
	}.bind(this));
}

function getXMLAsString(parentNode) {
	return parentNode.xml != undefined ? _getXMLAsStringIE(parentNode)
			: _getXMLAsStringMozilla(parentNode);
}

function _getXMLAsStringIE(parentNode) {
	var contentStr = "";
	for ( var i = 0; i < parentNode.childNodes.length; i++) {
		var n = parentNode.childNodes[i];
		contentStr += n.nodeType == 4 ? n.nodeValue : n.xml;
	}
	return contentStr;
}

function _getXMLAsStringMozilla(parentNode) {
	var xmlSerializer = new XMLSerializer();
	var contentStr = "";
	for ( var i = 0; i < parentNode.childNodes.length; i++) {
		var n = parentNode.childNodes[i];
		contentStr += n.nodeType == 4 ? n.nodeValue : xmlSerializer
				.serializeToString(n);
	}
	return contentStr;
}