/* javascripts.js
.---------------------------------------------------------------------------.
|    Software: MAGDa.P                                                      |
|     Version: 1.0                                                          |
|        Date: 2009-10-19                                                   |
| Description: general library of javascript functions                      |
|     Contact: info@andreas-guder.de                                        |
| ------------------------------------------------------------------------- |
|      Author: Andreas Guder                                                |
|     Contact: info@andreas-guder.de                                        |
| Copyright (c) 2009-2010,                                                  |
|               IPvD Interessengem.Parkplatzanbieter v.Deutschland          |
|               All Rights Reserved.                                        |
| ------------------------------------------------------------------------- |
|     License: you are not allowed to use, modify, distribute               |
|              or sublicense copies of the software without                 |
|              a grant of a licence from                                    |
|              from IPvD Interessengem.Parkplatzanbieter v.Deutschland      |
'---------------------------------------------------------------------------'
*/
var eingabe = null;
var textbox = null;
var ajaxlock = false;

function datumgueltig(tag, monat, jahr) 
{
	tag = parseFloat(tag);
	monat = parseFloat(monat);
	jahr = parseFloat(jahr);
	var rueckgabe = true;
	switch (monat) 
  {
		case 1: if (tag < 0 || tag > 31) rueckgabe = false; break;
		case 2: 
      if (jahr % 4 == 0 && (jahr % 100 > 0 || jahr % 400 == 0)) 
      {
				if (tag < 0 || tag > 29) 
        { 
					rueckgabe = false; 
				}
			} 
      else if (tag < 0 ||  tag > 28) 
      {
				rueckgabe = false; 
			}
      break;
		case 3: if (tag < 0 || tag > 31) rueckgabe = false; break;
		case 4: if (tag < 0 || tag > 30) rueckgabe = false; break;
		case 5: if (tag < 0 || tag > 31) rueckgabe = false; break;
		case 6: if (tag < 0 || tag > 30) rueckgabe = false; break;
		case 7: if (tag < 0 || tag > 31) rueckgabe = false; break;
		case 8: if (tag < 0 || tag > 31) rueckgabe = false; break;
		case 9: if (tag < 0 || tag > 30) rueckgabe = false; break;
		case 10: if (tag < 0 || tag > 31) rueckgabe = false; break;
		case 11: if (tag < 0 || tag > 30) rueckgabe = false; break;
		case 12: if (tag < 0 || tag > 31) rueckgabe = false; break;
		default: rueckgabe = false; break;
	}
	return rueckgabe;
}

function uhrzeitgueltig(zeit) 
{
  var stunde = zeit.substr(0,2);
  var minute = zeit.substr(3,2);
  stunde = parseFloat(stunde);
	minute = parseFloat(minute);
  
  if ( stunde > 24 || stunde < 0 )
    return false;
  if ( minute > 59 || minute < 0 )
    return false;
  
  return true;
}

function get_position_top(element) 
{
  var positionTop = element.offsetTop;
  while((element = element.offsetParent) != null) {
    //if(element.id != 'hauptteil')
    //{
      positionTop += element.offsetTop;
      //alert(element.tagName);
    //}
    //else
      //break;
  }
  if ( /MSIE/.test(navigator.userAgent) ) 
    return positionTop;
  else
    return (framelogin) ? positionTop : positionTop-25;
}

function get_position_left(element) 
{
  var positionLeft = element.offsetLeft;
  while((element = element.offsetParent) != null) {
    //if(element.id != 'hauptteil')
      positionLeft += element.offsetLeft;
    //else
      //break;
  }
  return positionLeft;
}

function hide_error_div()
{
  if (document.getElementById('fehlerdiv'))
  {
    var fdiv = document.getElementById('fehlerdiv');
    if (fdiv.style.display != 'none')
    {
      var fdivp = fdiv.firstChild;
      while (fdivp.hasChildNodes())
      {
        fdivp.removeChild(fdivp.firstChild);
      }
      fdiv.style.display = 'none';
    }
  }
}

function show_error(field,message)
{
  if (document.getElementById('fehlerdiv'))
  {
    var fdiv = document.getElementById('fehlerdiv');
    if (fdiv.style.display != 'block')
    {
      fdiv.style.display = 'block';
    }
    var fdivp = fdiv.firstChild;
    while (fdivp.hasChildNodes())
    {
      fdivp.removeChild(fdivp.firstChild);
    }
    fdivp.appendChild(document.createTextNode(message));
    
    //set the position of the error-div
    positionTop = get_position_top(field)-(fdiv.offsetHeight)-10;
    positionLeft = get_position_left(field)+(fdiv.offsetWidth/2);
    fdiv.style.top = positionTop+'px';
    fdiv.style.left = positionLeft+'px';
  }
  else
  {
    alert(message);
  }
}

