function translateUrl(url)
{
	var re = /^dames\.php\?waar=([^&]*)&year=([^&]*)&month=([^&]*)(?:&day=([^&]*).*)$/;
	//url = url.replace(re, "dames/$1/$2-$3-$4");
	return url;
}

function swapFoto(id1, id2)
{
	var obj1 = document.getElementById(id1);
	var obj2 = document.getElementById(id2);
	
	var tempSrc = obj1.src;
	obj1.src = obj2.src;
	obj2.src = tempSrc;
}

function delayedWrite(text)
{
	document.write(text);
}

function getPixels(str)
{
	return str != "" ? parseInt(str.substr(0, str.length-2)) : 0;
}

function getScreenPosY(obj)
{
	var ret = 0;
	while(obj)
	{
		ret += obj.offsetTop - obj.scrollTop;
		obj = obj.offsetParent;
	}
	
	return ret;
}

function getScreenPosX(obj)
{
	var ret = 0;
	while(obj)
	{
		ret += obj.offsetLeft - obj.scrollLeft;
		obj = obj.offsetParent;
	}
	
	return ret;
}

function _GET(param)
{
	// parse GET parameters
    re = /\?([^#]*).*$/;
    matches = Array();
    if (document.location.href.match(re))
    {
        var splitted = RegExp.$1.split("&");
        var i =0;
        for(i=0; i<splitted.length; i++)
        {
            var args = splitted[i].split("=");
            if (args[0] == param)
            	return unescape(args[1].replace(/\+/g, " "));
        }
    }
    
    return null;
}

function getTotalHeight()
{
	var totalHeight;
	if(document.layers||(document.getElementById&&!document.all))
	{ 
	   availHeight=window.innerHeight;
	   scrollTop = window.pageYOffset;
	}
	else if(document.all)
	{
	   availHeight=document.body.clientHeight;
	   scrollTop = document.body.scrollTop;
	}

	totalHeight = availHeight + scrollTop;
	return (totalHeight < document.body.scrollHeight ? document.body.scrollHeight : totalHeight);
}

function createTotalDiv(_backgroundColor, _opacity)
{
	var opacity = typeof _opacity == "undefined" ? 0 : _opacity;
	var backgroundColor = typeof _backgroundColor == "undefined" ? "white" : _backgroundColor;
	
	var totalHeight = getTotalHeight();

	var totalDiv = document.createElement("div");
	totalDiv.style.top = "0px";
	totalDiv.style.left = "0px";
	totalDiv.style.position = "absolute";
	totalDiv.style.width = "100%";
	totalDiv.style.height = totalHeight + "px";
	totalDiv.style.backgroundColor = backgroundColor;
	totalDiv.style.opacity = sprintf("%0.2f", opacity / 100);
	totalDiv.style.filter="alpha(opacity=" + opacity + ")";
	
	return totalDiv;	
}

var g_dragItem = null;
var g_dragOptions = null;
function drag_start(obj, event, options, _target)
{
	if (!g_dragItem)
	{
		if (!options.noNode)
		{
			g_dragItem = options.dontCloneNode ? obj : obj.cloneNode(true);
			if (!options.dontCloneNode)
			{
				obj.parentNode.appendChild(g_dragItem);		
				g_dragItem.style.display = "none";
			}
			g_dragItem.style.position = "absolute";
		}
		g_dragOptions = options;
		
		var evtObj;
		
		if (typeof _target == "undefined")
			evtObj = event.target ? event.target : event.srcElement;
		else
			evtObj = _target;
			
		g_dragOptions.deltaX = getScreenPosX(evtObj);
		g_dragOptions.deltaX -= getEventX(event);
		g_dragOptions.deltaY = getScreenPosY(evtObj) - getEventY(event);
		if (isNaN(g_dragOptions.deltaX))
			g_dragOptions.deltaX = 0;
			
		if (isNaN(g_dragOptions.deltaY))
			g_dragOptions.deltaY = 0;
		
		var dragObject = createTotalDiv();
		dragObject.style.cursor = "move";
		document.body.appendChild(dragObject);
		
		dragObject.onmouseup = function(event) { return drag_onMouseUp(event ? event : window.event); }
		dragObject.onmousemove = function(event) { return drag_onMouseMove(event ? event : window.event, false, g_dragOptions); }
		g_dragOptions.dragObject = dragObject;

		return false;
	}
	
	return true;
}

function drag_onMouseUp(event)
{
	if (!g_dragOptions.dontCloneNode && g_dragItem)
		g_dragItem.parentNode.removeChild(g_dragItem);
	
	if (g_dragOptions && g_dragOptions.onDragDone)
	{
		g_dragOptions.onDragDone(g_dragOptions);
	}
	
	g_dragOptions.dragObject.parentNode.removeChild(g_dragOptions.dragObject);
	g_dragOptions.dragObject = null;
	document.body.onmouseup = g_dragOptions.oldOnMouseup ? g_dragoptions.oldonmouseup : "";
	document.body.onmousemove = g_dragOptions.oldOnMousedown ? g_dragOptions.oldOnMousedown : "";
	
	g_dragItem = null;
	return true;
}

function drag_onMouseMove(event, keepHidden, dragOptions)
{
	if (dragOptions.onMouseMove)
	{
		var y = event.layerY ? event.layerY : event.offsetY + getScreenPosY(event.srcElement);
		var x = event.layerX ? event.layerX : event.offsetX + getScreenPosX(event.srcElement);
		dragOptions.onMouseMove(event, x, y);
	}

	if (!g_dragItem)
		return true;
	
	if (g_dragItem.style.display == "none" && !keepHidden)
		g_dragItem.style.display = "";
		
	g_dragItem.style.left = (event.clientX + g_dragOptions.deltaX) + "px";
	g_dragItem.style.top = (event.clientY + g_dragOptions.deltaY) + "px";
	
	return false;
}

// Function to get elements by tag name 
// only elements are returned that are descendants of parentNode
// The resulting list of matching nodes is stored in return parameter retList
function dom_getElementsByTagName(parentNode, name, retList)
{
	if (parentNode.nodeName == name)
	{
		retList.push(parentNode);
	}
	
	for(var i in parentNode.childNodes)
	{
		dom_getElementsByTagName(parentNode.childNodes[i], name, retList);
	}
}

function dom_isDescendant(src, dest)
{
	var ret = false;
	
	if (dest == src)
		return true;
	
	var i;
	for(i=0; i<dest.childNodes.length && !ret; i++)
	{
		if (dest.childNodes[i] == src)
			ret = true;
		else
		{
			ret = dom_isDescendant(src, dest.childNodes[i]);
		}
	}
	
	return ret;
}

// Method to post variables to an url.
// When 3 parameters given:
//   - _param1 = the url to which post the parameters
//   - _param2 = the parameters to post as an Object
//   - _param3 = the target for the form
// When only 1 paremeter is given (g_phpFilename is used as url):
//   - _param1 = the parameters to post as an Object
function post(_param1, _param2, _param3)
{
	var action = typeof _param2 != "undefined" ? _param1 : g_phpFilename;
	var attributes = typeof _param2 != "undefined" ? _param2 : _param1;

	var body = document.getElementsByTagName("body");
	body = body && body.length >= 1 ? body[0] : null;
	
	if (!body)
		return false;
		
	var form = document.createElement("form");
	form.style.display = "none";
	form.action = action;
	form.method = "post";
	if (typeof _param3 != "undefined")
		form.target = _param3;
		
	body.appendChild(form);
	
	for(attr in attributes)
	{
		var input = document.createElement("input");
		input.type = "hidden";
		input.name = attr;
		input.value = attributes[attr];
		form.appendChild(input);
	}
	
	form.submit();
}

function openDatePicker(returnFunction, x, y, year, month)
{
	var div = document.getElementById("dateSelectDiv");
	
	if (div)
		hideDatePicker();

	div = document.createElement("div");
	div.id = "dateSelectDiv";
	div.style.width = "280px";
	div.style.height = "200px";
	div.style.top = y + "px";
	div.style.left = x + "px";
	
	var iframe = document.createElement("iframe");
	var url = "selectdate.php?returnFunction=" + returnFunction + "&width=280&height=210";
	if (year)
		url += "&year=" + year;
		
	if (month)
		url += "&month=" + month;
		
	iframe.src = url;
	iframe.frameBorder  = 0;
	iframe.scrolling    = "no";
	iframe.marginWidth  = 0;
	iframe.maringHeight = 0;
	iframe.height = 200;
	iframe.width = 280;

	div.appendChild(iframe);
	
	divPopup("datePicker", x, y, "Selecteer datum", div);
}

function hideDatePicker()
{
	hideDivPopup("datePicker");
}

function sprintf()
{
	if (!arguments || arguments.length < 1 || !RegExp)
	{
		return;
	}
	var str = arguments[0];
	var re = /([^%]*)%('.|0|\x20)?(-)?([1-9]\d*)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
	var a = b = [], numSubstitutions = 0, numMatches = 0;
	while (a = re.exec(str))
	{
		var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
		var pPrecision = a[5], pType = a[6], rightPart = a[7];
		//alert(a + '\n' + [a[0], leftpart, pPad, pJustify, pMinLength, pPrecision);

		numMatches++;
		if (pType == '%')
		{
			subst = '%';
		}
		else
		{
			numSubstitutions++;
			if (numSubstitutions >= arguments.length)
			{
				alert('Error! Not enough function arguments (' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).');
			}
			var param = arguments[numSubstitutions];
			var pad = '';
			       if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
			  else if (pPad) pad = pPad;
			var justifyRight = true;
			       if (pJustify && pJustify === "-") justifyRight = false;
			var minLength = -1;
			       if (pMinLength) minLength = parseInt(pMinLength);
			var precision = -1;
			       if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1));
			var subst = param;
			       if (pType == 'b') subst = parseInt(param).toString(2);
			  else if (pType == 'c') subst = String.fromCharCode(parseInt(param));
			  else if (pType == 'd') subst = parseInt(param) ? parseInt(param) : 0;
			  else if (pType == 'u') subst = Math.abs(param);
			  else if (pType == 'f' && precision != -1) 
			  {
			  	var value = parseFloat(param);
			  	subst = Math.floor(value) + ".";
			  	var remainder = Math.round((value * Math.pow(10, precision)) % Math.pow(10, precision));
			  	// add zeroes
			  	var pow = 1;
			  	for(i=1; i<=precision; i++)
			  	{
			  		if (remainder < pow)
			  			subst += "0";
			  		pow *= 10;
			  	}
			  	if (remainder != 0)
				  	subst += remainder;
			  	//subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
			  }
			  else if (pType == 'f' && precision == -1) subst = parseFloat(param);
			  else if (pType == 'o') subst = parseInt(param).toString(8);
			  else if (pType == 's') subst = param;
			  else if (pType == 'x') subst = ('' + parseInt(param).toString(16)).toLowerCase();
			  else if (pType == 'X') subst = ('' + parseInt(param).toString(16)).toUpperCase();
			
			if (minLength > String(subst).length)
			{
				var i;
				var numToPad = minLength - String(subst).length;
				for(i=0; i<numToPad; i+=(String(pad).length))
				{
					subst = pad + subst;
				}
			}
		}
		str = leftpart + subst + rightPart;
	}
	return str;
}

function sprintPrice(value, english /*= true */)
{
	if (typeof english == "undefined")
		english = true;

	var str = "";
	var v = parseInt(value) % 1000;
	if (value >= 1000 && v < 100)
		str += "0";
	if (value >= 1000 && v < 10)
		str += "0";
		
	str += english ? sprintf("%0.2f", value % 1000) : sprintf("%0.2f", value % 1000).replace(".", ",");
	value /= 1000;
	while(value >= 1)
	{
		str = (parseInt(value) % 1000) + (english ? "," : ".") + str;
		value /= 1000;
	}

	return str;
}

function dirtyPause(millis)
{
	date = new Date();
	var curDate = null;
	do { var curDate = new Date(); } 
	while(curDate-date < millis);
}

function HFDate(year, month, day)
{
	var monthNames = String("jan,feb,mrt,apr,mei,jun,jul,aug,sept,okt,nov,dec").split(",");
	return sprintf("%02d-%s-%d", day, monthNames[month-1], year);
}

// Function to set the opacity for a html-object. 
// args: obj: html-object,
//       opacity: the opacity in percentage (number from 0 to 100)
function setOpacity(obj, opacity)
{
	obj.style.opacity = sprintf("%0.2f", opacity / 100);
	obj.style.filter="alpha(opacity=" + opacity + ")";
}

function switchTab(tableId, to, count)
{
	var i;
	
	for(i=0; i<count; i++)
	{
		// enable correct button
		var obj = document.getElementById(tableId + "_" + i + "_tab");
		obj.className = i != to ? "tab_ia" : "tab";
		
		// enable correct page
		obj = document.getElementById(tableId + "_row_" + i);
		obj.style.display = i != to ? "none" : "";
	}
}

function getVisibleTab(tableId)
{
	var obj;
	var i=0;
	var found=false;
	do
	{
		obj = document.getElementById(tableId + "_row_" + i);
		if (obj && obj.style.display != "none")	
		{
			found = true;
		}
		else
		{
			i++;
		}
	} while (obj && !found);
	
	return found ? i : -1;
}

function setUnselectable(obj)
{
	obj.unselectable = "on";
	obj.onselectstart = function() {return false;}
	obj.style.MozUserSelect = "none ! important";
}

function getEventX(ev)
{
	return ev.clientX + document.body.scrollLeft - (document.body.clientLeft ? document.body.clientLeft : 0);
}

function getEventY(ev)
{
	return ev.clientY + document.body.scrollTop - (document.body.clientTop ? document.body.clientTop : 0);
}

function addIframe(id, content)
{
	var obj = document.getElementById(id);
	var iframe = document.createElement("iframe");
	iframe.frameBorder = "0";
	iframe.src = "javascript:void(0)";
	obj.appendChild(iframe);
	var ownBody = document.body;
	
	var head = document.getElementsByTagName("head")[0];
	iframe.onload = function() { 
	/*	var doc = this.contentDocument ? this.contentDocument : this.document;
		doc.getElementsByTagName("head").innerHTML = head.innerHTML;
		doc.body.innerHTML = "";
		doc.getElementsByTagName("body")[0].innerHTML = content;
		*/
		return true;
	}
}

var g_flashEnabled = true;
function createFlash(_parentNode, src, width, height, _extraParams, _alternative)
{
	var extraParams = typeof _extraParams == "undefined" ? {wmode: "transparent", quality: "high"} : _extraParams;
	var alternative = typeof _alternative == "undefined" ? "" : _alternative;
	var onBodyLoad = typeof _onBodyLoad == "undefined" ? false : _onBodyLoad;

	var parentNode = typeof _parentNode == "string" ? document.getElementById(_parentNode) : _parentNode;
	
	if (!g_flashEnabled)
	{
		parentNode.innerHTML += alternative;
		return;
	}
	
	extraParams.wmode = "Transparent";
	var flash = document.createElement("object");
	flash.setAttribute("width", width);
	flash.setAttribute("height", height);
	flash.setAttribute("classid", "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000");
	flash.setAttribute("codebase", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0");
	
	flash.wMode = extraParams.wmode;
	param = document.createElement("param");
	param.setAttribute("name", "movie");

	param.setAttribute("value", src);
	flash.appendChild(param);

	for(attr in extraParams)
	{
		if (attr == "wmode")
			continue;
		param = document.createElement("param");
		param.setAttribute("name", attr);
	
		param.setAttribute("value", extraParams[attr]);
		flash.appendChild(param);
	}
	
	parentNode.appendChild(flash);
	if (typeof flash.LoadMovie != "undefined")
	{
		flash.LoadMovie(0, src);
	}

	var embed = document.createElement("embed");
	embed.setAttribute("src", src);
	embed.setAttribute("width", width);
	embed.setAttribute("height", height);
	embed.setAttribute("pluginspage", "http://www.macromedia.com/go/getflashplayer");
	embed.setAttribute("type", "application/x-shockwave-flash");

	for(attr in extraParams)
	{
		embed.setAttribute(attr, extraParams[attr]);
	}
	
	try
	{
		flash.appendChild(embed);
	}
	catch(e)
	{
		// embed could not be added
	}
	
	// if flash is not enabled remove the flash and use the flash alternative
	if (alternative)
		window.setTimeout(
			function()
			{
				var available = typeof flash.LoadMovie != "undefined" || typeof embed.LoadMovie != "undefined";
				if (!available)
				{
					parentNode.removeChild(flash);
					parentNode.innerHTML += alternative;
					g_flashEnabled = false;
				}
			},
			150);
}

// prototype methods for standard js objects

// Check if an item is set in given array
// needle: The value to search for
// haystack: The array to search in
// _checkArrayKey: true when searching in array keys,
//                 false when searching in array values. 
//                 (default: false)
function in_array(needle, haystack, _checkArrayKey)
{
	var checkArrayKey = typeof _checkArrayKey == "undefined" ? false : _checkArrayKey;
	for(var i in haystack)
	{
		if (
			(!checkArrayKey && haystack[i] == needle)
			||
			(checkArrayKey && i == needle)
			)
		{
			return true;
		}
	}
	
	return false;
}

function getRegEx(name)
{
	switch(name)
	{
		case "email":
			return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/;
	}
}

function isPointInObject(x, y, object)
{
	var _left = getScreenPosX(object);
	var _top = getScreenPosY(object);
	
	return x >= _left && x < _left + object.offsetWidth &&
		y >= _top && y < _top + object.offsetHeight;
}

function getObjectsFromPoint(x, y, result, _rootNode)
{
	var rootNode = typeof _rootNode != "undefined" ? _rootNode : document.body;
	if (x >= rootNode.offsetLeft && x < rootNode.offsetLeft + rootNode.offsetWidth &&
		y >= rootNode.offsetTop && y < rootNode.offsetTop + rootNode.offsetHeight)
	{
		result.push(rootNode);
		for (var i in rootNode.childNodes)
		{
			if (rootNode.childNodes[i].offsetParent == rootNode)
			{
				getObjectsFromPoint(x-rootNode.offsetLeft,y-rootNode.offsetTop, result, rootNode.childNodes[i]);
			}
			else
			{
				getObjectsFromPoint(x,y, result, rootNode.childNodes[i]);
			}
		}
	}
}

function highlightText(keyword, className, _rootNode)
{
	var rootNode = typeof _rootNode == "undefined" ? document.body : _rootNode;
	if (rootNode.nodeName == "#text")
	{
		var newValue = rootNode.nodeValue.replace(RegExp("(" + keyword + ")", "gi"), "<span class='" + className + "'>$1</span>");
		if (newValue != rootNode.nodeValue)
		{
			var span = document.createElement("span");
			span.innerHTML = newValue;
			rootNode.parentNode.replaceChild(span, rootNode);
		}
	}
	
	for(var i=0; i<rootNode.childNodes.length; i++)  
	{
		highlightText(keyword, className, rootNode.childNodes[i]);
	}
}

function fixPNG(myImage) 
{
	var arVersion = navigator.appVersion.split("MSIE");
	var version = parseFloat(arVersion[1]);

    if ((version >= 5.5) && (version < 7) && (document.body.filters)) 
    {
       var imgID = (myImage.id) ? "id='" + myImage.id + "' " : "";
	   var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : "";
	   var imgTitle = (myImage.title) ? 
		             "title='" + myImage.title  + "' " : "title='" + myImage.alt + "' ";
	   var imgStyle = "display:inline-block;" + myImage.style.cssText;
	   var strNewHTML = "<span " + imgID + imgClass + imgTitle
                  + " style=\"" + "width:" + myImage.width 
                  + "px; height:" + myImage.height 
                  + "px;" + imgStyle + ";"
                  + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
                  + "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>";
	   myImage.outerHTML = strNewHTML	  
    }
}

function formAddHidden(form, varName, value)
{
	var input = document.createElement("input");
	input.type = "hidden";
	input.name = varName;
	input.value = value;
	form.appendChild(input);
}

function createMediaPlayer(_parentNode, src, width, height, _extraParams, _alternative)
{
	var extraParams = typeof _extraParams == "undefined" ? {wmode: "transparent", quality: "high"} : _extraParams;
	var alternative = typeof _alternative == "undefined" ? "" : _alternative;

	var parentNode = typeof _parentNode == "string" ? document.getElementById(_parentNode) : _parentNode;
	
	var player = document.createElement("object");
	player.setAttribute("width", width);
	player.setAttribute("height", height);
	player.setAttribute("classid", "CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95");
	player.setAttribute("codebase", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701");
	player.setAttribute("type", "application/x-oleobject");
	player.setAttribute("standBy", extraParams.standBy);

	param = document.createElement("param");
	param.setAttribute("name", "fileName");

	param.setAttribute("value", src);
	player.appendChild(param);

	for(attr in extraParams)
	{
		if (attr == "standBy")
			continue;
			
		param = document.createElement("param");
		param.setAttribute("name", attr);
	
		param.setAttribute("value", extraParams[attr]);
		player.appendChild(param);
	}
	
	parentNode.appendChild(player);
	
	var embed = document.createElement("embed");
	embed.setAttribute("src", src);
	embed.setAttribute("width", width);
	embed.setAttribute("height", height);
	embed.setAttribute("pluginspage", "http://www.microsoft.com/Windows/MediaPlayer/");
	embed.setAttribute("type", "application/x-mplayer2");

	for(attr in extraParams)
	{
		embed.setAttribute(attr, extraParams[attr]);
	}
	
	try
	{
		player.appendChild(embed);
	}
	catch(e)
	{
		// embed could not be added
	}
	
	parentNode.innerHTML = parentNode.innerHTML;
	
	// Todo:
	/*
	// if player is not enabled remove the player and use the player alternative
	if (alternative)
		window.setTimeout(
			function()
			{
				var available = typeof player.LoadMovie != "undefined" || typeof embed.LoadMovie != "undefined";
				if (!available)
				{
					parentNode.removeChild(player);
					parentNode.innerHTML += alternative;
					g_playerEnabled = false;
				}
			},
			150);*/
}

function getScreenDimensions()
{
	var ret = new Object();
	
	if(document.layers||(document.getElementById&&!document.all))
	{ 
	   ret.availWidth=window.innerWidth;
	   ret.availHeight=window.innerHeight;
	   ret.scrollLeft = window.pageXOffset;
	   ret.scrollTop = window.pageYOffset;
	}
	else if(document.all && document.documentElement)
	{
	   ret.availWidth=document.documentElement.clientWidth;
	   ret.availHeight=document.documentElement.clientHeight;
	   ret.scrollLeft = document.documentElement.scrollLeft;
	   ret.scrollTop = document.documentElement.scrollTop;
	}
	else if (document.all)
	{
		ret.availWidth=document.body.clientWidth;
		ret.availHeight=document.body.clientHeight;
		ret.scrollLeft = document.body.scrollLeft;
		ret.scrollTop = document.body.scrollTop;	
	}
	
	return ret;
}

/*
 * Function to concatenate directorie paths (with check for double slashes)
 * @param dir1 first directory
 * @param dir2 second directory or filename
 * @return the concatenated directory with separator '/'
 */
function dircat(dir1, dir2)
{
	var result = dir1;
	if (result.charAt(result.length-1) != '/')
		result += "/";
	
	if (dir2.charAt(0) == '/')
		result += dir2.substr(1);
	else
		result += dir2;
		
	return result;
}
