var i=0;
var bild=new Image();
bild.src="img/back.gif";

var browser=new BrowserInfo();

/****************************************** Animationen *********************************************************************/
var HeadImages=new Array();
var HeadImagesLoaded=false;
var HeadImagesCount=11;
var NewHeadImage=null;
var OldHeadImage=null;
var HeaderLayerHTML=null;
var slider;

var GBSPlanTimes=new Array("0.00","7.45 - 9.15","9.30 - 11.00","11.45 - 13.15","13.30 - 15.00","15.15 - 16.00","17.00 - 18.30","18.45 - 20.15","20.20 - 21.05"); 

function animate_header()
 	{
 	var number=Math.round(Math.random()*10);
 	var link=document.getElementById("head_image_link");
 	var img=document.getElementById("head_image");
 	
 	img.src="img/head_" + number + ".png";
 	link.href="img/head_" + number + "_big.png";
 	
	window.setTimeout('animate_header()',30000);
 	}

/****************************************** Ajax *********************************************************************/
var resObject=null;
try
	{
	resObject=new ActiveXObject("Microsoft.XMLHTTP");
	}
catch (Error)
	{
	try
		{
		resObject=new ActiveXObject("MSXML2.XMLHTTP");
		}
	catch (Error)
		{
		try
			{
			resObject=new XMLHttpRequest();
			}
		catch (Error)
			{
			alert("Kein Javascript oder kein Ajax (XMLHTTP - Object)?\n Wird aber beides gebraucht!");
			}
		}
	}

function handleResponse()
	{
	if (resObject.readyState==4)
		{
		document.getElementById("content").innerHTML=resObject.responseText;
		}
	}

 function pageChanged(id,mod_page_id)
	{
	location.href='index.php?action=selectPage&id=' + id +'&mod_page_id='+ mod_page_id;
	}
	
 function teaserChanged(id,teaser_id)
	{
	location.href='index.php?action=selectPage&id=' + id +'&mod_teaser_id='+ teaser_id;
	}
	
 function userChanged(id,mod_user)
	{
	location.href='index.php?action=selectPage&id=' + id +'&mod_user='+ mod_user;
	}
	
 function checkAdmins(radio)
 	{
 	var cUser=document.getElementById("upd_user");
 	var u=cUser.options[cUser.selectedIndex].value;
 	if (u=="nobs" || u=="admin" || u=="webmaster")
 		{
 		alert("Die Rolle eines admin accounts kann nicht geändert werden!");
 		radio.checked=false;
 		}
 	}
 
 function setKontaktKurs(p1)
 	{
	var str=p1;
	var kurs=document.getElementById("kontakt_kurs");
	if (null!=kurs && null!=str) 
		{ kurs.value=str; }
 	}
 
 function trim(str)
	{
	return str.replace (/^\s+/, '').replace (/\s+$/, '');
	}
 /***************************************** register validation *******************************************************/
 
 function validateRegisterUser()
 	{
 	var user=document.getElementById("new_user");
 	var username=user.value;
	var gbsFilter = new RegExp("([0-9][0-9][bBeEiI][2|4][abAB]{0,1}[uU][0-3][0-9])","ig");
	var filter=new RegExp("([0-9]{2}[a-zA-Z]+[uU][0-3][0-9])","ig");
	if (!filter.test(username)) 
		{
		if (gbsFilter.test(username)) 
			{ 
			return true; 
			}
		else
			{
			alert("Diesen Benutzernamen gibt es nicht in der GBS Fachschule!");
			return false;
			}
		}
	else
		{
		return true;
		}
 	}
 
 function validateMail()
 	{
	var nname=document.getElementById("nname");
	var email=document.getElementById("email");
	var quest=document.getElementById("quest");
	if (trim(nname.value)=="" || trim(email.value)=="" || trim(quest.innerText)=="")
		{
		alert("Bitte Formular korrekt ausfüllen!");
		return false;
		}
	else
		{
		var res=window.confirm("Ihr Formular wird per E-Mail versendet.");
		if (res==true)
			return true;
		else
			return false;
		}
	}
