// Copyright (c) Aykut Sensoy
// Contributors:
//  http://www.farhorizons.de/umrechner.html
 
// converts bitrate Values

  
function FokusSetzen()
{
document.Umrechner.posMByte.focus();
}
 
function Rechnen() {
var i, pos;
for (i = 0; i <= 3; i++) {
if(document.Umrechner.elements[i].value != "") {
pos = i;
}
}
if(pos == 3) {
if(eingabe_test("poskBit"))	{
 kByte = document.Umrechner.poskBit.value / 8;
 MBit = document.Umrechner.poskBit.value / 1024;
 MByte = (document.Umrechner.poskBit.value / 8) / 1024;
 document.Umrechner.poskByte.value = kByte;
 document.Umrechner.posMBit.value = MBit;
 document.Umrechner.posMByte.value = MByte;
}
}
else if(pos == 2) {
if(eingabe_test("poskByte")) {
 kBit = document.Umrechner.poskByte.value * 8;
 MBit = (document.Umrechner.poskByte.value * 8) / 1024;
 MByte = document.Umrechner.poskByte.value / 1024;
 document.Umrechner.poskBit.value = kBit;
 document.Umrechner.posMBit.value = MBit;
 document.Umrechner.posMByte.value = MByte;
}
}
else if(pos == 1) {
if(eingabe_test("posMBit")) {
 kBit = document.Umrechner.posMBit.value * 1024;
 kByte = (document.Umrechner.posMBit.value * 1024) / 8;
 MByte = document.Umrechner.posMBit.value / 8;
 document.Umrechner.poskBit.value = kBit;
 document.Umrechner.poskByte.value = kByte;
 document.Umrechner.posMByte.value = MByte;
}
}
else if(pos == 0) {
if(eingabe_test("posMByte")) {
 kBit = document.Umrechner.posMByte.value * 8 * 1024;
 kByte = document.Umrechner.posMByte.value * 1024;
 MBit = document.Umrechner.posMByte.value * 8;
 document.Umrechner.poskBit.value = kBit;
 document.Umrechner.poskByte.value = kByte;
 document.Umrechner.posMBit.value = MBit;
}
}
}
 
function FormularCheck()
{
if(document.Umrechner.poskBit.value == "" && document.Umrechner.poskByte.value == "" && document.Umrechner.posMBit.value == "" && document.Umrechner.posMByte.value == "")
{
alert("Bitte einen Wert eingeben !");
FokusSetzen();
}
}
 
function eingabe_test(name) {
document.Umrechner.elements[name].value = document.Umrechner.elements[name].value.replace(/,/, ".");
if(isNaN(document.Umrechner.elements[name].value)) {
alert(document.Umrechner.elements[name].value + " ist keine Zahl !");
document.Umrechner.elements[name].value = "";
return false;
}
return true;
}
 
function alle_loeschen(nummer) {
var i;
for (i = 0; i <= 3; i++) {
if(i != nummer) {
document.Umrechner.elements[i].value = "";
}
}
}

//Funktionen fuer die Frame-Berechnung

 
 
