/**
	pics.base.js
	Desc:	Basis-Framework
	
	Author: Christian Grösswang
	
	20061227,gc - v0.02		Erstdefinition
	20080331,gc - v0.20		Erweiterungen, neue Funktionen isDate, convertDate, checkKey
	20080605,gc - v0.21		Erweiterung showHideElement um Remember
	20080729,gc - v0.22		Erweiterung showHideElement um delay und showHideClearTimer
	20080810,gc - v0.23		Bug bei verzögerter Deaktivierung behoben
	20081107,gc - v0.24		Verbesserte Menüfunktionen mit menuShow, menuHide, menuClearTimer
**/




/*
	Funktionsübersicht 
	
	Basis-Framework:
		pics.init				Framework initalisieren
		pics.checkBrowser()		setzt die Browser-Variablen, wird autom. im init aufgerufen
		pics.isIE				Handelt es sich um einen IE true/false
		pics.isNS				Handelt es sich um einen Mozilla/Firefox true/false
		pics.isOpera			Handelt es sich um einen Opera true/false
		pics.getPageScrollX()	Scroll-Position in X-Richtung abfragen
		pics.getPageScrollY()	Scroll-Position in X-Richtung abfragen
		pics.getElementsByClassName		findet Elemente anhand der class (UNTESTED!!!)
		pics.setHTML()			innerHTML eines Elements setzen
		pics.getHTML()			innerHTML eines Elements holen
		pics.validateMail		E-Mail auf Gültigkeit prüfen 
		pics.onLoad				Onload-Manager für Funktionen, die beim Window.Onload aufgerufen werden sollen
*/


// Constructor, falls das PICS-Framework nicht geladen ist
	if (typeof pics == 'undefined') pics = {};

// Variable für Debug
	pics.debugLog='';

