/**
 * tools.js
  */

 
/*
==================================================================
LTrim(string) : Returns a copy of a string without leading spaces.
==================================================================
*/
function LTrim(str)
/*
   PURPOSE: Remove leading blanks from our string.
   IN: str - the string we want to LTrim
*/
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1) {
      // We have a string with leading blank(s)...

      var j=0, i = s.length;

      // Iterate from the far left of string until we
      // don't have any more whitespace...
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;

      // Get the substring from the first non-whitespace
      // character to the end of the string...
      s = s.substring(j, i);
   }
   return s;
}

/*
==================================================================
RTrim(string) : Returns a copy of a string without trailing spaces.
==================================================================
*/
function RTrim(str)
/*
   PURPOSE: Remove trailing blanks from our string.
   IN: str - the string we want to RTrim

*/
{
   // We don't want to trip JUST spaces, but also tabs,
   // line feeds, etc.  Add anything else you want to
   // "trim" here in Whitespace
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      // We have a string with trailing blank(s)...

      var i = s.length - 1;       // Get length of string

      // Iterate from the far right of string until we
      // don't have any more whitespace...
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;


      // Get the substring from the front of the string to
      // where the last non-whitespace character is...
      s = s.substring(0, i+1);
   }

   return s;
}

/*
=============================================================
Trim(string) : Returns a copy of a string without leading or trailing spaces
=============================================================
*/
function Trim(str)
/*
   PURPOSE: Remove trailing and leading blanks from our string.
   IN: str - the string we want to Trim

   RETVAL: A Trimmed string!
*/
{
   return RTrim(LTrim(str));
}
/*
Funktion für ForkaFormmail2 Formulare
Überprüft die korrekte Schreibweise des Wertes eines Input-Feldes, das eine E-Mail-Adresse enthalten soll
Parameter: oObj - input-Objekt
Rückgabe: validierte (getrimmte) E-Mail-Adresse oder null, wenn sie ungültig ist.
Beispiel: onChange="validateFormmailEmailAddress(this)"
*/
function validateFormmailEmailAddress(oObj){
    var newValue = validateEmailAddress(oObj.value);
    if(newValue==null){
        markFormmailInput(oObj,true,"Die E-Mail-Schreibweise ist nicht gültig.");
    }else{
        oObj.value = newValue;
        markFormmailInput(oObj,false);
    }
}
/*
Funktion (auch) für ForkaFormmail2 Formulare
Überprüft die korrekte Schreibweise des Strings, der eine E-Mail-Adresse enthält.
Parameter: strEmail - String, der eine E-Mail-Adresse enthält
Rückgabe: validierte (getrimmte) E-Mail-Adresse oder null, wenn sie ungültig ist.
Beispiel: var validated = validateEmailAddress("tpraxl@hr-online.de");
*/
function validateEmailAddress(strEmail){
    if(strEmail!=null){
        strEmail = strEmail.replace(/\s/,"");
    	// svens variante:  var emailtestpattern = /^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,4}$/;
    	// bisherige Variante: var emailtestpattern = /^([_a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$/;
    	// neu rho & aav, aber zu restriktiv:
    	// var emailtestpattern = /^[_a-zA-Z0-9-]+((\.|!|_|\+|\-)[_a-zA-Z0-9-]+)*@[_a-zA-Z0-9-]+(((\.|\-))+[a-zA-Z]{2,}){1,2}$/;
    	// neuer Versuch - (almost) anything goes:
        var emailtestpattern = /^.+@[^\.].*\.[a-z]{2,}$/;
        if(strEmail.toLowerCase().match(emailtestpattern)){
            return strEmail;
        }else{
            return null;
        }
    }
    return strEmail;
}
/*
Funktion für ForkaFormmail2 Formulare
Markiert ein ForkaFormmail-Input-Feld als fehlerhaft oder korrekt ausgefüllt.
Im Fall einer Fehlermarkierung wird die Original-Style-Klasse
im Feld origClassName gespeichert und die Klasse auf 'errorforka' gesetzt.
Im Fall einer Markierung für gültige Eingabe wird die Klasse wieder auf den
Wert von origClassName gesetzt.
Parameter: obj - Das zu markierende input-Objekt
           bError - boolean true (als Fehler markieren) | false (als korrekt markieren)
           strErrorMessage - Spezielle Fehlermeldung oder null für Standard
                Standard ist hier "Bitte f&uuml;llen Sie alle mit einem *
                                   markierten Pflichtfelder aus."
Beispiel: markFormmailInput(form.elements[name], true, null);
*/
function markFormmailInput(obj, bError, strErrorMessage){
    if(bError==false){
        obj.className = obj.origClassName;
    }
    else{
        if(obj.type == "checkbox"){
            labels = document.getElementsByTagName("label");
            if(labels!=null){
                for(l =0; l< labels.length;++l){
                    if(labels[l].getAttribute("for")==obj.name){
                        labels[l].origClassName = obj.className;
                        labels[l].className="errorforka";
                    }else{
                        if(labels[l].origClassName){
                            labels[l].className=labels[l].origClassName;
                        }
                    }
                }
            }
        }else{
            obj.className = 'errorforka';
        }
        //obj.focus();
        var message = document.getElementById('errormessage');
        if(message!=null&& message!='undefined'){
            if(strErrorMessage!=null)
                message.innerHTML = strErrorMessage;
            else
                message.innerHTML = "Bitte f&uuml;llen Sie alle mit einem * markierten Pflichtfelder aus.";
            message.style.display='block';
        }
    }
}
/*
Funktion für ForkaFormmail2 Formulare
Validiert ein einzelnes Input-Feld eines ForkaFormmail2 Input-Feldes.
Es wird davon ausgegangen, daß es sich bei dem Feld um ein Pflichtfeld handelt.
Im Falle eines invaliden Werts, wird das Objekt markiert und die übergebene
Fehlermeldung oder die Standard-Fehlermeldung ausgegeben.
Standard-Fehlermeldung ist "Bitte f&uuml;llen Sie alle mit einem *
markierten Pflichtfelder aus."
Parameter: oObj - Das zu validierende input-Objekt
           errormessage - Spezielle Fehlermeldung oder null für Standard
                Standard ist hier "Bitte f&uuml;llen Sie alle mit einem *
                                   markierten Pflichtfelder aus."
Rückgabe: boolean Wert: true für validen Wert des Objekts, false für invaliden Wert
Beispiel: onChange="validateSingleFormmailInput(this, null);"
*/
function validateSingleFormmailInput(oObj, errormessage){
    var success = true;
    var localSuccess = true;
    var obj = oObj;
    if(obj!=null){
        obj.value = Trim(obj.value);
        if(obj.type=="checkbox"){
            if(!obj.checked ){
                success = false;
                localSuccess=false;
            }
        }
        if(obj.value==''){
            if(obj.origClassName==null||obj.origClassName=='undefined'){
                obj.origClassName = obj.className;
            }
            success = false;
            localSuccess = false;
        }
        if(obj.name=='sender'){
            var originalValue = obj.value;
            var newValue = validateEmailAddress(obj.value);
            if(newValue==null){
                success = false;
                localSuccess = false;
                errormessage = "Die E-Mail-Schreibweise ist nicht gültig.";
            }else{
                obj.value = newValue;
            }
        }
        /*if(!localSuccess){
            alert(obj.name+": \n"+obj.value);
        }*/
        markFormmailInput(obj,!localSuccess,errormessage);
    }
    return localSuccess;
}
/*
Funktion für ForkaFormmail2 Formulare
Validiert das übergebene Formular.
Im Falle eines invaliden Werts, wird das betroffene Objekt markiert und eine
entsprechende Fehlermeldung ausgegeben.
Es werden nur Felder validiert, die auch als Pflichtfelder in aList enthalten sind.
Parameter: oForm - Das zu validierende form-Objekt
           aList - Liste der Pflichtfelder als Array (enthält die Namen der Input-Elemente)
Rückgabe: boolean Wert: true für validen Wert des Objekts, false für invaliden Wert
Beispiel: onSubmit="return validateSingleFormmailInput(this.form, jsMandatory);"
*/
function validateFormmailInput(oForm, aList){
    var success = true;
    var errormessage = null;
    for (i=0; i< aList.length;++i) {
            var obj = oForm.elements[aList[i]];
            var localSuccess = validateSingleFormmailInput(obj, null);
            if(localSuccess==false)
                success = false;
    }
    return success;
}