//Die nachstehende Funktion ist fÃ¼r die Eingabe der Zahlen mit der Maus da. Zudem Ã¼berprÃ¼ft sie, ob die Eingabe nicht lÃ¤nger als 11 Zeichen groÃŸ ist.
//Die "lÃ¶sch" Funktion stehen deshalb vor der hauptfunktion, damit sie auch dann benutzt werden kÃ¶nnen, wenn die Eingabe genau 11 Zeichen hat. 
//Damit dann auch nach dem lÃ¶schen die Eingabe mÃ¶glich ist, wird die LÃ¤nge neu berechnet!
 
 
function Eingabe(f){
 
	laenge = document.formular.eingabe.value.length;
 
	if ( f == 12){
		document.formular.eingabe.value = "";
	} 
	if ( f == 13){
		document.formular.eingabe.value = document.formular.eingabe.value.substring(0, laenge-1);
	}  
	
	laenge = document.formular.eingabe.value.length;
 
	if (laenge < 11){
		if ( f < 10){
			document.formular.eingabe.value = document.formular.eingabe.value + f + "";
		}
		if ( f == 11){
			document.formular.eingabe.value = document.formular.eingabe.value +":";
		}
	}else{
		alert("Your digits are more than 11!");
	}
}
 
 
//In dieser Funktion wird die Eingabe so weit wie mÃ¶glich geprÃ¼ft und notfalls abgebrochen! ansonsten wird die gewÃ¤hlte berechnung aufgerufen!
 
 
function Vorlauf(g){
 
//1.Schritt: Definition der benÃ¶tigten Variablen
	
	fps = document.formular.fps.options[document.formular.fps.selectedIndex].value;
	calc= document.formular.eingabe.value;
	calc= document.formular.eingabe.value;
	laenge= calc.length;
	variable = "";
	ergebnis = "";
	maximaleframes = "";
	abbruch = 0;
	aufhoeren = 0;
	
//Schritt 2: der eingegebene string wrid Ã¼berprÃ¼ft 
	
	for (var i = 0; i < laenge; i = i + 1){
		zeichen = calc.charAt(i);
		if ((zeichen >= 0 ) || (zeichen == ":")){
			if (zeichen >= 0){
				variable = variable + zeichen +"";
			}
		}else{
			abbruch = 1;
			break;
		}
	}
	calc = variable;
	laenge= calc.length;
	
//Schritt 3: der string wird in die richtigen sekmente geteilt
 
	while (laenge < 8){
		calc = "0" + calc;
		laenge ++;
	}
	
	fram1= calc.substring(laenge-2,laenge);
	sek1= calc.substring(laenge-4, laenge-2);
	min1=calc.substring(laenge-6,laenge-4);
	stu1=calc.substring(laenge-8,laenge-6);
	
//Schritt 4: die maximale anzahl der frames wird fÃ¼r die abbruchbedingung definiert!
 
	if (fps == 23.98) maximaleframes= 2071525;					
	if (fps == 24) maximaleframes= 2073599;
	if (fps == 25) maximaleframes= 2159999;
	if (fps == 29.97) maximaleframes= 2589407;					
	if (fps == 30) maximaleframes= 2591999;
	if (fps == 50) maximaleframes= 4319999;
	if (fps == 60) maximaleframes= 5183999;
	
//Schritt 5: hauptteil: abbruchbedingungen werden definiert und wenn nÃ¶tig wird schon jetzt abgebrochen, ansonsten die gewÃ¤hlte rechnung aufgerufen!
 
	if ((calc < 1) || (fps == 0) || (abbruch == 1)){
		if (fps == 0) aufhoeren = 1;
		if ((calc < 1) || (abbruch == 1)) aufhoeren = 2;
		switch(aufhoeren) {
			case 1:
 				alert("Please choose the Frames/s!");
				break;
 			case 2:
 				alert("Please check your Source!");
 				break;
 			default:
 				alert("Do you really know, what you are doing");
 				break;
 		}
	}else{
		if (g==2){
			if (calc > maximaleframes){
				if (calc > maximaleframes) alert("Your Source is too large!");
			}else{
				FrameToTime(calc);
			}
		}
		if (g==1){
			if ((fram1 > (Math.ceil(fps-1))) || (sek1 > 59) || (min1 > 59) || (stu1 > 23) || (laenge > 8)){
				if (fram1 > (fps-1)) aufhoeren = 1;
				if (sek1 > 59) aufhoeren = 2;
				if (min1 > 59) aufhoeren = 3;
				if (stu1 > 23) aufhoeren = 4;
				if (laenge > 8) aufhoeren = 5;
				switch(aufhoeren) {
					case 1:
 						alert("Please check your Source! The frames are more then the frames per seconds.");
						break;
 					case 2:
 						alert("Please check your Source! The seconds are more then 59.");
 						break;
 					case 3:
 						alert("Please check your Source! The minutes are more then 59.");
 						break;
 					case 4:
 						alert("Please check your Source! The hours are more then 23.");
 						break;
 					case 5:
 						alert("Please check your Source! Timecode exist out of 8 numbers!");
 						break;
 					default:
 						alert("Do you really know, what you are doing");
 						break;
				}
 
			}else{
				TimeToFrame(calc);
			}
		}
	}
 
}
 
 
//Berechnung vom timecode auf grundlage der angegebenen frames und fps
 
 
function TimeToFrame(calc){
	fram1= calc.substring(laenge-2,laenge);
	sek1= calc.substring(laenge-4, laenge-2);
	min1=calc.substring(laenge-6,laenge-4);
	stu1=calc.substring(laenge-8,laenge-6);
	
	document.formular.eingabe.value = stu1 + ":" + min1 + ":" + sek1 + ":" + fram1 + "";
	
	if ((fps == 23.98) || (fps == 29.97)){
		fps = Math.ceil(fps);
		fram1= 1*fram1														//wird mit 1 multipliziert, da ansonsten fram1 als string angesehen wird
		sek1= fps*sek1;
		min1=60*fps*min1;
		stu1=3600*fps*stu1;	
		ergebnis= fram1 + sek1 + min1 + stu1;
		abfall = ergebnis/1000;
		if ((Math.ceil(abfall) - Math.floor(abfall)) == 0){
			abfall  = Math.floor(abfall) - 1 - Math.floor((ergebnis/1000000)/2);	
		}else{
			abfall = Math.floor(abfall) - Math.floor(ergebnis/1000000);
		}
		ergebnis= ergebnis	 - abfall;
	}else{
		fram1= 1*fram1														//wird mit 1 multipliziert, da ansonsten fram1 als string angesehen wird
		sek1= fps*sek1;
		min1=60*fps*min1;
		stu1=3600*fps*stu1;
		ergebnis= fram1 + sek1 + min1 + stu1;
	}
	
	document.formular.ergebnis.value = ergebnis;
}
 
 
//Berechnung von den frames auf grundlage des angegebenen timecodes und der fps
 
 
function FrameToTime(calc){
	
	document.formular.eingabe.value = variable;									// soll nur die eingabe vom User berichtigen. 
	
	if ((fps == 23.98) || (fps == 29.97)){
		abfall = Math.floor(calc / 1000);
		calc = 1*calc + abfall;													//wird mit 1 multipliziert, da ansonsten fram1 als string angesehen wird
		fps = Math.ceil(fps);		
		fram = calc % fps;	
		if (fram<10) fram = "0" + fram
	
		zwischenergebnis= (calc - fram)/fps;	
 
		sek = zwischenergebnis % 60;
		if (sek < 10) sek = "0" + sek;
		
		zwischenergebnis= (zwischenergebnis-sek) / 60
		
		min = zwischenergebnis % 60;
		if (min < 10) min = "0" + min;
		
		zwischenergebnis= zwischenergebnis - min;
		
		stu =zwischenergebnis / 60;
		if (stu < 10) stu = "0" + stu;
				
	}else{
	
		fram = calc % fps;	
		if (fram<10) fram = "0" + fram
	
		zwischenergebnis= (calc - fram)/fps;	
 
		sek = zwischenergebnis % 60;
		if (sek < 10) sek = "0" + sek;
		
		zwischenergebnis= (zwischenergebnis-sek) / 60
		
		min = zwischenergebnis % 60;
		if (min < 10) min = "0" + min;
		
		zwischenergebnis= zwischenergebnis - min;
		
		stu =zwischenergebnis / 60;
		if (stu < 10) stu = "0" + stu;
	}
		
	ergebnis= stu +":"+ min +":"+ sek +":"+ fram;
	document.formular.ergebnis.value =ergebnis;						// Ausgabe des Ergebnis
}

