// data exist since: year, month, day (attention: 0=jan, 1 = feb, ..., 11=dec)
var g_dtStart = new Date(2007, 0, 1);
var g_iArchiveStartYear = 1999;

// global variable for relative path to charts (and tables)
var g_sChartsPath 		= "./charts/";
var g_sTablesPath 		= "./tables/";

// global variables for number of charts on each tab
var g_iHeatingCount		= 1;
var g_iPowerCount		= 1;
var g_iWaterCount		= 1;
var g_iTemperatureCount	= 1;

// global variable to store selection
var g_sSelectedTab		= "";
var g_sResolution		= "";

function fktFillDocument()
{
	if ( document.getElementById("TAB_COMPARE") )
		fktChangeView("TAB_COMPARE");
	if ( document.getElementById("TAB_HEATING") )
		fktChangeView("TAB_HEATING");
	if ( document.getElementById("TAB_POWER") )
		fktChangeView("TAB_POWER");
	if ( document.getElementById("TAB_WATER") )
		fktChangeView("TAB_WATER");
	if ( document.getElementById("TAB_TEMPERATURE") )
		fktChangeView("TAB_TEMPERATURE");
	if ( document.getElementById("TAB_OVERVIEW") )
		fktChangeView("TAB_OVERVIEW");

	this.fktOnChangeResolution();
}

function fktOnChangeResolution()
{
	var cbResolution = document.getElementById("SELECT_RESOLUTION");
    var dtCurrent = new Date();
    // change date (at 06:00 in the morning)
    if ( dtCurrent.getHours() < 6 ) {
        dtCurrent = dtCurrent - 1;
    }
	
	if ( cbResolution.selectedIndex < 0 )
	{
		// cb has no entries -> show error message
		alert("Es steht leider keine Auswahl zur Verfügung!");
		return;
	}
	
	g_sResolution = cbResolution.options[cbResolution.selectedIndex].value;
	
	if ( g_sResolution == "DAY" )
	{
		// use g_dtStart for beginning of time to show
		document.getElementById("SELECT_YEAR").style.display = "inline";
		document.getElementById("SELECT_MONTH").style.display = "inline";
		document.getElementById("SELECT_DAY").style.display = "inline";
		fktFillYear(g_dtStart.getFullYear(), dtCurrent.getFullYear());
	}
	else if ( g_sResolution == "MONTH" )
	{
		// use g_dtStart for beginning of time to show, cause it dosent make sense to show historical data here
		document.getElementById("SELECT_YEAR").style.display = "inline";
		document.getElementById("SELECT_MONTH").style.display = "inline";
		document.getElementById("SELECT_DAY").style.display = "none";
		fktFillYear(g_dtStart.getFullYear(), dtCurrent.getFullYear());
	}
	else if ( g_sResolution == "YEAR" )
	{
		// show historical data too (since g_iArchiveStartYear)
		document.getElementById("SELECT_YEAR").style.display = "inline";
		document.getElementById("SELECT_MONTH").style.display = "none";
		document.getElementById("SELECT_DAY").style.display = "none";
		fktFillYear(g_iArchiveStartYear, dtCurrent.getFullYear());
	}
	else if ( g_sResolution == "ALL" )
	{
		// show historical data too (since g_iArchiveStartYear)
		document.getElementById("SELECT_YEAR").style.display = "none";
		document.getElementById("SELECT_MONTH").style.display = "none";
		document.getElementById("SELECT_DAY").style.display = "none";
		fktShowCharts();
	}
}

function fktFillYear(iStartYear, iEndYear)
{
	var cbYear = document.getElementById("SELECT_YEAR");
	fktCleanComboBox(cbYear);
	
	for ( iYear = iEndYear; iYear >= iStartYear; iYear-- )
	{
        oCBEntry = new Option(iYear.toString(), iYear.toString());
        cbYear.options[cbYear.length] = oCBEntry;
	}
	
	fktOnChangeYear();
}

function fktOnChangeYear()
{
	if ( g_sResolution == "YEAR" )
	{
		fktShowCharts();
	}
	else
	{
		fktFillMonth();
	}
}

function fktFillMonth()
{
	var cbMonth 		= document.getElementById("SELECT_MONTH");
	var cbYear 			= document.getElementById("SELECT_YEAR");
	var iSelectedYear	= parseInt(cbYear.options[cbYear.selectedIndex].value);
	var dtCurrent 		= new Date();
	var iStartMonth		= 0;
	var iEndMonth		= 11;
	var arrayMonth 		= new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	
	fktCleanComboBox(cbMonth);

	if ( iSelectedYear == g_dtStart.getFullYear() )
		iStartMonth = g_dtStart.getMonth();
	if ( iSelectedYear == dtCurrent.getFullYear() )
		iEndMonth = dtCurrent.getMonth();
		
	for ( iMonth = iEndMonth; iMonth >= iStartMonth; iMonth-- )
	{
        oCBEntry = new Option(arrayMonth[iMonth], iMonth.toString());
        cbMonth.options[cbMonth.length] = oCBEntry;
	}
	
	fktOnChangeMonth();	
}