/****************************************** gbs modifiers *************************************************************/

function generatePageID()
	{
	var parent=document.getElementById("mod_page_id").options;
	var parent_id=document.getElementById("mod_page_id").options[document.getElementById("mod_page_id").selectedIndex].value;
	var exist=false;
	var i=0;
	var k=0;
	
	for (i=1;i<10;i++)
		{
		exist=false;
		for (k=0;k<parent.length;k++)
			{
			if (parent[k].value==parent_id + i)
				{
				exist=true;
				break;
				}
			}
		if (!exist)
			break;
		}
	if (!exist)
		{
		return (parent_id + i);
		}
	return 0;
	}
	
function check_pwd()
	{
	var p1=document.getElementById("pwd").value;
	var p2=document.getElementById("pwd2").value;
	if (p1=="" || p2=="" || p1!=p2) {
		alert("Die Passwörter stimmen nicht überein oder haben zuwenig Zeichen!"); }
	}

function showHelp()
	{
	var h=document.getElementById("help");
	h.style.right="40px";
	h.style.top="330px";
	h.style.display="block";
	}

function showTagHelp(p1)
	{
	var t=document.getElementById("tag_help");
	t.style.right="40px";
	t.style.top="330px";
	t.style.display="block";
	if (p1=="p")
		t.innerHTML="Absätze:<br /><br />Paragraphes oder Paragraphen sind Absätze (so genannte Blockelemente) und werden für längere Texte verwendet. Man kann in ihnen auch andere Elemente wie Links oder Bilder unterbringen.<br />Paragraphen dürfen aber z.B. keine Überschriften (z. B. &lt;h1&gt; bis &lt;h4&gt;) enthalten."
	if (p1=="u")
		t.innerHTML="Der Inhalt wird <u>underlined</u> oder <u>underscored</u>, also <u>unterstrichen</u>.";
	if (p1=="b")
		t.innerHTML="Die ältere Form von '&lt;strong&gt;'. Der Inhalt wird <strong>bold</strong>, also <strong>fett</strong>, geschrieben.";
	if (p1=="strong")
		t.innerHTML="Die jüngere Form von '&lt;b&gt;'. Der Inhalt wird <strong>strong</strong>, also <strong>fett</strong>, geschrieben.";
	if (p1=="i")
		t.innerHTML="Der Inhalt wird <i>italic</i>, also <i>kursiv</i>, geschrieben.";
	if (p1=="img")
		t.innerHTML="Image (Bild):<br /><br />&nbsp;&nbsp;<span style='font-weight:normal; font-size:14px;'>&lt;img src=\"img/beispiel.gif\" alt=\"Beispiel\" width=\"200\" height=\"200\" /&gt;</span><br /><br />Das 'img' ist ein so genannter geschlossener tag, da er keine Inhalte haben kann.<br />Er wird mit '/&gt;' - das ist XML-Notation - gleich wieder geschlossen und zeigt ein Bild an.<br />Mit width=\"200\" legt man die Breite und mit height=\"200\" die Höhe des Bildes in Pixeln fest.<br />Das src-Attribut ist ein Pflichtattribut und definiert den Pfad zu der Bilddatei. Auch das alt-Attribut ist Pflicht und gibt einen Text, wenn das Bild nicht geladen werden kann und einen Tooltip (Erscheint nach kurzer Zeit, wenn man die Maus auf ein Objekt bewegt hat) an.";
	if (p1=="a")
		t.innerHTML="Verweis (link):<br /><br />&nbsp;&nbsp;&lt;a href=\"http://www.gbsfachule.de/\">GBS Fachschule&lt;/a&gt;<br /><br />Ein Anker definiert über das Attribut href=\"http://www.gbsfachule.de/\" ein Verweisziel und erstellt damit einen Link durch den Text, den man zwischen &lt;a&gt; und &lt;/a&gt; angibt.";
	if (p1=="h")
		t.innerHTML="Überschriften:<br /><br />&nbsp;&nbsp;&lt;h1&gt;Eine Überschrift&lt;/h1&gt;<br /><br />'head lines' (oder header) sind Überschriften die bei &lth1&gt; als größte anfangen und meist bei &lt;h4&gt; als kleinste enden. Man sollte unbedingt semantisch vorgehen, also z.B. keine &lt;h3&gt; verwenden, wenn noch keine &lt;h2&gt; existiert.<br />Eine &lt;h1&gt; ist auf unseren Seiten schon angegeben (die Überschrift jeder Seite), so dass hier in der Seitenverwaltung immer mit &lt;h2&gt; weiterverfahren wird.";
	if (p1=="ul")
		t.innerHTML="Listen:<br /><br />'&lt;ul&gt;' ist das Elterntag von '&lt;li&gt;', eine unordered list (unnumerierte Liste). Alles was zwischen &lt;ul&gt; und &lt;/ul&gt; mit &lt;li&gt; und &lt;/li&gt; angegeben steht, wird als vertikale Liste mit einem 'square' (kleines schwarzes Viereck) als Stichpunktzeichen angezeigt.";
	if (p1=="li")
		t.innerHTML="Listeneintrag:<br /><br />Ein list item ist das Kindtag von '&lt;ul&gt;'.<br />Die einzelenen Listeneinträge einer unnumerierten Liste werden, in &lt;li&gt; und &lt;/li&gt; geschachtelt, zwischen &lt;ul&gt; und &lt;/ul&gt; angegeben.";
	if (p1=="br")
		t.innerHTML="Zeilenumbruch:<br /><br />Das 'break' ist ein so genannter geschlossener tag, da er keine Inhalte haben kann. Er wird mit /&gt; - das ist XML-Notation - gleich wieder geschlossen und erstellt in der HTML-Seite einen Zeilenumbruch.<br />Einziges gebräuchliches Attribut ist<br />&nbsp;&nbsp;&lt;br style=\"clear:both;\" /&gt;<br />Es wird benutzt, wenn man z.B. das Fließen von Text um Bilder (Text neben Bildern) beenden möchte, um darunter fortzufahren.";
	if (p1=="tagname")
		t.innerHTML="Der Name des Tags, z.B. das img in:<br />&nbsp;&nbsp;<span style='font-weight:normal; font-size:14px;'>&lt;img src=\"img/beispiel.gif\" alt=\"Beispiel\" width=\"200\" height=\"200\" /&gt;</span>";
	if (p1=="attributname")
		t.innerHTML="Der name eines Attributes, z.B. das src in:<br />&nbsp;&nbsp;<span style='font-weight:normal; font-size:14px;'>&lt;img src=\"img/beispiel.gif\" alt=\"Beispiel\" width=\"200\" height=\"200\" /&gt;</span>";
	if (p1=="attributwert")
		t.innerHTML="Der Wert eines Attributes, z.B. das \"img/beispiel.gif\" in:<br />&nbsp;&nbsp;<span style='font-weight:normal; font-size:14px;'>&lt;img src=\"img/beispiel.gif\" alt=\"Beispiel\" width=\"200\" height=\"200\" /&gt;</span>.<br />Attributwerte können verschieden aufgebaut sein. So kann man mit:<br />&nbsp;&nbsp;style=\"width:300px; height:300px;\"<br />die Größe des Bildes überschreiben, da diese 'styles' (oder style sheets) Vorzug vor den Attributen width und height des tags img haben.";
	if (p1=="inhalt")
		t.innerHTML="Der Inhalt eines Tags kann rein gar nichts, Text oder auch weitere Tags sein. z. B. sollte man längeren Text, der Bilder, Links und weitere tags enthält, innerhalb eines paragraph tag (&lt;p&gt;) schreiben.";
	/*
	if (p1=="gag")
		t.innerHTML="Den Trick mit der Figur erklär ich Euch später.";
	*/
	}
 function showDescription(p1,p2)
 	{
 	var t=document.getElementById("description");
 	t.style.right="40px";
	t.style.bottom="330px";
	t.style.display="block";
 	if (p1.indexOf("_")>-1)
		{
		var under=p1.indexOf("_");
		var objType=p1.substr(0,under);
		var objId=p1.substr(under+1,p1.length -(under+1));
		if (objType=="week")
			{
			document.getElementById("tag_help").innerHTML=objId + ". Kalenderwoche";
			document.getElementById("description").innerHTML=objId + ". Kalenderwoche";
			}
		else if (objType=="time")
			{
			// GBSPlanTimes
			document.getElementById("tag_help").innerHTML=objId + " Uhr";
			document.getElementById("description").innerHTML=objId + " Uhr";
			}
		else
			{
			if (null!=resObject)
				{
				sendGetObject(objId,objType,p2);
				}
			}
		}
 	}
 function sendGetObject(id,type,user)
	{
	resObject.open('get','ajax/index.ajax.php?id=' + id.replace("2xN","").replace("2x","") + '&type=' + type + "&user=" + user,true);
	resObject.onreadystatechange=handleGetObject;
	resObject.send(null);
	}
 function handleGetObject()
	{
	if (resObject.readyState==4)
		{
		document.getElementById("tag_help").innerHTML=resObject.responseText;
		document.getElementById("description").innerHTML=resObject.responseText;
		}
	}
 function onDozentSelected(id)
	{
	var sel=document.getElementById("select_dozent");
	
	}
 function hideHelp()
	{
	var h=document.getElementById("help");
	h.style.display="none";
	var t=document.getElementById("tag_help");
	t.style.display="none";
	var t=document.getElementById("description");
	t.style.display="none";
	}
