noResultStr = "kein Ergebnis";
yVals = new Array;

rep = new Array();
rep[0] = new Array ("&auml;"	, "�");
rep[1] = new Array ("&ouml;"	, "�");
rep[2] = new Array ("&uuml;"	, "�");
rep[0] = new Array ("&Auml;"	, "�");
rep[0] = new Array ("&Ouml;"	, "�");
rep[0] = new Array ("&Uuml;"	, "U");
rep[0] = new Array ("&szlig;"	, "�");

function setSubCats(formobj) {
	init(formobj);
	
	cn = 0;
	for(x=0; x<cats.length-1; x++)
	{
		for(y=x+1; y<cats.length; y++)
		{
			relate(x,y,cn,formobj)
			cn++;
		}
	}
	
	// Sorting
	var selectedIndex = formobj.elements["select-o_UserFrontStdValue-sz_String.2"].selectedIndex;
	var selectedValue = formobj.elements["select-o_UserFrontStdValue-sz_String.2"].options[selectedIndex].value;
	
	if (selectedValue == "3") {
		sortOptions(formobj.elements["select-o_UserFrontStdValue-sz_String.3"]);
	}
	
}

function sortOptions(list){

    var items = list.options.length;
    
    // create array and make copies of options in list
    
    var tmpArray = new Array(items);
    
    for (i = 0; i < items; i++) 
    
        tmpArray[i] = new Option(list.options[i].text, list.options[i].value);
    
    // sort options using given function
    
    tmpArray.sort(compareOptionsByValue);

	/*
	 * Reihenfolge umkehren: Göttingen hat produktiv ID 7, Hannover hat 5
	 * Göttingen steht nun oben
	 */
	tmpArray.reverse();
	
    // make copies of sorted options back to list
    
    for (i = 0; i < items; i++) {
		list.options[i] = new Option(tmpArray[i].text, tmpArray[i].value);
	}
}

function compareOptionsByValue(a, b) {
	try {
		if (a.value < b.value) {
			return -1;
		} else if (a.value > b.value) {
			return 1;
		} else {
			return 0;
		}
	} catch (error) {
		return 0;
	}
}

function relate(x,y,cn,formobj)
{
	var objname_x 	= "select-o_UserFrontStdValue-sz_String." + (x+1);
	var objname_y 	= "select-o_UserFrontStdValue-sz_String." + (y+1);

	var obj_x		= formobj.elements[objname_x];
	var obj_y		= formobj.elements[objname_y];
	
	var selVal_x;
	var selVal_y;

	selVal_x	= seloptval(obj_x);

	selVal_y	= seloptval(obj_y);

	clr_yVals();
	for( i=0; i<obj_y.options.length; i++ )
	{
		yVals[obj_y.options[i].value] = 1;
	}

	with(obj_y) for(; options.length>0; options[0] = null);

	if( selVal_x > -1)
	{
		var optCnt = 0;
		for( yitm=0; yitm<cats[y].length; yitm++ )
		{
			if( defs[cn][selVal_x][yitm] && yVals[yitm])
			{

				obj_y.options[optCnt++] = new Option(cats[y][yitm], yitm);
				if(yitm == selVal_y)
				{
					obj_y.options[optCnt-1].selected = true;
				}

			}
		}
	} // end if
	else
	{
		obj_y.options[0] = new Option(noResultStr, -1);
	}

	if(obj_y.options.length == 0)
	{
		obj_y.options[0] = new Option(noResultStr, -1);
	}

	if((obj_y.options.selectedIndex < 0 || obj_y.options.selectedIndex >= obj_y.options.length) && obj_y.options.length>0 )
	{
		obj_y.options[0].selected = true;
	}
} // end relate(x,y,cn)


function seloptval(obj)
{
	var selopt = obj.options.selectedIndex;
	if(selopt >= 0 && selopt<obj.options.length)
	{
		return obj.options[selopt].value;
	}
	else
	{
		return 0;
	}
}  // seloptval

function clr_yVals()
{
	for( i=0; i<20 ; i++ )
	{
		yVals[i] = 0;
	}
} // end clr_yVals()

function init_one(formobj)
{
		var selname = "select-o_UserFrontStdValue-sz_String.1";
		var obj = formobj.elements[selname];

		with(obj) for(; options.length>0; options[0] = null);

		var optCnt = 0;
		for( j=0; j<cats[0].length ; j++ )
		{
			var found = false;
			for(yitm=0; yitm<defs[0][j].length && !found ; yitm++)
			{
				if (defs[0][j][yitm])
				{
					found = true;
				}
			}

			if(found)
			{
				obj.options[optCnt++] = new Option(cats[0][j], j);
			}
		}

		if(obj.options.length == 0)
		{
			obj.options[0] = new Option(noResultStr, -1);
		}

		if((obj.options.selectedIndex < 0 || obj.options.selectedIndex >= obj.options.length) && obj.options.length>0 )
		{
			obj.options[0].selected = true;
		}

}  // end init()


function init(formobj)
{
	for( i=1; i<cats.length ; i++ )
	{
		var selname = "select-o_UserFrontStdValue-sz_String." + (i+1);
		var obj = formobj.elements[selname];

		var selVal;

		selVal	= seloptval(obj);

		with(obj) for(; options.length>0; options[0] = null);
		for( j=0; j<cats[i].length ; j++ )
		{
			obj.options[j] = new Option(cats[i][j], j);
			if(j == selVal)
			{
				obj.options[j].selected = true;
			}
		}

		if((obj.options.selectedIndex < 0 || obj.options.selectedIndex >= obj.options.length) && obj.options.length > 0)
		{
			obj.options[0].selected = true;
		}
	} // end for
}  // end init()

function correctValues(obj)
{
	for ( i=0; i<obj.elements.length; i++ ) {
		var selobj = obj.elements[i];
		var selidx = selobj.selectedIndex;
		var objtype = selobj.type;
		if (objtype.indexOf("select")>-1)
		{
				if(selobj.options[selidx].value < 0)
				{
					alert("Diese Auswahl liefert kein Ergebnis");
					setSubCats(obj);
					return false;
				}

			var text = selobj.options[selobj.selectedIndex].text;
			with (selobj) for(; options.length>0; options[0] = null);

		//get all subcookies
		var oData = YAHOO.util.Cookie.getSubs("langTokens");
	
		var token = "-99";
			for(n in oData)
			{
	     			if(oData[n]==text)
     				{
    	 				//alert("FOUND");
		     			//alert("Name: "+n+" Value: "+oData[n]+" text="+text);
		     			token = n;
     				}
     		
   			}

			//selobj.options[0] = new Option(text,text)
			selobj.options[0] = new Option(text,token)
			selobj.options[0].selected = true;
		}
	}
	return true;
}  // correctValues

function replace(str, needle, repl)
{
	while ( str.indexOf(needle) > -1 )
	{
		var pos = str.indexOf(needle);
		str = str.substring(0,pos) + repl + str.substring(pos + needle.length , str.length)
	}
	return str;
}  // replace

function start( formobj )
{
	for (i=0; i<cats.length; i++)
	{
		for ( j=0; j<cats[i].length; j++ )
		{
			for (k=0; k<rep.length; k++) {
				cats[i][j] = replace(cats[i][j], rep[k][0], rep[k][1]);
			}
		}
	}
	init_one(formobj);
	setSubCats(formobj);
}  // start



