	  var cats= [];
		var index = 0;
		
		/* attach functions */
	  $(document).ready(function(){
	    $("#add_category_button").click(function() {
				addCategory();
	    });

	    $("#add_category_input").keyup(function(event) {
				//if (getKeyCode(event) == 13) {
				//	addCategory();
				//}
	    });

    	$("#add_lineitem_button").click(function() {
        addItem();
    	});    

    	$("#add_lineitem_input").keyup(function(event) {
				if (getKeyCode(event)==13) {
					addItem();
				}
    	});    

			/* attache a pre-submit handler */
			$('#create-worksheet').submit(function() {
				return createCustomWorksheet();
			});
	  });
	  
	  var addItem = function() {
		  var $selector = $("#add_line_item_category").find("option:selected");		
  		var category_id = $selector.attr('id');
			var line_item = $("#add_lineitem_input").val();
			if (line_item.length < 1) {
				return false;
			}
			addLineItem(category_id,line_item);
	  }
	  var addCategory = function() {
  	 	category_name = $("#add_category_input").val();
    	if (checkCategory(category_name)) {
	    	cats.push(new category(++index,category_name));
	    	// update the selector
	    	update();
	    }
	  }
	  
	  var getKeyCode = function(e)
		{
			if (document.all) {
				return window.event.keyCode;
			}
			else { 
				return e.which;
			}
		}

	  
	  
	  var addLineItem = function(category_id, line_item) {
  	  var i = cats.length, id=0;
  	  while(i--) {
	  	  if (cats[i].id == category_id) {
	  	    id = i;
	  	  }
	  	}
 	    cats[id].addItem(line_item);
	  	if (cats[id].items.length==1)			 {
		    var row = "<tr><td class='x'>Line Items</td><td class='y'>"+line_item+"</td></tr>";
		  	$("#category_"+category_id).find('tbody').append(row);
		  } else {
		    var j = cats[id].items.length-1;
		    var data =$("#category_"+category_id+" td:last").html()+', '+cats[id].items[j];
		    $("#category_"+category_id+" td:last").html(data);
		  }
	  }

	  var checkCategory = function(category_name) {
	    if (category_name.length < 2 ) {
	    	return false;
	    }
  	  var i = cats.length;
  	  while(i--) {
	  	  if (cats[i].name == category_name) {
	  	    $("#add_category").focus();
					alert("You've already created the cateogry: "+category_name);
	  	    return false;
	  	  }
	  	}
	  	return true;
	  }
	  
	  var recreateSelect = function() {
	    var i = cats.length;
			$("#add_line_item_category").html('');
	    while(i--) {
		    $("#add_line_item_category").append("<option id='"+cats[i].id+"'> "+cats[i].name+"</option>" );
	    }
	  }
	  
	  /* append to select and add new table */
	  var update = function() {
	    var last = cats.length-1;
	    if (last <0) {
	      return false;
	    }
    	var $additem = $("#add_lineitem");
    	if ($additem.is(":hidden")) {
				$additem.show();
    	}
    	var $submit = $("#create-worksheet");
    	if ($submit.is(":hidden")) {
				$submit.show();
    	}
    	$("#add_line_item_category").append("<option id='"+cats[last].id+"'> "+cats[last].name+"</option>" );
    	$("#add_line_item_category").find("option").each(function() {
    		if ($(this).attr('id')==cats[last].id) {
    		  $(this).attr('selected','selected');
    		}
    	});
    	$("#custom-worksheet").append(addNewTable());
    	
	  }
	  
	  var addNewTable = function() {
	    var last = cats.length;
	    if (last == 0) {
	      return '';
	    }
	    var id = cats[last-1].id, category=cats[last-1].name ;
	    var table = "<div id='category_container_"+id+"' class='category_container'><div class='right'><a href='javascript:deleteCategory("+id+")'>Delete \""+category+"\"<a/></div><div class='main'><table id='category_"+id+"'><tbody><tr><th class='x f'>Category</th><th class='y f'>"+category+"</th></tr></table></div></div>";
	    return table;
	  }
	  
	  var deleteCategory = function(category_id) {
      $("#category_container_"+category_id).remove();
      i = cats.length;
      while(i--) {
        if (cats[i].id==category_id) {
        	var removed = cats.splice(i,1);
        }
      }
		  if (cats.length == 0) {
	    	var $additem = $("#add_lineitem")
	    	$additem.hide();
	    	var $submit = $("#create-worksheet");
				$submit.hide();
    	}
    	recreateSelect();
	  }
	  
	  var test = function() {
	  	if (cats === null) {
	  	  alert('ummm.. cats is null');
	  	} else if (cats.length == 0) {
	  		alert('cats is empty');
	  	} else {
	  	  i = cats.length;
	  	  alert('number of categories: '+i);
	  	  while(i--) {
		  	  alert('category: '+cats[i].name+' has '+cats[i].items.length+' items.');
		  	}
	  	}
	  }
	  
	  var createCustomWorksheet = function() {
	    var i = 0, j=0, max = cats.length, data='';
	    for (i; i<max; i++) {
	      nItems = cats[i].items.length;
	      if (nItems > 0) {
	      		data+=cats[i].name+'\n';
	      }
	      for (j=0; j<nItems; j++) {
		    	data+='#'+cats[i].items[j]+'\tnull\tnull\n';
		    }
	    }
	    if (data) {
	    	$("#budget_blob").val(data);
		    return true;
		  } else {
		    return false;
		  }
	  }
	  
	  category = function(id, name) {
	  	this.name = name;
	  	this.id = id;
	  	this.items = []; 
	  	this.addItem = function(item) {
	  		if (item !== null) {
	  		  this.items.push(item);
	  		}
	  	}
	  	
	  	
	  
	  }


