// to allow tabbing to objects in mac mozilla enter the following
// about:config
// edit accessibility.tabfocus set the value 7


var agt   = navigator.userAgent.toLowerCase();
var mac   = agt.indexOf("mac") != -1;
var macIe = mac && document.all;

var gYOUR_RATING ='Tu recomendación: ';
var gDEFAULT_TEXT ='Recomiendalo: ';


if (!document.getElementById && document.all)
	document.getElementById = function(id)
	{
		return document.all[id];
	}

function starImg(val)
{

       if (val <=  0) num = "zero";
  else if (val <   1) num = "half";
  else if (val < 1.5) num = "one";
  else if (val <   2) num = "onehalf";
  else if (val < 2.5) num = "two";
  else if (val <   3) num = "twohalf";
  else if (val < 3.5) num = "three";
  else if (val <   4) num = "threehalf";
  else if (val < 4.5) num = "four";  
  else if (val <   5) num = "fourhalf";
  else if (val >=  5) num = "five";  

  return "http://us.i1.yimg.com/us.yimg.com/i/us/ls/gr/star_red" + num + "16_3.gif";
}

String.prototype.pluralize = function(count, plural)
{
  if (plural == null)
    plural = this + 's';
	
  return (count == 1 ? this : plural)
}

function setRating(rating, votes, avg)
{
  vt = document.getElementById("numvotes");
  vt.innerHTML = votes + " " + String("voto").pluralize(votes,"votos");

  // round to one digit
  avg = Math.round(avg * 10) / 10;

  stars = document.getElementById("ratestars");
  stars.alt = avg + String(" star").pluralize(avg);
  stars.src = starImg(avg);

  for (i = 1; i <= 5; i++)
  {
    radio = document.getElementById("rater1_rater_input0radio" + i);

    if (i == rating)
      radio.checked = true;
    else
      radio.checked = false;
  }
}


function initRatings(formName)
{
	if (!document.getElementById) return;
	if (document.styleSheets) 
	{
		if (document.styleSheets[0].disabled) return;
	}
	var i=0; 
	var forms = document.getElementsByName(formName);
	var form = (forms) ? forms[0] : null;
	if (!form) return false;
	while (i >=0)
	{
		var sInputName = formName + '_rater_input' + i;
		var oInputs = document.getElementsByName(sInputName);
		if (oInputs[0])
		{
			if (oInputs[0].nodeName =='SELECT')	gatherSelectAttributes(oInputs[0], formName);
			else if (oInputs[0].nodeName =='INPUT' && oInputs[0].type == 'radio') gatherRadioAttributes(oInputs, formName);
			i++;
		}
		else i = -1;
	}
}

function gatherRadioAttributes(pRadios, pForm)
{
	var curSelectedIndex = -1;
	var nRadioLength = pRadios.length;
	var oRadioContainer = pRadios[0].parentNode.parentNode;
	
	var oLegend = oRadioContainer.getElementsByTagName('LEGEND');
	var defaultText =  (oLegend[0]) ? oLegend[0].innerHTML : '';
	var oRadioValuesLabels = new Array();
	var inputName = pRadios[0].name;
	var className = pRadios[0].className;	
	for (var i = 0 ; i < nRadioLength ; i++)
	{
		var oCurRadio = pRadios[i];
		var radioValueLength =oRadioValuesLabels.length;
		oRadioValuesLabels[radioValueLength] = new Array();
		var curRadioValues =oRadioValuesLabels[radioValueLength] 
		curRadioValues['value'] =  (oCurRadio.value) ? oCurRadio.value : i;
		if (!macIe)	curRadioValues['label'] =  (oCurRadio.nextSibling.data) ? oCurRadio.nextSibling.data : gDEFAULT_TEXT;
		else curRadioValues['label'] =  (oCurRadio.parentNode.innerText) ? oCurRadio.parentNode.innerText : gDEFAULT_TEXT;
		if (oCurRadio.checked) curSelectedIndex = i;
	}
	var appendTo = oRadioContainer.parentNode;
	appendTo.removeChild(oRadioContainer);
	createRater(inputName,appendTo, oRadioValuesLabels, curSelectedIndex, className, defaultText , pForm);	
}


function gatherSelectAttributes(pInput , pForm)
{	
	var oInputOptions = pInput.getElementsByTagName('OPTION');
	var curSelectedIndex = -1;
	var defaultText = '';
	var nInputOptionLength = oInputOptions.length;
	var oOptionValuesLabels = new Array();
	var inputName = pInput.name;
	var className = pInput.className;
	for (var i = 0 ; i < nInputOptionLength ; i++)
	{

		var oCurOption = oInputOptions[i];
		if (oCurOption.value != -1)
		{
			var optionValueLength =oOptionValuesLabels.length;
			oOptionValuesLabels[optionValueLength] = new Array();
			var curOptionValues =oOptionValuesLabels[optionValueLength] 
			curOptionValues['value'] =  (oCurOption.value) ? oCurOption.value : i;
			curOptionValues['label'] =  (oCurOption.innerHTML) ? oCurOption.innerHTML : "";
			if (oCurOption.selected) curSelectedIndex = i-1;
		}
		else defaultText = (oCurOption.innerHTML) ? oCurOption.innerHTML : gDEFAULT_TEXT;
	}
	var appendTo = pInput.parentNode;
	appendTo.removeChild(pInput);
	createRater(inputName,appendTo, oOptionValuesLabels, curSelectedIndex, className, defaultText , pForm);
}

