/**
 * @class Ext.form.action.Load
 * @extends Ext.form.action.Action
 * <p>A class which handles loading of data from a server into the Fields of an {@link Ext.form.Basic}.</p>
 * <p>Instances of this class are only created by a {@link Ext.form.Basic Form} when
 * {@link Ext.form.Basic#load load}ing.</p>
 * <p><u><b>Response Packet Criteria</b></u></p>
 * <p>A response packet <b>must</b> contain:
 * <div class="mdetail-params"><ul>
 * <li><b><code>success</code></b> property : Boolean</li>
 * <li><b><code>data</code></b> property : Object</li>
 * <div class="sub-desc">The <code>data</code> property contains the values of Fields to load.
 * The individual value object for each Field is passed to the Field's
 * {@link Ext.form.field.Field#setValue setValue} method.</div></li>
 * </ul></div>
 * <p><u><b>JSON Packets</b></u></p>
 * <p>By default, response packets are assumed to be JSON, so for the following form load call:<pre><code>
var myFormPanel = new Ext.form.Panel({
    title: 'Client and routing info',
    items: [{
        fieldLabel: 'Client',
        name: 'clientName'
    }, {
        fieldLabel: 'Port of loading',
        name: 'portOfLoading'
    }, {
        fieldLabel: 'Port of discharge',
        name: 'portOfDischarge'
    }]
});
myFormPanel.{@link Ext.form.Panel#getForm getForm}().{@link Ext.form.Basic#load load}({
    url: '/getRoutingInfo.php',
    params: {
        consignmentRef: myConsignmentRef
    },
    failure: function(form, action) {
        Ext.Msg.alert("Load failed", action.result.errorMessage);
    }
});
</code></pre>
 * a <b>success response</b> packet may look like this:</p><pre><code>
{
    success: true,
    data: {
        clientName: "Fred. Olsen Lines",
        portOfLoading: "FXT",
        portOfDischarge: "OSL"
    }
}</code></pre>
 * while a <b>failure response</b> packet may look like this:</p><pre><code>
{
    success: false,
    errorMessage: "Consignment reference not found"
}</code></pre>
 * <p>Other data may be placed into the response for processing the {@link Ext.form.Basic Form}'s
 * callback or event handler methods. The object decoded from this JSON is available in the
 * {@link Ext.form.action.Action#result result} property.</p>
 */

Ext.define('Ext.form.action.Load', {
    extend
:'Ext.form.action.Action',
    requires
: ['Ext.data.Connection'],
    alternateClassName
: 'Ext.form.Action.Load',
   
alias: 'formaction.load',

    type
: 'load',

    /**
     * @private
     */

    run
: function() {
       
Ext.Ajax.request(Ext.apply(
           
this.createCallback(),
           
{
                method
: this.getMethod(),
                url
: this.getUrl(),
                headers
: this.headers,
               
params: this.getParams()
           
}
       
));
   
},

    /**
     * @private
     */

    onSuccess
: function(response){
       
var result = this.processResponse(response),
            form
= this.form;
       
if (result === true || !result.success || !result.data) {
           
this.failureType = Ext.form.action.Action.LOAD_FAILURE;
            form
.afterAction(this, false);
           
return;
       
}
        form
.clearInvalid();
        form
.setValues(result.data);
        form
.afterAction(this, true);
   
},

    /**
     * @private
     */

    handleResponse
: function(response) {
       
var reader = this.form.reader,
            rs
, data;
       
if (reader) {
            rs
= reader.read(response);
            data
= rs.records && rs.records[0] ? rs.records[0].data : null;
           
return {
                success
: rs.success,
                data
: data
           
};
       
}
       
return Ext.decode(response.responseText);
   
}
});