/*
 function showPreview()
 	{
	var k=document.getElementById("kurs");
	var t=document.getElementById("text");
	var h=document.getElementById("preview");
	h.innerHTML="<h1>" + k.value + "</h1>\n"+ t.innerText;
	h.style.display="block";
 	}

 function hidePreview()
	{
	var h=document.getElementById("preview");
	h.style.display="none";
	}
*/
 function printPreviewPlan()
 	{
	var plan=document.getElementById("plan");
	var F1=window.open(null,"Plan","height=300, width=600, menubar=Yes,");
	F1.document.write("<table style='border-collapse:collapse;'>" + plan.innerHTML + "</table>");
 	}
 function initLayers(p1)
	{
	var main=document.getElementById("body");
	
	// main background
	if (p1=="guest")
		{
		main.style.backgroundColor="#FFF7EE";
		}
	if (p1=="student") 
		{
		main.style.backgroundImage="url('img/back_student.gif')";
		}
	if (p1=="dozent") 
		{
		main.style.backgroundImage="url('img/back_dozent.gif')";
		}
	if (p1=="admin") 
		{
		main.style.backgroundImage="url('img/back_admin.gif')";
		}
		
	// copyright & position
	var line=document.getElementById("body_line");
	if (OP)
		{
		line.style.left="0px";
		}
	if (MS)
		{
		line.style.top="10px";
		}
	else
		{
		line.style.top="-12px";
		}
	}

