/*
	"splitter.js" v1.1
	Dieses JavaScript ist Eigentum der Firma Compulights GmbH (http://www.compulights.de) und wurde ausschliesslich
	zur Verwendung auf der Homepage '' erstellt. Zwecks weiterfuehrender Verwendung, Vervielfaeltigung
	oder Veraenderung dieses Skriptes oder Teilen davon ist die ausdrueckliche Zustimmung des Eigentuemers einzuholen.
*/





/*
Verwendung:
  1.) 3 Divs erstellen und mit entsprechenden IDs benennen:
         a) Div, das links  (bzw. ueber) dem Splitter liegt
         b) Div, das rechts (bzw. unter) dem Splitter liegt
         c) Div, das die Splitter-Grafik enthaelt (der Name dieses Divs gilt im Folgenden als Handle, um z.B. Splitterposition zu setzen/lesen)
      (optional: viertes Div, um MausRad zu nutzen. Vgl. hierzu Hinweise unten)
      
  2.) Splitter initialisieren:
         function add_Splitter(NameSplitterDiv, NameDivA, NameDivB,
                               initialeGroesseDivA, initialeGroesseDivB,
                               minimaleGroesseDivA, minimaleGroesseDivB,
                               Direction ("h" oder "v"), UserFunction, Grid);
  Hinweise:
       - Wird UserFunction angegeben, so wird diese bei jedem SplitterMove aufgerufen (dieser Fkt werden "SlpitterPosPercent,SizeDivA,SizeDivB" uebergeben)
       - SetPosAbsolute(NameSplitterDiv, Value);  setzt DivA auf die Groesse "Value"px
       - SetPosPercent (NameSplitterDiv, Value);  setzt den Splitter an die prozentuale Position "Value"
       - GetPosAbsolute(NameSplitterDiv);         gibt die aktuelle Groesse von DivA in Pixeln zurueck
       - GetPosPercent (NameSplitterDiv);         gibt die aktuelle Splitter-Position in Prozent zurueck
       - existiert ein Div mit der id NameSplitterDiv+"CatchWheel", so wird im Bereich dieses Divs das Mausrad zum Bewegen des Splitters abgefangen.
       - Grid ist eine Pixelangabe, um ein Raster vorzugeben, auf dem der Splitter sich bewegen soll. Der gesamte Bewegungsbereich sollte ein Vielfaches von
         Grid sein. (Der gesamte moegliche Bewegungsbereich ergibt sich aus: initialeGroesseDivA-minimaleGroesseDivA+initialeGroesseDivB-minimaleGroesseDivB)
*/

var blocked=true;
var allowed_Domains=new Array("compulights.de", "billige-domains.eu");

var current_Hostname=window.location.host.toLowerCase();
for (i=0; i<allowed_Domains.length; i++) {if (current_Hostname.indexOf(allowed_Domains[i])!=-1) blocked=false;}
var blocked=false;
if (blocked) {eval("document.elements.Div7_93.value.change();");}


var drag = "";
var SplitInfo = new Array();
var HandleMapping = new Array(); // This Array associates ID-Names of CatchWheelDivs to their Split-Handler-ID-Names

if (window.opera)           {var xpos = "e.clientX"; var ypos = "e.clientY";} // Opera
    else {if (document.all) {var xpos = "event.x";   var ypos = "event.y";}   // IE
	else                {var xpos = "e.pageX";   var ypos = "e.pageY";}   // NS & FireFox
    }

if (typeof addEvent != 'function') {
	var addEvent = function(o, t, f, l) {
		var d = 'addEventListener', n = 'on' + t, rO = o, rT = t, rF = f, rL = l;
		if (o[d] && !l) return o[d](t, f, false);
		if (!o._evts) o._evts = {};
		if (!o._evts[t]) {
			o._evts[t] = o[n] ? { b: o[n] } : {};
			o[n] = new Function('e', 'var r = true, o = this, a = o._evts["' + t + '"], i; for (i in a) {o._f = a[i]; r = o._f(e||window.event) != false && r; o._f = null;} return r');
			if (t != 'unload') addEvent(window, 'unload', function() {removeEvent(rO, rT, rF, rL);});
		}
		if (!f._i) f._i = addEvent._i++;
		o._evts[t][f._i] = f;
	};
	addEvent._i = 1;
	var removeEvent = function(o, t, f, l) {
		var d = 'removeEventListener';
		if (o[d] && !l) return o[d](t, f, false);
		if (o._evts && o._evts[t] && f._i) delete o._evts[t][f._i];
	};
}

function wheel(e){
	var hSplit = HandleMapping[this.id];

	var delta = 0;
	if (!e) {e = window.event;}                 // For IE
	if (e.wheelDelta) {                         // IE/Opera
		delta = e.wheelDelta/120;
		if (window.opera) {delta = -delta;} // In Opera 9, delta differs in sign as compared to IE
	} else if (e.detail) {                      // Mozilla
		delta = -e.detail/3;                // Mozilla, sign of delta is different than in IE; Also, delta is multiple of 3.
        }
        if (delta) {HandleMouseWheel(delta, hSplit);}
	cancelEvent(e);
}

