function show_notes(_id) {
	Modalbox.show(
		base_url+'/report/notes/'+_id,
		{
			title: 'Notes', 
			width: 400
		}
	);
}

function getQueryVariable(variable) {
  if(variable == 'id') {
    var url_parts = location.href.split('/');

    return url_parts.pop();
  }
  else {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
      var pair = vars[i].split("=");
      if (pair[0] == variable) {
        return pair[1];
      }
    } 
  }
  throw("No such querystring variable: "+variable);
}

var Category = {
  create: function(_path, _pattern_id) {
    var categories = $A(_path.split('/')).without('');

    var box_parent = $('library_category_list');

    var path = '';

    for(var i = 0; i < categories.length; i++) {
			var category = categories[i];

      path += '/'+category;
      var category_box = $(path+'_category');

      category_box = category_box != undefined ? category_box : this.make_category_box(path, category, box_parent);

      if(path == _path) {
        category_box.appendChild($('pattern_'+_pattern_id));
      }

      box_parent = category_box;
		}

    new Ajax.Request(base_url+'/pattern/set_category/'+_pattern_id+'>?library_id='+getQueryVariable('id')+'&category='+_path, {
      onComplete: function() {
        library_enumerate_patterns_available_pager.refresh();
      }
    });
  },
  make_category_box: function (id, category, box_parent) {
    category_box = document.createElement('div');
    category_box.id = id+'_category';
    category_box.className = 'category';
    
    var expand   = document.createElement('div');
    expand.id = id+'_expand';
    expand.className = 'tree_control';
    expand.appendChild(document.createTextNode('+'));

    category_box.appendChild(expand);

    var collapse = document.createElement('div');
    collapse.id = id+'_collapse';
    collapse.className = 'tree_control';
    collapse.appendChild(document.createTextNode('\u2013'));
    collapse.style.display = 'none';

    category_box.appendChild(collapse);
    category_box.appendChild(document.createTextNode(category));
    
    box_parent.appendChild(category_box);

    this.make_toggleable(id);
    this.make_category_droppable(category_box.id);

    return category_box;
  },
  make_category_droppable: function(_element_id) {
    Droppables.add(
      _element_id,
      {
        hoverclass: 'drophover',
        onDrop: function(_element) {
          var pattern_id    = _element.id.split('pattern_')[1];
          var category_path = _element_id.split('_category')[0];

          new Ajax.Request(base_url+'/pattern/set_category/'+pattern_id+'?library_id='+getQueryVariable('id')+'&category='+category_path, {
            onComplete: function() {
              library_enumerate_patterns_available_pager.refresh();
            }
          });

          var drop_box = $(_element_id);

          if(drop_box.childElements()[0].style.display == 'none') {
            drop_box.childElements().each(Element.show);
            $(category_path+'_expand').hide();
          }

          drop_box.appendChild(_element);
        }
      }
    );
  },
  make_remove_droppable: function(_element_id) {
    Droppables.add(_element_id, {
      hoverclass: 'drophover',
      onDrop: function(_element) {
        var pattern_id = _element.id.split('pattern_')[1];

        _element.parentNode.removeChild(_element);

        new Ajax.Request(base_url+'/pattern/remove_from_library/'+pattern_id+'?library_id='+getQueryVariable('id'), {
          onComplete: function() {
            library_enumerate_patterns_available_pager.refresh();
          }
        });

      }
    });
  },
  make_modalbox_droppable: function(_element_id) {
    Droppables.add(_element_id, {
      hoverclass: 'drophover',
      onDrop: function(element) {
        Modalbox.show(
          base_url+'/category/create/'+element.id.sub('pattern_',''),
          {
            title: 'New Category', 
            width: 300,
						height: 110
          }
        );
      }
    });
  },
  make_toggleable: function(_category) {
    $(_category+'_expand').observe('click', function(_event) {
      _event.element().parentNode.childElements().each(function(_element) {
				if(_element.hasClassName('category') || _element.hasClassName('pattern')) {
					_element.show();
				}
			});
			$(_category+'_collapse').show();
			$(_category+'_expand').hide();

      _event.stop();
    });

    $(_category+'_collapse').observe('click', function(_event) {
      _event.element().parentNode.childElements().each(function(_element) {
				if(_element.hasClassName('category') || _element.hasClassName('pattern')) {
					_element.hide();
				}
			});
			$(_category+'_collapse').hide();
			$(_category+'_expand').show();

      _event.stop();
    });

    $(_category+'_category').childElements().each(Element.toggle);
  }
}
