var aa_url = '/cgi-bin/mt/mt-cp.cgi';

var originalClass;
var ratingContainers;

function initAboveAverage() {
	setupRatingContainers();
	mtUpdateRatings();
}

function setupRatingContainers() {
	ratingContainers = YAHOO.util.Dom.getElementsByClassName('rating-yours');
	for (var i in ratingContainers) {
		YAHOO.util.Event.addListener(ratingContainers[i], 'mouseover', saveClass, ratingContainers[i]);
	}
}

function saveClass(ev, el) {
	originalClass = YAHOO.util.Dom.getAttribute(el, 'className');
	YAHOO.util.Event.addListener(el, 'mousemove', renderChooser, el);
	YAHOO.util.Event.addListener(el, 'mouseout', restoreClass, el);
}

function restoreClass(ev, el) {
	YAHOO.util.Dom.setAttribute(el,'className',originalClass);
	YAHOO.util.Event.removeListener(el, 'mousemove');
	YAHOO.util.Event.removeListener(el, 'mouseout');
}

function renderChooser(ev, el){
	var mtUser = mtGetUser();
	if (!mt.blog.allowAnonymousRating == 1 && !(mtUser && mtUser.is_authenticated)) {
		YAHOO.util.Event.removeListener(el,'click');
		YAHOO.util.Event.addListener(el, 'click', noAnonymousRating);
		return false;
	}
	var MousePointerDivX = YAHOO.util.Event.getXY(ev)[0] - YAHOO.util.Dom.getX(el);

	// carve off everything but the last 65px
	MousePointerDivX -= (el.offsetWidth - 65);

	// Remove existing listener
	YAHOO.util.Event.removeListener(el, 'click');
	
	switch (Math.ceil(MousePointerDivX/13)) {
		case 1:
			YAHOO.util.Dom.setAttribute(el,'className','rating-yours rating-one');
			YAHOO.util.Event.addListener(el, 'click', mtRate, new Array(1,el));			
			break;
		case 2:
			YAHOO.util.Dom.setAttribute(el,'className','rating-yours rating-two');
			YAHOO.util.Event.addListener(el, 'click', mtRate, new Array(2,el));
			break;

		case 3:
			YAHOO.util.Dom.setAttribute(el,'className','rating-yours rating-three');
			YAHOO.util.Event.addListener(el, 'click', mtRate, new Array(3,el));
			break;

		case 4:
			YAHOO.util.Dom.setAttribute(el,'className','rating-yours rating-four');
			YAHOO.util.Event.addListener(el, 'click', mtRate, new Array(4,el));
			break;

		case 5:
			YAHOO.util.Dom.setAttribute(el,'className','rating-yours rating-five');
			YAHOO.util.Event.addListener(el, 'click', mtRate, new Array(5,el));
			break;

		default: 
			YAHOO.util.Dom.setAttribute(el,'className','rating-yours rating-zero');
	}
}

function mtRate(ev, args) {
	var rating = args[0];
	var el = args[1];
	
	// get the item's ID
	var objectId = el.id.replace(/rating-yours-/,"");
	
	// remove all the listeners until we come back
	YAHOO.util.Event.removeListener(el, 'click');
	YAHOO.util.Event.removeListener(el, 'mouseout');
	YAHOO.util.Event.removeListener(el, 'mousemove');
	YAHOO.util.Event.removeListener(el, 'mouseover');
	
	// set spinner
	YAHOO.util.Dom.setAttribute(el, 'className', 'rating-pending');

	// submit rating
	var xh = mtGetXmlHttp();
	if (!xh) return false;
	
	xh.open('POST', aa_url, true);
	
	xh.onreadystatechange = function() {
        if ( xh.readyState == 4 ) {
            if ( xh.status && ( xh.status != 200 ) ) {
                // error - ignore
            } else {
                eval(xh.responseText);
            }
        }
    };
    xh.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    xh.send( '__mode=rate&blog_id='+mt.blog.id+'&f=scored,avg&jsonp=mtRate_cb&id=' + objectId + '&value=' + rating);
    return false;
}

