/*
  $Source: /export/home/users/cvs/NTT-frontend/webserver/js/utilities.js,v $
  $Author: yfl $
  $Date: 2002/03/21 10:42:49 $
  $Revision: 1.11 $
  $Locker:  $
*/
var backGroundColor = '"odd"';
var positiv = '"positiv"';
var negativ = '"negativ"';
var zero = '"zero"';
var step90Or45Degrees = 2.5;
var step0Or45Degrees = 1.0;
var pfeil_rauf_URL = '<IMG SRC = '+'"/images/pfeil_rauf.gif"'+"/>";
var pfeil_rauf45_URL = '<IMG SRC= '+'"/images/pfeil_rauf45.gif"'+"/>";
var pfeil_runter_URL = '<IMG SRC= '+'"/images/pfeil_runter.gif"'+"/>";
var pfeil_runter45_URL = '<IMG SRC= '+'"/images/pfeil_runter45.gif"'+"/>";
var pfeil_gleich_URL ='<IMG SRC= '+'"/images/pfeil_gleich.gif"'+"/>";
var textRed = '<TD align ='+'"right"'+ ' class = '+ '"stdtextred"'+">";
var textGreen = '<TD align ='+'"right"'+ ' class = '+'"stdtextgreen"'+">";
var textBlack = '<TD align ='+'"right"'+ ' class = '+'"stdtextblack"'+">";
var text10Red = '<TD align ='+'"right"'+ ' class = '+ '"stdtext10red"'+">";
var text10Green = '<TD align ='+'"right"'+ ' class = '+'"stdtext10green"'+">";
var text10Black = '<TD align ='+'"right"'+ ' class = '+'"stdtext10"'+">";
var optionCounter = 0;
var gifSpanTops = 0;
var gifSpanFlops = 0;

var diff_proz ;

function getBrowserName()
{
    return navigator.appName;

}

function getCSSBackGroundColor()
{
    if (backGroundColor == '"even"')
        backGroundColor = '"odd"';
    else
        backGroundColor = '"even"';
    return backGroundColor;
}

function getSpBackGroundColor()
{
    if (spBackGroundColor == '"brown1"')
        spBackGroundColor = '"brown2"';
    else
        spBackGroundColor = '"brown1"';
    return spBackGroundColor;
}


function resetCSSBackGroundColor() {
    setBackGroundColor('"odd"');
}

function resetSPBackGroundColor() {
    setSpBackGroundColor('"brown1"');
}

function getFirstTRTag()
{
    firstTag = "<TR class = " + getCSSBackGroundColor()+ ">";
    document.write(firstTag);
}

function setSpBackGroundColor(color)
{
    spBackGroundColor = color;
}

function getFirstTRSpTag()
{
    firstTRSpTag = "<TR class = " + getSpBackGroundColor()+ ">";
    document.write(firstTRSpTag);
}

function getEndTRTag()
{
    endTag  = "</TR>";
    document.write(endTag);
}

