// --- Globele Variablen -----------------------------------------------------

// AJAX-Variablen
var jsonrpc = null;

//--- AJAX ------------------------------------------------------------------

/*
 * Initialisierung des JSON Clients
 */
function initialisiereAjax(appServerRoot) {
	jsonrpc = new JSONRpcClient(appServerRoot + "/JSON-RPC");
}

/*
 * Blendet die AJAX Loader Animation ein oder aus
 */
function setWait(state) {
	if ($('wait')) {
		if (state == 'on') {
			new Effect.Appear('wait');
		} else if (state == 'off') {
			new Effect.Fade('wait');	
		}	
	}
}

//--- Tracking ---------------------------------------------------------------

function trackEvent(kategorie, objekt, aktion) {
	// if etracker tracking is defined try to send it via etracker
	if(typeof(ET_Event) !== 'undefined') {
	  ET_Event.eventStart(objekt, kategorie, aktion, et_pagename);
	}
}

//--- Web 2.0 ----------------------------------------------------------------


/*
 * Öffnet und schließt Layer, abhängig davon, ob sie bereits offen oder noch geschlossen sind.
 * Ausserdem wird daruf geachtet, dass immer nur ein Layer offen ist.
 */
function blind(id) {
	if (effectOn == false) {
		if (isInList(id, openTabs)) {
			blindUp(id);
			return false;
		} else {
			blindDown(id);
			return true;
		}
	}
}
function blindUp(id) {
	new Effect.BlindUp(id + 'Layer', {duration:0.4, beforeStart: function() {effectOn = true}, afterFinish: function() {effectOn = false}});
	document.getElementById(id + "Lasche").className="link xRisikoLascheInaktiv";
	remove(id, openTabs);
}

function blindDown(id) {

	// öffnet Tab
	function innerBlindDown(innerId) {
		new Effect.BlindDown(innerId + "Layer", {duration:0.4, beforeStart: function() {effectOn = true}, afterFinish: function() {effectOn = false}});
		document.getElementById(innerId + "Lasche").className="link xRisikoLascheAktiv";
		add(innerId, openTabs);
	}
	
	// offenes Tab schließen und erst dann das zu öffnende öffnen
	if (openTabs.length == 1) {
		logger(openTabs[0] + ' ist noch offen.');
		new Effect.BlindUp(openTabs[0] + "Layer", {duration:0.4, beforeStart: function() {effectOn = true}, afterFinish: function() {innerBlindDown(id)}});
		document.getElementById(openTabs[0] + "Lasche").className="link xRisikoLascheInaktiv";
		remove(openTabs[0], openTabs);
	} else {
		// kein anderes Tab offem, also Zieltab öffnen
		innerBlindDown(id);
	}
}

/*
 * Verschieben der Pages im Window inkl. des Fadens des Hintergrunds.
 */
function slide(id, w, fadeId, fade) {
	if (fade== 'in') {
		new Effect.Opacity(fadeId, {duration:0.4, from:0.1, to:1.0});
	} else if (fade == 'out') {
		new Effect.Opacity(fadeId, {duration:0.4, from:1.0, to:0.1});
	}
	new Effect.Move (id,{duration:0.4, x: w, y: 0, mode: 'relative'});
}

/*
 * Abhängiges Blinden
 */
function blindConditional(id, state, before, after) {
	if (state == 'off') {
		new Effect.Fade(id, {duration:0.4, beforeStart: before})
		new Effect.BlindUp(id, {duration:0.4, afterFinish: after})
	} else if (state == 'on') {
		new Effect.Appear(id, {duration:0.4, beforeStart: before})
		new Effect.BlindDown(id, {duration:0.4, afterFinish: after})
	}
}

/* Setzt eine Reihe von Werten (Array) auf die Elemente eines Formulars. */
function setFormValues(formId, values) {

	// Get Form By Id
	var form = $(formId);

	// Iterate over all Elements to set
	var i = 0;
	var j = values.size(); 
	Form.getElements(form).each(
			function(item) {
				setFormValue(item, values[i++]);
			}
	);
}

/* Setzt einen Wert auf ein Feld, abhängig vom Feldtyp. */
function setFormValue(field, value) {
	if (field.type == 'checkbox' || field.type == 'radio') {
		field.checked = value;
	} else if (field.type == 'text' || field.type == 'select-one' || field.type == 'hidden') {
		field.value = value;
	} else if (field.type == 'submit') {
		// TODO: auto Submit?
	}	
}

/* Senden eines Dropdown Menü Links (Thx, VKB 2008) */
function dropdownClickHandler(dropdown) {
	if(dropdown.selectedIndex > 0) {
		location.href = dropdown.value;
	}

	return false;
}