/* Browser-Pruefung */
var ua = navigator.userAgent.toLowerCase();

var isMac   = (ua.indexOf('mac')>-1)?1:0;
var isWin   = (ua.indexOf('win')>-1)?1:0;

var isGecko   = (ua.indexOf('gecko')>-1)?1:0;
var isSafari   = (ua.indexOf('safari')>-1)?1:0;

var isOpera = (ua.indexOf('opera')>-1)?1:0;

var isIE    = (ua.indexOf('msie')>-1 && !isOpera)?1:0;

var isIEWin = (isIE && isWin && !isOpera)?1:0;
var isIEMac = (isIE && isMac && !isOpera)?1:0;
var isIEWinCE  = (isIE && ua.indexOf('windows ce')>-1)?1:0;

var isWPrint   = (window.print)?1:0;
 
var isDOM   = (document.getElementById)?1:0;
var isIE4   = (isIE && !isDOM)?1:0;
var isNS4   = (document.layers)?1:0;

/* allg. Variablen */
var a_confirmText = "Hier verlässt du die KI.KA-Internetseiten!\n\nDer KI.KA ist nicht für den Inhalt\nexterner Internetseiten verantwortlich!";
var a_linkAltZusatzText = "Der Link wird in einem neuen Browser-Fenster geöffnet.";  // Suffix fuer title-Attribute fuer externe Links
var a_defaultPopupWidth = 600;  // Standardbreite fuer PopUp-Fenster
var a_defaultPopupHeight = 400;  // Standardhoehe fuer PopUp-Fenster


/* Seite initialisieren */
function Init()  {
  if(isDOM)  {
    setTagAttributes();
	getPrintvalue();
	}
}

/* Auslesen und Auswerten der Variable print - Wird mit dem Laden einer shtml-Datei ausgefuehrt */
function getPrintvalue() {
		if(window.location.search != "") 
			{
				var undef = window.location.search.split("?"); /*Adresse von Variablen trennen*/
				var args = undef[1].split("&"); /*Variablen voneinander Trennen und in Array speichern*/

				for(i = 0; i<=args.length; i++) /*Array an Variablen durch gehen und nach print=true suchen -> wenn gefunden, dann print-Ausgabe*/
				{
					if(args[i] == "print=true") 
					{
						var j = document.getElementsByTagName("link").length;
						for (var i = 0; i < j; i++) 
							{
								if (document.getElementsByTagName("link")[i].rel == "stylesheet")
									{
										document.getElementsByTagName("link")[i].media  = "all";
										save_print_css = document.getElementsByTagName("link")[i].href;
										document.getElementsByTagName("link")[i].href = "global.css";
										document.getElementsByTagName("link")[i].href = save_print_css;
									}
							}
						window.setTimeout('window.print()',1); /*Drucker-Fenster aufrufen*/
					}
				}
			}
}

/* a-Tag-Attribute setzen wg. Linkzielen in neuen Browserfenstern, Popups etc. */
function setTagAttributes()  {
	var aTags = document.getElementsByTagName("a");

	for(i=0; i<aTags.length; i++)  {
		var a = aTags[i];
		var target = null;
		var rel = Trim(a.getAttribute("rel")," ");
		var href = a.getAttribute("href");

		if (href && rel)  {  // nur Links mit rel-Attr. durchlaufen, keine Anker
			if (rel.indexOf("blank")==0)  {
				appendToTitle(a, a_linkAltZusatzText);
				a.setAttribute("target", "_blank");  }
			else if (rel.indexOf("confirm:")==0)  {
				appendToTitle(a, a_linkAltZusatzText);
				a.setAttribute("target", "_blank");
				a.onclick = onClickActionConfirmMsg;  }
			else if (rel.indexOf("confirm")==0)  {
				appendToTitle(a, a_linkAltZusatzText);
				a.setAttribute("target", "_blank");
				a.onclick = onClickActionConfirm;  }
			else if (rel.indexOf("popup:")==0)  {
				appendToTitle(a, a_linkAltZusatzText);
				if (href.charAt(href.length-1)=="#") a.onclick = onClickActionPopupDisable;
				else a.onclick = onClickActionPopup;  }
			else if (rel.indexOf("popup")==0)  {
				appendToTitle(a, a_linkAltZusatzText);
				a.onclick = onClickActionPopupDefault;  }  }  }

	/* target fuer Formulare setzen */
	for(i=0;i<document.forms.length;i++)  {
		for(j=0;j<document.forms[i].elements.length;j++)  {
			if((document.forms[i].elements[j].type == "hidden") && (document.forms[i].elements[j].name == "js_form_target"))  
				document.forms[i].elements[j].form.setAttribute("target", document.forms[i].elements[j].value);  }  }
}

