//--- AJAX ------------------------------------------------------------------

/*
 * 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);
	}
}

function toGermanNumber(jsNumber) {
	var parts = jsNumber.toFixed(2).split(".");
	var digits = parts[0].split("");
	while (digits.length % 3 != 0) digits.unshift("");
	
	parts[0] = digits.eachSlice(3, function(digits){ return digits.join(""); }).join(".");
	return parts[0] + "," + parts[1];
}

//--- 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) {
		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', queue: { position: 'end', scope: id }});
}

/*
 * 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?
	}
	fireEvent(field, 'change');
}

/* Senden eines Dropdown Menü Links (Thx, VKB 2008) */
function dropdownClickHandler(dropdown) {
	if(dropdown.selectedIndex > 0) {
		location.href = dropdown.value;
	}

	return false;
}


function hideDivWhenValueIs(div, input, value){
	Event.observe(document, "dom:loaded", function(){
		doDaHiding(div, input, value);
		$(input).observe('change', function(){
			doDaHiding(div, input, value);
		});
	});
}

var isEffect = false;

function doDaHiding(div, input, value) {
	var values = $w(value);
	if ($(div).visible() && values.indexOf($F(input)) != -1){
		new Effect.BlindUp(div,{beforeStart: function() {isEffect = true}, afterFinish: function() {isEffect = false}});
	} else  if (!$(div).visible() && values.indexOf($F(input)) == -1){
		new Effect.BlindDown(div,{beforeStart: function() {isEffect = true}, afterFinish: function() {isEffect = false}});
	}
}

//--- Produktempfehlungen ----------------------------------------------------

/* AJAX Request um zum aktuellen Profil Empfehlungen zu erhalten. */
function ermittleProduktempfehlung(vid) {
	if (jsonrpc) {
		jsonrpc.benutzerService.ermittleProduktempfehlungen(function(result){
			if (result != null) {
				// Alle Aktionen, welche nach Empfangen von Empfehlungen ausgeführt werden sollen
				clearEmpfehlungen();
				setEmpfehlungen(result);
				Event.fire(document, 'produktempfehlung:ermittelt');
			}
		}, vid);
	}
}


function clearEmpfehlungen() {
	$$('._gewichtet').each(
		function(node) {
			node.removeClassName('_gewichtet');
			$R(1, 5).each(function (i){
				node.removeClassName('_gewichtung'+i);
			});
		}
	);
}
function setEmpfehlungen(empfehlungen) {
	$H(empfehlungen.map).each(
		function(produkt) {
			$$('._' + produkt.key).each(
					function(node) {
						node.addClassName('_gewichtet');
						node.addClassName('_gewichtung' + produkt.value);
						//new Effect.Highlight(node);
					}
			);
		}
	);
}

// until prototypejs can do standard events
function fireEvent(element,event){
	if(document.createEvent){
		// dispatch for firefox + others
		var evt = document.createEvent("HTMLEvents");
		evt.initEvent(event, true, true ); // event type,bubbling,cancelable
		return !element.dispatchEvent(evt);
	}
	else{
		// dispatch for IE
		var evt = document.createEventObject();
		return element.fireEvent('on'+event,evt)
	}
}