var RE_EMAIL  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g, '');
}

String.prototype.ltrim = function() {
	return this.replace(/^\s+/, '');
}

String.prototype.rtrim = function() {
	return this.replace(/\s+$/, '');
}

function sendFeedback() {
	var email = $('emailinput').value;
	email = email.trim();
	if (! RE_EMAIL.test(email)) {
		alert('Please enter a valid email address');
	} else {
			new Ajax.Updater('feedback',
				'control/controller.php', {
					method: 'post',
					postBody: Form.serialize($('feedbackform')),
					asynchronous: false
				}
			);
	}
}

function submitSignup() {
	var email = $('su_email').value;
	email = email.trim();
	if (email == '') {
		alert('Please enter your email address');
	} else {
		if (! RE_EMAIL.test(email)) {
			alert('Please enter a valid email address');
		} else {
			new Ajax.Updater('signup',
				'control/controller.php?action=signup&email='
				+ email, {
					method: 'get',
					asynchronous: false
				}
			);
		}
	}
}

function showPhoto(image) {
	window.open('photos/' + image, '', 'resizable=yes,width=500,height=500');
}

var specialsCount = 0;
var xmlDoc;
var appIndeces = new Array();
var enIndeces = new Array();
var deIndeces = new Array();

function updateFormIndeces() {
	$('appindeces').value = appIndeces.join(',');
	$('enindeces').value = enIndeces.join(',');
	$('deindeces').value = deIndeces.join(',');
}

function getGroupArray(group) {
	var groupArray = null;
	if (group == 'appetizers') {
		groupArray = appIndeces;
	} else if (group == 'entrees') {
		groupArray = enIndeces;
	} else if (group == 'desserts') {
		groupArray = deIndeces;
	} else {
		alert('Illegal group: ' + group);
	}
	return groupArray;
}

function removeNode(nodeIndex, group) {
	var array = getGroupArray(group);
	if (array != null) {
		for (var i = 0; i < array.length; i++) {
			if (array[i] == nodeIndex) {
				array = array.splice(i, 1);
			}
		}
		var node = 'specialsitem-' + nodeIndex;
		$(node).parentNode.removeChild($(node));
		updateFormIndeces();
	}
}

function moveNodeUp(nodeIndex, group) {
	var array = getGroupArray(group);
	if (array != null) {
		for (var i = 1; i < array.length; i++) {
			if (array[i] == nodeIndex) {
				var temp = array[i - 1];
				array[i - 1] = array[i];
				array[i] = temp;

				var theNode = $('specialsitem-' + nodeIndex);
				var prevSib = theNode.previousSibling;
				var parent = theNode.parentNode;
				parent.removeChild(theNode);
				parent.insertBefore(theNode, prevSib);
				updateFormIndeces();
				break;
			}
		}
	}
}

function moveNodeDown(nodeIndex, group) {
	var array = getGroupArray(group);
	if (array != null) {
		for (var i = 0; i < (array.length - 1); i++) {
			if (array[i] == nodeIndex) {
				var temp = array[i + 1];
				array[i + 1] = array[i];
				array[i] = temp;

				var theNode = $('specialsitem-' + nodeIndex);
				var parent = theNode.parentNode;
				var nextSib = theNode.nextSibling;
				parent.removeChild(theNode);
				if (i == array.length - 2) {
					parent.appendChild(theNode);
				} else {
					var nextSib2 = nextSib.nextSibling;
					parent.insertBefore(theNode, nextSib2);
				}
				updateFormIndeces();
				break;
			}
		}
	}
}

