/* Relying on JQuery already being loaded. */


var defaultAddressText = "Example: 5325 Pine St, Seattle";

/*
 * General functions.
 */
function confirmSubmit()
{
	var agree=confirm("Are you sure you wish to continue?");
	if (agree)
		return true ;
	else
		return false ;
}
function checkCounterInput(elementName, maxLength, forceLength)
{
	var e = $("#"+elementName);
	var length=e.val().length;
	if(forceLength == true && length > maxLength)
	{
		e.val(e.val().substring(0,maxLength));
		length = e.val().length;
	}
	
	var ce = $('#counter'+elementName);
	if(length > maxLength && ce.hasClass("inputCounterValid"))
	{
		ce.addClass("inputCounterInvalid");
		ce.removeClass("inputCounterNothing");
		ce.removeClass("inputCounterValid");
	}
	else if(length <= maxLength && !ce.hasClass("inputCounterValid"))
	{
		ce.removeClass("inputCounterInvalid");
		ce.removeClass("inputCounterNothing");
		ce.addClass("inputCounterValid");
	}
	else if(length == 0 && !ce.hasClass("inputCounterNothing"))
	{
		ce.removeClass("inputCounterInvalid");
		ce.removeClass("inputCounterValid");
		ce.addClass("inputCounterNothing");
	}
	ce.html(maxLength - length);
}
function checkInput(id, type)
{
	if(type=="phone")
	{
		var s = $("#"+id).val().replace(/[^0-9]/g,'');
		var o = "";

		if(s.length < 3)
			o = s;
		else
		{
			o = "(" + s.substr(0,3) + ") ";

			if(s.length < 6)
				o = o + s.substr(3);
			else
			{
				o = o + s.substr(3,3) + "-";

				if(s.length < 10)
					o = o + s.substr(6);
				else
					o = o + s.substr(6,4);
			}
		}

		$("#"+id).val(o);
	}
	else if(type=="ccnumber")
	{
		var s = $("#"+id).val().replace(/[^0-9]/g,'');
		var o = "";

		if(s.length < 4)
			o = s;
		else
		{
			o = s.substr(0,4) + " ";

			if(s.length < 8)
				o = o + s.substr(4);
			else
			{
				o = o + s.substr(4,4) + " ";

				if(s.length < 12)
					o = o + s.substr(8);
				else
				{
					o = o + s.substr(8,4) + " ";

					if(s.length < 16)
						o = o + s.substr(12);
					else
						o = o + s.substr(12,4);
				}
			}
		}

		$("#"+id).val(o);
	}
	else if(type=="price")
	{
		var usingVal = true;
		var s = $("#"+id).val().replace(/[^0-9\\.]/g,'');
		if(s.length == 0)
		{
			s = $("#"+id).html().replace(/[^0-9\\.]/g,'');
			usingVal = false;
		}
		var o = "";
		
		var i = s.indexOf(".");
		if(i > -1)
		{
			var precision = s.length - (i + 1);
			if(precision > 2)
			{
				s = s.substring(0, i + 3);
			}
		}
		var i2 = s.indexOf(".",i+1);
		if(i2 > -1)
		{
			s = s.substring(0, i2);
		}
		
		if(s.length>0)
			o = "$" + s;

		if(usingVal)
			$("#"+id).val(o);
		else
			$("#"+id).html(o);
	}
	else if(type=="email")
	{
		//var s = $("#"+id).val().replace(/[^0-9]/g,'');

		//$("#"+id).val(o);
	}
}

/*
 * Search/menu page functions.
 */
function loadPageViaAjax2(query, funcPtrCallOnLoad, funcPtrCallOnLoadArgs){
	$.ajax({
        type: "GET",
        url: query,

        async: true, /* If set to non-async, browser shows page as "Loading.."*/
        cache: false,
        timeout:50000, /* Timeout in ms */

        success: function(data){
			if (funcPtrCallOnLoadArgs == null)
				funcPtrCallOnLoad(data);
			else
				funcPtrCallOnLoad(data, funcPtrCallOnLoadArgs);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            /* Do nothing for now. */
        }
    });
}

function getPos(el) {
	/* From:  http://stackoverflow.com/questions/288699/get-the-position-of-a-div-span-tag
	 * yay readability */
	for ( var lx = 0, ly = 0; el != null; lx += el.offsetLeft, ly += el.offsetTop, el = el.offsetParent)
		;
	return {
		x : lx,
		y : ly
	};
}

function getWindowHeight() {
	return $(window).height();
}

