Ext.onReady(function() {
	Ext.QuickTips.init();
	Ext.each(Ext.DomQuery.select('.qtip'), function(el) {
		el = Ext.get(el);
		var text = el.dom.alt;
		new Ext.ToolTip({
			target: el.id,
			anchor: 'top',
			anchorOffset: -7, // center the anchor on the tooltip
			html: '<strong>' + text.replace(/\|/g, '<br />') + '</strong>'
		});
	});
	
	var windowHeight = (document.documentElement.clientHeight ? document.documentElement.clientHeight : window.innerHeight);
	if (windowHeight > Ext.get('main-container').getHeight()) {
		Ext.fly('footer-container').moveTo(Ext.fly('footer-container').getX(), windowHeight - Ext.fly('footer-container').getHeight());
	}
});


function submitForm(formName, opt) {
	var opt = opt || {};
	opt.useCaptcha = opt.useCaptcha || false;
	opt.anchor = opt.anchor || 'right';
	
	var form = document.getElementById(formName);
	
	if (checkForm(form, opt) == false) {
		return;
	}
	
	if (opt.useCaptcha == true) {
		if (checkCaptcha() == false) {
			alert('Verification code incorrect, please try again.');
			Recaptcha.reload();
			return;
		}
	}
	
	form.submit();
}

function checkForm(form, opt) {
	// Define CSS classes
	var errorClass = 'error-field';
	var errorMsgClass = 'error-field-message';
	
	// Define Error Messages
	var requiredFieldMsg = 'This field is required';
	var invalidEmailAddressMsg = 'This field should be an email address in the<br /> format "user@domain.com"';
	
	// Boolean error
	var error = false;
	
	// Remove any existing error classes and error messages
	var errorFields = Ext.DomQuery.select('.' + errorClass, form);
	for (var i = 0; i < errorFields.length; i++) {
		var field = Ext.get(errorFields[i]);
		field.tip.destroy();
		field.removeClass(errorClass);
	}
	
	// Process required fields
	var requiredFields = Ext.DomQuery.select('input.required, select.required, textarea.required');
	for (var i = 0; i < requiredFields.length; i++) {
		var field = Ext.get(requiredFields[i]);
		if (!field.hasClass(errorClass)) {
			if (field.getValue() == '') {
				// Add the error class
				field.addClass(errorClass);
				field.tip = addErrorMsg(field, requiredFieldMsg);
				
				// Focus on the first field with an error
				if (error === false) {
					field.focus();
					field.tip.show();
					error = true;
				}
			}
		}
	}
	
	// Process email fields
	var emailFields = Ext.DomQuery.select('input.email-address, select.email-address, textarea.email-address', form);
	for (var i = 0; i < emailFields.length; i++) {
		var field = Ext.get(emailFields[i]);
		if (!field.hasClass(errorClass)) {
			if (field.getValue() != '' && !validEmailAddress(field.getValue())) {
				// Add the error class
				field.addClass(errorClass);
				field.tip = addErrorMsg(field, invalidEmailAddressMsg);
				
				// Focus on the first field with an error
				if (error === false) {
					field.focus();
					field.tip.show();
					error = true;
				}
			}
		}
	}
	
	// If there were any errors, return false
	if (error == true) {
		return false;
	} else {
		return true;
	}
	
	// Function to add an error message to a form field
	function addErrorMsg(field, msg) {
		// Create an error message
		var tip = new Ext.ToolTip({
			target: field,
			anchor: 'left',
			html: '<div class="' + errorMsgClass + '"><strong>' + msg + '</strong></div>'
		});
		
		return tip;
		
	}
	
	// Function to check if email is valid
	function validEmailAddress(str) {
		if (str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/)) {
			return true;
		} else {
			return false;
		}
	}
}

function checkCaptcha() {
	var connection = new Ext.data.Connection().request({
		url: '/_lib/captcha/ajax_response.php',
		method: 'POST',
		params: {
			'recaptcha_response_field': Ext.get('recaptcha_response_field').getValue(),
			'recaptcha_challenge_field': Ext.get('recaptcha_challenge_field').getValue()
		},
		success: function(o) {
			var response = Ext.util.JSON.decode(o.responseText);
			return response.success;
		}
	});
}