function appendToTitle(n,s)  {
  var t = (isIE)?"\n":" - ";
  if (n.getAttribute("title"))
    n.setAttribute("title", n.getAttribute("title") + t + s);
  else
    n.setAttribute("title", s);  }

function onClickActionConfirm()  {
  return confirm(a_confirmText);  }

function onClickActionConfirmMsg()  {
  return confirm(getAttrValue("msg",this.rel));  }

function onClickActionPopupDefault()  {
	var popUpName = 'popUpWin_'+Math.round(Math.random()*100000);
  popUpWin = open(this.href,popUpName,'location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no,width='+a_defaultPopupWidth+',height='+a_defaultPopupHeight);
  popUpWin.focus();
  return false;  }

function onClickActionPopup()  {
	var popUpName = 'popUpWin_'+Math.round(Math.random()*100000);
  popUpWin = open(this.href,popUpName,getAttrValue("popupattr",this.rel));
  popUpWin.focus();
  return false;  }

function onClickActionPopupDisable()  {
	var popUpName = 'popUpWin_'+Math.round(Math.random()*100000);
  popUpWin = open(getAttrValue("href",this.rel),popUpName,getAttrValue("popupattr",this.rel));
  popUpWin.focus();
  return false;  }

function getAttrValue(iAttr,iStr)  {
  var rStr = "";
  var trenner = ",";
  var popAttr = ",width,height,left,top,location,menubar,resizable,scrollbars,status,toolbar,";
  var i, j, x, y, l, AttrArr, ValArr;
  
  if (!iAttr || !iStr) return rStr;
  if ((typeof(iAttr)=="undefined") || (typeof(iStr)=="undefined")) return rStr;
  if (!iAttr.length || !iStr.length) return rStr;
  iStr = Trim(""+iStr," ");
  iAttr = iAttr.toLowerCase();
  i = iStr.indexOf(":");
  if (i>-1) iStr = Trim(""+iStr.substring(i+1,iStr.length)," ");  // Text bis einschlie�lich erstem Doppelpunkt l�schen
  if (!iStr.length) return rStr;
  ValArr = iStr.split(trenner);
  l = ValArr.length;
  for (i=0; i<l; i++)  {  // Fehler bei "href=index.cfm?id=25,6&kd=18" beheben --> splitting beim Komma
    j = ValArr[i]; x = j.indexOf("="); y = j.indexOf("&");
	if (((x<1) || ((y<x) && (y!=-1))) && (i>0))  {
      ValArr[i] = ValArr[i-1] + trenner + j;
	  ValArr[i-1] = "";  }  }
  AttrArr = new Array(l);
  for (i=0; i<l; i++)  {  // Array aufteilen in zwei Arrays --> Attribute und Werte
    j = ValArr[i]; x = j.indexOf("=");
	if (x>0)  {
	  AttrArr[i] = Trim(j.substring(0,x).toLowerCase()," ");
	  ValArr[i] = Trim(j.substring(x+1,j.length)," ");  }
	else AttrArr[i] = "";  }
  if (iAttr == "popupattr")  {  // Attribut-String f�r ein Popup-Fenster zur�ckgeben
    x=0; y=0;
	for (i=0; i<l; i++)  {
	  if (AttrArr[i].length && ValArr[i].length)  {
	    j = AttrArr[i];
		if (popAttr.indexOf(","+j+",")>-1) rStr += j + "=" + ValArr[i] + ",";
		if (j=="width") x=1;
		if (j=="height") y=1;  }  }
	if ((x+y)==0) rStr += "width=" + a_defaultPopupWidth + ",height=" + a_defaultPopupHeight + ",";
	rStr = Trim(rStr.substring(0,rStr.length-1),",");
	return rStr;  }
  else  { // Wert des �bergebenen Attributs zur�ckgeben
	for (i=0; i<l; i++)  {
	  if (AttrArr[i]==iAttr)  {
	    rStr = Trim(ValArr[i],",");
		rStr = rStr.replace(/\\n/g,"\n");
		return rStr;  }  }  }
  return rStr;  }

