/*
 *	jQuery ajaxContactForm version 1.3.3
 *	www.frebsite.nl
 *	Copyright (c) 2010 Fred Heusschen
 *	Licensed under the MIT license.
 *	http://www.opensource.org/licenses/mit-license.php
 */
(function($) {
	$.fn.ajaxContactForm = function(act, opts) {

		return this.each(function() {

			var t = this,
				f = $(this);
				f.prepend('<input type="text" name="bottrap" value="" style="display: none;" />');

			var options 	= $.extend({}, $.fn.ajaxContactForm.defaults, opts),
				submit_btn	= ($(':submit', f).length) ? $(':submit', f) : $(options.submitButton, f),
				reset_btn	= ($(':reset',  f).length) ? $(':reset',  f) : $(options.resetButton, f),
				action		= (typeof(act) == 'undefined') ? '' : act;


			$('input, textarea, select', f).each(function() {
				if ($.fn.ajaxContactForm.is_invoerveld($(this))) {
					$(this)
						.data("defaultvalue", $(this).val())
						.focus(function() {
							$(this).addClass('focussed');
						})
						.blur(function() {
							$(this).removeClass('focussed');
							if (!$.fn.ajaxContactForm.test_veld($(this), $(this).val())) {
								options.falseFieldFunc(f, $(this), options.language);
							} else {
								options.trueFieldFunc(f, $(this), options.language);
							};
						});

					if ($.fn.ajaxContactForm.is_default_value_veld($(this))) {
						$.fn.ajaxContactForm.inactivate($(this));

						if (this.tagName.toLowerCase() == 'select') {
							$.fn.ajaxContactForm.inactivate($(this).find("option:selected"));
							$(this)
								.change(function() {
									if ($(this).val() == $(this).data("defaultvalue")) {
											$.fn.ajaxContactForm.inactivate($(this));
									} else	$.fn.ajaxContactForm.activate($(this));
								});

						} else {
							$(this)
								.focus(function() {
									if ($(this).val() == $(this).data("defaultvalue")) {
										$(this).val("");
										$.fn.ajaxContactForm.activate($(this));
									}
								})
								.blur(function() {
									if ($(this).val() == '') {
										$(this).val($(this).data("defaultvalue"));
										$.fn.ajaxContactForm.inactivate($(this));
									}
								});
						}
					}
				}
			}).filter(':checkbox, :radio').change(function() {
				$(this).trigger("blur");
			});


			submit_btn.click(function() {
				f.css('opacity', '0.5');

				var miss_arr = new Array();
				var data_arr = new Array();

				$('input, textarea, select', f).each(function(i) {
					if ($.fn.ajaxContactForm.is_invoerveld($(this))) {
						var field = $(this),
							name = field.attr('name'),
							value = field.val();

						if ($.fn.ajaxContactForm.is_default_value_veld($(this))) {
							if (value == $(this).data("defaultvalue")) 						value = '';
						}

						if ($.fn.ajaxContactForm.test_veld(field, value)) {
							if (field.attr('type') == 'radio' 	&& !field.is(':checked'))	value = '';
							if (field.attr('type') == 'checkbox'	&& !field.is(':checked')) 	value = '';

							if (value.length > 0) {
								data_arr.push(name+'='+escape(value));
							}
						} else {
							miss_arr.push($(this));
						}
					}
				});

			//	niet goedkeuren
				if (miss_arr.length > 0 || data_arr.length == 0) {
					options.falseMessageFunc(f, options.language);
					f.css('opacity', '1');
					for (var z = 0; z < miss_arr.length; z++) {
						options.falseFieldFunc(f, miss_arr[z], options.language);
					}
					return false;

			//	goedkeuren en versturen
				} else {

				//	via ajax versturen
					if (action != '') {
							data_arr.push('language='+options.language);
						for (var i in options.extraValues) {
							data_arr.push(i+'='+options.extraValues[i]);
						}

						$.ajax({
							type: options.method,
							url: action,
							data: 'ajaxcontactform=ajaxcontactform&'+data_arr.join('&'),
							success: function(msg) {
								var msg = msg.split('___');

								if (msg[0].toUpperCase() != 'Y')	{
									options.errorMessageFunc(f, msg[1], options.language);
								} else {
									options.succesMessageFunc(f, msg[1], options.language);
								}
								f.css('opacity', '1');
							},
							error: function() {
								options.errorMessageFunc(f, 'Error, file not found', options.language);
								f.css('opacity', '1');
							}
						});
						return false;

				//	via form versturen
					} else {
						f.css('opacity', '1');
						if (t.tagName.toLowerCase() == 'form') {
							t.submit();
							return false;
						}
						return true;
					}
				}
			});
			reset_btn.click(function() {
				$.fn.ajaxContactForm.resetForm(f);
				return false;
			});
		});
	};

	$.fn.ajaxContactForm.defaults = {
		submitButton:		'.submit',
		resetButton:		'.reset',
		method:				'POST',
		language:			'nl',
		extraValues:		{},
		falseFieldFunc:		function(form, field, lang) {
		// NOP >
		field.effect("highlight", {color: '#dd0000'}, 1000);
		// < NOP
		},
		trueFieldFunc:		function(form, field, lang) {
		// NOP >
		field.effect("highlight", {color: '#ddffdd'}, 500);
		// < NOP
		},
		falseMessageFunc:	function(form, lang) {
			switch (lang) {
				case 'en':
					msg = "Attention, not all the fields have been filled out correctly.";
					break;

				case 'de':
					msg = "Achtung, nicht alle Felder sind korrekt ausgefuellt.";
					break;

				default:
					msg = "Let op, niet alle velden zijn correct ingevuld.";
					break;
			}
			alert(msg);
		},
		errorMessageFunc:	function(form, msg, lang) {
			alert(msg);
		},
		succesMessageFunc:	function(form, msg, lang) {
			$.fn.ajaxContactForm.resetForm(form);
			alert(msg);
		}
	};

	$.fn.ajaxContactForm.resetForm = function(form) {
		$('input, textarea, select', form).each(function() {

			var type = this.type.toLowerCase();
			if (type == 'checkbox' || type == 'radio') 	  this.checked = false;
			else 										$(this).val($(this).data("defaultvalue"));

			if ($.fn.ajaxContactForm.is_default_value_veld($(this))) {
				$.fn.ajaxContactForm.inactivate($(this));
			}
		});
	};

	$.fn.ajaxContactForm.test_v = function(name, value, field) {
		// NOP >
		// if (name.indexOf('__v') == -1) 	return true;
		if ((name.indexOf('__v') == -1) && (! field.hasClass('acf_value'))) 	return true;
		// < NOP
		if (! field.hasClass('acf_opt')) if (value.length < 1) return false;
		if (field.hasClass('acf_opt')) if (value.length < 1) return true;
// 		if ((field.attr('type') == 'radio' || field.attr('type') == 'checkbox')
// 	 	 && !field.is(':checked'))		{
// 	 	 return false;
// 	 	 };
		if (((field.attr('type') == 'radio' || field.attr('type') == 'checkbox')) && ($('[name='+name+']:checked').length<1)) return false;

		// NOP >
	 if (field.attr('acf')) return value.match(new RegExp(field.attr('acf'), "gim"));
		// < NOP
										return true;
	};

	$.fn.ajaxContactForm.test_f = function(name, value, field) {
		// NOP >
		// if (name.indexOf('__v') == -1) 	return true;
		if ((name.indexOf('__f') == -1) && (! field.hasClass('acf_file'))) 	return true;
		// < NOP
		if (! field.hasClass('acf_opt')) if (value.length < 1) return false;
		if (field.hasClass('acf_opt')) if (value.length < 1) return true;
	 var chkType = true;
	 var chkSize = true;
	 if (field.attr('acf')) chkType = value.match(new RegExp(field.attr('acf'), "gim"));
	 if (field.attr('acf_file_max_size')) {
	  obj = field.get(0);
	  if ('files' in obj) {
    if ('fileSize' in obj.files[0]) {
     chkSize = obj.files[0].fileSize <= (field.attr('acf_file_max_size') * 1024 * 1024); // MB
     // alert(obj.files[0].fileSize+' :: '+(field.attr('acf_file_max_size') * 1024)+' => '+chkSize);
				} else {
					// unsupported property
				};
	  } else {
	   // unsupported property
	  };
	 };
		// < NOP
		return (chkType && chkSize);
	};

		// NOP >
	$.fn.ajaxContactForm.test_x = function(name, value, field) {
		if ((name.indexOf('__x') == -1) && (! field.hasClass('acf_date'))) 	return true;
		if (! field.hasClass('acf_opt')) if (value.length < 1) return false;
		if (field.hasClass('acf_opt')) if (value.length < 1) return true;
		// NOP >
	 if (field.attr('acf')) return value.match(new RegExp(field.attr('acf'), "g"));
		// < NOP
		if (field.attr('acf')) return value.match(new RegExp(field.attr('acf'), "g"));
		return value.match(/^(([0-2]?[0-9])|([3]?[0-1]))-(([0]?[0-9])|([1]?[0-2]))-[12][90][0-9][0-9]$/);
										return true;
	};
		// < NOP

	$.fn.ajaxContactForm.test_n = function(name, value, field) {
		// NOP >
		// if (name.indexOf('__n') == -1) 	return true;
		if ((name.indexOf('__n') == -1) && (! field.hasClass('acf_num'))) 	return true;
		// < NOP
		var vervangen = new Array(' ', '-', '+', '(', ')', '/', '\\');
		for (var i = 0; i < vervangen.length; i++)	{
			value = value.split(vervangen[i]).join('');
		}
		// NOP >
		// if (value.length == 0)			return true;
		if (value.length < 1) 			return false;
		//
		else if (isNaN(value))			return false;
		// NOP >
	 if (field.attr('acf')) return value.match(new RegExp(field.attr('acf'), "g"));
		// < NOP
										return true;
	};

	$.fn.ajaxContactForm.test_e = function(name, value, field) {
		// NOP >
		// if (name.indexOf('__e') == -1) 	return true;
  if ((name.indexOf('__e') == -1) && (! field.hasClass('acf_email'))) 	return true;
		// < NOP
		// NOP >
		//   if (value.length < 1)			return true;
		if (value.length < 1) 			return false;
		// < NOP
		if (value.indexOf("@") != -1 &&
			value.indexOf(".") != -1 &&
			value.length > 4
		) {
				return true;
		} else	return false;
	};

	$.fn.ajaxContactForm.test_d = function(name, value, field) {
		if (!$.fn.ajaxContactForm.is_default_value_veld(field))	return true;
		if (field[0].tagName.toLowerCase() == 'select') 			return true;
		if (value == field.data("defaultvalue"))					return false;
																return true;
	};

	$.fn.ajaxContactForm.test_veld = function(field, value) {
		var name = field.attr('name');

		// NOP >
//		if ($.fn.ajaxContactForm.test_v(name, value, field) 	&&
// 			$.fn.ajaxContactForm.test_n(name, value) 		&&
// 			$.fn.ajaxContactForm.test_e(name, value)			&&
// 			$.fn.ajaxContactForm.test_d(value, field)
		if ($.fn.ajaxContactForm.test_v(name, value, field) 	&&
			$.fn.ajaxContactForm.test_n(name, value, field) 		&&
			$.fn.ajaxContactForm.test_e(name, value, field)			&&
			$.fn.ajaxContactForm.test_x(name, value, field)			&&
			$.fn.ajaxContactForm.test_f(name, value, field)			&&
			$.fn.ajaxContactForm.test_d(name, value, field)
		// < NOP
		) {
				return true;
		} else 	return false
	};
	$.fn.ajaxContactForm.is_invoerveld = function(field) {
		if (field.attr('type') == 'button') 	return false;
		if (field.attr('type') == 'submit') 	return false;
		if (field.attr('type') == 'reset') 	return false;
		if (field.attr('name') == 'bottrap')	return false;
											return true;
	};
	$.fn.ajaxContactForm.is_default_value_veld = function(field) {
		// NOP >
		// return (field.attr('name').indexOf('__d') == -1) ? false : true;
		return false;
		// < NOP
	};
	$.fn.ajaxContactForm.inactivate = function(field) {
		field.addClass("inactive");
	};
	$.fn.ajaxContactForm.activate = function(field) {
		field.removeClass("inactive");
	};


})(jQuery);
