﻿var cpVars = new Array(); // Name, Value, Counter
var cpTriggers = new Array(); // Name, Eval, Event, Vars, Counter
var cpEvents = new Array(); // Name, Callback
var cpTriggerIndex = 0;
var cpTimeout = 10;
var cpEnabled = true;
var cpCounter = 0;
var cpMode = 0;

function cpNextTrigger()
{
    var i;
    if (cpEnabled)
    {
        if (cpMode == 0)
        {
            for (i = 0; i < cpTriggers.length; i++)
            {
                if (cpEvalTrigger(i))
                {
                    cpCallTriggerEvent(i);
                }
            }
        }
        else
        {
            if (cpTriggerIndex >= cpTriggers.length)
                cpTriggerIndex = 0;
            if (cpTriggers.length > 0)
            {
                if (cpEvalTrigger(cpTriggerIndex))
                {
                    cpCallTriggerEvent(cpTriggerIndex);
                }
                cpTriggerIndex++;
            }
        }
    }
    setTimeout("cpNextTrigger()", cpTimeout);
}

function cpSetVar(Name, Value)
{
    var i, found = false;
    for (i = 0; i < cpVars.length; i++)
    {
        if (cpVars[i][0] == Name)
        {
            cpVars[i][1] = Value;
            cpVars[i][2] = ++cpCounter;
            found = true;
            break;
        }
    }
    if (!found)
    {
        cpVars.push(new Array(Name, Value, ++cpCounter));
    }
}

function cpGetVar(Name)
{
    var i;
    for (i = 0; i < cpVars.length; i++)
    {
        if (cpVars[i][0] == Name)
        {
            return cpVars[i][1];
        }
    }
    return null;
}

function cpGetVarDate(Name)
{
    var i;
    for (i = 0; i < cpVars.length; i++)
    {
        if (cpVars[i][0] == Name)
        {
            return cpVars[i][2];
        }
    }
    return 0;
}

function cpRemoveVar(Name)
{
    var i;
    for (i = 0; i < cpVars.length; i++)
    {
        if (cpVars[i][0] == Name)
        {
            cpVars.splice(i, 1);
            break;
        }
    }
}

function cpSetTrigger(Name, Eval, Event)
{
    var i, found = false;
    for (i = 0; i < cpTriggers.length; i++)
    {
        if (cpTriggers[i][0] == Name)
        {
            cpTriggers[i][1] = Eval;
            cpTriggers[i][2] = Event;
            cpTriggers[i][3] = new Array();
            cpTriggers[i][4] = 0;
            found = true;
            break;
        }
    }
    if (!found)
    {
        cpTriggers.push(new Array(Name, Eval, Event, new Array(), 0));
    }
}

function cpRemoveTrigger(Name)
{
    var i;
    for (i = 0; i < cpTriggers.length; i++)
    {
        if (cpTriggers[i][0] == Name)
        {
            cpTriggers.splice(i, 1);
            break;
        }
    }
}

function cpSetTriggerVars(Trigger, Vars)
{
    var i;
    for (i = 0; i < cpTriggers.length; i++)
    {
        if (cpTriggers[i][0] == Trigger)
        {
            cpTriggers[i][3] = Vars.split(',');
            break;
        }
    }
}

function cpEvalTrigger(Index)
{
    var i;
    for (i = 0; i < cpTriggers[Index][3].length; i++)
    {
        if (cpGetVarDate(cpTriggers[Index][3][i]) > cpTriggers[Index][4])
        {
            cpTriggers[Index][4] = ++cpCounter;
            return eval(cpTriggers[Index][1]);
        }
    }
    return false;
}

function cpCallTriggerEvent(Index)
{
    cpCallEvent(cpTriggers[Index][2]);
}


function cpSetEvent(Name, Callback)
{
    var i, found = false;
    for (i = 0; i < cpEvents.length; i++)
    {
        if (cpEvents[i][0] == Name)
        {
            cpEvents[i][1] = Callback;
            found = true;
            break;
        }
    }
    if (!found)
    {
        cpEvents.push(new Array(Name, Callback));
    }
}

function cpRemoveEvent(Name)
{
    var i;
    for (i = 0; i < cpEvents.length; i++)
    {
        if (cpEvents[i][0] == Name)
        {
            cpEvents.splice(i, 1);
            break;
        }
    }
}

function cpCallEvent(Name)
{
    var i;
    for (i = 0; i < cpEvents.length; i++)
    {
        if (cpEvents[i][0] == Name)
        {
            cpEvents[i][1]();
            break;
        }
    }
}
