/**
 * Register events.
 */
window.addEvent('domready', initialize);

/**
 * Wrapper function to run when the page is fully loaded.
 * Here you should you put all functions that need to 
 * run automatically.
 * 
 * @return void
 * @author david
 */
function initialize () {
	showAccessLinks();
	setDefaultFormValues();
	
	hideFormFields();
	
	initAccessLoginBox();
}

/**
 * Hides spamfields in forms.
 *
 * @return void
 * @author peter
 */
function hideFormFields() {
	$$('.spch').setStyle('display', 'none');
}


/**
 * Function to make sure that correct COMSOL Access links
 * are shown at the top of the page. Checks if the accessid
 * cookie is set to decide if you are logged in or not. This
 * function is needed to allow for caching our webpages.
 * 
 * @return void
 * @author david 
 */
function showAccessLinks () {
	try {
		var aid = Cookie.get('accessid');
		var aname = Cookie.get('accessname');
		if (aname) {
			$$('#accessDetails .accessName').setText(decodeURI(aname).replace('+',' '));
		}
		if (aid) {
			$('accessLoggedIn').setStyle('display', 'block');
			$('accessLoggedOut').setStyle('display', 'none');
		} else {
			$('accessLoggedIn').setStyle('display', 'none');
			$('accessLoggedOut').setStyle('display', 'block');
		}
	} catch (e) {}
}

/**
 * Display a dialog with general search tips
 * 
 * @return void
 * @author david
 */
function openSearchTips () {
	window.open("/search/tips/", "searchTips", "width=440,height=400,resizable=1,scrollbars=1");
}

/**
 * Function to automatically fill out forms with info from
 * previous forms. Done using cookies. We do this with JavaScript
 * to allow caching of webpages.
 * 
 * @return void
 * @author david 
 */
function setDefaultFormValues () {
	setDefaultFormFieldValue('first_name');
	setDefaultFormFieldValue('last_name');
	setDefaultFormFieldValue('company');
	setDefaultFormFieldValue('title');
	setDefaultFormFieldValue('department');
	setDefaultFormFieldValue('address');
	setDefaultFormFieldValue('address_2');
	setDefaultFormFieldValue('city');
	setDefaultFormFieldValue('state');
	setDefaultFormFieldValue('zip_code');
	setDefaultFormFieldValue('country');
	setDefaultFormFieldValue('phone');
	setDefaultFormFieldValue('fax');
	setDefaultFormFieldValue('email');
}

function setDefaultFormFieldValue (name) {
	if ($E('.validationError')) {
	} else {
		var field = $(name);
		var cval = Cookie.get('access_' + name);
		if (!cval) {
			var cval = Cookie.get(name);
		}
		if (field && cval) {
			if (field.tagName == 'INPUT' && field.value.length == 0) {
				field.value = cval;
			}
			if (field.tagName == 'SELECT' && !field.selectedIndex) {
				for (var i = 0; i < field.options.length; i++) {
					if (field.options[i].value == cval) {
						field.options[i].selected = 'selected';
						break;
					}
				}
			}
		}
	}
}

