function DataProxy() {
    this.internal_id = parseInt(new Date() * Math.random());
    this.swf_path = "/assets/flash/jzDataProxy.swf"
    this.flash_vars  = "initCallback=loaderReady"+ this.internal_id;
    this.ready       = false;
    var that         = this;
    eval("window.loaderReady"+ this.internal_id +" = function() { that.ready = true } ");
    
    this.insert_object();
}

DataProxy.prototype.insert_object = function() {
    if (!document.getElementById("dataProxy" + this.internal_id)) {
        var div = document.createElement("div")
        div.id = "DataProxyContent" + this.internal_id;
        document.getElementsByTagName("body")[0].appendChild(div);

        var so = new SWFObject(this.swf_path, "dataProxy" + this.internal_id, "1", "1", "9", "#fff");
        so.addParam("allowScriptAccess", "always");
        so.addParam("flashvars", this.flash_vars);
    	so.write("DataProxyContent" + this.internal_id);
    }
}

DataProxy.prototype.proxy_object = function() {
    return document.getElementById("dataProxy" + this.internal_id);
}

DataProxy.prototype.loadURL = function(url, callback) {
    var callback_name = "loadURLCallback" + this.internal_id // TODO improve this
    //var fn   = eval("window."+ callback_name +" = callback");
    var container = 'DataProxyContent' + this.internal_id; 
    var fn   = eval("window."+ callback_name +" = function(res) {callback(res); document.getElementsByTagName('body')[0].removeChild(document.getElementById(container));}");
    var that = this;
    
    this.interval = setInterval(function() {
        if (that.ready) {
            clearInterval(that.interval);
            //that.proxy_object().loadJSON(SERVER, Endpoint, method, params, callback_name);
            that.proxy_object().setCallback(callback_name);
            that.proxy_object().loadURL(url);
        }
    }, 100);
}
