﻿/// <reference name="MicrosoftAjax.js"/>
/// <reference path="../client_scripts/generic.js"/>

Sys.Application.add_load(prepareRater);
Sys.Application.add_unload(unprepareRater);

var smileys;
var messageSpan;

function unprepareRater()
{
    $clearHandlers(smileys.one);
    $clearHandlers(smileys.two);
    $clearHandlers(smileys.three);
    $clearHandlers(smileys.four);
    $clearHandlers(smileys.five);
    $clearHandlers(smileys.six);
}

function prepareRater()
{
    var rater = $get("rater");
    messageSpan = rater.getElementsByTagName("span")[0];
    
    var smileyAnchorTags = rater.getElementsByTagName("a");
    if (!smileyAnchorTags) return false;
    
    smileys =
    {
        one: smileyAnchorTags[0]
        , two: smileyAnchorTags[1]
        , three: smileyAnchorTags[2]
        , four: smileyAnchorTags[3]
        , five: smileyAnchorTags[4]
        , six: smileyAnchorTags[5]
    };
    
    $addHandler
    (
        smileys.one, "mouseover", function(domEvent)
        {
            showHoverEffects(true, false, false, false, false, false, "Aweful");
        }
    );
    
    $addHandler
    (
        smileys.two, "mouseover", function()
        {
            showHoverEffects(true, true, false, false, false, false, "Bad");
        }
    );
    
    $addHandler
    (
        smileys.three, "mouseover", function()
        {
            showHoverEffects(true, true, true, false, false, false, "So So");
        }
    );
    
    $addHandler
    (
        smileys.four, "mouseover", function()
        {
            showHoverEffects(true, true, true, true, false, false, "Good");
        }
    );
    
    $addHandler
    (
        smileys.five, "mouseover", function()
        {
            showHoverEffects(true, true, true, true, true, false, "Great");
        }
    );
    
    $addHandler
    (
        smileys.six, "mouseover", function()
        {
            showHoverEffects(true, true, true, true, true, true, "Excellent");
        }
    );
    
    $addHandler(smileys.one, "mouseout", hideHoverEffects);
    $addHandler(smileys.two, "mouseout", hideHoverEffects);
    $addHandler(smileys.three, "mouseout", hideHoverEffects);
    $addHandler(smileys.four, "mouseout", hideHoverEffects);
    $addHandler(smileys.five, "mouseout", hideHoverEffects);
    $addHandler(smileys.six, "mouseout", hideHoverEffects);
    
    $addHandler(smileys.one, "click", processRating);
    $addHandler(smileys.two, "click", processRating);
    $addHandler(smileys.three, "click", processRating);
    $addHandler(smileys.four, "click", processRating);
    $addHandler(smileys.five, "click", processRating);
    $addHandler(smileys.six, "click", processRating);
    
    smileys.one.ratingValue = 1;
    smileys.two.ratingValue = 2;
    smileys.three.ratingValue = 3;
    smileys.four.ratingValue = 4;
    smileys.five.ratingValue = 5;
    smileys.six.ratingValue = 6;
}

function processRating(domEvent)
{
    if (!domEvent.target.locked)
    {
        ShingoTamura.Shingokko.Services.RatingService.RatePieceOfWork
        (
            BlogPostVariables.PieceOfWorkId
            , BlogPostVariables.IpAddress
            , domEvent.target.ratingValue
            , onSuccess
            , onFailure
        );
    }
    
    smileys.one.locked 
    = smileys.two.locked 
    = smileys.three.locked 
    = smileys.four.locked 
    = smileys.five.locked 
    = smileys.six.locked 
    = true;
    
    $clearHandlers(smileys.one);
    $clearHandlers(smileys.two);
    $clearHandlers(smileys.three);
    $clearHandlers(smileys.four);
    $clearHandlers(smileys.five);
    $clearHandlers(smileys.six);
    
    domEvent.preventDefault();
}

function showHoverEffects(one, two, three, four, five, six, message)
{
    showHideHoverEffect(smileys.one, one);
    showHideHoverEffect(smileys.two, two);
    showHideHoverEffect(smileys.three, three);
    showHideHoverEffect(smileys.four, four);
    showHideHoverEffect(smileys.five, five);
    showHideHoverEffect(smileys.six, six);
    
    messageSpan.innerHTML = message;
}

function hideHoverEffects()
{
    showHideHoverEffect(smileys.one, false);
    showHideHoverEffect(smileys.two, false);
    showHideHoverEffect(smileys.three, false);
    showHideHoverEffect(smileys.four, false);
    showHideHoverEffect(smileys.five, false);
    showHideHoverEffect(smileys.six, false);
    
    messageSpan.innerHTML = "&nbsp;";
}

function showHideHoverEffect(element, doShow)
{
    if (element.locked) return;
    
    if (doShow)
    {
        if (!Sys.UI.DomElement.containsCssClass(element, "hover"))
            Sys.UI.DomElement.addCssClass(element, "hover");
    }
    else
    {
        if (Sys.UI.DomElement.containsCssClass(element, "hover"))
            Sys.UI.DomElement.removeCssClass(element, "hover");
    }
}

function onSuccess(results, context, methodName)
{
    if (methodName == "RatePieceOfWork")
    {
        var message = $get("raterMessage");
        removeChildNodes(message);
        
        var strong = document.createElement("strong");
        
        var wording;
        if (results == true)
            wording = "Thanks for rating!!";
        else
            wording = "Your rating was not recorded. We only take one rating per hour from the same IP address. Please come back in an hour to rate this posting. Thank you.";
            
        var text = document.createTextNode(wording);
        strong.appendChild(text);
        message.appendChild(strong);
    }
}

function onFailure(error, context, methodName)
{
    if (methodName == "RatePieceOfWork")
    {
        alert(error.get_message());
    }
}