/**
 * tools.js
  */
var debug = false;
if(typeof(console) === 'object') debug = true;


/*
==================================================================
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;
			// Muss wegen IE-Bug (z. B.: elements['2_name'] wird als elements[2] interpretiert) durchiteriert werden.
			if(document.all) {
			    for (j = 0; j < oForm.elements.length; j++) {
					var elName = oForm.elements[j].name;
					if(elName == aList[i]) {
						obj = oForm.elements[j];
						break;
					}
				}
			} else {
				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='+(client=='hrinfo' ? 226 : 180)+',toolbar=no,scrollbars=yes,resizable=no');
}


// hr1 Moderaten PopUp �ffnen
// (Wird vom Flashmovie geladen)

function openhr1ModPopUp(modId) {
	var a=window.open('http://www.hr-online.de/website/radio/hr1/moderatoren_popup.jsp?key='+modId+'','hr1moderatoren','menubar=no,status=no,location=no,width=588,height=595,toolbar=no,scrollbars=auto,resizable=yes');
}

/*
 * 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);
}

/*
 * AV Tracking
 * playerReady() wird vom JW-Player automatisch aufgerufen
 */
/* wird mit Einsatz des neuen Tool neu angegangen
var player;
var playlist;
var wtState = "INIT";

function playerReady(obj) {
	player = document.getElementById(obj['id']);
	addListeners();
}

function addListeners() {
	if (player) {
		player.addControllerListener("ITEM", "itemListener");
		itemListener({index:0});
		player.addModelListener("STATE", "stateListener");
	} else {
		setTimeout("addListeners()",100);
	}
}

function stateListener(obj) {

	currentState = obj.newstate;

	if (currentState == "COMPLETED" || currentState == "PAUSED" || currentState == "PLAYING") {

		var title 		= playlist.title;
		var file 		= playlist.file;
		var duration 	= playlist.duration;
		var path 		= file.substring(file.lastIndexOf("systemhaus.de")+20,file.lastIndexOf("/"));
		var type		= file.substring(file.lastIndexOf(".")+1);

		file = file.substring(file.lastIndexOf("/")+1,file.lastIndexOf("."));

		// Umschreiben des Status
		switch (currentState) {
		  case "PLAYING":
			  state = "play";
			  break;
		  case "PAUSED":
			  state = "pause";
			  break;
		  default:
		    state = currentState;
		    break;
		}

		setIvwAvTracking(path, file, state);
		//setXitiAvTracking(path, file, duration, state);


	}
}

function itemListener(obj) {
	playlist = player.getPlaylist()[obj.index];
	wtState = "INIT";
}

//Aufruf f�r IVW
function setIvwAvTracking(path, file, currentState) {

	var IVW="http://hr.ivwbox.de/cgi-bin/ivw/CP/";
	IVW += "AVT/"+path+"/"+file+"; /AVTracking/"+path+"/"+file+"/"+currentState;

	var ivwImage = document.getElementById('ivw');
	if (ivwImage != null) {
		ivwImage.src = IVW +"?r="+escape(document.referrer);
	}
}

//Aufruf f�r XiTi
function setXitiAvTracking(path, file, duration, state) {

	xt_rm('video','8', file, state,'0','0',duration,'0','1','1','int','','','7');
}

*/

/*
* hr-online, you-fm
* social bookmarks
* author: simon berger
* Die Dienste sind alphabetisch sortiert.
*/

