﻿var kurs;                        // der aktuelle Kurs (kann sich beim Berechnen ändern)
var gegenkurs;                   // der aktuelle Gegenkurs (z.B. beim Kauf: Gegenkurs = Ankaufskurs)
var eingabe;                     // die eingegebene Losemenge
var betrag = 0;                  // der aktuelle Betrag (kann sich beim Berechnen ändern)
var kursFaktor;                  // der Faktor, mit dem der Kurs geändert wird
var isVerkauf;                   // gibt an, ob es sich um einen Kauf oder einen Verkauf handelt
var reservations = new Array();  // beinhaltet die aktuellen möglichen Reservierungen

// id.value = eingegebene Losemenge
function CheckInput(id)
{  
  // Automatische Aktualisierung
  InitializeTimer(60);
   
  // Setzen der Lose-Menge
  eingabe = id.value;    
   
  if(isVerkauf)
  {
    // Setzt den Kurs und den Kursfaktor wenn es sich um einen Lose-Verkauf handelt
    var tmp = document.getElementById('ctl00_lbAnkaufKurs').innerHTML;
    kurs = tmp.substring(0, tmp.indexOf("<") - 1);
    tmp = document.getElementById('ctl00_lbVerkaufKurs').innerHTML;
    gegenkurs = tmp.substring(0, tmp.indexOf("<") - 1);
    kursFaktor = -0.1;
  }
  else
  {
    // Setzt den Kurs und den Kursfaktor wenn es sich um einen Lose-Ankauf handelt
    var tmp = document.getElementById('ctl00_lbVerkaufKurs').innerHTML;
    kurs = tmp.substring(0, tmp.indexOf("<") - 1);
    tmp = document.getElementById('ctl00_lbAnkaufKurs').innerHTML;
    gegenkurs = tmp.substring(0, tmp.indexOf("<") - 1);    
    kursFaktor = 0.1;
  }  

  // Mit der Berechnung des Gesamtbetrages starten...
  Berechnung();
}

function Berechnung()
{
  // Alle möglichen Reservierungen holen und sobald fertig, in AfterReservations springen
  new Ajax.Request('ajaxClient.aspx',
  {
    method: 'post',
    parameters: {action: 'GetReservations', type: isVerkauf.toString()},
    onSuccess: AfterReservation
  });
}

