	
	/*   --------------------------- Browser Detection ----------------------- */	
	
	IE = document.all; IE4 = false; IE6 = false; NN4 = false; NN6 = false; MAC = false; NN = false;
	if (IE && (navigator.appVersion.toLowerCase().indexOf('msie 4') != -1)) IE4 = true;
	if (IE && (navigator.appVersion.toLowerCase().indexOf('msie 6') != -1)) IE6 = true;
	if (navigator.appName.toLowerCase().indexOf('netscape') != -1) {
		if (parseInt(navigator.appVersion) == 4) NN4 = true;
		if (parseInt(navigator.appVersion) == 5) NN6 = true;
	}
	if (!IE) NN = true;
	if (navigator.platform.toLowerCase().indexOf('mac') != -1) MAC = true;

	
	/*   --------------------------- General functions ----------------------- */	
	
	var windowWidth; var windowHeight; var windowScrollX; var windowScrollY;
	function detectEnvironmentProperties() {
		windowWidth = (NN) ? window.innerWidth : document.body.clientWidth;
		windowHeight = (NN) ? window.innerHeight : document.body.clientHeight;
		windowScrollX = (NN) ? window.pageXOffset : document.body.scrollLeft;
		windowScrollY = (NN) ? window.pageYOffset : document.body.scrollTop;
	}
	
	function writeToLayer(ly, str) {
		if (IE4) {
			document.all[ly].innerHTML = str;
		} else if (IE || NN6) {
			document.getElementById(ly).innerHTML = str;
		} else {
			document.layers[ly].document.open();
			document.layers[ly].document.write(str);
			document.layers[ly].document.close();
		}
	}
	
	function changeImage(img, ly, url) {
		if (IE4) {
			document.all[img].src = url;
		} else if(IE || NN6) {
			document.getElementById(img).src = url;
		} else {
			if (ly != '') {
				document.layers[ly].document.images[img].src = url;
			} else {
				document.images[img].src = url;
			}
		}
	}
	
	function addBookmark(url, title) {
  	if (IE) {
			window.external.AddFavorite(url,title);
			writeCookie('bookmark', 'true');
		} 
	}
	
	function parseValueFromUrl(name) {
		url = document.location.href;
		value = 'undefined';
		if(url.indexOf('?') != -1) {
			parameters = url.substring(url.indexOf('?') + 1, url.length);
			// check for possible internal target '#' (and remove from parameters if necessary)
			if(parameters.lastIndexOf('#') != -1) {
				parameters = parameters.substring(0, parameters.lastIndexOf('#'));
			}
			// split name and value pairs
			parameters = parameters.split('&');
			for (i=0; i<parameters.length; i++) {
				equalsPos = parameters[i].indexOf('=');
				parameterName = parameters[i].substring(0, equalsPos);
				parameterValue = unescape(parameters[i].substring(equalsPos + 1, parameters[i].length));
				
				if(name==parameterName) value = parameterValue;
			}
		}
		return value;
	}
		
	function openWindow(url, name, w, h, menubar, scrollbars) {
		// determine center of screen
		if (IE || NN6) {
			centerX = parseInt(screen.width / 2);
			centerY = parseInt(screen.height / 2);
		} else {
			centerX = parseInt(screen.availWidth / 2);
			centerY = parseInt(screen.availHeight / 2);
		}
	
		windowLeft = centerX - parseInt(w/2);
		windowTop = centerY - parseInt(h/2);
		
		parameters  = 'toolbar=0,location=0,menubar=' + menubar;
		parameters += ',width=' + w + ',height=' + h + ',top=' + windowTop + ',left=' + windowLeft;
		
		if (scrollbars) parameters += ',scrollbars=' + scrollbars;
		
		window.open(url, name, parameters);
	}

	function getImageLeft(imageId, layerId) {
		layerPos = getLayerLeft(layerId);
		if (IE) {
			pos = layerPos + document.all[imageId].offsetLeft;
		} else if (NN6) {
			pos = document.getElementById(imageId).offsetLeft;
		} else {
			if (layerId != null) {
				pos = layerPos + document.layers[layerId].document.images[imageId].x;
			} else {
				pos = document.images[imageId].x;
			}
		}
		return pos;
	}
	
	function getImageTop(imageId, layerId) {
		layerPos = getLayerTop(layerId);
		if (IE) {
			pos = layerPos + document.all[imageId].offsetTop;
		} else if (NN6) {
			pos = document.getElementById(imageId).offsetTop;
		} else {
			if (layerId != null) {
				pos = layerPos + document.layers[layerId].document.images[imageId].y;
			} else {
				pos = document.images[imageId].y;
			}
		}
		return pos;
	}
	
	function getLayerLeft(layerId) {
		pos = 0;
		if (layerId != null) {
			if (IE4) {
				pos = document.all[layerId].offsetLeft;
			} else if (IE || NN6) {
				pos = document.getElementById(layerId).offsetLeft;
			} else {
				pos = document.layers[layerId].x;
			}
		}
		return pos;
	}
	
	function getLayerTop(layerId) {
		pos = 0;
		if (layerId != null) {
			if (IE4) {
				pos = document.all[layerId].offsetTop;
			} else if (IE || NN6) {
				pos = document.getElementById(layerId).offsetTop;
			} else {
				pos = document.layers[layerId].y;
			}
		}
		return pos;
	}
	
	function moveLayer (layer, x, y) {
		if (IE4) {
			document.all[layer].style.left = x + 'px';
			document.all[layer].style.top = y + 'px';
		} else if (IE || NN6) {
			document.getElementById(layer).style.left = x + 'px';
			document.getElementById(layer).style.top = y + 'px';
		} else {
			document.layers[layer].left = x;
			document.layers[layer].top = y;
		}
	}	
	
	function clipLayer(layer, width, height) {
		//alert('clip: ' + layer + ', ' + width + ', ' + height);
		if (IE4) {
			document.all[layer].style.clip = 'rect(0px ' + width + 'px ' + height + 'px 0px)';
			//document.all[layer].style.clip = 'rect(0px 1000px 1000px 0px)';
		} else if (IE || NN6) {
			document.getElementById(layer).style.clip = 'rect(0px ' + width + 'px ' + height + 'px 0px)';
		} else {
			document.layers[layer].clip.top = 0;
			document.layers[layer].clip.left = 0;
			document.layers[layer].clip.bottom = height;
			document.layers[layer].clip.right = width;
		}
	} 
	
	function scaleLayer(ly, w, h) {
		if (IE) {
			document.all[ly].style.width = w + 'px';
			document.all[ly].style.height = h + 'px';
		} else if (NN6) {
			document.getElementById(ly).style.width = w + 'px';
			document.getElementById(ly).style.height = h + 'px';
		} else {
			document.layers[ly].width = w;
			document.layers[ly].height = h;
		}
	}
	
	function showLayer(layer) {
		if (IE4) {
			document.all[layer].style.visibility = 'visible';
		} else if (IE || NN6) {
			document.getElementById(layer).style.visibility = 'visible';
		} else {
			document.layers[layer].visibility = true;
		}
	}
	
	function hideLayer(layer) {
		if (IE4) {
			document.all[layer].style.visibility = 'hidden';
		} else if (IE || NN6) {
			document.getElementById(layer).style.visibility = 'hidden';
		} else {
			document.layers[layer].visibility = false;
		}
	}
	
	function isVisible(layer) {
		visibility = false;
		if (IE) {
			if (document.all[layer].style.visibility == 'visible') visibility = true;
		} else if (NN6) {
			if (document.getElementById(layer).style.visibility == 'visible') visibility = true;
		} else {
			if (document.layers[layer].visibility == 'show') visibility = true;
		}
		return visibility;
	}
	
	function replaceChars(str, oldChar, newChar) {
		newStr = '';
		for (i=0; i < str.length; i++) {
			if(str.charAt(i) == oldChar) {
				newStr += newChar;
			} else {
				newStr += str.charAt(i);
			}
		}
		return newStr;
	}
	
	function toId(str) {
		// filter 'bad' characters and make a neat id
		badChars = '\'.-+=\\\/" &λικ';
		newStr = '';
		for(var i=0; i<str.length; i++) {
			if (badChars.indexOf(str.charAt(i)) == -1) newStr += str.charAt(i);
		}
		return newStr.toLowerCase();
	}
	
	function randomizeArray(list) {
		var newList = [];
		var r;
		do {
			var present = false;
			do {
				r = parseInt(list.length * Math.random());
				for (var j=0; j<newList.length; j++) {
					if (newList[j] == list[r]) present = true;
				}
				if (!present) newList[newList.length] = list[r];
			} while (!present);
		} while (newList.length != list.length);
		return newList;
	}

	
	
	
	
	