function setBackGroundColor(color)
{
    backGroundColor = color;
}
function signum(number)
{
    if (number > 0.0) {
        return positiv;
    }
    if (number == 0.0) {
        return zero;
    }
    if (number < 0.0) {
        return negativ;
    }
}
function tendenz_gif(number)
{
    if (isNaN(number)) {
        document.write("-");
    } else {
        if (signum(number) == positiv) {
            if (number >= step90Or45Degrees)
                document.write(pfeil_rauf_URL);
            else
                if (number >= step0Or45Degrees)
                document.write(pfeil_rauf45_URL);
            else
                document.write(pfeil_gleich_URL);
        }
        if (signum(number) == negativ) {
            if (Math.abs(number) >= step90Or45Degrees)
                document.write(pfeil_runter_URL);
            else
                if (Math.abs(number) >= step0Or45Degrees)
                document.write(pfeil_runter45_URL);
            else
                document.write(pfeil_gleich_URL);
        }
        if (signum(number) == zero) {
            document.write(pfeil_gleich_URL);
        }

    }
}
function getFirstTDTag(number)
{
    if (isNaN(number)) {
        document.write(textBlack);
    } else {
        if (signum(number) == positiv) {
            document.write(textGreen);
        }
        if (signum(number) == negativ) {
            document.write(textRed);
        }
        if (signum(number) == zero) {
            document.write(textBlack);
        }

    }
}
function getFirstTD10Tag(number)
{
    if (isNaN(number)) {
        document.write(text10Black);
    } else {
        if (signum(number) == positiv) {
            document.write(text10Green);
        }
        if (signum(number) == negativ) {
            document.write(text10Red);
        }
        if (signum(number) == zero) {
            document.write(text10Black);
        }

    }
}
function getEndTDTag()
{
    endTag = "</TD>";
    document.write(endTag);
}
function getDiffProz()
{
    if (isNaN(diff_proz))
        return "-";
    else
        return diff_proz;
}
function setDiffProz(number)
{
    if (isNaN(number))
        diff_proz= "-";
    else
        diff_proz= number;
}

function writeStringWithoutSubstring(stringWithSubstring)
{
    document.write(stringWithSubstring);
}

function fixNumber(number, count)
{
    var countval=Math.pow(10, count);
    return ""+Math.round(number*countval)/countval;
}

function writeFixNumber(number, count)
{
    document.write(fixNumber(number, count));
}

function Average(bid, ask)
{
    return(bid+ask)/2;
}


function setSpan(value, par)
{
    if (par==0) {
        gifSpanTops = gifSpanTops + Math.abs(value);
    } else {
        gifSpanFlops = gifSpanFlops + Math.abs(value);
    }

}
function getWidth(value, par)
{
    if (par==0)
        width = Math.round(40 * Math.abs(value) / gifSpanTops);
    else
        width = Math.round(40 * Math.abs(value) / gifSpanFlops);
    document.write(width);
}

// calcTime
// param:
//   reutersdate : string containing the date formated "DD MMM YYYY"
//   reuterstime:  string containing the time formated "hh:mm"
//	 format			0 = just time, no date  	(hh:mm)
//              1 = first time, then very short date without year (hh:mm, dd.mm.)
//              2 = first time, then short date (hh:mm, dd.mm.yy)
//              3 = first time, then long date (hh:mm, dd.mm.yyyy)
function calcLocalTime(reutersdate, reuterstime, format)
{
    var day=reutersdate.substring(0, 2);
    var month=reutersdate.substring(3, 6);
    var year=reutersdate.substring(7, 11);
    if (month=='JAN') month='00';
    if (month=='FEB') month='01';
    if (month=='MAR') month='02';
    if (month=='APR') month='03';
    if (month=='MAY') month='04';
    if (month=='JUN') month='05';
    if (month=='JUL') month='06';
    if (month=='AUG') month='07';
    if (month=='SEP') month='08';
    if (month=='OCT') month='09';
    if (month=='NOV') month='10';
    if (month=='DEC') month='11';
    var hour=reuterstime.substring(0, 2);
    var minutes=reuterstime.substring(3, 5);
    var kurstime = new Date(Number(year), Number(month), Number(day), Number(hour), Number(minutes), 0);
    var unitime=Date.UTC(Number(year), Number(month), Number(day), Number(hour), Number(minutes), 0);
    kurstime.setTime(unitime);
    var Jahr;
    if (kurstime.getYear() < 1000)
    	Jahr=String(1900 + kurstime.getYear());
    else
      Jahr=String(kurstime.getYear());
    var Monat=String(kurstime.getMonth() +1);
    var Tag=String(kurstime.getDate());
    var Std=String(kurstime.getHours());
    var Min=String(kurstime.getMinutes());
    if (Tag.length==1)
        Tag='0'+Tag;
    if (Monat.length==1)
        Monat='0'+Monat;
    if (Std.length==1)
        Std='0'+Std;
    if (Min.length==1)
        Min='0'+Min;
    if (format==2) {
        if (Jahr.length==4)
            Jahr=Jahr.substring(2, 4);
    }
    if (format==0)
        document.write(Std+':'+Min);
    else if (format==1)
        document.write(Std+':'+Min+', '+Tag+'.'+Monat+'.');
    else if (format==2)
        document.write(Std+':'+Min+', '+Tag+'.'+Monat+'.'+Jahr);
    else if (format==3)
        document.write(Std+':'+Min+', '+Tag+'.'+Monat+'.'+Jahr);
}

