var SliderWidget = Class.create();
SliderWidget.colors = ["#ffffff", "#ffffff", "#fae3db", "#fbcebd", "#f9b79d", "#f7a07d", "#f5895e"];
SliderWidget.prototype = {
	initialize: function(div) {
		select = div.down('select');
		index = select.selectedIndex;
		options = select.options;
		this.text = new Array(options.length);
		var l = options.length;
		for (var i = 0; i < l; ++i) {
			this.text[i] = options[i].text.length == 0 ? "&nbsp;" : options[i].text;
		}
		this.id = "widget_"+div.id;
		new Insertion.After(select, this.get_html(this.id, select));
		select.hide();
		this.select(index);
		widget = this;
		this.links().each(function(li){
			li.observe('click', widget.click.bindAsEventListener(widget));
			new Tooltip(li, li.title);
			li.removeAttribute("title");
		});
	},
	
	get_html: function(id, select) {
		options = select.options;
		items = '<li class="clear-button"><a title="Clear" href="javascript:void(0)">&nbsp;&nbsp;</a></li>';
		var l = options.length;
		for (var i = 1; i < l; ++i) {
			var v = options[i].value;
			if (i == 1) {
				items += '<li class="first">';
			} else {
				items += '<li>';
			}
			items += '<a title="' + this.text[i] + '" href="javascript:void(0)">' + v + "</a></li>";
		}

		return '<div id="'+id+'" class="slider-widget" style="">' +
		'<div class="widget-list">' +
		'<ul>' + items + '</ul>' + 
		'<div class="clear"></div>' +
		'</div>' +
		'<div class="widget-text">&nbsp;</div>' +
	'</div>';
	},
	
	click: function(event) {
		link = Event.element(event);
		index = this.get_link_index(link);
		this.select(index);
	},

	select: function(index) {
		this.highlight(index);
		this.set_selected_value(index);
	},
	
	links: function() {
		return $(this.id).getElementsBySelector("a");
	},
	
	set_selected_value: function(index) {
		$(this.id).previous().selectedIndex = index;
	},

	get_selected_index: function() {
		return $(this.id).previous().selectedIndex
	},

	set_text: function(index) {
		$(this.id).down('div.widget-text').update(this.text[index]);
	},

	get_link_index: function(link) {
		li = link.up();
		return li.previousSiblings().length;
	},

	highlight: function(index) {
		li = this.links()[index].up();
		color = SliderWidget.colors[index];
		if (index > 0) {
			left = [li].concat(li.previousSiblings()).toArray();
			var l = left.length-1;
			for (var i = 0; i < l; ++i) {
				o = left[i];
				d = o.down()
				d.style.backgroundColor = color;
				d.style.borderColor = "orange";
			}
			li.nextSiblings().each(function(o){
				d = o.down();
				d.style.backgroundColor = "#ffffff";
				d.style.borderColor = "#cccccc";
			})
		} else {
			this.links().each(function(o){
				o.style.backgroundColor = "#ffffff";
				o.style.borderColor = "#cccccc";			
			})
		}
	}
}

function reset_weights() {
	$('weights_form').getElementsBySelector("div.slider-widget").each(function(o){
		slider_widgets[o.previous().id].select(0);
	});
}

function set_priorities(weight_array) {
	reset_weights();
	weight_array.each(function(wa){
		weight_ob = $(wa[0]);
		if (weight_ob) {
			weight = wa[2];
			slider_widgets[wa[0]].select(Math.abs(weight)+1);
			sign_ob = $(wa[1]);
			if (sign_ob) {
				weight_sign = weight >= 0 ? 1 : -1;
				options = sign_ob.options;
				var l = options.length;
				for (var i = 0; i < l; ++i) {
					if (options[i].value == weight_sign) {
						sign_ob.selectedIndex = i;
						break;
					}
				}
			}
		}
	})
}

function show_choices(id, show) {
	if (show) {
		$('show-advanced-'+id).hide();
		$('hide-advanced-'+id).show();
		$$('.advanced-'+id).invoke('show');
	} else {
		$('show-advanced-'+id).show();
		$('hide-advanced-'+id).hide();
		$$('.advanced-'+id).invoke('hide');
	}
}

var slider_widgets = new Array();

FastInit.addOnLoad(function(){
	group_ids.each(function(id){
		$$('.advanced-'+id).invoke('hide');
	});
	
	$('weights_form').getElementsBySelector("div.select-weight").each(function(o){
		slider_widgets[o.down('select').id] = new SliderWidget(o);
	});
});
