
var frmiForms = new Object();
frmiForms.activeForm = null;
frmiForms.activeFormName = null;
frmiForms.setActive = function(name) {
	if (frmiForms[name])
		frmiForms.activeForm = frmiForms[name];
		frmiForms.activeFormName = name;
}

function frmiForm(name, settings) {
	this.name = name;
	this.settings = settings;
	this.elements = new Object();
	frmiForms[name] = this;
	if (this.settings['setActive'] || !frmiForms.activeForm)
		frmiForms.setActive(name);
}
frmiForm.prototype.getForm = function() {
	return document[this.name];
}
frmiForm.prototype.setScreenVars = function() {
	if (this.settings['screenObject']) {
		eval(this.settings['screenObject']+'.changeForm(\''+this.name+'\');');
	}
}
frmiForm.prototype.hasElement = function(elem) {
	return document[this.name].elements[elem] ? true:false;
}
frmiForm.prototype.addHidden = function(elem, v) {
	oHidden = document.createElement("INPUT");
	oHidden.type = "hidden";
	oHidden.name = elem;
	oHidden.id = elem;
	oHidden.value = v;
	
	return document[this.name].appendChild(oHidden);
}
frmiForm.prototype.setHidden = function(elem, v) {
	if (!elem)
		return false;
		
	try
	{
		document[this.name].elements[elem].value = v;
	} catch(e)
	{
		return this.addHidden(elem, v);
	}
	return true;
}
frmiForm.prototype.getValue = function(elem, addifnot, dv) {
	if (!elem)
		return false;
	
	var v = null;
	try
	{
		v = document[this.name].elements[elem].value;
	} catch(e)
	{
		if (addifnot)
		{
			this.addHidden(elem, dv);
		} else
			v = dv;
	}
	return v;
}
frmiForm.prototype.getAllValue = function(elem, dv) {
	if (!elem)
		return false;
	
	var v = null;
	try {
		var el = document[this.name].elements[elem];
		if (!el.nodeName) {
			// possible node list
			var vals = new Array();
			for(i = 0; i < el.length; i++) {
				var ve = el.item(i).value;
				if (vals[ve] == undefined)
					vals[ve] = 1;	
				else
					vals[ve] += 1;
			}
			var minn = 100;
			for(ve in vals) {
				if (vals[ve] < minn) {
					v = ve;
					minn = vals[ve];
				}
			}
		} else
			v = el.value;
	} catch(e) {
		v = dv;
	}
	return v;
}
frmiForm.prototype.getElement = function(elem) {
	if (!elem)
		return false;
	
	var v = null;
	try
	{
		v = document[this.name].elements[elem];
	} catch(e)
	{
		v = null;
	}
	return v;
}
frmiForm.prototype.setValue = function(elem, v) {
	return this.setHidden(elem, v);
}
frmiForm.prototype.setAllValue = function(elem, v) {
	var el = document[this.name].elements[elem];
	if (!el.nodeName) {
		// possible node list
		for(i=0; i<el.length; i++)
			el.item(i).value = v;
	} else
		el.value = v;
}
frmiForm.prototype.validate = function() {
}
frmiForm.prototype.submit = function(skip) {
	if (!skip)
		this.onSubmit();
	
	document[this.name].submit();
}
frmiForm.prototype.onSubmit = function() {
	if (this.settings.onSubmit)
		this.settings.onSubmit();
}
frmiForm.prototype.addElement = function(elem, settings) {
	this.elements[elem] = settings;
}
frmiForm.prototype.disableElement = function(elem) {
	try {
		var el = document[this.name].elements[elem].disabled = true;
	} catch(e) {
	}
}
frmiForm.prototype.enableElement = function(elem) {
	try {
		var el = document[this.name].elements[elem].disabled = false;
	} catch(e) {
	}
}
frmiForm.prototype.setFocus = function(elem) {
	try {
		document[this.name].elements[elem].focus();
	} catch(e) {
	}
}

/* DEPRECATED */

function frmiDisableElements(form,names,invert)
{
	for(i=0;i<form.elements.length;i++)
	{
		e=form.elements[i];
		n=e.name;
		
		found=false;
		for (j=0;j<names.length && !found;j++)
		{
			nm=names[j];
			found=(nm==n) || (n.substr(0,nm.length+1)==(nm+'['));
		}
		if (((found && !invert) || (!found && invert)) && !e.disabled) e.disabled=true;
	}
}
function frmiEnableElements(form,names,invert)
{
	for(i=0;i<form.elements.length;i++)
	{
		e=form.elements[i];
		n=e.name;
		
		found=false;
		for (j=0;j<names.length && !found;j++)
		{
			nm=names[j];
			found=(nm==n) || (n.substr(0,nm.length+1)==(nm+'['));
		}
		if (((found && !invert) || (!found && invert)) && e.disabled) e.disabled=false;
	}
}


function frmiAddGets(form,gets)
{
	if (!gets)
		return;
	form.action = form.action + '?' + gets;
}

function frmiMakeGets(form,names,postdisable)
{
	if (!names)
		return false;
		
	act='';
	delim='?';
	for(i=0;i<form.elements.length;i++)
	{
		e=form.elements(i);
		n=e.name;
		t=e.type;
		
		found=false;
		for (j=0;j<names.length && !found;j++)
		{
			nm=names[j];
			found=(nm==n) || (n.substr(0,nm.length+1)==(nm+'['));
		}
		if (found && !e.disabled)
		{
			if (postdisable) e.disabled=true;
			switch(t)
			{
				case "radio":
				case "checkbox":
					if (e.checked)
					{
						act = act + delim + n + '=' + e.value;
						delim='&';
					}
					break;
				case "text":
				case "textarea":
				case "select":
					act = act + delim + n + '=' + e.value;
					delim='&';
					break;
				case "select-multiple":
					for (k=0,l=0;k<e.options.length;k++)
					{
						if (e.options(k).selected)
						{
							act = act + delim + n + '=' + e.options(k).value;
							delim = '&';
							l++;
						}
					}
					e.disabled=true;
					break;
				case "hidden":
					act = act + delim + n + '=' + e.value;
					delim='&';
					break;
				case "submit":
				case "image":
				case "button":
					break;
			}
		}
	}
	if (act) form.action = form.action + act;
}

function frmiGetValue(frm, elem, addifnot, dv)
{ 
	if (typeof(frm) == 'object') {
		if (!frm || !elem)
			return false;
		
		try
		{
			v = frm.elements[elem].value;
		} catch(e)
		{
			if (addifnot)
			{
				frmiAddHidden(frm, elem, dv);
				v = dv;
			} else
				v = dv;
		}
		return v;
	} else
		return frmiForms[frm].getValue(elem, addifnot, dv);
}

function frmiSetHidden(frm, elem, v)
{ 
	if (typeof(frm) == 'object') {
		if (!frm || !elem)
			return false;
			
		try
		{
			frm.elements[elem].value = v;
		} catch(e)
		{
			frmiAddHidden(frm, elem, v);
		}
		return true;
	} else
		frmiForms[frm].setHidden(elem, v);
}
function frmiSetValue(frm, elem, v)
{
	return frmiSetHidden(frm, elem, v);
}

function frmiAddHidden(frm, elem, v)
{
	if (typeof(frm) == 'object') {
		oHidden = document.createElement("INPUT");
		oHidden.type = "hidden";
		oHidden.name = elem;
		oHidden.id = elem;
		oHidden.value = v;
		
		return frm.appendChild(oHidden);
	} else
		return frmiForms[frm].addHidden(elem,v);
}

