/**
 * Vote counter / star display
 * TheHockeyNews.tv
 * Programming by Charles-Alexandre Monette
 */
 
var img_full = '/imgs/design/icon_rate_full.gif';
var img_half = '/imgs/design/icon_rate_medium.gif';
var img_empty = '/imgs/design/icon_rate_empty.gif';
var gId;			// Vote ID element
var gBase;			// Base css ID
var gTxtBox;		// Textbox's css ID
var gTxtResultat;	// 'Vote result' text
var gElements;		// Mouseover text values
var noteDefaut;		// Actual result
var txtDefaut;		// Default text
var gUrl;			// Website url

function Vote( url, id, note, txtResultat, base, txtBox, elements ) {
	gId = id;
	gBase = base;
	gTxtBox = txtBox;
	gElements = elements;
	gTxtResultat = txtResultat;
	gUrl = url;
	txtDefaut = $( txtBox ).innerHTML;
	noteDefaut = note;
	displayStars( note );
	for( star in elements ) {
		Event.observe( star, 'mouseover', onMO );
		Event.observe( star, 'mouseout', onMT );
		Event.observe( star, 'click', onCL );
	}
}

function onMO( e ) {
	element = Event.element( e ).id;
	vote = element.substr( element.length - 1 );
	Element.update( gTxtBox, gElements[ element ] );
	displayStars( vote );
}

function onMT( e ) {
	Element.update( gTxtBox, txtDefaut );
	displayStars( noteDefaut );
}

function onCL( e ) {
	element = Event.element( e ).id;
	vote = element.substr( element.length - 1 );
	Element.update( gTxtBox, 'Thanks for voting' );
	for( star in gElements ) {
		Event.stopObserving( star, 'mouseover', onMO );
		Event.stopObserving( star, 'mouseout', onMT );
		Event.stopObserving( star, 'click', onCL );
		Element.setStyle( star, {cursor: 'default' } );
	}
	var voteRequest = new Ajax.Request( 'http://' + gUrl + '/vote.php', {
			method: 'get', 
			parameters: 'id=' + gId + '&vote=' + vote, 
			onComplete: function( r ) {
				var vote = r.responseText;
				if ( vote >= 1 && vote <= 5 ) {
					window.setTimeout( "displayStars( " + vote + " );", 2000 );
				}
				window.setTimeout( "Element.update( '" + gTxtBox + "', '" + gTxtResultat + "' );", 2000 );
			}
		}
	);
}

function displayStars( vote ) {
	for( var i = 1; i <= Math.floor( vote ); i++ ) $( gBase + i ).src = img_full;
	if ( vote - Math.floor( vote ) > 0 ) {
		$( gBase + i ).src = img_half;
		i++;
	}
	for(; i <= 5; i++ ) $( gBase + i ).src = img_empty;
}