﻿

function FormInput(iId, iForm)
{
    var This = this;

    // Implements
    Implements(This, Control, iId);

    // Data members
    This.Form = null;

    // Methods
    This.GetName = function()
    { return This.GetElement().name; }
    
    This.GetValue = function()
    { return This.GetElement().value; }

    // Initialize
    {
        if (iForm)
            iForm.Add(This);
    }
}


function Form(iId, iAsynchronous)
{
    var This = this;

    // Implements
    Implements(This, Content, iId);

    // Data members
    This.FormInputs = [];
    This.Asynchronous = iAsynchronous;
    This.TargetUrl = null;

    // Events
    This.OnValidate = new EventHandler();
    This.OnSubmit = new EventHandler();
    This.OnSubmitted = new EventHandler();

    // Methods
    This.Add = function(iFormInput)
    {
        This.FormInputs.push(iFormInput);
        iFormInput.Form = This;
    }

    This.Validate = function()
    { return This.OnValidate.Invoke(); }

    This.Submit = function()
    {
        if (This.Validate())
        {
            if (This.Asynchronous)
            {
                if (This.OnSubmit.Invoke(This))
                    This.Send();
                return false;
            }
            return This.OnSubmit.Invoke(This);
        }
        else
            return false;
    }

    This.Send = function()
    {
        var varSet = new HttpVarSet();
        var httpRequest;
        var data;

        for (var i = 0; i < This.FormInputs.length; i++)
        {
            var name = This.FormInputs[i].GetName();
            var value = This.FormInputs[i].GetValue();
            if (name != null)
                varSet.Set(name, value);
        }

        httpRequest = new HttpRequest(true);
        httpRequest.OnLoad.Add(This.OnSubmitted);
        httpRequest.PostRequest(This.TargetUrl, varSet.ToString());
    }

    // Initialize
    {
        This.GetElement().onsubmit = This.Submit;
        This.TargetUrl = This.GetElement().action;
    }

}