/***************************************************************
*
*  Universal validate-form
*
* $Id: jsfunc.validateform.js,v 1.6 2005/12/19 20:29:26 kurfuerst Exp $
*
*
*
*  Copyright notice
*
*  (c) 1998-2003 Kasper Skaarhoj
*  All rights reserved
*
*  This script is part of the TYPO3 t3lib/ library provided by
*  Kasper Skaarhoj <kasper@typo3.com> together with TYPO3
*
*  Released under GNU/GPL (see license file in tslib/)
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*  This copyright notice MUST APPEAR in all copies of this script
***************************************************************/


function validateForm(theFormname,theFieldlist,goodMess,badMess,emailMess)	{
	var formObject = document[theFormname];
	if (!formObject)	{
		formObject = document.getElementById(theFormname);
	}
	if (formObject && theFieldlist)	{
		var index=1;
		var theField = split(theFieldlist, ",", index);
		var msg="";
		var theEreg = '';
		var theEregMsg = '';
		var specialMode = '';

		while (theField) {
			theEreg = '';
			specialMode = '';

				// Check special modes:
			if (theField == '_EREG')	{	// EREG mode: _EREG,[error msg],[JS ereg],[fieldname],[field Label]
				specialMode = theField;

				index++;
				theEregMsg = unescape(split(theFieldlist, ",", index));
				index++;
				theEreg = unescape(split(theFieldlist, ",", index));
			} else if (theField == '_EMAIL')	{
				specialMode = theField;
			}

				// Get real field name if special mode has been set:
			if (specialMode)	{
				index++;
				theField = split(theFieldlist, ",", index);
			}

			index++;
			theLabel = unescape(split(theFieldlist, ",", index));
			theField = unescape(theField);
			if (formObject[theField])	{
				var fObj = formObject[theField];
				var type=fObj.type;
				if (!fObj.type)	{
					type="radio";
				}
				var value="";
				switch(type)	{
					case "text":
					case "textarea":
						value = fObj.value;
					break;
					case "select-one":
						if (fObj.selectedIndex>=0)	{
							value = fObj.options[fObj.selectedIndex].value;
						}
					break;
					case "select-multiple":
						var l=fObj.length;
						for (a=0;a<l;a++)	{
							if (fObj.options[a].selected)	{
								 value+= fObj.options[a].value;
							}
						}
					break;
					case "radio":
						var len=fObj.length;
						if (len)	{
							for (a=0;a<len;a++)	{
								if (fObj[a].checked)	{
									value = fObj[a].value;
								}
							}
						} else {
							if (fObj.checked)	{
								value = fObj.value;
							}
						}
					break;
					default:
						value=1;
				}

				switch(specialMode)	{
					case "_EMAIL":
						var theRegEx_notValid = new RegExp("(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)", "gi");
						var theRegEx_isValid = new RegExp("^.+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})$","");
						if (!theRegEx_isValid.test(value))	{	// This part was supposed to be a part of the condition: " || theRegEx_notValid.test(value)" - but I couldn't make it work (Mozilla Firefox, linux) - Anyone knows why?
							msg+="\n"+theLabel+' ('+(emailMess ? unescape(emailMess) : 'Email address not valid!')+')';
						}
					break;
					case "_EREG":
						var theRegEx_isValid = new RegExp(theEreg,"");
						if (!theRegEx_isValid.test(value))	{
							msg+="\n"+theLabel+' ('+theEregMsg+')';
						}
					break;
					default:
						if (!value)	{
							msg+="\n"+theLabel;
						}
				}
			}
			index++;
			theField = split(theFieldlist, ",", index);
		}
		if (msg)	{
			var theBadMess = unescape(badMess);
			if (!theBadMess)	{
				theBadMess = "You must fill in these fields:";
			}
			theBadMess+="\n";
			alert(theBadMess+msg);
			return false;
		} else {
			var theGoodMess = unescape(goodMess);
			if (theGoodMess)	{
				alert(theGoodMess);
			}
			return true;
		}
	}
}
function split(theStr1, delim, index) {
	var theStr = ''+theStr1;
	var lengthOfDelim = delim.length;
	sPos = -lengthOfDelim;
	if (index<1) {index=1;}
	for (a=1; a<index; a++)	{
		sPos = theStr.indexOf(delim, sPos+lengthOfDelim);
		if (sPos==-1)	{return null;}
	}
	ePos = theStr.indexOf(delim, sPos+lengthOfDelim);
	if(ePos == -1)	{ePos = theStr.length;}
	return (theStr.substring(sPos+lengthOfDelim,ePos));
}

