/*
 * Translated default messages for the jQuery validation plugin.
 * Language: DE
 * Skipped date/dateISO/number.
 */
jQuery.extend(jQuery.validator.messages, {
	required: "Dit veld is verplicht in te vullen.",
	maxlength: jQuery.format("U kunt maximaal {0} characters invullen."),
	minlength: jQuery.format("U moet minimaal {0} characters invullen."),
	rangelength: jQuery.format("U moet minimaal {0} en maximaal {1} characters invullen."),
	email: "U heeft een ongeldig emailadres ingevuld.",
	url: "U heeft een ongeldige webadres ingevuld.",
	date: "U heeft een ongeldige datum ingevuld. (dd-mm-jjjj)",
	dateDE: "U heeft een ongeldige datum ingevuld.",
	numberDE: "U heeft een ongeldig nummer ingevuld.",
	number: "U heeft een ongeldig nummer ingevuld.",
	currency: "U heeft een ongeldig bedrag ingevuld.",
	digits: "U kunt uitsluitend cijfers invullen.",
	equalTo: "Bitte denselben Wert wiederholen.",
	range: jQuery.format("Geben Sie bitten einen Wert zwischen {0} und {1}."),
	max: jQuery.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."),
	min: jQuery.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."),
	creditcard: "Geben Sie bitte ein gültige Kreditkarten-Nummer ein.",
	dateGreaterEqualTo:'De einddatum moet na de startdatum liggen',
  dateLowerEqualTo:'De startdatum moet voor de einddatum liggen',
  zipcode: 'U heeft een ongeldige postcode ingevuld'
});

$.fn.ClearClassRules = function() {
    $(this).removeClass('required maxlength minlength rangelength email url date number currency digits dateGreaterEqualTo dateLowerEqualTo zipcode');
}

var dateFormatStr = 'd/m/yyyy';

jQuery.extend(jQuery.validator.methods, {
  date: function(value, element) {
			return this.optional(element) || this.validDate(value);
		}
, zipcode: function(value, element, param) {
	  return this.optional(element) || /\b[1-9]{1}[0-9]{3} {0,1}[a-zA-Z]{2}\b/.test(value);
}
, number: function(value, element, param) {
	  return this.optional(element) || /^\d+$/.test(value);
}
, currency:function(value, element, param) {
	  return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
}
,	dateGreaterEqualTo: function(value, element, param) {
     return this.optional(element) || this.optional($(param)[0]) || this.convertToDate(value) >= this.convertToDate($(param).val());
    }
,	dateLowerEqualTo: function(value, element, param) {
     return this.optional(element) || this.optional($(param)[0]) || this.convertToDate(value) <= this.convertToDate($(param).val());
    }
});

jQuery.extend(jQuery.validator.classRuleSettings, {
   zipcode: { zipcode: true}, 
   currency: { currency: true} 
});

jQuery.extend(jQuery.validator.prototype, {
  validDate : function(value) {
	  var format  = dateFormatStr.split( "/" );
	  var compare = value.replace(new RegExp(/\//g), "-").split( "-" );
	  var order   = new Object();
  	
	  for ( var i = 0; i < format.length; i++ )
	  {
		  switch( format[i].charAt( 0 ).toLowerCase() )
		  {
			  case 'm' :
				  order.months = i;
				  break;
			  case 'd' :
				  order.days = i;
				  break;
			  case 'y' :
				  order.years = i;
				  break;
		  }
	  }
	  var thisDate = new Date( compare[order.years], compare[order.months]-1, compare[order.days] );
  	
	  if ( isNaN( thisDate ) || thisDate.getDate() != compare[order.days] || thisDate.getMonth() != compare[order.months]-1 || thisDate.getFullYear().toString().length != dateFormatStr.match( /y/g ).length )
	  {
		  return false;
	  }
	  return true;
  }
, convertToDate : function(value) {
    var format  = dateFormatStr.split( "/" );
	  var compare = value.replace(new RegExp(/\//g), "-").split( "-" );
	  var order   = new Object();
  	
	  for ( var i = 0; i < format.length; i++ )
	  {
		  switch( format[i].charAt( 0 ).toLowerCase() )
		  {
			  case 'm' :
				  order.months = i;
				  break;
			  case 'd' :
				  order.days = i;
				  break;
			  case 'y' :
				  order.years = i;
				  break;
		  }
	  }
	  return new Date( compare[order.years], compare[order.months]-1, compare[order.days] );
  }
});


