function DisplayUserMouseOverRating(strPicIdPrefix, strPicId, strImagesPath, intTotalPoints, arrRatingMessages, strUserRatingFullImage, strUserRatingEmptyImage)
{	
    var intMouseOverRating = GetNumbersFromPicId(strPicId);
	    
    for (var i = 1; i <= intMouseOverRating; i++)
    {
        document.getElementById(strPicIdPrefix + "Point" + i).src = strImagesPath + i + strUserRatingFullImage;
    }
    
    for (var j = parseInt(intMouseOverRating) + 1; j <= intTotalPoints; j++)
    {
        document.getElementById(strPicIdPrefix + "Point" + j).src = strImagesPath + j + strUserRatingEmptyImage;
    }            
    	
    	
    document.getElementById(strPicIdPrefix + "Message").firstChild.nodeValue = "  " + arrRatingMessages[intMouseOverRating - 1];
}

function GetNumbersFromPicId(strPicId)
{
    var intNumbers = strPicId.substr(strPicId.length - 1);    
    var i = 1;

    while(isNumeric(intNumbers))
    {
    	i++;
    	intNumbers = strPicId.substr(strPicId.length - i);    
    }
    i = i - 1;
    
    intNumbers = strPicId.substr(strPicId.length - i);    
    
    return intNumbers;
}

//Source: http://www.techfeed.net/blog/index.cfm/2006/2/23/JavaScript-isNumeric-function
function isNumeric(x) {
    // I use this function like this: if (isNumeric(myVar)) { }
    // regular expression that validates a value is numeric
    var RegExp = /^(-)?(\d*)(\.?)(\d*)$/; // Note: this WILL allow a number that ends in a decimal: -452.
    // compare the argument to the RegEx
    // the 'match' function returns 0 if the value didn't match
    var result = x.match(RegExp);
    return result;
}

function DisplayAverageRating(strPicIdPrefix, strImagesPath, intTotalPoints, strAverageRatingFullImage, strAverageRatingHalfImage, strAverageRatingEmptyImage, fltAverageRating)
{        
    var intNumFullPoints = 0, intNumHalfPoints = 0, intNumEmptyPoints = 0;
    var fltRoundedAverageRating = RoundToNearestHalfPoint(fltAverageRating);

    intNumFullPoints = Math.floor(fltRoundedAverageRating);
    intNumHalfPoints = (fltRoundedAverageRating - intNumFullPoints > 0) ? 1 : 0;
    intNumEmptyPoints = intTotalPoints - intNumHalfPoints - intNumFullPoints;

    for (var i = 1; i <= intNumFullPoints; i++)
    {
        document.getElementById(strPicIdPrefix + "Point" + i).src = strImagesPath + i + strAverageRatingFullImage;
    } 

    if (intNumHalfPoints > 0)
    {
    	var intHalfPointNum = parseInt(intNumFullPoints) + 1;
        document.getElementById(strPicIdPrefix + "Point" + intHalfPointNum).src = strImagesPath + intHalfPointNum + strAverageRatingHalfImage;                
    }

    for (var i = parseInt(intNumFullPoints) + parseInt(intNumHalfPoints) + 1; i <= intTotalPoints; i++)
    {
        document.getElementById(strPicIdPrefix + "Point" + i).src = strImagesPath + i + strAverageRatingEmptyImage;
    }
    

   	document.getElementById(strPicIdPrefix + "Message").firstChild.nodeValue = "  RATE THIS NOW!";            
}
        
function DisplayUserRating(strPicIdPrefix, intUserRating, strImagesPath, intTotalPoints, strUserRatingFullImage, strUserRatingEmptyImage, fltAverageRating, intUserRating)            
{		
    for (var i = 1; i <= intUserRating; i++)
    {
        document.getElementById(strPicIdPrefix + "Point" + i).src = strImagesPath + i + strUserRatingFullImage;
    }
    
    for (var j = parseInt(intUserRating) + 1; j <= intTotalPoints; j++)
    {
        document.getElementById(strPicIdPrefix + "Point" + j).src = strImagesPath + j + strUserRatingEmptyImage;
    }            
            
	document.getElementById(strPicIdPrefix + "Message").firstChild.nodeValue = "  AVG. RATING : " + Math.round(fltAverageRating * 10)/10;            
}

function DisplayAppropriateRatingBasedOnUserRating(strPicIdPrefix, strImagesPath, intTotalPoints, strAverageRatingFullImage, strAverageRatingHalfImage, strAverageRatingEmptyImage, strUserRatingFullImage, strUserRatingEmptyImage, fltAverageRating, intUserRating)            
{
    if (intUserRating > 0){
        DisplayUserRating(strPicIdPrefix, intUserRating, strImagesPath, intTotalPoints, strUserRatingFullImage, strUserRatingEmptyImage, fltAverageRating, intUserRating);        
    }
    else{
        DisplayAverageRating(strPicIdPrefix, strImagesPath, intTotalPoints, strAverageRatingFullImage, strAverageRatingHalfImage, strAverageRatingEmptyImage, fltAverageRating);        
    }
}

function RoundToNearestHalfPoint(fltToRound)
{
    var fltIntermediate = 0, fltDecimalPart = 0, intWholePart = 0;

    fltIntermediate = Math.round(fltToRound*100)/100;
    intWholePart = Math.floor(fltIntermediate);
    fltDecimalPart = fltIntermediate - intWholePart;

    if (fltDecimalPart >= .75)
    {
        intWholePart++;
        fltDecimalPart = 0.0;
    }
    else if (fltDecimalPart <= .25)
    {
        fltDecimalPart = 0.0;
    }
    else
    {
        fltDecimalPart = .5;
    }

    return parseFloat(intWholePart) + parseFloat(fltDecimalPart);
}        