﻿var setUserScoreInterval = 30000;
var totalShowedScores = 0;
var queueScoreMessage = new Queue();
var userScoreTimer;
var timeoutExecuteScoreMessageQueue;
function ScoreMessage(messageText, score)
{
    this.messageText = messageText;
    this.score = score;
}
function WaitAndExecuteScoreMessageQueue()
{
    clearTimeout(timeoutExecuteScoreMessageQueue);
    timeoutExecuteScoreMessageQueue = setTimeout("ExecuteScoreMessageQueue()", 1500);
}
function ExecuteScoreMessageQueue() {

    if (queueScoreMessage.isEmpty())
    {
        //try again later if empty
        //timeoutExecuteScoreMessageQueue = setTimeout("ExecuteScoreMessageQueue()", 15000);
    }
    else
    {
        var myObj = queueScoreMessage.dequeue();
        if(queueScoreMessage.isEmpty())
            DisplayScore(myObj.score, myObj.messageText, true); //display oldest message
        else
        {
            DisplayScore(myObj.score, myObj.messageText, false);
            timeoutExecuteScoreMessageQueue = setTimeout("ExecuteScoreMessageQueue()", LengthTime(myObj.messageText.length));
        }
    }
}
function LengthTime(length)
{
    if(length == 0)
        return 1000;
    else
        return 2500 + Math.ceil(3000*(length/50));
}
function DisplayScore(score, message, isLastMessage)
{
    //Call the actionscript function
    var flash;
  
    if(navigator.appName.indexOf("Microsoft") != -1) {
        flash = window["mymovie"];
    }else {
        flash = document["mymovie"];
    }
    flash.CallFromDisplayScore(score, message, isLastMessage);
}

function GetUserScore()
{
    clearTimeout(userScoreTimer);
    PageMethods.GetUserScore(OnSucceeded, OnFailed);
}
function ProcessUserScore(result)
{
    if(totalShowedScores!=result.TotalShowedScores)
    {
        totalShowedScores = result.TotalShowedScores;
        var myObj = new ScoreMessage("", totalShowedScores);        
       
        queueScoreMessage.enqueue(myObj);
    }
    var scoreHistoryIDs = "";
    for(var i=0; i<result.UserScoreUnShowed.length; i++)
    {
        totalShowedScores = totalShowedScores + result.UserScoreUnShowed[i].Score;
        var myObj = new ScoreMessage(result.UserScoreUnShowed[i].Message, totalShowedScores);
        queueScoreMessage.enqueue(myObj);
        if(i!=result.UserScoreUnShowed.length-1)
        {            
            scoreHistoryIDs += result.UserScoreUnShowed[i].ID + ";";
        }
        else
        {
            scoreHistoryIDs += result.UserScoreUnShowed[i].ID;
            PageMethods.UpdateScoreHistories(scoreHistoryIDs, OnSucceeded, OnFailed);
        }
    }
    //alert(queueScoreMessage.getSize());    
    WaitAndExecuteScoreMessageQueue();
    CallGetUserScore();
}

function CallGetUserScore()
{
    clearTimeout(userScoreTimer);
    userScoreTimer = setTimeout("GetUserScore()" , setUserScoreInterval);
}