
/* 
Author: Gabriel Comarita
Author's Website: http://www.bitrepository.com/

Copyright (c) BitRepository.com
*/

$(function () {
	var total_required_inputs = $(":input.required").length;
	if (($("#security_code").length == 0)) {
		total_required_inputs--
	}
	img1 = new Image(18, 15);
	img1.src = 'contact-app/images/ajax-loader.gif';
	img2 = new Image(22, 22);
	img2.src = 'contact-app/images/icon-dialog-error.png';
	img3 = new Image(22, 22);
	img3.src = 'contact-app/images/icon-button-ok.png';
	img4 = new Image(16, 16);
	img4.src = 'contact-app/images/icon-refresh.png';
	$('#ajax-contact-form').submit(function () {
		check_sender_name();
		check_sender_email();
		check_sender_subject();
		check_sender_message();
		check_security_code();
		check_status();
		if ($(".ok").length < total_required_inputs) {
			return false
		}
		$('#submit-button').hide();
		$('#ajax-loading').show();
		var formData = $(this).serialize();
		$.ajax({
			type: "POST",
			url: 'contact-app/parse.php',
			data: formData,
			success: function (response) {
				var possible_error = 'Could not instantiate mail function.';
				if (response.indexOf(possible_error) != '-1') {
					var result = '<div class="notification_error">The mail cannot be sent due to an internal error. Please retry later!' + possible_error + '</div>'
				} else {
					var status = $.evalJSON(response).status;
					if (status == 0) {
						var result = '<div class="notification_ok">Thank you for writing to us!</div>';
						$('#success_sent').val(1);
						$('#ajax-contact-form')[0].reset();
						$(':input:not(:hidden)').removeClass('ok')
					} else if (status == 1) {
						var result = '<div class="notification_error">All the fields are necessary! ';
						result += '<em>';
						$('label.error').remove();
						if ($.evalJSON(response).sender_name_none) {
							$('#sender_name').addClass('error').removeClass('ok');
							result += 'Fill your name<br />'
						} else if ($.evalJSON(response).sender_name_invalid) {
							result += '<br />'
						} else if ($.evalJSON(response).sender_name_min_chars) {
							result += '<br />'
						} else {
							$('#sender_name').addClass('ok').removeClass('error')
						}
						if ($.evalJSON(response).sender_email_none) {
							$('#sender_email').addClass('error').removeClass('ok');
							result += 'Fill an e-mail address<br />'
						} else if ($.evalJSON(response).sender_email_invalid) {
							result += 'Fill a valid e-mail address<br />'
						} else if ($.evalJSON(response).sender_email_min_chars) {
							result += '<br />'
						} else {
							$('#sender_email').addClass('ok').removeClass('error')
						}
						if ($.evalJSON(response).sender_subject_none) {
							$('#sender_subject').addClass('error').removeClass('ok');
							result += 'You have to choose a subject<br />'
						} else if ($.evalJSON(response).sender_subject_invalid) {
							result += '<br />'
						} else if ($.evalJSON(response).sender_subject_min_chars) {
							result += '<br />'
						} else {
							$('#sender_subject').addClass('ok').removeClass('error')
						}
						if ($.evalJSON(response).sender_message_none) {
							$('#sender_message').addClass('error').removeClass('ok');
							result += 'Fill your message<br />'
						} else if ($.evalJSON(response).sender_message_invalid) {
							result += '<br />'
						} else if ($.evalJSON(response).sender_message_min_chars) {
							result += 'Your message should have at least 1 characters.<br />'
						} else {
							$('#sender_message').addClass('ok').removeClass('error')
						}
						if ($.evalJSON(response).security_code == 1) {
							$('#security_code').addClass('error').removeClass('ok');
							result += 'Please enter the security code'
						} else if ($.evalJSON(response).security_code == 2) {
							$('#security_code').addClass('error').removeClass('ok');
							result += 'The security code is incorrect.'
						} else {
							$('#sec_div_one').hide();
							$('#sec_div_two').show();
							$('#captcha_div').hide();
							$('#sc_error').remove()
						}
						result += '</em>';
						result += '</div>'
					} else if (status == 2) {
						var result = '<div class="notification_error">The mail cannot be sent due to an internal error. Please retry later!</div>'
					}
				}
				$('#ajax-loading').hide();
				$('#submit-button').show();
				$('#acf-note').html(result).slideDown()
			}
		});
		return false
	});
	function new_captcha() {
		var c_currentTime = new Date();
		var c_miliseconds = c_currentTime.getTime();
		document.getElementById('captcha').src = 'contact-app/captcha.php?x=' + c_miliseconds;
		return false
	};
	$('#captcha-refresh').bind('click', new_captcha);
	var check_sender_name = function () {
		if ($('#sender_name').val() == '') {
			removeErrors('sender_name', 'none');
			$('#sender_name').addClass('error').removeClass('ok');
			$('#sender_name').after('<label id="sender_name_error" class="error"><i>Fill your name</i></label>');
			check_status();
			return false
		} else {
			removeErrors('sender_name', 'slideUp');
			$('#sender_name').addClass('ok').removeClass('error')
		}
	};
	$('#sender_name').bind('change', check_sender_name);
	$('#sender_name').bind('blur', function () {
		if ($('#sender_name').val()) {
			check_sender_name()
		}
	});
	var check_sender_email = function () {
		var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
		if ($('#sender_email').val() == '') {
			removeErrors('sender_email', 'none');
			$('#sender_email').addClass('error').removeClass('ok');
			$('#sender_email').after('<label id="sender_email_error" class="error"><i>Fill an e-mail address</i></label>');
			check_status();
			return false
		}
		if (!filter.test($('#sender_email').val())) {
			removeErrors('sender_email', 'none');
			$('#sender_email').addClass('error').removeClass('ok').after('<label id="sender_email_error_invalid" class="error"><i>Fill a valid e-mail address</i></label>');
			check_status();
			return false
		} else {
			removeErrors('sender_email', 'slideUp');
			$('#sender_email').addClass('ok').removeClass('error')
		}
	};
	$('#sender_email').bind('change', check_sender_email);
	$('#sender_email').bind('blur', function () {
		if ($('#sender_email').val()) {
			check_sender_email()
		}
	});
	var check_sender_subject = function () {
		if ($('#sender_subject').val() == '') {
			removeErrors('sender_subject', 'none');
			$('#sender_subject').addClass('error').removeClass('ok');
			$('#sender_subject').after('<label id="sender_subject_error" class="error"><i>You have to choose a subject</i></label>');
			check_status();
			return false
		} else {
			removeErrors('sender_subject', 'slideUp');
			$('#sender_subject').addClass('ok').removeClass('error')
		}
	};
	$('#sender_subject').bind('change', check_sender_subject);
	$('#sender_subject').bind('blur', function () {
		if ($('#sender_subject').val()) {
			check_sender_subject()
		}
	});
	var check_sender_message = function () {
		if ($('#sender_message').val() == '') {
			removeErrors('sender_message', 'none');
			$('#sender_message').addClass('error').removeClass('ok');
			$('#sender_message').after('<label id="sender_message_error" class="error"><i>Fill your message</i></label>');
			check_status();
			return false
		}
		if ($('#sender_message').val().length < 1) {
			removeErrors('sender_message', 'none');
			$('#sender_message').addClass('error').removeClass('ok').after('<label id="sender_message_error_min_chars" class="error"><i>Your message should have at least 1 characters.</i></label>');
			check_status();
			return false
		} else {
			removeErrors('sender_message', 'slideUp');
			$('#sender_message').addClass('ok').removeClass('error')
		}
	};
	$('#sender_message').bind('change', check_sender_message);
	$('#sender_message').bind('blur', function () {
		if ($('#sender_message').val()) {
			check_sender_message()
		}
	});
	var check_security_code = function () {
		if ($('#captcha_div').is(':visible')) {
			$('#sc_error').remove();
			if ($('#security_code').val() == '') {
				$('#security_code').addClass('error').removeClass('ok');
				$('#sec_div_one').after('<label id="sc_error" class="error">Please enter the security code</label>');
				check_status()
			} else {
				var c_currentTime = new Date();
				var c_miliseconds = c_currentTime.getTime();
				var validCode = $('#security_code').val();
				$.ajax({
					url: 'contact-app/verify-code.php?x=' + c_miliseconds,
					data: "security_code=" + validCode,
					type: 'post',
					datatype: 'html',
					success: function (outData) {
						if (outData != 1) {
							if ($("#sc_error.error").length == 0) {
								$('#security_code').addClass('error').removeClass('ok');
								$('#sec_div_one').after('<label id="sc_error" class="error">The security code is incorrect.</label>');
								check_status()
							}
						} else {
							$('#security_code').remove();
							$('#sec_div_one').hide();
							$('#captcha_div').hide();
							$('#sec_div_two').fadeIn('fast', function () {
								$('#submit-button').before('<input class="ok" type="hidden" name="security_code" id="security_code" value="' + validCode + '" />')
							})
						}
					},
					error: function (errorMsg) {
						alert('Error occured: ' + errorMsg)
					}
				})
			}
		}
	};
	var checkSecurityCodeLive = function () {
		var c_currentTime = new Date();
		var c_miliseconds = c_currentTime.getTime();
		var validCode = $('#security_code').val();
		$.ajax({
			url: 'contact-app/verify-code.php?x=' + c_miliseconds,
			data: "security_code=" + validCode,
			type: 'post',
			datatype: 'html',
			success: function (outData) {
				if (outData == 1) {
					$('#sc_error').remove();
					$('#security_code').remove();
					$('#sec_div_one').hide();
					$('#captcha_div').hide();
					$('#sec_div_two').fadeIn('fast', function () {
						$('#submit-button').before('<input class="ok" type="hidden" name="security_code" id="security_code" value="' + validCode + '" />')
					});
					$('div').removeClass("highlighted");
					check_status()
				}
			},
			error: function (errorMsg) {
				alert('Error occured: ' + errorMsg)
			}
		})
	};
	var checkSecurityCodeIfNotNULL = function () {
		if ($('#security_code').val()) {
			check_security_code()
		}
	};
	$('#security_code').change(check_security_code);
	$('#security_code').blur(checkSecurityCodeIfNotNULL);
	$('#security_code').keyup(checkSecurityCodeLive);
	$(':input.required').bind('change blur keyup', check_status);
	function check_status() {
		if ($('#success_sent').val() == 1) {
			$('#acf-note').slideUp('slow');
			$('#acf-note').html('');
			$('#success_sent').val(0);
			return true
		}
		$("label[id$='_error']").addClass('styled');
		if ($("label.error").length > 0) {
			$('#acf-note').html('<div class="notification_error">All the fields are necessary!</div>').slideDown('slow')
		}
		if ($("label.error").length == 0) {
			$('#acf-note').slideUp('slow')
		}
		return true
	};
	function removeErrors(keyField, mode) {
		if (mode == 'slideUp') {
			$('#' + keyField + '_error').slideUp("fast", function () {
				$(this).remove()
			});
			$('#' + keyField + '_error_invalid').slideUp("fast", function () {
				$(this).remove()
			});
			$('#' + keyField + '_error_min_chars').slideUp("fast", function () {
				$(this).remove()
			})
		} else {
			$('#' + keyField + '_error').remove();
			$('#' + keyField + '_error_invalid').remove();
			$('#' + keyField + '_error_min_chars').remove()
		}
	};
	var fields = ["sender_name", "sender_email", "sender_subject", "sender_message", "security_code"];
	$.each(fields, function () {
		if (this == 'security_code') {
			$('#' + this).focus(function () {
				$(this).parent('div').parent('div').addClass("highlighted")
			}).blur(function () {
				$(this).parent('div').parent('div').removeClass("highlighted")
			})
		} else {
			$('#' + this).focus(function () {
				$(this).closest('div').addClass("highlighted")
			}).blur(function () {
				$(this).closest('div').removeClass("highlighted")
			})
		}
	})
});
