//  @import com.hedgehoglab.application.model.BaseModel;
//  @import com.hedgehoglab.collection.LinkedList;

/**
 *
 * @param scope
 */

function ContactsModel(scope){
    BaseModel.call(this,scope);
   var _model=null;
   var _revserse_lookup=null;
   var _this=this;

   this.model=function(model,dont_notify){
     if(arguments.length>0){
       _model=model;
		if(!dont_notify) _this.raise_event('model_changed',{model:_model});
     }

	if(_model==null) _model={contact:[]};
     return _model;
   };

    this.update=function(model,flag){
        _model=model;
        _this.raise_event('model_updated',{
            model: _model
            });
    };

    this.remove=function(model,index){
        //  Remove the model
        //  model[index]
        var t=new LinkedList(model.contact);
        
        if($.isArray(index)){
            //  Handle multiple removes at once
            $.each(index,function(i,n){
                t.remove(n);
            });
        }else{
            t.remove(index);
        }

        model.contact=t.serialise();
        _this.raise_event('model_removed',{model:model,index:index});
    };

    this.contact_by_id=function(id,model){
        if(!_revserse_lookup){
            _revserse_lookup={};
        }
		if(_model && _model.contact){
	        $.each(_model.contact,function(i,n){
	            _revserse_lookup[n.id]={index:i,item:n};
	        });			
		}else{
		}
		
		if(model) {
			_model.contact[_revserse_lookup[id].index]=model;
		}
		if(_revserse_lookup[id]==null) return null;
        return _revserse_lookup[id].item;
    };
	
    this.contact=function(index,model){
        if(arguments.length>1){
            //_model=model;
            _model.contact[index]=model;

            _this.raise_event('contact_changed',{
                index:index,model:_model.contact[index]
            });
        }
        return _model.contact[index];  
    };

    this.add_note_to_contact=function(index,note){
        _contact=_model.contact[index];
        if(!_contact.note || _contact.note[0]==null){
            _contact.note=[];
        }

        note.createdAt=(new Date()).toString("yyyy-MM-ddTHH:mm:ssZ");//Date.parse(new Date()).toString("yyyy-MM-ddTHH:mm:ssZ")
        note.contact_id=_contact.id;
        _contact.note.unshift(note);

        //alert($.toJSON(_contact));
        _this.raise_event('on_note_add_to_contact',{
            notes:note
        });
    };

 	this.add_task_to_contact=function(index,task){
        _contact=_model.contact[index];
        if(null==_contact.tasks){
            _contact.tasks={task:[]};
        }

        _contact.tasks.task.unshift(task);
         
        _this.raise_event('on_task_add_to_contact',{
            task:task
        });
    };

};