page_loaded.push(function() {
	var slider;
	var ratevals;

	function revattr(elem, descriptions)
	{
		this.elem	= elem;
		this.input	= YAHOO.util.Dom.get('input_' + elem.id);

		if (descriptions)
			this.descriptions = descriptions;

		var label	= YAHOO.util.Dom.get('description_' + elem.id);
		var val		= parseInt(this.input.value ? this.input.value : 0);

		this.initialized = this.input.value == '' ? 0 : 1;

		if (label) {
			var elems = YAHOO.util.Dom.getChildren(label);
			for (var i = 0; i < elems.length; i++)
				label.removeChild(elems[i]);
			this.label = document.createTextNode('');
			label.appendChild(this.label);
		}

		if (YAHOO.util.Dom.hasClass(elem, 'stars')) {
			this.slider = YAHOO.widget.Slider.getHorizSlider(elem.id, elem.id + '_thumb', 0, 89, 1);
			this.slider.subscribe('change', this.onStarsChange, this, true);

			YAHOO.util.Event.addListener(this.elem, 'mouseover', this.onStarsHoverStart, this, true);
			YAHOO.util.Event.addListener(this.elem, 'mousemove', this.onStarsHoverMove, this, true);
			YAHOO.util.Event.addListener(this.elem, 'mouseout', this.onStarsHoverStop, this, true);

			if (val)
				this.slider.setValue(val * 18 - 1, true);
		}

		if (YAHOO.util.Dom.hasClass(elem, 'slider')) {
			this.slider = YAHOO.widget.Slider.getHorizSlider(elem.id, elem.id + '_thumb', 0, 200, 1);
			this.slider.subscribe('change', this.onSliderChange, this, true);
			this.slider.setValue(val + 100, true);
		}
	}

	revattr.prototype =
	{
		onStarsHoverStart: function(e)
		{
			var x		= YAHOO.util.Event.getXY(e)[0] - YAHOO.util.Dom.getX(this.elem);
			var tick	= parseInt((x+18)/18);

			YAHOO.util.Dom.replaceClass(this.elem, 'stars', 'stars_hover');

			this.elem.style.backgroundPosition = -90 + (18 * tick) + 'px';
		},

		onStarsHoverMove: function(e)
		{
			var x		= YAHOO.util.Event.getXY(e)[0] - YAHOO.util.Dom.getX(this.elem);
			var tick	= parseInt((x+18)/18);

			this.elem.style.backgroundPosition = -90 + (18 * tick) + 'px';

			if (this.hasDescriptions())
				this.label.nodeValue = this.getDescriptionForValue(tick);
		},

		onStarsHoverStop: function(e)
		{
			YAHOO.util.Dom.replaceClass(this.elem, 'stars', 'stars_hover');

			this.elem.style.backgroundPosition	= -90 + (18 * this.input.value) + 'px';
			this.label.nodeValue				= '';
		},

		onStarsChange: function(x)
		{
			var tick = parseInt((x+18)/18);

			this.elem.style.backgroundPosition = -90 + (18 * tick) + 'px';

			if (this.slider.valueChangeSource == 1 || this.initialized)
				this.input.value = tick;

			if (YAHOO.util.Dom.hasClass(this.elem, 'stars_hover')) {
				YAHOO.util.Dom.removeClass(this.elem, 'stars_hover');
				YAHOO.util.Dom.addClass(this.elem, 'stars');
			}

			if (this.hasDescriptions())
				this.label.nodeValue = this.getDescriptionForValue(tick);

			YAHOO.util.Event.removeListener(this.elem, 'mouseover');
			YAHOO.util.Event.removeListener(this.elem, 'mousemove');
			YAHOO.util.Event.removeListener(this.elem, 'mouseout');
		},

		onSliderChange: function(x)
		{
			var value = x - 100;

			if (this.slider.valueChangeSource == 1 || this.initialized) {
				var elems	= this.elem.parentNode.getElementsByTagName('label');
				var left	= elems[0].firstChild.firstChild.nodeValue.toLowerCase();
				var right	= elems[1].firstChild.firstChild.nodeValue.toLowerCase();

				this.input.value = value;

				if (value >= -100 && value < -70)
					this.label.nodeValue = 'very ' + left;
				if (value >= -70 && value < -40)
					this.label.nodeValue = 'mostly ' + left;
				if (value >= -40 && value < -10)
					this.label.nodeValue = 'slightly ' + left;
				if (value >= -10 && value <= 10)
					this.label.nodeValue = 'neutral';
				if (value > 10 && value <= 40)
					this.label.nodeValue = 'slightly ' + right;
				if (value > 40 && value <= 70)
					this.label.nodeValue = 'mostly ' + right;
				if (value > 70 && value <= 100)
					this.label.nodeValue = 'very ' + right;
			} else
				this.label.nodeValue = 'none selected';
		},

		hasDescriptions: function()
		{
			return this.descriptions ? 1 : 0;
		},

		getDescriptionForValue: function(val)
		{
			return this.descriptions[val - 1];
		}
	};

	var descs =
	[
		'Poor',
		'Fair',
		'Average',
		'Good',
		'Excellent'
	];

	var ratings =
	{
		init: function()
		{
			var elems = YAHOO.util.Dom.getElementsByClassName('revattr');

			for (var i = 0; i < elems.length; i++) {
				var elem = elems[i];
				var rating = new revattr(elem, descs);
			}

			var button = new YAHOO.widget.Button('tips_button');

			button.subscribe('click', ratings.show_tips, true);

			YAHOO.namespace('hadleigh');
			YAHOO.namespace('hadleigh.reviews');

			YAHOO.hadleigh.reviews.tips = new YAHOO.widget.Dialog('tips', {
				width:					'275px',
				visible:				false,
				constraintoviewport:	true,
				zIndex:					4
			});

			var content = document.getElementById('tips_content');

			YAHOO.hadleigh.reviews.tips.setHeader('Tips for Writing a Great Review');
			YAHOO.hadleigh.reviews.tips.setBody(content);
			YAHOO.hadleigh.reviews.tips.render(document.body);

			content.style.display = 'block';
		},

		show_tips: function(evt)
		{
			var region	= YAHOO.util.Dom.getRegion(this.get('element'));
			var x		= region.right + 10;
			var y		= region.top;

			YAHOO.hadleigh.reviews.tips.cfg.setProperty('xy', [ x, y ]);
			YAHOO.hadleigh.reviews.tips.show();
		},

		submit: function(evt)
		{
			YAHOO.util.Dom.get('review').submit();
		}
	};

	ratings.init();

	YAHOO.util.Event.addListener('review-preview', 'click', ratings.submit);
});