function fktOnChangeMonth()
{
	if ( g_sResolution == "DAY" )
	{
		fktFillDay();
	}
	else
	{
		fktShowCharts();
	}
}

function fktFillDay()
{
	var cbMonth 		= document.getElementById("SELECT_MONTH");
	var cbYear 			= document.getElementById("SELECT_YEAR");
	var cbDay 			= document.getElementById("SELECT_DAY");
	var iSelectedYear	= parseInt(cbYear.options[cbYear.selectedIndex].value);
	var iSelectedMonth	= parseInt(cbMonth.options[cbMonth.selectedIndex].value);
	var dtCurrent 		= new Date();
	var dtStartDate		= new Date(iSelectedYear, iSelectedMonth, 1);
	var dtEndDate		= new Date(iSelectedYear, iSelectedMonth+1, 1);
    var arrayWeekday 	= new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
	
	fktCleanComboBox(cbDay);

	if ( dtStartDate < g_dtStart )
		dtStartDate = g_dtStart;
	if ( dtEndDate > dtCurrent )
		dtEndDate = dtCurrent;
	dtEndDate.setDate(dtEndDate.getDate()-1);
	
	while ( dtEndDate >= dtStartDate )
	{
		iMonth						= dtEndDate.getMonth() + 1;
		sDay 						= arrayWeekday[dtEndDate.getDay()] + ", " + dtEndDate.getDate().toString() + "." + iMonth.toString();
		oCBEntry					= new Option(sDay, dtEndDate.getDate().toString());
		cbDay.options[cbDay.length]	= oCBEntry;
        dtEndDate.setDate(dtEndDate.getDate() - 1);
 	}
 	
 	fktOnChangeDay();
}

function fktOnChangeDay()
{
	fktShowCharts();
}

function fktShowCharts()
{
	var cbMonth = document.getElementById("SELECT_MONTH");
	var cbYear 	= document.getElementById("SELECT_YEAR");
	var cbDay 	= document.getElementById("SELECT_DAY");
	var iMonth	= parseInt(cbMonth.options[cbMonth.selectedIndex].value) + 1;
	var iDay	= parseInt(cbDay.options[cbDay.selectedIndex].value);
	var sMonth	= iMonth.toString();
	var sDay	= iDay.toString();
	var sTime	= "";
	
	if ( iDay < 10 )
		sDay = "0" + iDay.toString();
	if ( iMonth < 10 )
		sMonth = "0" + iMonth.toString();
	
	if ( g_sResolution == "DAY" )
		sTime = "DAY_" + cbYear.options[cbYear.selectedIndex].value + sMonth + sDay;
	else if ( g_sResolution == "MONTH" )
		sTime = "MONTH_" + cbYear.options[cbYear.selectedIndex].value + sMonth;
	else if ( g_sResolution == "YEAR" )
		sTime = "YEAR_" + cbYear.options[cbYear.selectedIndex].value;
	else if ( g_sResolution == "ALL" )
		sTime = "ALL";
		
	fktLoadImage("HEATING_SUM",	"chart_loading.png");
	fktLoadImage("POWER_SUM", 	"chart_loading.png");
	fktLoadImage("WATER_SUM", 	"chart_loading.png");
	fktLoadImage("HEATING_COMP","chart_loading.png");
	fktLoadImage("POWER_COMP", 	"chart_loading.png");
	fktLoadImage("WATER_COMP", 	"chart_loading.png");
	fktLoadImage("HEATING_COMP_P","chart_loading.png");
	fktLoadImage("POWER_COMP_P", 	"chart_loading.png");
	fktLoadImage("WATER_COMP_P", 	"chart_loading.png");
	for ( i = 1; i <= g_iHeatingCount; i++ )
		fktLoadImage("HEATING_" + i.toString(), "chart_loading.png");
	for ( i = 1; i <= g_iPowerCount; i++ )
		fktLoadImage("POWER_" + i.toString(), "chart_loading.png");
	for ( i = 1; i <= g_iWaterCount; i++ )
		fktLoadImage("WATER_" + i.toString(), "chart_loading.png");
	for ( i = 1; i <= g_iTemperatureCount; i++ )
		fktLoadImage("TEMPERATURE_" + i.toString(), "chart_loading.png");

	if ( sTime != "" )
	{
		fktLoadImage("HEATING_SUM",	"HEATING_SUM_" + sTime + ".png");
		fktLoadImage("POWER_SUM", 	"POWER_SUM_" + sTime + ".png");
		fktLoadImage("WATER_SUM", 	"WATER_SUM_" + sTime + ".png");
		fktLoadImage("HEATING_COMP","HEATING_COMP_" + sTime + ".png");
		fktLoadImage("POWER_COMP", 	"POWER_COMP_" + sTime + ".png");
		fktLoadImage("WATER_COMP", 	"WATER_COMP_" + sTime + ".png");
		fktLoadImage("HEATING_COMP_P","HEATING_COMP_P_" + sTime + ".png");
		fktLoadImage("POWER_COMP_P", 	"POWER_COMP_P_" + sTime + ".png");
		fktLoadImage("WATER_COMP_P", 	"WATER_COMP_P_" + sTime + ".png");
		for ( i = 1; i <= g_iHeatingCount; i++ )
			fktLoadImage("HEATING_" + i.toString(), "HEATING_" + i.toString() + "_" + sTime + ".png");
		for ( i = 1; i <= g_iPowerCount; i++ )
			fktLoadImage("POWER_" + i.toString(), "POWER_" + i.toString() + "_" + sTime + ".png");
		for ( i = 1; i <= g_iWaterCount; i++ )
			fktLoadImage("WATER_" + i.toString(), "WATER_" + i.toString() + "_" + sTime + ".png");
		for ( i = 1; i <= g_iTemperatureCount; i++ )
			fktLoadImage("TEMPERATURE_" + i.toString(), "TEMPERATURE_" + i.toString() + "_" + sTime + ".png");
	}
}

