//--------------------------------
function checkAndFormatLSValue(flValue, numDigits)
{
	flValue = parseFloat(flValue);
	if (flValue > 0)
	{
		return flValue.toFixed(numDigits).toString().replace('.', ',');
	}
	else
	{
		return '-';
	}
}
//--------------------------------
var dtPushDetail;
function checkAndFormatLSDate(pushTime)
{
	var arTMP = pushTime.split(":");
	
	if (arTMP.length == 3 && typeof(dtPushDetail) == 'object')
	{
		var ts = dtPushDetail.getTime();
		if (dtPushDetail.getHours() > (arTMP[0] * 1))
		{
			// Neue Zeit < gemerkter Zeit -> Datumswechsel -> einen Tag Dazu zählen
			ts += (24 * 60 * 60 * 1000);
		}
		// Neue Zeit setzen
		var tsDate = new Date();
		tsDate.setTime(ts);
		dtPushDetail = new Date(tsDate.getFullYear(), tsDate.getMonth(), tsDate.getDate(), arTMP[0], arTMP[1], arTMP[2]);
	}
	
	var month = ((dtPushDetail.getMonth() + 1) < 10 ? '0' : '') + (dtPushDetail.getMonth() + 1);
	var day = (dtPushDetail.getDate() < 10 ? '0' : '') + dtPushDetail.getDate();
	
	return day + '.' +  month + '.' + dtPushDetail.getFullYear() + ' ' + pushTime;
}

