var FormElementRelationEmail = Class.create({
	initialize: function (rootElem)
	{
		this.rootElem = rootElem;
		
		this.rootElem.select('dd').each(this.primeTypeRow.bind(this));
		
		/*var defaultRadioButtons = this.rootElem.select('input.primary-address');
		var defaultRadioButtonsChangeFunc = this.defaultRadioChange.curry(defaultRadioButtons);
		
		defaultRadioButtonsChangeFunc();
		
		defaultRadioButtons.each(function (defaultRadioButton)
		{
			defaultRadioButton.observe('change', defaultRadioButtonsChangeFunc);
		});*/
	},
	
	textIsPrimary: PbLib.g('This is the primary e-mail address'),
	textMakePrimary: PbLib.g('Set as the primary e-mail address'),
	
	primeTypeRow: function (typeRow)
	{
		var match = typeRow.className.match(/(\s|^)type\-(\d+)(\s|$)/);
		if (!match) return false;
		
		typeRow.relationEmailType = match[2];
		typeRow.emailSelectField = typeRow.select('select').first();
		
		var temp = typeRow.select('input').first();
		while (temp) {
			switch (temp.type) {
			case 'text':
				typeRow.emailTextField = temp;
				break;
			case 'radio':
				typeRow.emailRadioField = temp;
				break;
			}
			temp = temp.next('input');
		}
		
		if (!typeRow.emailSelectField || !typeRow.emailTextField || !typeRow.emailRadioField) {
			return false;
		}
		
		// Filter out the option containing the own type
		typeRow.emailSelectField.select('option').each(function (option) {
			if (option.value == typeRow.relationEmailType) {
				option.remove();
			}
		});
		typeRow.emailSelectField.observe('change', this.selectChange.curry(typeRow).bind(this));
		
		// Add and prepare the star span
		typeRow.emailStarSpan = new Element('span');
		if (typeRow.emailRadioField.checked) {
			typeRow.emailStarSpan.setAttribute('title', this.textIsPrimary);
			typeRow.emailStarSpan.update(this.textIsPrimary);
		} else {
			typeRow.emailStarSpan.setAttribute('title', this.textMakePrimary);
			typeRow.emailStarSpan.update(this.textMakePrimary);
		}
		typeRow.emailRadioField.parentNode.insertBefore(typeRow.emailStarSpan, typeRow.emailRadioField);
		typeRow.emailStarSpan.observe('click', this.setPrimary.curry(typeRow).bind(this));
	
		typeRow.emailRadioField.setStyle({'position': 'absolute', 'left': '-999em'});
	
		if (typeRow.emailRadioField.checked) {
			this.setPrimary(typeRow);
		}
		this.selectChange(typeRow);
	},
	
	setPrimary: function (typeRow)
	{
		if (!typeRow.emailRadioField.checked) {		
			// Find current checked element
			this.rootElem.select('input').each((function (inputElem)
			{
				if (inputElem.type == 'radio' && inputElem.checked) {
					this.unsetPrimary(inputElem.up(0));
					throw $break;
				}
			}).bind(this));
		}
		
		typeRow.emailRadioField.checked = true;
		typeRow.emailStarSpan.setAttribute('title', this.textIsPrimary);
		typeRow.emailStarSpan.update(this.textIsPrimary);
		typeRow.emailStarSpan.addClassName('rel-email-primary');
	},
	
	unsetPrimary: function (typeRow)
	{
		if (!typeRow.emailRadioField.checked) return true;
		
		typeRow.emailRadioField.checked = false;
		typeRow.emailStarSpan.setAttribute('title', this.textMakePrimary);
		typeRow.emailStarSpan.update(this.textMakePrimary);
		typeRow.emailStarSpan.removeClassName('rel-email-primary');
	},
	
	selectChange: function (typeRow)
	{
		var value = $F(typeRow.emailSelectField);
		if (value == 'custom') {
			typeRow.emailTextField.show();
		} else {
			typeRow.emailTextField.hide();
		}
	}
});
		
document.observe('dom:loaded', function ()
{
	$$('dl.relation-email').each(function (defList)
	{
		new FormElementRelationEmail(defList);
	});
});