var SelectTransformer = Class.create({

	prefix: null,
	element: null,

	initialize: function(classPrefix) {
		this.element = null;
		this.prefix = (classPrefix && classPrefix.length > 0) ? classPrefix : 'selectTransformer';
	},


	prepareSelect: function(selectElement) {
		this.element = $(selectElement);
		var div = new Element('div');

		var selectChildren = this.element.childElements();

		for (var i = 0; i < selectChildren.length; i++) {
			switch (selectChildren[i].tagName.toLowerCase()) {
				case 'optgroup':
					var optgroup = this.prepareOptgroup(selectChildren[i]);
					div.appendChild(optgroup);
					break;

				case 'option':
					var option = this.prepareOption(selectChildren[i]);
					div.appendChild(option);
					break;

				default: break;
			}
		}

		return div.innerHTML;
	},


	prepareOptgroup: function(realOptgroup) {
		var optgroup = new Element('div', {className: this.prefix + '-optgroup'});
		if (realOptgroup.readAttribute('disabled')) {
			optgroup.addClassName(this.prefix + '-optgroup-disabled');
		}

		var label = new Element('div', {className: this.prefix + '-optgroup-label'});
		label.update(realOptgroup.readAttribute('label'));
		optgroup.update(label);

		var optgroupChildren = realOptgroup.childElements();

		for (var i = 0; i < optgroupChildren.length; i++) {
			if (optgroupChildren[i].tagName.toLowerCase() != 'option') {
				continue;
			}
			var option = this.prepareOption(optgroupChildren[i]);
			optgroup.appendChild(option);
		}

		return $(optgroup);
	},


	prepareOption: function(realOption) {
		realOption = $(realOption);
		var option = new Element('a', {className: this.prefix + '-option', href: '#'});
//		var option = new Element('a', {className: this.prefix + '-option', href: '#'});

		if (realOption.readAttribute('disabled') || (realOption.up(0) && realOption.up(0).readAttribute('disabled'))) {
			option.addClassName(this.prefix + '-option-disabled');
		}
		if (realOption.readAttribute('selected')) {
			option.addClassName(this.prefix + '-option-selected');
		}
		option.writeAttribute('rel', realOption.readAttribute('value'));

		var optionLabel = realOption.readAttribute('label');
		if (realOption.innerHTML.length > 0 && realOption.innerHTML != optionLabel) {
			optionLabel = realOption.innerHTML;
		}
		option.update(optionLabel);
		option.writeAttribute('title', optionLabel);
		realOption.writeAttribute('label', optionLabel);
		realOption.update(optionLabel);


		return $(option);
	}

});

CtPage.registerScript("SelectTransformer");

