/* ========================================================================================================
	DYNAMISCHER RAHMEN UM ELEMENTE
	dynborder.js
	Copyright (c) Wolfram Biedermann, Regen - Jede unerlaubte Verwendung untersagt
   ========================================================================================================
*/

// Die entsptrechenden Element-Nodes werden hier erzeugt und eingehaengt, NICHT in PHP !!

// element_posStyle:
// relative oder absolute fuer das Element, das den Rahmen bekommt, kann hier gesetzt werden. Kann aber auch per css bereits mitkommen.
// Verantwortung der aufrufenden Fkt.!
// unique_name: Ein einmaliger Namen als Teil der ID der einzelnen Elemente

function dynborder ( element_id, unique_name, element_posStyle, innen )
{
	var thisObject = this;

	var o = {};
	var u = {};
	var l = {};
	var r = {};
	var lo = {};
	var ro = {};
	var lu = {};
	var ru = {};

	var bezugselement;
	var bezugselem_h_alt = 0;
	var bezugselem_b_alt = 0;

	var preOnloadInit = false;

	///////////////////////////////////////////////////////
	// Rahmengrafiken der einzelnen Dimensionen setzen
	//
	this.setO = function setO ( grafik, hoehe ){
		o["grafik"] = grafik;
		o["hoehe"] = hoehe;
		o["id"] = element_id + unique_name + "_o";
	}
	this.setU = function setU ( grafik, hoehe ){
		u["grafik"] = grafik;
		u["hoehe"] = hoehe;
		u["id"] = element_id + unique_name + "_u";
	}
	this.setL = function setL ( grafik, breite  ){
		l["grafik"] = grafik;
		l["breite"] = breite;
		l["id"] = element_id + unique_name + "_l";
	}
	this.setR = function setR ( grafik, breite  ){
		r["grafik"] = grafik;
		r["breite"] = breite;
		r["id"] = element_id + unique_name + "_r";
	}
	this.setLO = function setLO ( grafik, breite, hoehe  ){
		lo["grafik"] = grafik;
		lo["breite"] = breite;
		lo["hoehe"] = hoehe;
		lo["id"] = element_id + unique_name + "_lo";
	}
	this.setRO = function setRO ( grafik, breite, hoehe  ){
		ro["grafik"] = grafik;
		ro["breite"] = breite;
		ro["hoehe"] = hoehe;
		ro["id"] = element_id + unique_name + "_ro";
	}
	this.setLU = function setLO ( grafik, breite, hoehe  ){
		lu["grafik"] = grafik;
		lu["breite"] = breite;
		lu["hoehe"] = hoehe;
		lu["id"] = element_id + unique_name + "_lu";
	}
	this.setRU = function setRU ( grafik, breite, hoehe  ){
		ru["grafik"] = grafik;
		ru["breite"] = breite;
		ru["hoehe"] = hoehe;
		ru["id"] = element_id + unique_name + "_ru";
	}

	///////////////////////////////////////////////////////
	// schon beim Registrieren anfangen
	//
	this.activatePreOnloadInit = function activatePreOnloadInit () {
		preOnloadInit = true;
	}

	///////////////////////////////////////////////////////
	// element erzeugen
	// Die 4 Parameter sind Flags
	//
	this.createElement = function createElement( obj, b, b_vonLinks, h, h_vonOben ) 
	{
		var elem = document.createElement ("div");
		var repeat = !( b && h );
		
		elem.id = obj["id"];
		elem.style.position = "absolute";
			
		if( b ) {
			elem.style.width = obj["breite"] + "px";
			if( b_vonLinks ) {
				if( innen )
					elem.style.left = 0;
				else
					elem.style.left = -obj["breite"] + "px";
			} 
			else {
				if( innen )
					elem.style.right = 0;
				else
					elem.style.right = -obj["breite"] + "px";
			}
// Wenn kein Eck, wiederholen. (Eck ist immer dann, wenn b UND h gesetzt sind)
			if( !h ) {
				elem.style.backgroundRepeat = "repeat-y";
				elem.style.top = 0;
			}
		}
		if( h ) {
			elem.style.height = obj["hoehe"] + "px";
			if( h_vonOben ) {
				if( innen )
					elem.style.top = 0;
				else
					elem.style.top = -obj["hoehe"] + "px";
			}
			else {
				if( innen )
					elem.style.bottom = 0;
				else
					elem.style.bottom = -obj["hoehe"] + "px";
			}
			if( !b ) {
				elem.style.backgroundRepeat = "repeat-x";
				elem.style.left = 0;
			}
		}

		elem.style.backgroundImage = "url(" + obj["grafik"] +")";
		bezugselement.appendChild( elem );
	}
	
	///////////////////////////////////////////////////////
	// Rahmen zeichnen
	//
	this.darstell_init = function darstell_init ()
	{
		bezugselement = document.getElementById( element_id );
		if( !bezugselement )
	return false;

// relative oder absolute kann hier gesetzt werden. Kann aber auch per css bereits mitkommen.
// Verantwortung der aufrufenden Fkt.!
		if( element_posStyle != '' )
			bezugselement.style.position = element_posStyle;

		if( o["id"] )
			thisObject.createElement( o, false, false, true, true );
		if( u["id"] )
			thisObject.createElement( u, false, false, true, false );
		if( l["id"] )
			thisObject.createElement( l, true, true, false, false );
		if( r["id"] )
			thisObject.createElement( r, true, false, false, false );
		if( lo["id"] )
			thisObject.createElement( lo, true, true, true, true );
		if( ro["id"] )
			thisObject.createElement( ro, true, false, true, true );
		if( lu["id"] )
			thisObject.createElement( lu, true, true, true, false );
		if( ru["id"] )
			thisObject.createElement( ru, true, false, true, false );
	return true;
	}

//========================================================================================================
//	Resize-Funktionen
//========================================================================================================
/*
	keine besonderen Aktionen bei resizeInit oder onloadInit(). Wenn Tracking, wird ja resize gerufen. Versuche einfach zu initialisieren, bis das Elternelement existiert. Dann kann die Funktion loslaufen
*/
	///////////////////////////////////////////////////////
	// onloadInit
	// fallweise erst bei onload initialisieren
	// Auf jeden Fall elem_X_alt zuruecksetzen und Neuberechnung erzwingen
	//
	this.onloadInit = function onloadInit () {
//		if( !preOnloadInit )
//			thisObject.darstell_init();
		bezugselem_h_alt = 0;
		bezugselem_b_alt = 0;
	}

	///////////////////////////////////////////////////////
	//  Systemfunktion resizeInit
	//	Wenn preOnloadInit gesetzt, schon vorab anfangen
	// 
	this.resizeInit = function resizeInit () {
//		if( preOnloadInit )
//			thisObject.darstell_init();
	}

	///////////////////////////////////////////////////////
	//	isLocallyProtected
	//  anhand dieser Methode erkennt system_floatResize, ob ein lokaler Event einen Schutz gegen gleichzeitiges Aufrufen
	//  von resize() benoetigt. Falls ja, wartet system_floatResize, bis der lokale Schutz nicht mehr existiert, also bis die
	//  Methode isLocallyProtected() false zurueckgibt.
	//  Nehme im konkreten Fall die bereits fuer internen Schutz gebrauchte Variable in_move her.
	//
	this.isLocallyProtected = function isLocallyProtected (){
	return false;
	}

	///////////////////////////////////////////////////////
	// Systemfunktion resize
	//
	this.resize = function resize ()
	{
		if( !bezugselement )
			if( ! thisObject.darstell_init() )
	return;

		var bezugselem_b_neu = bezugselement.offsetWidth;
		var bezugselem_h_neu = bezugselement.offsetHeight;
		var rueck = false;
	
		if( !bezugselem_b_neu || !bezugselem_h_neu )
	return rueck;
		
// Angepasst werden muessen nur die laengs- und querteile, nicht die ecken!
		if( rueck = ( bezugselem_h_alt != bezugselem_h_neu || bezugselem_b_alt != bezugselem_b_neu ) )
		{
			if( o["id"] )
				document.getElementById( o["id"] ).style.width = bezugselem_b_neu + "px";
			if( u["id"] )
				document.getElementById( u["id"] ).style.width = bezugselem_b_neu + "px";
			if( l["id"] )
				document.getElementById( l["id"] ).style.height = bezugselem_h_neu + "px";
			if( r["id"] )
				document.getElementById( r["id"] ).style.height = bezugselem_h_neu + "px";
		}
		bezugselem_h_alt = bezugselem_h_neu;
		bezugselem_b_alt = bezugselem_b_neu;
	return rueck;
	}
}

