/**
 * List Model
 */
function ListModel(data){
    this.data = new Array();
    if (data != null){
        this.data = data;
    }

    this.listDataListeners = new Array();
    this.selectedItem = null;
    this.selectedIndex = null;
    this.queryColumnIndex = 1;
    this.selectColumnIndex = 0;
}

ListModel.prototype.getSize = function(){
    return this.data.length;
}

ListModel.prototype.getElementAt = function(inIndex){
    if (inIndex > this.getSize() - 1){
        return null;
    } else {
        return this.data[inIndex];
    }
}

ListModel.prototype.addItem = function(inItem){
    this.data[this.getSize()] = inItem;

    for (var j=0; j < this.listDataListeners.length; j++){
        var event = new Event(this, "LIST_MODEL_ADD_ITEM", ([inItem]));
        this.listDataListeners[j].modelChanged(event);
    }
}

ListModel.prototype.addListDataListener = function(inListener){
    this.listDataListeners[this.listDataListeners.length] = inListener;
}

ListModel.prototype.setSelectedItem = function(inItem){
    for (var i=0; i < this.getSize(); i++){
        if (inItem[this.queryColumnIndex] == this.data[i][this.queryColumnIndex]){
            this.selectedItem = inItem;
            this.selectedIndex = i;
            
            for (var j=0; j < this.listDataListeners.length; j++){
                var event = new Event(this, "LIST_MODEL_SELECTED_CHANGE", ([this.selectedIndex, this.selectedItem]));
                this.listDataListeners[j].modelChanged(event);
            }
            break;
        }
    }    
}

ListModel.prototype.setSelectedIndex = function(inIndex){
    if (inIndex > this.getSize() - 1){
        this.selectedIndex = null;
        this.selectedItem = null;
    } else {
        this.selectedIndex = inIndex;
        this.selectedItem = this.data[inIndex];
    }

    for (var j=0; j < this.listDataListeners.length; j++){
        var event = new Event(this, "LIST_MODEL_SELECTED_CHANGE", ([this.selectedIndex, this.selectedItem]));
        this.listDataListeners[j].modelChanged(event);
    }
}

ListModel.prototype.getSelectedItem = function(){
    return this.selectedItem;
}

ListModel.prototype.getSelectedIndex = function(){
    return this.selectedIndex;
}

ListModel.prototype.release = function(){
    this.data = undefined;
    this.listDataListeners = undefined;
    this.selectedItem = undefined;
    this.selectedIndex = undefined;
}