//
// Popup-Fenster mit flexibler Breite und Hoehe und Scrollbars
// (Übernahme tour.ard.de)
//
function popscroll(ziel,w,h) {
  jsdatum = new Date();
  jsdatum = jsdatum.getHours() + '_' + jsdatum.getMinutes() + '_' + jsdatum.getSeconds();

  fenster = window.open(ziel,jsdatum,'width=' + w + ',height=' + h + ',resizable=yes,scrollbars=yes');
  fenster.focus();
}


// START COUNTDOWN SCRIPT
/**
 * Countdown (gibt nur die anzahl der Tage aus
 * z.b. new Countdown(2005,09,18,24,0);
 */
 function Countdown(year, month, day, hour, minute){
 	this.year = year;
	this.month = month-1;
	this.day = day;
	this.hour = hour;
	this.minute = minute;
	this.render = render;
	this.endDate = new Date(this.year, this.month, this.day, this.hour, this.minute, 0);
	this.render();
}

function render(){
	var future = this.endDate.getTime();
	var today = new Date().getTime();
	var dd = future - today;
	dday=Math.floor(dd/(60*60*1000*24)*1);
	dhour=Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1);
	dmin=Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1);
	dsec=Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1);
	if(dday == 0){
		document.write("heute");
	}else{
		if(dday.length < 10){
			document.write("0" + dday);
		}else{
			document.write(dday);
		}
	}
}