function getWindowWidth() {
	return $(window).width();
}

function getPositionOfPopup(popupheight,popupwidth)
{
	var yscroll = Math.max(document.body.scrollTop,
			document.documentElement.scrollTop);
	var top = (getWindowHeight() / 2.0) - (popupheight / 2.0) + yscroll;
	if (top < yscroll)
		top = yscroll + 20.0;
	if(top < 50.0)
		top = 50.0;

	var position = new Array();
	position["top"] =  top;
	position["left"] =  (getWindowWidth() / 2.0) - (popupwidth / 2.0);
	return position;
}

function onloadAddMenuItem(data) {
	$("body").css("cursor", "auto");
	$("#loadingsymbol").hide();
	$('#menuItemDescriptionBox').hide();
	$('#addressNoDeliverBox').hide();
	$('#addressPromptBox').hide();

	var container = $('#orderItemBox');
	container.html(data);

	var position = getPositionOfPopup(container.height(), container.width());
	container.css('top',position.top+'px');
	container.css('left',position.left+'px');

	var backgroundblanket = $('#backgroundblanket');
	backgroundblanket.show();
	backgroundblanket.css('height', document.documentElement.scrollHeight + 'px');

	container.show();
}

function showAddMenuItem(url,miid,displaySuccessfulAddress,page) {
	$("body").css("cursor", "progress");
	$('#menuItemDescriptionBox').hide();
	$('#backgroundblanket').hide();
	$('#orderItemBox').hide();
	$('#addressNoDeliverBox').hide();
	$('#addressPromptBox').hide();

	var position = getPositionOfPopup($("#loadingsymbol").height(), $("#loadingsymbol").width());
	$("#loadingsymbol").css('top', position.top + 'px');
	$("#loadingsymbol").css('left', position.left + 'px');
	$("#loadingsymbol").show();
	if(displaySuccessfulAddress)
		url+="&dsa=true";
	loadPageViaAjax2(url, onloadAddMenuItem, null);

	var url = String(document.location);
	if(miid)
	{
		if(_gaq)
			_gaq.push(['_trackPageview', '/s/menuitems/'+page+'?miid='+miid.toString()]);
		if(_kmq)
			_kmq.push(['record', '/s/menuitems/'+page,{'miid':miid.toString()}]);
	}
}

function showDoesNotDeliver()
{
	$("body").css("cursor", "auto");
	$("#loadingsymbol").hide();
	$('#menuItemDescriptionBox').hide();
	$('#orderItemBox').hide();
	$('#addressPromptBox').hide();

	var container = $('#addressNoDeliverBox');

	var position = getPositionOfPopup(container.height(), container.width());

	container.css('top',position.top+'px');
	container.css('left',position.left+'px');

	var backgroundblanket = $('#backgroundblanket');
	backgroundblanket.show();
	backgroundblanket.css('height', document.documentElement.scrollHeight + 'px');

	container.show();
}

function showAddressPrompt(rid,url,miid)
{
	$("body").css("cursor", "auto");
	$("#loadingsymbol").hide();
	$('#menuItemDescriptionBox').hide();
	$('#orderItemBox').hide();
	$('#addressNoDeliverBox').hide();

	var container = $('#addressPromptBox');
	$('#addressPromptAddItemUrl').val(url);
	$('#addressPromptAddItemMiid').val(miid);
	$('#addressPromptRid').val(rid);

	var position = getPositionOfPopup(container.height(), container.width());
	container.css('top',position.top+'px');
	container.css('left',position.left+'px');

	var backgroundblanket = $('#backgroundblanket');
	backgroundblanket.css('height', document.documentElement.scrollHeight + 'px');
	backgroundblanket.show();

	container.show();
	initAddressTextBox();
}

function addressPromptCheckAddress(baseaddressurl)
{
	var isGood = checkAddressTextBox();
	if(isGood)
	{
		var unprocessedAddress = $('#addressTextBox').val();
		$("body").css("cursor", "progress");
		var rid = $('#addressPromptRid').val();
		var url = $('#addressPromptAddItemUrl').val();
		var miid = $('#addressPromptAddItemMiid').val();
		//alert(unprocessedAddress + "  " + url + "  " + miid);
		checkAddressThenAddMenuItem(rid,baseaddressurl,unprocessedAddress,url,miid,true);
	}
}

