/**
 * Javascript Content Rating Component
 *
 */

var ratingComponent = function(){
    
    var debug        = false;
        
    var log = function(data){
        if(debug){
            console.log(data);
        }
    }
        
    return{
        
        setDebug: function(enable){
            debug = enable;
        },
        
        log : function(message){
            log(message);
        },
        
        // called when user mouses over a specific rating star
        showRank : function(el, rank){
            log('showRank: ' + rank);
            var element = $(el);

            // check if this component has already been ranked
            if(! element.parent().hasClass('ranked')){
                
                // clear all siblings
                element.siblings().andSelf().removeClass('active').removeClass('selected');
                
                // update all previous siblings and self
                element.prevAll().andSelf().addClass('selected');
                
            }else{
                log('already ranked');
            }
            
        },
        
        // called when user mouses out of a rating star
        resetRank : function(el, rank){
            log('resetRank: ' + rank);
            
            var element = $(el);
            
            // check if this component has already been ranked
            if(! element.parent().hasClass('ranked')){
                // clear all siblings
                element.siblings().andSelf().removeClass('active').removeClass('selected');
                
                // update proper # of siblings to be active
                element.parent().children(':lt(' + rank + ')').addClass('active');
            }else{
                log('already ranked');
            }
            
        },
        
        // called when user clicks on a rating star
        setRank : function(el, rank, content_id){
            log('setRank: ' + rank);
            
            // verify that user is logged in
            if(typeof userId == 'undefined'){
                
                if(typeof modalComponent != 'undefined'){
                    modalComponent.showLoggedOutError();
                }else{
                    alert('You must be logged in to do that.');
                }
                return;
            }
            
            var element = $(el);
            
            // set parent as ranked
            element.parent().addClass('ranked');
            
            // clear all siblings
            element.siblings().andSelf().removeClass('active').removeClass('selected');
            
            // update proper # of siblings to be selected
            element.parent().children(':lt(' + rank + ')').addClass('selected');
            
            // make Ajax call to set rank
            $.ajax({
                url: baseUrl + '/index/rank/set-rank',
                type : "POST",
                data: {
                    rank       : rank,
                    content_id : content_id
                }
            });
            
        }
        
    }
}();
