//in dieser Datei werden allgemeine Funktionen definiert
//sie ist in jedem Modul verfügbar und wird in der head.php
//als erstes geladen da alle von diesem script abhängig sind 


//ask user to delete a whole category
function ask_user(text){
	Check = confirm(text);
	if(Check == false) {
		return false;
	}
	else {
		return true;
	}
}

function toggle(id) {
	   line = document.getElementById(id);
	   if (line.style.display == "none") {
		   line.style.display = "";
	   }
	   else {
		   line.style.display = "none";
	   }
}

	//erleichert editieren von textfeldern 
function insert_tag(textarea, aTag, eTag) {
  var input = document.getElementById(textarea);
  input.focus();
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfügen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);      
    }
    range.select();
  }
  /* für neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einfügen des Formatierungscodes */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* für die übrigen Browser */
  else
  {
    /* Abfrage der Einfügeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfügen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
}

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}

	//check email 
function CheckEmail(email) {
	var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
	var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
	var regex = "^"+usr+"\@"+domain+"$";
	var myrxp = new RegExp(regex);
	var check = (myrxp.test(email));
   if (check!=true) return false;
   else return true;
}


/* GENERIC OVERLAY FUNCTIONS  */

// Layer-Objekt
var REV = {
 container: null,		// DIV-Container
 reviewsvorspann: '',	// Überschrift-Vorspann
 reviewsueber: null,		// Überschriftentext
 reviewsabsatz: null,		// Absatz für reviewstext
 ajax: false,			// XMLHttpRequest-Objekt
 mausX: 0,			// horizontale und ...
 mausY: 0,			// vertikale Mausposition
 div_breite: 0,		// Breite und ...
 div_hoehe: 0,			// Höhe des Fußnoten-Containers
 abstandX: 10,			// horizontaler und ...
 abstandY: 10,			// vertikaler Abstand von Mauszeiger
 rollX: 0,			// horizontale und ...
 rollY: 0,			// vertikale Scrollposition

 erzeugen: function(width, height, title) { 

	
		REV.div_breite = width;
  		REV.div_hoehe = height;
		REV.reviewsvorspann = title;
		REV.container = document.createElement("div");
 		REV.container.id = "overlay";
 		var pos_x = REV.mausX - REV.div_breite - REV.abstandX;
	
	
		REV.container.style.width = REV.div_breite + "px";
  		REV.container.style.height = REV.div_hoehe + "px";
  // Positionieren, abhÄngig von Mauszeiger und Browserfenster
  // Der Kasten soll rechts vom Mauszeiger erscheinen, wenn dort
  // noch Platz ist oder links kein Platz ist
  var pos_x = (REV.mausX + REV.abstandX + REV.div_breite < window.innerWidth || REV.div_breite + REV.abstandX > REV.mausX)?
   REV.mausX + REV.abstandX :	// rechts von Mauszeiger
   REV.mausX - REV.div_breite - REV.abstandX;	// links
		//review immer links anzeigen 
	

  // Der Kasten soll über dem Mauszeiger erschein, wenn Platz ist
  var pos_y = (REV.div_hoehe + REV.abstandY > REV.mausY)?
   REV.mausY + REV.abstandY :	// unter Mauszeiger
   REV.mausY - REV.div_hoehe - REV.abstandY;	// darüber
  //alert('roll: '+REV.rollX + ' ' + REV.rollY);// + "\npos: "+ pos_x + ' ' + pos_y + "\nmaus: "+ REV.mausX + ' ' + REV.mausY);
  REV.container.style.left = REV.rollX + pos_x + "px";
  REV.container.style.top = REV.rollY + pos_y + "px";
  // Fußnoten-Überschrift
  REV.titel = document.createElement("h1");
  REV.reviewsueber = document.createTextNode(REV.reviewsvorspann);
  REV.titel.appendChild(REV.reviewsueber);
  // Link zum Schließen
  var REV_link = document.createElement("a");
  REV_link.setAttribute("href", "javascript:REV.schliessen()");
  // Absatz für Fußnotentext vorbereiten
  REV.reviewsabsatz = document.createElement("p");
  // zusammensetzen
  REV.titel.appendChild(REV_link);
  REV.container.appendChild(REV.titel);
  REV.container.appendChild(REV.reviewsabsatz);
  // Ereignis registrieren
  // *verbessert* gegenüber ursprünglicher Fassung:
  // REV.anfasser ist das Element, das auf die Maus reagiert
  REV.anfasser = REV.titel; // oder ... = REV.container
  REV.anfasser.onmousedown = REV.ziehen_vorbereiten;
  REV.anfasser.style.cursor = "move";
  // zurückgeben
  return REV.container;
 },
 
 schliessen: function() {
  // löscht den Container
  document.getElementsByTagName("body")[0].removeChild(REV.container);
  REV.container = null;
  current_pic = 0;
  picture_array = new Array();
 },

 ziehen_vorbereiten: function(ereignis) {
  // registriert die ziehen-Funktion für Mausbewegungen,
  // Abbruch bei Loslassen der Maustaste
  if (!ereignis) var ereignis = window.event;
  REV.position_ermitteln(ereignis);
  document.onmousemove = REV.ziehen;
  document.onmouseup = REV.stopp;
 },

 position_ermitteln: function(ereignis) {
  // ermittelt die Position des Mauszeigers
  // (Pixel von der linken oberen Fensterecke)
  if (!ereignis) var ereignis = window.event;
  REV.mausX = ereignis.clientX;
  REV.mausY = ereignis.clientY;
  REV.roll();
  // Safari rechnet clientX/Y vom Dokumentenanfang aus
  if (REV.mausX > REV.rollX && REV.rollX >= window.innerWidth) REV.mausX -= REV.rollX;
  if (REV.mausY > REV.rollY && REV.rollX >= window.innerHeight) REV.mausY -= REV.rollY;
 },

 roll: function() {
  // Gibt die horizontale oder vertikale Scroll-Verschiebung zurück
  if (isFinite(self.pageYOffset)) {	// DOM
   REV.rollX = self.pageXOffset;
   REV.rollY = self.pageYOffset;
  } else if (isFinite(document.documentElement && document.documentElement.scrollTop)) {	// IE neu
   REV.rollX = document.documentElement.scrollLeft;
   REV.rollY = document.documentElement.scrollTop;
  } else if (isFinite(document.body.scrollTop)) {	// IE alt
   REV.rollX = document.body.scrollLeft;
   REV.rollY = document.body.scrollTop;
  }
 },

 ziehen: function(ereignis) {
  // verschiebt den Container parallel zu Mausbewegungen
  if (!ereignis) var ereignis = window.event;
  // Sicherheitsmaßnahme: manche Browser kommen mit den Ereignissen
  // durcheinander, z.B. beim Scrollen in überlangen Fußnoten
  // (Safari) oder bei Maus-Hektik (IE); in diesem Fall löst ein
  // Mausklick den am Zeiger klebenden Container.
  document.onmousedown = REV.stopp;
  // 1.) aktuelle Position ermitteln
  var kastenX = parseInt(REV.container.style.left.slice(0,-2));
  var kastenY = parseInt(REV.container.style.top.slice(0,-2));
  // 2.) alte Mausposition speichern
  var mausX_alt = REV.mausX;
  var mausY_alt = REV.mausY;
  // 3.) neue Mausposition ermitteln
  REV.position_ermitteln(ereignis);
  // 4.) um die Differenz verschieben
  REV.container.style.left = kastenX + REV.mausX - mausX_alt + "px";
  REV.container.style.top = kastenY + REV.mausY - mausY_alt + "px";
 },

 stopp: function() {
  // löscht Event-Handler, lÄsst Fußnoten-Container los
  document.onmousemove = null;
  document.onmouseup = null;
  // gleicht Sicherheitsmaßnahme in REV.ziehen() aus
  if (document.onmousedown) {
   // *korrigiert* gegenüber ursprünglicher Version
   document.onmousedown = null;
   REV.anfasser.onmousedown = REV.ziehen_vorbereiten;
  }
 }

};

function klonen(quelle, ziel) {
 // Hilfsfunktion für Fußnoten-Darstellung im DOM
 // Einfaches cloneNode() funktioniert nicht bei komplexen
 // Gebilden; eine Schleife baut den Teilbaum nach.
 for(var i = 0; i < quelle.childNodes.length; i++) {
  var knoten = quelle.childNodes[i];
  switch (knoten.nodeType) {
   case 1:	// Elementknoten
    var neu = ziel.appendChild(document.createElement(knoten.nodeName));
    for (var j = 0; j < knoten.attributes.length; j++) {
     neu.setAttribute(knoten.attributes[j].nodeName, knoten.attributes[j].nodeValue);
    }
    klonen(knoten, neu);
    break;
   case 3:	// Textknoten
    subknoten = document.createTextNode(knoten.nodeValue);
    ziel.appendChild(subknoten);
   // andere Knotentypen sind nicht relevant
  }
 }
} 