/*

		if( o["id"] ) {
			elem_o = document.createElement ("div");
			elem_o.id = o["id"];
			elem_o.style.position = "absolute";
			elem_o.style.height = o["hoehe"] + "px";
			elem_o.style.top = -o["hoehe"] + "px";
			elem_o.style.left = 0;
			elem_o.style.backgroundImage = "url(" + o["grafik"] +")";
			elem_o.style.backgroundRepeat = "repeat-x";
			element_id.appendChild( elem_o );
		}
		if( u["id"] ) {
			elem_u = document.createElement ("div");
			elem_u.id = u["id"];
			elem_u.style.position = "absolute";
			elem_u.style.height = u["hoehe"] + "px";
			elem_u.style.bottom = -u["hoehe"] + "px";
			elem_u.style.left = 0;
			elem_u.style.backgroundImage = "url(" + u["grafik"] +")";
			elem_u.style.backgroundRepeat = "repeat-x";
			element_id.appendChild( elem_u );
		}
		if( l["id"] ) {
			elem_l = document.createElement ("div");
			elem_l.id = l["id"];
			elem_l.style.position = "absolute";
			elem_l.style.width = l["breite"] + "px";
			elem_l.style.right = -l["breite"] + "px";
			elem_l.style.top = 0;
			elem_l.style.backgroundImage = "url(" + l["grafik"] +")";
			elem_l.style.backgroundRepeat = "repeat-y";
			element_id.appendChild( elem_l );
		}
		if( r["id"] ) {
			elem_r = document.createElement ("div");
			elem_r.id = r["id"];
			elem_r.style.position = "absolute";
			elem_r.style.width = r["breite"] + "px";
			elem_r.style.right = -r["breite"] + "px";
			elem_r.style.top = 0;
			elem_r.style.backgroundImage = "url(" + r["grafik"] +")";
			elem_r.style.backgroundRepeat = "repeat-y";
			element_id.appendChild( elem_r );
		}
		if( lo["id"] ) {
			elem_lo = document.createElement ("div");
			elem_lo.id = lo["id"];
			elem_lo.style.position = "absolute";
			elem_lo.style.width = lo["breite"] + "px";
			elem_lo.style.height = lo["hoehe"] + "px";
			elem_lo.style.left = -lo["breite"] + "px";
			elem_lo.style.top = -lo["hoehe"] + "px";
			elem_lo.style.backgroundImage = "url(" + lo["grafik"] +")";
			element_id.appendChild( elem_lo );
		}
		if( ro["id"] ) {
			elem_ro = document.createElement ("div");
			elem_ro.id = ro["id"];
			elem_ro.style.position = "absolute";
			elem_ro.style.width = ro["breite"] + "px";
			elem_ro.style.height = ro["hoehe"] + "px";
			elem_ro.style.right = -ro["breite"] + "px";
			elem_ro.style.top = -ro["hoehe"] + "px";
			elem_ro.style.backgroundImage = "url(" + ro["grafik"] +")";
			element_id.appendChild( elem_ro );
		}
		if( lu["id"] ) {
			elem_lu = document.createElement ("div");
			elem_lu.id = lu["id"];
			elem_lu.style.position = "absolute";
			elem_lu.style.width = lu["breite"] + "px";
			elem_lu.style.height = lu["hoehe"] + "px";
			elem_lu.style.left = -lu["breite"] + "px";
			elem_lu.style.bottom = -lu["hoehe"] + "px";
			elem_lu.style.backgroundImage = "url(" + ro["grafik"] +")";
			element_id.appendChild( elem_lu );
		}
		if( ru["id"] ) {
			elem_ru = document.createElement ("div");
			elem_ru.id = ru["id"];
			elem_ru.style.position = "absolute";
			elem_ru.style.width = ru["breite"] + "px";
			elem_ru.style.height = ru["hoehe"] + "px";
			elem_ru.style.right = -lu["breite"] + "px";
			elem_ru.style.bottom = -lu["hoehe"] + "px";
			elem_ru.style.backgroundImage = "url(" + ro["grafik"] +")";
			element_id.appendChild( elem_ru );
		}


*/


