// ==================================================================
// Formular an gewählten Sprachen dynamisch anpassen
// ------------------------------------------------------------------
//	optional: Kategorien je nach gewählten Portalen und Sprachen highlighten
// ==================================================================
// Implementierung
//		1) Script in die Seite einbauen
//			<scr ipt language="javascript" src="js/multilang.js"></scr ipt>
//		2a) Selectbox oder Checkboxen für Portale (optional)
//			Wichtig ist, dass bei onchange! die Funktion "multilang_set_portal()" aufgerufen wird.
// 		<select name="magazin_portal[]" multiple onchange="multilang_set_portal()">
//		2b) Selectbox oder Checkboxen für Sprachen (obligatorisch)
//			Wichtig ist, dass bei onlick! die Funktion "multilang_set_lang()" aufgerufen wird.
// 		<input name="magazin_lang[]" type="checkbox" value="de" onclick="multilang_set_lang()"'.$checked["de"].'>
//		3) Nach dem Formular die init-Funktion einbauen
//			per default wird das Sprachfeld anhand des Suffixes lang[] gefunden
//			per default wird das Formular f verwendet
//			<scr ipt language="javascript" type="text/javascript">multilang_init();</scr ipt>
//		4) Im Button für das Speichern der Daten die folgende Funktion aufrufen: multilang_pre_save()
//			Diese enabled alle Formularfelder, so dass diese sicher übertragen werden.
// ------------------------------------------------------------------
// Implementierung des Kategorie-Highlightings
//		5) Alle verfügbaren Kategorien im Array multilang_cat_options[portal][lang]=value
//			ablegen und dieses ins JS vor! multilang_init() schreiben
//			Mit dem Array werden automatisch die Kategorie-Funktionen aktiviert
//		6)	In die Selectbox für das Portal onchange="multilang_set_portal()" einbauen
// ------------------------------------------------------------------

// Formular und Felder
var multilang_form=null;
var multilang_form_name="f";
var multilang_field_name="";

// Felder für dynamisches Kategorie-Highlight
var multilang_field_portal_name="";
var multilang_field_category_name="";

// Sprach/Portaloptionen (Array mit Werten value und checked)
var multilang_lang_options=new Array();
var multilang_portal_options=new Array();

// Kategorieoptionen (Array[portal][lang]=value)
// null 	... kein Kategoprie-Highlight
// array ... Kategoprie-Highlight aktiv
var multilang_cat_options=null;


// ------------------------------------------------------------------
// Sprachfunktionen und Kategorie-Highlighting initialisieren
// ------------------------------------------------------------------
function multilang_init()
{
	// Felder finden
	multilang_form=document[multilang_form_name];
	if (!multilang_field_name) {multilang_find_field_names();}
	
	if (multilang_field_name)
	{
		// Sprachfelder initialisieren
		multilang_set_lang();
	
		// Falls vorhanden Kategorien highlighten
		if (multilang_cat_options!=null) {multilang_category_markup();}
	}
}



// ------------------------------------------------------------------
// Aktuelle Sprachen abhängig vom Status der Checkboxen setzen
// ------------------------------------------------------------------
function multilang_set_lang()
{
	if (!multilang_form) {return;}
	multilang_get_lang_options();
	multilang_set_form_fields();
	// Falls vorhanden Kategorien highlighten
	if (multilang_cat_options!=null) {multilang_category_markup();}
}

function multilang_set_portal()
{
	// Falls vorhanden Kategorien highlighten
	if (multilang_cat_options!=null) {multilang_category_markup();}
}



// ------------------------------------------------------------------
// Enabled vor dem Abschicken des Formulars alle sprachabhängigen Felder,
// da sonst die Daten restlos verloren gehen und für einen Fehlerfall
// nicht mehr zur Verfügung stehen.
// wird bei Formularversand aufgerufen
// ------------------------------------------------------------------
function multilang_pre_save()
{
	// Alle Sprachen intern auf aktiv setzen
	for (var a=0; a<multilang_lang_options.length; a++) {multilang_lang_options[a][1]=true;}
	
	// Alle Felder aktivieren
	multilang_set_form_fields();
}



// ------------------------------------------------------------------
// interne Funktion
// enabled/disabled anhand der Werte in multilang_lang_options
// die passenden Formularfelder
// ------------------------------------------------------------------
function multilang_set_form_fields()
{
	for (var a=0; a<multilang_lang_options.length; a++)
	{
		for (var b=0; b<multilang_form.elements.length; b++)
		{
			if (multilang_is_a_matching_lang_field(multilang_form.elements[b].name,multilang_lang_options[a][0]))
			{
				if (multilang_lang_options[a][1])
				{
					// Element enablen
					multilang_form.elements[b].disabled=false;
					multilang_form.elements[b].style.backgroundColor="";
				}
				else
				{
					// Element disablen
					multilang_form.elements[b].disabled=true;
					multilang_form.elements[b].style.backgroundColor="#f0f0f0";
				}
			}
			else
			{
				// Style aller anderen disabled-Felder auch anpassen
				if (multilang_form.elements[b].disabled)
				{
					multilang_form.elements[b].style.backgroundColor="#f0f0f0";
				}
			}
		}
	}
}