var firstTab = '';
function initAccessLoginBox() {
	if (firstTab == 'register') {
		// show register
		$('accessTabRegister').addClass('selected');
		$('accessRegister').setStyle('display', 'block');
		
		// hide other
		$('accessTabLogin').removeClass('selected');
		$('accessTabForgot').removeClass('selected');
		$('accessLogin').setStyle('display', 'none');
		$('accessForgot').setStyle('display', 'none');
	} else if (firstTab == 'forgot') {
		// show forgot
		$('accessTabForgot').addClass('selected');
		$('accessLogin').setStyle('display', 'none');
		
		// hide other
		$('accessTabLogin').removeClass('selected');
		$('accessTabRegister').removeClass('selected');
		$('accessForgot').setStyle('display', 'block');
		$('accessRegister').setStyle('display', 'none');		
	}
	
	if ($('accessBox')) {
		$('accessTabLogin').addEvent('click', function (e) {
			// display login
			$('accessTabLogin').addClass('selected');
			$('accessLogin').setStyle('display', 'block');
			
			// hide other
			$('accessTabRegister').removeClass('selected');
			$('accessTabForgot').removeClass('selected');
			$('accessRegister').setStyle('display', 'none');
			$('accessForgot').setStyle('display', 'none');
		});

		$('accessTabRegister').addEvent('click', function (e) {
			// show register
			$('accessTabRegister').addClass('selected');
			$('accessRegister').setStyle('display', 'block');
			
			// hide other
			$('accessTabLogin').removeClass('selected');
			$('accessTabForgot').removeClass('selected');
			$('accessLogin').setStyle('display', 'none');
			$('accessForgot').setStyle('display', 'none');
		});
		
		$('accessTabForgot').addEvent('click', function (e) {
			// show forgot
			$('accessTabForgot').addClass('selected');
			$('accessLogin').setStyle('display', 'none');
			
			// hide other
			$('accessTabLogin').removeClass('selected');
			$('accessTabRegister').removeClass('selected');
			$('accessForgot').setStyle('display', 'block');
			$('accessRegister').setStyle('display', 'none');
		});
	}
	
}

window.addEvent('domready', function () {
	try {
		if ($('state')) {
			$('country').addEvent('change', setStatesFromCountry);
			$('country').fireEvent('change');
		}
	} catch (e) {}
});

function setStatesFromCountry () {
	var cntry = this.options[this.selectedIndex].value;
	$('state').setStyles({display: ''});
	try {
		$E('select[name=state]').replaceWith($('state'));
		toggleRequiredField('state', false);
	} catch (e) {}
	if (states[cntry]) {
		$('state').setStyles({display: 'none'});
		var state_select = new Element('select', {id: 'state_select', name: 'state'});
		state_select.adopt(new Element('option'));
		for (var i = 0; i < states[cntry].length; i++) {
			state_select.adopt(new Element('option', {
				value: states[cntry][i].abbr,
				selected: (($('state').value == states[cntry][i].abbr) ? true : false)
			}).setText(states[cntry][i].state));
		}
		$('state').getParent().adopt(state_select);
		toggleRequiredField('state', true);
	}
}

function toggleRequiredField (id, required) {
	try {
		if (span = $E('#label_' + id + ' span')) {
			span.remove();
		}
		if (required) {
			$('label_' + id).adopt(new Element('span', {'class': 'required'}).setText('*'));
		}
	} catch (e) {}
}

/**
 * Include support for validators
 */
Element.extend({

	validateErrors: [],
	
	validateForm: function () {
		this.validateErrors = [];
		this.getFormElements().each(function(el){
			if (!el.validateField()) {
				this.validateErrors.extend(el.validateErrors);
			}
		}, this);
		if (this.validateErrors.length) {
			return false;
		}
		return true;
	},
	
	validateField: function () {
		this.validateErrors = [];
		var validators = this.getProperty('validators');
		if (validators) {
			validators = validators.split(',');
			for (var i = 0; i < validators.length; i++) {
				try {
					this['validate_' + validators[i]]();
				} catch (e) {
				}
			}
		}
		if (this.validateErrors.length) {
			return false;
		}
		return true;
	},
	
	validate_email: function () {
		if (this.value.trim().length && !this.value.match(/^.*?@.*\.[a-zA-Z]+$/)) {
			this.validateErrors.include('"' + this.getValue() + '" is not a valid email address');
			return false;
		}
		return true;
	},

	validate_required: function () {
		if (!this.value.trim().length) {
			this.validateErrors.include('"' + (this.getAttribute('label') || this.getAttribute('name')) + '" is a required field');
			return false;
		}
		return true;
	},

	getPosition: function(overflown){
		overflown = overflown || [];
		var el = this, left = 0, top = 0;
		do {
			left += el.offsetLeft || 0;
			top += el.offsetTop || 0;
			el = el.offsetParent;
		} while (el);
		overflown.each(function(element){
			left -= element.scrollLeft || 0;
			top -= element.scrollTop || 0;
		});
		return {'x': left, 'y': top};
	}

});