window.addEvent('domready',function(){
	setupRateThis(document.getElementById('rateThis'));

	$$('div.widget div.rating').each(function(item){
		var details, ratekind, title;

		details = item.id.split('-');
		title = item.getAttribute('rel');

		if((details.length === 2) && title){
			if(details[0] === 'r'){
				ratekind = 'Resource';
			}else{
				ratekind = 'Collection';
			}
			setupEvents(item, ratekind, details[1], title);
		}
	});
});

function setupRateThis(rate){
	if(rate){
		rate.innerHTML='Rate this:';
		$('rateThis').addClass('ratelbl');

		var ratekind = '';
		var rateid = 0;

		if($('commenttype2')) ratekind=$('commenttype2').value;
		if(ratekind=='' && $('commenttype1')) ratekind=$('commenttype1').value;
		if($('entityid2')) rateid=$('entityid2').value;
		if(rateid!=0 && $('entityid1')) rateid=$('entityid1').value;

		if(ratekind.toLowerCase()=='collection') ratekind='Collection';
		if(ratekind.toLowerCase()=='resource') ratekind='Resource';

		setupEvents($$('.rating')[0], ratekind, rateid, rate.get('rel'));
	}else{
		var $rating = $$('.rating');
		if($rating && $rating[0]){
			$rating[0].style.cursor = 'default';
		}
	}
}

function setupEvents($rateElement, ratekind, rateid, title){
	$rateElement.addEvents({
		'mousemove':function(e){
			var mousex=0;
			if(e.event.offsetX){
				//branch 1
				mousex = e.event.offsetX;
			}else if(e.event.pageX){
				//branch 2
//				mousex = e.event.pageX - $rateElement.offsetLeft;
				mousex = e.event.pageX - $rateElement.getLeft();
			}else{
				//give up
				return false;
			}

			if(mousex<0)mousex=0;
			if(mousex>100)mousex=100;
			var stars=Math.ceil((mousex-3)/20);
			$rateElement.className = $rateElement.className.replace(/\shoverrating[0-5]/gi,'') + ' hoverrating' + stars;
		},
		'mouseout':function(e){
			$rateElement.className = $rateElement.className.replace(/\shoverrating[0-5]/gi,'');
		},
		'click':function(e){
			var mousex=0;
			if(e.event.offsetX){
				//branch 1
				mousex = e.event.offsetX;
			}else if(e.event.pageX){
				//branch 2
//				mousex = e.event.pageX - $rateElement.offsetLeft;
				mousex = e.event.pageX - $rateElement.getLeft();
			}else{
				//give up
				return false;
			}

			if(mousex<0)mousex=0;
			if(mousex>100)mousex=100;
			var stars=Math.ceil((mousex-3)/20);
			$rateElement.className = $rateElement.className.replace(/\suserrating[0-5]/gi,'') + ' userrating' + stars;

			//gather data for submitting

			if(ratekind!='' && rateid!=0){
				if(ratekind=='Collection'){
					rpc.invoke('rate' + ratekind,{'collectionId':rateid, 'rating':stars},function(callback){});
				}else{
					rpc.invoke('rate' + ratekind,{'resourceId':rateid, 'rating':stars},function(callback){});
				}
				_gaq.push(['_trackEvent', ratekind, 'Star rating - '+stars, title]);
			}else{
				alert('An error was encountered when submitting your rating. Your rating has not been saved. Please refresh the page and try again.');
			}
		}
	});
}
