


/** v.1.0.05 **/



var error_requiredField;

var fileUploadRequired;
var formContainsFile;

var formDataArr;
var formDataStr;
var formValues;
var formClasses;


$(document).ready(function()
{ 
	
	$('#ajaxForm').submit(function() 
	{ 
		$(this).ajaxSubmit({ 
			dataType: "xml",
			beforeSubmit:  checkFormValidityBeforePost,
			success: checkFormValidityAfterPost }); 
		
		// Stop form from reloading
		return false; 
	});
	
});



function checkFormValidityBeforePost() {
					
	formDataArr = $('#ajaxForm').serializeArray(); // Store all form data as array
	formDataStr = $('#ajaxForm').serialize();
	formValues = {};
	formClasses = {};
	
	resetForm(); // Clear old error messages and reset form
	
	
	// Collect form data: form names, values and classes
	
	$.each(formDataArr, function(i, field) 
	{	
		// Skip hidden fields...
		if(field.name != 'MAX_FILE_SIZE') 
		{	
			formValues[field.name] = field.value;
				
			if($("#mce-" + field.name).attr("class"))
				formClasses[field.name] = $("#mce-" + field.name).attr("class");
			else
				formClasses[field.name] = '';	
		}
	});
	
	
	// Check required fields
	var singleErrorFound = {};
	$.each( formClasses, function(fieldName, fieldClass)
	{
		//alert( "Key: " + fieldName + ", Value: " + fieldClass );

		// Only check required fields
		if( fieldClass.indexOf('required') >= 0 ) 
		{	
			// If required field is empty then flag as error
			if( formValues[fieldName] == '' ) 
			{	
				error_requiredField = true;
				
				var errMsg = getErrorMsg(fieldName);
				
				if(fieldClass.indexOf('onlyAllowSingleError') >= 0)
					singleErrorFound[fieldName] = true;
				else 
					$('#mce-' + fieldName).after(errMsg);
			}
		}
	});
	
	
	// EXTRA - - - - NOT GENERIC CODE !!!!
	if(singleErrorFound['SIZE_H'] || singleErrorFound['SIZE_W'])
		$('#mce-SIZE_H').after( getErrorMsg('SIZE_H') );
	
	
	// Check if email is valid (if value is entered) separately
	
	var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
	if(formValues['EMAIL'] != '' && !emailReg.test(formValues['EMAIL'])) {	
		$("#mce-EMAIL").after('<span class="error">Sähköpostiosoite on virheellinen.</span>');
		error_requiredField = true;
	}

	
	// Check if file entry is empty. This is also checked later, but speeds things up and shows 
	// the user all basic errors related to required fields at the same time.
	
	if($('input[type=file]').val() != null && $('input[type=file]').attr("class").indexOf('required') >= 0)
		fileUploadRequired = true;
	else
		fileUploadRequired = false;
		
	if($('input[type=file]').val() == null || $('input[type=file]').val() == '')
		formContainsFile = false;
	else
		formContainsFile = true;
		
		
	if( fileUploadRequired == true  && formContainsFile == false ) {
		error_requiredField = true;
		
		var errMsg = getErrorMsg('FILE');
		//$('#mce-' + 'FILE').after(errMsg);
		$('input[type=file]').after(errMsg);
	}

	
	
	// All normal fields are checked at this point
	// Don't check CAPTHA or file upload if there is an error at this point
	
	if(error_requiredField == true) {
		// Don't allow post if there was an error
		showFormErr();
		return false;
	}
	
	
	
	// Check CAPTCHA
	
	if( useReCaptcha() ) 
	{
		if( !checkReCaptcha(formDataStr) ) {
			// Don't allow post if there was an error
			showFormErr();
			return false;
		}
	}
	
	
	return true;
};



function checkFormValidityAfterPost(response, status) {
	
	var uploadedFileURL = '';
	var uploadedFileType = '';
	var uploadedFileName = '';
	
	if( formContainsFile == true && $('phpError', response).text() == '1' ) {
		var errMsg = $('phpMsg', response).text();
		$('input[type=file]').after('<span class="error">' + errMsg + '</span>');
		//error_requiredField = true;
		showFormErr();
		Recaptcha.reload(); // Reload captcha if there is an error
		return false;
	}
	else if( formContainsFile == true ) {
		uploadedFileURL = $('phpFileUrl', response).text();	
		uploadedFileType = $('phpFileType', response).text();	
		uploadedFileName = $('phpFileName', response).text();	
	}
		
		
	// Check Mailchimp (skipped if not used)

	if( !checkMailChimp() ) {
		showFormErr();
		Recaptcha.reload(); // Reload captcha if there is an error
		return false;
	}
	
	
	// If data is sent to mailchimp then finish off, or, send data as an email
	
	if( useMailchimp() ) {
		showFormSent();
		return false;
	}
	else {
		
		if( sendToDb() ) {
			makeCustomDbRequest(formValues);
		}
		
		var msg = '';
	
		var address = '';
		var address_company = '';
		var address_nameF = '';
		var address_nameL = '';
		var address_street = '';
		var address_postal = '';
		var address_city = '';
		
		
		//for(i = 0 ; i < formValues.length ; i++) {
			//msg += formValues[i] + '\n';	
		//}
		$.each( formValues, function(fieldName, fieldValue){
			if(fieldName != 'recaptcha_response_field' && 
				fieldName != 'recaptcha_challenge_field') {
				if(fieldName == 'MSG')
					msg += '\n\n';
				msg += fieldName + ": " + fieldValue + '\n';
				
				// Create address separately for easy copy-paste action
				if(fieldName == 'FNAME') address_nameF = fieldValue;
				if(fieldName == 'LNAME') address_nameL = fieldValue;
				if(fieldName == 'COMPANY') address_company = fieldValue;
				if(fieldName == 'STREET') address_street = fieldValue;
				if(fieldName == 'POSTALCODE') address_postal = fieldValue;
				if(fieldName == 'CITY') address_city = fieldValue;
				
			}
		});
		
		if(!formValues['MSG'] || formValues['MSG'] == '')
			msg += '\n\nNo message...';
			
		if(address_company != '') address += address_company + '\n';
		if(address_nameF != '') address += address_nameF + ' ';
		if(address_nameL != '') address += address_nameL;
		if(address_nameF != '' || address_nameL != '') address += '\n';
		if(address_street != '') address += address_street + '\n';
		if(address_postal != '') address += address_postal + ' ';
		if(address_city != '') address += address_city;
		msg += '\n\n' + address;
		
		$.post(getAjaxFormURL() + '/sendemail-with-attachment.php', 
		{ 
			emailTo: getEmailFromAddr(), 
			mailFrom: formValues['EMAIL'], 
			subject: getEmailSubject(), 
			message: msg,
			fileURL: uploadedFileURL, 
			fileType: uploadedFileType, 
			fileName: uploadedFileName
		}, function(){
				showFormSent();
				return false;
		});
	}
}


