    function Catalog(id,name,assigned,order)
    {
      this.id = id;
      this.name = name;
      this.order = order;
      this.assigned = assigned;
    }

    function set_catalog_changed()
    {
      catalog_changed = true;
    }

    function assign()
    {
      set_catalog_changed();
      var select1 = document.getElementById("catalogs");
      var select2 = document.getElementById("assigned_catalogs");
      for(i=select1.length-1;i>=0;i--)
      {
         if(select1.options[i].selected)
         {
           var opt = select1.options[i];
           js_cat = js_catalogs[opt.value];
           js_cat.assigned = 1;
           select1.options[i] = null;
           select2.options[select2.options.length] = new Option(opt.text,opt.value,false,false);
         }
      }
    }

    function unassign()
    {
      set_catalog_changed();
      var select1 = document.getElementById("catalogs");
      var select2 = document.getElementById("assigned_catalogs");
      for(i=select2.length-1;i>=0;i--)
      {
         if(select2.options[i].selected)
         {
           var opt = select2.options[i];
           js_cat = js_catalogs[opt.value];
           js_cat.assigned = 0;
           select2.options[i] = null;
         }
      }
      redisplay(select1);
    }

    function redisplay(select1)
    {
      select1.options.length = 0;
      for (i in js_catalogs)
      {
        var js_cat = js_catalogs[i];
        if(js_cat.assigned == 0)
          select1.options[select1.options.length] = new Option(js_cat.name,js_cat.id,false,false);
      }
    }

    function figure_out_assigned()
    {
      var elem = document.getElementById("assigned_catalog_ids");
      if(!elem) return true;
      var select2 = document.getElementById("assigned_catalogs");
      if(select2.length == 0)
        return false;
      for (i=0;i<select2.options.length;i++)
      {
         var opt = select2.options[i];
         elem.value += opt.value + "~";
      }
      return true;    
    }