function mtRate_refresh_cb(response) {
	mtRate_cb(response);
	document.location.reload();
}

function mtRate_cb(response) {
	
	if (response['error']) {
		alert ("An error occurred: " + response['error']);
	}
	
	for (var id in response) {
		var currentRatingDiv = YAHOO.util.Dom.get('rating-current-' + id);
		var yourRatingDiv = YAHOO.util.Dom.get('rating-yours-' + id);
		
		switch (response[id].scored) { 
			case 1:
				YAHOO.util.Dom.setAttribute(yourRatingDiv, 'className', 'rating-yours rating-one');
				break;
			
			case 2:
				YAHOO.util.Dom.setAttribute(yourRatingDiv, 'className', 'rating-yours rating-two');
				break;

			case 3:
				YAHOO.util.Dom.setAttribute(yourRatingDiv, 'className', 'rating-yours rating-three');
				break;
			
			case 4:
				YAHOO.util.Dom.setAttribute(yourRatingDiv, 'className', 'rating-yours rating-four');
				break;
			
			case 5:
				YAHOO.util.Dom.setAttribute(yourRatingDiv, 'className', 'rating-yours rating-five');
				break;
			
			default: 
				YAHOO.util.Dom.setAttribute(yourRatingDiv, 'className', 'rating-yours rating-zero');

			}
			
		// figure out the nearest .5
		var currentRating = response[id].avg;
		var half;
		currentRating = Math.floor(currentRating*10);
		currentRatingWhole = Math.floor(currentRating/10);
		currentRatingRemainder = currentRating%10;
		if (currentRatingRemainder > 4) {
			half = 'half';
		} else {
			half = '';
		}
		
		switch (currentRatingWhole) {
			case 0:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-zero' + half);
				break;

			case 1:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-one' + half);
				break;

			case 2:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-two' + half);
				break;

			case 3:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-three' + half);
				break;

			case 4:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-four' + half);
				break;
				
			case 5:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-five');
				break;
			
			default:
				YAHOO.util.Dom.setAttribute(currentRatingDiv, 'className', 'rating-current rating-zero');
				break;		
		}
	YAHOO.util.Event.addListener(yourRatingDiv, 'mouseover', saveClass, yourRatingDiv);	
	}	
}

function mtUpdateRatings() {
    var entry_ids = '';
    var scores = YAHOO.util.Dom.getElementsByClassName("rating-container");
    for (var i = 0; i < scores.length; i++) {
        var id = scores[i].id;
        id = id.replace(/^rating-container-/, '');
        if (entry_ids != '') entry_ids += ",";
        entry_ids += id;
		
		var el = YAHOO.util.Dom.get('rating-yours-' + id);
		// remove all the listeners until we come back
		YAHOO.util.Event.removeListener(el, 'click');
		YAHOO.util.Event.removeListener(el, 'mouseout');
		YAHOO.util.Event.removeListener(el, 'mousemove');
		YAHOO.util.Event.removeListener(el, 'mouseover');
		YAHOO.util.Dom.setAttribute(el, 'className', 'rating-pending');
    }
    if (entry_ids == '') return false;

    var xh = mtGetXmlHttp();
    if (!xh) return false;

    xh.open('POST', aa_url, true);
    xh.onreadystatechange = function() {
        if ( xh.readyState == 4 ) {
            if ( xh.status && ( xh.status != 200 ) ) {
                // error - ignore
            } else {
                eval(xh.responseText);
            }
        }
    };
    xh.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    xh.send( '__mode=score&blog_id='+mt.blog.id+'&f=scored,avg&jsonp=mtRate_cb&id=' + entry_ids);
    return false;
}

YAHOO.util.Event.onDOMReady(initAboveAverage);
