var fw = {
		replace: function(doc,id) {
			var tmp = document.getElementById(id);
			if (tmp)
				tmp.innerHTML=doc;
			},
		confirm: function(doc) {
			},
		window: function(doc) {
				window.open(doc,'_blank','');
				return false;
			},
		navigate: function(doc) {
				window.location=doc;
			},
		reload: function() {
			window.location.reload();
			},
		alert: function(doc) {
			alert(doc);
			}
	};

var validator = {
		curr_enter: function(e) {
			},
		curr_leave: function(obj) {
				var vc=0, ac=0;
				var m = obj.value.match(/^([0-9]+)(,|\.)([0-9]{1,2})/);
				if (m!=null) {
					vc=''+parseInt(m[1]);
					if (m[3]) {
						ac=m[3].length>1 ? parseInt(m[3]) : parseInt(m[3])*10;
					}	else {
						ac=(vc%100);
						vc=Math.floor(vc/100);
					}
				}	else
					if (obj.value)
						vc=''+parseInt(obj.value);
				var c = ac.toString();
				for (;c.length<2;c='0'+c);
				obj.value=vc+','+c;
			},
		checkpostinit: function(id) {
				remote.subsys(id,'sub','checks');
			},
		checkinit: function(doc,id) {
				var frm = document.getElementById(id);
				doc = new DOMParser().parseFromString(doc,'text/xml');

				var els = frm.getElementsByTagName('SELECT');
				for (var i=0;i<els.length;i++) {
					effect.addevent(els[i],'change',validator.check);
					//effect.addevent(els[i],'keyup',validator.check);
					els[i].doc=doc;
					//validator._check(els[i]);
				}
				if (els.length>0)
					validator._check(els[0]);

				//if (els.length>0) validator.check(els[0]);
			},
		check: function(obj) {
				obj = obj.srcElement ? obj.srcElement : obj.target;
				validator._check(obj);
			},
		_check: function(obj) {
				var frm = obj.form;
				var els = obj.doc.getElementsByTagName('element');
				var tmp = '';
				for (var i=0;i<els.length;i++) {
					var arr = new Object;
					var refs = new Object;
					var id = els[i].getAttribute('id');
					var div = document.getElementById('frm_'+id);
					var rels = els[i].getElementsByTagName('rel');
					var good = 0;
					for (var j=0;j<rels.length;j++) {
						var rel = document.getElementById(rels[j].getAttribute('element')); // bronelement dat de waarde heeft
						if (!refs[rel.id]) {
							if (!refs.length) refs.length=0;
							refs.length++;
							refs[rel.id]=0;
						}
						refs[rel.id]++; // aantal referenties
						if (rels[j].getAttribute('value')==rel.value) {
							if (!arr[rel.id]) arr[rel.id]=0;
							good++;
							arr[rel.id]++; // aantal goede antwoorden
						}
					}
					div.style.display=good==refs.length ? 'block' : 'none';
					//div.style.visibility=good==refs.length ? 'visible' : 'hidden';
				}
			}
	};


var effect = {
		background: undefined,
		regevent: function(doc,id) {
				var l = doc.split('|');
				//alert(document.getElementById(l[1]));
				effect.addevent(document.getElementById(l[1]),l[0],new Function(l[2]));
			},
		addevent: function(obj,type,handler) {
				if (obj)
					if (obj.addEventListener)
						obj.addEventListener(type,handler,true);
					else
						obj.attachEvent('on'+type,handler);
			},
		select: {
				enter: function(e) {
					if (!e) var e = window.event;
					var obj = e.target ? e.target : e.srcElement;
					obj.select();
					}
			},
		highlight: {
			init: function(id) {
					//return false;
					var obj = document.getElementById(id);
					if (obj) {
						var els = obj.getElementsByTagName('INPUT');
						for (var i=0;i<els.length;i++)
							if (els[i].type=='text') {
								effect.addevent(els[i],'focus',effect.highlight.enter);
								effect.addevent(els[i],'blur',effect.highlight.blur);
								effect.addevent(els[i],'click',effect.select.enter);
							}
						els = obj.getElementsByTagName('TEXTAREA');
						for (var i=0;i<els.length;i++) {
								effect.addevent(els[i],'focus',effect.highlight.enter);
								effect.addevent(els[i],'blur',effect.highlight.blur);
						}
						els = obj.getElementsByTagName('SELECT');
						for (var i=0;i<els.length;i++) {
								effect.addevent(els[i],'focus',effect.highlight.enter);
								effect.addevent(els[i],'blur',effect.highlight.blur);
						}
					}
				},
			enter: function(e) {
					if (!e) var e = window.event;
					var obj = e.target ? e.target : e.srcElement;
					obj.style.background=effect.background ? effect.background : 'lime';
				},
			blur: function(e) {
					if (!e) var e = window.event;
					var obj = e.target ? e.target : e.srcElement;
					obj.style.background='white';
				}
			}
	};

