var steps = 4;
var wkendBorder = '1px dashed #CCCCCC';
var MonthNames = new Array(TXT_JANUARY,TXT_FEBRUARY,TXT_MARCH,TXT_APRIL,TXT_MAY,TXT_JUNE,TXT_JULY,TXT_AUGUST,TXT_SEPTEMBER,TXT_OCTOBER,TXT_NOVEMBER,TXT_DECEMBER);
var MonthAbbr = new Array(TXT_JAN,TXT_FEB,TXT_MAR,TXT_APR,TXT_MAY_SHORT,TXT_JUN,TXT_JUL,TXT_AUG,TXT_SEP,TXT_OCT,TXT_NOV,TXT_DEC);
var DayAbbr = new Array(TXT_SUN_SHORT,TXT_MON_SHORT,TXT_TUE_SHORT,TXT_WED_SHORT,TXT_THU_SHORT,TXT_FRI_SHORT,TXT_SAT_SHORT);
var SelectedBarDate = null;
var prevMonthON = 'i/cal/left1.gif';
var prevMonthOFF = 'i/cal/leftOff.gif';

function BarChart(id, targetId, labelId, prevMonthImgId)
{
	this.ID = id;
	this.ChartData = new Array();
	this.MaxVal = 0;
	this.LabelID = labelId;
	this.TargetID = targetId;
	this.PrevMonthImgId = prevMonthImgId;
	this.Month = null;
	this.Year = null;

	function drawChart(arr, m, y)
	{
		var container = GetItemById(this.TargetID);
		if(!container)
			return;

		if(this.Month != m || this.Year != y){
			this.Month = m;
			this.Year = y;
			SelectedBarDate = null;
		}
		
		this.writeMonthLabel(m, y);
		this.ChartData = arr;
		this.setMaxVal();
		
		var html = '';
		html += '<div style="float:left;width:5%;">' + this.getYAxisHtml() + '</div>';
		html += '<div style="float:left;width:94%;">' + this.getChartHtml(m, y) + '</div>';
		container.innerHTML = html;
	}
	this.drawChart = drawChart;

	function writeMonthLabel(m, y)
	{
		var monthLabel = GetItemById(this.LabelID);
		if(monthLabel)
			monthLabel.innerHTML = MonthNames[(m-1)] + ' ' + y;

		var prevMonth = GetItemById(this.PrevMonthImgId);
		if(prevMonth){
			var now = new Date();
			if(m == (now.getMonth() + 1) && y == now.getFullYear()){
				prevMonth.src = IMG_ROOT + prevMonthOFF;
				prevMonth.className = '';
			}
			else{
				prevMonth.src = IMG_ROOT + prevMonthON;
				prevMonth.className = 'monthButton';
			}
		}
	}
	this.writeMonthLabel = writeMonthLabel;

	function setMaxVal()
	{
		this.MaxVal = 0;
		for(var i = 0; i < this.ChartData.length; i++)
		{
			if(this.ChartData[i] && this.ChartData[i].TotalPrice > this.MaxVal)
				this.MaxVal = this.ChartData[i].TotalPrice;
		}
		
		var power = parseInt((Math.log(this.MaxVal))/(Math.log(10))) - 1;
		var factor = (power == 0 ? 5 : Math.pow(10, power));
		this.MaxVal =  Math.ceil(this.MaxVal/(steps*factor))*(steps*factor);
	}
	this.setMaxVal = setMaxVal;

	function getYAxisHtml()
	{
		var yAxisHtml = '';
		if(isNaN(this.MaxVal)){ return '&nbsp;'; }
		
		var interval = this.MaxVal/steps;
		for(var i = steps; i > 0; i--)
		{
			var val = parseInt(interval*i);
			yAxisHtml += '<div class="horizBar">' + val + '&nbsp;</div>';
		}
		return yAxisHtml;
	}
	this.getYAxisHtml = getYAxisHtml;

	function getChartHtml(m, y)
	{
		var barHtml = '<table class="chartTable" cellpadding="0" cellspacing=0><tr>';
		var labelHtml = '<table class="labelTable" cellpadding=0 cellspacing=0><tr>';
		var maxHeight = steps*40;
		for(var i = 0; i < this.ChartData.length; i++)
		{
			var height = 0;
			var date = new Date(y, (m-1), (i+1));
			var seldate = (SelectedBarDate ? new Date(SelectedBarDate) : null);
			var item = this.ChartData[i];
			var barCSS = 'bar';
			var barDiv = '&nbsp;';
			var extraProps = '';

			day = date.getDay();
			if(day == 6 || day == 0){
				barCSS = 'weekendBar';
				var brd = (day == 0 ? 'border-right:' + wkendBorder : 'border-left:' + wkendBorder); 
				extraProps += ' style="' + brd + '"';
			}
			
			if(seldate && date.toDateString() == seldate.toDateString()){
				barCSS = 'dayBar';
			}

			if(item != null){
				height = Math.ceil(maxHeight*(item.TotalPrice/this.MaxVal));
				if(height > 0){
					barDiv = '<div class="' + barCSS + '"';
					barDiv += ' style="height:' + height + 'px;"';
					barDiv += ' onmouseover="showTooltip(this, ' + this.ID + '.GetTooltipHtml(' + i + '), event)"';
					barDiv += ' onclick="SelectDay(this,\'' + date.toDateString() + '\');FetchFlexibleDayFlights(' + date.getDate() + ',' + item.ResultType + ',' + item.Way + ');"></div>';
				}
			}
			
			labelHtml += '<td class="labelCell">' + date.getDate() + '</td>';
			barHtml += '<td class="barCell"' + extraProps + '>' + barDiv + '</td>';
		}
		
		labelHtml += '</tr></table>';
		barHtml += '</tr></table>';

		return (barHtml + labelHtml);
	}
	this.getChartHtml = getChartHtml;
}

function SelectDay(bar, date){
	if(SelectedBarDate != date){
		SelectedBarDate = date;
	}
}

function GetItemById(id){
	return (document.all ? document.all[id] : document.getElementById(id));
}