// **
// Generic functions
// **

function getSelf()
{
	return location.pathname;
}

function sendAjaxRequest(obj, callback)
{
	$.post(getSelf(), "ajax=ajax&ajaxargs=" + escape($.toJSON(obj)), callback, "json");
}

function getQueryString(key)
{
	var q = window.location.search.substring(1);
	var parms = q.split("&");
	var parm;
	var i;

	for (i=0; i<parms.length; i++)
	{
		parm = parms[i].split("=");
		if (parm[0] == key)
			return parm[1];
	}

	return "";
}

function isArrayField(fieldname)
{
	return ("[]" == fieldname.substr(-2));
}

function getFieldName(fieldname)
{
	if (isArrayField(fieldname))
		return fieldname.substr(0, fieldname.length-2);
	else
		return fieldname;
}

function getSelectOptions(opts)
{
	var vals = [];
	var i;

	for (i=0; i<opts.length; i++)
		if (opts[i].selected)
			vals.push(opts[i].value);

	if (vals.length > 1)
		return vals;
	else
		return vals.join(",");
}

function serializeForm(frm)
{
	var inputs = $("input", frm);
	var textareas = $("textarea", frm);
	var selects = $("select", frm);
	var form = {};
	var fieldname;
	var i;

	for (i=0; i<inputs.length; i++)
	{
		if (inputs[i].name)
		{
			switch (inputs[i].type)
			{
				case "text":
				case "password":
				case "button":
				case "submit":
				case "hidden":
					if (isArrayField(inputs[i].name))
					{
						fieldname = getFieldName(inputs[i].name);
						if (!form[fieldname]) form[fieldname] = [];
						form[fieldname].push(inputs[i].value);
					}
					else
						form[inputs[i].name] = inputs[i].value;
					break;
				case "checkbox":
					if (inputs[i].checked)
					{
						if (isArrayField(inputs[i].name))
						{
							fieldname = getFieldName(inputs[i].name);
							if (!form[fieldname]) form[fieldname] = [];
							form[fieldname].push(inputs[i].value);
						}
						else
							form[inputs[i].name] = inputs[i].value;
					}
					break;
				case "radio":
					if (inputs[i].checked)
						form[inputs[i].name] = inputs[i].value;
				default:
					break;
			}
		}
	}

	for (i=0; i<selects.length; i++)
	{
		if (selects[i].name && isArrayField(selects[i].name))
		{
			fieldname = getFieldName(selects[i].name);
			if (!form[fieldname]) form[fieldname] = [];
			if (selects[i].multiple)
				form[fieldname].push(getSelectOptions(selects[i].options));
			else
				form[fieldname].push(selects[i].options[selects[i].selectedIndex].value);
		}
		else
			if (selects[i].multiple)
				form[selects[i].name] = getSelectOptions(selects[i].options);
			else
				form[selects[i].name] = selects[i].value;
	}

	for (i=0; i<textareas.length; i++)
	{
		if (textareas[i].name && isArrayField(textareas[i].name))
		{
			fieldname = getFieldName(textareas[i].name);
			if (!form[fieldname]) form[fieldname] = [];
			form[fieldname].push(textareas[i].value);
		}
		else
			form[textareas[i].name] = textareas[i].value;
	}

	return form;
}

// **
// Menu functions
// **

function doChangeRegion(elm)
{
	var frm = elm.form;

	frm.cmd.value="changeregion";
	frm.submit();
}

function doSetField(elm, field, value)
{
	var frm = elm.form;
	if (!frm)
	{
		frm = elm;
		while (frm && frm.tagName && (frm.tagName.toUpperCase() != "FORM"))
			frm = frm.parentNode;
	}

	frm[field].value = value;
}

function doSubmit(elm)
{
	var frm = elm.form;
	if (!frm)
	{
		frm = elm;
		while (frm && frm.tagName && (frm.tagName.toUpperCase() != "FORM"))
			frm = frm.parentNode;
	}

	frm.submit();
}

function doCmd(cmd, elm, requiresValidation)
{
	var frm = elm.form;
	if (!frm)
	{
		frm = elm;
		while (frm && frm.tagName && (frm.tagName.toUpperCase() != "FORM"))
			frm = frm.parentNode;
	}

	if (!requiresValidation || validation.doValidate(frm))
	{
		frm.cmd.value=cmd;
		frm.submit();
	}

	return false;
}

function extractScripts(txt)
{
	var c = txt;
	var lc;
	var i1;
	var i2;
	var s = [];
	var i;

	do {
		lc = c.toLowerCase();
		i1 = lc.indexOf("<script");
		i2 = lc.indexOf("</script>", i1+1);

		if (-1 != i1)
		{
			s.push(c.substring(i1, i2+9));
			c = c.substring(0, i1) + c.substring(i2+9);
		}
	} while (-1 != i1);

	return [c, s];
}

// **
// Footer functions
// **

function setFooter(cls)
{
	var b = document.body;
	var footer=document.getElementById("footer");
	var screenHeight = window.innerHeight ||
		(document.documentElement.clientHeight > 0 ?
		document.documentElement.clientHeight : document.body.clientHeight);
	var thisheight = Number(document.body.clientHeight);
	var obj;
	var offset;

	if (cls)
	{
		Element.extend(b);
		obj = b.select("." + cls)[0];
		thisheight = Number(obj.offsetTop) + Number(obj.offsetHeight);
	}

	if (footer && (screenHeight > 100))
	{
		offset = footer.offsetHeight + 10;

		if ((thisheight < Number(screenHeight) - offset))
		{
			footer.style.position = "absolute";
			footer.style.top = String(screenHeight - offset) + "px";
		}
		else if (cls)
		{
			footer.style.position = "absolute";
			footer.style.top = String(thisheight + 10) + "px";
		}
	}
	else
	{
		setTimeout("setFooter()", 20);
	}
}
