/**
 *	StarRating Lite Edition
 *
 *	- Independant user rating widget with basic functionality
 *
 *	@author: Vivek Reddy
 */


	/**************************************************************************
	*
	*	StarRatingSystem Object
	*
	**************************************************************************/
	
var StarRatingSystem = function(images, maxstars) {

	/*
	*
	*	System Construction
	*
	*/
	
	// An object containing the images for the 3 states
	var _starImages = {
		on: images.on,
		off: images.off,
		mouseover: images.mouseover
	};
	var _starSize = [ images.imageWidth, images.imageHeight ];
	// Maximum stars on a scale
	var _maxStars = (maxstars) ? maxstars : 5;
	// Internal object to access this StarRatingSystem
	var __TSRtSyS = this;
	// Array with all of the current rating scales in the DOM
	var _RatingScales = [];
	
	/*
	*
	*	Public Methods
	*
	*/
	
	/** Create a new system with a set of images **/
	this.create = function(parent_id, defval, options) {
		if (!defval) defval = 0;
		if (!options) options = {};
		
		// If an array was given, create the element for each parent
		if (typeof parent_id == 'object') {
			for (var i = 0; i<parent_id.length; i++)
				_RatingScales.push(new _StarRatingScale(parent_id[i], defval, options));
		} else {
			_RatingScales.push(new _StarRatingScale(parent_id, defval, options));
		}
	};
	
	/** Get the current star image sources being used **/
	this.getStarImage = function(source) { return _starImages[source]; };
	
	/** Sets the scale's stars' images **/
	this.setStars = function(star, status) {
		star.src = _starImages[status];
		var imsp = star.parentNode;
		while (imsp = imsp.previousSibling)
			imsp.firstChild.src = _starImages[status];
		imsp = star.parentNode;
		while (imsp = imsp.nextSibling)
			imsp.firstChild.src = _starImages.off;
	};
	

	/**************************************************************************
	*
	*	PRIVATE StarRatingScale Object
	*
	**************************************************************************/
	
var _StarRatingScale = function(parent, defval, options) {

	/*
	*
	*	Scale Construction
	*
	*/
	
	var std_css = 'position;relative;background:none;margin:0;padding:0;filter:none;opacity:1;border:none;vertical-align:top;text-align:left';
	var ats_css = std_css + 'width:'+_starSize[0]+'px;height:'+_starSize[1]+'px;display:inline;line-height:'+_starSize[1]+'px;padding:0;margin:0;';
	
	var parentNode = document.getElementById(parent);
	var wrapper = document.createElement('div');
	wrapper.className = 'StarRatingScale_WrapperDiv_Class';
	wrapper.style.cssText = 'width:'+(_starSize[0]*5)+'px;height:'+(_starSize[1])+
		'px;' + std_css;
	
	if (typeof options.input == 'undefined') {
		var _inputField = document.createElement('input');
		_inputField.type = 'hidden';
		_inputField.name = (typeof options.inputName != 'undefined')
			? options.inputName : parent + '_rating';
		_inputField.value = defval;
		parentNode.appendChild(_inputField);
	} else {
		var _inputField = document.getElementById(options.input);
		if (!_inputField.value) _inputField.value = 0;
		var defval = parseInt(_inputField.value);
	}
	
	for (var i=0; i<_maxStars; i++) {
		var input = document.createElement('a');
		input.href = '#';
		
		var img = (i < defval) ? _starImages.on : _starImages.off;
		var value = (typeof options.starVals == 'undefined') ? (i+1) 
			: options.starVals[i];
		
		input.innerHTML = '<img src="' + img + '" title="' + (i+1) + ' Star" '
			+ 'alt="' + value + '" style="'+ats_css+'"/>';
		input.style.cssText = ats_css;
		
		input.onmouseover = function() {
			__TSRtSyS.setStars(this.firstChild, 'mouseover');
		};
		input.onclick = function(event) {
			__TSRtSyS.setStars(this.firstChild, 'on');
			_inputField.value = this.firstChild.alt;
			if (window.event)
				window.event.returnValue = false;
			else event.preventDefault();
		};
		wrapper.appendChild(input);
	}
	
	wrapper.onmouseout = function() {
		for (var i=0; i<this.childNodes.length; i++) {
			var src = (i < _inputField.value) ? 'on' : 'off';
			this.childNodes[i].firstChild.src = __TSRtSyS.getStarImage(src);
		}
	};
	
	parentNode.appendChild(wrapper);
};


};