function writeFormatedDate(textDate, typOfYear) {
    var date=textDate.substring(0, 2);
    var month=textDate.substring(3, 6);
    var year=textDate.substring(7, 11);
    if (month=='JAN') month='01';
    if (month=='FEB') month='02';
    if (month=='MAR') month='03';
    if (month=='APR') month='04';
    if (month=='MAY') month='05';
    if (month=='JUN') month='06';
    if (month=='JUL') month='07';
    if (month=='AUG') month='08';
    if (month=='SEP') month='09';
    if (month=='OCT') month='10';
    if (month=='NOV') month='11';
    if (month=='DEC') month='12';
    if (typOfYear==0)
        document.write(''+date+'.'+month+'.');
    else if (typOfYear==1)
        document.write(''+date+'.'+month+'.'+year.substring(2));
    else
        document.write(''+date+'.'+month+'.'+year);
}

function FormatDateTime(datum,zeit,diff,typ)
{
 		var month;
 		if (datum.substring(3,6)=='JAN') month='01';
    if (datum.substring(3,6)=='FEB') month='02';
    if (datum.substring(3,6)=='MAR') month='03';
    if (datum.substring(3,6)=='APR') month='04';
    if (datum.substring(3,6)=='MAY') month='05';
    if (datum.substring(3,6)=='JUN') month='06';
    if (datum.substring(3,6)=='JUL') month='07';
    if (datum.substring(3,6)=='AUG') month='08';
    if (datum.substring(3,6)=='SEP') month='09';
    if (datum.substring(3,6)=='OCT') month='10';
    if (datum.substring(3,6)=='NOV') month='11';
    if (datum.substring(3,6)=='DEC') month='12';
	 
	 var millisec=Date.UTC(datum.substring(7,11),month,datum.substring(0,2),(zeit.substring(0,2)),zeit.substring(3,5),zeit.substring(6,8));
   var total=millisec+((diff)*3600000);
	 //var total=millisec;
	 var result=new Date();
	 result.setTime(total);
	 var days;
	 var months;
	 var hours;
	 var minutes;
	 var seconds;
	 var years;
	 if (result.getDate()<10) days='0'+result.getDate();
	 else days=result.getDate();
	 if (result.getMonth()<10) months='0'+result.getMonth();
	 else months=result.getMonth();
	 if (result.getHours()<10) hours='0'+result.getHours();
	 else hours=result.getHours();
	 if (result.getMinutes()<10) minutes='0'+result.getMinutes();
	 else minutes=result.getMinutes();
	 if (result.getSeconds()<10) seconds='0'+result.getSeconds();
	 else seconds=result.getSeconds();
	 if (typ==0)
     if (result.getYear() < 1000)
     	 document.write(days+'.'+months+'.'+ (1900 + result.getYear()));
     else
       document.write(days+'.'+months+'.'+result.getYear());
	 else if (typ==1) document.write(hours+':'+minutes+':'+seconds); 
}