function socialize_page( service ) {

    //Notewendig da die Dienste per Link aufgerufen werden
    //der keine Sonderzeichen enthalten darf.
    page_url    = encodeURIComponent(location.href);
    page_titel  = encodeURIComponent(document.title);

    switch( service ) {
        case 'delicious':
            window.open('http://delicious.com/save?v=5&url='+page_url+'&title='+page_titel);
            break;

        case 'digg':
            window.open('http://digg.com/submit?url='+page_url+'&title='+page_titel);
            break;

        case 'facebook'     :
            window.open('http://www.facebook.com/sharer.php?u='+page_url+'&t='+page_titel);
            break;

        case 'folkd':
            window.open('http://www.folkd.com/submit/page/'+page_url);
            break;

        case 'furl'     :
            window.open('http://www.furl.net/storeIt.jsp?u='+page_url+'&t='+page_titel);
            break;

        case 'google'   :
            window.open('http://www.google.com/bookmarks/mark?op=add&hl=de&bkmk='+page_url+'&title='+page_titel);
            break;

        case 'icio'   :
            window.open('http://www.icio.de/login.php?popup=1&url='+page_url+'&title='+page_titel);
            break;

        case 'linkarena':
            window.open('http://linkarena.com/bookmarks/addlink/?url='+page_url+'&title='+page_titel+'&tags=&desc=');
            break;

        case 'myspace'  :
            window.open('http://www.myspace.com/Modules/PostTo/Pages/?u='+page_url+'&t='+page_titel);
            break;

        case 'mister-wong'     :
            window.open('http://www.mister-wong.de/index.php?action=addurl&bm_url='+page_url+'&bm_description='+page_titel);
            break;

        case 'reddit'     :
            window.open('http://www.reddit.com/submit?url='+page_url);
            break;

        case 'yahoo'    :
            window.open('http://myweb2.search.yahoo.com/myresults/bookmarklet?u='+page_url+'&t='+page_titel);
            break;

        case 'yigg':
            window.open('http://yigg.de/neu?exturl='+page_url+'&exttitle='+page_titel);
            break;
        case 'webnews':
            window.open('http://www.webnews.de/einstellen?url='+page_url+'&title='+page_titel);
            break;

        case 'studivz':
            window.open('http://www.studivz.net/Suggest/Selection/?u='+page_url+'&desc='+page_titel);
            break;

    }
    return false;
}
//im zusammenspiel mit der hr3 vote-box
//$(document).ready(function() {
//	if($('#05_story_zum_song').length){
//		var cs = document.cookie.split(';');
//
//		for(var i=0;i < cs.length;i++) {
//			//nach passendem cookie suchen
//			if(cs[i].substring(0,'votechoices'.length) == 'votechoices'){
//				//wenn cookie gefunden, auslesen und in form einf�gen
//				var cutab = cs[i].indexOf('=')+1;
//				var val = cs[i].substring(cutab);
//				$('#05_story_zum_song').text(val.replace(/:/g,'\n'));
//			}
//		}//for
//	}//if form
//});//doc ready


/* Funktion um naja selbsterkl�rend... */
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.replace('#','&').slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}
function setUrlVar(name,value){

	var hash = window.location.hash; //url nach # auslesen

	if(hash.length === 0 && value.length > 0){ //wenn noch keine elemente
		hash += name+'='+value;
	} else {

		var reg = new RegExp("(?=["+name+"=]{"+(name.length+1)+"})[^&]*", "g");

		if( reg.exec(hash) != null ){ //match gefunden

			if( value.length > 0 )
				hash = hash.replace(reg, name+'='+value);
			else //kein value, eintrag l�schen
				hash = hash.replace(reg, '');

		}else if(value.length > 0) { //kein match, aber andere elemente
			hash += '&'+name+'='+value;
		}
	}


	window.location.hash = hash;
}

//nachzuladende js, wenn ben�tigt
$(document).ready(function() {

	//fuer die seiten auf denen dbjournal stattfindet, js nachladen
	if(	$('div.treemap').length ||	$('div.barchart').length ||	$('div.areachart').length ) {
		$.ajax({/*ajax call muss sein damit der ie das mit dem iso mitkriegt*/
		      url:'/website/tools/dbjournal/tools.dbjournal.min.js',
		      dataType: 'script',	scriptCharset:'ISO-8859-1', cache:true, type:'GET',
		      success:function(){ startDBJournalProcessing(); }});
	}//endif
	if(	$('div.nachrichten_treemap').length ||	$('div.barchart').length ||	$('div.areachart').length ) {
		$.ajax({/*ajax call muss sein damit der ie das mit dem iso mitkriegt*/
		      url:'/website/tools/dbjournal/nachrichten.dbjournal.min.js',
		      dataType: 'script',	scriptCharset:'ISO-8859-1', cache:true, type:'GET',
		      success:function(){ startDBJournalProcessing(); }});
	}//endif

	//Falls es ein map attribute gibt auf der seite, erst bingmaps js laden dann hrmaps.js
	if($('div.map_container').length){
		$.ajax({//ajax call muss sein damit der ie das mit dem utf-8 mitkriegt
			url:'http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3&mkt=de-DE', /**/
			dataType: 'script',	scriptCharset:'UTF-8', cache:true, type:'GET',
			success:function(){ loadHrMaps(); }});//bingmaps.js
	}//if

	function loadHrMaps(){
		$.ajax({//ajax call muss sein damit der ie das mit dem iso mitkriegt
			url:'http://www.hr-online.de/website/tools/bingmaps/hrmaps.js',
			dataType: 'script',	scriptCharset:'ISO-8859-1', cache:true, type:'GET',
			success:function(){ startMapProcessing(); }});//hrmaps.js
	}//loadHrMaps()

	function startMapProcessing(){

		var hrMap = new Array();

		//falls mehr als eine karte auf der seite eingebunden werden soll
		$('div.map','div.map_container').each(function(idx,elem){

			hrMap[idx] = new hrMaps();

			var mapid = this.id;

		    var center = $('#'+mapid+'_center').val().split('~');
			var zoom = $('#'+mapid+'_zoom').val();
			var style = $('#'+mapid+'_style').val();
			var autofit = $('#'+mapid+'_autofit').val();
			var colls = $('#'+mapid+'_colls').val().split(',');

			//console.log('Load Map'+mapid+' z:'+zoom +' s:'+style+' af:'+autofit );

			for(var i=0; i<colls.length;i++){
				var id 			= $('#'+colls[i]+'_id').val();
				var pin 		= $('#'+colls[i]+'_pinicon').val();
				var pin_size	= $('#'+colls[i]+'_pinicon_size').val();
				var cluster 	= $('#'+colls[i]+'_cluster').val();
				var clusterpin 	= $('#'+colls[i]+'_clustericon').val();
				var clupin_size	= $('#'+colls[i]+'_clustericon_size').val();
				var numbered 	= $('#'+colls[i]+'_numbered').val();

				hrMap[idx].addLayerToLoad(id,pin,pin_size,cluster,clusterpin,clupin_size,numbered);
			}

			hrMap[idx].initMap(mapid,autofit);
			hrMap[idx].loadMap(new VELatLong(center[0],center[1]),zoom,style);

		});//each .map
	}//loadHrMaps()
});//documentready

