/**
 * 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 playAnimatedTutorial (tutorial) {
	location.href = '/products/tutorials/' + tutorial + '/';
}

/**
 * Remove a license from a COMSOL Access account
 */
function removeLicense (license) {
	if (window.confirm('Are you sure you want to remove license ' + license + ' from your account?')) {
		location.href = '/access/licenses/remove/?license=' + license;
	}
}

/**
 * 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.read('accessid');
		var aname = Cookie.read('accessname');
		if (aname) {
			$$('#accessDetails .accessName').set('text', decodeURI(aname).replace('+',' '));
		}
		if (aid) {
			if ($('accessLoggedIn')) {
				$('accessLoggedIn').setStyle('display', 'block');
			}
			if ($('accessLoggedOut')) {
				$('accessLoggedOut').setStyle('display', 'none');
			}
		} else {
			if ($('accessLoggedIn')) {
				$('accessLoggedIn').setStyle('display', 'none');
			}
			if ($('accessLoggedOut')) {
				$('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 (document.getElement('.validationError')) {
	} else {
		var field = $(name);
		var cval = Cookie.read('access_' + name);
		if (!cval) {
			var cval = Cookie.read(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');
		});
	}
	
}

var disable_h5f = false;

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

	if (disable_h5f) {
		H5F.setup($$('form'), {
			validClass: "valid",
			invalidClass: "invalid",
			requiredClass: "required"
		});
	
		$$('input[type="email"], input[type="url"], input[type="password"], input[type="text"], textarea, select').addEvent('blur', toggleValidationErrors);
	}
});

function toggleValidationErrors (element) {
	if (this.hasClass('valid')) {
		$$('.validationError[field='+ this.get('id') +']').destroy();
		return;
	}
	
	if (this.hasClass('required') || this.hasClass('invalid')) {
		var errorDiv = new Element('div', {'field' : this.get('id'), 'class' : 'validationError'});
		errorDiv.adopt(new Element('div', {'class' : 'validationText'}).set('text', this.get('title')));
		this.getParent().adopt(errorDiv);
	}
}

function setStatesFromCountry () {
	var cntry = this.options[this.selectedIndex].value;
	$('state').setStyle('display', '');
	try {
		//document.getElement('select[name=state]').replaces($('state'));
		$('state').replaces(document.getElement('select[name=state]'));
		$$('div.validationError[field=state_select]').destroy();
		toggleRequiredField('state', false);
	} catch (e) {
	}
	if (states[cntry]) {
		$('state').setStyle('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)
			}).set('text', states[cntry][i].state));
		}
		state_select.set('required', 'required');
		state_select.set('title', this.get('title'));
		state_select.addEvent('blur', toggleValidationErrors);
		$('state').getParent().adopt(state_select);
		toggleRequiredField('state', true);
	}
}

function toggleRequiredField (id, required) {
	try {
		if (span = document.getElement('#label_' + id + ' span')) {
			span.destroy();
		}
		if (required) {
			$('label_' + id).adopt(new Element('span', {'class': 'required'}).set('text', '*'));
		}
	} catch (e) {
	}
}

function toggleBrowseTab (tab) {
	$$('.tabNavigation a.tab').removeClass('selected');
	$$('.tabContent').addClass('hidden');
	$(tab).addClass('selected');
	$(tab).blur();
	$(tab + 'Content').removeClass('hidden');
}