function validateAddressResponseThenAddMenuItem(data, params)
{
	var url = params[0];
	var miid = params[1];
	var displaySuccessfulAddress = params[2];
	var page = params[3];

	// TODO: need to make sure the address cookie in the response gets set in the client, if the address is valid.
	if(data == "1")
	{
		// Does deliver.
		showAddMenuItem(url, miid, displaySuccessfulAddress,page);
	}
	else
	{
		// Does not deliver.
		showDoesNotDeliver();
	}
}

function checkAddressThenAddMenuItem(rid,baseaddressurl,unprocessedAddress,url,miid,displaySuccessfulAddress,page)
{
	$("body").css("cursor", "progress");
	var position = getPositionOfPopup($("#loadingsymbol").height(), $("#loadingsymbol").width());
	$("#loadingsymbol").css('top', position.top + 'px');
	$("#loadingsymbol").css('left', position.left + 'px');
	$("#loadingsymbol").show();

	var params=new Array();
	params[0]=url;
	params[1]=miid;
	params[2]=displaySuccessfulAddress;
	params[3]=page;

	var addressurl = baseaddressurl + "?aa=" + unprocessedAddress + "&rid="+rid;
	loadPageViaAjax2(addressurl, validateAddressResponseThenAddMenuItem, params);
}

var prevRid = null;

function onloadMenuSearch(data, params) {
	var rid = params[0];
	var displayurl = params[1];
	
	$("body").css("cursor", "auto");
	$("#loadingsymbol").hide();
	
	/* Load the menu div at the position of the current search result.
	 * Hide existing content. */
	var monster = document.getElementById('sign_monster');
	if(monster != null)
		monster.style.display = 'none';

	/* Add in new content. */
	var container = document.getElementById('menuItemBox');
	container.innerHTML = data;

	var yscroll = Math.max(document.body.scrollTop,
			document.documentElement.scrollTop);
	var element2 = document.getElementById('restaurantscolumn');
	var coordinates2 = getPos(element2);
	var offset = Math.max(yscroll - coordinates2.y, 0);
	if(offset!=0)
	{
		/* Add an extra border. */
		container.className = "menuItemBoxNotAtTop";
	}
	else
	{
		container.className = "";
	}
	container.style.marginTop = offset + 'px';
	container.style.display = 'block';

	/* Set page title. */
	var pt1 = document.getElementById('pt1');
	document.title = pt1.innerHTML.replace("&amp;", "&");

	/* Remove the styles from the previous (if any) selected restaurant. */
	prevRid = rid;

	$("[id^='rf']").each(function(){
		$(this).css('visibility','hidden');
	});
	$("[id^='rc']").each(function(){
		$(this).removeClass('restaurantcontainer');
		$(this).removeClass('selectedRestaurant');
		$(this).addClass('restaurantcontainer');
	});

	/* Set the search results styles. */
	var rf = document.getElementById('rf' + rid);
	rf.style.visibility = 'visible';
	var rc = document.getElementById('rc' + rid);
	rc.className = "selectedRestaurant";


	/* Setup the scrolling. */
	var element = document.getElementById('rc' + rid);
	var coordinates = getPos(element);

	prevOffset = null;
	grestColumnYVal = coordinates2.y;
	grestSearchResultYVal = coordinates.y;
	gcontainer = container;
	
	// Setup a history marker, and update the browser url (html5 only).
	var stateObj = { foo: "bar" };
	//history.pushState(1, pt1.innerHTML, displayurl);
	history.replaceState(1, pt1.innerHTML, displayurl);
}

function onloadMenuMenu(data, rid){
	$("body").css("cursor", "auto");
	$("#loadingsymbol").hide();
	/* Add in new content. */
	var container = document.getElementById('menuItemBox');
	container.innerHTML = data;
}

function showMenuOnSearchPage(url, rid, displayurl, page) {
	var params=new Array();
	params[0]=rid;
	params[1]=displayurl;
	
	$("body").css("cursor", "progress");
	var position = getPositionOfPopup($("#loadingsymbol").height(), $("#loadingsymbol").width());
	$("#loadingsymbol").css('top', position.top + 'px');
	$("#loadingsymbol").css('left', position.left + 'px');
	$("#loadingsymbol").show();
	loadPageViaAjax2(url, onloadMenuSearch, params);

	if (rid)
	{
		if(_gaq)
			_gaq.push(['_trackPageview', '/s/menuwrapper/'+page+'?rid='+rid.toString()]);
		if(_kmq)
			_kmq.push(['record', '/s/menuwrapper/'+page,{'rid':rid.toString()}]);
	}
}