/*
 * Falls es ein Voting gibt das Ergebnis/Captcha Fenster anstelle des Popups in
 * einem Overlay anzeigen.
 * Popup per Colorbox realisiert, Skript wird nachgeladen wenn bedarf besteht
 */
$(document).ready(function() {

	if($('.votingForm').length > 0){

		//css für colorbox nachladen
		var prefix = '';
		var borderClass = 'cbhronline';
		//falls youfm, volle url
		var dloc = document.location.href;
		if(dloc.indexOf('you-fm') != -1 || dloc.indexOf('you_fm') != -1 ){
			prefix = 'http://www.hr-online.de';
			borderClass = 'cbyoufm';
		}else if(dloc.indexOf('hr3') != -1){
			borderClass = 'cbhr3';
		}else if(dloc.indexOf('sport') != -1){
			borderClass = 'cbsport';
		}

		if(true){
			var headID = document.getElementsByTagName("head")[0];
			var cssNode = document.createElement('link');
			cssNode.type = 'text/css';
			cssNode.rel = 'stylesheet';
			cssNode.href = prefix+'/website/tools/jslib/colorbox/colorbox.css';
			cssNode.media = 'screen';
			headID.appendChild(cssNode);
		}

		$.ajax({//ajax call muss sein damit der ie das mit dem iso mitkriegt
			url:prefix+'/website/tools/jslib/colorbox/jquery.colorbox-min.js',
			dataType: 'script',	scriptCharset:'UTF-8', cache:true, type:'GET',
			success:function(){

				$('.votingForm').each(function(idx,elem){

					var _form = $(this);

					//submit button klick abfangen
					//popup stoppen
					//overlay anzeigen
					$('button.voting',_form).attr('onclick','');
					$('button.voting',_form).click(function(e){

						e.preventDefault();
						e.stopPropagation();

						var link = prefix+_form.attr('action');
						var data = _form.serialize();
						openColorBox(link,{},data);

					});//ende button

					$('#colorbox').addClass(borderClass);

				});//Ende each votingForm

			}//success ende
		});//colorbox ajax


		function openColorBox(link,options,data){
			var settings = {
					href:link+"?"+data,
					innerWidth:496,
					innerHeight:480,
					iframe:true,
					fastIframe:false,
					preloading:false,
					opacity:0.8,
					scrolling:true,
					overlayClose: true,
					escKey: true,
					top:'10%',
					left:'25%',
					onComplete:function(){
						var h = $('.cboxIframe').contents().find("html, body").height();
						$(this).colorbox.resize({innerHeight:h});
						$('.cboxIframe').contents().find('#closeVoteWindow').attr('onclick','');
					}
				};
			$.extend( settings, options);
			$.colorbox(settings);
		}


	}//ende if votingfForm
});//Ende Voting im Overlay

