// Tree

if (!window.console) {
  window.console = { debug: function() {} };
}

Function.prototype.bind = function(target)
{
  var func = this;
  return function() {
    var args = [];
    for (var i = 0; i < arguments.length; ++i)
      args.push(arguments[i]);
    return func.apply(target, args);
  }
}

function $(object)
{
  if (typeof object == 'string')
    return document.getElementById(object);
  else
    return object;
}

Array.prototype.each = function(f)
{
  for (var i = 0; i < this.length; ++i)
    f(this[i]);
}

var Tree = function (urlGetter, commandSink)
{
  if (!urlGetter)
    return;

  this.urlGetter = urlGetter;
  this.commandSink = commandSink;
}

Tree.setEvent = function (element, eventName, handler)
{
  if (element.addEventListener)
    element.addEventListener(eventName, handler, false);
  else if (element.attachEvent)
    element.attachEvent("on" + eventName, handler);
}

Tree.stopEvent = function (event)
{
  if (event.preventDefault) {
    event.preventDefault();
    event.stopPropagation();
  } else {
    event.cancelBubble = true;
    event.returnValue = false;
  }
}

Tree.foldedImage = "folded.gif";
Tree.unfoldedImage = "unfolded.gif";
Tree.leafImage = "leaf.gif";

Tree.lastId = 0;

Tree.getNextId = function ()
{
  return ++Tree.lastId;
}

Tree.setLoadingImage = function (target)
{
  target.__skipLoadingImage = false;
  var src = this.loadingImage;
  var statusImage = target.getElementsByTagName("img")[0];
  setTimeout(
    function ()
    {
      if (!target.__skipLoadingImage)
	statusImage.src = src;
    }, 300);
}

Tree.setImage = function (target, src)
{
  target.__skipLoadingImage = true;
  var statusImage = target.getElementsByTagName("img")[0];
  statusImage.src = src;
}

Tree.buildNode = function (item, tree)
{
  var id = "tree-node-" + this.getNextId();
  var topDiv = document.createElement("div");
  topDiv.className = "tree-node";
  topDiv.id = id;

  var a = document.createElement("a");
  a.href = item.url || "#";
  if (item.target && item.target != "")
    a.target = item.target;

  var statusImage = document.createElement("img");
  statusImage.className = "tree-status";
  statusImage.src = item.subUrl ? Tree.foldedImage : Tree.leafImage;

  var iconImage = document.createElement("img");
  iconImage.className = "tree-icon";
  iconImage.src = item.image;

  a.appendChild(statusImage);
  a.appendChild(iconImage);
  a.appendChild(document.createTextNode(item.name));
  topDiv.appendChild(a);

  if (item.subUrl) {
    topDiv.__desc = item;
    topDiv.__tree = tree;
    this.setEvent(
      a, "click",
      function (e) {
        Tree.toggle(id);
        Tree.stopEvent(e);
      });
  } else if (!a.target || a.target == "")
    this.setEvent(
      a, "click",
      function () {
	this.setLoadingImage(topDiv);
	return true;
      }.bind(this));

  return topDiv;
}

Tree.findTarget = function (element)
{
  element = $(element);
  while (element && element.nodeName != "DIV")
    element = element.parentNode;

  return element;
}

Tree.expand = function (target, cont, skipNotification)
{
  if (target.__loading)
    return;

  console.debug("expand: %o", [target, cont, skipNotification]);
  var cont1 = function () {
    target.__expanded = true;
    var statusImage = target.getElementsByTagName("img")[0];

    var subdivs = target.getElementsByTagName("div");
    if (subdivs.length > 0) {
      this.setImage(target, this.unfoldedImage);
      subdivs[0].style.display = "block";
      target.__loading = false;
      if (cont)
        cont();
    } else {
      target.__tree.urlGetter(
        target.__desc.subUrl,
        function (data) {
          var container = document.createElement("div");
          container.className = "tree-sub";
          this.buildSubtree(
	    data, container, target.__tree,
	    function () {
              target.appendChild(container);
	      target.__loading = false;
	      this.setImage(target, this.unfoldedImage);
	      if (cont)
		cont();
            }.bind(this));
        }.bind(this));
    }
  }.bind(this);

  if (skipNotification)
    cont1();
  else {
    var statusImage = target.getElementsByTagName("img")[0];
    this.setLoadingImage(target);
    target.__loading = true;

    target.__tree.commandSink(
      ["expand", target.__desc.id],
      cont1);
  }
}

