﻿var footerControlsSorted = [];
var footerControls = {};

function SortFootersByOffsetTop(a, b)
{
    var aY = parseInt(a[0].style["top"]);
    var bY = parseInt(b[0].style["top"]);
    if (aY < bY)
        return -1;

    return aY == bY ? 0 : 1;
}

function AddFooter(id)
{
    footerControlsSorted.push([$get(id), id]);
    footerControls[id] = id;
}

function UpdateFooters()
{
	var offsetY = 0;
	var items = Template.GetContainer().childNodes;
	for (var i = 0; i < items.length; i++)
	{
		//iterate through all controls except for the footers
		if (items[i].id != null && items[i].style["display"] != "none" && footerControls[items[i].id] == null && ((parseInt(items[i].offsetTop) + items[i].offsetHeight) > offsetY))
			offsetY = parseInt(items[i].offsetTop) + items[i].offsetHeight;
	}

	var bypassUndoHistory = true;
	footerControlsSorted.sort(SortFootersByOffsetTop);
	var footer = null;
	for (var i = 0; i < footerControlsSorted.length; i++)
	{
		footer = $get(footerControlsSorted[i][1]);
		footer.style["top"] = offsetY + "px";

		try
		{
			eval("_" + footer.id).SetProperties($(footer).attr("style"), bypassUndoHistory);
		} catch (err) { }

		offsetY += footer.offsetHeight;
	}
}

//Put this in your Initializefunction
//AddFooter(controlID);

Page.AddOnPageLoaded(function () { UpdateFooters(); }, 1000);

try
{
	if (null != EventManager)
	{
		EventManager.AddListener("EVENT_ENDDRAG", EventManager.CreateEventListener("CONTROL_FOOTER:EVENT_ENDDRAG", UpdateFooters, null));
		EventManager.AddListener("EVENT_ENDRESIZE", EventManager.CreateEventListener("CONTROL_FOOTER:EVENT_ENDRESIZE", UpdateFooters, null));
		EventManager.AddListener("EVENT_CONTROLPROPERTIESUPDATED", EventManager.CreateEventListener("CONTROL_FOOTER:EVENT_CONTROLPROPERTIESUPDATED", UpdateFooters, null));
		EventManager.AddListener("EVENT_CONTROLCONTENTCHANGED", EventManager.CreateEventListener("CONTROL_FOOTER:EVENT_CONTROLCONTENTCHANGED", UpdateFooters, null));
	}
}
catch (err)
{
}
