var xf_object_list = new Array() ;
var xf_case_list = new Array() ;

function xf_object_new (model_id,object_name, field_id, object_value)
{
	var obj = {model: model_id, name: object_name, field: field_id, value: object_value, elems: new Array()} ;
	xf_object_list.push (obj) ;
}

function xf_case_new (switch_id,case_id,elem_id,sel)
{
	var ocase = {swid: switch_id, caid: case_id, elid: elem_id, select: sel} ;
	xf_case_list.push(ocase) ;
}

function xf_object_attach (model_id, object_name, elem_id, elem_type,elem_value,lstToggles)
{
	for (var i in xf_object_list)
		if ((xf_object_list[i].name == object_name) && ((model_id == '') || (model_id == xf_object_list[i].model)))
		{
			var elem = {id: elem_id, type: elem_type, value: elem_value, toggles: lstToggles} ;
			xf_object_list[i].elems.push (elem) ;
		}
}

function xf_changeobj (obj,elem_id,value)
{
	if ((typeof(value) == 'boolean') && (elem_id != null))	// selected item
	{
		var defval = '' ;
		for (var i in obj.elems)
			if (obj.elems[i].id == elem_id)
				defval = obj.elems[i].value ;
		if ((value) && (obj.value.match(defval)==null))		// add a value
			obj.value = obj.value + ' ' + defval ;
		if ((!value) && (obj.value.match(defval)!=null))		// remove a value
		{
			var tab = obj.value.split(' ') ;
			for (var i in tab)
				if (tab[i] == defval)
					tab.splice(i,1) ;
			obj.value = tab.join(' ') ;
		}
	}
	else			// regular item
		obj.value = value ;
	
	var ref_field = document.getElementById(obj.field) ;
	if (ref_field)
		ref_field.value = obj.value ;
	
	for (var i in obj.elems)
		if (obj.elems[i].id != elem_id)
		{
			var att_field = document.getElementById(obj.elems[i].id) ;
			if (att_field)
				switch (obj.elems[i].type)
				{
				case 'select_full' :		// checkbox
				case 'select1_full' :		// radio button
					att_field.checked = obj.value.match(att_field.value) != null ;
					break ;
				case 'select' :				// select multiple
					att_field.selected = obj.value.match(att_field.value) != null ;
					break ;
				default :						// others
					att_field.value = obj.value ;
					break ;
				}
		}
}

function xf_change (model_id, object_name,elem_id, value, changehandler)
{
	for (var i in xf_object_list)
		if ((xf_object_list[i].name == object_name) && ((model_id == '') || (model_id == xf_object_list[i].model)))
		{
			xf_changeobj (xf_object_list[i],elem_id,value) ;
			
			for (var j in xf_object_list[i].elems)
				if (xf_object_list[i].elems[j].value == value)
					xf_runhandler (null,xf_object_list[i].elems[j].toggles) ;
		}
			
	xf_runhandler (changehandler,null) ;
}

function xf_runhandler (handler,toggles)
{
	if (toggles != null)
	{
		var toggleTab = toggles.split('|') ;
		for (var i in toggleTab)
			if (toggleTab[i].length != 0)
				xf_togglecase (toggleTab[i]) ;
	}
	
	if (handler != null)
		if ((!xf_submit(handler)) &&
			(!xf_runscript(handler)))
				alert ("Handler ni submit ni script="+handler) ;
}

function xf_togglecase (caseid)
{	
	var switchid = null ;
	for (var i in xf_case_list)
		if (xf_case_list[i].caid == caseid)
		{
			switchid = xf_case_list[i].swid ;
			
			if (switchid != null)
				for (var j in xf_case_list)
					if (xf_case_list[j].swid == switchid)
					{
						var elem = document.getElementById(xf_case_list[j].elid) ;
						if (xf_case_list[j].caid == caseid)	// select
						{
							elem.style.zIndex=1 ;
							elem.style.display="block" ;
						}
						else				// deselect
						{
							elem.style.zIndex=0 ;
							elem.style.display="none" ;
						}
					}	
		}
}

function xf_changeselect (model_id,object_name, changehandler)
{
	for (var i in xf_object_list)
		if ((xf_object_list[i].name == object_name) && ((model_id == '') || (model_id == xf_object_list[i].model)))
		{
			var nvalue = '' ;
			for (var j in xf_object_list[i].elems)
				if (xf_object_list[i].elems[j].type == 'select')
				{
					var att_field = document.getElementById(xf_object_list[i].elems[j].id) ;
					if ((att_field) && (att_field.selected) && (nvalue.match(xf_object_list[i].elems[j].value)==null))
					{
						if (nvalue.length > 0)
							nvalue = nvalue + ' ' ;
						nvalue = nvalue + xf_object_list[i].elems[j].value ;
					}
				}
				
			xf_changeobj (xf_object_list[i],null,nvalue) ;
		}
	xf_runhandler (changehandler,null) ;
}

function xf_initobj ()
{
	for (var i in xf_object_list)
		xf_changeobj (xf_object_list[i],null,xf_object_list[i].value) ;

	// Case init. necessary for FF (cursor pb)
	for (var i in xf_case_list)
		if (xf_case_list[i].select == 'true')
		{
			var elem = document.getElementById(xf_case_list[i].elid) ;
			elem.style.zIndex=1 ;
			elem.style.display="block" ;
		}
}

var xf_submission_list = new Array() ;

function xf_submission_new (submission_id, action, method, form_id)
{
	var subm = {id: submission_id, action: action, method: method, form: form_id} ;
	xf_submission_list.push (subm) ;
}

function xf_submit (submission_id)
{
	var oksubmit = false ;
	for (var i in xf_submission_list)
		if (xf_submission_list[i].id == submission_id)
		{
			var form = document.getElementById (xf_submission_list[i].form) ;
			if (form)
			{
				oksubmit = true ;
				form.action = xf_submission_list[i].action ;
				switch (xf_submission_list[i].method)
				{
				case 'urlencoded-post' :		// usual POST
					form.method = 'post' ;
					form.enctype = 'application/x-www-form-urlencoded' ;
					break ;
				case 'form-data-post' :		// file POST
					form.method = 'post' ;
					form.enctype = 'multipart/form-data' ;
					break ;
				default :
					form.method = xf_submission_list[i].method ;
					break ;
				}
				form.submit() ;
			}
		}
	return (oksubmit) ;
}

function xf_runscript (script_id)
{
	var sid = document.getElementById(script_id) ;
	if ((sid != null) && (sid.nodeName == 'SCRIPT'))
	{
		// var ret = eval (sid.text) ;	// Pas compatible Safari
		var ret = eval (sid.innerHTML) ;
		return (true) ;
	}
	return (false) ;
}
