/**
 * @author Boaz den Besten
 * @version 0.1.7-12-2006
 * @description
 * Dit is alleen te gebruiken als:
 * - Een input element in de checkInit() functie voorkomt
 * - Als een element een id heeft
 * - Als een element een label met een id heeft wat is: label_[idVanBijBehorendElement] vb: element: id='ed' label: id='label_ed'
 * - Er een CSS is met de classes: check & checked
 * - Het formulier een onsubmit heeft: onsubmit="return checkSubmit()"
 *
 * Checks die gebruikt kunnen worden:
 * checkMail
 * ckeckPostcode
 * checkEmpty
 * checkNumber (heeft extra params: ondergrens & bovengrens)
 */

/**
 * Een element met een check toevoegen:
 */
function addCheck(elementId, fn, param1, param2){
	var obj = document.getElementById(elementId);
	
	addEvent(obj, 'blur', check);
	obj.check = fn;
	obj.valid = false;
	obj.param1 = param1;
	obj.param2 = param2;
}

/**
 * een E-mail adres valideren:
 */
function checkMail(obj){
	var sValue = obj.value;
	var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	obj.valid = regex.test(sValue);
	markLabel(obj);
}

/**
 * Een postcode valideren:
 */
function checkPostcode(obj){
	var sValue = obj.value;
	var regex = /^[0-9]{4}[ ]?[A-Z]{2}$/;
	
	obj.valid = regex.test(sValue);
	markLabel(obj);
}

/**
 * Een veld wat niet leeg mag zijn valideren:
 */
function checkEmpty(obj){
	var sValue = obj.value;
	var regex = /^\s*$/;
	
	obj.valid = (!regex.test(sValue) && sValue != '');
	markLabel(obj);
}

/**
 * Een veld wat een getal moet zijn, onder en bengrens aangeven, ook negatieve getallen worden ondersteund
 */
function checkNumber(obj){
	var sValue = obj.value;
	var regex = /^(-?)([0-9])+$/;
	var min = obj.param1;
	var max = obj.param2;
	
	if(obj.param1 && obj.param2){
		obj.valid = (regex.test(sValue) && sValue >= min && sValue <= max);
	}else{
		obj.valid = regex.test(sValue);
	}
	
	markLabel(obj);
}

/**
 * Een Check op een element uitvoeren: (en wel de check die er aan toegekend is.)
 */
function check(){
	var fn = this.check;
	fn(this);
}

/**
 * De juiste CSS aan het label geven:
 */
function markLabel(obj){
	if(obj.valid == true){
		document.getElementById('label_' + obj.id).className = 'checked';
	}else{
		document.getElementById('label_' + obj.id).className = 'check';
	}
}

/**
 * Controleer of een formulier verzonden mag worden:
 */
function checkSubmit(){
	var bReturn = true;
	
	var inputs = document.getElementsByTagName('input');
	for(j=0;j<inputs.length;j++){
		if(inputs[j].check){
			var fn = inputs[j].check;
			fn(inputs[j]);
		}
		
		if(inputs[j].valid == false){
			bReturn = false;
			markLabel(inputs[j]);
		}
	}
	
	if(!bReturn){
		alert('U bent wat vergeten in te vullen, controleer de gegevens nogmaals.');
	}
	
	return bReturn;
}

/**
 * Een event aan een object toekennen:
 */
function addEvent(obj, eventType,fn, useCapture)
{
    if (obj.addEventListener) {
        obj.addEventListener(eventType, fn, useCapture);
        return true;
    } else {
        if (obj.attachEvent) {
            var r = obj.attachEvent("on"+eventType, fn);
            return r;
        }
    }
}