// getTime: Aktuelle Systemzeit ermitteln
// param:
//	 format			0 = just time, no date  	(hh:mm)
//              1 = first time, then very short date without year (hh:mm, dd.mm.)
//              2 = first time, then short date (hh:mm, dd.mm.yy)
//              3 = first time, then long date (hh:mm, dd.mm.yyyy)
function getTime(format)
{
    akttime = new Date();
    var Jahr=akttime.getYear();
    var Monat=akttime.getMonth() +1;
    var Tag=akttime.getDate();
    var Std=akttime.getHours();
    var Min=akttime.getMinutes();

    // correct Netscape bug
    if(Jahr < 1000) Jahr = Jahr + 1900;

    if (Std.length==1)
        Std='0'+Std;
    if (Min.length==1)
        Min='0'+Min;
    if (format==2)
        Jahr=Jahr.substring(2,4);

    if (format==0)
        document.write(Std+':'+Min);
    else if (format==1)
        document.write(Std+':'+Min+', '+Tag+'.'+Monat+'.');
    else if (format==2)
        document.write(Std+':'+Min+', '+Tag+'.'+Monat+'.'+Jahr);
    else if (format==3)
        document.write(Std+':'+Min+', '+Tag+'.'+Monat+'.'+Jahr);
}


function formatNumber(num, decimalNum, bolLeadingZero)
/* IN - num:            the number to be formatted
        decimalNum:     the number of decimals after the digit
        bolLeadingZero: true / false to use leading zero

   RETVAL - formatted number
*/
{
    var tmpNum = num;

    // Return the right number of decimal places
    tmpNum *= Math.pow(10,decimalNum);
    tmpNum = Math.floor(tmpNum);
    tmpNum /= Math.pow(10,decimalNum);

    var tmpStr = new String(tmpNum);

    // See if we need to hack off a leading zero or not
    if (!bolLeadingZero && num < 1 && num > -1 && num !=0)
        if (num > 0)
            tmpStr = tmpStr.substring(1,tmpStr.length);
        else
            // Take out the minus sign out (start at 2)
            tmpStr = "-" + tmpStr.substring(2,tmpStr.length);

    return tmpStr;
}

//Funktion die den letzten Tag eines Monats berechnet inkl. Schaltjahre
//Eingabe: Monat und Jahr als Zahlvariablen
//Ausgabe: Tag als int.
//Author: pat le cat, 8.8.2001
function getLastDayOfMonth(month, year)
{
    if (month==1 || month==5 || month==7 || month==8 || month==10 || month==12) {
        return 31;
    }
    if (month==4 || month==6 || month==9 || month==11) {
        return 30;
    }
    if (year % 4 == 0 && year % 400 != 0) {
        return 29
    } else {
        return 28;
    }
}