Tree.unexpand = function (target)
{
  if (target.__loading)
    return;

  var statusImage = target.getElementsByTagName("img")[0];
  this.setLoadingImage(target);
  target.__loading = true;
  target.__tree.commandSink(
    ["unexpand", target.__desc.id],
    function () {
      target.__loading = false;
      target.__expanded = false;
      this.setImage(target, this.foldedImage);
      target.getElementsByTagName("div")[0].style.display = "none";
    }.bind(this));
}

Tree.toggle = function (target)
{
  target = this.findTarget(target);
  if (target.__loading)
    return;

  if (target.__expanded)
    this.unexpand(target);
  else
    this.expand(target);
}

Tree.buildSubtree = function (data, container, tree, cont)
{
  var toExpand = [];
  data.each(
    function (desc) {
      var node = Tree.buildNode(desc, tree);
      container.appendChild(node);
      if (desc.expanded)
        toExpand.push(node);
    });
  var expandNodeData = function () {
    if (toExpand.length > 0) {
      var node = toExpand.shift();
      Tree.expand(node, expandNodeData, true);
    } else if (cont) {
      cont();
    }
  }
  expandNodeData();
}

Tree.build = function (container, urlGetter, commandSink, url, cont)
{
  container = $(container);
  var img = document.createElement("img");
  img.src = this.loadingImage;
  var textNode = document.createTextNode("Loading...");
  container.appendChild(img);
  container.appendChild(textNode);
	
	 
  urlGetter(
    url,
    function (nodeData) {
      container.innerHTML = "";
      var tree = new Tree(urlGetter, commandSink);
      this.buildSubtree(nodeData, container, tree, cont);
    }.bind(this));
}

var EntTree = {};

EntTree.activeRequest = null;

EntTree.requestRunning = function ()
{
  return this.activeRequest && this.activeRequest.readyState != 0; // FIXME
}

EntTree.startNewRequest = function ()
{
  if (this.requestRunning())
  {
    this.activeRequest.abort();
  }

  try {
    this.activeRequest = new XMLHttpRequest();
  } catch (e) {
    try {
      this.activeRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        this.activeRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        // No XmlHttpRequest 
      }
    }
  }
}

