﻿/***************************************************************
*      Openv.Rating                                            *
*                                                              *
* File Name:  rating.js                                        *
* Written by:  L.Rain                                          *
* Version 1.2 (MSIE 6.0 above,Firefox3.0)                      *
* Created Date: 2009-01-14                                     *
* Modified Date: 2009-02-22                                     *
* Copyright：2006-2009 Openv.com Inc. All rights reserved.     *
****************************************************************/
/*****
* Demo:
*   var rating_option = {
*     pid : 12456,		  //视频id
*     star_img : "http://img.openv.tv/hd/images/xing.jpg",  //星图片地址
*     score_color : "#66AE3D" ,   //分数显示的颜色
*     score_size: 18 ,            //分数显示的大小 ( 默认单位为px )
*     font_color: "#999" ,        //文字现在的颜色
*     rating_xpostion: -202 ,     //星在背景图片的 postion X轴位置  ( 默认单位为px )
*     rating_ypostion: -24 ,      //星在背景图片的 postion Y轴位置
*     rating_starwidth : 20 ,      //星的宽度
*     rating_starheight : 23      //星的高度
*  }
*****/
var rating = {
    isRating: false,
    rankClass: "rank",
    timer: '',
    init: function(){
        jQuery("a", "#ratingstar").each(function(){
            var t = $(this);
            t.mousemove(function(event){
                rating.showRank(event)
            }).mouseout(function(){
                rating.clearRank();
            }).click(function(){
                rating.setRank();
                return false;
            });
        })
    },
    getRating: function( s ){
        var rank = this.format(s);
        $("#ratingmsg").html("<strong>" + rank + "</strong>分");
        $("#rank").html(rank + "分").removeClass().addClass("rank" + (rank * 10));
        $("#rating").show();
    },
    showRank: function( event ){
        if (this.timer) 
            clearTimeout(this.timer);
        if (this.isRating) {
            $("#ratingmsg").html("您已经参加了评分!");
            return;
        }
        var e = event || window.event;
        e.pageX = e.pageX || e.clientX + document.documentElement.scrollLeft ;
        var len = e.pageX - this.fetchOffset($("#ratingstar")[0]).left;
        var b = parseInt(len / 10 + 1) * 5;
        var rankclass = this.rankClass + b;
        var msg;
        switch (Math.ceil(b / 10)) {
            case 1: msg = "很差"; break;
            case 2: msg = "一般"; break;
            case 3: msg = "值得一看"; break;
            case 4: msg = "相当不错"; break;
            case 5: msg = "棒极了"; break
        }
        $("#ratingmsg").html(msg);
        $("#rank").removeClass().addClass(rankclass);
    },
    clearRank: function(){
        rating.timer = window.setTimeout(function(){
            if (!rating.isRating) {
                $("#ratingmsg").html(' <strong> ' + parseFloat($("#rank").text()) + '</strong>分 ');
                $("#rank").removeClass().addClass("rank" + (parseFloat($("#rank").text()) * 10));
            } else {
                $("#ratingmsg").html(' <strong> ' + (($("#rank")[0].className.match(/\d+/)[0]) / 10) + '</strong>分 ');
            }
        }, 300);
    },
    setRank: function(){
        if (!rating.isRating) {
            var c = $("#rank")[0].className.match(/\d+/)[0];
            var s = Math.ceil(c / 10);
            $.getJSON('http://www.openv.com/play/playstat_manage.php?callback=?&pid=' + rating_option.pid + '&ac=set&t=grade&v=' + s, function(data){
                var pcount = parseInt(data.grade);
                if (pcount) {
                    $("#ratingmsg").html('谢谢您的参与!');
                    $("#rank").removeClass().addClass("rank" + c);
                    rating.isRating = true;
                } else {
                    throw new Error("datebase connection error!!");
                }
            });
        }
    },
    fetchOffset: function(obj){
        var left_offset = obj.offsetLeft;
        var top_offset = obj.offsetTop;
        while ((obj = obj.offsetParent) != null) {
            left_offset += obj.offsetLeft;
            top_offset += obj.offsetTop;
        }
        return { 'left': left_offset,'top': top_offset };
    },
    format: function(s){
        var num = 0, endnum = 0;
        if (s) {
            num = Math.floor(s);
            endnum = parseInt(s * 10 - num * 10);
            if (endnum != 0) {
                if (endnum >= 1 && endnum <= 5) {
                    endnum = 5;
                } else {
                    num++;
                    endnum = 0;
                }
            }
        }
        return num + endnum / 10;
    },
    getVal: function(opt, defaultValue){
        return (typeof opt == 'undefined') ? defaultValue : opt;
    }
};
rating.rating_imghref = rating.getVal(rating_option.star_img, 'http://img.openv.tv/hd/images/hd_xing.jpg');
rating.rating_numcolor = rating.getVal(rating_option.score_color, '#66AE3D');
rating.rating_numsize = rating.getVal(rating_option.score_size, '18');
rating.rating_color = rating.getVal(rating_option.font_color, '#999');
rating.rating_xpostion = rating.getVal(rating_option.fullstar_postion, '-202');
rating.rating_ypostion = rating.getVal(rating_option.fullstar_postion, '-24');
rating.rating_starwidth = rating.getVal(rating_option.rating_starwidth, '20');
rating.rating_starheight = rating.getVal(rating_option.rating_starheight, '23');
var output = '<style type="text/css">\
#rating { font-size:12px;color:'+rating.rating_color+';float:right;display:none }\
#rating span{ margin:0pt 2px;line-height:23px;height:23px;float:left; }\
#rating span strong{ font-size:'+rating.rating_numsize+'px;color:'+rating.rating_numcolor+';font-weight:normal; }\
#rating #ratingmsg { margin-top:-1px; }\
#rating #ratingstar *{ background:transparent url('+rating.rating_imghref+') no-repeat scroll 0pt 0pt; height:20px ; width:98px;text-indent:-3000px;overflow:hidden;display:block}\
#rating #ratingstar a,#rating #ratingstar a:hover{ text-decoration:none;outline:none; }\
#rating #ratingstar .rank0 { background-position: '+ rating.rating_xpostion +'px '+ rating.rating_ypostion +'px }\
#rating #ratingstar .rank5 { background-position: '+ ( parseInt(rating.rating_xpostion) + parseInt(rating.rating_starwidth) ) +'px '+ rating.rating_ypostion +'px }\
#rating #ratingstar .rank10 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth) ) +'px '+ ( parseInt(rating.rating_ypostion)+ parseInt(rating.rating_starheight) ) +'px }\
#rating #ratingstar .rank15 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*2 ) +'px '+ rating.rating_ypostion +'px }\
#rating #ratingstar .rank20 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*2 ) +'px '+ ( parseInt(rating.rating_ypostion)+ parseInt(rating.rating_starheight) ) +'px }\
#rating #ratingstar .rank25 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*3 ) +'px '+ rating.rating_ypostion +'px }\
#rating #ratingstar .rank30 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*3 ) +'px '+ ( parseInt(rating.rating_ypostion)+ parseInt(rating.rating_starheight) ) +'px }\
#rating #ratingstar .rank35 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*4 ) +'px '+ rating.rating_ypostion +'px }\
#rating #ratingstar .rank40 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*4 ) +'px '+ ( parseInt(rating.rating_ypostion)+ parseInt(rating.rating_starheight) ) +'px }\
#rating #ratingstar .rank45 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*5 ) +'px '+ rating.rating_ypostion +'px }\
#rating #ratingstar .rank50 { background-position: '+ ( parseInt(rating.rating_xpostion)+ parseInt(rating.rating_starwidth)*5 ) +'px '+ ( parseInt(rating.rating_ypostion)+ parseInt(rating.rating_starheight) ) +'px }\
</style>\
<div id="rating">\
       <span id="ratingmsg">\
       </span>\
       <span id="ratingstar">\
          <a id="rank" href="#" hidefocus="true"></a>\
       </span>\
    </div>';
document.write(output);
rating.init();