bug_tracking_page	= '';
bug_tracking_class	= '';
bug_tracking_oid	= '';

var closingTarget = false;

function confirmDeletion(text) {
	(text) ? text = "'"+text+"'" : text = 'dit object';
	return confirm("Weet je zeker dat je "+text+" wilt verwijderen?");
}


function resizeHeight(objs) {
	diff = (windowHeight())-nav_top;
	objs.each(function(obj) {$(obj).style.height = diff+'px';});
}

function openObjectForm(id) {
	var options = Object.extend({
		content:		page_content,
		pars:			false,
		objectClass:	'',
		oid:			id,
		requestUrl:		'./xml.php',
		submitUrl:		'./xml.php',
		listUrl:		'./xml.php',
		targetId:		'focuswindow',
		onConfirm:		false,
		displayOnLoad:	true,
		feedbackImgSrc:	'/images/feedback/wait.png',
		displayOnSave:	true,
		refreshListOnLoad:	false}, arguments[1] || { });

	if (options.onConfirm) {
		if (!confirm(options.onConfirm)) {
			return false;
		}	
	}

	bug_tracking_page	= options.content;
	bug_tracking_class	= options.objectClass;
	bug_tracking_oid	= options.oid;

	this.targetId		= options.targetId;
	this.submitUrl		= options.submitUrl;
	this.displayOnLoad	= options.displayOnLoad;
	this.displayOnSave	= options.displayOnSave;
	this.refreshListOnLoad	= options.refreshListOnLoad;
	this.target			= $(options.targetId);
	this.listUrl		= options.listUrl;

	if (closingTarget) {
		clearTimeout(closingTarget);	
	}

	if (this.displayOnLoad) {
		showWindow(this.targetId);
		if ($(this.targetId+'header')) {$(this.targetId+'header').update('');}
		if ($(this.targetId+'content')) {
			$(this.targetId+'content').update("<img src='"+options.feedbackImgSrc+"' class='feedback' /> bezig met laden ..<br /><br />");
		}
	}

	var onCompleteFunction = displayObjectForm.bind(this);
	var pars = 'content='+options.content+'&c='+options.objectClass+'&o='+options.oid+'&'+options.pars;
//	alert(pars);
//	alert(options.requestUrl+'?'+pars);

	var myAjax = new Ajax.Request(options.requestUrl,{method: 'post',parameters: pars,onComplete: onCompleteFunction,onException: alertFailure});
}


function displayObjectForm(response) {
	processResponseActions(response,this);
	if (processResponseErrors(response)) {return false;}

//	formCallingObject = this;
	if (this != window) {
		// tussentijdse requests (zoek instructies) mogen niet het actuele object vervangen
		formCallingObject = this; // set for the submitobjectform
	}

	if (this.updateOnComplete) {
		if (this.refreshListOnLoad) {this.updateList('',this.listUrl);}
	}

	if (this.displayOnLoad) {
		var webforms = response.responseXML.getElementsByTagName("webform");
		var header = response.responseXML.getElementsByTagName("title");

		if (webforms.length>0) {
			$(this.targetId+'content').innerHTML	= kloonhtml(webforms[0]);
			
			if ($(this.targetId+'header')) {$(this.targetId+'header').update(header[0].firstChild.nodeValue);}
//			$(this.targetId+'header').innerHTML		= header[0].firstChild.nodeValue;
		}
		else {
			if ($(this.targetId+'header')) {$(this.targetId+'header').innerHTML		= 'fout in formulier';}
			$(this.targetId+'content').innerHTML	= "<img src='/images/buttons/XPstyle/XPstyle_alert40x40.gif' onclick=\"$('contentdebug_pane').toggle();\" /> Het ontvangen formulier is niet goed opgemaakt en kan daarom niet getoond worden.<br /><br /><span class='mini'>Foutmeldingen kan je e-mailen naar <a href='mailto:bugs@voorlichtingsysteem.nl?subject=foutcode%20"+bug_tracking_page+','+bug_tracking_class+','+bug_tracking_oid+"'>bugs@voorlichtingsysteem.nl</a>. Vermeld daarbij de volgende foutcode: "+
	bug_tracking_page+','+bug_tracking_class+','+bug_tracking_oid
			+"</span><div class='mini' id='contentdebug_pane' style='display: none;'><br />debug<br />"+response.responseText.replace(/</g,'&lt;').replace(/>/g,'&gt;')+'</div>';
			//substring(0,720)
		}
	}


	processChangedElements(response);

	return true;
}