// remove all entries from a combobox
function fktCleanComboBox(cbComboBox) 
{
    var iCount = cbComboBox.childNodes.length;
    var iIndex = 0;
    var nodeToDelete;
    var nodeTemp;

    // empty combo box
    if (iCount > 0) 
    {
        for ( iIndex = iCount; iIndex > 0; iIndex-- ) 
        {
                nodeToDelete = cbComboBox.lastChild;
                nodeTemp = cbComboBox.removeChild(nodeToDelete);
        }
    }
}

function fktLoadImage( sImageId, sImageName )
{
	if ( document.getElementById(sImageId) )
		document.getElementById(sImageId).src = g_sChartsPath + sImageName;
}

function fktLoadEmptyImg( sImageId ) 
{
	document.getElementById(sImageId).src = g_sChartsPath + "chart_nodata.png";
}

function fktChangeView( sTabId )
{
	// first hide all tabs
	if ( document.getElementById("TAB_OVERVIEW") )
		document.getElementById("TAB_OVERVIEW").style.display = "none";
	if ( document.getElementById("TAB_COMPARE") )
		document.getElementById("TAB_COMPARE").style.display = "none";
	if ( document.getElementById("TAB_HEATING") )
		document.getElementById("TAB_HEATING").style.display = "none";
	if ( document.getElementById("TAB_POWER") )
		document.getElementById("TAB_POWER").style.display = "none";
	if ( document.getElementById("TAB_WATER") )
		document.getElementById("TAB_WATER").style.display = "none";
	if ( document.getElementById("TAB_TEMPERATURE") )
		document.getElementById("TAB_TEMPERATURE").style.display = "none";
		
	// show the selected tab
	document.getElementById(sTabId).style.display = "block";
	g_sSelectedTab = sTabId;
	
	// finally resize the iframe with the images
	fktResizeIFrame();
}

function fktResizeIFrame()
{
	var iImageCount = 0;
	if ( g_sSelectedTab == "TAB_OVERVIEW" )
	{
		if ( g_iHeatingCount > 0 )
			iImageCount++;
		if ( g_iPowerCount > 0 )
			iImageCount++;
		if ( g_iWaterCount > 0 )
			iImageCount++;
	}
	else if ( g_sSelectedTab == "TAB_COMPARE" )
	{
		if ( g_iHeatingCount > 0 )
			iImageCount += 2;
		if ( g_iPowerCount > 0 )
			iImageCount += 2;
		if ( g_iWaterCount > 0 )
			iImageCount += 2;
	}
	else if ( g_sSelectedTab == "TAB_HEATING" )
		iImageCount = g_iHeatingCount;
	else if ( g_sSelectedTab == "TAB_POWER" )
		iImageCount = g_iPowerCount;
	else if ( g_sSelectedTab == "TAB_WATER" )
		iImageCount = g_iWaterCount;
	else if ( g_sSelectedTab == "TAB_TEMPERATURE" )
		iImageCount = g_iTemperatureCount;
		
	var fFFVersion 		= navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1];
	var iFFExtraHeight	= parseFloat(fFFVersion) >= 1.0 ? 16 : 0;
	var iFrameHeight	= 0;
	
	if ( parent.document.getElementById )
	{
		var objChartsFrame  = parent.document.getElementById("charts");
		if ( objChartsFrame )
		{
			objChartsFrame.style.display = "block";
         	if (objChartsFrame.contentDocument && objChartsFrame.contentDocument.body.offsetHeight) //ns6 syntax
            	iFrameHeight = iFFExtraHeight + iImageCount * 250 + 61;
         	else if (objChartsFrame.Document && objChartsFrame.Document.body.scrollHeight) //ie5+ syntax
            	iFrameHeight = iImageCount * 250 + 91;
         
         	objChartsFrame.height = iFrameHeight;
        
			if ( parent.parent.document.getElementById("IFrameBuilding") )
			{        
        iFrameHeight += 60;
        if ( iFrameHeight < 460 )
        	iFrameHeight = 460;
        				
				parent.parent.document.getElementById("IFrameBuilding").height = iFrameHeight;
			}
		}
	}
}