//Diese Funktion prüft ob das Datum gültig ist und gibt es als wählbaren String zurück.
//Bei ungültigen Datumseingaben wird ein Alertfenster geöffnet.
//Eingabe: tag, monat und jahr als String-Zahlen.
//Eingabe: ausgabeFormat steuert das Format des Ausgabestrings (Wert 1-4)
//--AUSGABEFORMAT--
//1:    "Mittwoch, 8. August 2001"
//2:    "8. August 2001"
//3:    "Mittwoch"
//4:    "Arbeitstag" oder "Wochenende"
function buildValidDate(tag, monat, jahr, ausgabeFormat) {

    //General Array Function
    function MakeArray(n) {
        this.length = n;
        for (var i = 1; i <=n; i++) {
            this[i] = 0;
        }
    }

    //Initialize Days of Week Array
    var days = new MakeArray(7);
    days[0] = "Samstag"
    days[1] = "Sonntag"
    days[2] = "Montag"
    days[3] = "Dienstag"
    days[4] = "Mittwoch"
    days[5] = "Donnerstag"
    days[6] = "Freitag"

    //Initialize Months Array
    var months = new MakeArray(12);
    months[1] = "Januar"
    months[2] = "Februar"
    months[3] = "März"
    months[4] = "April"
    months[5] = "Mai"
    months[6] = "Juni"
    months[7] = "Juli"
    months[8] = "August"
    months[9] = "September"
    months[10] = "Oktober"
    months[11] = "November"
    months[12] = "Dezember"

    var val1 = parseInt(tag, 10)
    if ((val1 < 0) || (val1 > 31)) {
        alert("FEHLER: Sie haben einen ungueltigen Tag eingegeben!");
        return 0;
    }
    var val2 = parseInt(monat, 10)
    if ((val2 < 0) || (val2 > 12)) {
        alert("FEHLER: Sie haben einen unguetligen Monat eingegeben!");
        return 0;
    }
    var val2x = parseInt(monat, 10)
    var val3 = parseInt(jahr, 10)
    if (val3 < 1900) {
        alert("FEHLER: Sie haben einen unguetliges Jahr eingegeben!")
        return 0;
    }

    //Prüfen ob der Tag grösser als der letzte Tag des Monats ist
    if (val1 > getLastDayOfMonth(val2, val3)) {
        alert("FEHLER: Der eingegebene Tag ist grösser als in diesem Monat möglich!");
        return 0;
    }

    if (val2 == 1) {
        val2x = 13;
        val3 = val3-1
    }
    if (val2 == 2) {
        val2x = 14;
        val3 = val3-1
    }
    var val4 = parseInt(((val2x+1)*3)/5, 10)
    var val5 = parseInt(val3/4, 10)
    var val6 = parseInt(val3/100, 10)
    var val7 = parseInt(val3/400, 10)
    var val8 = val1+(val2x*2)+val4+val3+val5-val6+val7+2
    var val9 = parseInt(val8/7, 10)
    var val0 = val8-(val9*7)

    //1:    "Mittwoch, 8. August 2001"
    //2:    "8. August 2001"
    //3:    "Mittwoch"
    //4:    "Arbeitstag" oder "Wochenende"
    switch (ausgabeFormat) {
    case 1: return(days[val0] + ", " + tag + ". " + months[val2] + " " + jahr);
        break;
    case 2: return(tag + ". " + months[val2] + " " + jahr);
        break;
    case 3: return(days[val0]);
        break;
    case 4:
        if (days[val0] == "Sonntag" || days[val0] == "Samstag") {
            return("Wochenende");
        } else {
            return("Arbeitstag");
        }
        break;
    default: alert("FEHLER: Ein interner Fehler ist aufgetreten! [utilities.js]");
        return 0;
        break;
    }
}

//Diese Funktion nimmt ein Datum und prüft, ob das Datum älter als heute ist.
//Eingabe: datum als Date Variable
function isDateOlder(datum)
{
    var retVal = false;
    var heute = new Date();
//    var today = heute.getDate();

    var differenz = (datum - heute);

    if (Math.ceil(differenz / (1000*60*60*24)) < 0)
        return true;
    return false;
}


