﻿var ratingImages;
//Called onload for less flickering, since these should be cached by browser by the time the user rolls over the rating image
function preloadRatingImages(imagePath) {
	ratingImages = new Array(10);
	for(var j=0;j<10;j++) {
		ratingImages[j] = new Image();
		ratingImages[j].src = imagePath + '/star10-' + (j+1).toString() + '.gif'; //j+1 because images are 1..10, not 0..9
	}
}
//Necessary to use this function instead of a simple previousSibling to skip over whitespace elements
function getPreviousNodeByTagName(elem, tagName) {
	if(elem.tagName)
		if(elem.tagName.toLowerCase() == tagName.toLowerCase())
			return elem;
	if(elem.previousSibling)
		return getPreviousNodeByTagName(elem.previousSibling, tagName);
	return null;
}
//Get position of an element (upper left) relative to the web page
function elementPosition(elem) {
	var x = 0;
	var y = 0;
	if (elem.offsetParent) {
		while (elem.offsetParent) {
			x += elem.offsetLeft;
			y += elem.offsetTop;
			elem = elem.offsetParent;
		}
	} else {
		x = elem.x || x;
		y = elem.y || y;
	}
	return {x: x, y: y};
}
function rolloverRatingImage(e) {
	e = e || window.event;
	var img = e.target || e.srcElement;
	var x = 0;
	if(e.offsetX) {
		//IE
		x = event.offsetX;
	} else if(e.pageX) {
		//FF
		imagePos = elementPosition(img);
		x = e.pageX - imagePos.x;
	} else {
		//Can't do mouseover stuff
		return;
	}
	//We want to convert x number (0..79 offset pixels) to an image index in array (0..9)
	var imageArrayIndex = Math.floor(x/8); //Each star is 16 pixels wide, so half-star is 8 pixels wide
	img.src = ratingImages[imageArrayIndex].src;
}
function clickRatingImage(e) {
	e = e || window.event;
	var img = e.target || e.srcElement;
	var src = img.src;
	var digit = src.charAt(src.length - 5); //digit just before ".gif"
	if(digit == '0')
		//We have 1-10 as possibilities, so we may see the second digit of "10"
		digit = 10;
		
	//set selected index on associated dropdown
	var select = getPreviousNodeByTagName(img, 'select');
	//selectedIndex is zero-based, but it has a "No Rating" 0 element so it is in effect one-based, and the names of the images are one-based
	// so we don't need to translate up or down from the digit
	select.selectedIndex = digit;
	//Trigger a postback (this works because select element set as autopostback by ASP.NET)
	select.onchange();
}

