// xAjax Stuff
function submitForm(e, additional_cf) {
	
	if (e && e.tagName == 'FORM') {
		
		if(!ValidateForm(e)) return false;
		
		var formElements = e.elements;
		var target_cf = formElements['target_cf'] ? formElements['target_cf'].value : additional_cf;
		var wait_button = formElements['wait_button'].value;
		
		if(target_cf) {
			
			var chksum = location.hostname;
			formElements['checksum'].setAttribute("value",chksum);
			
			if (wait_button && xajax.$(wait_button)) {
				xajax.$(wait_button).disabled=true;
				if(rx_lang == 'en') {
					xajax.$(wait_button).value="Please wait...";
				} else if(rx_lang = 'nl') {
					xajax.$(wait_button).value="Even geduld aub...";
				}
			}
			xajax.call(target_cf, new Array(xajax.getFormValues(e)), 1);
			
		} else {
			alert('submitForm: No valid arguments');
		}
	} else {
		alert('submitForm: No valid FORM object');
	}
	return false;
}


function ValidateForm(e) {
	var msg = '';
	var chk = '';
	var focusfld = '';
	var i,ii,x;
	var rclist = [];
	var val = '';
	for(i=0;i<e.length;i++) {
		if (chk = e[i].getAttribute('inpchk')) {
			e[i].className = e[i].className.replace('mandatory','');
			if ((chk == 'notempty')) {
				if (e[i].type == 'checkbox') {
					val = (e[i].checked) ? '1' : '';
				} else {
					val = e[i].value;
				}
				if (val == '') {
					if (focusfld == '') focusfld = e[i].name;
					msg += e[i].getAttribute('chkmsg')+"\n";
					e[i].className += ' mandatory';
				}
			}
			if ((chk == 'minmaxlen')) {
				var min = e[i].getAttribute('minlen');
				var max = e[i].getAttribute('maxlen');
				if (e[i].value.length < min) {
					msg += e[i].getAttribute('chkmsg')+"\n";
					if (focusfld == '') focusfld = e[i].name;
					e[i].className += ' mandatory';
				}
				if (e[i].value.length > max) {
					msg += e[i].getAttribute('maxmsg')+"\n";
					if (focusfld == '') focusfld = e[i].name;
					e[i].className += ' mandatory';
				}
			}
			if ((chk == 'radiovalue')) {
				if (rclist[e[i].name] == 1) continue;
				rclist[e[i].name] = 1;
				x = e[e[i].name];
				if (!!x[0]) {
					for(ii=0;ii<x.length;ii++) {
						x[ii].className = x[ii].className.replace('mandatory','');
					}
					val = false;
					for(ii=0;ii<x.length;ii++) {
						if (x[ii].checked) val = true;
					}
					if (!val) {
						for(ii=0;ii<x.length;ii++) {
							x[ii].className += ' mandatory';
						}
						if (focusfld == '') focusfld = i;
						msg += e[i].getAttribute('chkmsg')+"\n";
					}
				}
			}
		}
	}
	if (msg) {
		alert(msg);
		e[focusfld].scrollIntoView(false);
		e[focusfld].focus();
		return false;
	}
	return true;
}

var base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split("");
var base64inv = {};
for (var i = 0; i < base64chars.length; i++)
{
 base64inv[base64chars[i]] = i;
}

function base64_decode (s)
{
 // remove/ignore any characters not in the base64 characters list
 // or the pad character -- particularly newlines
 s = s.replace(new RegExp('[^'+base64chars.join("")+'=]', 'g'), "");

 // replace any incoming padding with a zero pad (the 'A' character is zero)
 var p = (s.charAt(s.length-1) == '=' ?
 (s.charAt(s.length-2) == '=' ? 'AA' : 'A') : "");
 var r = "";
 s = s.substr(0, s.length - p.length) + p;

 // increment over the length of this encrypted string, four characters at a time
 for (var c = 0; c < s.length; c += 4) {

 // each of these four characters represents a 6-bit index in the base64 characters list
 // which, when concatenated, will give the 24-bit number for the original 3 characters
 var n = (base64inv[s.charAt(c)] << 18) + (base64inv[s.charAt(c+1)] << 12) +
 (base64inv[s.charAt(c+2)] << 6) + base64inv[s.charAt(c+3)];

 // split the 24-bit number into the original three 8-bit (ASCII) characters
 r += String.fromCharCode((n >>> 16) & 255, (n >>> 8) & 255, n & 255);
 }
 // remove any zero pad that was added to make this a multiple of 24 bits
 return r.substring(0, r.length - p.length);
}