// Umrechnung vom GMT nach MEZ
function FormatDateTime_MEZ(datum,zeit,typ)
{
	var gmt_or_mez = 'MEZ'; // GMT oder MEZ setzen
	var ist_zeit_leer = 'false';

	if( zeit=='' || zeit.search(/:/)==-1 ){ // Zeit muss Format zz:zz:zz, wobei z ist ein Ziffer!
		ist_zeit_leer = 'true';
		zeit = '00:00:00';
	}
	
	if( gmt_or_mez == 'GMT' ) {
    if (typ==0) document.write(datum); //datum
    else if (typ==1 ) {                     //zeit
			if( ist_zeit_leer=='false') document.write(zeit);
			else document.write('');
		}
		return;
	}
	
	var month_xxx = datum.substr(3,3);
	var month_nn;
	
	switch( month_xxx ) {
  	case 'JAN': month_nn='00'; break;
  	case 'FEB': month_nn='01'; break;
  	case 'MAR': month_nn='02'; break;
  	case 'APR': month_nn='03'; break;
  	case 'MAY': month_nn='04'; break;
  	case 'JUN': month_nn='05'; break;
  	case 'JUL': month_nn='06'; break;
  	case 'AUG': month_nn='07'; break;
  	case 'SEP': month_nn='08'; break;
  	case 'OCT': month_nn='09'; break;
  	case 'NOV': month_nn='10'; break;
  	case 'DEC': month_nn='11'; break;
		default: month_nn='00'; break;
	}

	var year_tmp = datum.substr(7,4);
	var date_tmp = new Date();
	var day_tmp = 0;

	// Beginn: Die Sommerzeit beginnt am letzten Sonntag im März um 02:00 Uhr MEZ (Mitteleuropäische Zeit).
	// Zu diesem Zeitpunkt werden die Uhren um eine Stunde von 02:00 auf 03:00 Uhr vorgestellt.
	//var milisec_sommer_begin=Date.UTC( datum.substr(7,4), 2, 25, 2, 0, 0 ); // vorsicht Maerz ist 2
	var milisec_sommer_begin = 0;
	for( i= 31; i >= 1; i--) {
	  milisec_sommer_begin=Date.UTC( year_tmp, 2, i, 2, 0, 0 ); // vorsicht Maerz ist 2
		date_tmp.setTime( milisec_sommer_begin );
		day_tmp = date_tmp.getDay();
		if( day_tmp == 0 ) break; // wenn letzter Sonntag (0) dann abbrehen
	}
	//document.write('year_tmp i day_tmp ' + year_tmp + ' '+ i + ' ' + day_tmp + '\n');

	// Ende: Die Sommerzeit endet am letzten Sonntag im Oktober um 03:00 Uhr (Sommerzeit = MEZ + 1 h). 
	// Zu diesem Zeitpunkt werden die Uhren von 03:00 auf 02:00 Uhr zurückgestellt.
	//var milisec_sommer_end  =Date.UTC( datum.substr(7,4), 9, 28, 3, 0, 0 ); // vorsicht: Oktober ist 9
	var milisec_sommer_end = 0;
	for( i= 31; i >= 1; i--) {
	  milisec_sommer_end=Date.UTC( year_tmp, 9, i, 3, 0, 0 ); // vorsicht Maerz ist 2
		date_tmp.setTime( milisec_sommer_end );
		day_tmp = date_tmp.getDay();
		if( day_tmp == 0 ) break; // wenn letzter Sonntag (0) dann abbrehen
	}
	//document.write('year_tmp i day_tmp ' + year_tmp + ' ' + i + ' ' +day_tmp + '\n');

	// vom eingabe
	var milisec=Date.UTC( datum.substr(7,4), month_nn, datum.substr(0,2), zeit.substr(0,2), zeit.substr(3,2), zeit.substr(6,2) );

	var diff; // diff MEZ - GMT: MEZ = +01:00 GMT Winnterzeit; +02:00 wenn Sommerzeit
	diff = (milisec_sommer_begin<milisec && milisec<milisec_sommer_end) ? 2 : 1; // wenn sommerzeit, dann diff=2; winterzeit, dann diff=1
  
	//document.write('diff:'+diff+' ');

	var total = milisec + ( diff * 3600000 );

	var jetzt = new Date();
	
	var localtime_minus_GMT_in_mili_sec = -jetzt.getTimezoneOffset()*60000; // 60 min * 1000 millisec
	jetzt.setTime(total - localtime_minus_GMT_in_mili_sec);

	//document.write('offset:' + (localtime_minus_GMT_in_mili_sec)/3600000 + ' ');
	
	var day		= jetzt.getDate();
	var month	= jetzt.getMonth() + 1; // ACHTUNG!!!
	var hour	= jetzt.getHours();
	var minute= jetzt.getMinutes();
	var second= jetzt.getSeconds();
	var year	= jetzt.getYear();
	// correct Netscape bug
	if(year < 1000) year = year + 1900;
	 
  if( day<10 ) day = '0' + day;
  if( month<10 ) month = '0' + month;
  if( hour<10 ) hour = '0' + hour;
  if( minute<10 ) minute = '0' + minute;
  if( second<10 ) second = '0' + second;
  
  if (typ==0) document.write(day+'.'+month+'.'+year); //datum
  else if (typ==1) { //zeit
		if( ist_zeit_leer=='false') document.write(hour+':'+minute+':'+second); 
		else document.write('');
	}
}

