
function hiding_place(cookie_name)
{
  this.obj_str='';
  this.obj_arr=new Array();
  this.cookie_expire=new Date( (new Date).getTime() + (1*1000*60*60*24) );
  this.cookie_name=cookie_name;
  this.cookie_functions = (typeof(getCookie)=='function' && typeof(setCookie)=='function');


  var self=this;

  this.set_hp = function(str)
  {
    if ((typeof(str)||str.trim().length==0)&&self.cookie_functions) str=getCookie(self.cookie_name);
    self.bsk_arr=self.parse_str(str);
    self.obj_str=self.gen_str();
  }
  
  this.object = function(name, ids)
  {
    this.name = name;
    this.ids  = ids;

    var self1=this;
    this.add_id  = function(id)
    {
      self1.ids[self1.ids.length]=id;
    }

    this.del_id  = function(id)
    {
      for (var i=0,n=self1.ids.length; i<n;i++)
      {
        if (self1.ids[i]==id) {self1.ids.splice(i,1); break;}
      }
    }

    this.exist_id  = function(id)
    {
      for (var i=0,n=self1.ids.length; i<n;i++)
      {
        if (self1.ids[i]==id) {return true;}
      }
      return false;
    }
  }


  this.add_element = function(name, ids)
  {
    self.obj_arr[self.obj_arr.length]=new self.object(name, ids);
    self.set_cookie();
  }

  this.get_idx_by_name = function(name)
  {
    for (var i=0,n=self.obj_arr.length; i<n ;i++)
    {
      if(self.obj_arr[i].name==name) {return i; break;} 
    }
    return null;
  }

  this.gen_str = function()
  {
    var fin_arr=new Array();
    for (var i=0,n=self.obj_arr.length; i<n ;i++)
    {
      fin_arr[fin_arr.length]=self.obj_arr[i].name+'{'+self.obj_arr[i].ids.join(',')+'}';
    }

    return fin_arr.join(';');
  }

  this.add_id = function(name, id)
  {
    var idx=self.get_idx_by_name(name);
    if (idx == null)
    {
      self.add_element(name, [id]);
    }
    else
    {
      if (!(self.obj_arr[idx].exist_id(id)))
        self.obj_arr[idx].add_id(id);
    }
    self.set_cookie();
  }

  this.add_del_id = function(name, id)
  {
    var idx=self.get_idx_by_name(name);
    var st=0;
    if (idx == null)
    {
      self.add_element(name, [id]);
      st=1;
    }
    else
    {
      if (!(self.obj_arr[idx].exist_id(id)))
      {
        self.obj_arr[idx].add_id(id);
        st=1;
      }
      else
      {
        self.obj_arr[idx].del_id(id);
        st=-1;
      }
    }
    self.set_cookie();
    return st;
  }

  this.add_ids = function(name, ids)
  {
    var idx=self.get_idx_by_name(name);
    if (idx == null)
    {
      self.add_element(name, ids);
    }
    else
    {
      for (var i=0,n=ids.length; i<n;i++)
      {
        if (!(self.obj_arr[idx].exist_id(ids[i])))
          self.obj_arr[idx].add_id(ids[i]);
      }
    }
    self.set_cookie();
  }

  this.del_id = function(name, id)
  {
    var idx=self.get_idx_by_name(name);
    if (idx != null)
    {
      self.obj_arr[idx].del_id(id);
    }
    self.set_cookie();
  }

  this.parse_str = function(str)
  {
    var arr=new Array();
    var re = new RegExp(/([^\{\};]{0,})\{([^\}]{0,})\}/ig);

    var tmp01=null;
    var arr=new Array();

    while ((tmp01=re.exec(str))!==null)
    {
      self.add_ids(tmp01[1],tmp01[2].split(','));
    }

    self.set_cookie();
//xx{11};xx1{10,11}
  }

  this.set_cookie = function()
  {
    if (self.cookie_functions) setCookie(self.cookie_name, self.gen_str(),self.cookie_expire, undefined, window.sd_session_domain);
  }

  self.set_hp();
}

var hp=new hiding_place('my_hp');
