
//// Dit script gaat ervan uit dat jQuery is geladen.

$(document).ready(function(){  
	$('form').submit(function() {
	  //formOnSubmitHandler(this,this);
	  return this.valid;
	});
	
	$('input').blur(function() {
	  inputOnBlurHandler(this);
	  return false;
	});
	
	$('textarea').blur(function() {
	  inputOnBlurHandler(this);
	  return false;
	});
	
	$('form').each(function(){
		formOnSubmitHandler(this);
	});
	
});





formOnSubmitHandler = function(form, caller){
	form.valid = true;
	$(':input', form).each(function(){
		if(caller != this){
			inputOnBlurHandler(this, form);
		}
		form.valid = form.valid && this.valid;
	});
	
	
	if(form.valid){
		$(':submit', form).removeAttr('disabled');
	}
	else{
		$(':submit', form).attr('disabled', true);
	}
}

inputOnBlurHandler = function (input, caller){
	input.value = inputFormatter(input);
	input.valid = inputValidator(input);
	
	inputResponseValid(input);
	
	if (caller && caller.tagName.toLowerCase() == "form") return;
	
	formOnSubmitHandler(input.form, input);
}

inputResponseValid = function(input){
	if(input.valid){
		$(input).addClass('valid');	
		$(input).removeClass('invalid');	
	}
	else{
		$(input).addClass('invalid');	
		$(input).removeClass('valid');	
	}	
}

inputFormatter = function(input){
	var Formatter = input.getAttribute('formatter');
	
	switch(Formatter){
		case 'Decimal':
			value = input.value.toDecimal();
			break;
		
		case 'Currency':
			value = input.value.toCurrency();
			break;
		
		case 'Integer':
			value = input.value.toInteger();
			break;	
		
		case 'UnsignedInteger':
			value = input.value.toUnsignedInteger();
			break;	
		
		case 'Accountnumber':
			value = input.value.replace(/[^0-9]/g,'').substr(0,9);
			break;	
		
		case 'Time':
			value = input.value.toTime();
			break;	
		
		case 'Duration':
			value = input.value.toDuration();
			break;	
		
		case 'Phone':
			value = input.value.replace(/[^0-9\(\)\+\-]/g,'').trim();
			break;
		
		case 'Initials':
			value = input.value.toInitials();
			break;	
		
		case 'Name':
			value = input.value.toName();
			break;	
		
		case 'Text':
			value = input.value.replace(/[^a-zA-Z '\.]/g,'');
			break;	
		
		case 'LowerCase':
			value = input.value.toLowerCase();
			break;
		
		case 'ZipCode':
		case 'UpperCase':
			value = input.value.toUpperCase();
			break;	
		
		case 'URL':
			value = input.value.toURL();
			break;	
			
		case "Email":
			value = input.value.replace(/[ ']/g,'').trim();
			break;
			
		default:
			value = input.value.trim();
			break;
	}
	
	return value;
	
}


inputValidator = function(input){
	var Validator = input.getAttribute('validator');
	var valid = false;
	
	switch(Validator){
		case 'Radio':
			var query = "[name=" + input.name + "]"; 
			$(query).each(function(){
				valid = valid || this.checked;
			});
			break;
		
		case 'String':
			var minLength = $(input).attr('minLength');
			if(! minLength) minLength = 1;
			valid = input.value.length >= minLength;
			break;
		
		case 'Phone':
			var minLength = $(input).attr('minLength');
			if(! minLength) minLength = 9;
			valid = input.value.length >= minLength;
			break;
		
		case 'Number':
			valid = parseFloat(input.value) ? true : false;
			break;
		
		case "Email":
			valid = input.value.isEmail();
			break;
			
		case "Captcha":
			$.get('/captchamap/index.php?captcha_code=' + input.value, function(data) {
				input.valid = data == '1' ? true : false;
				inputResponseValid(input);
				formOnSubmitHandler(input.form, input);
				
			});	
			break;
			
		default:
			valid = true;
			break;
	}
	return valid;
}