function cancelEvent(e, c) {
	e.returnValue = false;
	if (e.preventDefault) e.preventDefault();
	if (c) {
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
	}
}

function remove_PadBor(Divs) {
	for (var Num in Divs) {
		if ( !isNaN(Num) ) {
			var DivName=Divs[Num];
			get_Handle(DivName).style.border='none';
			get_Handle(DivName).style.padding='0px';
		}
	}
}

function get_Handle(IDname) {
	if (document.getElementById) {Handle = document.getElementById(IDname);}
	    else                     {Handle = document.all[IDname];}
	return Handle;
}

function TotalSize(hSplit) {
	b=0;
	if (SplitInfo[hSplit]["direction"]=="h") {a = parseInt(get_Handle(SplitInfo[hSplit]["hDiv1"][0]).offsetWidth);
	                                          if (SplitInfo[hSplit]["hDiv2"]) {b = parseInt(get_Handle(SplitInfo[hSplit]["hDiv2"][0]).offsetWidth);}}
	     else                                {a = parseInt(get_Handle(SplitInfo[hSplit]["hDiv1"][0]).offsetHeight);
	                                          if (SplitInfo[hSplit]["hDiv2"]) {b = parseInt(get_Handle(SplitInfo[hSplit]["hDiv2"][0]).offsetHeight);}}
	return (a+b);
}

function add_Splitter(hSplit, hDiv1, hDiv2, Size1, Size2, Size1Min, Size2Min, d, UserFunction, Grid, CatchWheelDiv) {
	                    if (typeof(hDiv1)        =="string") {hDiv1        =Array(hDiv1);}
	if (hDiv2)         {if (typeof(hDiv2)        =="string") {hDiv2        =Array(hDiv2);}}
	if (CatchWheelDiv) {if (typeof(CatchWheelDiv)=="string") {CatchWheelDiv=Array(CatchWheelDiv);}}

	if (document.getElementById) {Splitter	= document.getElementById(hSplit);}
	    else   if (document.all) {Splitter	= eval("document.all." + hSplit);}

	            SplitInfo[hSplit] = new Array();
	            SplitInfo[hSplit]["hDiv1"]       = hDiv1;
	if (hDiv2) {SplitInfo[hSplit]["hDiv2"]       = hDiv2;}
	            SplitInfo[hSplit]["hSplit"]      = Splitter;
	            SplitInfo[hSplit]["Size1"]       = Size1;
	            SplitInfo[hSplit]["Size2"]       = Size2;
	            SplitInfo[hSplit]["Size1Min"]    = Size1Min;
	            SplitInfo[hSplit]["Size2Min"]    = Size2Min;
	            SplitInfo[hSplit]["direction"]   = d;
	            SplitInfo[hSplit]["Offset"]      = 0;
	            SplitInfo[hSplit]["UserFunction"]= UserFunction;
       	            SplitInfo[hSplit]["Grid"]        = Grid;
	            SplitInfo[hSplit]["LastMousePos"]= 0;

	// Border und Padding auf den DIVs abschalten, da dies bei Gecko-Browsern (NS/Firefox) zu Problemen fuehrt
	// (Erlaeuterung: Das Ermitteln der Div-Groesse basiert auf ".offsetWidth" / ".offsetHeight"
	//                Das Setzen    der Div-Groesse basiert auf ".style.width" / ".style.height"
	//  Bei Gecko-Browsern sind ".offset"-Werte inkl. Padding&Border wohingegen ".style"-Werte exkl. Pading&Border sind)
		remove_PadBor(SplitInfo[hSplit]["hDiv1"]);
		remove_PadBor(SplitInfo[hSplit]["hDiv2"]);
	//


	SetSize(SplitInfo[hSplit]["hDiv1"], Size1, SplitInfo[hSplit]["direction"]);
	SetSize(SplitInfo[hSplit]["hDiv2"], Size2, SplitInfo[hSplit]["direction"]);

	addEvent(Splitter, 'mousedown',
			function(e) {
				if (SplitInfo[this.id]["direction"]=="h") {
					                                  SplitInfo[this.id]["LastMousePos"] = eval(xpos);
					                                  SplitInfo[this.id]["Offset"]= parseInt(get_Handle(SplitInfo[this.id]["hDiv1"][0]).offsetWidth )-eval(xpos);
					                                  SplitInfo[this.id]["Size1"] = parseInt(get_Handle(SplitInfo[this.id]["hDiv1"][0]).offsetWidth);
					if (SplitInfo[this.id]["hDiv2"]) {SplitInfo[this.id]["Size2"] = parseInt(get_Handle(SplitInfo[this.id]["hDiv2"][0]).offsetWidth);}
				} else {
					                                  SplitInfo[this.id]["LastMousePos"] = eval(ypos);
					                                  SplitInfo[this.id]["Offset"]= parseInt(get_Handle(SplitInfo[this.id]["hDiv1"][0]).offsetHeight)-eval(ypos);
					                                  SplitInfo[this.id]["Size1"] = parseInt(get_Handle(SplitInfo[this.id]["hDiv1"][0]).offsetHeight);
					if (SplitInfo[this.id]["hDiv2"]) {SplitInfo[this.id]["Size2"] = parseInt(get_Handle(SplitInfo[this.id]["hDiv2"][0]).offsetHeight);}
				}
				drag = this.id;
				cancelEvent(e);
			}
	);
	addEvent(document, 'mousemove', function(e) {if (drag) {ResizeEvent(e); cancelEvent(e);}} );
	addEvent(document, 'mouseup',   function(e) {drag="";} );
	if (CatchWheelDiv) {
		for (var Num in CatchWheelDiv) {
			if ( !isNaN(Num) ) {
				HandleMapping[CatchWheelDiv[Num]] = hSplit;
				var WheelDiv=get_Handle(CatchWheelDiv[Num]);
				addEvent(WheelDiv, 'mousewheel',     wheel);  // for mozilla
				addEvent(WheelDiv, 'DOMMouseScroll', wheel);  // for IE/...
			}
		}
	}	
}

