/*
  棚操作UI
  以下のパラメータを設定すること。
  tags: そのユーザの持っている全タグ
*/

var ShelfUI = {
  /*タグ挿入UIを生成*/
  createTagInsertUI: function(){
    ShelfUI.tags.each(function(tag){
      var cont = $('shelf_ui_tag_insert');
      var element = new Element('span');
      element.className = 'tag_insert_checkbox_element';
      cont.appendChild(element);
      
      var check = document.createElement('input');
      check.type = 'checkbox';
      check.value = tag;
      check.id = "shelf_ui_tag_insert_" + encodeURIComponent(tag);
      check.className = 'shelf_ui_tag_insert_check';
      element.appendChild(check);
      $(check).observe('click', ShelfUI.tagInsertUIClick);
      
      var label = document.createElement('label');
      label.htmlFor = "shelf_ui_tag_insert_" + encodeURIComponent(tag);
      label.innerHTML = tag;
      element.appendChild(label);
    });
  },
  
  /*タグ挿入UIのクリック*/
  tagInsertUIClick: function(event){
    var tagText = $('shelf_ui_tag_text');
    var nowTags = ShelfUI.splitTags(tagText.value);
    
    if(this.checked){
      nowTags.push(this.value);
      nowTags = ShelfUI.uniqArray(nowTags);
      
    }else{
      var deleteIndex = nowTags.indexOf(this.value);
      if(deleteIndex != -1){
        nowTags[deleteIndex] = null;
      }
      nowTags = ShelfUI.compactArray(nowTags);
    }
    
    tagText.value = ShelfUI.joinTags(nowTags);
  },
  
  /*タグ挿入UIに現在の状態を反映*/
  updateTagInsertUI: function(tagStr){
    //すべてのチェックをいったん外す
    var checkboxList = $$(".shelf_ui_tag_insert_check");
    for(var i = 0; i < checkboxList.length; i++){
      checkboxList[i].checked = false;
    }
    
    //チェックを入れ直す
    var tags = ShelfUI.splitTags(tagStr);
    for(var i = 0; i < checkboxList.length; i++){
      var target = checkboxList[i];
      if(tags.indexOf(target.value) >= 0){
        target.checked = true;
      }
    }
  },
  
  splitTags: function(src){
    var temp = src.replace(/\[/g, '').split(']');
    var ret = [];
    for(var index = 0; index < temp.length; index++){
      if(temp[index] != ''){
        ret.push(temp[index]);
      }
    }
    
    ret = ShelfUI.uniqArray(ret);
    ret = ShelfUI.compactArray(ret);
    return ret;
  },
  
  joinTags: function(src){
    src = ShelfUI.uniqArray(src);
    src = ShelfUI.compactArray(src);
    
    var ret = '';
    for(var index = 0; index < src.length ;index++){
      ret += '[' + src[index] + ']';
    }
    
    return ret;
  },
  
  uniqArray: function(src){
    var ret = [];
    for(var index=0; index < src.length; index++){
      if(ret.indexOf(src[index]) == -1){
        ret.push(src[index]);
      }
    }
    return ret;
  },
  
  flattenArray: function(src){
    var ret = [];
    
    src.each(
      function(item){
        if(item.constructor == Array){
          item = ShelfUI.flattenArray(item);
          
          item.each(
            function(item){
              ret.push(item);
            }
          )
        }else{
          ret.push(item);
        }
      }
    )
    
    return ret;
  },
  
  compactArray: function(src){
    var ret = [];
    
    src.each(
      function(item){
        if(item != null){
          if(item.constructor == Array){
            if(item.length != 0){
              ret.push(item);
            }
          }else{
            ret.push(item)
          }
        }
      }
    )
    
    return ret;
  }
}