//Funktionen fuer die Umrechnung ganz unten

function rechne()
	{
	ergebnis = 0;
	format = window.document.formular1.format.options[document.formular1.format.selectedIndex].value;
	xpix = window.document.formular1.xpix.value;
	ypix = window.document.formular1.ypix.value;
	if ((xpix != "") && (ypix != ""))
		format = xpix*ypix;
	bits = window.document.formular1.bits.options[window.document.formular1.bits.selectedIndex].value;
	if (bits == 10)
		bits = 10*32/30
	rgbyuv = window.document.formular1.rgbyuv.options[window.document.formular1.rgbyuv.selectedIndex].value;
	bilder = window.document.formular1.bilder.options[window.document.formular1.bilder.selectedIndex].value;
	framesfree = window.document.formular1.framesfree.value;
	bildart= window.document.formular1.bildart.options[window.document.formular1.bildart.selectedIndex].value;
	speicher= window.document.formular1.speicher.value;
	zeiteinheit=window.document.formular1.zeiteinheit.options[window.document.formular1.zeiteinheit.selectedIndex].value;
	
	if (framesfree != "")
		{
		//window.document.formular1.bilder.value="";
		//window.document.formular1.bildart.value="";
		bilder = framesfree;
		bildart = window.document.formular1.bildart2.value;
		}
	switch(window.document.formular1.rate.options[window.document.formular1.rate.selectedIndex].value)
		{
		case "gb": rate=eval(1/8/1000/1000/1000); break;
		case "gbit": rate=eval(1/1000/1000/1000); break;
		case "mb": rate=eval(1/8/1000/1000); break;
		case "mbit": rate=eval(1/1000/1000); break;
		case "kb": rate=eval(1/8/1000); break;
		case "kbit": rate=eval(1/1000); break;
		case "byte": rate=eval(1/8); break;
		case "bit": rate=1; break;
		}
	ergebnisdata = (Math.round(100*format*bits*rgbyuv*bilder*rate*bildart))/100;
	
	switch(window.document.formular1.gbmb.options[window.document.formular1.gbmb.selectedIndex].value)
		{
		case "gb": rate=eval(1/8/1000/1000/1000); break;
		case "mb": rate=eval(1/8/1000/1000); break;	
		}
	switch(window.document.formular1.zeiteinheit.options[window.document.formular1.zeiteinheit.selectedIndex].value)
		{
		case "std": zeit=eval(1/3600); break;
		case "min": zeit=eval(1/60); break;
		case "sek": zeit=1; break;
		}
	if (zeit==1) //Wenn es sich um Sekunden handelt
		{
		ergebniszeit = Math.round(speicher/(format*bits*rgbyuv*bilder*rate*bildart)*zeit);
		}
	else
		{
		ergebniszeit = (speicher/(format*bits*rgbyuv*bilder*rate*bildart)*zeit);
		}
	ergebnis_sek = (speicher/(format*bits*rgbyuv*bilder*rate*bildart));
	
	if (Math.floor(ergebniszeit) < ergebniszeit)
		{
		minuten=(ergebnis_sek-(Math.floor(ergebnis_sek/60)*60));
		if (zeit==(1/3600))
			{
			min2=(Math.floor((ergebniszeit-Math.floor(ergebniszeit))/zeit/60));
			sekunden=(minuten-(Math.floor(minuten/60)*60));
			ergebniszeit=Math.floor(ergebniszeit) + " : " + Math.round(min2) + " : " + Math.round(sekunden);
			}
		else
			{
			ergebniszeit=Math.floor(ergebniszeit) + " : " + Math.round(minuten);
			}
		}
	window.document.formular1.spieldauer.value = ergebniszeit;
	window.document.formular1.ergebnis.value = ergebnisdata;
	}
 
function vorrang_format()
	{
	window.document.formular1.xpix.value="";
	window.document.formular1.ypix.value="";
	}
	
function vorrang_xy()
	{
	window.document.formular1.format.value="0";
	}
	
function vorrang_bilder()
	{
	window.document.formular1.framesfree.value="";
	window.document.formular1.bildart2.value="0";
	}
	
function vorrang_framesfree()
	{
	window.document.formular1.bilder.value="0";
	window.document.formular1.bildart.value="0";
	}

