/*
	BRADLEY SELECT!!!!
*/

var openedSelect = null;
var initCounter = new Object({ counter: 0 });
var initSelects = function() {
	//return;
	if (this.counter++ > 50) {
		alert('Something really strange is going on!');
		return;
	}
	
	var sels = $$('select.beaselect');
	for(var i=0; i<sels.length; i++) {
		var osel = sels[i];
		var op = osel.getParents().filter(function(o, i) {
			return o.getStyle('position') == 'relative' || o.getStyle('position') == 'absolute';
		}, osel)[0];
		
		if (!op) {
			initSelects.delay(100, this);
			break;
		}
		//Debug.alertObject(op.tagName, 'CLASS OF PARENT');
		
		// non displayed elements have no styles... so we calculate it!
		var selstyles = osel.getStyles('width', 'padding-left', 'padding-right');
		var selwidth = 0;
		for(var st in selstyles) {
			//Debug.alertObject(ulstyles[st], 'UL C STYLE');
			selwidth += selstyles[st].toInt();
		}
		if (!selwidth || selwidth > 250) {
			initSelects.delay(100, this);
			break;
		}

		var pos = osel.getPosition(op);

		//Debug.alertObject(pos, 'POSITION');
		//Debug.alertObject(selwidth, 'SELWIDTH');
		
		//continue;		
		
		// setup input
		var newinput = new Element('div', { });
		newinput.set('styles', {
			position: osel.getStyle('position'),
			top: pos.y,
			left: pos.x-2,
			width: (selwidth-30)+'px',
			//border: '1px solid black',
			overflow: 'hidden',
			height: '17px',
			lineHeight: '17px',
			cursor: 'pointer',
			padding: '0px 4px 0px 4px'
		});
		// insert base replacement element into DOM
		newinput.inject(osel, 'before')

		// remove from DOM
		var sel = osel.dispose();

		var newhidden = new Element('input', { type: 'hidden', name: 's_'+sel.name, value: ''});

		var newa = new Element('a');
		newa.set('styles', {
			position: 'absolute',
			top: pos.y,
			left: pos.x+selwidth-21,
			display: 'block',
			width: '19px',
			height: '17px',
			cursor: 'pointer',
			//backgroundColor: 'black'
			backgroundColor: Html.isMSIE6 ? 'transparent':'#cccccc',
			opacity: Html.isMSIE6 ? null:0.1
		});
		
		var newul = new Element('ul', { 'class': sel.className });
		newul.set('styles', {
			position: 'absolute',
			width: selwidth-24,
			top: pos.y+19,
			left: pos.x-2,
			visibility: 'hidden'
		});
		newul.set('tween', { duration: 300 });

		newa.collapsed = true;
		newa.addEvent('click', function(event) {
			if (event)
				event.stop();
			
			if (openedSelect && openedSelect != this) {
				openedSelect.fireEvent('click');
			}
			
			this.collapsed = !this.collapsed;
			var ul = this.getNext();
			//Debug.alertObject(ul, 'NEXT ITEM');
			
			if (!this.collapsed) {
				var sy = ul.getSize().y;
				var py = this.getPosition().y;
				var wy = window.getSize().y+window.getScroll().y;
				
				var opy = ul.getParents().filter(function(o, i) {
					return o.getStyle('position') == 'relative';
				}, ul)[0].getPosition().y;
				
				if (wy < sy+py+19+10) {
					ul.setStyle('top', wy-sy-10-opy);
				} else
					ul.setStyle('top', py+19-opy);
			}

			ul.set('styles', { zIndex: this.collapsed ? 100 : 110 });
			if (Html.isMSIE6)
				ul.fade(this.collapsed ? 'hide':'show');
			else
				ul.fade(this.collapsed ? 'out':'in');
			if (!this.collapsed) 
				openedSelect = this;
			else
				openedSelect = null;
		}).addEvent('mouseover', function() {
			if (!Html.isMSIE6)
				this.fade(0.6);
		}).addEvent('mouseout', function() {
			if (!Html.isMSIE6)
				this.fade(0.1);
		});
		
		newinput.addEvent('click', function(e) {
			this.getNext().fireEvent('click', e);
		});

		// insert into DOM
		newul.inject(newinput, 'after').fade('hide');
		newa.inject(newinput, 'after');
		newhidden.inject(newul, 'after');
		
		// copy select options!
		var opts = sel.getChildren('option');
		var newli;
		var opt;
		for(var j=0; j<opts.length; j++) {
			opt = opts[j];
			newli = new Element('li');
			if (opt.selected) {
				newhidden.set('value', opt.value);
				newinput.set('html', opt.get('text'));
				newinput.className = opt.className;
			}
			newli.id = 'value:'+opt.value;
			newli.set('html', opt.get('text'));
			newli.className = opt.className;
			newli.inject(newul, 'bottom');
		}
		
		sel.erase();
		
		// setup elements!
		newul.getChildren('li').setStyle('overflow', 'hidden').addEvent('mouseover', function() {
			this.toggleClass('selected');
		}).addEvent('mouseout', function() {
			this.toggleClass('selected');
		}).addEvent('click', function() {
			this.getParent().getPrevious('div').set('text', this.get('text')).className = this.className;
			
			var v = '';
			var matches;
			if (this.id && (matches = this.id.match(/value:(.*)/)))
				v = matches[1];
			else
				v = this.get('text');
			
			this.getParent().getNext('input').set('value', v);
		});
	}
};

window.addEvent('domready', function() {
	
	document.addEvent('click', function() {
		if (openedSelect)
			openedSelect.fireEvent('click');
	});

	// hack for Safari 3/4 ... sometimes it hasn't got the correct values when the document is ready.
	initSelects.delay(100, initCounter);
});

