﻿function doAutoSave(cookieName, elements, rememberMe)
{
	var d = [];
	for (var i = 0; i < elements.length; ++i)
	{
		var e = document.getElementById(elements[i]);
		if (e.type == 'checkbox' || e.type == 'radio')
			d.push(e.checked ? '1' : '');
		else
			d.push(encodeURIComponent(e.value));
	}
	var c = cookieName + '=' + d.join('/');
	if (rememberMe && document.getElementById(rememberMe).checked)
	{
		var date = new Date();
		date.setFullYear(date.getFullYear() + 1);
		c += '; expires=' + date.toUTCString();
	}
	document.cookie = c;
}

function makeAutoSaveDelegate(cookieName, elements, rememberMe)
{
	return function() { doAutoSave(cookieName, elements, rememberMe); }
}

function addEventListener(element, eventName, func)
{
	if (element.addEventListener)
		element.addEventListener(eventName, func, false);
	else if (element.attachEvent)
		element.attachEvent('on' + eventName, func);
}

function initAutoSave(cookieName, elements, rememberMe)
{
	var c = '; ' + document.cookie + ';';
	var s = '; ' + cookieName + '=';
	var i = c.indexOf(s);
	var d = null;
	if (i >= 0)
	{
		i += s.length;
		d = c.substring(i, c.indexOf(';', i)).split('/');
	}
	var f = makeAutoSaveDelegate(cookieName, elements, rememberMe);
	for (i = 0; i < elements.length; ++i)
	{
		var e = document.getElementById(elements[i]);
		if (e.type == 'checkbox' || e.type == 'radio')
		{
			addEventListener(e, 'click', f);
			if (d) e.checked = d[i] == '1';
		}
		else
		{
			addEventListener(e, 'change', f);
			if (d) e.value = decodeURIComponent(d[i] || '');
		}
	}
}
