var http = null;
var cache = Array();

function $(e) { return document.getElementById(e); }

function showLoader(target) {
	if(!$('loadimage')) {
		loadImg = document.createElement('img');
		loadImg.src = "img/loader.gif";
		loadImg.alt = "Loading...";
		loadImg.className = "loader";
		loadImg.id = "loadimage";
		$(target).appendChild(loadImg);
	}
}

/*
## Hides the loading gif
*/
function hideLoader(target) {
	if($('loadimage')) {
		loadImg = $('loadimage');
		$(target).removeChild(loadImg);
	}
}

/*
## Takes cookie information and serializes it
*/

function request() {
	var newRequest = null;
	if(window.XMLHttpRequest) {
		try {
			newRequest = new XMLHttpRequest();
		} catch(e) {
			newRequest = false;
		}
	} else if(window.ActiveXObject) {
		try {
			newRequest = new ActiveXObject("MSxm12.XMLHTTP");
		} catch(e) {
			try {
				newRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				newRequest = false;
			}
		}
	}
	return newRequest;
}

function prepare(id) {
	messageCheck();
	if(!cache[id]) {
		params = "ajax=1&action=prepare&item="+id;

		if(!http || http.readyState == 4 || http.readyState == 0) {
			http = request();
			http.open("POST", "ordering.php", true);
			http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			http.setRequestHeader("Content-length", params.length);
			http.setRequestHeader("Connection", "close");
			http.onreadystatechange = function() { 
										if(http.readyState == 4) {
											cache[id]=http.responseText
											hideLoader('prepare');
											temp = $('prepare').getElementsByTagName('strong')[0];
											tempText = temp.innerHTML;
											temp.className = 'hidden';
											
											$('prepare').innerHTML = "";
											temp.innerHTML = tempText;
											$('prepare').appendChild(temp);
											$('prepare').innerHTML += cache[id];
										} else {
											showLoader('prepare');	
										}
									  };
			http.send(params);
		}
	} else {
		temp = $('prepare').getElementsByTagName('strong')[0];
		tempText = temp.innerHTML;
		temp.className = 'hidden';
		
		$('prepare').innerHTML = "";
		temp.innerHTML = tempText;
		$('prepare').appendChild(temp);
		$('prepare').innerHTML += cache[id];	
	}
}

function addItem(formData) {
	messageCheck();
	params = parseForm(formData) + 'ajax=1';

	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										hideLoader('prepare');
										closePrep();
										updateSidebar(http.responseText);
									} else {
										showLoader('prepare');	
									}
								  };
		http.send(params);
	} else {
		return false;	
	}
}

function removeItem(id) {
	messageCheck();
	params = "ajax=1&action=remove&id="+id;
	
	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										hideLoader('sidebar');
										updateSidebar(http.responseText);
									} else {
										showLoader('sidebar');
									}
								  };
		http.send(params);
	} else {
		return false	
	}
}

function emptyCart() {
	if(!$('empty')) {
		messageCheck();
		params = "ajax=1&action=empty";
		
		if(!http || http.readyState == 4 || http.readyState == 0) {
			http = request();
			http.open("POST", "ordering.php", true);
			http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			http.setRequestHeader("Content-length", params.length);
			http.setRequestHeader("Connection", "close");
			http.onreadystatechange = function() { 
										if(http.readyState == 4) {
											hideLoader('sidebar');
											updateSidebar(http.responseText);
										} else {
											showLoader('sidebar');
										}
									  };
			http.send(params);
		} else {
			return false;	
		}
	}
}

function addCoupon(formData) {
	messageCheck();
	params = parseForm(formData) + 'ajax=1';
	
	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();	
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										hideLoader('sidebar');
										if(http.responseText != "false") {
											updateSidebar(http.responseText);
										} else {
											errorText("content", "phone", "Sorry, but that coupon is not valid for your order. Please make sure you entered the PLU in correctly, and that an item in your cart matches the criteria on the coupon");
										}
									} else {
										showLoader('sidebar');	
									}
								  };
		http.send(params);
	} else {
		return false;	
	}
}

function removeCoupon() {
	messageCheck();
	params = 'action=remove_coupon&ajax=1';

	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();	
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										hideLoader('sidebar');
										updateSidebar(http.responseText);
									} else {
										showLoader('sidebar');	
									}
								  };
		http.send(params);
	} else {
		return false;	
	}
}

function updateDelivery(input, kitchen) {
	messageCheck();
	if(!kitchen) {
		params = 'method='+input.value+'&ajax=1&action=delivery';
	} else {
		params = 'kitchen='+input.value+'&ajax=1&action=delivery';
	}
	
	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();	
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										hideLoader('sidebar');
										updateSidebar(http.responseText);
									} else {
										showLoader('sidebar');	
									}
								  };
		http.send(params);
	} else {
		return false;	
	}	
}

function openCheckout() {
	params = 'action=checkout&ajax=1';
	
	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();	
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										disableSidebar();
										hideLoader('container');
										$('content').className = 'hidden';
										$('container').innerHTML += http.responseText;
									} else {
										showLoader('container');
									}
								  };
		http.send(params);
	} else {
		return false;	
	}
}

