window.addEvent('domready', function(){
	// Determines if adresses are weakly validated, or not at all
	var validateUserEmail = false;
	
	// Element var shortcuts
	var contactForm = $('contactForm');
	
	var contactNameField = $('contactName');
	var contactEmailField = $('contactEmail');
	var contactMessageField = $('contactMessage');
	
	
	// Message element vars - global in this .1 ver
	//contactFormFieldsWrapper = 'test';
	
	contactSubmitBox = $('contactSend');
	contactFormFieldsWrapper = $('formFieldsWrapper');
	contactFormWrapper = $('formWrapper');
	contactAlertBox = $('contactAlert');
	alertMessage = new Element('div', {});
	
	alertSuccessEl = new Element('img', {
		'class': 'ajaxImage',
		'src': 'style/gfx/ajaxSuccess.png',
		'height': 25,
		'width': 25
	});
	
	alertFailEl = new Element('img', {
		'class': 'ajaxImage',
		'src': 'style/gfx/ajaxFail.png',
		'height': 25,
		'width': 25
	});
	
	alertLoadingEl = new Element('img', {
		'class': 'ajaxLoadingImage',
		'src': 'style/gfx/ajaxLoading.gif',
		'height': 25,
		'width': 25
	});
	
	ajaxSendMessage = new Request.JSON({
		'url': 'ajax/ajaxSendMail.php',
		'method': 'post',
		'data': contactForm,
		onComplete: function(jsonData){
			parseSendMessageResponse(jsonData);
		}
	});
	
	// Validation / send events
	contactNameField.addEvent('change', function(){
		checkName(contactNameField);
	});
	
	contactEmailField.addEvent('change', function(){
		checkEmail(contactEmailField, validateUserEmail);
	});
	
	contactMessageField.addEvent('change', function(){
		checkMessage(contactMessageField);
	});
	
	contactSubmitBox.addEvent('click', function(event){
		event.stop();
		if (checkName(contactNameField) && checkEmail(contactEmailField, validateUserEmail) && checkMessage(contactMessageField)){
			ajaxSendMessage.post();	
			setAlertBoxMessage("Ditt meddelande skickas, var god vänta...", "loading");
		}
	});
	
});

// Validation wrapper functions
function checkName(contactNameField){
	if (!validateStrLen(contactNameField.get('value'), 2)){
		setAlertBoxMessage("Du måste ange ett namn som är minst 2 tecken långt!", "fail");
		return false;
	} else {
		return true;
	}
}

function checkEmail(contactEmailField, validateUserEmail){
	if (validateUserEmail && (contactEmailField.get('value').length != 0 || !validEmail(contactEmailField.get('value'))) ){
		setAlertBoxMessage("Du måste ange en mailadress på formatet namn@domän.tld, eller lämna fältet helt blankt.", "fail");
		return false;
	} else {
		return true;
	}
}

function checkMessage(contactMessageField){
	if (!validateStrLen(contactMessageField.get('value'), 20)){
		setAlertBoxMessage("Du måste ange ett meddelande som är minst 20 tecken långt!", "fail");
		return false;
	} else {
		return true;
	}
}

function setAlertBoxMessage(msg, imgType){
	contactAlertBox.empty();
	alertMessage.set('html', msg);
	alertMessage.inject(contactAlertBox);
	switch (imgType){
		case 'fail':
			alertFailEl.inject(contactAlertBox);
			break;
		case 'success':
			alertSuccessEl.inject(contactAlertBox);
			break;
		case 'loading':
			alertLoadingEl.inject(contactAlertBox);
			break;
	}
	
	contactAlertBox.highlight();
}

function parseSendMessageResponse(jsonData){
	if (jsonData.success == true){
	
		// Morphs the contact box to small one-line
		var contactMorph = new Fx.Morph(contactFormWrapper, {
			duration: 2000,
			//transition: Fx.Transitions.bounceEaseInOut,
			link: 'chain',
			transition: Fx.Transitions.Bounce.easeInOut
		});
		
		// Fades in the final message on successful send
		var contactMsgTween = new Fx.Tween(contactAlertBox, {
			property: 'opacity',
			duration: 750
		});
		
		contactFormFieldsWrapper.empty();
		contactSubmitBox.empty();
		contactAlertBox.empty();
		contactMorph.start();
		//contactFormFieldsWrapper.dispose();
		//contactSubmitBox.dispose();

		contactMsgTween.set(0);
		contactAlertBox.set('styles', {
			'font-size': '12px',
			'font-weight': 'bold'
		});
		contactAlertBox.set('html', jsonData.message);
		contactMsgTween.start(0,1);
	} else {
		setAlertBoxMessage(jsonData.message, "fail");
	}
}

// These validation functions are very basic since we just want 
// to trap the really obvious stuff.
function validateStrLen(str, len){
	if (str.length >= len){
		return true;
	} else {
		return false;
	}
}

function validateEmail(email){
	if (email.length > 5){
		return true;
	} else {
		return false;
	}
}