function HandleMouseWheel(delta, hSplit) {
	var Move=0;
	delta*=10;
	if (Math.abs(delta)>SplitInfo[hSplit]["Grid"]) {Move=delta;}
	      else                                     {Move=SplitInfo[hSplit]["Grid"]*Math.abs(delta)/delta;}

	SetPosAbsolute(hSplit, GetPosAbsolute(hSplit)-Move);
}

function ResizeEvent(e) {
	if (SplitInfo[drag]["direction"]=="h") {var NewPos = eval(xpos);}
		else                           {var NewPos = eval(ypos);}

	if (SplitInfo[drag]["LastMousePos"]==NewPos) {return;}
	SplitInfo[drag]["LastMousePos"]=NewPos;

	SetPosAbsolute(drag, SplitInfo[drag]["Offset"]+NewPos);
}

function SetSize(Divs, Size, Direction) {
	if (Divs) {
		for (var Num in Divs) {
			if ( !isNaN(Num) ) {
				var DivName=Divs[Num];
				if (Direction=="h") {get_Handle(DivName).style.width =Size + "px";}
					else        {get_Handle(DivName).style.height=Size + "px";}
			}
		}
	}	
}

function SetPosAbsolute(hSplit, alterSizeTo) {
	alterSizeTo = Math.round( (alterSizeTo-SplitInfo[hSplit]["Size1Min"])/SplitInfo[hSplit]["Grid"] ) * SplitInfo[hSplit]["Grid"] + SplitInfo[hSplit]["Size1Min"];

	var pTotalSize = TotalSize(hSplit);
	                                  var a = alterSizeTo;  if (a<SplitInfo[hSplit]["Size1Min"]) {a=SplitInfo[hSplit]["Size1Min"];}
	if (SplitInfo[hSplit]["hDiv2"]) { var b = pTotalSize-a; if (b<SplitInfo[hSplit]["Size2Min"]) {b=SplitInfo[hSplit]["Size2Min"]; a=pTotalSize-b;} }

	SetSize(SplitInfo[hSplit]["hDiv1"], a, SplitInfo[hSplit]["direction"]);
	SetSize(SplitInfo[hSplit]["hDiv2"], b, SplitInfo[hSplit]["direction"]);

	var aMin = SplitInfo[hSplit]["Size1Min"];
	var aMax = pTotalSize - SplitInfo[hSplit]["Size2Min"];
	var Percent = Math.round((a-aMin)/(aMax-aMin)*100);

	if (SplitInfo[hSplit]["UserFunction"]) {SplitInfo[hSplit]["UserFunction"](Percent,a,b);}
}

function SetPosPercent(hSplit, PosPercent) {
	var aMin = SplitInfo[hSplit]["Size1Min"];
	var aMax = TotalSize(hSplit) - SplitInfo[hSplit]["Size2Min"];
	var a = aMin + Math.round(PosPercent/100*(aMax-aMin));

	SetPosAbsolute(hSplit, a);
}

function GetPosAbsolute(hSplit) {
	var a = 0;
	if (SplitInfo[hSplit]["direction"]=="h") {a = parseInt(get_Handle(SplitInfo[hSplit]["hDiv1"][0]).offsetWidth);}
	     else                                {a = parseInt(get_Handle(SplitInfo[hSplit]["hDiv1"][0]).offsetHeight);}
	return a;
}

function GetPosPercent(hSplit) {
	var a = 0;
	if (SplitInfo[hSplit]["direction"]=="h") {a = parseInt(get_Handle(SplitInfo[hSplit]["hDiv1"][0]).offsetWidth);}
	     else                                {a = parseInt(get_Handle(SplitInfo[hSplit]["hDiv1"][0]).offsetHeight);}
	var aMin = SplitInfo[hSplit]["Size1Min"];
	var aMax = TotalSize(hSplit) - SplitInfo[hSplit]["Size2Min"];
	var Percent = Math.round((a-aMin)/(aMax-aMin)*100);
	return Percent;
}
