<% /*
     File:

     $Revision$
     $Id$

    File:           shared/data_recordset.inc

    Description:    Emuleer een ADODB recordset gebaseerd op een JavaScript dataobject
    Context:        Meestal in combinatie met resultset_table

    Notes:          De ADODB interface is normaal gesproken case-insensitive qua properties
                    oRs.eof, oRs.Eof en oRs.EOF werken daar allemaal.
                    Deze emulator doet dat niet: je moet altijd EOF gebruiken (hoofdletters)
                    Default properties worden ook niet ondersteund. In plaats van
                    oRs("veldnaam") moet je oRs.Fields("veldnaam").Value gebruiken
                    Let verder op dat de veldnaam ook case-sensitive is!

   */
%>
<%

function data_recordset(dataset)
{
    this.dataset = dataset;
    this.position = -1;

    this.Fields = function (columnName)
    {
        if (typeof columnName == "string")
        {
            var data = this.dataset[this.position];
            if (columnName in data)
                return { Value: data[columnName] };
            var selarr = columnName.split("."); // we ondersteunen geneste json
            for (var i = 0; data && i < selarr.length; i++)
            {   // Riskant, soms vullen we 'lazy' de dataset kolommen
                //if (!(selarr[i] in data))
                //    shared.internal_error("Kolom {0} niet gevonden in data recordset".format(columnName));
                data = data[selarr[i]];
            }
            return { Value: data };
        }
        // else is het number
        var cnt = columnName;
        for (var nm in this.dataset[this.position])
        {
            if (cnt == 0)
            {
                return { Value: this.dataset[this.position][nm],
                         Name: nm.toUpperCase()};
            }
            cnt --;
        }
        shared.internal_error("Kolom {0} niet gevonden in data recordset".format(columnName));
    };
    this.MoveNext = function ()
    {
        this.position ++;
        this.EOF = this.position+1 > this.dataset.length;
    }
    this.MoveFirst = function ()
    {
        this.position = 0;
        this.EOF = this.position+1 > this.dataset.length;
        this.Fields.Count = 0;
        if (!this.EOF)
        {
            for (var nm in this.dataset[0])
                this.Fields.Count++;
        }
    }
    this.close = function () {};

    this.MoveFirst(); // Naar eerste record
}%>
