var maxstars = 5;

var alts = new Array(
			'1 - Трагедия',
			'2 - Надувалово',
			'3 - Слабовато',
			'4 - Так себе',
			'5 - Может быть',
			'6 - Нормально',
			'7 - Хорошо',
			'8 - Прилично',
			'9 - Отлично',
			'10 - Хитово'
			);

var alt = "";
var tempImages = new Array();

// just draw the stars, doesn't assign any mouse event
function drawNoEvents(id, ocena, url, target)
{    
	var o = parseFloat(ocena);
	var imgstr = "";	
	
	if (url == undefined)
	    url = "";
	else
	    url = "href=\"" + url + "\"";

	if (target == undefined)
	    target = "";
	else
	    target = "target=\"" + target + "\"";

	for(var i=0;i<(maxstars*2);i++)
	{
		var starstr = (i < o) ? "/i/star_full_":"/i/star_half_";
		starstr += ((i%2) == 0)? "left.gif":"right.gif";
		imgstr += "<a " + target + " " + url + " style=\"cursor:pointer\"><img src=\""+starstr+"\" alt=\""+alts[i]+"\" border=\"0\"></a>";
	}
//	alert(imgstr);
	document.getElementById(id).innerHTML = imgstr;		
}

function draw(id, ocena, url, target)
{
    drawNoEvents(id, ocena, url, target);
 
    var ob = document.getElementById(id);    
	for (var i=0;i<ob.childNodes.length;i++)
	{	    
		imgsrc = ob.childNodes[i].firstChild;		
		imgsrc.onmouseout = onOut;
		imgsrc.onmouseover = onOver;
		imgsrc.onclick = onStarsClick;				
	}
}

function onOver(e)
{
	var pob = document.getElementById("p"+this.parentNode.parentNode.id);
	alt = pob.innerHTML;
	pob.innerHTML = this.alt;

	var im = this.parentNode.parentNode;
	for(var i=0;i<im.childNodes.length;i++)
	{
		tempImages[i] = im.childNodes[i].firstChild.src;
		im.childNodes[i].firstChild.src = ((i%2) == 0)? "/i/star_sel_left.gif":"/i/star_sel_right.gif";
		if (this === im.childNodes[i].firstChild)
			break;
	}
}

function onOut(e)
{
	var pob = document.getElementById("p"+this.parentNode.parentNode.id);
	pob.innerHTML = alt;

	var im = this.parentNode.parentNode;
	for(var i=0;i<im.childNodes.length;i++)
	{
		im.childNodes[i].firstChild.src = tempImages[i];
		if (this === im.childNodes[i].firstChild)
			break;
	}
}

function onStarsClick(e)
{
	var rank = getRank(this.alt);
	
	// elementID is in the following format - YYYY_x where YYYY represents ID of a product, "_x" - two 
	// additional characters which are always present and distinguish stars which concerning to the same product
	var elementID = this.parentNode.parentNode.id.toString();
//	var productID = elementID.slice(0, elementID.length - 2);			
	var productID = elementID;			
	
    // construct productReviewsWithStars url class
	window.location = "/hit/" + productID + "-r" + rank + "";
}

function getRank(alt)
{
    var rank;
	switch(alt)
	{
		case alts[0]: rank = "1"; break;
		case alts[1]: rank = "2"; break;
		case alts[2]: rank = "3"; break;
		case alts[3]: rank = "4"; break;
		case alts[4]: rank = "5"; break;
		case alts[5]: rank = "6"; break;
		case alts[6]: rank = "7"; break;
		case alts[7]: rank = "8"; break;
		case alts[8]: rank = "9"; break;
		case alts[9]: rank = "10"; break;
	}
    
    return rank;
}


// DRAW PERSIST SECTION

// apply when rating should only be set (using mouse click) without switching to another page. 
// Must be combined with the "hidden" inputs which will hold the rating for submit
// rank for stars is not set using "alt" values but is computed from the stars gif,s

var changeRating = true; // when true muose pointer can change the rating.