// ------------------------------------------------------------------
// Findet die Sprach-Checkboxen anhand des Suffixes lang[]
// ------------------------------------------------------------------
function multilang_find_field_names()
{
	if (!multilang_form) {return;}
	for (var a=0; a<multilang_form.elements.length; a++)
	{
		if (multilang_form.elements[a].name.indexOf('lang[]')!=-1 || multilang_form.elements[a].name.indexOf('lang')!=-1)
		{
			// Sprachbox gefunden
			multilang_field_name=multilang_form.elements[a].name;
		}
		else if (multilang_form.elements[a].name.indexOf('portal[]')!=-1 || multilang_form.elements[a].name.indexOf('portal')!=-1)
		{
			// Portalbox gefunden
			multilang_field_portal_name=multilang_form.elements[a].name;
		}
		else if (multilang_form.elements[a].name.indexOf('category[]')!=-1 || multilang_form.elements[a].name.indexOf('category')!=-1)
		{
			// Categorybox gefunden
			multilang_field_category_name=multilang_form.elements[a].name;
		}		
	}
}

// ------------------------------------------------------------------
// Wertet select-one, select-multiple, checkbox, radio aus
// und gibt das Array options[]=(value,true|false) zurück
// ------------------------------------------------------------------
function multilang_get_lang_options()
{
	multilang_lang_options=multilang_get_form_options(multilang_field_name);
}
function multilang_get_portal_options()
{
	multilang_portal_options=multilang_get_form_options(multilang_field_portal_name);
}
function multilang_get_form_options(field_name)
{
	if (!multilang_form) {return;}
	
	var options=new Array();
	var f_obj=document[multilang_form_name][field_name];
	
	if (f_obj && (f_obj.type=="select-one" || f_obj.type=="select-multiple"))
	{
		for (var a=0; a<f_obj.options.length; a++)
		{
			// Eintrag in Selectbox ist checked/unchecked
			options[options.length]=new Array(f_obj.options[a].value,f_obj.options[a].selected);
		}
	}
	else
	{	
		for (var a=0; a<multilang_form.elements.length; a++)
		{
			if (multilang_form.elements[a].name==field_name)
			{
				// Checkbox oder Radio gefunden
				options[options.length]=new Array(multilang_form.elements[a].value,multilang_form.elements[a].checked);
			}
		}
	}
	
	return options;
}



// ------------------------------------------------------------------
// Prüft anhand des Namens und eines Sprachkürzels ob
// das Feld der Sprache zugeordnet ist
// ------------------------------------------------------------------
function multilang_is_a_matching_lang_field(field_name,lang)
{
	var lang_suffix="_"+lang;
	
	// Array-Klammern ggf abschneiden
	bracket=field_name.indexOf('[');
	if (bracket>=0) {field_name=field_name.substring(0,bracket);}
	
	// Lang-Suffix finden ("_de")
	startIdx=field_name.length-(lang.length)-1;
	idx=field_name.substr(startIdx,lang.length+1);

	return (idx=="_"+lang);
}



// ------------------------------------------------------------------
// Sorgt für das Ausgrauen der Kategorien 
// die in den gewählten Portalen und Sprachen
// nicht verfügbar sind.
// ------------------------------------------------------------------
function multilang_category_markup()
{
	// Portal und Kategorie Selectboxen
	var f_category=document[multilang_form_name][multilang_field_category_name];

	// gewählte Portale via multilang ermitteln
	multilang_get_portal_options();
	var portal_checked=new Array();
	for (var a=0; a<multilang_portal_options.length; a++)
	{
		val=multilang_portal_options[a][0];
		chk=multilang_portal_options[a][1];
		portal_checked[val]=chk;
	}
	
	// gewählte Sprachen via multilang ermitteln
	multilang_get_lang_options();
	var lang_checked=new Array();
	for (var a=0; a<multilang_lang_options.length; a++)
	{
		val=multilang_lang_options[a][0];
		chk=multilang_lang_options[a][1];
		lang_checked[val]=chk;
	}
	
	// gültige Kategorien für Portal & Sprache
	cat_valid=new Array();
	
	// portal
	for (var portal in multilang_cat_options)
	{
		// nicht markiertes Portal
		if (!portal_checked[portal]) {continue;}
		
		// lang
		for (var lang in multilang_cat_options[portal])
		{
			// nicht markierte Sprache
			if (!lang_checked[lang]) {continue;}
			
			// Portal und Sprache sind markiert
			// Kategorie als gültig übernehmen
			for (var cat_idx in multilang_cat_options[portal][lang])
			{
				var cat=multilang_cat_options[portal][lang][cat_idx];
				cat_valid[cat]=true;
			}
		}
	}

	// Optionen highlighten/ausgrauen
	for (var a=0; a<f_category.options.length; a++)
	{
		if (cat_valid[f_category.options[a].value])
		{
			f_category.options[a].style.color="#000000";
		}
		else
		{
			f_category.options[a].style.color="#bbbbbb";
		}
	}
}