function validate() 
{
  // get all arguments
  var arguments = validate.arguments;
  
  hide_error_div();
  var class_name = arguments[0].className;
  class_name = class_name.replace(/ ?fehleingabe/,'');
  arguments[0].className = class_name;
  
  // the first argument is a referenz of the formular-element, so return false, if empty
  if(!arguments[0])
  {
    return false;
  }
  
  // is this a required field
  if ( arguments[4] )
  {
    // Yes, so it musn't be empty
    var testvalue = arguments[0].value.replace(/\s/,'');
    if (testvalue == '')
    {
      show_error(arguments[0],arguments[5]);
      return false;
    }
  }
  
  // if the second and third argument are not be empty, the element should be validated
  if(arguments[1] != '' && arguments[2] != '')
  {
    var error = false;
    
    // if the value is empty we musn't validat
    var testvalue = arguments[0].value.replace(/\s/,'');
    if (testvalue != '')
    {
      if (arguments[1] == 'compare')
      {
        var testmuster = eval(arguments[2]);
        if (!testmuster.test(arguments[0].value))
        {
          error = true;
        }
      }
      else if (arguments[1] == 'compare-date')
      {
        var testmuster = /^([0-9]{2})\.([0-9]{2})\.(([0-9]{4})|([0-9]{2}))$/;
        if (!testmuster.test(arguments[0].value))
        {
          error = true;
        }
        else
        {
          var tag = arguments[0].value.substr(0,2);
          var monat = arguments[0].value.substr(3,2);
          var jahr = arguments[0].value.substr(6,4);
          if (jahr.length == 2)
          {
            jahr = 20+''+jahr;
          }
          
          error = !datumgueltig(tag, monat, jahr);
          if (!error && arguments[2] == 'fromnow')
          {
            var now = new Date();
            now.setMinutes(0);
            now.setHours(0);
            now.setSeconds(0);
            var value_date = new Date(jahr, monat-1, tag);
            if (Date.parse(value_date) < Date.parse(now))
            {
              error = true;
            }
          }
          
        }
      }
      else if (arguments[1] == 'compare-time')
      {
        var testmuster = /^([0-9]{2}):([0-9]{2})$/;
        if (!testmuster.test(arguments[0].value))
        {
          error = true;
        }
        else
        {
          error = !uhrzeitgueltig(arguments[0].value);
        }
      }
      else if (arguments[1] == 'fromto')
      {
        var testarray = eval(arguments[2]);
        var found = false;
        for (var i = testarray[0]; i <= testarray[1]; i += testarray[2])
        {
          if (arguments[0].value == i)
          {
            found = true;
            break;
          }
        }
        if (!found)
          error = true;
      }
    }
    
    if (error)
    {
      show_error(arguments[0],arguments[3]);
      // is this a new error on this field
      if (error_fields.length > 0) 
      {
        var found = false;
        for (var i = 0; i < error_fields.length; i++) 
        {
          if (error_fields[i] == arguments[0].name) 
          {
            found = true;
            break;
          }
        }
        // add the element to the array
        if (!found) 
        {
          error_fields.push(arguments[0].name);
        }
      }
      else
      {
        error_fields.push(arguments[0].name);
      } 
      // add the error-class
      arguments[0].className = class_name+' fehleingabe';
      return false;
    }
    else
    {
      if (error_fields.length > 0) 
      {
        var found = false;
        for (var i = 0; i < error_fields.length; i++)
        {
          if (error_fields[i] == arguments[0].name) 
          {
            found = true;
            break;
          }
        }
        
        // remove the element form thearray, if exist
        if (found) 
        {
          error_fields.splice(i, 1);
        }
        
      }
      if ( error_fields.length == 0 )
      {
        if (document.getElementById('submiterror'))
        {
          if(document.getElementById('submiterror').style.display != 'none')
            document.getElementById('submiterror').style.display = 'none';
        }
      }
    }
  }
  return true;
}

function falscherwert() {
	if ( error_fields.length > 0 ) {
		alert("Sie haben ungültige Werte eingetragen, bitte überprüfen Sie alle ROT-markierten Felder!");
		return false;
	}	else
		return true;
}

