$(function(){
	$('.error').hide();
	
	$('input#name').live('focus', function(){
		var name = $("input#name");
		if(name.val() == 'Your Name:'){
			name.val('');
		}
	});
	$('input#email').live('focus', function(){
		var email = $("input#email");
		if(email.val() == 'Your E-mail:'){
			email.val('');
		}
	});
	$('input#phone').live('focus', function(){
		var phone = $("input#phone");
		if(phone.val() == 'Your Phone:'){
			phone.val('');
		}
	});
	$('textarea#message').live('focus', function(){
		var message = $("textarea#message");
		if(message.val() == 'Message:'){
			message.val('');
		}
	});
	
	// reset form and hide all errors
	$("a#clear").live('click', function(){
		$('.error').hide();
		$('form#contact-form').clearForm();
	});
	
	// show message error if after editing
	// the name field contains improper value
	$("input#name").live('blur', function(){
		var name = $("input#name");
		if(name.val() == ''){
			$("label#name_error").hide();
			name.val('Your Name:');
		}else if(validateInput('name')){
			if(!validateName()){
				$("label#name_error").css('display', 'block');
			}else{
				$("label#name_error").hide();
			}
		}
	});
	
	// show message error if after editing
	// the email field contains improper value
	$("input#email").live('blur', function(){
		var email = $("input#email");
		if(email.val() == ''){
			$("label#email_error").hide();
			email.val('Your E-mail:');
		}else if(validateInput('email')){
			if(!validateEmail()){
				$("label#email_error").css('display', 'block');
			}else{
				$("label#email_error").hide();
			}
		}
	});
	
	// show message error if after editing
	// the phone field contains improper value
	$("input#phone").live('blur', function(){
		var phone = $("input#phone");
		if(phone.val() == ''){
			$("label#phone_error").hide();
			phone.val('Your Phone:');
		}else if(validateInput('phone')){
			if(!validatePhone()){
				$("label#phone_error").css('display', 'block');
			}else{
				$("label#phone_error").hide();
			}
		}
	});
	
	// show message error if after editing
	// the message field contains improper value
	$("textarea#message").live('blur', function(){
		var message = $("textarea#message");
		if(message.val() == ''){
			$("label#message_error").hide();
			message.val('Message:');
		}else if(validateTextArea('message')){
			if(!validateMessage()){
				$("label#message_error").css('display', 'block');
			}else{
				$("label#message_error").hide();
			}
		}
	});
	
	var owner_email = $("input#owner_email").val();
	if(!isValidEmailAddress(owner_email)){
		$('.feedback').html("<h2>feedback</h2><label class='error'>*Owner email is not valid</label>")
	}
		
	$("a#submit").live('click', function(){
		// validate and process form
		var quit = false;
		if(validateName()){
			name = validateName();
			$("label#name_error").hide();
		}else{
			$("label#name_error").css('display', 'block');
			quit = true;
		}
		if(validateEmail()){
			email = validateEmail();
			$("label#email_error").hide();
		}else{
			$("label#email_error").css('display', 'block');
			quit = true;
		}
		if(validatePhone()){
			phone = validatePhone();
			$("label#phone_error").hide();
		}else{
			$("label#phone_error").css('display', 'block');
			quit = true;
		}
		if(validateMessage()){
			message = validateMessage();
			$("label#message_error").hide();
		}else{
			$("label#message_error").css('display', 'block');
			quit = true;
		}
		if(quit){
			return false;
		}
		
		var stripHTML = $("input#stripHTML").val();
		var smtpMailServer = $("input#smtpMailServer").val();
		
		var dataString = 'name=' + name + '&email=' + email + '&phone=' + phone + '&message=' + message + '&owner_email=' + owner_email + '&stripHTML=' + stripHTML + '&smtpMailServer=' + smtpMailServer;
		
		var serverProcessorType = $("input#serverProcessorType").val();
		if(serverProcessorType == 'asp'){
			fileExtension = 'ashx';
		}else{
			fileExtension = serverProcessorType;
		}
		var mailHandlerURL = "bin/MailHandler." + fileExtension;
		$.ajax({
			type: "POST",
			url: mailHandlerURL,
			data: dataString,
			success: function(){
				$('.error').hide();
				$('form#contact-form').clearForm();
				$('.feedback').html("<h2>thank you for your feedback</h2><label>We will be in touch soon</label>")
					.append("<a id='back' class='button'>back</a>")
					.hide()
					.fadeIn(1500);
			}
		});
				
		return false;
	});
	
	$("a#back").live('click', function(){
		$('.feedback').html("<h2>feedback</h2>")
			.append('<form action="" method="post"><fieldset><input type="hidden" name="owner_email" id="owner_email" value="' + owner_email + '" /><input type="hidden" name="serverProcessorType" id="serverProcessorType" value="asp" /><input type="hidden" name="smtpMailServer" id="smtpMailServer" value="localhost" /><input type="hidden" name="stripHTML" id="stripHTML" value="true" /><div class="col-1"><label><input name="name" id="name" type="text" value="Your Name:" class="text-input" /></label><label class="error" for="name" id="name_error">*This is not a valid name.</label><label><input name="email" id="email" type="text" value="Your E-mail:" class="text-input" /></label><label class="error" for="email" id="email_error">*This is not a valid email address.</label><label>					<input name="phone" id="phone" type="text" value="Your Phone:" class="text-input" /></label><label class="error" for="phone" id="phone_error">*This is not a valid phone number.</label></div><div class="col-2"><textarea name="message" id="message" class="text-input">Message:</textarea><label class="error" for="message" id="message_error">*The message is too short.</label><a id="submit" class="button">submit</a> <a id="clear" class="button">clear</a> </div></fieldset></form>')
			.hide()
			.fadeIn(1500);
		
		return false;
	});
});
$.fn.clearForm = function(){
	return this.each(function(){
		var type = this.type, tag = this.tagName.toLowerCase();
		if (tag == 'form'){
			this.reset();
		}
	});
};
function isValidName(name){
	var pattern = new RegExp(/^[a-zA-Z\u0100-\u024f\u0391-\u04ff'][a-zA-Z\u0100-\u024f\u0391-\u04ff-' ]+[a-zA-Z\u0100-\u024f\u0391-\u04ff0-9']+?$/);
	
	return pattern.test(name);
}
function isValidEmailAddress(emailAddress){
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	
	return pattern.test(emailAddress);
}

function isValidPhoneNumber(phoneNumber){
	var pattern = new RegExp(/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/);
	
	return pattern.test(phoneNumber);
}

function validateName(){
	var name = $("input#name").val();
	if(isValidName(name)){
		return name;
	}else{
		return false;
	}
}

function validateEmail(){
	var email = $("input#email").val();
	if(!isValidEmailAddress(email)){
		return false;
	}else{
		return email;
	}
}

function validatePhone(){
	var phone = $("input#phone").val();
	if(!isValidPhoneNumber(phone)){
		return false;
	}else{
		return phone;
	}
}

function validateMessage(){
	var message = $("textarea#message").val();
	if(message.length < 10){
		return false;
	}else{
		return message;
	}
}

// make sure visitor does not input a blank field
function validateInput(field){
	var fieldObject = $("input#" + field + "").val();
	if(fieldObject.length < 1){
		return false;
	}else{
		return true;
	}
}

function validateTextArea(field){
	var fieldObject = $("textarea#" + field + "").val();
	if(fieldObject.length < 1){
		return false;
	}else{
		return true;
	}
}