//--------------------------------------------------------------------------------------
// JQuery StreamSwitcher
// Adding a switcher to any flash-based video-player to switch between high and low quality
// Responding on an added flashvar "hqStream = true" in a CMS flash-document
// author:mpiller
// creation-date: 06.05.2011
//--------------------------------------------------------------------------------------
function embedSwitcher(streamName,flashPlayerId){

		//Getting the name of the stream added as flashvar
		var streamArray = new Array();
		streamArray = streamName.split('-');
		var streamNameNew = streamArray[0]+"-"+streamArray[1];

		//Changing the container id
		$('div#flashPlayerSingle').attr('id','streamSwitcher');

		//Creating the switcher code
		var switcher;
		switcher ="<style type='text/css'>"
		switcher +=".gray {border-left: 1px solid #999999; border-right: 1px solid #999999; padding-left: 4px; width: 414px; background-color: #d2d2d2; font-size: 10px;}"
		switcher +=".white {border: 1px solid #999999; padding: 4px; width: 410px; background-color: #fafafa; font-size: 10px;}"
		switcher +="*html .gray {border-left: 1px solid #999999; border-right: 1px solid #999999; padding-left: 4px; width: 420px; background-color: #d2d2d2; font-size: 10px;}"
		switcher +="*html .white {border: 1px solid #999999; padding: 4px; width: 420px; background-color: #fafafa; font-size: 10px;}"
		switcher +="</style>"

		switcher +="<div id='switcher'>";
		switcher +="<div id='StreamHQ' style='width: 420px;'>";
		switcher +="<div class='gray'>";
		switcher +="Stream l&auml;uft derzeit in : Standard-Qualit&auml;t (896 KBit)</div>";
		switcher +="<a href='#' title='Livestream in Hoher Qualit&auml;t' class='streamHQ'>";
		switcher +="<div class='white'>";
		switcher +="Umschalten auf Hohe Qualit&auml;t (1500 KBit)</div>";
		switcher +="</a>";
		switcher +="</div>";

		switcher +="<div id='StreamLQ' style='display:none; width: 420px;'>";
		switcher +="<div class='gray'>";
		switcher +="Stream l&auml;uft derzeit in : Hoher Qualit&auml;t (1500 KBit)</div>";
		switcher +="<a href='#' title='Livestream in Standard Qualit&auml;t' class='streamLQ'>";
		switcher +="<div class='white'>Umschalten auf Standard-Qualit&auml;t (896 KBit)</div>";
		switcher +="</a>";
		switcher +="</div></div>";

		//Adding code to container
		$('div#streamSwitcher').append(switcher);

		setTimeout(function(){$('div#switcher').slideUp(500);}, 7000);

		//Mouse-Listeners
		$('div#streamSwitcher').mouseover(function(){
			 $('div#switcher').slideDown(500);
		});

		$('div#streamSwitcher').mouseleave(function(){
			 $('div#switcher').slideUp(500);
		});

		$('a.streamHQ').click(function(){
	       try{
	    	   if(streamNameNew == "hr-fernsehen"){
		     	 var obj = {file: 'hr-fernsehen-2', provider: 'rtmp', title: 'Livestream (Hohe Qualität)', author: 'hr-fernsehen'};
		      }
		      else{
		      	var obj = {file: 'hr-event-2', provider: 'rtmp', title: 'Eventstream (Hohe Qualität)', author: 'hr-fernsehen'};
		      }
	          $('#'+flashPlayerId)[0].sendEvent('LOAD',obj);
	          $('div#StreamHQ').css('display','none');
	          $('div#StreamLQ').css('display','block');
		  }
		  catch(e){/*Script Abbruch wird unterdrueckt*/};
	      return false;
		 });

	    $('a.streamLQ').click(function(){
		   try{
			  if(streamNameNew == "hr-fernsehen"){
			  	var obj = {file: 'hr-fernsehen-1', provider: 'rtmp', title: 'Livestream (Standard-Qualität)', author: 'hr-fernsehen'};
			  }
			  else{
			  	var obj = {file: 'hr-event-1', provider: 'rtmp', title: 'Eventstream (Hohe Qualität)', author: 'hr-fernsehen'};
			  }
		      $('#'+flashPlayerId)[0].sendEvent('LOAD',obj);
		      $('div#StreamLQ').css('display','none');
		      $('div#StreamHQ').css('display','block');
		  }
		  catch(e){/*Script Abbruch wird unterdrueckt*/};
		  return false;
		});
}


