//-----------------------------------------------------
//--- [MOD] Ajax Star Rating ----------(c)-by Bash-T---
//----------------------------------------------V1.1---
function submitRatingRequest(frm) {
	var imgId = frm.id.value;
	try
	{
		var ajax_rating_rate = YAHOO.util.Dom.get('ajax_rating_rate'+imgId);
	}
	catch(err)
	{
		var ajax_rating_rate = null;
	}
	try
	{
		var ajax_rating_count = YAHOO.util.Dom.get('ajax_rating_count'+imgId);
	}
	catch(err)
	{
		var ajax_rating_count = null;
	}
	var rating_msg = YAHOO.util.Dom.get('star_rating_msg'+imgId);
	var stars = YAHOO.util.Dom.getElementsByClassName("star", "ul", frm)[0]; //the ul-Element
	var rating_value = YAHOO.util.Dom.getFirstChild(stars); //the li-Element

	var handleSuccess = function(o){
		if(o.responseText !== undefined){
			var response = YAHOO.lang.JSON.parse(o.responseText);
			var rating = parseFloat(response.Result.rating);
			rating_msg.innerHTML = YAHOO.rating.star.msgs[response.Result.msgKey];
			rating_value.title = rating;
			YAHOO.rating.star.revert(stars);
			
			if(ajax_rating_count!=null){
				ajax_rating_count.innerHTML = response.Result.votes;
			}
			if(ajax_rating_rate!=null){
				ajax_rating_rate.innerHTML = rating;
			}
			if(response.Result.successfully_voted == 1)
			{
				YAHOO.rating.star.successfully_voted = ((YAHOO.rating.star.successfully_voted) ? YAHOO.rating.star.successfully_voted + "|" : "") + imgId;
				YAHOO.util.Dom.setStyle(stars , "cursor" , "default" );
			}
		}
	};

	var handleFailure = function(o){
	};
	
	var callback = {
	  success:handleSuccess,
	  failure:handleFailure
	};

	YAHOO.util.Connect.setForm(frm);
	YAHOO.util.Connect.asyncRequest("POST", "ajaxrating.php", callback);
}


function $(v,o) { return((typeof(o)=='object'?o:document).getElementById(v)); }
function $S(o) { return((typeof(o)=='object'?o:$(o)).style); }
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function abPos(o) { var o=(typeof(o)=='object'?o:$(o)), z={X:0,Y:0}; while(o!=null) { z.X+=o.offsetLeft; z.Y+=o.offsetTop; o=o.offsetParent; }; return(z); }
function XY(e,v) { var o=agent('msie')?{'X':event.clientX+document.body.scrollLeft,'Y':event.clientY+document.body.scrollTop}:{'X':e.pageX,'Y':e.pageY}; return(v?o[v]:o); }


YAHOO.rating.star.mouse=function(e,o) {
	if((YAHOO.rating.star.stop || isNaN(YAHOO.rating.star.stop)) 
		&& !YAHOO.rating.star.already_voted(o)) { 
		YAHOO.rating.star.stop=0;
		document.onmousemove=function(e) { 
			YAHOO.rating.star.num=o.id.substr(4);
			var n=YAHOO.rating.star.num;
			var pos=abPos($('star'+n)), 
				x=XY(e), 
				oX=x.X-pos.X, 
				oY=x.Y-pos.Y; 
				

			if(oX<1 || oX>84 || oY<0 || oY>19) { 
				YAHOO.rating.star.stop=1; YAHOO.rating.star.revert(o); 
			}
			
			else {
				$S('starCur'+n).width=oX+'px';
				$S('starUser'+n).color='#111';
				var p = Math.round(oX/84*100); //percent
				YAHOO.util.Dom.setAttribute($('starUser'+n), "percent", p);
				
				if(YAHOO.rating.star.display_percentage) {
					$('starUser'+n).innerHTML=percent+'%';
				}
				
				if(YAHOO.rating.star.display_lables) {
					var l = YAHOO.rating.star.labels;
					YAHOO.util.Dom.get('star_rating_label'+n).innerHTML = (p>=1&&p<=20)?l[1]:(p>=21&&p<=40)?l[2]:(p>=41&&p<=60)?l[3]:(p>=61&&p<=80)?l[4]:(p>=81&&p<=100)?l[5]:'';
				}
			}
		};
	} 
};

YAHOO.rating.star.update=function(e,o) {
	if(!YAHOO.rating.star.already_voted(o))
	{
	 YAHOO.rating.star.num=o.id.substr(4);
	 var n=YAHOO.rating.star.num, 
		 v=parseInt(YAHOO.util.Dom.getAttribute($('starUser'+n), "percent"));
		 n=o.id.substr(4); 
		 targetForm = document.getElementById('ajax_rate_form'+n);
		 factor = parseFloat('0.05');
		 rating = 1+v*factor-factor;
		 targetForm.rating.value = rating;
		 submitRatingRequest(targetForm);
		 YAHOO.rating.star.stop=undefined;
	}
};

YAHOO.rating.star.revert=function(o) { 
	YAHOO.rating.star.num=o.id.substr(4);
	var n=YAHOO.rating.star.num, 
	v=parseFloat($('starCur'+n).title);
	factor = parseFloat('0.05');
	percent = (v>0)? (v+factor-1)/factor : 0;

	$S('starCur'+n).width=Math.round(percent*84/100)+'px';
	if(YAHOO.rating.star.display_percentage) {
		$('starUser'+n).innerHTML=(percent>0?Math.round(percent)+'%':'');
	}
	$('starUser'+n).percent=(percent>0?Math.round(percent):'');
	$('starUser'+n).style.color='#888';
	
	if(YAHOO.rating.star.display_lables) {
		YAHOO.util.Dom.get('star_rating_label'+n).innerHTML=(percent==0)?YAHOO.rating.star.labels[0]:'';
	}
	
	document.onmousemove='';
};

YAHOO.rating.star.already_voted = function(o) {
	if(YAHOO.rating.star.successfully_voted) {
		arr = YAHOO.rating.star.successfully_voted.split("|");
	}
	else{
		return false;
	}
	for(p=0;p<arr.length;p++) if (o.id.substr(4) == arr[p]) return true;
	return false;
}

YAHOO.util.Event.onDOMReady(function() {
	ratingElements = YAHOO.util.Dom.getElementsByClassName( "star" , "ul");
	for(i=0;i<ratingElements.length;i++) {
		YAHOO.rating.star.revert(ratingElements[i]);
	}
});