// END COUNTDOWN SCRIPT
//WICHTIG FUER DUMPF VOTING IAA
function DumpfVotingOnMouseOver(tr){
    tr.oldBackgroundColor = tr.style.backgroundColor;
    tr.style.backgroundColor="dddddd";
}
function DumpfVotingOnMouseOut(tr){
    tr.style.backgroundColor=tr.oldBackgroundColor;
}

function checkYoufmContactForm(){
  var theAlert = "Bitte die Pflichtfelder ausfüllen...";
  var theForm = document.forms["kontakt"];
  if (theForm.vorname.value == "")
  {
    alert(theAlert);
	theForm.vorname.focus();
	return false;
  }
  if (theForm.name.value == "")
  {
    alert(theAlert);
	theForm.name.focus();
	return false;
  }
  if(theForm.email.value == ""){
    alert(theAlert);
    theForm.email.focus();
    return false;
  }
  theForm.submit();
}
function checkYoufmRequestForm(){
  var theAlert = "Bitte die Pflichtfelder ausfüllen...";
  var theForm = document.forms["request"];
  if (theForm.vorname.value == "")
  {
    alert(theAlert);
	theForm.vorname.focus();
	return false;
  }
  if (theForm.name.value == "")
  {
    alert(theAlert);
	theForm.name.focus();
	return false;
  }
  if(theForm.email.value == ""){
    alert(theAlert);
    theForm.email.focus();
    return false;
  }
  if(theForm.interpret.value==""){
    alert(theAlert);
    theForm.interpret.focus();
    return false;
  }
  if(theForm.titel.value==""){
    alert(theAlert);
    theForm.titel.focus();
    return false;
  }
  theForm.submit();
}
function checkNewsletterForm(oForm){
  var theAlert = "Bitte die Pflichtfelder ausfüllen...";
  var theForm = form;
  if(theForm  == document.forms.newsletter){
     if (theForm.vorname.value == "")
      {
        alert(theAlert);
        theForm.vorname.focus();
        return false;
      }
      if (theForm.name.value == "")
      {
        alert(theAlert);
        theForm.name.focus();
        return false;
      }
      if(theForm.email.value==""){
        alert(theAlert);
        theForm.email.focus();
        return false;
      }
      theForm.submit();
  }
  else{
    if(theForm.email_unsubscribe.value ==""){
        alert(theAlert);
        theForm.email_unsubscribe.focus();
        return false;
    }
    theForm.submit();
  }
  return false;
}
function checkForm(oForm){
    if(oForm.name=="kontakt"){
        return checkYoufmContactForm();
    }
    if(oForm.name=="request"){
        return checkYoufmRequestForm();
    }
}
//Playlistfenster öffnen
// (Wird vom Flashmovie geladen)

function openPlaylist() {
   var a=window.open('http://www.you-fm.de/titelsuche.html','youfmplaylist','menubar=no,status=no,location=no,width=570,height=390,toolbar=no,scrollbars=yes,resizable=no');
}

//openWebRadio öffnen
// (Wird vom Flashmovie geladen)

function openWebRadio(client) {
   var a=window.open('http://www.hr-online.de/website/static/streaming_popup/mp3streamer.jsp?client='+client+'','webradio','menubar=no,status=no,location=no,width=420,height=180,toolbar=no,scrollbars=yes,resizable=no');
}

