var ratingdenominator=10
var onstarimage="http://"+window.location.hostname+"/js/rating_images/staryellow.gif"
var halfstarimage="http://"+window.location.hostname+"/js/rating_images/staryellowhalf.gif"
var offstarimage="http://"+window.location.hostname+"/js/rating_images/stargray.gif"
var ratingscripturl="http://"+window.location.hostname+"/js/rating_images/rateit.php"


function createAjaxObj(){
	var httprequest=false
	if (window.XMLHttpRequest){ // if Mozilla, Safari etc
		httprequest=new XMLHttpRequest()
		if (httprequest.overrideMimeType)httprequest.overrideMimeType('text/xml')
	}
	else if (window.ActiveXObject){ // if IE
		try {
			httprequest=new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e){
			try{
				httprequest=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e){}
		}
	}
	return httprequest
}


function faderoutine(id){
	this.fadediv=document.getElementById(id);
	this.fadeupvalue=0.2 //initial fade value when gradually fading up, if non specified via param
	this.fadedownvalue=1 //initial fade value when gradually fading down, if non specified via param
}

faderoutine.prototype.fadeTo=function(amount){
	if (this.fadediv.filters && this.fadediv.filters[0])
	this.fadediv.filters[0].opacity=amount*100
	else if (typeof this.fadediv.style.MozOpacity!="undefined")
	this.fadediv.style.MozOpacity=amount
}

faderoutine.prototype.gradualFadeUp=function(initialamount){
	if (typeof initialamount!="undefined")this.fadeupvalue=initialamount
	var faderinstance=this
	if (this.fadeupvalue<1){
		this.fadeupvalue+=0.1
		this.fadeTo(this.fadeupvalue)
		setTimeout(function(){faderinstance.gradualFadeUp()}, 100)
	}
}

faderoutine.prototype.gradualFadeDown=function(initialamount){
	if (typeof initialamount!="undefined")this.fadedownvalue=initialamount
	var faderinstance=this
	if (this.fadedownvalue>0){
		this.fadedownvalue-=0.1
		this.fadeTo(this.fadedownvalue)
		setTimeout(function(){faderinstance.gradualFadeDown()}, 100)
	}
}








function formatscore(num, d){ //remove any leading 0s and format number to be of specified denominator
	var d=(typeof d=="undefined" || d<=0)? 100 : d
	var formatted=parseInt(num.toString().replace(/^0+/, "")) //remove any leading 00s and trailing "%" signs
	formatted=(formatted>0)? Math.round(formatted*d/100*10)/10 : 0 //round score/d to 1 decimal places
	return formatted //return score
}

var prefix=1;
function rateit(id, votes, avgscore, right){
  this.cid=id;
	this.id=id;
	this.totalvotes=(votes=="")? 0 : votes;
	this.avgscore=avgscore;
  this.right=right;
  this.prefix='star'+prefix;
  prefix++;
  this.xid=this.prefix+'_ratecontainer_'+this.id;
}

rateit.prototype.displaytext=function(tester){
	var formatavgscore=formatscore(this.avgscore, ratingdenominator) //Format avgscore from percentage to designated unit
	if (tester=="inclusion") //if function being invoked as part of displayrating() or votes>0
		document.write('<br /><span class="scoreinfo"><b>'+formatavgscore+'/'+ratingdenominator+'</b> от <b>'+this.totalvotes+'</b> гласували</span><br /><div class="tipmessage"></div>');
	else if (parseInt(tester)>0) //more than 1 vote
		document.write("<span class='scoreinfoalt' title='от "+ratingdenominator
		+". Общ брой гласове: "+this.totalvotes
		+"><b>'+formatavgscore+'</b></span>");
}

rateit.prototype.displayrating=function(){
	document.write('<div class="starcontainer" cid="'+this.cid+'" id="'+this.xid+'" right="'+this.right+'" rel="'+this.totalvotes+'">') //store total votes in "rel" attr
	var formatavgscore=formatscore(this.avgscore, ratingdenominator) //Format avgscore from percentage to designated unit
	var halfstarcheck=(formatavgscore-Math.floor(formatavgscore))>=0.5? 1 : 0
	for (var i=1; i<ratingdenominator+1; i++){
		if (formatavgscore>=i) //display star?
			document.write('<img id="'+i+'::on" src="'+onstarimage+'" class="starclass" title="Оценете с '+i+' от общо '+ratingdenominator+'" />')
		else if (Math.floor(formatavgscore)+1==i && halfstarcheck)
			document.write('<img id="'+i+'::half" src="'+halfstarimage+'" class="starclass" title="Оценете с '+i+' от общо '+ratingdenominator+'" />')
		else
			document.write('<img id="'+i+'::off" src="'+offstarimage+'" class="starclass" title="Оценете с '+i+' от общо '+ratingdenominator+'" />')
	} //end loop

	this.displaytext("inclusion")
	document.write('</div>')

	document.getElementById(this.xid).onmouseover=rateit.selectrating
	document.getElementById(this.xid).onmouseout=rateit.selectrating
	var instanceOfTicker=this
	//new function(){instanceOfTicker.countrating()}
	document.getElementById(this.xid).onclick=rateit.countrating
}

