var xmlhttp;
var xmlDoc;
var sectionspercolumn  = [];
var itemspersection    = [];
var menuitems          = [];
var sections           = [];
var ncols;
var nsecs;
var nitems;
var ot = [];


function getXMLHttpRequest()
{
  if (window.XMLHttpRequest)
  {
	  // code for IE7+, Firefox, Chrome, Opera, Safari
    return new XMLHttpRequest();
  }
  if(window.ActiveXObject)
  {
	  // code for IE6, IE5
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
	return null;
}

function getFile()
{
  xmlhttp = getXMLHttpRequest();
  if(xmlhttp == null)
	{
	   alert("XMLHttp not supported");
		 return null;
	}
	/*var url = "file:///U:/Users/rthomas/web/sa/scripts/sa_menu.xml";*/
	var url = "scripts/sa_menu.xml";
	
  xmlhttp.open("GET",url,false);
  xmlhttp.send();
  return xmlhttp.responseXML;
}

function loadMenu()
{
  xmlDoc = getFile();

	createOpeningTimes();
	createMenuArray();
}

function createMenuArray()
{
	sectionspercolumn  = getSectionsPerColumn();
	itemspersection    = getItemsPerSection();
	ncols              = sectionspercolumn.length;
	nsecs              = itemspersection.length;
	menuitems          = xmlDoc.getElementsByTagName("menu_item");
	sections           = xmlDoc.getElementsByTagName("menu_section");
	nitems             = menuitems.length;
	var temp;
	var text;
	var sectionname;
	var colname ="";
	var currentitem    = 0;
	var currentsection = 0;
	for(i=0;i<ncols;i++)
	{
	  text=""; /* text for single full column */
		sectionname = "";
	  for (j=0;j<sectionspercolumn[i];j++)
		{		  
		  sectionname = sections[currentsection].getAttribute("name");
			if(sectionname != "")
		    text += formatMenuSection(sectionname);
      for(k=0;k<itemspersection[currentsection];k++)
      {  
	      text += '<div class="mitem">'; 
		    temp = getFirstChild(menuitems[currentitem]); 
				text += getMenuItem(temp);
	      text+='</div>';
			  currentitem++;
	    }	
			currentsection++;	
	  }
		colname = "menucol"+(i+1); 
    document.getElementById(colname).innerHTML = text;
  }
}

function getMenuItem(node)
{
	var title = "";
	var desc  = "";
	var price = "";
	var flag  = 0;
	
  if(isDefined(node.childNodes[0]))   /* title */
	{
		title = node.childNodes[0].nodeValue;  
		flag += 10;
	}
  node = getNextSibling(node);        /* description */
	if(isDefined(node.childNodes[0]))
	{
	  desc = node.childNodes[0].nodeValue;
		flag += 1;
	}
	node = getNextSibling(node);
	if(isDefined(node.childNodes[0]))
	  price = node.childNodes[0].nodeValue;
	return formatMenuItem(title,desc,price,flag);
}

function formatMenuItem(title,desc,price,flag)
{
  var text = "";
	
  if(price != "") /* ie there is a price */
    price = formatPrice(price);
  switch(flag)
	{
	  case 11: /* title & description */
		  if(price != "")
		    title += price;
		  text  = formatTitle(title);
		  text += formatDescription(desc,false);
		break; 
		case 10: /* title only */
		  if(price != "")
		    title += price;
		  text  = formatTitle(title);
	  break;
		case 1: /* description only */
		  if(price != "")
		    desc += price;		  
		  text += formatDescription(desc,true);
		break; 
		default:
		break; 
	}
	return text;
}

function isDefined(n)
{
  if(n == undefined)
	  return false;
	else
	  return true;
}

function getSectionsPerColumn()
{
  var menucolumns = [];
  var items = [];
	
  var y = 0;
  menucolumns = xmlDoc.getElementsByTagName("menu_column");
	n = menucolumns.length;
	for(i=0;i<n;i++)
	{
	  var x = menucolumns[i].childNodes;
		y = 0;
		for(j=0;j<x.length;j++)
		{
		  if(x[j].nodeType == 1)
		  y++
		}
		items[i] = y;
	}
	return items;
}

function getItemsPerSection()
{
  var menucolumns = [];
  var items = [];
	
  var y = 0;
  menusections = xmlDoc.documentElement.getElementsByTagName("menu_section");
	n = menusections.length;
	for(i=0;i<n;i++)
	{
	  var x = menusections[i].childNodes;
		
		y = 0;
		for(j=0;j<x.length;j++)
		{
		  if(x[j].nodeType == 1)
		    y++;
		}
		items[i] = y;
	}
	return items;
}

function getFirstChild(node)
{
  var first = node.firstChild;
  while(first.nodeType !=1 )
  {
    first = first.nextSibling;
  }
  return first;
}

function getNextSibling(node)
{
  var next = node.nextSibling;
  while(next.nodeType !=1 )
  {
    next = next.nextSibling;
  }
  return next;
}

function formatMenuSection(sectionname)
{
  var text = "";
	
	text += '<p class="msection">';
	text += sectionname;
	text += '</p>';
	return text;
}

function formatTitle(title)
{
  var text = "";
	text += '<p class="title">';
	text += title;
	text += '</p>';
	return text;
}

function formatDescription(desc,nar)
{
  var text = "";
	text += '<p class="desc">'; /* if there's a description but no title reduce spacing between items */ 
	if(nar)
	  text += '<span class="narrow">';
	text += desc;
	if(nar)
	  text += '</span>';
	text += '</p>';
	return text;
}

function formatPrice(price)
{
  var text = " £"; /* need space at start */
	
	var pos = price.indexOf('.');
	text += price.substring(0,pos);
	text += '<span class="super">'; /* need space at start */
	text += price.substring(pos+1,pos+3);
	text += '</span>';

	return text;
}


function createOpeningTimes()
{
  ot = xmlDoc.getElementsByTagName("opening_times");
	var temp = getFirstChild(ot[0]); /* only 1 opening_times */

  var text = formatOpeningTimes(temp);
	document.getElementById("otimes").innerHTML = text;
}

function formatOpeningTimes(temp)
{
  var text = '<table summary="" class="ot"><tr>';
  if(isDefined(temp.childNodes[0]))
	  text += formatLunch(temp.childNodes[0]);
	temp = getNextSibling(temp);
	  text += formatEvening(temp.childNodes[0]);
  temp = getNextSibling(temp);
	  text += formatSat(temp.childNodes[0]);
	text += '</table>';
		return text;
}

function formatLunch(node)
{
  var text = '<td class="timeshdr">Lunch</td><td>';
	text += node.nodeValue;
	text += '</td></tr>';
	return text;
}

function formatEvening(node)
{
  var text = '<td class="timeshdr">Evenings</td><td>';
	text += node.nodeValue;
	text += '</td></tr>';
	return text;
}

function formatSat(node)
{
  var text = '<td class="timeshdr">Saturday</td><td>';
	text += node.nodeValue;
	text += '</td></tr>';
	return text;
}
