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("rate_im"+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){
testObj=document.getElementById(this.fadediv.id);
value=amount;
testObj.style.opacity = value/10;
testObj.style.filter = 'alpha(opacity=' + value*10 + ')';
}
faderoutine.prototype.gradualFadeUp=function(initialamount){
if (typeof initialamount!="undefined")
this.fadeupvalue=initialamount
var faderinstance=this
if (this.fadeupvalue<11){
this.fadeupvalue+=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)
}
}
var ratingdenominator=5
var ratingscripturl="http://www.sghi.info/GL/rate_it.php" //var ratingscripturl="http://www.sghi.info/GL/rate_it.php"

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 basenames=new Array;
var onstarimage=new Array;
var halfstarimage=new Array
var offstarimage=new Array
var halfstarcheck=new Array;
function rateit(id, votes, avgscore,base,stars){
this.id=id
this.totalvotes=(votes=="")? 0 : votes
this.avgscore=avgscore
basenames[id]=base;
onstarimage[this.id]=stars[0]
halfstarimage[this.id]=stars[1]
offstarimage[this.id]=stars[2]
}

rateit.prototype.displaytext=function(tester){
//~ alert(this.avgscore);
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
itemid=this.id;
var sp_avgscore=document.getElementById("rate_av"+itemid);
sp_avgscore.innerHTML=formatavgscore;
var sp_fromsc=document.getElementById("rate_fr"+itemid);
sp_fromsc.innerHTML=ratingdenominator;
var sp_votesnm=document.getElementById("rate_nm"+itemid);
sp_votesnm.innerHTML=this.totalvotes;
}
else if (parseInt(tester)>0) //more than 1 vote
document.write('<span class="scoreinfoalt" title="out of 5. Total votes: '+this.totalvotes+'"><b>'+formatavgscore+'</b></span>')
}

rateit.prototype.displayrating=function(){
var formatavgscore=formatscore(this.avgscore, ratingdenominator) //Format avgscore from percentage to designated unit
var halfstarcheck=(formatavgscore-Math.floor(formatavgscore))>=0.5? 1 : 0
var imgs="";
for (var i=1; i<ratingdenominator+1; i++){
strtitle="Îöåíèòü íà "+i+" èç "+ratingdenominator;
if (formatavgscore>=i) //display star?
imgs+='<img id="'+i+'::on" src="'+onstarimage[this.id]+'" class="starclass" title="'+strtitle+'" alt="'+this.id+'" />'
else if (Math.floor(formatavgscore)+1==i && halfstarcheck)
imgs+='<img id="'+i+'::half" src="'+halfstarimage[this.id]+'" class="starclass" title="'+strtitle+'" alt="'+this.id+'"  />'
else
imgs+='<img id="'+i+'::off" src="'+offstarimage[this.id]+'" class="starclass" title="'+strtitle+'"  alt="'+this.id+'" />'
} //end loop
var sp_votesnm1=document.getElementById("rate_im"+this.id);
sp_votesnm1.innerHTML=imgs;
sp_votesnm1.onmouseover=rateit.selectrating
sp_votesnm1.onmouseout=rateit.selectrating
var instanceOfTicker=this
sp_votesnm1.onclick=rateit.countrating;
this.displaytext("inclusion")
}

rateit.selectrating=function(e){
var evtobj=window.event? window.event: e
var evttarget=window.event? window.event.srcElement : e.target
var itemid=this.id.replace("rate_im", "")
var ratingimages=this.getElementsByTagName("img")
if (evttarget.tagName=="IMG"){
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[itemid] : offstarimage[itemid]
else if (evtobj.type=="mouseout")
ratingimages[i-1].src=(ratingimages[i-1].id.indexOf("on")!=-1)? onstarimage[itemid] : (ratingimages[i-1].id.indexOf("half")!=-1)? halfstarimage[itemid] : offstarimage[itemid]
}
}
}

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=this.id.replace("rate_im", "")//actual ID of rated item
var basenum=this.basename
var score=parseInt(evttarget.getAttribute("id"))/ratingdenominator
score=Math.round(score*100) //Unit is percentage (ie: 60%)
var ajaxobj=createAjaxObj()
if (ajaxobj){
var parameters="torate=1&codewords="+rateitemid+"&rating="+score+"&bustcache="+new Date().getTime()+"&RATE_BASE="+basenames[rateitemid]
ajaxobj.onreadystatechange=function(){rateit.updaterating(ajaxobj, rateitemid, score)}
ajaxobj.open('GET', ratingscripturl+"?"+parameters, true)
ajaxobj.send(null)
}
}
}

rateit.updaterating=function(ajaxinstance, itemid, score){ //function to count/update rating onClick
var ratecontainer=document.getElementById("rate_im"+itemid)
var ratingimages=document.getElementById("rate_im"+itemid).getElementsByTagName("img")
var fader=new faderoutine(itemid)
fader.fadeTo(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
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
avgscore=formatscore(avgscore, ratingdenominator) //format score from "098%" to score/ratingdenominator
//~ alert(avgscore);
halfstarcheck[itemid]=(avgscore-Math.floor(avgscore))>=0.5? 1 : 0
for (var i=1; i<ratingdenominator+1; i++){
imga=(avgscore>=i)? onstarimage[itemid] : ((Math.floor(avgscore)+1==i) && halfstarcheck[itemid])? halfstarimage[itemid] : offstarimage[itemid];
ratingimages[i-1].src=imga;
ratingimages[i-1].className=""
}
sp_avgscore=document.getElementById("rate_av"+itemid);
sp_avgscore.innerHTML=avgscore;
sp_fromsc=document.getElementById("rate_fr"+itemid);
sp_fromsc.innerHTML=ratingdenominator;
sp_votesnm=document.getElementById("rate_nm"+itemid);
sp_votesnm.innerHTML=totalvotes;
fader.gradualFadeUp(2)
if (votedcheck=="yes")
alert("Âàø ãîëîñ íå çàïèñàí, ïîòîìó ÷òî âû óæå ãîëîñîâàëè!")
}
}
}