function submitObjectForm(form) {
	this.form	= form;
	var pars	= Form.serialize(form);
	var formurl = './xml.php';

//	alert('1234');

	form.addClassName('submitting');
	$('reports').update("<div><img src='/images/feedback/wait.png' alt='busy'/> bezig wijzigingen op te slaan</div>");
//	form.$$('#webfaceformsubmit').addClassName('submitting');


	if (formCallingObject.submitUrl)	{formurl = formCallingObject.submitUrl;}
	if (arguments.length>1)				{formurl = arguments[1].submitUrl;}

//	$(formCallingObject.targetId+'content').update("<img src='/images/feedback/connect_active.gif' class='feedback' /> bezig met opslaan ..<br /><br />");
	var formProcess = submitResponseHandler.bind(formCallingObject);
	var myAjax = new Ajax.Request(formurl,{method: 'post',parameters: pars,onComplete: formProcess,evalScripts: true});

	return false;
}


function submitResponseHandler(response) {
	form.removeClassName('submitting');
//	alert(response.responseText);
	processResponseActions(response,this);
	if (processResponseErrors(response)) {return false;}
	if (this.updateOnComplete) {
		var list_url = response.responseXML.getElementsByTagName("list_url");
		if (list_url.length>0) {
			this.updateList('',list_url[0].firstChild.nodeValue);}
		else {this.updateList('',this.listUrl)};
	}
	closeWindow();

	var changedElements = response.responseXML.getElementsByTagName("changedElement");
	for (var j=0;j<changedElements.length;j++) {
		var changedElementId	= changedElements[j].firstChild.firstChild.nodeValue;
		var changedAttributes	= changedElements[j].getElementsByTagName("changedAttribute");
		
		for (var i=0;i<changedAttributes.length;i++) {
			var attName		= changedAttributes[i].childNodes[0].firstChild.nodeValue;
			var attValue	= kloonhtml(changedAttributes[i].childNodes[1]);
//			alert('set '+changedElementId+'.'+attName+' to '+attValue);

			$(changedElementId)[attName]	= attValue;
		}
	}

	return false;
}


function processResponseErrors(response) {
	num_args = arguments.length;
	if (num_args>1) {
		report_error = arguments[1];
	}
	else {report_error = true;}
//	alert(response.responseXML);

	if (!response.responseXML) {
		setWindowInnerHTML(response.responseText);
		setWindowHeader('Error');
		return true;
	}
	else {
		error = response.responseXML.getElementsByTagName("error");
		if (error.length==1 && report_error) {
			setWindowInnerHTML(error[0].firstChild.nodeValue);
			setWindowHeader('Error');
			$(promptElement).show();
			return true;
		}
	}
	return false;
}


function processResponseActions(response,obj) {
	action = response.responseXML.getElementsByTagName("action_report");
	if (action.length>0) {
		if (obj.targetId) {
			feedback = $(obj.targetId+'content'); //$('feedback');
		}
		else {
			feedback = $('focuswindowcontent');	
		}
		feedback.innerHTML		= kloonhtml(action[0]);
		$('reports').innerHTML	= "<div id='lastActionReport'><img src='/images/icons/16x16/check2_gray.png' alt='action performed'/> "+kloonhtml(action[0])+'</div>';
		$('lastActionReport').appear();
		setTimeout("$('lastActionReport').fade()",2000);
		return true;
	}
	else {
		$('reports').update("<div id='lastActionReport'>_</div>");	
		$('lastActionReport').appear();
		setTimeout("$('lastActionReport').fade()",2000);
	}
	return false;
}


function requestEffect(form,target) {
	var pars = $(form).serialize();

//	alert(target);
	pars = pars.replace('action=insert','action=requestEffect').replace('action=update','action=requestEffect');
//	alert(pars);
	var rurl = './xml.php?'+pars
	var myAjax = new Ajax.Updater(target,rurl)
}





