var pl_contacts = new Object();
var preloaded = false;
var pl_groups = new Object();
var groups_loaded = false;

try {
	if (!isIE)
	{
		if (!sessionStorage.preloaded)
			sessionStorage.preloaded = "false";
		if (!sessionStorage.pl_contacts)
			sessionStorage.pl_contacts = new Object().toSource();
		if (!sessionStorage.groups_loaded)
			sessionStorage.groups_loaded = "false";
		if (!sessionStorage.pl_groups)
			sessionStorage.pl_groups = new Object().toSource();
	}
} catch(e){};

var add_html = "";

function WombatDataLoader(on_complete)
{
	var _data_loader = this;
	this.swindow = 100;
	this.offset = 0;
	this.group_offset = 0;
	
	this.on_complete = on_complete;
	
	try {
		if (!isIE)
		{
			if (typeof sessionStorage.preloaded != "undefined")
				eval("preloaded = " + sessionStorage.preloaded);
			if (typeof sessionStorage.pl_contacts != "undefined")
				eval("pl_contacts = " + sessionStorage.pl_contacts);
			if (typeof sessionStorage.groups_loaded != "undefined")
				eval("groups_loaded = " + sessionStorage.groups_loaded);
			if (typeof sessionStorage.pl_groups != "undefined")
				eval("pl_groups = " + sessionStorage.pl_groups);
		}
	} catch(e){};	
	
	this.load_data = function()
	{
		this.load_add_page();
	};
	
	this.load_address_data = function()
	{
		if (!preloaded)
		{
			var new_window = _data_loader.swindow + 1
			var request = new Requester(ahost + '/reminders/contactsearch.pd', "POST", true, false);
			request.sendRequest("q=&o=" + _data_loader.offset + "&w=" + new_window);
			request.onsuccess = _data_loader.load_addresses;
			_data_loader.offset = _data_loader.offset + _data_loader.swindow;
		}
		if (!groups_loaded)
		{
			var new_window = _data_loader.swindow + 1
			var request = new Requester(ahost + '/reminders/groupsearch.pd', "POST", true, false);
			request.sendRequest("q=&o=" + _data_loader.group_offset + "&w=" + new_window);
			request.onsuccess = _data_loader.load_groups;
			_data_loader.group_offset = _data_loader.group_offset + _data_loader.swindow;
		}
	}

	this.load_addresses = function(req)
	{
		try {
			eval("var tmpArray = " + req.responseText);
		} catch (e) {
			// We've got an error.   Reset preloaded status
			preloaded = false;
			pl_contacts = new Object();
			return;
		}
		
		for (i = 0; i < tmpArray.length && i < _data_loader.swindow; i++)
		{
			var this_id = tmpArray[i].id;
			pl_contacts[this_id] = tmpArray[i];
		}
		// if there are more, get more
		if (tmpArray.length > _data_loader.swindow)
		{
			_data_loader.load_address_data();
		} else {
			preloaded = true;
			try {
				if (!isIE)
				{
					sessionStorage.preloaded = "true";
					sessionStorage.pl_contacts = pl_contacts.toSource();
				}
			} catch(e){};
		}
	}

	this.load_groups = function(req)
	{
		try {
			eval("var tmpArray = " + req.responseText);
		} catch (e) {
			// We've got an error.   Reset preloaded status
			groups_loaded = false;
			pl_groups = new Object();
			return;
		}
		for (i = 0; i < tmpArray.length && i < _data_loader.swindow; i++)
		{
			var this_id = tmpArray[i].id;
			pl_groups[this_id] = tmpArray[i];
		}
		// if there are more, get more
		if (tmpArray.length > _data_loader.swindow)
		{
			_data_loader.load_address_data();
		} else {
			groups_loaded = true;
			try {
				if (!isIE)
				{
					sessionStorage.groups_loaded = "true";
					sessionStorage.pl_groups = pl_groups.toSource();
				}
			} catch(e){};
		}
	}

	this.load_add_page = function()
	{
		var requester = new Requester("event_add.pd", 'GET', true, false);
		requester.onsuccess = function(request) {
			add_html = request.responseText;
			try {
				_data_loader.on_complete();
			} catch(e){};
		};
		requester.sendRequest("");
	};
}

function append_addresses(contacts)
{
	for (i = 0; i < contacts.length; i++)
	{
		var this_id = contacts[i].id;
		pl_contacts[this_id] = contacts[i];
	}
	try {
		if (!isIE)
		{
			sessionStorage.pl_contacts = pl_contacts.toSource();
		}
	} catch(e){};
}

function compare_contacts(a, b)
{
	if (!a.label)
		var a_name = a.last_name + a.first_name + a.email;
	else
		var a_name = a.label
	if (!b.label)
		var b_name = b.last_name + b.first_name + b.email;
	else
		var b_name = b.label
		
	if (a_name > b_name)
		return 1;
	else
		return -1;
}

function get_group_emails(group)
{
	var group_emails = "";
	for (i in group.contacts)
	{
		var contact_id = group.contacts[i]
		var email = pl_contacts[contact_id].email;
		if (email != null && email.length > 0)
			if (group_emails.length > 0)
				group_emails += ", " + email
			else
				group_emails += email;
	}
	return group_emails;
}
