var NUMBER_OF_STARS = 5;
var currentRating;

//round up/down to 0.5
function ratingRound(rating)
{
	var result = 0;
	for (var j = 0; j < NUMBER_OF_STARS; j++)
	{
		if (rating >= 1)
		{
			result++;
			rating--;
		}
		else
		{
			if(rating >=0.25 && rating <0.75)
			{
				result += 0.5;
			}
			else if(rating >= 0.75)
			{
				result++;
			}
			else // rating <0.25
			{
				//nothing
			}
			break;
		}
	}
	return result;
}

//Initial xmlhttp object
function GetXmlHttpObject()
{
	if (window.XMLHttpRequest)
	{
	// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject)
	{
	// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

//Initial draw rating bar at loading
function init_rating(allowVote)
{
	var ratings = document.getElementsByTagName('span');
    for (var i = 0; i < ratings.length; i++)
    {
        if (ratings[i].className != 'starRating')
            continue;
        //var rating = ratings[i].firstChild.nodeValue;
		var idHidden = ratings[i].getAttribute('id') + '_hidden';
		var rating = document.getElementById(idHidden).value;//fix bug: prevent from display number of rating
		//bug: show number instead of rating when rating > max, or < min: fixed begin
		if (rating > NUMBER_OF_STARS)
			rating = NUMBER_OF_STARS;
		if (rating < 0)
			rating = 0;
		//bug: show number instead of rating when rating > max, or < min: fixed end
		//ratings[i].removeChild(ratings[i].firstChild);
		drawRating(ratings[i],rating,allowVote);
    }
}

//Draw rating bar
function drawRating(spanRatingObject, rating,allowVote)
{
		rating = ratingRound(rating);
		if (rating>NUMBER_OF_STARS)
			rating = NUMBER_OF_STARS;
        for (var j = 0; j < NUMBER_OF_STARS; j++)
        {
            var star = document.createElement('img');
            if (rating >= 1)
            {
                star.setAttribute('src', '/skin1/images/rating_on.gif');
                star.className = 'on';
                rating--;
            }
            else if(rating == 0.5)
            {
                star.setAttribute('src', '/skin1/images/rating_half.gif');
                star.className = 'half';
                rating = 0;
            }
            else
            {
                star.setAttribute('src', '/skin1/images/rating_off.gif');
                star.className = 'off';
            }
            var widgetId = spanRatingObject.getAttribute('id');
            star.setAttribute('id', 'star_'+j+'_'+widgetId);
			if(allowVote)//if logged in or not yet vote
			{
            star.onmouseover = new Function("evt", "displayHover('"+widgetId+"', "+j+");");
            star.onmouseout = new Function("evt", "displayNormal('"+widgetId+"', "+j+");");
			}
            spanRatingObject.appendChild(star);
        } 
}

//Behavior for mouse over each star
function displayHover(ratingId, star)
{

    for (var i = 0; i <= star; i++)
    {
        var starElement = document.getElementById('star_'+i+'_'+ratingId);
		
        starElement.setAttribute('src', '/skin1/images/rating_over.gif');
		
    }
}

//Behavior for mouse out each star
function displayNormal(ratingId, star)
{
    for (var i = 0; i <= star; i++)
    {
        var status = document.getElementById('star_'+i+'_'+ratingId).className;
        var starElement = document.getElementById('star_'+i+'_'+ratingId);
        starElement.setAttribute('src', '/skin1/images/rating_'+status+'.gif');
    }
}

function submitRating(evt)
{

	/*
	Syntax of star img id: star_i_aa_CCCCC...
	In which:
	i = {0,1...NUMBER_OF_STARS}, NUMBER_OF_STARS<10
	aa = code for span at various module. Ex, pl = product list, fh = feature home....
	CCCCCC = productid which stored at xcart_products.productid
	*/
	var productId = evt.target.getAttribute('id').substr(10); //get productid from id attribute
	var voting = parseInt(evt.target.getAttribute('id').substr(5,1))+1; //get rating level from id attribute
	var spanID = evt.target.getAttribute('id').substr(7);
	var url = "vote_star.php"; // url for send request to backend
	url +=  "?productId=";
	url += productId;
	url += "&voting=";
	url += voting;
	
	currentRating = voting;
	
	xmlhttp=GetXmlHttpObject();
	xmlhttp.onreadystatechange=function()
	{
		if(xmlhttp.readyState==4)
		{
			newRating = xmlhttp.responseText;
			objSpan = document.getElementById(spanID);
			j = objSpan.childNodes.length;
			for(i=0; i<j; i++)
			 {
					objSpan.removeChild(objSpan.firstChild);
			 }
			 try
			 {
				drawRating(objSpan, newRating,false);
			}
			catch(e){}
		}
	}

	xmlhttp.open("GET",url,true);
	xmlhttp.send(null);
}
		
function jqueryInit(allowVote)
{
	if(allowVote)//if not yet loged in
	{
		init_rating(allowVote);
		$('span.starRating/img').bind('click', submitRating);
	}
	else
	{
		init_rating(allowVote);
	}
}