function drawPersist(id, ocena)
{
    drawNoEvents(id, ocena);
 
    var ob = document.getElementById(id); // get "div" element which contains stars
	ob.onmouseout = onOutForDiv;
        
    var imgsrc, anchor;
	for (var i=0;i<ob.childNodes.length;i++)
	{	    
		imgsrc = ob.childNodes[i].firstChild;	
		imgsrc.onmouseout = onOutForImgDrawPersist;	
		imgsrc.onmouseover = onOverForImgDrawPersist;
		
		anchor = ob.childNodes[i];				
		imgsrc.onclick = onStarsClickDrawPersist;		
	}
}

function onOverForImgDrawPersist(e)
{        
    if (changeRating)
    {
       	var pob = document.getElementById("p"+this.parentNode.parentNode.id);
        alt = pob.innerHTML;
        pob.innerHTML = this.alt;	

	    var noSelection = false; // when true stars "no selection" are drawn

	    var rank = 0;
	    var im = this.parentNode.parentNode;	    
	    
	    for(var i=0;i<im.childNodes.length;i++)
	    {   // remember stars view
		    tempImages[i] = im.childNodes[i].firstChild.src;
		}
	    for(var i=0;i<im.childNodes.length;i++)
	    {		    
    		if (!noSelection)
		{
	    	    im.childNodes[i].firstChild.src = ((i%2) == 0)? "/i/star_sel_left.gif":"/i/star_sel_right.gif";
		    rank += 1; // yellow star, increment rank
		}
		else
    		    im.childNodes[i].firstChild.src = ((i%2) == 0)? "/i/star_half_left.gif":"/i/star_half_right.gif";
	    	    
		if (this === im.childNodes[i].firstChild)
		    noSelection = true;			
	
	    }
	
	    // set rating value in the hidden input for submit
	    var hiddenValue = document.getElementById("H"+this.parentNode.parentNode.id);
	    hiddenValue.value = rank.toString();
    }
}


// 
function onOutForImgDrawPersist(e)
{
    var pob = document.getElementById("p"+this.parentNode.parentNode.id);
    pob.innerHTML = alt;

    if (changeRating)
    {	    
	    var rank = 0;
	    var im = this.parentNode.parentNode;
	    var srcStrWithoutUrl; // star gif name without url section

	    for(var i=0;i<im.childNodes.length;i++)
	    {   //restore previous stars view
		im.childNodes[i].firstChild.src = tempImages[i];

		// there are 3 types of stars: star_full_xxx.gif, star_sel_xxx.gif and star_half_xxx.gif where two former indicates the selection
		if ((i%2) == 0)
		{
			// check whether particular star indicates selection, if yes - rank is incremented

			// e.g. tempImages[i] contains "/i/star_sel_left.gif" so srcStrWithoutUrl = "/i/star_sel_left.gif"
			srcStrWithoutUrl = tempImages[i].substr(tempImages[i].length - "/i/star_full_left.gif".length)
			rank += (srcStrWithoutUrl == "/i/star_full_left.gif") ? 1 : 0;

			srcStrWithoutUrl = tempImages[i].substr(tempImages[i].length - "/i/star_sel_left.gif".length)
			rank += (srcStrWithoutUrl == "/i/star_sel_left.gif") ? 1 : 0;
		}
		else
		{
			srcStrWithoutUrl = tempImages[i].substr(tempImages[i].length - "/i/star_full_right.gif".length)
			rank += (srcStrWithoutUrl == "/i/star_full_right.gif") ? 1 : 0;

			srcStrWithoutUrl = tempImages[i].substr(tempImages[i].length - "/i/star_sel_right.gif".length)
			rank += (srcStrWithoutUrl == "/i/star_sel_right.gif") ? 1 : 0;
		}
			


	    }	   
	    // set rating value in the hidden input for submit
	    var hiddenValue = document.getElementById("H"+this.parentNode.parentNode.id);
	    hiddenValue.value = rank.toString();
	
    }
}

function onOutForDiv(e)
{
    changeRating = true; // user can change ratings    
}

function onStarsClickDrawPersist(e)
{
    changeRating = false; // stop changing ratings by the user 
}