/* 
 * findFlash
 * Kopiert von http://aktuell.de.selfhtml.org/artikel/programmiertechnik/liveconnect/#js_flash
 * Anschließend dokumentiert.
 * Dient der Steuerung von Flash-Filmen über Java-Script.
 * Um das movie-Object ansprechen zu können, ist dieser umständliche code nötig,
 * der Einzeiler von Macromedia scheint eher eine Wunschvorstellung zu sein.
 *
 * Parameter:
 *  flash: ID des object-Tags, bzw. NAME des embed-Tags, was auf hr-online allerdings
 *         nicht zum Einsatz kommen sollte, da nicht W3C-konform
 *
 * Bearbeitet von: Thomas Praxl, 30.11.2006
 */

function findFlash (flash) {
    //Microsoft Internet Explorer und Opera verstehen document.all
    if (document.all) {
      //Für Microsoft IE ist es möglich, das object mit der ID {flash} zu beziehen,
      //für Opera nicht, da all nur unvollständig implementiert ist.
      if (document.all[flash]) {
        //Normalerweise würde man nun, bevor man das entsprechende Objekt als
        //Rückgabewert zurückliefert, auch noch abfragen, ob sich darauf denn
        //nun auch überhaupt die betreffenden allgemeinen Flash-Methoden
        //anwenden lassen, die man zu benutzen gedenkt, so etwas wie
        //if (document.all[flash].SetVariable) also. Beim MSIE führt dies
        //allerdings zu paradoxen Fehlermeldungen des Browsers, der eine solche
        //Methode nicht kennen will, obwohl er sie anstandslos durchführt.
        //Für den Internet-Explorer muss daher - anders als bei den übrigen
        //Browsern - auf diese Abfrage verzichtet werden: Das Flash-Objekt wird
        //ohne Prüfung der Verwendbarkeit allgemeiner Flash-Methoden zurückgegeben.
        return document.all[flash];
      }
      if (window.opera) {
        //Opera liefert über document.all[flash] nicht das gewünschte Objekt,
        //auch nicht über die Methoden document.getElementById(flash) oder
        //document.getElementsByTagName('embed') . Allerdings lässt sich in
        //Opera zumindest unter Windows 98 das Objekt nach der Macromedia-Variante
        //var movie = window.document.movie ansprechen. Um diese Möglichkeit
        //nicht ungenutzt zu lassen, gibt die Funktion das Objekt über
        //eval(window.document + flash) zurück. Dabei ist bei Opera sogar auch
        //eine Prüfung auf die Verwendbarkeit allgemeiner Flash-Methoden möglich.
        //Außer Acht bleiben bei diesem Ansatz freilich Opera-Browser, die auf
        //anderen Betriebssystemen laufen, was dort vermutlich zu Fehlern führt.
        var movie = eval(window.document + flash);
        if (movie.SetVariable) {
          return movie;
        }
      }
      return;
    }
    //Wenn es sich bei dem Browser um einen Netscape der 4er-Versionen handelt,
    //dann und nur dann versteht er das Layer-Objekt und - bekanntermaßen - auch
    //das Embeds-Objekt. Für den Fall, dass die Unterversion Netscape 4.X mit
    //dem Embeds-Objekt auch das Flash-Objekt identifizieren kann, wird dieses -
    //und ansonsten undefined zurückgegeben.
    if(document.layers) {
      if(document.embeds) {
        var movie = document.embeds[flash];
        if (movie.SetVariable) {
          return movie;
        }
      }
      return;
    }
    if (!document.getElementById) {
      return;
    }
    var movie = document.getElementById(flash);
    if (movie.SetVariable) {
      return movie;
    }
    var movies = movie.getElementsByTagName('embed');
    if (!movies || !movies.length) {
      return;
    }
    movie = movies[0];
    if (movie.SetVariable) {
      return movie;
    }
    return;
}

function avPlayerPlayPause(idObjectTag){
    var movie = findFlash(idObjectTag);
    if(movie){
        movie.SetVariable("jsCommand","PlayPause");
    }
}
function avPlayerMute(idObjectTag){
    var movie = findFlash(idObjectTag);
    if(movie){
        movie.SetVariable("jsCommand", "Mute" );
    }
}

function writeFlash(sFlash) {
	document.write(sFlash);
}