rateit.selectrating=function(e){
	var evtobj=window.event? window.event: e
	var evttarget=window.event? window.event.srcElement : e.target
	var ratingimages=this.getElementsByTagName("img")
	if (evttarget.tagName=="IMG"){
		this.getElementsByTagName("div")[0].style.visibility=(evtobj.type=="mouseover")? "visible" : "hidden"
		this.getElementsByTagName("div")[0].innerHTML=(evtobj.type=="mouseover")? evttarget.getAttribute("title") : ""
		for (var i=1; i<ratingdenominator+1; i++){
			if (evtobj.type=="mouseover")
				ratingimages[i-1].src=(parseInt(ratingimages[i-1].id)<=parseInt(evttarget.id))? onstarimage : offstarimage
			else if (evtobj.type=="mouseout")
				ratingimages[i-1].src=(ratingimages[i-1].id.indexOf("on")!=-1)? onstarimage : (ratingimages[i-1].id.indexOf("half")!=-1)? halfstarimage : offstarimage
		}
	}
}

rateit.confirmrating=function(e){
	var evttarget=window.event? window.event.srcElement : e.target
}

rateit.countrating=function(e){ //function to count/update rating onClick
	var evttarget=window.event? window.event.srcElement : e.target
	if (evttarget.tagName.toUpperCase()=="IMG"){
		var rateitemid=parseInt(this.getAttribute("cid")); //actual ID of rated item
		var score=parseInt(evttarget.getAttribute("id"))/ratingdenominator;
		score=Math.round(score*100); //Unit is percentage (ie: 60%)
		var ajaxobj=createAjaxObj()
		if (ajaxobj){
			var parameters=	
        "rating="+score+
        "&"+"bustcache="+new Date().getTime()+
        "&"+"id="+rateitemid+
        "&"+"right="+this.getAttribute('right')+
        ""
			;
      var xid=this.id;
      ajaxurl=ratingscripturl+"?"+parameters;
			ajaxobj.onreadystatechange=function(){
             rateit.updaterating(ajaxobj, rateitemid, score, xid);
      }
			ajaxobj.open('POST', ajaxurl, true)
			ajaxobj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			ajaxobj.setRequestHeader("Content-length", parameters.length);
			ajaxobj.setRequestHeader("Connection", "close");
			ajaxobj.send(parameters);			
		}
	}
}

rateit.updaterating=function(ajaxinstance, itemid, score, xid){ //function to count/update rating onClick
	var ratecontainer=document.getElementById(xid)
	var ratingimages=ratecontainer.getElementsByTagName("img")
	var fader=new faderoutine(xid);fader.fadeTo(0.2);
	ratecontainer.onmouseover=null;ratecontainer.onmouseout=null;ratecontainer.onclick=null;
	if (ajaxinstance.readyState == 4){ //if request of file completed
		if (ajaxinstance.status==200){
			var xmldata=ajaxinstance.responseXML;
			if (xmldata.getElementsByTagName("latestscore").length==0){ //if error getting latest avgscore
				fader.gradualFadeUp(0.2);	alert(ajaxinstance.responseText);	return
			}
			var totalvotes=xmldata.getElementsByTagName("totalvotes")[0].firstChild.nodeValue;
			var avgscore=xmldata.getElementsByTagName("avgscore")[0].firstChild.nodeValue;
			var votedcheck=xmldata.getElementsByTagName("voted")[0].firstChild.nodeValue;
			var msg=xmldata.getElementsByTagName("msg")[0].firstChild.nodeValue;
			var right=xmldata.getElementsByTagName("right")[0].firstChild.nodeValue;  // just for test ...

			avgscore=formatscore(avgscore, ratingdenominator) //format score from "098%" to score/ratingdenominator
			var halfstarcheck=(avgscore-Math.floor(avgscore))>=0.5? 1 : 0
			for (var i=1; i<ratingdenominator+1; i++){
				ratingimages[i-1].src=(avgscore>=i)? onstarimage : (Math.floor(avgscore)+1==i && halfstarcheck)? halfstarimage : offstarimage;
				ratingimages[i-1].className="";
			}
			ratecontainer.getElementsByTagName("span")[0].innerHTML="<b>"+avgscore+"/"+ratingdenominator+"</b> от <b>"+totalvotes+"</b> гласували.  <br/><small>("+msg+")</small>";
			if (votedcheck=="yes")	alert("Вашия глас не бе записан, понеже вече сте гласували веднъж!");
			ratecontainer.removeChild(ratecontainer.getElementsByTagName("div")[0]); //remove tip message div
			fader.gradualFadeUp(0.2)
		}
	}
}