function AfterReservation(value)
{
  var hasReservation = false;
  var rsv_ID, rsv_UserID, rsv_Restbetrag, rsv_Betrag, rsv_Kurs, rsv_Lose, rsv_Kurswechsel;
  var rsvString = value.responseText;  
  
  if(rsvString != "")
  {
    // Falls eine Reservierung durchgearbeitet werden muss...
    
    var rsvArray = rsvString.split("\r\n");
    for(i = 0; i < rsvArray.length; i++)
    {
      reservations.push(rsvArray[i]);
    }
    
    // Reservierungsvariablen holen
    rsv_ID = reservations[0].split("|")[0];
    rsv_UserID = reservations[0].split("|")[1];
    rsv_Restbetrag = parseFloat(reservations[0].split("|")[2]);
    rsv_Betrag = 0;      // Der zu zahlende/zu empfangene Betrag für die Reservierung
    rsv_Kurs = parseFloat(reservations[0].split("|")[3]);
    rsv_Lose = 0;        // Die Anzahl der Lose die der Reservierer kauft bzw. verkaufen will
    rsv_Kurswechsel = 0; // Die Anzahl der Kurswechsel die durch die Reservierung ausgelöst wurden
    
    hasReservation = true;
  }
  
    

  var lose_gesamt = 0;        // die aktuelle Gesamtmenge der Lose
  var wechselLose = 0;        // die aktuelle Menge der Lose bei einem Kurswechsel
  var restBetrag = 0;         // der Restbetrag nach dem letzten Kurswechsel
  var wechselBetrag = 0;      // der aktuelle Betrag bei einem Kurswechsel
  var kursWechselBetrag;      // gibt an, nach wieviel Euro der Kurs gewechselt wird
  var nochWertBisKursWechsel; // gibt an, nach wieviel Euro das erste Mal der Kurs gewechselt wird
  
  kursWechselBetrag = parseFloat(document.getElementById('ctl00_ContentPlaceHolder1_hdKursWechselBetrag').value);
  nochWertBisKursWechsel = parseFloat(document.getElementById('ctl00_ContentPlaceHolder1_hdNochWertBisWechsel').value);   

  if(hasReservation)
    document.getElementById('ctl00_ContentPlaceHolder1_lbNochLoseBisWechsel').innerHTML = nochWertBisKursWechsel + rsv_Restbetrag;
      
  // Anzahl der Kurswechsel berechnen (etwas ungenau, da die Kursänderungen nicht berücksichtigt werden)
  var anzahlKursWechsel;
  var preisProLos = parseFloat(kurs / 100 / 1000000);
  var preisFuerEingabe = preisProLos * eingabe;
  
  if(nochWertBisKursWechsel > preisFuerEingabe)
    anzahlKursWechsel = 0;
  else if(nochWertBisKursWechsel == preisFuerEingabe)
    anzahlKursWechsel = 1;
  else if(nochWertBisKursWechsel < preisFuerEingabe)
  {
    anzahlKursWechsel = 1;
        
    var a = preisFuerEingabe - nochWertBisKursWechsel;    // 74.4 € - 14.4047 €    
    var b = parseInt(a / kursWechselBetrag);              // 59,995.. € / 10 €    
    var c = a - (b * kursWechselBetrag);                  // 5 € * 10 €

    anzahlKursWechsel += b;
    restBetrag = c;
  }  

   
  if(anzahlKursWechsel > 0)
  {   
    // Bis zum ersten Kurswechsel:  z.B.  5.249.290 Lose zum Preis von 2.1953 Euro

    betrag = parseFloat(betrag);
    var wechselLose = parseInt(nochWertBisKursWechsel / preisProLos);
    betrag += nochWertBisKursWechsel;
    betrag = runde(betrag, 4);
    
    lose_gesamt = parseInt(nochWertBisKursWechsel / preisProLos);

          
        
    // Alle Kurswechsel bis zum letzten Kurswechsel durchlaufen    
    for(i = 0; i < anzahlKursWechsel - 1; i++)
    {        
      ChangeKurs(false);

      if(hasReservation)
      {  
        if(rsv_Restbetrag > 0)
        {
          if(gegenkurs == rsv_Kurs)
          {
            // Unterbrechung durch eine Reservierung
            if(kursWechselBetrag > rsv_Restbetrag)
            {
              // User hat für 5 Euro reserviert, KursWechselBetrag ist 10 Euro
              // User bekommt die Lose, kein Kurswechsel wird durchgeführt
            
              preisProLos = parseFloat(rsv_Kurs / 100 / 1000000);     
              rsv_Lose += parseInt(rsv_Restbetrag / preisProLos);
              rsv_Betrag += rsv_Restbetrag;
              rsv_Restbetrag = 0;                            
            }
            else if(kursWechselBetrag <= rsv_Restbetrag)
            {
              // User hat für 20 Euro reserviert, KursWechselBetrag ist 10 Euro
              // User bekommt die Lose, Kurswechsel wird durchgeführt
            
              preisProLos = parseFloat(rsv_Kurs / 100 / 1000000);
              rsv_Lose += parseInt(kursWechselBetrag / preisProLos);
              rsv_Betrag += kursWechselBetrag;
              rsv_Restbetrag -= kursWechselBetrag;
              rsv_Kurswechsel++;
              ChangeKurs(true);            
            }
          }
        }
      }
      
      
      betrag = parseFloat(betrag);
      preisProLos = parseFloat(kurs / 100 / 1000000);     
      wechselLose = parseInt(kursWechselBetrag / preisProLos);
      betrag += kursWechselBetrag;
      betrag = runde(betrag, 4);
      
      lose_gesamt += wechselLose;      
    }
          
          
    // Letzter Kurswechsel
    ChangeKurs(false);
    if(hasReservation)
    {  
      if(rsv_Restbetrag > 0)
      {
        if(gegenkurs == rsv_Kurs)
        {
          // Unterbrechung durch eine Reservierung
          if(kursWechselBetrag > rsv_Restbetrag)
          {
            // User hat für 5 Euro reserviert, KursWechselBetrag ist 10 Euro
            // User bekommt die Lose, kein Kurswechsel wird durchgeführt
          
            preisProLos = parseFloat(rsv_Kurs / 100 / 1000000);     
            rsv_Lose += parseInt(rsv_Restbetrag / preisProLos);
            rsv_Betrag += rsv_Restbetrag;
            rsv_Restbetrag = 0;                            
          }
          else if(kursWechselBetrag <= rsv_Restbetrag)
          {
            // User hat für 20 Euro reserviert, KursWechselBetrag ist 10 Euro
            // User bekommt die Lose, Kurswechsel wird durchgeführt
          
            preisProLos = parseFloat(rsv_Kurs / 100 / 1000000);
            rsv_Lose += parseInt(kursWechselBetrag / preisProLos);
            rsv_Betrag += kursWechselBetrag;
            rsv_Restbetrag -= kursWechselBetrag;
            rsv_Kurswechsel++;
            ChangeKurs(true);            
          }
        }
      }
    }
    betrag = parseFloat(betrag);
    wechselBetrag = kurs / 100 / 1000000 * (kursWechselBetrag + restBetrag - nochWertBisKursWechsel);            
    betrag += wechselBetrag;
    betrag = runde(betrag, 4);

    // Restbetrag berechnen
    var rest = kursWechselBetrag + restBetrag - nochWertBisKursWechsel;
    rest = runde(rest, 4);
    if(rest != 0)
    {
      wechselLose = eingabe - lose_gesamt;      
      var tmp = kurs / 100 / 1000000 * wechselLose;
      betrag = parseFloat(betrag) + parseFloat(tmp);
      betrag = runde(betrag, 4);
    }
    
    if(hasReservation)
    {    
      // Reservierungswerte übergeben
      document.getElementById('ctl00_ContentPlaceHolder1_hdRsvString').value = rsv_ID + "|" + rsv_UserID + "|" + rsv_Betrag + "|" + rsv_Lose;
      document.getElementById('ctl00_ContentPlaceHolder1_hdRsvKurswechsel').value = rsv_Kurswechsel;
    }
    else
    {
      document.getElementById('ctl00_ContentPlaceHolder1_hdRsvString').value = "";
      document.getElementById('ctl00_ContentPlaceHolder1_hdRsvKurswechsel').value = "0";
    }
  }
  else
  {
    // Kein Kurswechsel:  z.B.  1.000.000 Lose zum Preis von 0.3500 Euro
    
    betrag = parseFloat(betrag);
    wechselBetrag = kurs / 100 / 1000000 * eingabe;
    betrag += wechselBetrag;
    betrag = runde(betrag, 4);
  }


  
  
  // Durchschnittskurs berechnen
  if(document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose').value != "0")
  {
    var durchschnittskurs = "0";
    durchschnittskurs = betrag / (document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose').value / "100000000");  
    durchschnittskurs = runde(durchschnittskurs, 4);
    document.getElementById('ctl00_ContentPlaceHolder1_lbAverageValue').innerHTML = durchschnittskurs + " &euro;";    
  }
  document.getElementById('ctl00_ContentPlaceHolder1_lbBetrag').innerHTML = runde(betrag / 10, 4) + " &euro;";
  document.getElementById('ctl00_ContentPlaceHolder1_hdEndBetrag').value = runde(betrag / 10, 4);
  betrag = 0;
  
  document.getElementById('ctl00_ContentPlaceHolder1_btnOk').disabled = false;
}




function ChangeKurs(isReservation)
{
  if(isReservation)
    kursFaktor = isVerkauf ? 0.1 : -0.1;
  else
    kursFaktor = isVerkauf ? -0.1 : 0.1;  

  kurs = parseFloat(kurs);
  kurs += kursFaktor;
  kurs = runde(kurs, 2);
  
  gegenkurs = parseFloat(gegenkurs);
  gegenkurs += kursFaktor;
  gegenkurs = runde(gegenkurs, 2);
  
  //alert(isReservation.toString() + " | " + kurs + " | " + gegenkurs);
}

function runde(x, n) 
{
  if (n < 1 || n > 14) return false;
  var e = Math.pow(10, n);
  var k = (Math.round(x * e) / e).toString();
  if (k.indexOf('.') == -1) k += '.';
  k += e.toString().substring(1);
  return k.substring(0, k.indexOf('.') + n+1);
}






function loseInput(value, _isVerkauf)
{
  isVerkauf = _isVerkauf;
  document.getElementById('ctl00_ContentPlaceHolder1_btnOk').disabled = true;

  if (value == "r")
  {          
    document.getElementById('ctl00_ContentPlaceHolder1_hdAnzahlLose').value = "0";
    document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose').value = "0";
    document.getElementById('ctl00_ContentPlaceHolder1_lbAverageValue').innerHTML = "0" + " &euro;"; 
  }
//  else if (value == "a")
//  {
//    // Verfügbares Geld / Lose holen
//    new Ajax.Request('ajaxClient.aspx',
//    {
//      method: 'post',
//      parameters: {action: 'GetUserMoneyAndLose'},
//      onSuccess: AfterGetUserMoneyAndLose
//    });
//  }
  else
  {
    var tbAnzahlLose = document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose').value;
    if(tbAnzahlLose.length < 9)
    {    
      var tmp = (parseInt(tbAnzahlLose)/1000000).toString();
      var anzahlLose = 0;
      if(tmp == "0")
        anzahlLose = parseInt(value) * 1000000;
      else
        anzahlLose = parseInt(parseInt(tmp + value)) * 1000000;
      
      document.getElementById('ctl00_ContentPlaceHolder1_hdAnzahlLose').value = anzahlLose;
      document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose').value = anzahlLose;
    }  
  }
  
  CheckInput(document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose'));
}
//function AfterGetUserMoneyAndLose(response)
//{
//  // 10,2034|249029
//  var userMoney = parseFloat(response.responseText.split('|')[0]);  
//  var userLose = parseInt(response.responseText.split('|')[1]);
//  
//  if(userMoney > 0)
//  {
//    var kurs = 0;
//    if(isVerkauf)
//    {
//      var tmp = document.getElementById('ctl00_lbAnkaufKurs').innerHTML;
//      kurs = parseFloat(tmp.substring(0, tmp.indexOf("<") - 1));
//    }
//    else
//    {
//      var tmp = document.getElementById('ctl00_lbVerkaufKurs').innerHTML;
//      kurs = parseFloat(tmp.substring(0, tmp.indexOf("<") - 1));
//      
//      var loseToBuy = parseInt(userMoney / (kurs / 100 / 1000000));
//      document.getElementById('ctl00_ContentPlaceHolder1_hdAnzahlLose').value = loseToBuy;
//      document.getElementById('ctl00_ContentPlaceHolder1_tbAnzahlLose').value = loseToBuy;
//    }
//  }  
//}




function EditUser(id,message)
{  
    if(message != "")
    {            
        var ok = ConfirmBox(message);        
        if(ok)
            document.getElementById('ctl00_ContentPlaceHolder1_hiddenUserID').value = id;
        else
            document.getElementById('ctl00_ContentPlaceHolder1_hiddenUserID').value = "abbr";                                   
    }
    else
        document.getElementById('ctl00_ContentPlaceHolder1_hiddenUserID').value = id;
}

function doAuszahlung(id,message)
{
    if(message!="")
    {
        var ok = ConfirmBox(message);
        if(ok)
            document.getElementById('ctl00_ContentPlaceHolder1_hdAuszahlungID').value = id;
        else
            document.getElementById('ctl00_ContentPlaceHolder1_hdAuszahlungID').value = "abbr";           
    }
    else
        document.getElementById('ctl00_ContentPlaceHolder1_hdAuszahlungID').value = id;
}
function doReservierung(id,message)
{
    if(message!="")
    {
        var ok = ConfirmBox(message);
        if(ok)
            document.getElementById('ctl00_ContentPlaceHolder1_hdReservierungID').value = id;
        else
            document.getElementById('ctl00_ContentPlaceHolder1_hdReservierungID').value = "abbr";           
    }
    else
        document.getElementById('ctl00_ContentPlaceHolder1_hdReservierungID').value = id;
}

function ConfirmBox(message)
{
    if(confirm(message))
        return true;
    else return false;
}

function showHelp(id)
{
    var text = "";
    if(id==0)
    {
        text = "Mit \"Bestens\" hat der Benutzer die Möglichkeit die Transaktion abzuschliessen, auch wenn ";
        text += "in der Zwischenzeit ein anderer Benutzer den Kurswert durch einen Kauf/Verkauf von Losen ";
        text += "beeinflusst. Dabei gilt zu beachten das die Transaktion mit dem geänderten Kurswert durchgeführt ";
        text += "wird. ";
    }        
          
    document.getElementById('divHelp').innerHTML = text;
    document.getElementById('divHelp').style.visibility = "visible";
}
function hideHelp()
{
    document.getElementById('divHelp').style.visibility = "hidden";
}

function PositionMenue()
{ 
  var kursBereich_Left  = findPosLeft(document.getElementById('kursbereich'));
  var kursBereich_Width = getElementWidth('kursbereich');
  var anzahlMenuepunkte = document.getElementById('menue_Administration') == null ? 4 : 5;
  var menuePunkt_Width = parseInt(kursBereich_Width / anzahlMenuepunkte);  
  
  if(document.getElementById('menue_LoseHandel') != null)
  {
    document.getElementById('menue_LoseHandel').style.width = menuePunkt_Width + "px";
    document.getElementById('menue_Konten').style.width = menuePunkt_Width + "px";
    document.getElementById('menue_Profil').style.width = menuePunkt_Width + "px";
    document.getElementById('menue_LoseAgent').style.width = menuePunkt_Width + (kursBereich_Width - anzahlMenuepunkte * menuePunkt_Width) + "px";
    if(document.getElementById('menue_Administration') != null)
      document.getElementById('menue_Administration').style.width = menuePunkt_Width + "px";
  }
 
  document.getElementById('tabMenue').style.visibility = "visible";
}

function ShowHideMenue(menuePunkt_ID)
{
  var obj = document.getElementById(menuePunkt_ID).style.display;
  document.getElementById(menuePunkt_ID).style.display = obj == 'none' ? 'block' : 'none';
}

function findPosLeft(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft		
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
		}
	}
	return curleft;
}
function findPosTop(obj) {
	var curtop = 0;
	if (obj.offsetParent) {		
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curtop += obj.offsetTop
		}
	}
	return curtop;
}
function getElementWidth(Elem) {
	
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		
		xPos = elem.offsetWidth;
		
		return xPos;
}