// Feststellen, ob alle pflichtfelder ausgefüllt sind
function checkpflichtfelder() {
  if ( required_fields ) {
    for ( var i = 0; i < required_fields.length; i++ ) {
      var testvalue = document.forms[0].elements[required_fields[i]].value.replace(/\s/,'');
      if ( testvalue == '' ) {
        alert('Sie haben nicht alle Pflichtfelder ausgefüllt');
        return false;
      }
    }
  }
  return true;
}

function submit_ok() {
	if (checkpflichtfelder() && falscherwert())
		return true;
	else 
		return false;
}

function datumPunkt() 
{
	var feldZeichen = eingabe.value.length;
	
	switch (feldZeichen) {
		case 3: var inhalt = eingabe.value;
				var zeichen = inhalt.substr(2, 3);
				if(zeichen != '.') {
					var inhaltVorPunkt = inhalt.substr(0, 2);
					var inhaltNachPunkt = inhalt.substr(2, 3);
					var inhaltNeu = inhaltVorPunkt+'.'+inhaltNachPunkt;
					eingabe.value = inhaltNeu;
				}
				break;
		case 6: var inhalt = eingabe.value;
				var zeichen = inhalt.substr(5, 6);
				if(zeichen != '.') {
					var inhaltVorPunkt = inhalt.substr(0, 5);
					var inhaltNachPunkt = inhalt.substr(5, 6);
					var inhaltNeu = inhaltVorPunkt+'.'+inhaltNachPunkt;
					eingabe.value = inhaltNeu;
				}
				break;
	}
}

function zeitPunkt() 
{
	
  if ( eingabe.value.length == 3 ) {
		var inhalt = eingabe.value;
		var zeichen = inhalt.substr(2, 3);
		if(zeichen != ':') {
			var inhaltVorPunkt = inhalt.substr(0, 2);
			var inhaltNachPunkt = inhalt.substr(2, 3);
			var inhaltNeu = inhaltVorPunkt+':'+inhaltNachPunkt;
			eingabe.value = inhaltNeu;
		}
	}
}

function zeichenGrenze(zeichenGesammt) 
{
	var feldZeichen = textbox.value.length;
	var zeichenUebrig = zeichenGesammt - feldZeichen;
	if (zeichenUebrig <= 0) {
		var inhalt = textbox.value;
		var neuerInhalt = inhalt.substr(0, zeichenGesammt);
		textbox.value = neuerInhalt;
		zeichenUebrig = 0;
		textbox.className="feldvoll";
	} else {
		textbox.className="";
	}
  
  if (document.getElementById('charcount')) {
    
    var fieldcount = document.getElementById('charcount');
    while ( fieldcount.hasChildNodes() ) {
      fieldcount.removeChild(fieldcount.firstChild );
    }
    var text = document.createTextNode(feldZeichen);
    fieldcount.appendChild(text);
    
  }
}

// Gibt den Ajaxpfad zurück
function get_ajax_path() {
  /*
  var pfad = window.location+'';
  if(pfad.lastIndexOf("/") != -1)
    var ajaxpfad = pfad.substr(0, pfad.lastIndexOf("/")+1)+'ajax.php';
  else if(pfad.lastIndexOf("\\") != -1)
    var ajaxpfad = pfad.substr(0, pfad.lastIndexOf("\\")+1)+'ajax.php';
  else
    return false;
  */
  var ajaxpfad = '/fileadmin/templates/magdap/ajax.php';
  return ajaxpfad;
}

//Funktion zum Erzeugen eines XMLHttpRequest-Objekts in abhängigkeit des Browsers
function erzeugeXMLHttpRequestObjekt() {
  
	try {
    
		if (window.ActiveXObject) {
      
			try {
        
				refernzObjekt = new ActiveXObject("Microsoft.XMLHTTP");  
        
			} catch(Error) {
        
				try {
          
					refernzObjekt = new ActiveXObject("Msxml2.XMLHTTP.");
          
				} catch(Error) {
          
					refernzObjekt = false;
          
				}
			}
      
		} else if (window.XMLHttpRequest) {
      
			refernzObjekt = new XMLHttpRequest();
      
		}
    
	} catch(Error) {
		refernzObjekt = false;
	}
	return refernzObjekt;
}