/* Pixel-Funktion fuer allgemeine F- und JS-Applikationen */
/* 1. Parameter = Aktion --> Pflichtparameter --> wird umgewandelt zu virt. Verz. und Dateiname */
/* 2. Parameter = virtuelles Verzeichnis --> optionaler Parameter; ersetzt das virt. Standard-Verz. _swf */
/* 3. Parameter = optionaler Verz.name, der aus der Pfadangabe gelöscht werden soll - z.B. scripts oder scripts4 */
function fIVW(ai) {
	var f1 = "http://kika.ivwbox.de/cgi-bin/ivw/CP/kikaninchen";		// 1. fixer Teil des Pixels
	var f2 = ";k=61&i=kikaninchen";																// 2. fixer Teil des Pixels
	var f3 = "&p=www.kikaninchen.de";														// 3. fixer Teil des Pixels
	var a = "index";																				// Standardwert für die F-Aktion, die in die URI eingefügt wird
	var v = "_swf";																					// Standardwert des virt. Verz. mit vorangestelltem Slash
	var s = ".shtml";																				// Endung der virt. Datei

	// Aktion prüfen
	if (ai) {
		if (ai.length) {
			a = ai.replace(/\W+/g,"_");
			a = a.replace(/_+/g,"_");  } }
	a = "/" + a;
	var auri = encodeURIComponent(a).replace(/_/g, "%5F");

	// falls 2. Parameter an die Funktion übergeben wurde, dann diesen als virt. Verz. verwenden
	if (fIVW.arguments[1]) {
		if (fIVW.arguments[1].length) {
			v = fIVW.arguments[1].replace(/\W+/g,"_");
			v = v.replace(/_+/g,"_");  } }
	v = "/" + v;
	var vuri = encodeURIComponent(v).replace(/_/g, "%5F");

	// Dateipfad ermitteln
	var p = document.location.pathname;
	p = p.replace(/[^\/]*\.[^\.]*$/,"");											// Dateinamen entfernen
	p = p.replace(/\/fernsehen\/a_z\/[^\/]*\//gi,"/fernsehen/");	// p/i-Parameter vereinfachen: /fernsehen/a_z/x/ wird zu /fernsehen/

	// falls 3. Parameter an die Funktion übergeben wurde, dann diesen Verzeichnisteil aus der Pfadangabe entfernen
	if (fIVW.arguments[2]) {
		if (fIVW.arguments[2].length) {
			var l = Trim(fIVW.arguments[2],' ');
			if (l.charAt(0)=='/') l = l.substr(1);	// Slashes vorn und hinten entfernen
			if (l.charAt(l.length-1)=='/') l = l.substr(0,l.length-1);
			if (l.length) {
				l = l.replace(/\s+/g,"_");
				l = '/' + l.replace(/_+/g,"_") + '/';	// Slashes vorn und hinten anfügen
				var pos = p.indexOf(l);
				while (pos >= 0) {	// Pfadangabe herauslöschen
						p = p.substring(0,pos) + '/' + p.substring(pos+l.length);
						pos = p.indexOf(l,pos+1);  } } } }

	p = p.replace(/\/$/,"");	// letzten Slash entfernen
	var puri = encodeURIComponent(p).replace(/_/g, "%5F");

	// Variablen vorab zusammenführen
	p = p + v + a;
	puri = puri + vuri + auri + auri + s;

	// Referer und Zufallsparameter erstellen
	var r = "?r=" + escape(document.location.href);
	var d = "&d=" + (Math.random()*100000);

	// IVW-Pixel zusammensetzen und aufrufen
	var ivw = f1 + p + f2 + p + "/" + f3 + puri + r + d;
	document.images[document.images.length-1].src = ivw; 
	//alert (ivw);
	}



/* allg. Hilfsfunktionen */

/* Focus in ein Eingabefeld eines Formulars setzen - Uebergabe: ID bzw. Name des Formulars und des Eingabefeldes */
function formularfocus(formChr,objChr)  {
	for(i=0;i<document.forms.length;i++)
		if((document.forms[i].name == formChr) || (document.forms[i].id == formChr))
			for(j=0;j<document.forms[i].elements.length;j++)
				if((document.forms[i].elements[j].name == objChr) || (document.forms[i].elements[j].id == objChr))
					document.forms[i].elements[j].focus();  }

/* Leerzeichen am Anfang und Ende von Strings loeschen */
function Trim(iStr, rChr)  {
  var rStr = iStr;
  if (iStr && rChr)  {
    if (iStr.length && rChr.length)  {
      while ('' + rStr.charAt(0) == rChr)
        rStr = rStr.substring(1,rStr.length);
      while('' + rStr.charAt(rStr.length-1) == rChr)
        rStr=rStr.substring(0,rStr.length-1);  }  }
  return rStr;  }

/* doppelte Zeichen innerhalb von Strings loeschen */
function removeExtraSpaces(string, delimiter)  {
	var returnString = "";
	splitstring = string.split(delimiter);
		for(i = 0; i < splitstring.length; i++)
			{if (splitstring[i]!="") returnString += splitstring[i] + delimiter;}
	return returnString;  }
	
/*Funktion zum Aufruf der Druckansicht*/
function drucken() {
	if (window.location.href != "")
		{
			var url = window.location.href;
			/*Falls die URL einen Anker enth�lt wird dieser gel�scht*/
			var url_split = url.split("#");
			/*Variable Print in URL auf TRUE setzen, damit die Drucken css-Datei am Bildschirm ausgegeben wird*/
			/*Pr�fen ob schon Variablen an der URL angeh�ngt sind, um das richtige Trennzeichen zu w�hlen*/
			if (window.location.search != "") {print_url = url_split[0] + '&print=true'} else {print_url = url_split[0] + '?print=true'}
			
			/*generierte URL aufrufen*/
			window.open(print_url);
		}
}

function resetformulars()  {
	for(i = 0; i < document.forms.length; i++)
	document.forms[i].reset();  }
	
// Neues Fenster für Player

function EigenesFenster(zeit,xmldatei,modus) { 
	var fensterbreite, fensterhoehe, bildschirmbreite, bildschirmhoehe, fenstereigenschaft;
	bildschirmbreite=screen.width;
	bildschirmhoehe=screen.height;
	fensterbreite=800;
	fensterhoehe=523;
	fenstereigenschaft="left=" +(bildschirmbreite-fensterbreite)/2+ ", top=5, resizable=yes, menubar=no, location=no, status=no, toolbar=no, height="+fensterhoehe + ", width="+fensterbreite;
	var dasfenster ="/mdr-kikani-static/html/fenster.html?startzeit="+zeit+"&xmlfile="+xmldatei+"&modus="+modus;
	fenster=window.open(dasfenster,"Zweitfenster",fenstereigenschaft);
	fenster.focus();
	if (fenster ) {
		return true;
	} else {
		return false;
    }
}

/**
 * Voting stuff
 */
var addFormValidation = function (element) {
    new Form.Validator(element, { evaluateFieldsOnChange: false, evaluateFieldsOnBlur: false, 
      onElementFail: function (el, failedValidators) {
        var globalErrorList = el.getParent('.validateFormPoll').getElement('div.globalErrorList');
        if ($defined(globalErrorList)) {
          globalErrorList.set('html', Form.Validator.getValidator(failedValidators[0]).getError(el));
          if (globalErrorList.hasClass('invisible')) { globalErrorList.removeClass('invisible').get('reveal').reveal(); } /* reveal only when not shown already */
        }
      }, 
      onFormValidate: function (passed, form, event) {
        if (passed) { event.preventDefault(); loadPoll(form, 'post'); }
      }
    });
  };
  var loadPoll = function (element, method) {
    var request = new Request({ url: (new InputValidator('dont-validate', {})).getProps(element).ajaxUrl, method: method, onSuccess: displayPoll.bind(element) });
    (method == 'post') ? request.post(element) : request.send();
  };
  var displayPoll = function (response) {
	$$('.votingContainer').each(function(votingContainer){votingContainer.set('html',response);});
	$$('.validateFormPoll').each(addFormValidation);
//    $each(response.getElements('.validateFormPoll'), addFormValidation);
  };
  
  var addLinkHandler = function (element) {
	  element.addEvent('click:relay(a.interimResult, a.votingLink)', function (e) { e.preventDefault(); loadPoll(e.target, 'get');});
  };
  
  
function initValidation()
{
	MooTools.lang.set('en-US', 'Form.Validator', {
	  	reqChkByParent: 'No items are selected.',
	  	maxChk: 'You checked {0} answers, where only {1} were allowed.',
	  	reqChkByCookieValue: 'You need to choose some shows first!',
	  	reqChk: 'You have to accept this field!'
	  });

	  // MooTools Language class for German 
	  MooTools.lang.set('de-DE', 'Form.Validator', {
	    required:'Dieses Feld muss ausgefüllt werden.', 
	    email:'Bitte geben Sie eine gültige E-Mail-Adresse ein.',
	    reqChkByParent: 'Bitte treffen Sie eine Auswahl!',
	    reqChk: 'Sie müssen dieses Feld akzeptieren!',
	  	maxChk: 'Sie haben {0} Anworten ausgewählt. Es sind aber nur {1} Antworten möglich.',
	  	reqChkByCookieValue: 'Sie müssen vorher einige Sendungen auswählen!'
	  });
	  
	  Form.Validator.addAllThese([
	    ['validate-reqchk-byparent', {
	      errorMsg: function (element, props) {
	  			return unescape((props['reqChkByParent-error'] || Form.Validator.getMsg('reqChkByParent')));
	  		},
	  		test: function (element, props) {
	  			return (element.getParent(props.parentSelector).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function (item) { return item.get('checked'); });
	  		}
	  	}],
	  	['validate-maxChk', {
	  		errorMsg: function (element, props) {
	  		  var countChecked = (element.getParent(props.parentSelector).getElements('input[type=checkbox]')).map(function (item) {
	  				return (item.get('checked')) ? true : null;
	  			}).clean();
	  			return unescape((props['maxChk-error'] || Form.Validator.getMsg('maxChk'))).substitute({ 0: countChecked.length, 1: props['validate-maxChk'] });
	  		},
	  		test: function (element, props) {
	  		  var countChecked = (element.getParent(props.parentSelector).getElements('input[type=checkbox]')).map(function (item) {
	  				return (item.get('checked')) ? true : null;
	  			}).clean();
	  			return (countChecked.length <= props['validate-maxChk']);
	  		}
	  	}],
	  	['validate-reqchk-bycookievalue', {
	  		errorMsg: function (element, props) {
	  			return unescape((props['reqChkByCookieValue-error'] || Form.Validator.getMsg('reqChkByCookieValue')));
	  		},
	  		test: function (element, props) {
	  		  var cookie = new Hash.Cookie(props.cookieName, { duration: 30, autoSave: false });
	  		  if (cookie.has(props.cookieValue) && (cookieValues = cookie.get(props.cookieValue)).length > 0) {
	  		    ($('form_my_shows') || (new Element('input', { 'type': 'hidden', 'id': 'form_my_shows', 'name': 'form_my_shows' })).inject(element, 'after'))
	  		      .setProperty('value', cookieValues.join(','));
	  		    return true;
	  		  }
	  		  return false;
	  		}
	  	}],
	  	['validate-required-check', {
	  		errorMsg: function(element, props) {
	  		  return unescape((props['reqChk-error'] || Form.Validator.getMsg('reqChk')));
	  		},
	  		test: function(element, props){
	  			return !!element.checked;
	  		}
	  	}]
	  ]);
	  
	  MooTools.lang.setLanguage('de-DE');
	
}


document.addEvent('domready', function () {
	// init validation (for voting)
	initValidation();

	// Add events for interim result and backLink
	$$('div.votingContainer').each(addLinkHandler);
	
	// voting ajax (validation and post)
	$$('.validateFormPoll').each(addFormValidation);
});
// ]]>







