// OD Validation (jquery version)
// niels@oskard.be 


/** Validation Function **/

function is_valid_field( ele ) {
	
	var ele = $(ele);
	var constraint = ele.attr('validate');


	if (constraint == "required") {
		if (ele.val() == undefined || ele.val().trim() == "") { return false; }
	}
	else if (constraint == "email") {
		return ele.val().isEmail();
	}
	else if (constraint == "date") {
		return ele.val().isDate();
	}
	else if (constraint == "match") {
		if (ele.val() == undefined || ele.val().trim() == "") { return false; }
		if (ele.val() != $('#'+ele.attr('matchWith')).val()) { return false; }
	}
	else if (constraint == "number") {
		return ele.val().isNumber();
	}
	else if (constraint == "checked") {
		return $(ele).attr('checked');
	}
	
	return true;
}


/** Error reporting function **/

function report_error(ele) {
	$(ele).addClass('input_error');
	$(ele).next('span.msg_error').show();
	
	//alert(ele.readAttribute('error'));
}


function remove_error(ele) {
	$(ele).removeClass('input_error');
	$(ele).next('span.msg_error').hide();
}

function report_summary() {
	$('#error_summary').show();
}

function remove_summary() {
	$('#error_summary').hide();
}

/*********************************************************************************************/
/*********************************************************************************************/
/*********************************************************************************************/

/** Extensions String-class **/

String.prototype.trim = function () {
  return this.replace(/^\s+|\s+$/, '');
}

String.prototype.isNumber = function () {
  return !isNaN(this);
}

String.prototype.isEmail = function () {
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if (!filter.test(this)) {
		return false;
	}
	
	return true;
}

String.prototype.isDate = function() {

	var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;

	if (this.match(RegExPattern)) { return true; }
	
	return false;
}



/** Main Function **/

function odvalidate(form_id) {

	var result = true;
	var check_on = 	function(ele) {
	
		if (!is_valid_field( ele )) {
			report_error(ele);
			result = false;
		} else {
			remove_error(ele);
		}
	}
	
	$('#'+form_id+' input[validate]:visible').each( function() { check_on(this); } );
	$('#'+form_id+' textarea[validate]:visible').each( function() { check_on(this); } );
	
	if (!result) { report_summary(); } else { remove_summary(); }
	
	return result;
}