/*
 * Ist die Variable 'img_base' nicht gesetzt, wird diese auf das aktuelle
 * DocumentRoot gesetzt, um die Funktionalitaet der folgenden Funktionen
 * zu gewaehrleisten.
 */
if ( !img_base ) {
		
	// Aktuelles DocumentRoot ermitteln
	var get_document_root   = /^(http:\/\/[^\/]*)/;
	var fetch_document_root = get_document_root.exec(document.URL);
	document_root = RegExp.$1;
	
	if ( document_root.substr((document_root.length-1),1) == '/' ) {
		
		document_root = document_root.substr(0, document_root.length-1);
	}
	
	// Basepath fuer statische Inhalte setzen
	var img_base = document_root;
}

/**
 * Blendet ein HTML-Element ein oder aus.
 * 
 * Bei jedem Wechsel wird geprueft ob das Aktions-Element eingeblendet ist
 * und dieses ggf. ausgeblendet damit es nicht stehen bleibt, wenn z.B.
 * alle Rezeptbilder ausgeblendet werden.
 *
 * @param  string  target  ID des Elements
 * @return void
 */
function toggle( target ) {
	
	obj = document.getElementById(target);
	obj.style.display = ( (obj.style.display=='none') ? '' : 'none');
	
	if ( (target != 'rezept_bild_actions') && (document.getElementById('rezept_bild_actions')) ) {
		
		document.getElementById('rezept_bild_actions').style.display = 'none';
	}
}

/**
 * Ermittelt die Position in Pixel innerhalb des DOM indem alle
 * Ebenen der Elternelemente durchlaufen werden und die Offset-
 * Werte zum gesamt-Abstand von links/oben addiert werden.
 *
 * @param  string  element_id  ID des Elements
 * @return array               array(top, left)
 */
function getElementPosition( element_id ) {
	
	var element_top  = 0;
	var element_left = 0;
	
	var obj = document.getElementById( element_id );
	
	if ( obj.offsetParent ) {
		
		do {
			
			element_left += obj.offsetLeft;
			element_top  += obj.offsetTop;
			
		} while ( obj = obj.offsetParent );
	}
	
	return [element_top, element_left];
}

// Container-Variable fuer HTML-Code des Aktions-Elements (Bild als Hauptbild setzen / loeschen)
var img_actions_html = '';

/**
 * Ermittelt die Position des aktuell mit der Maus ueberfahrenen Bildes
 * und blendet an gleicher Position ein Blockelement ein dass die Masse
 * des Bildes annimmt und die Aktions-Links zum Setzen als Hauptbild
 * und Loeschen enthaelt.
 * 
 * @param  int     bild_group    Bild-Gruppe
 * @param  string  bild_src_big  URL des Bildes
 * 
 * @return void
 */
function show_image_actions( bild_group ) {
	
	var actions_element = document.getElementById('rezept_bild_actions');
	var img_element     = document.getElementById('bild_'+bild_group);
	var img_position    = getElementPosition( 'bild_'+bild_group );
	var img_size        = [img_element.width, img_element.height];
	
	// HTML fuer das Aktions-Element auslesen, wenn noch nicht geschehen
	if ( img_actions_html == '' ) {
		
		img_actions_html = actions_element.innerHTML;
	}
	
	// Variablen in Aktions-Element parsen
	var new_actions_html = img_actions_html.replace(/\[img_group\]/ig, bild_group);
	
	actions_element.innerHTML = new_actions_html;
	
	/* Styles fuer das Aktions-Element definieren
	 * 
	 * Die Position wird links und oben um je 1 Pixel verschoben und die Breite sowie die
	 * Hoehe um 2 px erweitert, da alle Browser manchmal 1-2 px Abweichung haben.
	 */
	actions_element.style.top     = img_position[0]-1+'px';
	actions_element.style.left    = img_position[1]-1+'px';
	actions_element.style.width   = img_size[0]+2+'px';
	actions_element.style.height  = img_size[1]+2+'px';
	
	// Aktions-Element einblenden
	actions_element.style.display = 'block';
}

/**
 * Blendet das Aktionselement fuer einzelne Rezeptbilder aus, wenn es angezeigt
 * ist und die Mouse ueber einem Element ist dass nicht ein Thumbnail und 
 * nicht das Aktionselement selbst ist.
 * 
 * @param  object  event  mouse event
 * @return void
 */
function hide_image_actions(event) {
	
	var target_id = '';
	var parent_id = '';
	
	// targets in all major browsers, except of IE
	if ( event.target ) {
		
		target_id = event.target.id;
		
		if ( event.target.parentNode ) {
			
			parent_id = event.target.parentNode.id;
		}
		
	// targets in IE
	} else if ( event.srcElement ) {
		
		target_id = event.srcElement.id;
		
		if ( event.srcElement.parentNode ) {
			
			parent_id = event.srcElement.parentNode.id;
		}
	}
	
	// hide element
	actions_element = document.getElementById('rezept_bild_actions');
	
	if ( (actions_element) && (target_id.search(/bild_/) == -1) && (parent_id.search(/bild_/) == -1) ) {
		
		actions_element.style.display = 'none';
	}
}

/**
 * Tauscht das Hauptbild (oben-rechts) aus.
 * 
 * @param int     bild_group   Bild-Gruppe die als neues Hauptbild gesetzt wird
 * @param string  img_src_big  URL zum Bild (Typ 'big')
 * 
 * @return void
 */
function topImage( bild_group, img_src_big ) {
	
	// Aktuelle Bild-Quellen von Top-Bild und Thumbnail auslesen
	var img_element_top         = document.getElementById('bild_top');
	var img_element_top_src_old = img_element_top.src;
	
	var img_element_thumb         = document.getElementById('bild_'+bild_group);
	    img_element_thumb_src_old = img_element_thumb.src;
	
	// Neues Hauptbild setzen
	img_element_top.src   = img_element_thumb_src_old;
	img_element_thumb.src = img_element_top_src_old;
	
	// Aktionselement ausblenden
	toggle('rezept_bild_actions');
}

/**
 * Loescht ein Rezeptbild aus der Anzeige (und damit auch aus dem Druck).
 * 
 * @param int  bild_group  Bild-Gruppe die geloescht werden soll
 * 
 * @return void
 */
function deleteImage( bild_group ) {
	
	var img_element = document.getElementById('bild_'+bild_group);
	img_element.style.display = 'none';
	
	document.getElementById('rezept_bild_actions').style.display = 'none';
}
