$(document).ready(function(){
	//To rate articles
	var freeze = 0; //hover ON
	var clickable = 0; //click ON
    loadEvents();
});

function setStarsImages(bkey, avg_rating) {
    var max_rating = 5;
    var i = 0;
    for (i = 1; i <= max_rating; i++) {
        var sel = 'img#' + 'star_' + i + '_' + bkey ;
        if (i <= avg_rating) {
            $(sel).attr('src', '/images/stars/rating_on.gif');
        }
        else {
            if (i == Math.ceil(avg_rating)) {
                $(sel).attr('src', '/images/stars/rating_half.gif');
            }
            else {
                $(sel).attr('src', '/images/stars/rating_off.gif');
            }
        }
    }
}

function setVote(bkey, usr_rating, num_ratings, avg_rating) {
    var total = Math.round(num_ratings * avg_rating + parseInt(usr_rating));
    num_ratings++;
    avg_rating = Math.round((total / num_ratings) * 100) / 100; // round to the nearest hudredth
    setStarsImages(bkey, avg_rating);
    updateRatingText(bkey, num_ratings, avg_rating);
    if ($('span#ratings_' + bkey + '_text')) {
        $('span#ratings_' + bkey + '_text').css('display', 'none');
        $('span#ratings_' + bkey + '_text').html('');
    }
	var ratingTime = new Date;
    setRateCookie(ratingTime, 2, usr_rating, bkey, num_ratings, avg_rating);
}

function updateRatingText(bkey, num_ratings, avg_rating) {
    $('span#summary-' + bkey).html('(<strong>' + num_ratings + '</strong> votes, average: <strong>' + avg_rating + '<strong> out of 5)')
}

function setRateCookie(time, days, vote, key_rate, num_ratings, avg_rating) {
	var total_rate = num_ratings;
	var avg_rate = avg_rating;
	var exdate = new Date();
	var content = '<trating>' + total_rate + '</trating><time>' + time + '</time><vote>' + vote + '</vote><arating>' + avg_rate + '</arating>';
	exdate.setDate(exdate.getDate()+ (days || 3)); // default to 3 days 
	document.cookie='comment'+ key_rate + 'rating' + "=" +escape(content)+ ";expires="+exdate.toUTCString();
}
	
function getRateCookie(key_rate) {
	value = '';
	if (document.cookie.length > 0) {
		var c_start = document.cookie.indexOf('comment' + key_rate + 'rating' + "=");
		if (c_start != -1) {
			c_start = c_start + ('comment' + key_rate + 'rating').length + 1;
			var c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) {
				c_end = document.cookie.length;
            }
			value = unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return value;
}

function loadEvents() {
    $('.rating-stars').each(function(){
        $.data(this, 'freeze', 0);
        $.data(this, 'clickable', 0);
        var id_arr = $(this).attr('id').split('-');
        var key_rate = id_arr[1];
        var content_vote = getRateCookie(key_rate);
        if(content_vote != '') {
            $.data(this, 'freeze', 1);
            $.data(this, 'clickable', 1);
            var val = new Array();
            var tags = new Array("trating", "time", "vote", "arating");
            for (var i=0; i<tags.length; i++) {
                var startTag = '<' + tags[i] + '>';
                var start = content_vote.indexOf(startTag) + startTag.length;
                val[i] = content_vote.substr(start, content_vote.indexOf('</' + tags[i] + '>') - start);
            }
            trating = val[0];
            ratingTime = new Date(val[1]);
            vote = val[2];
            arating = val[3];
            setStarsImages(key_rate, arating);
            updateRatingText(key_rate, trating, arating);
        }
    });

    $('.rating-stars img.rate').live('click', function() {
        var id_arr = $(this).attr('id').split('_');
        var bkey = id_arr[2];
        var star = id_arr[1];
        var tot_rating = $('input#tot-' + bkey).val();
        var avg_rating = $('input#avg-' + bkey).val();
        var span_elem = $(this).parent().get(0);
        if ($.data(span_elem, 'clickable') == 0){
            $.data(span_elem, 'clickable', 1);
            var clicked_data = {
                "key_rate" : bkey,
                "clicked_on" : star
            };
            $.ajax({
                type:'POST',
                url: "/comment/articleRating",
                data: clicked_data,
                success: function(info){
                            setVote(bkey, info, tot_rating, avg_rating);
                            $.data(span_elem, 'freeze', 1);
                         },
                error:   function(){
                            $.data(span_elem, 'clickable', 0);
                         }
            });
        }
    });

    $('.rating-stars img.rate').live('mouseover', function(){
        if($.data($(this).parent().get(0), 'freeze') == 0) {
            var id_arr = $(this).attr('id').split('_');
            var bkey = id_arr[2];
            var star = id_arr[1];
            var rating_text = (star == 1) ? star + ' Star' : star + ' Stars';
            var i = 0;
            for(i = 1; i <= star; i++) {
                var sel = 'img#' + 'star_' + i + '_' + bkey;
                $(sel).attr('src', '/images/stars/rating_over.gif');
            }
            if($('span#ratings_' + bkey + '_text')) {
                $('span#ratings_' + bkey + '_text').css('display', 'inline');
                $('span#ratings_' + bkey + '_text').html(rating_text);
            }
        }
    });

    $('.rating-stars img.rate').live('mouseout', function(){
        if ($.data($(this).parent().get(0), 'freeze') == 0) {
            var id_arr = $(this).attr('id').split('_');
            var bkey = id_arr[2];
            var star = id_arr[1];
            var rating = $('#' + 'avg-' + bkey).attr('value');
            setStarsImages(bkey, rating);
            if ($('span#ratings_' + bkey + '_text')) {
                $('span#ratings_' + bkey + '_text').css('display', 'none');
                $('span#ratings_' + bkey + '_text').html('');
            }
        }
    });
}