function createRater(pName, pAppendTo, pOptionValuesLabels, pCurSelectedIndex, pClassName, pDefaultText , pForm)
{
	
	var oContainer = document.createElement('DIV');
	oContainer.className = pClassName;
	oContainer.id = pName+'_container';
	oContainer.labelsValues = pOptionValuesLabels;
	oContainer.selectedIndex = pCurSelectedIndex;
	oContainer.formId = pForm;
	var nElemsToAdd = pOptionValuesLabels.length;
	var textP = document.createElement('P');
	textP.id = pName+ '_text';
	/*var	hiddenField;
	if (!macIe) 
	{
		hiddenField = document.createElement('INPUT');
		hiddenField.type = 'hidden';
	}
	else hiddenField = document.createElement('<INPUT type="hidden">');
	
	hiddenField.name = pName;
	hiddenField.id = pName;*/
	
	textP.innerHTML = ( pCurSelectedIndex >=0 ) ? gYOUR_RATING : pDefaultText;
	
	oContainer.textElemId = textP.id;
	oContainer.appendChild(textP);
	oContainer.defaultText = pDefaultText;
	var oElements = new Array();
	
	for ( var i = 0; i < nElemsToAdd; i++ )
	{
		var oElem = document.createElement('A');
		oElem.href="#";
		
		oElem.onmouseover = raterMouseOver;
		oElem.onfocus = raterMouseOver;
		oElem.onmouseout = raterMouseOut;
		oElem.onblur = raterMouseOut;		
		oElem.onclick = raterClick;
		oElem.containerId = oContainer.id;		
		oElem.index = i;
		var className = ''
		if (pCurSelectedIndex != -1 && i <= pCurSelectedIndex)
		{
				className = 'selected';
				
		}
		var separator = (className != '') ? ' ' : '';
		var classNamePrefix = (i%2) ? 'odd'+separator : 'even'+separator;

		oElem.className = classNamePrefix + className;
		oContainer.appendChild(oElem);
		oElements[oElements.length] = oElem;
	}
	
		
	//hiddenField.value = pCurSelectedIndex;
	
	//oContainer.hiddenFieldId = hiddenField.id ;
	oContainer.ratingElements = oElements;
	//oContainer.appendChild(hiddenField);

	var clearDiv = document.createElement('DIV');
	clearDiv.className = 'clr';

	oContainer.appendChild(clearDiv);
	pAppendTo.appendChild(oContainer);
	
}


function raterMouseOver()
{
	var container = document.getElementById(this.containerId);
	var elements = container.getElementsByTagName('A');
	var numElements = elements.length;
	for (var i = 0; i < numElements; i++)
	{
		var curElem = elements[i];
		var selectedIndex  =  container.selectedIndex;
		var className = '';
		if ( selectedIndex > -1)
		{
			if (i <= selectedIndex && i <= this.index ) className = 'selectedover';
			else if (i <= selectedIndex &&  i > this.index) className = 'selectedless';
			else if (i > selectedIndex && i <= this.index) className = 'over';
			else if ( i > selectedIndex && i > this.index ) className = '';
		}
		else 
		{
			if (i <= this.index) className ='over'
		}
		var separator = (className != '') ? ' ' : '';
		var classNamePrefix = (i%2) ? 'odd'+separator : 'even'+separator;
		curElem.className = classNamePrefix + className;
	}
	var textElem = document.getElementById(container.textElemId);
	textElem.innerHTML = container.labelsValues[this.index]['label'];
}

function raterMouseOut()
{
	var container = document.getElementById(this.containerId);
	var elements = container.getElementsByTagName('A');
	var numElements = elements.length;
	for (var i = 0; i < numElements; i++)
	{
		var curElem = elements[i];
		var selectedIndex  =  container.selectedIndex;
		var className = (selectedIndex != -1 && selectedIndex >= i) ? 'selected' : '';
		var separator = (className != '') ? ' ' : '';
		var classNamePrefix = (i%2) ? 'odd'+separator : 'even'+separator;
		curElem.className = classNamePrefix + className;
	}
	var textElem = document.getElementById(container.textElemId);
	textElem.innerHTML = (container.selectedIndex > -1) ? gYOUR_RATING  : container.defaultText;
}

function raterClick()
{
	var container = document.getElementById(this.containerId);
	var elements = container.getElementsByTagName('A');
	var numElements = elements.length;
	for (var i = 0; i < numElements; i++)
	{
		var curElem = elements[i];
		var className = (i <= this.index) ? 'selectedover' : '';
		var separator = (className != '') ? ' ' : '';
		var classNamePrefix = (i%2) ? 'odd'+separator : 'even'+separator;
		curElem.className = classNamePrefix + className;
		container.selectedIndex =this.index;		
	}
	var textElem = document.getElementById(container.textElemId);
	
	textElem.innerHTML = (container.selectedIndex != -1) ? gYOUR_RATING : container.defaultText;		
	var hiddenField = document.getElementById('rate');
	hiddenField.value = container.labelsValues[container.selectedIndex]['value'];
	
	var thisform = document.getElementById(container.formId);
	thisform.submit();	
	return false;
}
