function ttreeRowId(tr) {
    var trId = tr.attr('id');
    return trId.substring(0, trId.indexOf("-"));
}
function ttreeRowLevel(tr) {
    var trId = tr.attr('id');
    return trId.substring(trId.indexOf("-")+1);
}
function ttreeIsChildLevel(parent, child, direct) {
    var ret = false;
    if (child.substring(0, parent.length+1) == parent + '-') {
        if (direct) {
            ret = (child.substring(parent.length+1).indexOf('-') < 0);
        }
        else {
            ret = true;
        }
    }
    return ret;
}
function ttreeEvenOdd(table) {
    table.children('tr:visible:even').removeClass('even').addClass('odd');
    table.children('tr:visible:odd').removeClass('odd').addClass('even')

}

function ttreeInit(ttId) {
    function treeOpen(nodeAnchor) {
        var openedNodes = [];
        var closedNodes = [];
        
        function setNodeVisible(n, ena) {
            var a = n.find('a.tt-folder');
            if (a.length > 0) {
                if (ena) {
                    a.removeClass('tt-open').addClass('tt-closed');
                }
                var rid = ttreeRowId(n);
                if (ena) {
                    openedNodes.push(rid);
                }
                else {
                    closedNodes.push(rid);
                }
            }
            if (ena) {
                n.show();
            }
            else {
                n.hide();
            }
        }
        var tr = nodeAnchor.parent().parent().parent();
        var trId = ttreeRowId(tr);
        var trLevel = ttreeRowLevel(tr);
        var open = nodeAnchor.is('.tt-closed');
        tr.siblings("tr").each(function () {
            if (ttreeIsChildLevel(trLevel, ttreeRowLevel($(this)), open)) {
                setNodeVisible($(this), open);
            }
        });
        if (open) {
            openedNodes.push(trId);
            nodeAnchor.removeClass('tt-closed').addClass('tt-open');
        }
        else {
            closedNodes.push(trId);
            nodeAnchor.removeClass('tt-open').addClass('tt-closed');
        }
        $.ajax({ url: '/food/settings/table-tree/',
                 type: 'POST',
                 data: { 'id': ttId, 'open': openedNodes, 'close': closedNodes } });
        ttreeEvenOdd(tr.parent());
        return false;
    }
    $('div.tt-tier a.tt-folder').click(function() { return treeOpen($(this)); });
}


function onKCalGenderAgeChange(url) {
    $.ajax({ url: url,
             type: 'POST', 
             data: $('#kcal_form').serialize(),
	     complete: function(resp, status) {
		var data = $.httpData(resp, 'json');
		$('#kcal-amount').html(data.kcal);
		$('#kcal-batteries').html(data.batteries);
             } });
}

function onButterSettingsChange(url) {
    $.ajax({ url: url,
             type: 'POST', 
	     data: $('#butter_form').serialize(),
	     complete: function(resp, status) {
		var data = $.httpData(resp, 'json');
		$('#butter_img').attr('src', data.url);
		$('#butter_num').html(data.food_repr);
	    }});
}

function onServingChange(elt) {
    var selv = foodServingUpdate();
    if (selv != '') {
	elt.form.submit();
    }
}

function foodServingUpdate() {
    var sel = $("select[@name='serving']");
    var w = sel.parent().find("input[@name='weight']");
    var selv = sel.attr('value');
    var wl = sel.parent().find("label[@for='"+w.attr("id")+"']");
    if (selv == '') {
	w.show();
	wl.show();
    }
    else {
	w.hide();
	wl.hide();
	w.attr('value', selv);
    }
    return selv;
}


function foodAddToDiary() {
    if (! isLoggedIn) {
        document.location.href = "/accounts/login/";
        return;
    }
    $("#foodaddtodiary").attr("disabled", "disabled");
    $.post(urlAddFood, {
	    'food_slug': foodSlug,
		'date': $("select[@name='date']").attr('value'),
		'occasion': $("select[@name='occasion']").attr('value'),
		'weight': $("input[@name='weight']").attr('value')
	}, function(data, textStatus) {
	    $("#foodaddtodiary").attr("disabled", "");
	    $('#food_log_done').html(data);
	    balloonShow('food_log_done', 'iatethis');
	});
    return false;
}

function foodViewInit() {
    balloonConnect("food_log", "iatethis");
    foodServingUpdate();
}
