var EMPTY_STAR_IMG = 'stars/empty2.gif';
var FULL_STAR_IMG  = 'stars/full2.gif';
var HALF_STAR_IMG  = 'stars/half2.gif';
var COLOR_STAR_IMG  = 'stars/colored2.gif';
var NUM_STARS      = 5;
var SAVING_MSG     = 'Saving...';
var SAVED_MSG      = 'Vote registered thanks.';
var ERROR_MSG      = 'Error!';
var WAIT_MSG      = 'You already voted.';
var VOTE_MESSAGES  = new Array('Poor',
                               'OK',
                               'Good',
                               'Very Good',
                               'Excellent');

var can_vote      = new Array();
var ajax_req      = null;
var ajax_req_id	  = 0;
var preloaded     = new Array();


function star_init() {
    // Preload star images...
    var urls = new Array(EMPTY_STAR_IMG, FULL_STAR_IMG, HALF_STAR_IMG);
    for (var i = 0; i < urls.length; i++) {
        preloaded[i] = new Image();
        preloaded[i].src = urls[i];
    }

   for (var j=1;j<=num_videos;j++) {
	can_vote[j]=true;
	star_out(j);
   }
}


function star_over(id,score) {
    if (!can_vote[id])
        return;

    fill_stars(id,score,true);
    set_vote_msg(id,VOTE_MESSAGES[score - 1]);
}

function star_out(id) {
    if (!can_vote[id])
        return;

    fill_stars(id,avg_score[id],false);	
    set_vote_msg(id,num_votes[id] + ' vote' + (1 != num_votes[id] ? 's' : '') );
}

function star_click(id, score) {
  
    if (!can_vote[id] || ajax_req != null)
        return;

    // Internet Explorer.
    var objs = new Array('Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0',
                         'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP');
    for (var i = 0; !ajax_req && i < objs.length; i++) {
        try {
            ajax_req = new ActiveXObject(objs[i]);
        } catch (e) {
            ajax_req = null;
        }
    }

    // ICEbrowser.
    if (!ajax_req && 'undefined' != typeof(window.createRequest))
        ajax_req = window.createRequest();

    // Firefox and other standard browsers.
    if (!ajax_req && 'undefined' != typeof(XMLHttpRequest))
        ajax_req = new XMLHttpRequest();

    if (!ajax_req)
        return;

    can_vote[id] = false;
    set_vote_msg(id,SAVING_MSG);

    ajax_req.open('GET', 'vote_ajax.php?t_id=' + escape(idmap[id]) + '&score=' + escape(score), true);
    ajax_req_id=id;
    ajax_req.onreadystatechange = req_change;
    ajax_req.send(null);

}


function fill_stars(id,score,colored) {
    if ('undefined' == typeof(document.images))
        return;

    var delta = NUM_STARS / (NUM_STARS * 2 + 1);
    var pos = 0;
    for (var i = 1; i <= NUM_STARS; i++) {
        var src = EMPTY_STAR_IMG;
        pos += delta;
        if (avg_score[id] > pos)
            src = HALF_STAR_IMG;
        pos += delta;
        if (avg_score[id] > pos)
            src = FULL_STAR_IMG;
	
	if (score > pos)
	    src = (colored ? COLOR_STAR_IMG : FULL_STAR_IMG);

        document.images['star' + id + '_' + i].src = src;
    }
}

function set_vote_msg(id,msg) {
    if ('undefined' == typeof(document.images))
        return;

    var vs = document.getElementById('msg' + id);
    if (vs)
        vs.innerHTML = msg;
}


function req_change() {
    if (4 != ajax_req.readyState) {
        return;
    }

    if (200 != ajax_req.status || -1 != ajax_req.responseText.indexOf('ERROR')) {
        set_vote_msg(ajax_req_id,ERROR_MSG);
	ajax_req=null;
        return;
    }

    if (-1 != ajax_req.responseText.indexOf('WAIT')) {
    	fill_stars(ajax_req_id,avg_score[ajax_req_id],false);
        set_vote_msg(ajax_req_id,WAIT_MSG);
		ajax_req=null;
        return;
    }

    ajax_req=null;
    set_vote_msg(ajax_req_id,SAVED_MSG);
}