Autocompleter.itemsList = Class.create(Autocompleter.Local, {
	updateElement: function(selectedElement) {
		var selectValue = selectedElement.id.substr(12);
		
		if (this.options.updateElement) {
			this.options.updateElement(selectedElement);
			return;
		}
		var value = '';
		if (this.options.select) {
			//alert('b');
			var nodes = $(selectedElement).select('.' + this.options.select) || [];
			if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
		} else
			value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');

		
		var bounds = this.getTokenBounds();
		if (bounds[0] != -1) {
			var newValue	= this.element.value.substr(0, bounds[0]);
			var whitespace	= this.element.value.substr(bounds[0]).match(/^\s+/);
			if (whitespace) newValue += whitespace[0];
	

			this.addListItem(selectValue,value);
		} else {
			//alert('d');
			this.element.value = value;
		}
		this.oldElementValue = this.element.value;
		this.element.focus();
		
		if (this.options.afterUpdateElement)
			this.options.afterUpdateElement(this.element, selectedElement);
	},

	addListItem: function(selectValue,value) {
//		alert(newValue +','+ value+',' + this.element.value.substr(bounds[1]));
		var sib	= this.element.previousSiblings();
		var ul	= sib[0];

		var _a = Builder.node('a');
//			alert(this.element.id);
//			alert(this.element.id.replace('input_nonfunctional','value_'));
		var storage_hidden_name = this.element.id.replace('input_nonfunctional','value_');
		var closeStr = "<span class='closebutton' onclick=\"this.parentNode.remove(); $('"+storage_hidden_name+"').value=$('"+storage_hidden_name+"').value.replace('"+selectValue+"','');\" title='verwijder'></span>";
		var _text = value;
		var _li = Builder.node('li', {id: ul.id+'_'+selectValue});
		new Insertion.Bottom(_a, _text);
		new Insertion.Bottom(_li, closeStr);
		new Insertion.Bottom(_li, _a);
		new Insertion.Bottom(ul, _li);
//			this.element.value = newValue + value + this.element.value.substr(bounds[1]);

		var listInput = sib[1];
		if (listInput.value==undefined) { // fix a bug where IE has a different object list
			var listInput = sib[2];
		}
		listInput.value = $F(listInput)+','+selectValue;

		this.element.value = '';
	},

	setOptions: function(options) {
		this.options = Object.extend({
		choices: 10,
		partialSearch: true,
		partialChars: 2,
		ignoreCase: true,
		fullSearch: false,

		selector: function(instance) {
			var ret       = []; // Beginning matches
			var partial   = []; // Inside matches
			var entry     = instance.getToken();
			var count     = 0;
			
			for (var i in instance.options.array) {
				//        	alert(i+' : '+instance.options.array[i]);
				if(ret.length < instance.options.choices) { 
			
				var elem = instance.options.array[i];
				var foundPos = instance.options.ignoreCase ? 
				elem.toLowerCase().indexOf(entry.toLowerCase()) : 
				elem.indexOf(entry);
			
				while (foundPos != -1) {
					if (foundPos == 0 && elem.length != entry.length) { 
						ret.push("<li id='selectValue_"+i+"'><strong>" + elem.substr(0, entry.length) + "</strong>" + 
						elem.substr(entry.length) + "</li>");
						break;
					} else if (entry.length >= instance.options.partialChars && 
					instance.options.partialSearch && foundPos != -1) {
						if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
							partial.push("<li id='selectValue_"+i+"'>" + elem.substr(0, foundPos) + "<strong>" +
							elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
							foundPos + entry.length) + "</li>");
							break;
						}
					}
			
					foundPos = instance.options.ignoreCase ? 
					elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
					elem.indexOf(entry, foundPos + 1);
			
				}
				}
			}
			if (partial.length)
				ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
				return "<ul>" + ret.join('') + "</ul>";
			}
		}, options || { });
	}
});

function TabbedPane(dom_id) {
	this.dom_id = dom_id;
	this.selected_tab	= false;
	this.selectTab		= selectTab;
	this.clickTab		= clickTab;
	this.slideDown		= SlideDownPane;
	this.slidDown		= false;
	this.previousTab	= previousTab;
	this.nextTab		= nextTab;
	if ($(this.dom_id)) {this.num_tabs = $(this.dom_id).getElementsByTagName('li').length;}
	else {alert('tab '+this.dom_id+' bestaat niet. Wilt u dit melden aan de beheerder?');}
	this.current = false;
}


function previousTab() {
	if (this.current==0) {} // at the beginning
	else {
		var li = $(this.dom_id).getElementsByTagName('li');
		$(li[this.current-1]).onclick();
//		this.selectTab(this.current-1);
	}	
}

function nextTab() {
	if (this.current==this.num_tabs) {} // at the end
	else {
		var li = $(this.dom_id).getElementsByTagName('li');
		$(li[this.current+1]).onclick();
//		this.selectTab(this.current+1);
	}	
}

function clickTab(num) {
	var li = $(this.dom_id).getElementsByTagName('li')[num];
	li.getElementsByTagName('a')[0].onclick();
}


