/**
 *  Funktionen für dynamische Mehrfachauswahlen über zwei "select" Felder
 *  für die "user_branchenbuch" Erweiterung (TYPO3)
 *
 *  Literatur:
 *    Idee zu "options": SelfHTML/javascript/objekte/options.htm
 *
 *	Historie:
 *    28.08.06  ibb   Entwicklung
 *    03.10.06  ibb   Anpassung an originale TYPO3-Funktionen; Vereinfachung
 *
 * Copyright © 2006 Ing.Buero Bestenlehner. All rights reservered.
 */


/**
 *  Gibt ein Formularobjekt zurück.
 *  Das Formular selber wird mit dem Namen 'editform' vorausgesetzt; weiterhin
 *  Werden zwei Felder mit fName und fName_list vorausgesetzt. fName_list muss
 *  dabei als "select-multiple" ausgezeichnet sein.
 */
function setFormValue_getFObj(fName) {
    //
	var formObj = document.editform;
	if(formObj)	{
		if (formObj[fName] && formObj[fName+"_list"] && formObj[fName+"_list"].type=="select-multiple")	{
			return formObj;
		} else {
			alert("Formfields missing:\n fName: "+formObj[fName]+"\n fName_list:"+formObj[fName+"_list"]+"\n type:"+formObj[fName+"_list"].type+"\n fName:"+fName);
		}
	}
	return "";
}

/**
 *  Bemerkung: vereinfachte Funktion(!)
 */
function setFormValueFromBrowseWin(fName,value,label,exclusiveValues) {

  var formObj=setFormValue_getFObj(fName);
	if(formObj && value!="--div--")	{

    var fObj = formObj[fName+"_list"];
		var len = fObj.length;

			// Inserting element, if not already in the list
		var setOK = 1;
		for (a=0;a<len;a++)	{
			if (fObj.options[a].value==value)	{
				setOK = 0;
			}
		}
		if (setOK)	{
			fObj.length++;
			fObj.options[len].value = value;
			fObj.options[len].text  = unescape(label);
				// Traversing list and set the hidden-field
			setHiddenFromList(fObj,formObj[fName]);
		}
	}
}

/**
 *  Manipulation der ausgewählten Optionen
 */
function setFormValueManipulate(fName,type)	{	//
	var formObj = setFormValue_getFObj(fName)
	if (formObj)	{
		var localArray_V = new Array();
		var localArray_L = new Array();
		var localArray_S = new Array();
		var fObjSel = formObj[fName+"_list"];
		var l=fObjSel.length;
		var c=0;
		if (type=="Remove" || type=="Top" || type=="Bottom")	{
			if (type=="Top")	{
				for(a=0;a<l;a++)	{
					if(fObjSel.options[a].selected==1)	{
						localArray_V[c]=fObjSel.options[a].value;
						localArray_L[c]=fObjSel.options[a].text;
						localArray_S[c]=1;
						c++;
					}
				}
			}
			for (a=0;a<l;a++)	{
				if(fObjSel.options[a].selected!=1)	{
					localArray_V[c]=fObjSel.options[a].value;
					localArray_L[c]=fObjSel.options[a].text;
					localArray_S[c]=0;
					c++;
				}
			}
			if(type=="Bottom")	{
				for (a=0;a<l;a++)	{
					if (fObjSel.options[a].selected==1)	{
						localArray_V[c]=fObjSel.options[a].value;
						localArray_L[c]=fObjSel.options[a].text;
						localArray_S[c]=1;
						c++;
					}
				}
			}
		}
		if (type=="Down")	{
			var tC = 0;
			var tA = new Array();

			for (a=0;a<l;a++)	{
				if (fObjSel.options[a].selected!=1)	{
						// Add non-selected element:
					localArray_V[c]=fObjSel.options[a].value;
					localArray_L[c]=fObjSel.options[a].text;
					localArray_S[c]=0;
					c++;

						// Transfer any accumulated and reset:
					if (tA.length > 0)	{
						for (aa=0;aa<tA.length;aa++)	{
							localArray_V[c]=fObjSel.options[tA[aa]].value;
							localArray_L[c]=fObjSel.options[tA[aa]].text;
							localArray_S[c]=1;
							c++;
						}

						var tC = 0;
						var tA = new Array();
					}
				} else {
					tA[tC] = a;
					tC++;
				}
			}
				// Transfer any remaining:
			if (tA.length > 0)	{
				for (aa=0;aa<tA.length;aa++)	{
					localArray_V[c]=fObjSel.options[tA[aa]].value;
					localArray_L[c]=fObjSel.options[tA[aa]].text;
					localArray_S[c]=1;
					c++;
				}
			}
		}
		if (type=="Up")	{
			var tC = 0;
			var tA = new Array();
			var c = l-1;

			for (a=l-1;a>=0;a--)	{
				if (fObjSel.options[a].selected!=1)	{

						// Add non-selected element:
					localArray_V[c]=fObjSel.options[a].value;
					localArray_L[c]=fObjSel.options[a].text;
					localArray_S[c]=0;
					c--;

						// Transfer any accumulated and reset:
					if (tA.length > 0)	{
						for (aa=0;aa<tA.length;aa++)	{
							localArray_V[c]=fObjSel.options[tA[aa]].value;
							localArray_L[c]=fObjSel.options[tA[aa]].text;
							localArray_S[c]=1;
							c--;
						}
						var tC = 0;
						var tA = new Array();
					}
				} else {
					tA[tC] = a;
					tC++;
				}
			}
				// Transfer any remaining:
			if (tA.length > 0)	{
				for (aa=0;aa<tA.length;aa++)	{
					localArray_V[c]=fObjSel.options[tA[aa]].value;
					localArray_L[c]=fObjSel.options[tA[aa]].text;
					localArray_S[c]=1;
					c--;
				}
			}
			c=l;	// Restore length value in "c"
		}

			// Transfer items in temporary storage to list object:
		fObjSel.length = c;
		for (a=0;a<c;a++)	{
			fObjSel.options[a].value = localArray_V[a];
			fObjSel.options[a].text = localArray_L[a];
			fObjSel.options[a].selected = localArray_S[a];
		}
		setHiddenFromList(fObjSel,formObj[fName]);

//					TBE_EDITOR_fieldChanged_fName(fName,formObj[fName+"_list"]);
	}
}

/**
 * Kopiert die ausgewählten Optionen in die eigentliche Zielvariable
 */
function setHiddenFromList(fObjSel,fObjHid)	{	//
	l=fObjSel.length;
	fObjHid.value="";
	for (a=0;a<l;a++)	{
		fObjHid.value+=fObjSel.options[a].value+",";
	}
}

/* eof */
