﻿/* ASMX data store for JsTree */

(function($) {
    $.extend($.tree.datastores, {
        "json_asmx": function() {
            var loadHandler = function(data, tree, opts, callback) {
                if (opts.static) {
                    callback.call(null, opts.static);
                }
                else {
                    // need to stringify data first.
                    if (data != null && typeof (data) != "string") {
                        var f = window.JSON && JSON.stringify || window.Sys && Sys.Serialization && Sys.Serialization.JavaScriptSerializer.serialize;
                        if ($.isFunction(f)) data = f(data);
                        else throw new Error(-1, "Neither JSON.stringify nor Sys.Serialization.JavaScriptSerializer.serialize can be found!");
                    }

                    $.ajax({
                        'type': "POST",
                        'url': opts.url,
                        'data': data,
                        'dataType': "json",
                        'contentType': "application/json",
                        'success': function(r, textStatus) {
                            callback.call(null, r.d);
                        },
                        'error': function(xhttp, textStatus, errorThrown) {
                            callback.call(null, false);
                            tree.error(errorThrown + " " + textStatus);
                        }
                    });
                }
            };
            
            // borrow from "json" datastore & override load function
            var ds = $.tree.datastores.json();
            ds.load = loadHandler;
            return ds;
        }
    });
})(jQuery);