function clLSProdukt(produkt, felder, LSFelder, LSTableName) {
	// Eigenschaften
	this.produkt = produkt;
	this.felder = felder;
	this.LSFelder = LSFelder || null;
	this.LSTableName = LSTableName || 'list';
	this.VortagMittelKurs = null;
	this.WertpapierproduktNr = null;
	this.formatBid = null;
	this.formatAsk = null;
	this.formatQuotetime = null;
	this.formatBuffer = null;
	this.formatDiscount = null;
	this.formatSidewaysyield = null;
	this.formatSidewaysyieldpa = null;
	this.formatMaximumyield = null;
	this.formatMaximumyieldpa = null;
	this.formatLeverage = null;
	this.formatAenderungProzent = null;
	this.formatAenderungAbsolut = null;
	
	// Methoden-Deklaration - Public-Methoden
	this.update = update;
	this.getLetzteZeit = getLetzteZeit;
	
	function getLetzteZeit() {
		return document.getElementById("F|" + this.LSTableName + "|" + this.produkt + "|quotetime|div").innerHTML.split(" ")[0];
	}
	
	function update(updateInfo, ask, bid, quotetime) {
		//var ask = updateInfo.getNewValue(1);
		//var bid = updateInfo.getNewValue(2);
		//var quotetime = updateInfo.getNewValue(3);
		if(!ask) { ask = updateInfo.getNewValue(1); }
		if(!bid) { bid = updateInfo.getNewValue(2); }
		if(!quotetime) { quotetime = updateInfo.getNewValue(2); }
		var LSDivs = getDivs();
		var arrID;
		for (var i = 0, j = LSDivs.length; i < j; i++) {
			arrID = LSDivs[i].attributes["id"].nodeValue.split("|");
			for(var k = 0, l = this.felder.length; k < l; k++) {
				if(arrID[3] == this.felder[k] && arrID[2] == this.produkt) {
					// Mittelkurs
					var m;
					if(ask && bid) {
						m  = (parseFloat(ask) + parseFloat(bid))/2
					}
					else {
						m = ask ? ask : bid;
					}
					switch (this.felder[k]) {
						case "dailyhigh":
							//Liegt der aktuelle Mittelkurs über dem angezeigten
							if(parseFloat(m)*1E10 > parseFloat(LSDivs[i].innerHTML.replace(',','.'))*1E10) {
								LSDivs[i].innerHTML = strFormat(m,this.formatTageshoch);
							}
							//Wenn das angezeigte Datum vor dem aktuellen ist, muss der Mittelkurs auch ersetzt werden
							else if(this.getLetzteZeit() != getAktuelleZeit()) {
								LSDivs[i].innerHTML = strFormat(m,this.formatTageshoch)
							}
							break;
						case "dailylow":
							//Liegt der aktuelle Mittelkurs unter dem angezeigten
							if(parseFloat(m)*1E10 < parseFloat(LSDivs[i].innerHTML.replace(',','.'))*1E10) {
								LSDivs[i].innerHTML = strFormat(m,this.formatTagestief);
							}
							//Wenn das angezeigte Datum vor dem aktuellen ist, muss der Mittelkurs auch ersetzt werden
							else if(this.getLetzteZeit() != getAktuelleZeit()) {
								LSDivs[i].innerHTML = strFormat(m,this.formatTagestief);
							}
							break;
						case "changeabs":
							if(!this.VortagMittelKurs) {
								this.VortagMittelKurs = document.getElementsByName("old"+this.produkt)[0].value;
							} 
							if(this.VortagMittelKurs) {
								LSDivs[i].innerHTML = strFormat(m - this.VortagMittelKurs,this.formatAenderungAbsolut);
							}
							break;
						case "changettl":
							if(!this.ProduktZuWatchlistAufnahmeMittelKurs) {
								this.ProduktZuWatchlistAufnahmeMittelKurs = document.getElementsByName("start"+this.produkt)[0].value;
							}
							if(this.ProduktZuWatchlistAufnahmeMittelKurs) {
								changettl = ((m - this.ProduktZuWatchlistAufnahmeMittelKurs)*100/this.ProduktZuWatchlistAufnahmeMittelKurs);
								//LSDivs[i].innerHTML = changettl > 0 ? "+" + checkAndFormatLSValue(changettl,2) + "%" : checkAndFormatLSValue(changettl,2) + "%";
								LSDivs[i].innerHTML = strFormat(changettl,this.formatAenderungProzent)
							}
							break;
						case "changeper":
							if(!this.VortagMittelKurs) {
								this.VortagMittelKurs = document.getElementsByName("old"+this.produkt)[0].value;
							} 
							if(this.VortagMittelKurs) {
								changeper = ((m - this.VortagMittelKurs)*100/this.VortagMittelKurs);
								//LSDivs[i].innerHTML = changeper > 0 ? "+" + checkAndFormatLSValue(changeper,2) + "%" : checkAndFormatLSValue(changeper,2) + "%";
								LSDivs[i].innerHTML = strFormat(changeper,this.formatAenderungProzent);
							}
							break;
						case "buffer":
							if(typeof(this.buffer) == "function") {
								LSDivs[i].innerHTML = strFormat(this.buffer(),this.formatBuffer);
							}
							break;
						case "discount":
							if(typeof(this.discount) == "function") {
								LSDivs[i].innerHTML = strFormat(this.discount(ask), this.formatDiscount);
							}
							break;
						case "sidewaysyield":
							if(typeof(this.sidewaysyield) == "function") {
								var erg = this.sidewaysyield(ask)
								LSDivs[i].innerHTML = strFormat(this.sidewaysyield(ask), this.formatSidewaysyield);
							}
							break;
						case "maximumyield":
							if(typeof(this.maximumyield) == "function") {
								LSDivs[i].innerHTML = checkAndFormatLSValue(this.maximumyield(ask),2) + "%";
							}
							break;
						case "maximumyieldpa":
							if(typeof(this.maximumyieldpa) == "function") {
								LSDivs[i].innerHTML = checkAndFormatLSValue(this.maximumyieldpa(ask),2) + "%";
							}
							break;
						case "sidewaysyieldpa":
							if(typeof(this.sidewaysyieldpa) == "function") {
								var erg = this.sidewaysyieldpa()
								LSDivs[i].innerHTML = erg > 0 ? checkAndFormatLSValue(erg,2) + "%" : checkAndFormatLSValue(0.0000001,2) + "%";
							}
							break;
						case "leverage":
							if(typeof(this.leverage) == "function") {
								var erg = this.leverage(ask);
								LSDivs[i].innerHTML = isNaN(erg) ? LSDivs[i].innerHTML : strFormat(erg, this.formatLeverage);
							}
							break;
					}
				}
			}
		}
	}
	
	// Private Methoden
	var getDivs = function() {
		var el = document.getElementsByTagName("div");
		var arrRueck = new Array();
		for (var i = 0, j = el.length; i < j; i++) {
			if(el[i].attributes["id"] && el[i].attributes["id"].nodeValue.split("|").length > 0) {
				arrRueck.push(el[i]);
			}
		}
		return arrRueck;
	}
	
	var getAktuelleZeit = function() {
		var dt = new Date();
		var month = ((dt.getMonth() + 1) < 10 ? '0' : '') + (dt.getMonth() + 1);
		var day = (dt.getDate() < 10 ? '0' : '') + dt.getDate();
		return day + '.' +  month + '.' + dt.getFullYear()
	}

}