EntTree.sendRequest = function (method, url, cont, needEval)
{     
     var resp = "";
     
     if (url == 'Accounts_Receivable'){
		 resp = [ 	{ name: 'Orders', id: 'Orders', image: 'Images/order.gif', subUrl: 'Orders' }, 
			{ name: 'Invoices', id: 'Invoices', image: 'Images/invoice.gif', subUrl: 'Invoices' },
			{ name: 'Receipts', id: 'Receipts', image: 'Images/receipt.gif', subUrl: 'Receipts' },
			{ name: 'Credits', id: 'Credits', image: 'Images/credit.gif', subUrl: 'Credits' },
			{ name: 'Process', id: 'Process', image: 'Images/order.gif', subUrl: 'Process' } ]
     }
     
		if (url == 'Orders'){
			resp = [ 	{ name: 'Orders List', image: 'Images/order.gif', 		url: './receivables/openorders.php?dep=0&advance=0', target: 'content-iframe' }, 
				{ name: 'Add New Order', image: 'Images/order.gif', 	url: './receivables/createorders.php?formstate=addnew', target: 'content-iframe' } ]
		}

		if (url == 'Invoices'){
			resp = [ 	{ name: 'Invoices List', image: 'Images/invoice.gif', 	url: './receivables/invoices.php?dep=0&advance=0', target: 'content-iframe' }, 
				{ name: 'Add New Invoice', image: 'Images/invoice.gif', 	url: './receivables/createinvoices.php?formstate=addnew', target: 'content-iframe' } ]
		}

		if (url == 'Receipts'){
			resp = [ 	{ name: 'Receipts List', image: 'Images/receipt.gif', 	url: './receivables/cpayments.php?dep=0&advance=0', target: 'content-iframe' }, 
				{ name: 'Accept Receipt', image: 'Images/receipt.gif', 	url: './receivables/customerpayments.php', target: 'content-iframe' } ]
		}

		if (url == 'Credits'){
			resp = [ 	{ name: 'Credit List', image: 'Images/credit.gif', 		url: './receivables/ccredits.php?dep=0&advance=0', target: 'content-iframe' }, 
				{ name: 'Issue Credit', image: 'Images/credit.gif', 		url: './receivables/customercredits.php?formstate=addnew', target: 'content-iframe' } ]
		}

		if (url == 'Process'){
			resp = [ 	{ name: 'Pick', image: 'Images/pick.gif', 			url: './receivables/pickorders.php?dep=0&advance=0', target: 'content-iframe' }, 
				{ name: 'Ship', image: 'Images/truck.gif', 			url: './receivables/shiporders.php?dep=0&advance=0', target: 'content-iframe' },
				{ name: 'Auto Ship', image: 'Images/truck.gif', 		url: './receivables/autoshiporders.php', target: 'content-iframe' },
				{ name: 'Bill Orders', image: 'Images/order.gif', 		url: './receivables/billorders.php?dep=0&advance=0', target: 'content-iframe' },
				{ name: 'Billed Not Shipped', image: 'Images/order.gif', 	url: './receivables/billedorders.php?dep=0&advance=0', target: 'content-iframe' },
				{ name: 'Shipped Not Invoiced', image: 'Images/order.gif', 	url: './receivables/shipnotinvoice.php?PageTitle=Close+Period', target: 'content-iframe' },
				{ name: 'Invoice All Shipments', image: 'Images/order.gif',	url: './receivables/invoiceallshipments.php?PageTitle=Close+Period', target: 'content-iframe' },
				{ name: 'Billing Report', image: 'Images/order.gif', 		url: './receivables/billingreport.php?dep=0&advance=0', target: 'content-iframe' },
				{ name: 'Backorders', image: 'Images/order.gif', 		url: './receivables/backorders.php', target: 'content-iframe' } ]
		}

     if (url == 'Accounts_Payable'){
		 resp = [ 	{ name: 'Purchases', id: 'Purchases', image: 'Images/purchase.gif', subUrl: 'Purchases' }, 
			{ name: 'Vouchers', id: 'Vouchers', image: 'Images/voucher.gif', subUrl: 'Vouchers' },
			{ name: 'Payments', id: 'Payments', image: 'Images/payment.gif', subUrl: 'Payments' },
			{ name: 'Checks', id: 'Checks', image: 'Images/check.gif', subUrl: 'Checks' },
			{ name: 'Employees', id: 'Employees', image: 'Images/people.gif', subUrl: 'Employees' } ]
     }
     
		if (url == 'Purchases'){
			resp = [ 	{ name: 'Purchases List', image: 'Images/purchase.gif', 	url: './payables/openpo.php', target: 'content-iframe' }, 
				{ name: 'Add New Purchase', image: 'Images/purchase.gif', 	url: './payables/enterpurchaseorders.php', target: 'content-iframe' }, 
				{ name: 'Receive Purchases', image: 'Images/purchase.gif', 	url: './payables/receivepo.php', target: 'content-iframe' } ]
		}

		if (url == 'Vouchers'){
			resp = [ 	{ name: 'Vouchers List', image: 'Images/voucher.gif', 	url: './payables/vouchers.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Add New Voucher', image: 'Images/voucher.gif', 	url: './payables/entervouchers.php', target: 'content-iframe' } ]
		}

		if (url == 'Payments'){
			resp = [ 	{ name: 'Payments List', image: 'Images/payment.gif', 	url: './payables/billpayments.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Add new Payment', image: 'Images/payment.gif', 	url: './payables/makebillpayment.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Pay Multiple Vendors', image: 'Images/payment.gif',	url: './payables/paymultiplevendors.php?PageTitle=Translation+Table', target: 'content-iframe' } ]
		}

		if (url == 'Checks'){
			resp = [ 	{ name: 'Checks List', image: 'Images/check.gif', 		url: './payables/checks.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Add New Check', image: 'Images/check.gif', 	url: './payables/writechecks.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Print Checks', image: 'Images/check.gif', 		url: './payables/printchecks.php?PageTitle=Translation+Table', target: 'content-iframe' } ]
		}

		if (url == 'Employees'){
			resp = [ 	{ name: 'Employees List', image: 'Images/people.gif', 	url: './setup/employees.php', target: 'content-iframe' }, 
				{ name: 'Pay Employees', image: 'Images/people.gif', 	url: './payables/payemployees.php?PageTitle=Close+Year', target: 'content-iframe' } ]
		}


     if (url == 'General_Ledger'){
		 resp = [ 	{ name: 'Accounts', id: 'Accounts', image: 'Images/accounts.gif', subUrl: 'Accounts' }, 
			{ name: 'Entries', id: 'Entries', image: 'Images/entries.gif', subUrl: 'Entries' },
			{ name: 'Transfers', id: 'Transfers', image: 'Images/accounts.gif', subUrl: 'Transfers' },
			{ name: 'Adjustments', id: 'Adjustments', image: 'Images/adjustments.gif', subUrl: 'Adjustments' },
			{ name: 'Transactions', id: 'Transactions', image: 'Images/transactions.gif', subUrl: 'Transactions' } ]
     }
     
		if (url == 'Accounts'){
			resp = [ 	{ name: 'Account Summary', image: 'Images/accounts.gif', 	url: './ledger/summaryscreen.php', target: 'content-iframe' }, 
				{ name: 'Account List', image: 'Images/accounts.gif', 	url: './ledger/accounts.php', target: 'content-iframe' }, 
				{ name: 'Add New Account', image: 'Images/accounts.gif', 	url: './ledger/newaccount.php', target: 'content-iframe' }, 
				{ name: 'Reconcilation', image: 'Images/accounts.gif', 	url: './ledger/reconcile.php', target: 'content-iframe' }, 
				{ name: 'Open Balances', image: 'Images/accounts.gif', 	url: './ledger/enteropeningbalances.php', target: 'content-iframe' } ]
		}

		if (url == 'Entries'){
			resp = [ 	{ name: 'Entries List', image: 'Images/entries.gif', 		url: './ledger/journalentries.php', target: 'content-iframe' }, 
				{ name: 'Add New Entry', image: 'Images/entries.gif', 	url: './ledger/makejournalentries.php', target: 'content-iframe' } ]
		}

		if (url == 'Transfers'){
			resp = [ 	{ name: 'Transfer List', image: 'Images/accounts.gif', 	url: './ledger/transfers.php', target: 'content-iframe' }, 
				{ name: 'Enter Transfer', image: 'Images/accounts.gif',url: './ledger/transferfunds.php?PageTitle=Translation+Table', target: 'content-iframe' } ]
		}

		if (url == 'Adjustments'){
			resp = [ 	{ name: 'Adjustments List', image: 'Images/adjustments.gif', 	url: './ledger/inventoryadjustments.php', target: 'content-iframe' }, 
				{ name: 'Enter Adjustment', image: 'Images/adjustments.gif', 	url: './ledger/inventoryadjustment.php', target: 'content-iframe' } ]
		}

		if (url == 'Transactions'){
			resp = [ 	{ name: 'Transactions List', image: 'Images/transactions.gif',	url: './ledger/listtransactions.php', target: 'content-iframe' }, 
				{ name: 'Search', image: 'Images/transactions.gif',	 	url: './ledger/findtransactions.php', target: 'content-iframe' } ]
		}

 
     if (url == 'System_Setup'){
		 resp = [ 	{ name: 'Company', id: 'Company', image: 'Images/Setup.gif', subUrl: 'Company' }, 
			{ name: 'Receivables', id: 'Receivables', image: 'Images/Accounts_Receivable.gif', subUrl: 'Receivables' },
			{ name: 'Payables', id: 'Payables', image: 'Images/Accounts_Payable.gif', subUrl: 'Payables' },
			{ name: 'Ledger', id: 'Ledger', image: 'Images/general_ledger.gif', subUrl: 'Ledger' },
			{ name: 'Users', id: 'Users', image: 'Images/people.gif', subUrl: 'Users' } ]
     }
     
		if (url == 'Company'){
			resp = [ 	{ name: 'Company Setup', image: 'Images/accounts.gif', 		url: './setup/companyinformation.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Terms', image: 'Images/accounts.gif', 			        subUrl: 'Terms' },				
				{ name: 'Projects', image: 'Images/accounts.gif', 			subUrl: 'Projects' }, 
				{ name: 'Classes', image: 'Images/accounts.gif', 			        subUrl: 'Classes' },				
				{ name: 'Messages', image: 'Images/accounts.gif', 			subUrl: 'Messages' },
				{ name: 'Memorized', image: 'Images/accounts.gif', 			        subUrl: 'Memorized' }]
		}
                       if (url == 'Terms'){
			resp = [ 	{ name: 'Terms list', image: 'Images/accounts.gif', 		url: './setup/terms.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'New Terms', image: 'Images/accounts.gif', 			url: './setup/term.php?PageTitle=Unlock', target: 'content-iframe' } ]
				 
		       }
		       
		       if (url == 'Projects'){
			resp = [ 	{ name: 'Projects list', image: 'Images/accounts.gif', 		url: './setup/projects.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'New Projects', image: 'Images/accounts.gif', 			url: './setup/newproject.php?PageTitle=Unlock', target: 'content-iframe' } ]
				 
		       }
		       if (url == 'Classes'){
			resp = [ 	{ name: 'Class list', image: 'Images/accounts.gif', 		url: './setup/classes.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'New Class', image: 'Images/accounts.gif', 			url: './setup/newclass.php?PageTitle=Unlock', target: 'content-iframe' } ]
				 
		       }
		       
		       if (url == 'Messages'){
			resp = [ 	{ name: 'Message list', image: 'Images/accounts.gif', 		url: './setup/customermessages.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'New Message', image: 'Images/accounts.gif', 			url: './setup/customermessage.php?PageTitle=Unlock', target: 'content-iframe' } ]
				 
		       } 
		       if (url == 'Memorized'){
			resp = [ 	{ name: 'Memorize list', image: 'Images/accounts.gif', 		url: './setup/memorizedtransactions.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'New Memorize', image: 'Images/accounts.gif', 			url: './setup/newmemorize.php?PageTitle=Unlock', target: 'content-iframe' } ]
				 
		       } 
		if (url == 'Receivables'){
			resp = [ 	{ name: 'Customers', image: 'Images/customers.gif', 		subUrl: 'Customers' }, 
				{ name: 'Customer Types', image: 'Images/customers.gif', 		subUrl: 'Customer Types' }, 
				{ name: 'Items', image: 'Images/item.gif', 				subUrl: 'Items' }, 
				{ name: 'Non-Stock Items', image: 'Images/item.gif',		        subUrl: 'Non-Stock Items' }, 
				{ name: 'Service Items', image: 'Images/item.gif', 			subUrl: 'Service Items'}, 
				{ name: 'Item Families', image: 'Images/item.gif', 			subUrl: 'Item Families' }, 
				{ name: 'Item Categories', image: 'Images/item.gif', 		        subUrl: 'Item Categories' }, 
				{ name: 'Taxes', image: 'Images/tax_tables.gif', 			subUrl: 'Taxes' }, 
				{ name: 'Tax Groups', image: 'Images/tax_tables.gif', 		        subUrl: 'Tax Groups' }, 
				{ name: 'Shipment Types', image: 'Images/accounts.gif', 		subUrl: 'Shipment Types' } ]
		}
                       if (url == 'Customers'){
			       resp = [ 	{ name: 'Customers list', image: 'Images/vendors.gif', 			url: './setup/customers.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Customer', image: 'Images/vendors.gif', 		url: './setup/newcustomer.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Customer Types'){
			       resp = [ 	{ name: 'Customer Types list', image: 'Images/vendors.gif', 			url: './setup/customertypes.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Customer Type', image: 'Images/vendors.gif', 		url: './setup/customertype.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Items'){
			       resp = [ 	{ name: 'Items list', image: 'Images/vendors.gif', 			url: './setup/inventoryparts.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Item', image: 'Images/vendors.gif', 		url: './setup/inventorypart.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Non-Stock Items'){
			       resp = [ 	{ name: 'Non Stock list', image: 'Images/vendors.gif', 			url: './setup/noninventoryparts.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Non-Stock', image: 'Images/vendors.gif', 		url: './setup/noninventorypart.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Service Items'){
			       resp = [ 	{ name: 'Service list', image: 'Images/vendors.gif', 			url: './setup/services.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Service', image: 'Images/vendors.gif', 		url: './setup/service.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Item Families'){
			       resp = [ 	{ name: 'Family list', image: 'Images/vendors.gif', 			url: './setup/families.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Family', image: 'Images/vendors.gif', 		url: './setup/newfamily.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Item Categories'){
			       resp = [ 	{ name: 'Categories list', image: 'Images/vendors.gif', 			url: './setup/categories.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Category', image: 'Images/vendors.gif', 		url: './setup/newcategory.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Taxes'){
			       resp = [ 	{ name: 'Taxes list', image: 'Images/vendors.gif', 			url: './setup/taxes.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New tax', image: 'Images/vendors.gif', 		url: './setup/newtax.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Tax Groups'){
			       resp = [ 	{ name: 'Tax Groups list', image: 'Images/vendors.gif', 			url: './setup/taxgroups.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Tax Group', image: 'Images/vendors.gif', 		url: './setup/newtaxgroup.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		       if (url == 'Shipment Types'){
			       resp = [ 	{ name: 'Shipment Types list', image: 'Images/vendors.gif', 			url: './setup/shippingmethods.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Shipment Type', image: 'Images/vendors.gif', 		url: './setup/shippingmethod.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       }
		      
		if (url == 'Payables'){
			resp = [ 	{ name: 'Vendors', image: 'Images/vendors.gif', 			subUrl: 'Vendors' }, 
				{ name: 'Vendor Types', image: 'Images/vendors.gif', 		subUrl: 'Vendor Types'}, 
				{ name: 'Payment Types', image: 'Images/payment.gif',		subUrl: 'Payment Types' } ]
		}
		       if (url == 'Vendors'){
			       resp = [ 	{ name: 'Vendors list', image: 'Images/vendors.gif', 			url: './setup/vendors.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Vendor', image: 'Images/vendors.gif', 		url: './setup/newvendor.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       } 
                        if (url == 'Vendor Types'){
			       resp = [ 	{ name: 'Vendor Types list', image: 'Images/vendors.gif', 			url: './setup/vendortypes.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Vendor Type', image: 'Images/vendors.gif', 		url: './setup/vendortype.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       } 
		       if (url == 'Payment Types'){
			       resp = [ 	{ name: 'Payment Types list', image: 'Images/vendors.gif', 			url: './setup/paymentmethods.php?PageTitle=Unlock', target: 'content-iframe' }, 
				    { name: 'New Payment Type', image: 'Images/vendors.gif', 		url: './setup/paymentmethod.php?PageTitle=Unlock', target: 'content-iframe' } ]
		       } 
		if (url == 'Ledger'){
			resp = [ 	{ name: 'Account List', image: 'Images/general_ledger.gif', 		url: './ledger/accounts.php?PageTitle=Unlock', target: 'content-iframe' }, 
				{ name: 'Add New Account', image: 'Images/general_ledger.gif', 	url: './ledger/newaccount.php?PageTitle=Translation+Table', target: 'content-iframe' } ]
		}

		if (url == 'Users'){
			resp = [ 	{ name: 'Users List', image: 'Images/people.gif', 			url: './setup/users.php?PageTitle=Close+Period', target: 'content-iframe' }, 
				{ name: 'Add New User', image: 'Images/people.gif', 		url: './setup/newuser.php?PageTitle=Close+Year', target: 'content-iframe' } ]
		}  

     if (url == 'Reports'){
	resp = [ 	{ name: 'Chart Of Accounts', image: './Images/accounts.gif', url: './reports/chartofaccounts.php', target: 'content-iframe'  }, 
		 	{ name: 'G/L By Account', image: './Images/accounts.gif', url: './reports/generalledger.php', target: 'content-iframe'  }, 
		 	{ name: 'G/L By Date', image: './Images/accounts.gif', url: './reports/generalledgerdate.php', target: 'content-iframe'  }, 
		 	{ name: 'Check Register', image: './Images/accounts.gif', url: './reports/checkregister.php', target: 'content-iframe'  }, 
		 	{ name: 'A/R Aging Detail', image: './Images/accounts.gif', url: './reports/aragingdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'A/R Register', image: './Images/accounts.gif', url: './reports/arregister.php', target: 'content-iframe'  }, 
		 	{ name: 'Item Sales', image: './Images/accounts.gif', url: './reports/salesbyitemsummary.php', target: 'content-iframe'  }, 
		 	{ name: 'Item Sales Detail', image: './Images/accounts.gif', url: './reports/salesbyitemdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'Customer Sales', image: './Images/accounts.gif', url: './reports/salesbycustomersummary.php', target: 'content-iframe'  }, 
		 	{ name: 'Customer Sales Detail', image: './Images/accounts.gif', url: './reports/salesbycustomerdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'Customer Profitability', image: './Images/accounts.gif', url: './reports/profitabilitybycustomerdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'Item Profitability', image: './Images/accounts.gif', url: './reports/profitabilitybyitemdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'Open Invoices', image: './Images/accounts.gif', url: './reports/openinvoices.php', target: 'content-iframe'  }, 
		 	{ name: 'Customer List', image: './Images/accounts.gif', url: './reports/customerlistreport.php', target: 'content-iframe'  }, 
		 	{ name: 'Project List', image: './Images/accounts.gif', url: './reports/projectlist.php', target: 'content-iframe'  }, 
		 	{ name: 'Item List', image: './Images/accounts.gif', url: './reports/itemlistreport.php', target: 'content-iframe'  }, 
		 	{ name: 'A/P Aging Detail', image: './Images/accounts.gif', url: './reports/apagingdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'A/P Register', image: './Images/accounts.gif', url: './reports/apregister.php', target: 'content-iframe'  }, 
		 	{ name: 'Item Purchase', image: './Images/accounts.gif', url: './reports/salesbyitemsummary.php', target: 'content-iframe'  }, 
		 	{ name: 'Item Purchase Detail', image: './Images/accounts.gif', url: './reports/salesbyitemdetail.php', target: 'content-iframe'  }, 
		 	{ name: 'Vendor Purchase', image: './Images/accounts.gif', url: './reports/purchasesummarybyvendor.php', target: 'content-iframe'  }, 
		 	{ name: 'Vendor Purchase Detail', image: './Images/accounts.gif', url: './reports/purchasedetailbyvendor.php', target: 'content-iframe'  }, 
		 	{ name: 'Vendor List', image: './Images/accounts.gif', url: './reports/vendorlistreport.php', target: 'content-iframe'  }, 
		 	{ name: 'Open Purchase Orders', image: './Images/accounts.gif', url: './reports/openpo.php', target: 'content-iframe'  }, 
		 	{ name: 'Tax Authorities', image: './Images/accounts.gif', url: './reports/taxauth.php', target: 'content-iframe'  }, 
		 	{ name: 'Tax Groups', image: './Images/accounts.gif', url: './reports/taxgroups.php', target: 'content-iframe'  }, 
		 	{ name: 'Sales Tax', image: './Images/accounts.gif', url: './reports/salestax.php', target: 'content-iframe'  }, 
		 	{ name: 'Employee List', image: './Images/accounts.gif', url: './setup/employees.php', target: 'content-iframe'  }, 
		 	{ name: 'Commission Report', image: './Images/accounts.gif', url: './reports/commissionreport.php', target: 'content-iframe'  }, 
		 	{ name: 'Time Detail', image: './Images/accounts.gif', url: './reports/timedetail.php', target: 'content-iframe'  }, 
		 	{ name: 'Time Summary', image: './Images/accounts.gif', url: './reports/timesummary.php', target: 'content-iframe'  } ]
     }


      if (url == 'Shopping_Cart'){
	     resp = [ { name: 'Open Cart', image: 'Images/book.gif', url: './shoppingcart/index.php', target: '_blank' } ]
     }

     if (url == 'Help'){
	     resp = [ { name: 'Help System', image: 'Images/shipping.gif', url: './help/help.php', target: '_blank' } ]
     }
		
 
        if (needEval)
          cont(eval(resp));
        else
          cont();
 
      this.startQueueChecker();
 
}

EntTree.queue = [];

EntTree.dequeue = function ()
{
  return this.queue.shift();
}

EntTree.enqueue = function (item)
{
  this.queue.push(item);
  this.checkQueue();
}

EntTree.checkQueue = function ()
{
  if (this.requestRunning())
    return;

  var func = this.dequeue();
  if (func)
    func();
}

EntTree.startQueueChecker = function ()
{
  this.startQueueChecker = this.checkQueue;
  this.checkQueue();
  setInterval(this.checkQueue.bind(this), 300);
}

EntTree.urlGetter = function (url, cont)
{
  this.enqueue(
    function () {
      this.sendRequest("POST", url, cont, true);
    }.bind(this));
}.bind(EntTree);

EntTree.acceptCommand = function (command, cont)
{
  console.debug("acceptCommand: %s", command);
  this.enqueue(
    function () {
      this.sendRequest("POST", this.commandBase + command[0] + "=" + command[1], cont, false);
    }.bind(this));
}.bind(EntTree);

EntTree.build = function (container, url, cont)
{
  return Tree.build(container, this.urlGetter, this.acceptCommand, url,
    function () {  $(container).__loaded = true; if (cont) cont(); });
}

EntTree.isLoaded = function (container)
{
  return $(container).__loaded || false;
}

EntTree.ensureNavPageLoaded = function (treeDiv, nodeUrl, nodeId)
{
  if (!this.isLoaded(treeDiv)) {
    this.build(treeDiv, nodeUrl, function () {
      this.acceptCommand(['select', nodeId], function() {});
    }.bind(this));
  }
}

EntTree.commandBase = "Menu.ashx?";

EntTree.setBase = function(newBase, reports)
{
  // this.commandBase = newBase + "/Menu.ashx?";
  this.commandBase = newBase;
  if (reports)
    this.commandBase += "reports=1&";
  Tree.foldedImage = newBase + "Images/folded.gif";
  Tree.unfoldedImage = newBase + "Images/unfolded.gif";
  Tree.leafImage = newBase + "Images/leaf.gif";
  Tree.loadingImage = newBase + "Images/loading_indicator.gif";
}
