﻿function setGradeBg(el, grade)
    {
        if(grade <= 10)
            el.style.backgroundColor = "#ffe9e9";
        else if(grade >= 90)
            el.style.backgroundColor = "#e9ffeb";
        else
            el.style.backgroundColor = "#ffffff";
    }
    
function disableSelection(element) {
    element.onselectstart = function() {
        return false;
    };
    element.unselectable = "on";
    element.style.MozUserSelect = "none";
}
    
    function onGradeSucceded(response, arg, userId)
    {
       if(userId == anonymousID)
        {
            showAlert("Za ocjenjivanje postova potrebno se ulogirati.");
            setInitGrade();
            return;
        }
       if(response.isValid)
       {
            if(!response.isModerator)
            {
                var ucHid = $get("hidUC" + arg[0].toString());
                var newUC = parseInt(ucHid.value) + 1;
                ucHid.value = newUC.toString();
                if(newUC > 1)
                {
                    arg[3].style.backgroundColor = "#dcdcdc";
                    arg[3].parentNode.title  = arg[3].title = arg[2].title = "Već ste iskoristili maksimalne dvije promjene ocjene na ovoj poruci.";
                }
            }
                
            initialGrade = arg[1];
            arg[2].style.background = "url('" + httpRoot + "img/ratingBarSliderRated2.gif') no-repeat left top;";
            
            var ug = $get("ug" + arg[0].toString());
            var mg = $get("mg" + arg[0].toString());
            
            if(response.UsersGrade == null)
                ug.innerHTML = "-";
            else
            {
                ug.innerHTML = response.UsersGrade.toString() + "%"; 
                setGradeBg(ug.parentNode, response.UsersGrade);    
            }
                
            if(response.ModeratorsGrade == null)
                mg.innerHTML = "-";
            else
            {
                mg.innerHTML = response.ModeratorsGrade.toString() + "%";        
                setGradeBg(mg.parentNode, response.ModeratorsGrade);
            }  
            
            getGradeBgTimer().set_enabled(true);  
            
        }   
        else
        {
            if(arg[2] && arg[3])
            {
                arg[3].style.width = initialGrade.toString() + 'px';
                arg[2].innerHTML = initialGrade.toString() + '%';
            }
            
            Array.add(invalidSlidersArray, arg[2].id);
            alert24();
           
            
        }
    }
    
    function setGrade(postID, grade, currSlider, currPSlider)
    {
        $get("slider" + postID.toString()).style.background = "url('" + httpRoot + "img/ratingBarSlider.gif') no-repeat left top;";        
        new MPortal.ForumPost(postID).AddPostGrade([new MPortal.User(currUserID), grade], onGradeSucceded, onSliderFailed, [postID, grade, currSlider, currPSlider]);
    }
    
    function onSliderFailed(response,args,userId)
    {
        if(userId == anonymousID)
        {
            showAlert("Za ocjenjivanje postova potrebno se ulogirati.");
            setInitGrade();
            return;
        }
        onFailure(response,args,userId);
    }
    
    function sliderDown(args)
    {
          
        if(Array.contains(invalidSlidersArray, args.target.id))
        {
              alert24();
              return;
        }
        
        currY =  args.clientY;
        

        initialGrade = parseInt(args.target.innerHTML);
        currSlider = args.target;
        
        
        
        currPSlider = args.target.parentNode;//$get("parent" + args.target.id);
       
                
        if(parseInt($get("hidUC" + args.target.id.replace("slider","")).value) < 2)
            $addHandler(document, 'mousemove', onMouseMove);
    }
    
    
    function getSliderX()
    {
        var loc = Sys.UI.DomElement.getLocation(slidersArray[0].parentNode.parentNode);
        
        var posx = loc.x;
	    posx = posx + document.body.scrollLeft
		    + document.documentElement.scrollLeft;
    
       
       return posx;
    }
    
    function onMouseMove(args)
    {

        if(currY)
        {
            if(args.clientY > currY && (args.clientY - currY > 30))
            {
                setInitGrade();
                return;
            }
            else if(args.clientY < currY && (currY - args.clientY > 30))
            {
                setInitGrade();
                return;
            }
        }
        
        var w = args.clientX - getSliderX();

        if(w > 100)
        {
            w = 100;
        }
                    
        if(w < 0)
        {
            w = 0;  
        }
        
        if(w < -10 && w > 110)
          if(hasEvent(document, 'mousemove'))
            $removeHandler(document, 'mousemove', onMouseMove);
        
        if(currPSlider && currSlider)
        {
            currPSlider.style.width = w.toString() + 'px';
            currSlider.innerHTML = w.toString() + "%";
        }
        else
        {
          setInitGrade();
        }
        
    }
    
    
    function sliderUp(args)
    {
    
        var sliderX = getSliderX();
        
        if(args.clientX > sliderX + 110 || args.clientX < sliderX)
          {
             setInitGrade();
             return;
          }
          
          
            
        if(hasEvent(document, 'mousemove'))
                $removeHandler(document, 'mousemove', onMouseMove);
        
        if(args.target.id.startsWith("ratingBar") 
            || args.target.id.startsWith("parentslider") )
        {
            var postID;
            
            if(args.target.id.startsWith("ratingBar"))
                postID = parseInt(args.target.id.replace("ratingBar",""));
            else if(args.target.id.startsWith("parentslider"))
                postID = parseInt(args.target.id.replace("parentslider",""));

            if(parseInt($get("hidUC" + postID).value) < 2)
            {
                var grade = args.clientX - sliderX; //;
            
                if(grade > 100) grade = 100;
                
                if(grade < 1) 
                {
                    setInitGrade();
                    return;
                }
                
                var sl = $get("slider" + postID.toString());
                var psl = $get("parentslider" + postID.toString());
                
                if(Array.contains(invalidSlidersArray, sl.id))
                {
                    alert24();
                    return;
                }
        
                psl.style.width = grade.toString() + 'px';
                sl.innerHTML = grade.toString() + "%";
                
                setGrade(postID, grade, sl, psl);
            }
            return;
        }
        
        if(!args.target.id.startsWith("slider"))
        {
            if(hasEvent(document, 'mousemove'))
                $removeHandler(document, 'mousemove', onMouseMove);
            return;
        }
        
        
        var slider = args.target;
        
        if(Array.contains(invalidSlidersArray, slider.id))
            {
                alert24();
                return;
            }
        
        if(parseInt($get("hidUC" + slider.id.replace("slider","")).value) >= 2)
                return;
            
        if(args.clientX > sliderX + 100)
        {
            slider.parentNode.style.width = '100px';
            slider.innerHTML = "100%";
        }
        else
        {   
            var w = args.clientX - sliderX;
            if(w < 1)
                w = 1;    
                
            slider.parentNode.style.width = w.toString() + 'px';
            slider.innerHTML = w.toString() + '%';
        }
        var grade = args.clientX - sliderX;
        if(grade > 100)
            grade = 100;
        
        if(grade > 0)    
            setGrade(parseInt(slider.id.replace("slider","")), grade, slider, slider.parentNode);
        else
        {
             setInitGrade();
             return;
        }
        
        if(hasEvent(document, 'mousemove'))
            $removeHandler(document, 'mousemove', onMouseMove);
            
        currSlider = null;
        currPSlider = null;
        
    }   
    
    function selectStart()
    {
        return false;
    }
     
    function setSliders()
    {
    
        if(!isAnonymous())
        {
            $addHandler(document, 'mouseup', sliderUp);
        
            setSlidersArray();
            
            for(var gIndex in slidersArray)
            {
                if(slidersArray[gIndex])
                {
                    $addHandler(slidersArray[gIndex], 'selectstart', selectStart);
                    $addHandler(slidersArray[gIndex], 'mousedown', sliderDown);
                    disableSelection(slidersArray[gIndex]);
                    
                    slidersArray[gIndex].parentNode.parentNode.title = 
                        slidersArray[gIndex].parentNode.title = 
                            slidersArray[gIndex].title = 
                                parseInt($get("hidUC" + slidersArray[gIndex].id.replace("slider","")).value) >= 2 ? "Već ste iskoristili maksimalne dvije promjene ocjene na ovoj poruci." : "Kliknite da dodjelite ocjenu poruke.";
                }
            }
        }
     
    }
    
    function getGradeBgTimer()
    {
        if(!gradeBgTimer)
        {
            gradeBgTimer = new Sys.Timer();
            gradeBgTimer.set_interval(2000);
            gradeBgTimer.add_tick(gradeBgTimerTicked)
        
        }
        
        return gradeBgTimer;
    }
   
    
    function gradeBgTimerTicked()
    {
        for(var gIndex in slidersArray)
            slidersArray[gIndex].style.background = "url('" + httpRoot + "img/ratingBarSlider.gif') no-repeat left top;";
            
        getGradeBgTimer().set_enabled(false);
    }
    
    function  setInitGrade()
    {
        if(currPSlider && currSlider)
        {
            currPSlider.style.width = initialGrade.toString() + 'px';
            currSlider.innerHTML = initialGrade.toString() + '%';
            
            if(hasEvent(document, 'mousemove'))
                $removeHandler(document, 'mousemove', onMouseMove);
        }
    }
   
   function alert24()
   {
        alert("Ne možete ocijeniti postove istog korisnika više od tri puta u 24 sata.");
   } 
    
    function clearSliders()
    {
        if(hasEvent(document, 'mouseup'))  
            $removeHandler(document, 'mouseup', sliderUp);
         
        if(hasEvent(document, 'mousemove'))
            $removeHandler(document, 'mousemove', onMouseMove);
            
        for(var gIndex in slidersArray)
                $clearHandlers(slidersArray[gIndex]);
    }
    
    var invalidSlidersArray = [];
    var slidersArray = null;
    var currY = null;
    var currSlider = null;
    var currPSlider = null;
    var initialGrade = null;
    var gradeBgTimer = null;
    
    Sys.Application.add_load(setSliders);
    Sys.Application.add_unload(clearSliders);   
    
    if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