function closeCheckout(formData) {
	params = parseForm(formData) + 'action=change&ajax=1';
	
	if(!http || http.readyState == 4 || http.readyState == 0) {
		http = request();	
		http.open("POST", "ordering.php", true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function() { 
									if(http.readyState == 4) {
										enableSidebar();
										hideLoader('container');
										$('content').className = '';
										// $('checkout-container').className = 'hidden';
										$('container').removeChild($('checkout-container'));
									} else {
										showLoader('container');	
									}
								  };
		http.send(params);
	} else {
		return false;	
	}
}

function placeOrder(formData) {
	if(validateCheckout()) {
		params = parseForm(formData) + 'action=place&ajax=1';
		if(!http || http.readyState == 4 || http.readyState == 0) {
			http = request();	
			http.open("POST", "ordering.php", true);
			http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			http.setRequestHeader("Content-length", params.length);
			http.setRequestHeader("Connection", "close");
			http.onreadystatechange = function() { 
										if(http.readyState == 4) {
											hideLoader('container');
											
											if(http.responseText.substr(0, 16) != "failedValidation") {
												updateSidebar(http.responseText);
												$('content').className = '';
												$('container').removeChild($('checkout-container'));
												if($('order-success')) {
													successText('content', 'prepare', $('order-success').innerHTML);
													$('main').removeChild($('order-success'));
												} else if($('order-error')) {
													errorText('content', 'prepare', $('order-error').innerHTML);
													$('main').removeChild($('order-error'));
												}
											} else {
												response = http.responseText.substr(16);
												$('container').removeChild($('checkout-container'));
												$('container').innerHTML += response;
											}
										} else {
											showLoader('container');	
										}
									  };
			http.send(params);
		} else {
			return false;	
		}
	} else {
		errorText("checkout-container", "checkoutForm", "You've got some errors.");
		return false;
	}
}

function validateCheckout() {
	formElements = $('checkoutForm').elements;
	numElements = formElements.length;
	numErrors = 0;
	
	for(var i = 0; i < numElements; i++) {
		if(formElements[i].type == "text") {
			if(formElements[i].value == "") {
				
				formElements[i].className = "invalid";
				numErrors++;
			}
		} else if(formElements[i].type == "select-one") {
			if(formElements[i].selectedIndex == 0) {
				formElements[i].className = "invalid";
				numErrors++;
			}
		}
	}

	if(numErrors > 0) {
		return false;	
	} else {
		return true;	
	}
}

function messageCheck() {
	if($('success')) {
		$('success').parentNode.removeChild($('success'));	
	}
	if($('error')) {
		$('error').parentNode.removeChild($('error'));	
	}
}

function disableSidebar() {
	cache[0] = $('orderOptions').innerHTML;
	$('orderOptions').innerHTML = "";
	if($('coupon')) {
		cache[1] = $('coupon').innerHTML;
		$('coupon').innerHTML = '';
	}
	anchors = $('cart').getElementsByTagName("a");
	for(i = 0; i < anchors.length; i++) {
		if(anchors[i].className == "price") {
			anchors[i].className = "hidden";
		}
	} 
}

function enableSidebar() {
	$('orderOptions').innerHTML = cache[0];
	cache[0] = '';
	if(cache[1]) {
		$('coupon').innerHTML = cache[1];
		cache[1] = '';
	}
	anchors = $('cart').getElementsByTagName("a");
	for(i = 0; i < anchors.length; i++) {
		if(anchors[i].className == "hidden") {
			anchors[i].className = "price";
		}
	} 
}
function errorText(target, sibling, text) {
	if($(target)) {
		if($('error')) {
			$('error').parentNode.removeChild($('error'));	
		}
		par = document.createElement('p');
		par.id = 'error';
		par.innerHTML = text;
		$(target).insertBefore(par, $(sibling));
	}
}

function successText(target, sibling, text) {
	if($(target)) {
		if($('success')) {
			$('success').parentNode.removeChild($('success'));	
		}
		par = document.createElement('p');
		par.id = 'success';
		par.innerHTML = text;
		$(target).insertBefore(par, $(sibling));
	}	
}

function updateSidebar(content) {
	if($('error')) {
		$('error').parentNode.removeChild($('error'));	
	}
	$('main').removeChild($('sidebar'));
	$('main').innerHTML += content;
}

function updatePrep(content) {
	if($('error')) {
		$('error').parentNode.removeChild($('error'));	
	}	
}

function closePrep() {
	if($('menu')) {
		temp = $('prepare').getElementsByTagName('strong')[0];
		tempText = temp.innerHTML;
		temp.className = 'step';
		
		$('prepare').innerHTML = "";
		temp.innerHTML = tempText;
		$('prepare').appendChild(temp);
	} else {
		return true;	
	}
}

function parseForm(userForm) {
	var formData = "";
	for (var i = 0; i < userForm.length; i++)
    {
         if(userForm.elements[i].type == "checkbox" || userForm.elements[i].type == "radio"){
			if(userForm.elements[i].checked == true) {
				formData += userForm.elements[i].name + "=" + userForm.elements[i].value + "&";
			}
         } else if(userForm.elements[i].type == "hidden" || userForm.elements[i].type == "text") {
			formData += userForm.elements[i].name + "=" + userForm.elements[i].value + "&";
		 } else if(userForm.elements[i].type == "select-one") {
			formData += userForm.elements[i].name + "=" + userForm.elements[i].options[userForm.elements[i].selectedIndex].value + "&";
		 }
    }
	return formData;
}