/*
 *	jQuery ajaxContactForm
 *	www.frebsite.nl
 *	Copyright (c) 2009 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;
			var f = $(this);
			f.prepend('<input type="text" name="bottrap" value="" style="display: none;" />');

			var options = $.extend({}, $.fn.ajaxContactForm.defaults, opts);
			var submit_btn = ($(':submit', f).length) ? $(':submit', f) : $(options.submitButton, f);
			var reset_btn = ($(':reset', f).length) ? $(':reset', f) : $(options.resetButton, f);
			var action = (act == undefined) ? '' : act;

			$('input, textarea', f).each(function() {
				if ($.fn.ajaxContactForm.is_invoerveld($(this))) {
					$(this).focus(function() {
						$(this).addClass('focussed');
					});
					$(this).blur(function() {
						$(this).removeClass('focussed');
						if (!$.fn.ajaxContactForm.test_veld($(this))) {
							options.falseFieldFunc($(this));
						}
					});
				}
			});

			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 veld = $(this);
						var name = veld.attr('name');
						var valu = veld.val();

						if ($.fn.ajaxContactForm.test_veld(veld)) {
							if (veld.attr('type') == 'radio' && !veld.is(':checked')) valu = '';
							if (veld.attr('type') == 'checkbox' && !veld.is(':checked')) valu = '';

							if (valu.length > 0) {
								data_arr.push(name+'='+escape(valu));
							}
						} else	miss_arr.push($(this));
					}
				});
			//	niet goedkeuren
				if (miss_arr.length > 0 || data_arr.length == 0) {
					options.falseMessageFunc(options.language);
					f.css('opacity', '1');
					for (var z = 0; z < miss_arr.length; z++) {
						options.falseFieldFunc(miss_arr[z]);
					}
					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]);
						}
						var vals = data_arr.join('&');

						$.ajax({
							type: options.method,
							url: action,
							data: 'ajaxcontactform=ajaxcontactform&'+vals,
							success: function(msg) {
								var msg = msg.split('___');

								if (msg[0].toUpperCase() != 'Y') {
									options.errorMessageFunc(msg[1]);
								} else {
									options.succesMessageFunc(msg[1], f);
								}
								f.css('opacity', '1');
							},
							error: function() {
								options.errorMessageFunc('Error, file not found');
								f.css('opacity', '1');
							}
						});
						return false;

				//	via form versturen
					} else {
						f.css('opacity', '1');
						if (t.nodeName.toLowerCase() == 'form') {
							return true;
						}
						return false;
					}
				}
			});
			reset_btn.click(function() {
				if (t.nodeName.toLowerCase() == 'form') {
					$.fn.ajaxContactForm.resetForm(f);	
				} else {
					$.fn.ajaxContactForm.clearForm(f);
				}
				return false;
			});
		});
	};

	$.fn.ajaxContactForm.defaults = {
		submitButton: '.submit',
		resetButton: '.reset',
		method: 'POST',
		language: 'nl',
		extraValues: {},
		falseFieldFunc: function(veld) {
			veld.effect("highlight", {color: '#dd0000'}, 1000);
		},
		falseMessageFunc: function(lang) { 
			switch (lang) {
				case 'pl':
					msg = "Uwaga, nie wszystkie pola zostały poprawnie wypełnione.";
					break;

				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(msg) { 
			alert(msg); 
		},
		succesMessageFunc: function(msg, form) {
			o=$(form).parent();
			p=$(".p");
			t=p.text();
			o.slideUp('fast',function(){
				p.text(msg);
				$(form).hide();
				o.slideDown('slow');
			});
//			$.fn.ajaxContactForm.clearForm(form);
		}
	};

	$.fn.ajaxContactForm.clearForm = function(form) {
		$('input, textarea, select', form).each(function() {
			var type = this.type.toLowerCase(); 
			var tag = this.tagName.toLowerCase();

			if (type == 'text' || type == 'password' || tag == 'textarea') this.value = '';
			else if (type == 'checkbox' || type == 'radio') this.checked = false;
			else if (tag == 'select') this.selectedIndex = 0;
		});
	};
	$.fn.ajaxContactForm.resetForm = function(form) {
		form.get(0).reset();
	}
	$.fn.ajaxContactForm.test_v = function(name, valu, veld) {
		if (name.indexOf('_v') == -1) return true;
		if (valu.length < 1) return false;
		
		if ((veld.attr('type') == 'radio' || veld.attr('type') == 'checkbox') && !veld.is(':checked')) return false;
		return true;
	};
	$.fn.ajaxContactForm.test_n = function(name, valu) {
		if (name.indexOf('_n') == -1) return true;

		var vervangen = new Array(' ', '-', '+', '(', ')', '/', '\\');
		for (var i = 0; i < vervangen.length; i++) {
			valu = valu.split(vervangen[i]).join('');
		}
		if (valu.length == 0) return true;
		else if (isNaN(valu)) return false;
		return true;
	};
	$.fn.ajaxContactForm.test_e = function(name, valu) {
		if (name.indexOf('_e') == -1) return true;
		if (valu.length < 1) return true;
		if (valu.indexOf("@") != -1 && valu.indexOf(".") != -1 && valu.length > 4) {
			return true;
		} else return false;
	};
	$.fn.ajaxContactForm.test_veld = function(veld) {
		var name = veld.attr('name');
		var valu = veld.attr('value');

		if ($.fn.ajaxContactForm.test_v(name, valu, veld) && $.fn.ajaxContactForm.test_n(name, valu) && $.fn.ajaxContactForm.test_e(name, valu)) {
			return true;
		} else return false
	};
	$.fn.ajaxContactForm.is_invoerveld = function(veld) {
		if (veld.attr('type') == 'button') return false;
		if (veld.attr('type') == 'submit') return false;
		if (veld.attr('type') == 'reset') return false;
		if (veld.attr('name') == 'bottrap') return false;
		return true;
	}

})(jQuery);