function OpenNewWindowCentered(page, pagename, width, height)
{
    var scrWidth = screen.width;
    var left = scrWidth/2 - width;
    window.open(page, pagename, 'scrollbars=yes, resizable=yes, height='+height+', width='+width+', left='+left+', top=200');    
}

function Del_Edit_News(id,message)
{   
    if(message!="")
    {
        var ok = ConfirmBox(message);
        if(ok)
            document.getElementById('ctl00_ContentPlaceHolder1_hdNewsID').value = id;
        else
            document.getElementById('ctl00_ContentPlaceHolder1_hdNewsID').value = "abbr";           
    }
    else
        document.getElementById('ctl00_ContentPlaceHolder1_hdNewsID').value = id;
}

function ConfirmBox(message)
{
    if(confirm(message))
        return true;
    else return false;
}

function InsertLink()
{            
    document.getElementById('ctl00_ContentPlaceHolder1_tbContent').value += "<a href=\"http://www.adresse.de\">LINKBEZEICHNUNG</a>";
}

function setMoneyLose(value)
{
  var inputLose = document.getElementById('ctl00_ContentPlaceHolder1_tbLoseBetrag').value.replace(/,/,".");
  var inputBetrag = document.getElementById('ctl00_ContentPlaceHolder1_tbBetrag').value.replace(/,/,".");
  var inputKurs = document.getElementById('ctl00_ContentPlaceHolder1_tbKurs').value.replace(/,/,".");

  inputLose = parseInt(inputLose);
  inputBetrag = parseFloat(inputBetrag);
  inputKurs = parseFloat(inputKurs);

  if(!isNaN(inputLose) && !isNaN(inputBetrag) && !isNaN(inputKurs) && inputKurs != "")
  {
    if(value == 0)
    {                   
      inputLose = parseInt((inputBetrag / (inputKurs / 100)) * 1000000);         
      document.getElementById('ctl00_ContentPlaceHolder1_tbLoseBetrag').value = inputLose.toString();
    }
    else
    {    
      inputBetrag = parseFloat((inputLose / 1000000) * (inputKurs/100));
      inputBetrag = runde(inputBetrag, 4);
      document.getElementById('ctl00_ContentPlaceHolder1_tbBetrag').value = inputBetrag.toString();
    }  
  }
}
