function seomv() {
	var newx = seofindx(document.getElementById('seoanchor'));
	var newy = seofindy(document.getElementById('seoanchor'));
	document.getElementById('seodiv').style.left = newx + 'px';
	document.getElementById('seodiv').style.top = newy + 'px';
}

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.fly(errorFields[i]);
		field.removeClass(errorClass);
		field.removeAllListeners();
	}
	
	// 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.fly(requiredFields[i]);
		if (!field.hasClass(errorClass)) {
			if (field.getValue() == '') {
				// Add the error class
				field.addClass(errorClass);
				field.addListener('focus', addErrorMsg, this, {errorMsg: requiredFieldMsg});
				field.addListener('blur', removeErrorMsg);
				
				// Focus on the first field with an error
				if (error === false) {
					field.focus();
					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.fly(emailFields[i]);
		if (!field.hasClass(errorClass)) {
			if (!validEmailAddress(field.getValue())) {
				// Add the error class
				field.addClass(errorClass);
				field.addListener('focus', addErrorMsg, this, {errorMsg: invalidEmailAddressMsg});
				field.addListener('blur', removeErrorMsg);
				
				// Focus on the first field with an error
				if (error === false) {
					field.focus();
					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(e, t, o) {
		// Create an error message
		var field = Ext.get(t);
		var el = Ext.get(Ext.DomHelper.insertAfter(field, {id: field.dom.id + '-msg', tag: 'div', cls: errorMsgClass, html: o.errorMsg}));
		switch (opt.anchor) {
			case 'bottom':
				el.setLocation(field.getLeft(), field.getBottom() + 4);
			break;
			case 'left':
				el.setLocation(field.getLeft() - el.getWidth() - 10, field.getTop());
			break;
			case 'right':
				el.setLocation(field.getRight() + 10, field.getTop());
			break;
			case 'top':
				el.setLocation(field.getLeft(), field.getTop() - el.getHeight() - 4);
			break;
		}
	}
	
	// Function to remove an error message from a form field
	function removeErrorMsg(e, t, o) {
		Ext.fly(t.id + '-msg').remove();
	}
	
	// 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;
		}
	});
}
var activeMenu;
function createMenu(name){
	var el = Ext.get(name + '-link');
	var tid = 0, menu, doc = Ext.getDoc();
	
	var handleOver = function(e, t){
		if(t != el.dom && t != menu.dom && !e.within(el) && !e.within(menu)){
			hideMenu();
		}	
	};
			
	var hideMenu = function(){
		if (menu){
			menu.hide();
			doc.un('mouseover', handleOver);
			doc.un('mousedown', handleDown);
		}
	}
	
	var handleDown = function(e){
		if (!e.within(menu)){
			hideMenu();
		}
	}
	
	var showMenu = function(){
		clearTimeout(tid);
		tid = 0;
		
		if (!menu) {
			menu = new Ext.Layer({shadow:'sides', hideMode: 'display'}, name + '-menu');
		}
		menu.hideMenu = hideMenu;
			
		menu.el = el;
		if (activeMenu && menu != activeMenu){
			activeMenu.hideMenu();
		}
		activeMenu = menu;
		
		if (!menu.isVisible()) {
			menu.show();
			menu.alignTo(el, 'tl-bl?');
			menu.sync();
			doc.on('mouseover', handleOver, null, {buffer:150});
			doc.on('mousedown', handleDown);
		}
	}
	
	el.on('mouseover', function(e){
		if(!tid){
			tid = showMenu.defer(150);				
		}
	});
	
	el.on('mouseout', function(e){
		if(tid && !e.within(el, true)){
			clearTimeout(tid);
			tid = 0;				
		}
	});
}
