/* 
 * Responsible for dealing with remembering web site viewers
 * scheduling interests.
 *
 * requires that includes/js/core.js be included first.
 */
Frff.scheduler = function ()
{
    var EXPIRES = "Mon, 1 Feb 2010 00:00:00 GMT";
    var COOKIE = "FrffSchedule";
    var sched_callbacks = [];
    var unsched_callbacks = []

    function doCallBacks(arr,e)
    {
        for ( var i = 0; i < arr.length; i++ ) arr[i](e);
    }
    function doScheduledCallBacks (e)
    {
        doCallBacks(sched_callbacks,e);
    }
    function doUnscheduledCallBacks (e)
    {
        doCallBacks(unsched_callbacks,e);
    }
   return {
        addScheduledCallBack : function(f) { sched_callbacks[sched_callbacks.length]=f; },
        addUnscheduledCallBack : function(f) { unsched_callbacks[unsched_callbacks.length]=f; },
        update : function ( id )
        {
            //alert ( "update " + id )
            var cookie = Frff.cookies.get(COOKIE);
            //.alert ( "cookie is '" + cookie + "'");
            if ( cookie == null )
            {
                Frff.cookies.set ( COOKIE, id, EXPIRES );
                var elm = document.getElementById(id);
                if ( elm != null ) doScheduledCallBacks(elm);
            }
            else
            {
                var ids = cookie.split (',');
                var ncookie = [];
                var found = false;
                var cnt = 0;
                for ( var i = 0; i < ids.length; i++ )
                {
                    if ( ids[i] == id ) found = true;
                    else ncookie[cnt++] = ids[i]
                }
                var elm = document.getElementById(id);
                if ( !found )
                {
                    // call scheduled callbacks
                    if ( elm != null ) doScheduledCallBacks(elm);
                    ncookie[cnt] = id;
                }
                else
                {
                    // call unscheduled callbacks
                    if ( elm != null ) doUnscheduledCallBacks(elm);
                }
                if ( ncookie.length == 0 )
                    Frff.cookies.clear(COOKIE );
                else
                {
                    var nvalue = ncookie.join ( ',' );
                    Frff.cookies.set ( COOKIE,
                        nvalue.charAt(0)==',' ?
                            nvalue.substring(1,nvalue.length-1) : nvalue,
                            EXPIRES );
                }
            }
        },
        findScheduledElements : function ()
        {
            if ( sched_callbacks.length == 0 ) return;
            var cookie = Frff.cookies.get(COOKIE);
            if ( cookie == null ) return;
            var ids = cookie.split(',');
            for ( var i = 0; i < ids.length; i++ )
            {
                var elm = document.getElementById(ids[i] );
                if ( elm != null )
                {
                    doScheduledCallBacks ( elm );
                }
                else
                {
                    // look for elements with an indexed id.
                    var j = 0;
                    elm = document.getElementById(ids[i]+"_"+j);
                    while ( elm != null )
                    {
                        doScheduledCallBacks ( elm );
                        j++;
                        elm = document.getElementById(ids[i]+"_"+j);
                    }
                }
            }
        }
    };
}();




