//-----------------------------------------------------------------------------
// Automatically submit the current form, changing the sub value before it     
//-----------------------------------------------------------------------------

function AutoSubmitForm( frmName )
{
    var frm = document.forms[ frmName ];
    if ( frm )
    {
        if ( frm.elements[ 'sub' ] ) frm.elements[ 'sub' ].value = 0;
        frm.submit();
    }
    
}


//-----------------------------------------------------------------------------
// Check all elements of a form given the selector as a model                  
//-----------------------------------------------------------------------------

function CheckAll( frmName,  selector ) 
{ 
    var frm = document.forms[ frmName ];
    for ( i = 0; i < frm.elements.length; i++ ) 
    { 
        var mesbox = frm.elements[i]; 
        mesbox.checked = selector.checked; 
    }
}


//-----------------------------------------------------------------------------
// Make a date object from an 'autodate' format    JJ/MM/YYYY                  
//-----------------------------------------------------------------------------

function MakeAutoDate( val )
{
    var theString = new String( val );

    return new Date( theString.substr(6,4)
                   , theString.substr(3,2)
                   , theString.substr(0,2) );
}

// Objects Synchronization Framework :


var ObjSyncHandler =
{
    _syncObjs : new Array(),

    ReferenceMe : function( sync )
    {
        ObjSyncHandler._syncObjs.push( sync );
        return ObjSyncHandler._syncObjs.length - 1;
    },

    SyncMe : function ( obj )
    {
        for ( var i = 0 ; i < ObjSyncHandler._syncObjs.length ; i++ )
        {
            if ( ObjSyncHandler._syncObjs[i].HasObject( obj ) )
            {
                ObjSyncHandler._syncObjs[i].OnChange( obj );
                break;
            }
        }
    }
};



// Base Synchronizer class:

Synchronizer.prototype =
{
    HasObject : function( obj )
    {
        for ( var i = 0; i < this._objs.length ; i ++ )
        {
            if ( obj == this._objs[i] ) return true;
        }
        return false;
    },

    AddObject : function( objref )
    {
        var obj = $( objref );
        this._objs.push( obj );

        obj.onchange = function onchange() { ObjSyncHandler.SyncMe( eval("this") ); }
    },

    GetObject : function( idx )
    {
        return this._objs[idx];
    },

    ObjCount : function()
    {
        return this._objs.length;
    },

    // OnChange : function (obj) => Must be reimplemented class
    OnChange : function()
    {
        window.alert( "Synchorizer object should never be called, but it's called here" );
    }
}

function Synchronizer()
{
}

// Sync the time selection in the timewidgets

TimeSync.prototype = new Synchronizer();
TimeSync.prototype.constructor = TimeSync;
TimeSync.prototype.baseClass = Synchronizer;

function TimeSync( src, dest )
{
    this._objs = new Array(); // Have to be in the derived class!

    this.AddObject( src  );
    this.AddObject( dest );

    this.lastDest = dest.value;

    this.OnChange = function( obj )
    {
        var src  = this.GetObject( 0 );
        var dest = this.GetObject( 1 );

        var begintime = parseInt( src.value );

        if( parseInt( dest.value ) <= begintime )
        {
            if ( obj == dest ) dest.value = this.lastDest;
            else dest.value = begintime + 1;
        }

        this.lastDest = dest.value;

        if ( obj == dest ) return;

        var i = 0;
        for( i = 0; i <= begintime ; i++ )
        {
            dest.options[i].disabled = true;
            dest.options[i].style.color = 'gray';
        }

        for( ; i < dest.options.length; i++)
        {
            dest.options[i].disabled = false;
            dest.options[i].style.color = 'black';
        }
    }

    this.OnChange( $(src) );

    this._id = ObjSyncHandler.ReferenceMe( this );
}

// vim: set smarttab : sw = 4 :

