/*
 * Copyright 2006 OST-SYSTEMS. All rights reserved.
 */

function WidgetsHelper() {
  this.group = "widgets";
  this.list = null;

  this.clearList = function() {
    this.list = null;
  }
  
  this.getList = function() {
    if (this.list != null) {
      return this.list;
    }
    var listdata = keyStorage.get(this.group, "list", "all");
    if (listdata == null) {
      listdata = "[]";
    }
    addError("Read " + this.group + " " + listdata);
    try {
      this.list = eval(listdata);
    }
    catch (e) {
      addError("Reading widgets list failed: " + e);
      this.list = new Array();
    }
    return this.list;  
  }
  
  this.storeList = function(list) {
    var data = "[";
    for (var i = 0; i < list.length; i++) {
    	if (i != 0) {
    	  data += ','
    	}
    	data += list[i];
    }
    data += "]";
    addError("Save " + data);
    keyStorage.store(this.group, "list", "all", data);
  }
  
  this.addWidget = function(type, path) {
    addError("Adding " + type + " on " + path);
    var id = this.nextId;        //overwrite next ID fro single widget
    if (!id) {
      id = keyStorage.getNewId();
    }
    this.addWidgetToEnd(id);
    keyStorage.store(this.group, id, "path", path);
    keyStorage.store(this.group, id, "type", type);
    return id;
  }
  
  this.addWidgetToEnd = function(id) {
    var list = this.getList();
    list.push(id);
    this.storeList(list);
  }
  
  this.getFirstWidgetId = function() {
    var list = this.getList();
    if (list.length > 0) {
      return list[0];
    }
    return null;
  }
  
  this.getLastWidgetId = function() {
    var list = this.getList();
    if (list.length > 0) {
      return list[list.length - 1];
    }
    return null;
  }
  
  this.getPrecedenceWidgetId = function(id) {
    var list = this.getList();
    for (var i = 1; i < list.length; i++) {
    	if (list[i] == id) {
    	  return list[i - 1];
    	}
    }
    return null;
  }
  
  this.getNextWidgetId = function(id) {
    var list = this.getList();
    for (var i = 0; i < list.length - 1; i++) {
    	if (list[i] == id) {
    	  return list[i + 1];
    	}
    }
    return null;
  }
  
  this.setNextWidget = function(id, next) {
    var list = this.getList();
    for (var i = 0; i < list.length; i++) {
    	if (list[i] == id) {
    	  list.splice(i + 1, 0, next);
        this.storeList(list);
    	  return;
    	}
    }
  }
  
  this.removeWidget = function(id) {
    var type = keyStorage.get(this.group, id, "type");
    var path = keyStorage.get(this.group, id, "path");
    this.removeWidgetOnly(id);
    keyStorage.removeAll(this.group, id);
    
    //Remove left over settings
    if (this.list != null) {
      for (var i = 0; i < this.list.length; i++) {
      	if (keyStorage.get(this.group, this.list[i], "type") == type) {
      	  return;
      	}
      }
      keyStorage.removeAll(Widget.prototype.group, type);
    }
    
  }
  
  this.removeWidgetOnly = function(id) {
    var list = this.getList();
    for (var i = 0; i < list.length; i++) {
    	if (list[i] == id) {
    	  list.splice(i, 1);
        this.storeList(list);
    	  return;    	  
    	}
    }
  }
  
  this.moveWidgetToEnd = function(id) {
    var list = this.getList();
    for (var i = 0; i < list.length; i++) {
    	if (list[i] == id) {
    	  list.splice(i, 1);
        list.push(id);
        this.storeList(list);
    	  return;    	  
    	}
    }
  }
  
  this.getWidgetsCount = function() {
    var list = this.getList();
    return list.length;
  }
  
  this.storeWidgetKey = function(id, key, value) {
    keyStorage.store(this.group, id, key, value);
  }
  
  this.getWidgetValue = function(id, key) {
    return keyStorage.get(this.group, id, key);
  }
}  
