var url = './xml.php';
var formCallingObject = false;
var promptElement = 'focuswindow';


// old
function loadForm(content,oclass,oid) {
	alert(formCallingObject);
	alert(formCallingObject.id);
	var formurl = (arguments.length>3 && arguments[3]!=false)?arguments[3]:false;

	this.promptElement = promptElement;
	if (arguments.length>4 && arguments[4]!=false) { // plus url
		this.promptElement = arguments[4];
	}
	
	if (arguments.length>5) {
		if (arguments[5]==false) {var showForm=false;}
		else {
			showForm = arguments[5];
			arguments[5]();
			showForm = false;
		}
	}
	else {
		showWindow(this.promptElement);
		showForm = displayForm.bind(this);
	}

	var formRequest = requestForm.bind(this,content,oclass,oid,formurl,showForm);
	formRequest();
}


function showWindow(el) {if($(el)) {$(el).show();}}
function closeWindow() {$(promptElement).hide();}

function processError() {setWindowInnerHTML("<img src='/images/feedback/connect_caution.gif' /> error opgetreden ..");}


// old
function requestForm(content,oclass,oid) { // url, oncomplete
	var pars = 'content='+content+'&c='+oclass+'&o='+oid;
	var onCompleteFunction = displayForm.bind(this);
	var formurl = (arguments.length>3 && arguments[3]!=false)?arguments[3]:url;

	if (arguments.length>4) {
		if(arguments[4]==false) {onCompleteFunction=false;} // cancel any display action
		else {onCompleteFunction=arguments[4];}
	}

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


function alertFailure(originalRequest,exception) {
	alert('failure '+exception+"\n"+originalRequest.responseText);
}


// old
function displayForm(originalRequest) {
//	alert(originalRequest.responseText);
	if (processErrors(originalRequest)) {return false;}
//	if (this.updateListOnComplete) {alert('!');this.updateList();}

	formCallingObject = this;
	if (!this.promptElement) { // on delete
		this.promptElement = promptElement;
	}

	var webforms = originalRequest.responseXML.getElementsByTagName("webform");
	if (webforms.length>0) {
		$(this.promptElement+'content').innerHTML = kloonhtml(webforms[0]);
		var header = originalRequest.responseXML.getElementsByTagName("title");
		$(this.promptElement+'header').innerHTML = header[0].firstChild.nodeValue;
	}
	else {
		$(this.promptElement+'content').innerHTML = '';
		$(this.promptElement+'header').innerHTML = '';
	}
	return true;
}


// old

function sendXMLForm(form) {
	var pars	= Form.serialize(form);
	var formurl = (arguments.length>1)?arguments[1]:url;

	var formProcess = processForm.bind(formCallingObject);
	var myAjax = new Ajax.Request(formurl,{method: 'post',parameters: pars,onLoading: postingForm,onComplete: formProcess});

	return false;
}



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


function processActions(originalRequest) {
	action = originalRequest.responseXML.getElementsByTagName("action_report");
	if (action.length>0) {
		feedback = $('feedback');
		feedback.innerHTML = kloonhtml(action[0]);
		return true;
	}
	return false;
}


// old
function processForm(originalRequest) {
//	alert(originalRequest.responseText);
	processActions(originalRequest);
	if (processErrors(originalRequest)) {return false;}

	if (this.updateOnComplete) {
		var list_url = originalRequest.responseXML.getElementsByTagName("list_url");
		if (list_url.length>0) {
			this.updateList('',list_url[0].firstChild.nodeValue);}
		else {this.updateList('')};
	}

	var acts;
	acts = originalRequest.responseXML.getElementsByTagName("action_report");
	if (acts.length>0) {
		setWindowInnerHTML('');
		setWindowInnerHTML(kloonhtml(acts[0].cloneNode(true)));

		$('reports').innerHTML	= "<div id='lastActionReport'>"+kloonhtml(acts[0].cloneNode(true))+'</div>';
		$('lastActionReport').appear();
		setTimeout("$('lastActionReport').fade()",2000);
		setTimeout("closeWindow()",4000);
	}
	else {
		setWindowInnerHTML('geen acties uitgevoerd');
		setTimeout("closeWindow()",4000);
	}

	var changedElements = originalRequest.responseXML.getElementsByTagName("changedElement");
	if (changedElements.length>0) {
		var changedElementId = changedElements[0].childNodes[0].firstChild.nodeValue;
		var changedElement = $(changedElementId);
	
		var updateValues = changedElements[0].getElementsByTagName("child");
		updateChildren(changedElement,updateValues);
	}

	return false;
}


function updateChildren(changedElement,updateValues) {
	for (i=0; i<updateValues.length;i++) {
		oid = updateValues[i].childNodes[0].firstChild.nodeValue;
		var value = updateValues[i].childNodes[1].firstChild.nodeValue;

		if (value=='checked') {changedElement.childNodes[oid].firstChild.checked = true;}
		else {
			if (value=='unchecked') {changedElement.childNodes[oid].firstChild.checked = false;}
			else {changedElement.childNodes[oid].innerHTML = value;}
		}
	}
}

function setWindowInnerHTML(html) {$(promptElement+'content').innerHTML = html;}
function getWindowInnerHTML(html) {return $(promptElement +'content').innerHTML;}
function setWindowHeader(html) {$(promptElement +'header').innerHTML = html;}

function gettingForm() {
	setWindowHeader('');
	setWindowInnerHTML("<img src='/images/feedback/connect_active.gif' class='feedback' /> bezig met laden ..");}
function postingForm() {setWindowInnerHTML("<img src='/images/feedback/connect_active.gif' class='feedback' /> bezig met saven ..");}



function statusUpdateLoading() {img.setAttribute('src','/images/feedback/wf_indicator.gif');}


function switchSetValue(dom,content,oclass,oid,statusfield,value) {
	return updateStatus(dom,content,oclass,oid,statusfield,value);
}

function updateStatus(dom,content,oclass,oid,statusfield,value) {
	var url 	= './xml.php';
	var pars 	= 'content='+content+'&c='+oclass+'&o='+oid+'&statuschange='+value+'&statusfield='+statusfield;
//	alert(pars);
	this.img	= $(dom);
	statusUpdateDisplay = displayStatusUpdate.bind(this);

	var myAjax 	= new Ajax.Request(url,{method: 'post',parameters: pars,onLoading: statusUpdateLoading,onComplete: displayStatusUpdate});
}



function displayStatusUpdate(originalRequest) {
	if (processErrors(originalRequest)) {return false;}
				
	// vervang status image
	var newimg = originalRequest.responseXML.getElementsByTagName("img")[0].firstChild.nodeValue;
	this.img.setAttribute('src',newimg);

	// vervang overige elementen
	processChangedElements(originalRequest);

	return true;
}


function processChangedElements(originalRequest) {
	var changedElements = originalRequest.responseXML.getElementsByTagName("changedElement");
	for (i=0;i<changedElements.length;i++) {
		id = changedElements[i].firstChild.firstChild.nodeValue;
		obj = $(id);
		changedattr = changedElements[i].childNodes[1];
		attrname = changedattr.firstChild.firstChild.nodeValue;
		attrval = changedattr.childNodes[1].firstChild.nodeValue;
		obj.setAttribute(attrname,attrval);
	}
}


function updateObjectVar(content,oclass,oid,objvar,objvalue) {
	var url 	= './xml.php';
	var pars 	= 'content='+content+'&c='+oclass+'&action=update&o='+oid+'&'+oclass+'_'+objvar+'='+objvalue;
//	alert(pars);

	var myAjax 	= new Ajax.Request(url,{method: 'post',parameters: pars}); //,onComplete: alertText});
}

function alertText(o) {
	alert(o.responseText);
}

function updateCalendar(period) {
	var pars	= 'content='+site_id+'_calendar&'+period;
	var url 	= '?xml=true&';
	
	var myAjax = new Ajax.Request(url,{method: 'post',parameters: pars,onLoading: gettingCalendar,onComplete: displayCalendar});

	return false;
}

function gettingCalendar() {
	new Effect.Opacity('kalender', {duration:0.5, from:1.0, to:0.0});
}

function displayCalendar(originalRequest) {
	var calendars =  originalRequest.responseXML.getElementsByTagName("calendar");
	$('kalender').innerHTML = kloonhtml(calendars[0]);
	new Effect.Opacity('kalender', {duration:0.5, from:0.0, to:1.0});
}




function processActions(originalRequest) {
	var acts = originalRequest.responseXML.getElementsByTagName("action_report");
	if (acts.length>0) {
		if ($('action_report')) {
			$('action_report').innerHTML = kloonhtml(acts[0]);
		}
	}	
}

	

function check(id) {
	$(id+'_true').addClassName('checkbutton');
	$(id+'_true').removeClassName('uncheckedbutton');
	$(id+'_false').addClassName('uncheckedbutton');
	$(id+'_false').removeClassName('crossbutton');
}


function uncheck(id) {
	$(id+'_true').addClassName('uncheckedbutton');
	$(id+'_true').removeClassName('checkbutton');
	$(id+'_false').addClassName('crossbutton');
	$(id+'_false').removeClassName('uncheckedbutton');
}


function on(id) {
	arr = id.split('_');
	id = arr[0];
	$(id+'_true').removeClassName('uncheckedbutton');
	$(id+'_true').addClassName('updating');
	if (arguments.length>1) {updateCheck(id,'addition',arguments[1]);}
	else {updateCheck(id,'addition');}

}


function off(id) {
	arr = id.split('_');
	id = arr[0];
	$(id+'_false').removeClassName('uncheckedbutton');
	$(id+'_false').addClassName('updating');
	if (arguments.length>1) {updateCheck(id,'remove',arguments[1]);}
	else {updateCheck(id,'remove');}
}



 // used by inzet
function updateCheck(id,action) {
	var content = (arguments.length>2)?arguments[2]:'checkUncheck';
	var pars	= 'content='+site_id+'_'+content+'&id='+id+'&action='+action;
	this.imgid 	= id;

	checkUpdateDisplay = displayCheckUpdate.bind(this);
//	alert(url+'?'+pars);
	var myAjax = new Ajax.Request(url,{method: 'post',parameters: pars,onComplete: checkUpdateDisplay});

	return true;
}


function displayCheckUpdate(originalRequest) {
//	alert(originalRequest.responseText);
	// schrijf alle referenties in refs
	processActions(originalRequest);

	$(this.imgid+'_true').removeClassName('updating');
	$(this.imgid+'_false').removeClassName('updating');

	var acts = originalRequest.responseXML.getElementsByTagName("action");
	if (acts.length>0) {
		var action = acts[0].firstChild.nodeValue;

		if (action=='remove') {uncheck(this.imgid);}
		else {check(this.imgid);}
	}
	else {
		alert('fout opgetreden of niet meer ingelogd.');
	}
}



	// used by student task
function checkUncheck(dom,content,oclass,oid,statusfield) {
	var url 	= './xml.php';
	var pars 	= 'content='+content+'&action=switch&c='+oclass+'&o='+oid+'&statusfield='+statusfield;


	var myAjax 	= new Ajax.Request(url,{method: 'post',parameters: pars,onLoading: statusUpdateLoading,onComplete: displayCheckUncheck});

//alert(dom);
	img = $(dom);
//	alert(img.src);
}



function displayCheckUncheck(originalRequest) {
	if (processErrors(originalRequest)) {return false;}
	var newimg = originalRequest.responseXML.getElementsByTagName("img")[0].firstChild.nodeValue;
	img.setAttribute('src',newimg);
	return true;
}


function kloonhtml(bron) {
	// functie voor het weergeven van refernties in DOM
	// een eenvoudige cloneNode() werkt niet bij complexe constructies
	// in een loop wordt de boom deels nagebouwd
	var s = '';
//	script = '';
	for(var i = 0; i < bron.childNodes.length; i++) {
		var knoop = bron.childNodes[i];
		switch (knoop.nodeType) {
			case 1:		// elementknoop
				if (knoop.nodeName == 'script') {
					script = kloonhtml(knoop);
//					alert(knoop.firstChild.nodeValue);
					eval(script);
				}
				else {
					s += '<'+knoop.nodeName;
					for (var j = 0; j < knoop.attributes.length; j++) {
						s += ' '+knoop.attributes[j].nodeName+'="'+knoop.attributes[j].nodeValue+'"';
					}
					s += ">"+kloonhtml(knoop)+"</"+knoop.nodeName+">";
				}
				break;
			case 3:		// Tekstknoop
				s += knoop.nodeValue;
				break;
				// andere knooptypen zijn niet relevant
			case 4:  //cdata
				s += knoop.nodeValue;
				break;
		}
	}
	return s;
}



function showStudySelect(newactivefield) {
	activefield = newactivefield;
	
	url = './xml.php';
	pars = 'action=studies&studies='+newactivefield.value;
	var myAjax = new Ajax.Request(url,{method: 'post',parameters: pars,onComplete: displayStudySelect});
}
			
function displayStudySelect(originalRequest) {
	xml = originalRequest.responseXML.getElementsByTagName('xml');
	xml = xml[0];
	$('infowindow_data').innerHTML = kloonhtml(xml);
	$('infowindow').style.visibility='visible';
//	Effect.Fade($('infowindow'),{from: 0,to: 1});
}

function hideStudySelect() {}


function studyselectupd(val) {
	var str = new Array();
	form = $('studyselectform');

	for (i=0;i<form['studies[]'].length;i++) {
		if (form['studies[]'][i].checked) {
			str[str.length] = form['studies[]'][i].value;
		}
	}
		
	st = '';
	for (i=0;i<str.length;i++) {
		if (i==0) {st = str[i];}
		else {st += ','+str[i];	}
	}
	activefield.setAttribute('value',str);
}


function insertAfter(parent, node, referenceNode) {parent.insertBefore(node, referenceNode.nextSibling);}
function prependChild(parent, node) {parent.insertBefore(node, parent.firstChild);}