function showMenuOnMenuPage(url, rid) {
	$("body").css("cursor", "progress");
	var position = getPositionOfPopup($("#loadingsymbol").height(), $("#loadingsymbol").width());
	$("#loadingsymbol").css('top', position.top + 'px');
	$("#loadingsymbol").css('left', position.left + 'px');
	$("#loadingsymbol").show();
	
	loadPageViaAjax2(url, onloadMenuMenu, null);

	if (rid)
	{
		if(_gaq)
			_gaq.push(['_trackPageview','/s/menuwrapper/menu?rid='+rid.toString()]);
		if(_kmq)
			_kmq.push(['record', '/s/menuwrapper/menu',{'rid':rid.toString()}]);
	}
}

var currentMenuItemId=-1;
function onloadMenuItemSnippet(data, menuItemId) {
	/* Check that the mouse is still over the same menu item. */
	if(menuItemId != currentMenuItemId)
		return;

	var descriptionBox = document.getElementById('menuItemDescriptionBox');
	var descriptionBoxDescription = document
			.getElementById('menuItemDescriptionBoxDescription');
	var backgroundblanket = document.getElementById('backgroundblanket');
	var orderItemBox = document.getElementById('orderItemBox');

	if (descriptionBox.style.visibility == 'hidden') {
		var element = document.getElementById('td' + menuItemId);
		var coordinates = getPos(element);
		var yscroll = Math.max(document.body.scrollTop,
				document.documentElement.scrollTop);
		if (coordinates.y - yscroll > 120) {
			/* Show box above element. */
			descriptionBox.style.top = (coordinates.y - 116) + 'px';
			descriptionBox.className = "descriptionboxtop";
			descriptionBoxDescription.className = "";
		} else {
			/* Show box below element. */
			descriptionBox.style.top = (coordinates.y + element.offsetHeight - 6) + 'px';
			descriptionBox.className = "descriptionboxbottom";
			descriptionBoxDescription.className = "descriptionboxbottomdescription";
		}
		descriptionBox.style.visibility = 'visible';
		descriptionBox.style.left = coordinates.x + 'px';
		descriptionBoxDescription.innerHTML = data;
	}
}

function menuItemOver2(url, menuItemId) {
	currentMenuItemId = menuItemId;
	var doIt = function() {
		loadPageViaAjax2(url, onloadMenuItemSnippet, menuItemId);
	}
	setTimeout(doIt, 250);
}
function menuItemOut() {
	currentMenuItemId=-1;
	var descriptionBox = document.getElementById('menuItemDescriptionBox');
	descriptionBox.style.visibility = 'hidden';
}
function orderItemClose() {
	$('#menuItemDescriptionBox').hide();
	$('#backgroundblanket').hide();
	$('#orderItemBox').hide();
	$('#addressNoDeliverBox').hide();
	$('#addressPromptBox').hide();

//	backgroundblanket.style.height = null;
//	document.body.style.overflow = null;
}

function updateExtraItemPrices(basisprefix, basisId)
{
	// Make all the prices hidden.
	$('span[id^='+basisprefix+']').hide();
	// Show the one I want.
	$('span[id^='+basisprefix+basisId+']').show();
	$('span[id^='+basisprefix+basisId+']').addClass("highlightedprice");
	var doIt = function() {
		$('span[id^='+basisprefix+basisId+']').removeClass("highlightedprice");
	}
	setTimeout(doIt,800);
}
function enterAddressTextBox(e)
{
	var code = null;
	if(e != null)
	{
		code = (e.keyCode ? e.keyCode : e.which);
	}
	if(code == 13)
	{
		$('#addressTextBoxFindButton').click();
	}

	var element = $('#addressTextBox');
	if(element.val()==defaultAddressText)
		element.val("");
	element.css('color','black');
	element.css('border','none');
}
function leaveAddressTextBox()
{
	var element = $('#addressTextBox');
	if(element.val()==null || element.val().length==0)
	{
		element.css('color','#cccccc');
		element.val(defaultAddressText);
	}
}
function checkAddressTextBox()
{
	var address=$('#addressTextBox');
	if(address.val().length<=0 || address.val()==defaultAddressText)
	{
		address.css('border','solid 5px red');
		return false;
	}
	return true;
}
function initAddressTextBox()
{
	var element = $('#addressTextBox');
	if(element.val()==defaultAddressText)
		element.val("");
	var text = element.val();
	if(text==null || text.length<=0)
	{
		element.css('color','#cccccc');
		element.val(defaultAddressText);
	}
	else
	{
		element.val(text);
		enterAddressTextBox();
	}
	element.focus();
}