var table = {
		init: function(id) {
				var root = document.getElementById(id);
				if (root) {
					var els = root.getElementsByTagName('TR');
					for (var i=1;i<els.length;i++) { // eerste TR is kop
						var tds = els[i].getElementsByTagName('TD');
						for (var j=0;j<tds.length;j++) {
							effect.addevent(tds[j],'mouseover',table.over);
							effect.addevent(tds[j],'mouseout',table.out);
							if (j>0) { // eerste kolom geen click
								effect.addevent(tds[j],'click',table.click);
								tds[j].style.cursor='pointer';
							}
						}
					}
				}
			},
		click: function(e) {
				if (!e) var e = window.event;
				var obj = e.target ? e.target : e.srcElement;
				for (;obj!=null && obj.tagName!='TR';obj=obj.parentNode);
				if (obj) {
					var els = obj.getElementsByTagName('INPUT');
					for (var i=0;i<els.length;i++) {
						if (els[i].type=='checkbox') {
							var id = els[i].name.match(/^[a-z0-9]+/);
							remote.subsys(id,'sub','open','id',els[i].value);
							break;
						}
					}
				}
			},
		over: function(e) {
				if (!e) var e = window.event;
				var obj = e.target ? e.target : e.srcElement;
				for (;obj!=null && obj.tagName!='TR';obj=obj.parentNode);
				if (obj) {
					obj.oldclass=obj.className;
					obj.className='over';
					//obj.oldbackground=obj.style.background;
					//obj.style.background='white';
				}
			},
		out: function(e) {
				if (!e) var e = window.event;
				var obj = e.target ? e.target : e.srcElement;
				for (;obj!=null && obj.tagName!='TR';obj=obj.parentNode);
				if (obj) {
					//alert(obj.className);
					obj.className=obj.oldclass;
				}
			}
	};

var remote = {
		url: undefined,
		init: function(url) {
				remote.url = url;
			},
		gather: function(root) {
			root = document.getElementById(root);
			var data = '';
			var els = root.getElementsByTagName('INPUT');
			for (var i=0;i<els.length;i++)
				if (els[i].type!='checkbox' || els[i].checked)
					data += '&'+els[i].name+'='+escape(els[i].value);
			els = root.getElementsByTagName('TEXTAREA');
			for (var i=0;i<els.length;i++)
				data += '&'+els[i].name+'='+escape(els[i].value);
			els = root.getElementsByTagName('SELECT');
			for (var i=0;i<els.length;i++)
				data += '&'+els[i].name+'='+escape(els[i].value);
			return data;
			},
		subsyswaiting: function(id,subsys) {
			var obj = document.getElementById(id);
			if (obj) {
				var tmp = document.createElement('DIV');
				tmp.style.position='absolute';
				var b = ((obj.offsetWidth-(16*2))/2);
				var h = ((obj.offsetHeight-(16*2))/2);
				tmp.style.width=(obj.offsetWidth-b*2)+'px';
				tmp.style.height=(obj.offsetHeight-h)+'px';
				tmp.style.paddingLeft=b+'px';
				tmp.style.paddingRight=b+'px';
				tmp.style.paddingTop=h+'px';

				tmp.style.background='white';
				tmp.style.opacity=0.75;
				tmp.style.filter='alpha(opacity=75)';
				tmp.innerHTML='<img src="gfx/loading.gif" alt="" />';
				obj.insertBefore(tmp,obj.childNodes[0]);
			}
			var data = 'subsys='+subsys;
			for (var i=2;i<arguments.length;) {
				data += '&'+arguments[i++]+'='+arguments[i++];
			}
			remote.post(data);
			return false;
			},
		subsys: function(subsys) {
			var data = 'subsys='+subsys;
			for (var i=1;i<arguments.length;) {
				data += '&'+arguments[i++]+'='+arguments[i++];
			}
			remote.post(data);
			return false;
		},
		post: function(data) {
			var x = new XMLHttpRequest();
			x.open("POST",remote.url,true);
			x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			x.onreadystatechange = function() {
					if (x.readyState==4) {
						if (x.responseXML) {
							var els = x.responseXML.documentElement.getElementsByTagName('action');
							for (var i=0;i<els.length;i++)
							if (!els[i].getAttribute('post')) {
								var call = els[i].getAttribute('call');
								eval(call+'(Sarissa.getText(els[i],true),els[i].getAttribute("id"))');
							}
							for (var i=0;i<els.length;i++)
							if (els[i].getAttribute('post')) {
								var call = els[i].getAttribute('call');
								eval(call+'(Sarissa.getText(els[i],true),els[i].getAttribute("id"))');
							}
						}
					}
				};
			x.send(data);
		}
	};

