﻿/*	
 *	jQuery ajaxContactForm
 *	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 name = $(this).attr('name');
						var valu = $(this).val();
						var veld = $(this);
						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();
					f.css('opacity', '1');
					for (var z = 0; z < miss_arr.length; z++) {
						options.falseFieldFunc(miss_arr[z]);
					}
					return false;
			
			
			//	niet akkoord met reglement
				}  else if (!$("#reglement:checked").length) {
					switch(options.language) {
						case 'en':
							alert('Attention, please confirm that you agree to our terms and conditions.');
							break;

						case 'de':
							alert('Achtung, bitte bestaetigen Sie, dass Sie mit unsere AGB einverstanden sind.');
							break;

						default:
							alert('Let op, bevestig alstublieft dat u instemt met het reglement van de Survival Bond.')
							break;
					}
					f.css('opacity', '1');
					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');
						return true;
					}
				}
			});
			reset_btn.click(function() {
				$.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 '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) { 
			$.fn.ajaxContactForm.clearForm(form);
			alert(msg);
		}
	};

	$.fn.ajaxContactForm.clearForm = function(form) {
		$('input, textarea, select', form).each(function() {
			var type	= this.type; 
			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.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);