function showFormSent() {
	
	//$("#ajaxForm li.buttons").append('<img src="/wp-content/themes/default/images/template/loading.gif" alt="Loading" id="loading" />');
	
	// Message successfully sent --> generate virtual pageview for Google Analytics Goal
	if(getGoalURL() != '')
		_gaq.push(['_trackPageview', getGoalURL()]); 
	
			
	$("#contactFormContainer").height($("#ajaxForm").height());

	$("#ajaxForm").fadeOut(350, function () {

		var result = '<div id="ok"><strong>Viesti lähetetty onnistuneesti!</strong>'; 
		if( useMailchimp() == true )
			result += '<br />Suorita tilaus loppuun napsauttamalla linkkiä, jonka juuri lähetimme sinulle sähköpostissa.';
		if( getAppendExtraInformation() != null )
			result = '<div id="campaign" style="display:none;">' + '<strong>Viesti lähetetty onnistuneesti!</strong>' + '<br /><br />' + getAppendExtraInformation();
		result += '</div>';
		
		$("#contactFormContainer").before(result);

			$("#contactFormContainer").slideUp('normal', function() {				   
				
				if( getAppendExtraInformation() == null )
					$("#ok").slideDown('normal', function() {});
				else
					$("#campaign").slideDown('normal', function() {});
			});
	});
}



function showFormErr() {
	$("#mce-DEFAULT").after('<div id="err"><strong>Viesti ei lähetetty!</strong> <br />Ole hyvä ja tarkista että olet täyttänyt pakolliset kentät.</div>');
	
	$("#sending").remove();
	$(".error").show();
	$("#err").show();
	$("#mc-embedded-subscribe").removeAttr("disabled");
}



function resetForm() {
	error_requiredField = false;

	$(".error").remove(); // Remove detailed err messages
	$("#err").remove();
	$("#mc-embedded-subscribe").attr("disabled", "disabled");
	$("#mc-embedded-subscribe").after('<div id="sending"><strong>LÄHETYS KÄYNNISSÄ...</strong>  Ole hyvä ja odota hetki.</div>');
	$("#sending").fadeIn(200);
}



function checkReCaptcha() {
	//if( !useReCaptcha() ) IMPLEMENT !!!
	
	var success = true;
	
	$.ajax(
	{
		type: 'POST',
		async: false, // Set async to false, wait until finished
		url: getAjaxFormURL() + '/captcha-functions.php',
		data: formDataStr,
		success: function(captchaMsg){
			
			if(captchaMsg == 'captcha-err') {
				
				success = false;
				//error_requiredField = true;
				
				$("#captcha").before('<span class="error"><strong>CAPTCHA koodi ei täsmää.</strong> Mikäli sanat eivät näy kunnolla niin voit päivittää tekstin ylimmäisellä punaisella napilla.</span>');	
				Recaptcha.reload(); // Reload captcha if there is an error
			}
		}
	});
	
	return success;
	
}



function checkMailChimp() {
	
	var success = true;
	
	if( !useMailchimp() )
		return success;

	$.ajax({
		type: 'POST',
		url: getAjaxFormURL() + '/mailchimp-functions.php',
		data: formDataStr,
		success: function(mailchimpMsg){
			
			// If 'OK' then user was successfully registered, otherwise registration failed
			if(mailchimpMsg != 'OK')  {
				
				success = false;
				//error_requiredField = true;
				
				switch(mailchimpMsg) {
					//case 'captcha-err' :
						//result = '<strong>CAPTCHA koodi ei täsmää.</strong> Mikäli sanat eivät näy kunnolla niin voit päivittää tekstin ylimmäisellä punaisella napilla.';
						//break;
					//case '502' :
						//$("#mce-EMAIL").after('<span class="error">Sähköpostiosoite on virheellinen.</span>');
						//break;
					case '214':
						$("#mce-EMAIL").after('<span class="error">Sähköpostiosoite on jo rekisteröity!</span>');
						break;
				}
			}
		} 
	});
	
	return success;
}



