/*
 * 
 * ==============================
 * Pfeildarstellung an Formularen
 * ==============================
 * 
 * Erstellt von: Rene Fischer
 * --------------------------
 * Dieses Script unterliegt der Open-Source-Lizenz!
 * Es darf unter beibehaltung dieser Zeilen beliebig 
 * oft und ohne Einschränkungen kopiert, verändert und 
 * verwendet werden.
 *  
 * */


fehlerToId  = function () {
	this.fehler = new Array();
	this.nPos = 0;
	this.nIndent = 0;
	
	this.relevantDivId = "page";
	this.divmargin = 10;
	this.lineident = 10;
	this.allWidth = 861;
	this.lineColor = "#FF0000";
	this.meldungBreite = 155;
	this.meldungLeftPos = 31;

	this.createdElements = new Array();

	this.addFehlerToId = function(p_sId, p_sMeldung) {
		var isAllgemein = false;
		if (p_sId == "_kunde") {
			isAllgemein = true;
		}
		var obj = document.getElementById(p_sId);
		if (!obj) {
			obj = document.getElementById("_kunde");
			isAllgemein = true;
		}
		if (obj) {
			if (!this.fehler[p_sId]) {
				this.fehler[p_sId] = new Object();
				this.fehler[p_sId]["fehler"] = new Array();
				this.fehler[p_sId]["obj"] = obj;
				this.fehler[p_sId]["top"] = this.clientTop(obj);
				this.fehler[p_sId]["left"] = this.clientLeft(obj);
				this.fehler[p_sId]["offset"] = 0;
				this.fehler[p_sId]["isGeneral"] = isAllgemein;
				if (this.fehler[p_sId]["isGeneral"]) {
					this.fehler[p_sId]["top"] = 10;	
					this.fehler[p_sId]["left"] = 0;	
				}
			}
			this.fehler[p_sId]["fehler"][this.fehler[p_sId]["fehler"].length] = p_sMeldung;
		}
	}

	this.clientTop = function(p_oObj) {
		if (p_oObj == null || p_oObj.id == this.relevantDivId) {
			return 0;
		}
		return p_oObj.offsetTop + this.clientTop(p_oObj.offsetParent);
	}

	this.allTop = function(p_oObj) {
		if (p_oObj == null) {
			return 0;
		}
		return p_oObj.offsetTop + this.allTop(p_oObj.offsetParent);
	}

	this.clientLeft = function(p_oObj) {
		if (p_oObj == null || p_oObj.id == this.relevantDivId) {
			return 0;
		}
		return p_oObj.offsetLeft + this.clientLeft(p_oObj.offsetParent);
	}

	this.sort = function () {
		// sortiere felder
		// sortiere felder
		var l_oArray = new Array();
		var l_oMinTop = 9999999;
		var l_oKey = "";
		while(l_oMinTop == 9999999) {
			for (var p_sId in this.fehler) {
				if (this.fehler[p_sId] != null) {
					if (this.fehler[p_sId].top < l_oMinTop) {
						l_oMinTop = this.fehler[p_sId].top;
						l_oKey = p_sId;
					}
				}
			}
			if (l_oMinTop != 9999999) {
				l_oArray[l_oKey] = this.fehler[l_oKey];
				this.fehler[l_oKey] = null;
				l_oMinTop = 9999999;
			}
			else {
				l_oMinTop = 0;
			}
		}
		this.fehler = l_oArray;
	}

	this.show = function (pnPos) {
		
		if (!pnPos) {
			pnPos = 0;
		}

		this.nIndent = 0;

		// debugger;
		this.sort();

		// ausblenden('wait');
		var l_oElem = document.getElementById(this.relevantDivId);
		var nLauf = 0;
		var i = 0;
		for (var p_sId in this.fehler) {
			var aktfehler = this.fehler[p_sId];
			

				if (nLauf == 0) {
					window.scrollTo(0, this.allTop(l_oElem) + aktfehler.top);
				}
	
			if(aktfehler.fehler){
				
				for (i = 0; i < aktfehler.fehler.length; i++) {
					nLauf++;
	
					if (this.nPos < aktfehler.top) {
						this.nPos = aktfehler.top+pnPos;
						this.nIndent = 0;
					}
	
					if (this.nPos> aktfehler.top) {
						aktfehler.offset = this.nPos - aktfehler.top;
						this.nIndent++;
					}

					
					var fehlerDiv = document.createElement("div");
					this.createdElements[this.createdElements.length] = fehlerDiv;
					fehlerDiv.innerHTML = aktfehler.fehler[i]+"<br />";
					l_oElem.appendChild(fehlerDiv);
	
					fehlerDiv.id = "d"+nLauf;
					fehlerDiv.className = "antragerror";
					fehlerDiv.style.position = "absolute";
					fehlerDiv.style.width = this.meldungBreite+"px";
					fehlerDiv.style.top = this.nPos+"px";
					fehlerDiv.style.left = this.meldungLeftPos+"px";
	
					this.drawLines(aktfehler);
	
					var clH = fehlerDiv.clientHeight;
					this.nPos += clH + this.divmargin;
				}
			}
		
		}
		if (nLauf == 0) {
			window.scrollTo(0, this.allTop(l_oElem));
		}
	}

	this.drawLines = function (p_oObj) {
		var l_oElem = document.getElementById(this.relevantDivId);
		
		if (!p_oObj.isGeneral) {
			var left = p_oObj.left;
		
			var linie1 = document.createElement("div");
			this.createdElements[this.createdElements.length] = linie1;
			l_oElem.appendChild(linie1);

			linie1.id = "dl"+this.createdElements.length;
			linie1.style.position = "absolute";
			linie1.style.backgroundImage = "url('/images/page/error_pfeil.gif')";
			linie1.style.backgroundPosition = "right";
			linie1.style.height = "5px";
			linie1.style.width = "3px";
			linie1.style.overflow = "hidden";
			linie1.style.top = (p_oObj.top + 8 - 2)+"px";
			linie1.style.left = (left - 3)+"px";
	
			var linie1 = document.createElement("div");
			this.createdElements[this.createdElements.length] = linie1;
			l_oElem.appendChild(linie1);
		
			linie1.id = "dl"+this.createdElements.length;
			linie1.style.position = "absolute";
			linie1.style.backgroundColor = this.lineColor;
			linie1.style.height = "1px";
			linie1.style.overflow = "hidden";
			linie1.style.top = (p_oObj.top + 8)+"px";

			
			
			var l_sBerechnungBreite = left-this.meldungBreite-this.meldungLeftPos;
			
			
			
			if (this.nIndent == 0) {
				// eine gerade Linie
				linie1.style.width = (l_sBerechnungBreite)+"px";
				linie1.style.left = (this.meldungBreite+this.meldungLeftPos)+"px";
				

			} else {
				// 3 Linien
				var width = (l_sBerechnungBreite - this.nIndent * this.lineident);
				if (width < 10) {
					this.nIndent--;
				}
				linie1.style.width = (l_sBerechnungBreite  - this.nIndent * this.lineident)+"px";
				linie1.style.left = (this.meldungBreite+this.meldungLeftPos+this.nIndent * this.lineident)+"px";
				// senkrechte Linie
				var linie1 = document.createElement("div");
				this.createdElements[this.createdElements.length] = linie1;
				l_oElem.appendChild(linie1);
	
				linie1.id = "dl"+this.createdElements.length;
				linie1.style.position = "absolute";
				linie1.style.backgroundColor = this.lineColor;
				linie1.style.width = "1px";
				linie1.style.overflow = "hidden";
				linie1.style.top = (p_oObj.top + 8)+"px";
				linie1.style.left = (this.meldungBreite+this.meldungLeftPos+this.nIndent * this.lineident)+"px";
				linie1.style.height = p_oObj.offset+"px";
	
				// Linie zur Fehlermeldung
				var linie1 = document.createElement("div");
				this.createdElements[this.createdElements.length] = linie1;
				l_oElem.appendChild(linie1);
	
				linie1.id = "dl"+this.createdElements.length;
				linie1.style.position = "absolute";
				linie1.style.backgroundColor = this.lineColor;
				linie1.style.height = "1px";
				linie1.style.overflow = "hidden";
				linie1.style.top = (p_oObj.top + p_oObj.offset + 8)+"px";
				linie1.style.left = (this.meldungBreite+this.meldungLeftPos+this.nIndent * this.lineident)-(this.nIndent * this.lineident - 1)+"px";
				linie1.style.width =  (this.nIndent * this.lineident)+"px";
			}
		} else {
			// Linie zur Fehlermeldung
			var linie1 = document.createElement("div");
			this.createdElements[this.createdElements.length] = linie1;
			l_oElem.appendChild(linie1);

			linie1.id = "dl"+this.createdElements.length;
			linie1.style.position = "absolute";
			linie1.style.backgroundColor = this.lineColor;
			linie1.style.height = "1px";
			linie1.style.overflow = "hidden";
			linie1.style.top = (p_oObj.top + p_oObj.offset + 8)+"px";
			
			linie1.style.right = (this.meldungBreite+this.meldungLeftPos - 5)+"px";
			linie1.style.width = "5px";
		}
	}

	this.clear = function () {
		var l_oElem = document.getElementById(this.relevantDivId);
		if (l_oElem == null) {
			doalert("fehlertoid::clear(): id: "+this.relevantDivId+" gibt es nicht!")
		} else {
			for (var i = 0; i < this.createdElements.length; i++) {
				// if (this.createdElements[i].parentElement != l_oElem) {
					// doalert("fehlertoid::clear(): object["+i+"]:
					// "+this.createdElements[i]+" gibt es nicht!")
				// } else {
					l_oElem.removeChild(this.createdElements[i]);
				// }
			}
		}
		this.createdElements = new Array();
		this.fehler = new Array();
	}
}