// Führt die Serveranfrage aus
function ajax(methode, pfad, code, funktionID, falert) {
  
  if ( ajaxlock ) {
    
    if ( !falert )
      alert('Bitte warten, die vorherige Abfrage ist noch nicht verarbeitet.');
    
    return false;
    
  }
  
	if (!methode)
		var methode = 1;
	if (!code)
		var code = '';
	if (refernzObjekt && refernzObjekt.readyState) {
    
		refernzObjekt.abort();
		refernzObjekt = false;
	}
  
	var refernzObjekt = erzeugeXMLHttpRequestObjekt();
  
	if (refernzObjekt) {
    if(sid) {
      code += '&PHPSESSID='+sid;
    }
    ajaxlock = true;
		switch(methode) {
      
			case 1: //Request per GET
				var pfadcode = pfad+'?'+code;
				refernzObjekt.open( "GET", pfadcode, true );
				code = null;
				break;
			case 2: //Request per POST
				refernzObjekt.open( "POST", pfad, true );
				refernzObjekt.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
				refernzObjekt.setRequestHeader( 'Content-length', code.length );
				break;
		}
    refernzObjekt.setRequestHeader("Pragma", "no-cache");
    refernzObjekt.setRequestHeader("Cache-Control", "must-revalidate");
    refernzObjekt.setRequestHeader("If-Modified-Since", document.lastModified);
		refernzObjekt.onreadystatechange = new Function("choose_ajax_function("+funktionID+")");
		refernzObjekt.send(code);
	}
  
  return true;
}

// Rückgeben des Transparentz-Wertes
function getOpacity(id) {
  
  var opacity; 
  if ( opacity = document.getElementById(id).style.opacity ) {
    opacity = parseFloat(opacity)*100;
    
    return opacity;
  }
  return 100;
  
}

// Setzen des neuen Transparenz-Wertes
function setOpacity(id,wert) {
  
  id = document.getElementById(id);
  if ( wert == 100 ) {
    id.style.opacity = 1;  
    if ( /MSIE/.test(navigator.userAgent) )  
      id.style.filter.replace(/alpha\([^\)]*\)/gi,'');  
  } else {  
    id.style.opacity = wert/100; 
    if ( /MSIE/.test(navigator.userAgent) ) {
      id.style.filter = "alpha(opacity="+wert+")"; 
    }
  } 
  
  return;
  
}

// Fader blendet Elemente ein
function fade(id,wert) {
  
  if ( getOpacity(id) < 80) {
    wert++;
    setOpacity(id,wert);
    var ref = setTimeout('fade("'+id+'","'+wert+'")',30);
  } else {
    clearTimeout(ref);
    return true;
  }
  
}

// Blendet die Bitten-Warten-Meldung ein
function setwarten(einblenden) {
  
  if ( document.getElementById('wartendiv').style.left != '50%' ) {
    var id = 'schleier';
    var div = document.getElementById(id);
    var mainspace = document.getElementById('mainspace');
    
    document.getElementById('wartendiv').style.left = '50%';
    setOpacity(id,10);
    if ( /MSIE/.test(navigator.userAgent) ) {
      div.style.left = (mainspace.offsetLeft+4)+'px';
      div.style.top = mainspace.offsetTop+'px';
      div.style.width = mainspace.offsetWidth-10+'px';
    } else {
      div.style.left = mainspace.offsetLeft+'px';
      div.style.top = (mainspace.offsetTop-10)+'px';
      div.style.width = mainspace.offsetWidth-10+'px';
    }
    div.style.height = (mainspace.offsetHeight+11)+'px';
    
    var ref = setTimeout('fade("'+id+'",0)',30);
    
  }
  return true;
 
}

// Blendet die Wartenmeldung aus
function unsetwarten() {
  
  document.getElementById('wartendiv').style.left = '-300px';
  var id = 'schleier';
  var div = document.getElementById(id);
  div.style.left = '-300px';
  div.style.width = '1px';
  
}

// Entfernt den Tooltipp wieder
function cleartooltip() {
  
  var tooldiv = document.getElementById('tooltip');
  tooldiv.style.left = '-500px';
  tooldiv.style.width = '1px';

  while ( tooldiv.hasChildNodes() ) {
		tooldiv.removeChild(tooldiv.firstChild);
  }
  
  var args = cleartooltip.arguments;
  if (!args[0])
  {
    if ( document.getElementById('wartendiv').style.left != '-300px' )
      unsetwarten();
  }
  
}