function addSpecialsRow(specialsGroup, name, desc, price) {
	specialsGroup = specialsGroup.toLowerCase();
	if (specialsGroup != 'appetizers' && specialsGroup != 'entrees' && specialsGroup != 'desserts') {
		alert('Illegal specials group: ' + specialsGroup);
		return;
	}
	var specialsGroupDiv = 'div-' + specialsGroup;
	if (! $(specialsGroupDiv)) {
		alert('No page element matching specials group name ' + specialsGroup);
		return;
	}
	
	specialsCount++;
	
	var array = getGroupArray(specialsGroup);
	array[array.length] = specialsCount;
	
	var div = document.createElement('div');
	div.setAttribute('id', 'specialsitem-' + specialsCount);
	var nodeHtml = '<input type="hidden" name="specialsgroup-' + specialsCount + '" value="' + specialsGroup + '"/>';
	nodeHtml += '<table border="0"><tr border="1"><td rowspan="3" align="center" valign="center">'
		+ '<a href="javascript: moveNodeUp('
		+ specialsCount
		+ ', \''
		+ specialsGroup
		+ '\');">up</a>'
		+ '<br><a href="javascript: removeNode('
		+ specialsCount
		+ ', \''
		+ specialsGroup
		+ '\');">delete</a>'
		+ '<br><a href="javascript: moveNodeDown('
		+ specialsCount
		+ ', \''
		+ specialsGroup
		+ '\');">down</a>'
		+ '</td><td align="right">Name: </td><td><input type="text" name="name-'
		+ specialsCount
		+ '" value="';
	if (name) {
		nodeHtml += name;
	}
	nodeHtml += '" size="40"></td></tr><tr><td align="right">Description'
		+ '</td><td><input type="text" name="desc-'
		+ specialsCount
		+ '" value="';
	if (desc) {
		nodeHtml += desc;
	}
	nodeHtml += '" size="80"></td></tr><tr><td align="right">Price'
		+ '</td><td><input type="text" name="price-'
		+ specialsCount
		+ '" value="';
	if (price) {
		nodeHtml += price;
	}
	nodeHtml += '" size="5"></td></tr></table>';
	div.innerHTML = nodeHtml;
	$(specialsGroupDiv).appendChild(div);
	
	updateFormIndeces();
}

function loadSpecialsXML(xmlUrl) {
	if (window.ActiveXObject) {
		// code for IE
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		xmlDoc.load(xmlUrl);
		xmlLoaded();
	} else if (document.implementation && document.implementation.createDocument) {
		// code for Mozilla, Firefox, Opera, etc.
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.load(xmlUrl);
		xmlDoc.onload = xmlLoaded;
	} else {
		alert('Your browser cannot handle this script');
	}
}

function xmlLoaded() {
	var groups = xmlDoc.getElementsByTagName("specialsgroup");
	var groupName;
	var items;
	var item;
	for (var i = 0; i < groups.length; i++) {
		groupName = groups[i].getAttribute('name');
		items = groups[i].getElementsByTagName('specialsitem');
		var name, desc, price;
		for (var j = 0; j < items.length; j++) {
			item = items[j];
			name = item.getElementsByTagName('name')[0];
			desc = item.getElementsByTagName('description')[0];
			if (! name.childNodes || name.childNodes.length == 0) { continue; }
			if (! desc.childNodes || desc.childNodes.length == 0) { continue; }
			addSpecialsRow(groupName,
				name.childNodes[0].nodeValue,
				desc.childNodes[0].nodeValue,
				item.getAttribute('price'));
		}
	}
}

function loadDailySpecialsXML(xmlUrl) {
	if (window.ActiveXObject) {
		// code for IE
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		xmlDoc.load(xmlUrl);
		dailyxmlLoaded();
	} else if (document.implementation && document.implementation.createDocument) {
		// code for Mozilla, Firefox, Opera, etc.
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.load(xmlUrl);
		xmlDoc.onload = dailyxmlLoaded;
	} else {
		alert('Your browser cannot handle this script');
	}
}

function dailyxmlLoaded() {
	var days = xmlDoc.getElementsByTagName("dailyitem");
	var dayName;
	for (var i = 0; i < days.length; i++) {
		dayName = days[i].getAttribute('day');
		if (window.ActiveXObject) {
			// ie
			$(dayName).value = days[i].childNodes[0].nodeValue
		} else {
			// non-ie
			$(dayName).value = days[i].textContent;
		}
	}
}

