Wiking.DataLoader = new function()
{
    var
      params = [0,0],
      cache = {},
      script = false;
    this.setPeriod=function(from,to,opt) //opt jest 'today', 'tomorrow', etc, czas liczony serverowo
    {
        params=[from,to,opt];  
    };
    this.getPeriod=function(){
        if (Username=="Demo" && Wiking.getObjects().length>0){
            var o = Wiking.getObjects()[0];
            return [o.arr[3][0],o.arr[3][o.arr[3].length-1]];
        }
        return [params[0],params[1]];
    };
    
    this.update=function(){
        Wiking.Player.stop();
        var tmp = Wiking.getObjects();
        if (tmp.length===0){
            return;  
        }
        Wiking.Event.trigger({'e':'DataLoaderRequest'});
        
        if (typeof(cache[params]) != 'undefined')
        {
            this.load(cache[params]);
            return;
        }
        
        var parametry = "?from="+params[0]+"&to="+params[1];
        
        if (typeof params[2] != "undefined")
        {
            parametry+="&p="+params[2];
        }
        if (script)
            document.body.removeChild(script);
        
        script = document.createElement('script');        
        script.src = "/thingy/history"+parametry;
        document.body.appendChild(script);
        
        //TODO: window setTimeout na failure
    };
    
    this.load = function(json) // todo names
    {
        if (!json) throw "for loading new period use DataLoader::update";
        if (json=="UNAUTHORIZED")
        {
            Wiking.Event.trigger({e:'UNAUTHORIZED'});
            return;
        }        
 
        var obj = Wiking.getObjects();

        var len = obj.length-1;
        var data;
        
        for (var i=0,l=obj.length;i<l;i++)
        {
            obj[i].Path.clearPath(); // TODO !!! review, dirty access
        }
        
        function part(len){
            if (len == -1){
                if (Username=="Demo"){
                    //console.debug(Wiking.getObjects()[0].arr[3].first(),Wiking.getObjects()[0].arr[3].last())
                    Wiking.Player.setDates(
                        Wiking.getObjects()[0].arr[3][0],
                        Wiking.getObjects()[0].arr[3].last());
                }
                Wiking.Event.trigger({'e':'dataload','state':1});
				return;
            }
            var x = function(){
                if (data = json[obj[len].getImei()]) //celowo jest '=' !
                {
                    obj[len].setData(data); // tutaj data:0 ustawi sie samo
                }
                else
                {
                    obj[len].setFlags({data:0});
                }
                part(len-1);
           };
           x.defer();
        }
        part(len);

        if (typeof(params[3])!="undefined" && typeof(cache[params])=="undefined")
            cache[params] = json;
        
        /*while(len--)
        {          
            if (data = json[obj[len].getImei()]) //celowo jest '=' !
            {
                var x = function(){
                    obj[len].setData(data); // tutaj data:0 ustawi sie samo
                };
                x();
            }
            else
            {
                obj[len].setFlags({data:0});
            }
   
        }*/
        if (Username=="Demo") return;
        Wiking.Player.setDates(params[0],params[1]);
        //Wiking.Event.trigger({'e':'dataload','state':1});
    };
    var failure=function()
    {
        Wiking.Event.trigger({'e':'dataload','state':0});
    };
    this.toString=function()
    {
        return "DataLoader";
    };
};