/* 
 *	====================================================================================
 *	===== Base-FRAMEWORK: pics 														====
 *	====================================================================================
 */


	/**
	 * pics.init()
	 *		pics-Basisobjekt initialisieren und Variablen vorbelegen
	 */
	pics.init = function() 
	{
		// Versionsinformationen
		pics.version='0.0.1';
		// Browserauswertung machen
		pics.checkBrowser();	
		// Regular-Expression für Datum definieren
		pics.regex_date=/^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
	}
	
	/**
	 * pics.checkBrowser()
	 *		Browser-Information auswerten und speichern
	 */
	pics.checkBrowser = function() 
	{
		// Standardmässig mal alles deaktivieren
		pics.isIE=false;
		pics.isNS=false;
		pics.isOpera=false;
		
		lUserAgent=navigator.userAgent;
		pics.isOpera 	= /opera/i.test(lUserAgent);		// Opera
		pics.isIE 		= ( /msie/i.test(lUserAgent)  && !pics.isOpera );		// Internet Explorer
//		pics.isIE 		= ( /msie/i.test(lUserAgent) );		// Internet Explorer
		pics.isNS 		= ( /Netscape6/i.test(lUserAgent) ||  /Netscape6/i.test(lUserAgent) );		// Netscape / Mozilla / FireFox
	}	

	
	/**
	 * pics.getElementX()
	 *	X-Position eines Elements ermitteln
	 */
	pics.getElementX = function(pElement) 
	{
		lX=0;
		oParent=pElement;
		while (oParent) 
		{
			if (oParent.offsetLeft) lX+=oParent.offsetLeft;
			oParent = oParent.offsetParent;
		}
		return lX;
	} // getElementX
	

	/**
	 * pics.getElementY()
	 *	Y-Position eines Elements ermitteln
	 */
	pics.getElementY = function(pElement) 
	{
		lY=0;
		oParent=pElement;
		while (oParent) 
		{
			if (oParent.offsetTop) lY+=oParent.offsetTop;
			oParent = oParent.offsetParent;
		}
		return lY;
	} // getElementY
	

	/**
	 * pics.getPageScrollX()
	 *	X-Scrollposition der Seite ermitteln
	 */
	pics.getPageScrollX = function() 
	{
		if (window.pageXOffset) return window.pageXOffset;
		if (document.body && document.body.scrollLeft) return document.body.scrollLeft;
	  	if (document.documentElement && document.documentElement.scrollLeft) return document.documentElement.scrollLeft;
		// wenn nichts passt, dann 0
		return 0;
	}
	
	/**
	 * pics.getPageScrollY()
	 *	Y-Scrollposition der Seite ermitteln
	 */
	pics.getPageScrollY = function() 
	{
		if (window.pageYOffset) return window.pageYOffset;
		if (document.body && document.body.scrollTop) return document.body.scrollTop;
	  	if (document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop;
		// wenn nichts passt, dann 0
		return 0;
	} // pics.getPageScrollY
	
	/**
	 * pics.findElementsByName()
	 *	Element anhand des Namens ermitteln
	 */
	pics.findElementsByName = function(pParentObject, pSearchName) 
	{
		if (!pParentObject) return null;
		if (!pParentObject.hasChildNodes) return null;
	    if (pParentObject.hasChildNodes()) 
		{
		    for(var i=0;i<pParentObject.childNodes.length;i++)
		    {
				// ist es das gesuchte Element
				if (pParentObject.childNodes[i].name)
				{
					lOK=pParentObject.childNodes[i].name.indexOf(pSearchName);
//					alert(pParentObject.childNodes[i].name+'='+pSearchName);
					// gefunden?
					if (lOK>=0) 
					{
						return pParentObject.childNodes[i];
					}
				}
				// Wenn wir es nicht gefunden haben, dann suchen wir von hier aus weiter
				lResult=pics.findElementsByName(pParentObject.childNodes[i], pSearchName);
				// war da drin ein Treffer ?
				if (lResult!=null) return lResult;
			} // for
		}
	    return null;
	}	// pics.getElementsByClassName

	
	/**
	 * pics.enableElements()
	 *	alle Elemente vom angegebenen Type deaktivieren
	 */
	 pics.enableElements = function(pElementType) 
	{
		aSelect=document.getElementsByTagName(pElementType);
		for (var i=0;i<aSelect.length;i++)
		{
			aSelect[i].style.display='';
		}
	}
		
	/**
	 * pics.disableElements()
	 *	alle Elemente vom angegebenen Type aktivieren
	 */
	 pics.disableElements = function(pElementType) 
	{
		aSelect=document.getElementsByTagName(pElementType);
		for (var i=0;i<aSelect.length;i++)
		{
			aSelect[i].style.display='none';
		}
	}	
	

	/**
	 * pics.findElementsById()
	 *	Element anhand der ID ermitteln
	 */
	pics.findElementsById = function(pParentObject, pSearchID) 
	{
		if (!pParentObject) return null;
	    if (pParentObject.hasChildNodes()) 
		{
		    for(var i=0;i<pParentObject.childNodes.length;i++)
		    {
				// ist es das gesuchte Element
				if (pParentObject.childNodes[i].id)
				{
					lOK=pParentObject.childNodes[i].id.indexOf(pSearchID);
//					alert(pParentObject.childNodes[i].name+'='+pSearchName);
					// gefunden?
// 20080327,gc - gilt eigentlich nur bei 0, weil sonst nur ein Teil
//					if (lOK>=0) 
					if (lOK==0) 
					{
						return pParentObject.childNodes[i];
					}
				}
				// Wenn wir es nicht gefunden haben, dann suchen wir von hier aus weiter
				lResult=pics.findElementsById(pParentObject.childNodes[i], pSearchID);
				// war da drin ein Treffer ?
				if (lResult!=null) return lResult;
			} // for
		}
	    return null;
	}	// pics.getElementsByClassName


	/**
	 * 	pics.findParentID()
	 *			übergeordnetes Element anhand des Tags und eines Suchbegriffs ermitteln
	 *	@param	object	pStartObject	Objekt ab dem gesucht wird
	 *	@param	string	pObjectType		Art des Objekts, z.B. HTML-Tag
	 *	@param	string	pSearchID		ID die gesucht wird (optional)
	 *	@param	string	pMaxLevels		wie viele Ebenen maximal (optional)
	 *	@return	
	 */
	pics.findParentID = function(pStartObject, pObjectType, pSearchID, pMaxLevels) 
	{
		// wird auch nach einer ID gesucht ?
		if (typeof pSearchID == 'undefined') pSearchID='';
		// maximal 10 Ebenen
		if (typeof pMaxLevels == 'undefined') pMaxLevels=10;
		lObjType=pObjectType.toUpperCase();
		lParent=pStartObject;
		if (!lParent.parentNode) return false;
		for(var i=0;i<pMaxLevels;i++)
		{
			lParent=lParent.parentNode;
			// Haben wir ein Element vom passenden Type gefunden?
			if (lParent.nodeName==lObjType && lParent.attributes) 
			{
				// wenn wir nach ID suchen, passt diese ?
				if (pSearchID=='' || lParent.getAttribute("id").indexOf(pSearchID)!=-1) return lParent;
			} 
		}
		return false;		
	}	// pics.findParentID


	

	/**
	 * pics.getElementsByClassName()
	 *	Element anhand der Klasse ermitteln
	 */
	pics.getElementsByClassName = function() 
	{
	// übernommen von http://www.styleassistant.de/tips/tip100.htm
	// sollte noch aufgearbeitet werden
		var all_obj,ret_obj=new Array(),j=0,teststr;
	
		if (document.all) all_obj=document.all;
		else if(document.getElementsByTagName && !document.all)
	    all_obj=document.getElementsByTagName("*");
	
	    for(var i=0;i<all_obj.length;i++)
	    {
	      if(all_obj[i].className.indexOf(class_name)!=-1)
	      {
	        teststr=","+all_obj[i].className.split(" ").join(",")+",";
	        if(teststr.indexOf(","+class_name+",")!=-1)
	        {
	          ret_obj[j]=all_obj[i];
	          j++;
	        }
	      }
	    }
	    return ret_obj;
	}	// pics.getElementsByClassName

	
	/**
	 * pics.getObjectTree(pElement)
	 *		liefert den Objektbaum ab pElement als HTML
	 *	@param	Object	pElement	Element das ausgegeben wird
	 */
	pics.getObjectTree = function(pElement)
	{
	    var lHtml;
	    lHtml = '<li>';
	    switch (pElement.nodeType) {
	        case 1 :
	            lHtml += '<strong>' + pElement.nodeName + '<\/strong>-Element';
	            if (pElement.hasChildNodes()) {
	                lHtml += ', ' + pElement.childNodes.length + ' Unterknoten';
	            }
				// wenn es eine ID gibt
				if (pElement.id) lHtml += ', id='+pElement.id;
				if (pElement.name) lHtml += ', name='+pElement.name;
				if (pElement.value) lHtml += ', value='+pElement.value;
	            break;
	        case 3 :
	            var knotenwert = pElement.nodeValue.replace(/</g, '&lt;').replace(/\n/g, '\\n');
	            lHtml += 'Textknoten: [<strong>' + knotenwert + '<\/strong>]';
	            break;
	        case 8 :
	            var knotenwert = pElement.nodeValue.replace(/</g, '&lt;').replace(/\n/g, '\\n');
	            lHtml += 'Kommentarknoten: [' + knotenwert + ']';
	            break;
	        default :
	            lHtml += 'Knoten des Typs ' + pElement.nodeType +
	                ', Wert: [' + pElement.nodeValue + ']';
	    }
	    if (pElement.hasChildNodes()) {
	        lHtml += '\n<ol>\n';
	        for (var i = 0; i < pElement.childNodes.length; i++) {
	            knotenneu = pElement.childNodes[i];
	            lHtml += pics.getObjectTree(knotenneu); // Rekursion
	        }
	        lHtml += '</ol>\n';
	    }
	    lHtml += '</li>\n';
	    return lHtml;
	}	// pics.getObjectTree(pElement)

	
	
	/**
	 * pics.setHTML(pElementID, pHtml)
	 *		innerHTML eines Elements setzen
	 *	@param	string	pElementID	ID des Elements, in das geschrieben wird
	 *	@param	string	pHtml		HTML-COde für Ausgabe
	 */
	pics.setHTML = function(pElementID, pHtml)
	{
		// aktuelle Scrollposition merken
		lX=pics.getPageScrollX();
		lY=pics.getPageScrollY();
		if (document.getElementById(pElementID)) document.getElementById(pElementID).innerHTML=pHtml;		
		// und wieder setzen
		window.scrollTo(lX,lY);
	}	

	/**
	 * pics.getHTML(pElementID)
	 *		innerHTML eines Elements holen
	 *	@param	string	pElementID	ID des Elements, in das geschrieben wird
	 */
	pics.getHTML = function(pElementID)
	{
		if (document.getElementById(pElementID)) return document.getElementById(pElementID).innerHTML;		
		return "";
	}	

	/**
	 * pics.swapElements(pElementIDOld, pElementIDNew)
	 *		blendet da pElementIDOld aus und das pElementIDEin
	 *	@param	string	pElementIDOld	ID des Elements, das ausgeblendet wird
	 *	@param	string	pElementIDNew	ID des Elements, das eingeblendet wird
	 */
	pics.swapElements = function(pElementIDOld, pElementIDNew)
	{
		if (document.getElementById(pElementIDOld)) document.getElementById(pElementIDOld).style.display='none';		
		if (document.getElementById(pElementIDNew)) document.getElementById(pElementIDNew).style.display='';		
	}	
	
	/**
	 * pics.setStyle
	 *		Stil eines Elements ändern, alten Speichern
	 *	@param	object	pElement	zu änderndes Objekt
	 *	@param	string	pStyle		Neuer Stil ( leer für Reset )
	 *	@return	
	 */
	pics.setStyle = function(pElement,pStyle)
	{
		if (typeof pStyle == 'undefined') pStyle='';

		// Aktuellen Stil auslesen und alle anderen Formatierungen entfernen außer wenn Aktiv
		var lStyle = pElement.className;
		
		if (pStyle!='')
		{
			// alten Stil merken und neuen setzen
			pElement.setAttribute("oldstyle",lStyle);
			pElement.className=pStyle;
		}
		else
		{
			// alten Stil setzen
			lStyle=pElement.getAttribute("oldstyle");
			pElement.className=lStyle;
		}
	} // pics.setStyle
	
	/**
	 * pics.showHideElement
	 *		 Element mit dem angegebenen Namen einblenden, ausblenden oder umschalten
	 *	@param	string	pElementID	ID des Elements
	 *	@param	bool	pShow		ein-/ausblenden ? wenn nicht angegeben, dann umschalten
	 *	@param	bool	pRemember	letztes Element umschalten und merken
	 *	@param	int		pDelay		Verzögerung von x ms zum ausführen
	 *	@return	
	 */
	pics.showHideElement = function(pElementID, pShow, pRemember, pDelay)
	{
		if (typeof pElementID=='undefined') pElementID=null;
		if (typeof pShow=='undefined') pShow=null;
		if (typeof pRemember=='undefined') pRemember=false;
		if (typeof pics.lastShowHideElement=='undefined') pics.lastShowHideElement='';
		if (typeof pDelay=='undefined') pDelay=0;

		// Parameter im Debug-Layer ausgeben
//		pics.debugLog+=pElementID+' - '+pShow+' - '+pRemember+' - '+pDelay+' : ('+pics.lastShowHideElement+')<br>';
//		pics.setHTML('divDebug',pics.debugLog);
		
		// falls es einen Timer gibt, diesen reseten
		if (pics.timerShowHideElement!=null)
		{
			window.clearTimeout(pics.timerShowHideElement);
			pics.timerShowHideElement=null;
		}

		// verzögerte deaktivierung
		if (pElementID==null && pDelay>0 && pics.lastShowHideElement!='') 
		{
			pics.timerShowHideElement=window.setTimeout("pics.showHideElement('"+pics.lastShowHideElement+"',"+!pShow+")", pDelay);
			return true;
		}

		// Bei verzögerter Deaktivierung das letzte Element zurücksetzen
//		if (pics.lastShowHideElement==pElementID) pics.lastShowHideElement='';
		
		// wenn pRemember, dann letztes ausschalten
		if (pRemember && pics.lastShowHideElement!='' && pics.lastShowHideElement!=pElementID) pics.showHideElement(pics.lastShowHideElement, !pShow);

		// wenn Element NULL, dann raus hier
		if (pElementID==null) return true;

		// wenn ein Delay, dann ein timeout darauf setzen
		if (pDelay>0)
		{
			pics.timerShowHideElement=window.setTimeout("pics.showHideElement('"+pElementID+"',"+pShow+","+pRemember+")", pDelay);
			return true;
		}
		
		
		var oElement=document.getElementById(pElementID);
//		if (pShow=='' && pShow!=false)
		if (pShow==null)
		{
		// wenn nicht angegeben, dann umschalten
			if (oElement.style.display=='')
			{ 
				oElement.style.display='none';
			}
			else
			{
				oElement.style.display='';
			}
		}
		else
		{
			// sonst ein/ausblenden
			if (pShow)
			{ 
				oElement.style.display='';
			}
			else
			{
				oElement.style.display='none';
			}
			if (pRemember) pics.lastShowHideElement=pElementID;
		}
	} // pics.showHideElement

	/**
	 * pics.showHideClearTimer()
	 *		 Timer zum Ausblenden eines Elements deaktivieren
	 *	@return	
	 */
	pics.showHideClearTimer = function()
	{
		// falls es einen Timer gibt, diesen reseten
		if (pics.timerShowHideElement!=null)
		{
			window.clearTimeout(pics.timerShowHideElement);
			pics.timerShowHideElement=null;
		}
	}
	
	/**
	 * pics.showHideElements
	 *		alle Elemente mit dem angegebenen Namen einblenden, ausblenden oder umschalten
	 *	@param	string	pName		Name der Elemente
	 *	@param	bool	pShow		ein-/ausblenden ? wenn nicht angegeben, dann umschalten
	 *	@return	
	 */
	pics.showHideElements = function(pName,pShow)
	{
		oElements=document.getElementsByName(pName);
		for (i=0;i<oElements.length;i++)
		{
			if (typeof pShow=='undefined')
			{
			// wenn nicht angegeben, dann umschalten
				if (oElements[i].style.display=='')
				{ 
					oElements[i].style.display='none';
				}
				else
				{
					oElements[i].style.display='';
				}
			}
			else
			{
				// sonst ein/ausblenden
				if (pShow)
				{ 
					oElements[i].style.display='';
				}
				else
				{
					oElements[i].style.display='none';
				}
			}
		}
	} // pics.showHideElements


	/**
	 * pics.setLoading
	 *		Loading-Animation anzeigen
	 *	@param	object	pElement	zu änderndes Objekt
	 *	@return	
	 */
	pics.setLoading = function(pElementID)
	{
		lHtml='<table width="100%" border="0" height="100%"><tr><td align="center"><img src="images/loading.gif" width="100" height="100" border="0"></td></tr></table>';
		pics.setHTML(pElementID,lHtml);
	}	// pics.setLoading
	

// ====== MENUE-FUNKTIONEN ==========
	
	
	pics.menuLast='';
	pics.menuTimer=null;
	
	// Menü mit x Minuten verzögerung anzeigen
	pics.menuShow = function(pMenu, pWait)
	{
		if (typeof pMenu=='undefined') pMenu='';	// aktuelles ausblenden
		if (typeof pWait=='undefined') pWait=500;	// Verzoegerung
		// alert('doMenu - '+pMenu+' / '+pWait+' ('+pics.menuLast+')');
		
		// wenn das aktuelle angezeigt werden soll, dann gleich raus hier
		if (pMenu==pics.menuLast) 
		{
			pics.menuClearTimer();
			return false;
		}
		// läuft ein Timer, dann diesen reseten
		pics.menuClearTimer();
		
		if (pMenu=='')
		{
			// letztes Menü ausblenden
			pics.menuTimer=window.setTimeout("pics.menuHide('"+pics.menuLast+"')", pWait);
		}
		else
		{
			// existiert ein altes, dann dieses sofort ausblenden
			if (pics.menuLast!='') pics.menuHide(pics.menuLast);
			// und das neue verzögert einblenden
			pics.menuTimer=window.setTimeout("pics.showHideElement('"+pMenu+"',true)", pWait);
			pics.menuLast=pMenu;
		}
		
	} // doMenu

	pics.menuHide = function()
	{
		pics.showHideElement(pics.menuLast,false);
		pics.menuLast='';
	}


	pics.menuClearTimer = function()
	{
		if (pics.menuTimer!=null)
		{
			window.clearTimeout(pics.menuTimer);
			pics.menuTimer=null;
		}			
	}	

	
// ====== TASTENHANDLING ==========

	/**
	 * pics.checkKey
	 *		Prüfen auf Tast, und dann Aktion ausführen
 	 *	@param	object	pEvent	event-Referenz
	 *	@param	string	pFunction	zu auszuführende Funktion
	 *	@param	int		pKey	zu pruefende Taste, default = 13 ( ENTER )
	 */
	pics.checkKey = function(pEvent, pFunction, pKey)
	{
		if (typeof pEvent == 'undefined') 		return false;
		if (typeof pFunction == 'undefined') 	return false;
		if (typeof pKey == 'undefined') 		pKey=13;

		lKey= pEvent.which || pEvent.keyCode;
		if (lKey==pKey) eval(pFunction);
		
	} // checkKey	


	
// ====== STRING / MAIL ==========

	/**
	 * pics.validateMail
	 *		E-Mail-Adresse validieren
	 *	@param	string	pMail	zu pruefende Adresse
	 *	@return	bool true/false ob valid
	 */
	pics.validateMail = function(pMail)
	{
		var lReg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/
		return lReg.test(pMail);
	} // validateMail	
	

	
// ====== ZAHLENFORMATIERUNG =====	
	/**
	 * pics.formatNumber((pZahl, pKommastellen, pKomma, pTausender)
	 *		formatiert eine Zahl für die Ausgabe
	 *	@param	float	pZahl			zu formatierende Zahl
	 *	@param	int		pKommastellen	Anzahl der Kommastellen, default=2
	 *	@param	string	pKomma			Kommazeichen, default=,
	 *	@param	string	pTausender		Tausendertrennzeichen, default=.
	 */
	pics.formatNumber = function(pZahl, pKommastellen, pKomma, pTausender)
	{
		// Parameter prüfen und zur not überschreiben
		if (typeof pZahl			=='undefined') return 0;
		if (typeof pKommastellen	=='undefined') pKommastellen=2;
		if (typeof pKomma			=='undefined') pKomma=',';
		if (typeof pTausender		=='undefined') pTausender='.';

		// Übergebenen Wert in Zahl umwandeln
		// lZahl=pics.clearNumber(pZahl);
		lZahl=pZahl*1;
		// kürzen auf Kommastellen und PUNKT in KOMMA ändern
		lZahl= lZahl.toFixed(pKommastellen).replace(".", pKomma);
		// Müssen wir 1000er-Zeichen einführen ?
		if (pTausender!='')
		{
			// dann suchen wir die Position des Kommas
			lPosKomma=lZahl.indexOf(pKomma);
			lPos=lPosKomma-3;
			// und jetzt alle Zeichen davor in 3er-Gruppen splitten
			while(lPos>0)
			{
				if (lZahl.slice(0,lPos)!='-') lZahl=lZahl.slice(0,lPos)+pTausender+lZahl.slice(lPos);
				lPos=lPos-3;
			}
		}	
		return lZahl;
	}  // pics.formatNumber
	
	/**
	 * pics.clearNumber((pZahl, pKomma, pTausender)
	 *		wandelt einen String in eine Zahl um indem Sonderzeichen entfernt werden
	 *	@param	string	pZahl			zu formatierende Zahl
	 *	@param	string	pKomma			Kommazeichen, default=,
	 *	@param	string	pTausender		Tausendertrennzeichen, default=.
	 */
	pics.clearNumber = function(pZahl, pKomma, pTausender)
	{
		// Parameter prüfen und zur not überschreiben
		if (typeof pZahl			=='undefined') return 0;
		if (typeof pKomma			=='undefined') pKomma=',';
		if (typeof pTausender		=='undefined') pTausender='.';
		
		// Schritt 1 - Tausender entfernen
		// lZahl=pZahl.replace(/\./,'');
		// das mit dem Replace war nicht so zuverlässig, daher mach ich das mit einer Schleife
		lZahl=pZahl+'';
		while (lZahl.indexOf(pTausender)>0)
		{
			lZahl=lZahl.replace(pTausender,'');
		}
		// jetzt noch das Komma in den Punkt umwandeln
		lZahl=lZahl.replace(pKomma,'.');
		// schritt 2 - in Zahl umwandeln
		lZahl=parseFloat(lZahl);
		// wenn keine Zahl, dann 0
		if (isNaN(lZahl)) lZahl=0;
		return lZahl;
	}  // pics.clearNumber

	/**
	 * pics.isDate(pDate)
	 *		prüft einen Wert, ob es ein Datum ist
	 *	@param	string	pDate			zu prüfendes Datum
	 *	@return	bool	true/false
	 */
	pics.isDate = function(pDate)
	{
		if (pDate=='') return false;
// Weil ich gerade keine einzelne regex finde probier ich es mit mehreren
// die erst ist für nur Datum, die 2. ist für Datum+Zeit, 3. für datum+Zeit+Sek
//		aDate = pDate.match(/^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/);
//		aDate = pDate.match(/^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$|^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)\s(\d\d)\:\d\d$|^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)\s(\d\d)\:\d\d\:\d\d$/);
		aDate = pDate.match(/^(\d+)[\/\.-](\d+)[\/\.-]((\d\d)?\d\d)$|^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)\s(\d\d)\:\d\d$|^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)\s(\d\d)\:\d\d\:\d\d$/);
		if (aDate) return true;
		return false;
	}  // pics.isDate
	

	/**
	 * pics.convertDate(pDate)
	 *		Wandelt einen beliebigen Datum/Zeit-String in einen String der Form yyyymmddhhnnss um
	 * 		gültige Zeitformate sind hh:nn und hh:nn:ss
	 * 		gültige Datumsformate sind yyyy-mm-dd, dd.mm.yyyy, mm/dd/yyyy
	 *	@param	string	pDate			zu prüfendes Datum
	 *	@return	bool	true/false
	 */
	pics.convertDate = function(pDate)
	{
		var aDatum = new Array('0000','00','00','00','00','00');
	
		// Schritt 1 - Datum und Zeit trennen
		var aParts=pDate.split(' ');
		// Datum / Zeit vorbelegen
		var lDate='';
		var lTime='';
		
		// Ist der erste Teil Datum oder Zeit?
		if (aParts[0].indexOf(':')>0)
		{
			// Zeit
			lTime=aParts[0];
			if (aParts.length>1) lDate=aParts[1];
		}
		else
		{
			// Datum
			lDate=aParts[0];
			if (aParts.length>1) lTime=aParts[1];
		}
		
	//	alert(pDate+' = '+lDate+' / '+lTime);
		
		// jetzt splitten
		if (lTime!='')
		{
			aTime = lTime.split(':');
			for(var i=0;i<aTime.length;i++) { aDatum[3+i]='00'+aTime[i]; aDatum[3+i]=aDatum[3+i].substr(aDatum[3+i].length-2); }
		}
		if (lDate!='')
		{
			if (lDate.indexOf('.')>0)
			{
				aDate=lDate.split('.');
				aDatum[0]='00'+aDate[2];
				aDatum[1]='00'+aDate[1];
				aDatum[2]='00'+aDate[0];
			}
			else if (lDate.indexOf('-')>0)
			{
				aDate=lDate.split('-');
				aDatum[0]='00'+aDate[0];
				aDatum[1]='00'+aDate[1];
				aDatum[2]='00'+aDate[2];
			}
			else if (lDate.indexOf('/')>0)
			{
				aDate=lDate.split('/');
				aDatum[0]='00'+aDate[2];
				aDatum[1]='00'+aDate[0];
				aDatum[2]='00'+aDate[1];
			}
			aDatum[0]=aDatum[0].substr(aDatum[0].length-4);
			aDatum[1]=aDatum[1].substr(aDatum[1].length-2);
			aDatum[2]=aDatum[2].substr(aDatum[2].length-2);
		}
	//	alert(pDate+':'+lDate+' / '+lTime+' ('+aDatum+')');
		return aDatum.join('');
	}  // pics.convertDate
	
	
/* 
 *	====================================================================================
 *	===== GLOBALE INITALISIERUNG													====
 *	====================================================================================
 */
	/**
	 * pics.onLoad(pFuntion)
	 *		Fügt dem window.onload Event einen Funktionsaufruf hinzu 
	 *		um mehrere OnLoads aus unterschiedlichen Scripts zu managen
	 *
	 *		pics.onLoad(init); 								=> nur Funktion ohne Parameter aufrufen
	 *		pics.onLoad(function(){ init('Wert 1') });		=> Funktion mit Parameter aufrufen
	 *
	 *	@param	function 	pFuntion			Funktion für Aufruf beim Laden der Seite
	 *	@return	bool		true/false
	 */
	pics.onLoad = function(pFuntion) 
	{
		if (typeof window.addEventListener!="undefined") {
			window.addEventListener("load",pFuntion,false);
		}
		else if (typeof window.attachEvent!="undefined") {
			window.attachEvent("onload",pFuntion);
		}
		else 
		{
			if (window.onload!= null) {
				var oldOnload = window.onload;
				window.onload = function (e) {
					oldOnload(e);
					window[pFuntion]();
				}
			}
			else window.onload = pFuntion;
		}
	}
	 
// pics-Framework-Initialisieren
	pics.init();

	 