function selectTab(_id) {
	if (!isNaN(_id)) {
		this.current = _id;

		if ($(this.selected_tab)) {$(this.selected_tab).removeClassName('active');}
		if ($(this.selected_tab+'_content')) {$(this.selected_tab+'_content').hide();}

		var id_name = $(this.dom_id).getElementsByTagName('li')[_id].id;


		if($(id_name)) {
			this.selected_tab = id_name;
			$(id_name).addClassName('active');
			if ($(id_name+'_content')) {
				$(id_name+'_content').show();
			}
		}
		else {
			this.selected_tab = this.dom_id+'_'+(_id+1);
			if ($(this.dom_id+'_'+(_id+1)+'_content')) {
				$(this.dom_id+'_'+(_id+1)+'_content').show();
			}
		}
	}
	else {
		var li = $(this.dom_id).getElementsByTagName('li');
//		alert(li.length);
		for (var i=0;i<li.length;i++) {
			if ($(_id)=='') {alert('no '+_id);}
			else {
//				alert(li[i]+'=='+$(_id));
				if (li[i]==$(_id)) {
					return this.selectTab(i);	
				}
			}
		}
	}
}


function SlideDownPane() {
	if (this.slidDown)	{
		new Effect.SlideUp('export_pane',{ duration: 0.5 });
	}
	else {
		new Effect.SlideDown('export_pane',{ duration: 0.5 });
	}
	this.slidDown = !this.slidDown;
}


function duplicateCheck(input) {
	input.form.elements['action'].value = 'edit';
	var className	= input.form.elements['c'].value;
	var dblClass	= 'DuplicateUserCheck';
	if (arguments.length>1) {dblClass = arguments[1];}
//	alert(className+'_ictaccount');
//	alert(input.form.elements[className+'_ictaccount']);

	if (input.form.elements[className+'_ictaccount']) {
//		alert(input.form.elements[className+'_ictaccount'].value);
		if (input.form.elements[className+'_ictaccount'].value.length<2) {
			$(input.form.elements[className+'_ictaccount']).addClassName('warning');
		}
		else {
			$(input.form.elements[className+'_ictaccount']).removeClassName('warning');
		}
	}
	input.form.elements['c'].value = dblClass;
	var parsvalue = $(input.form).serialize();

	parsvalue += '&className='+className; //+input.form['c'].value;
//	alert(parsvalue);
	
	openObjectForm(0,{pars: parsvalue, targetId: 'formfeedback'});
	input.form.elements['action'].value = 'update';
	input.form.elements['c'].value = className;
//	openObjectForm(0,{pars: parsvalue});
}


function windowSizes() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return new Array(myWidth,myHeight)
}

function windowWidth() {
	var sizes = windowSizes();
	return 	sizes[0];
}

function windowHeight() {
	var sizes = windowSizes();
	return 	sizes[1];
}


function checkCompleteness(selection,feedback) {
	elements = $$(selection); //document.forms[0].elements;
	
	var s = '';
	var total = new Number(0);
//		alert(elements.length);
	for (var i=0;i<elements.length;i++) {
//		if (elements[i].name.indexOf(id)!=-1) {
//				if (isnumeric)
			total += new Number(elements[i].value);
//		}
	}

	if (total!=100) {
		$(feedback).style.visibility='visible';
		return false;
	}
	else {	
		$(feedback).style.visibility='hidden';
		return true;
	}
}


function setCheckboxes(iname,checked) { // 20090224
	$$('input').each(function(o) {if(o.name==iname) {o.checked = checked;}}
	);
}


// used by MCM declaraties
function loadAndCheck(obj,oclass,oid,objvar) {
	if (obj.alt == 'checked') {
		obj.src = '/images/checkbuttons/checkbutton_unchecked12x12gray.png';
		obj.alt = 'unchecked';
		updateObjectVar(page_content,oclass,oid,objvar,0);
	}
	else {
		obj.src = '/images/checkbuttons/checkbutton_checked12x12gray.png';
		obj.alt = 'checked';
		updateObjectVar(page_content,oclass,oid,objvar,1);
	}
}




function updateEndDate(form,start,end) { // 20090616
	var fields		= $A(new Array('year','month','day'));
	var startdate	= new Array();
	var enddate		= new Array();
	fields.each(function(val) {startdate[startdate.length] = $F(form[start+'['+val+']']);});
	fields.each(function(val) {enddate[enddate.length] = $F(form[end+'['+val+']']);});

	if (startdate.join('-')>enddate.join('-')) {
		form[end+'[year]'].value	= startdate[0];
		form[end+'[month]'].value	= startdate[1];
		form[end+'[day]'].value	= startdate[2];
	}
}
