var Wiking = new function(){
    var
      objects = [],
	  groups = new Array(),
      map = false,
      objectsReqState = 0,
      objectCreator = false,
      objectsHash = {};
    /*
     * ustawiamy obiekt mapy na którym operuje wiking.
     */
    this.setMap = function(setmap){
        map = setmap;
    };
    /*
     * pobieramy referencje do obiektu mapy Wikinga.
     */
    this.getMap = function(){
        return map;
    };
    this.setObjectType = function(object){
        objectCreator = object.creator;
    };
    this.createObjects = function(){
        this.clearObjects();
        objects = []; 
        objectsHash = {};  
        new Ajax.Request('/thingy/list?a=1',{
            method:'GET',
            onSuccess:function(e)
            {
                var json = e.responseJSON;
                if (json=="UNAUTHORIZED")
                {
                    Wiking.Event.trigger({e:'UNAUTHORIZED'});      
                    return;
                }
                var l = json.length;

                objects = new Array(l);
				groups = new Array();
                while(l--)
                {
                    objectsHash[json[l].imei] = objects[l] = objectCreator(json[l]); // objects hash && other stuff
					var group = objects[l].getGroup();
					for(var groupId=0;groupId<groups.length;groupId++) {
						if(group==groups[groupId]) {
							group='';
						}
					}
					if(group!='') {
						groups.push(group);
					}
                }

                objectsReqState='success';
            
                Wiking.Event.trigger({'e':'objects_arrived'});
            },
            onFailure:function()
            {
                //console.debug('Nie udało się pobrać listy obiektów'); // TEMP
                objectsReqState='failure'; //TODO
            }   
        });
    };
    this.clearObjects = function(){
        var l = objects.length;
        while(l--){
            objects[l].clear();
        }
    };
    this.getObjects = function()
    {
        return objects;
    };
    this.getGroups = function()
    {
        return groups;
    };
	this.addEmptyGroup = function(group)
	{
		groups.push(group);
	};
    this.getObjectByImei = function(imei)
    {
        return objectsHash[imei];
    };
    this.toString = function()
    {
        return "Wiking";
    };
}
Wiking.Event = new TEventDispatcher();
