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 submitform(form_name, usecaptcha) {
	var form = getobject(form_name);
	
	if (checkform(form) == false) {
		return;
	}
	
	if (usecaptcha == true) {
		checkcaptcha(form);
	} else {
		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 checkform(of) {
	// Test if DOM is available and there is an element called required
	if(!document.getElementById || !document.createTextNode){return;}
	if(!getobject('required')){return;}

	// Define error messages and split the required fields
	var error = false;
	var errorClass = 'error_field'
	var errorMsg = 'One or more required fields are empty or invalid';
	var reqfields = getobject('required').value.split(',');

	// remove classes from the required fields
	for(var i = 0; i < reqfields.length; i++) {
		var f = getobject(reqfields[i]);
		if(!f){continue;}
		f.className = '';
	}
	
	// loop over required fields
	for(var i = 0; i < reqfields.length; i++) {
		// check if required field is there
		var f = getobject(reqfields[i]);
		
		if(!f){continue;}
		
		// test if the required field has an error, 
		// according to its type
		switch(f.type.toLowerCase()) {
			case 'text':
				if(f.value == '' && f.id != 'email' && f.id != 'email_address'){cf_adderr(f); error = true;}							
				if((f.id == 'email' || f.id == 'email_address') && !cf_isEmailAddr(f.value)){cf_adderr(f); error = true;}							
			break;
			case 'textarea':
				if(f.value == ''){cf_adderr(f); error = true;}							
			break;
			case 'checkbox':
				if(!f.checked){cf_adderr(f); error = true;}							
			break;
			case 'select-one':
				if(!f.selectedIndex && f.selectedIndex == 0){cf_adderr(f); error = true;}							
			break;
		}
	}
	
	if (error == true) {
		alert(errorMsg);
		return false;
	} else {
		return true;
	}

	/* Tool methods */
	function cf_adderr(o) {
		// Switch the focus to the first invalid field
		if (error == false) {
			f.focus();
		}
		
		o.className = errorClass;
	}
	
	function cf_isEmailAddr(str) {
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
}


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;
		}
	});
}

function clearSearch() {
	document.search_box.search_for.value= "";
}

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, 'bl-tl?');
			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;				
		}
	});
}

function createImageBankPop(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();
			//el.setStyle('text-decoration', '');
			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 + '-popup');
		}
		menu.hideMenu = hideMenu;
			
		menu.el = el;
		if(activeMenu && menu != activeMenu){
			activeMenu.hideMenu();
		}
		activeMenu = menu;
		
		if (!menu.isVisible()) {
			menu.show();
			menu.alignTo(el, 'tl-tl?');
			menu.sync();
			//el.setStyle('text-decoration', 'underline');
			
			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;				
		}
	});
}

function roll_replace(img_src, loc){
	var el = document.getElementById('large-image');
	el.style.backgroundImage = "url(http://ranchomirageca.gov/content_files/shared_content/hotels/"+loc+"/large/"+img_src+")";
}

function getobject(obj) {
	if (document.getElementById)
		return document.getElementById(obj)
	else if (document.getElementByName)
		return document.getElementByName(obj)
	else if (document.all)
		return document.all[obj]
}

function setDirections(fromAddress, toAddress) {
	gdir.load("from: " + fromAddress + " to: " + toAddress);
}

function do_nothing() {
}

