﻿function TimeControl()
{
	this.div = null;
	this.time = new Date();
	this.bHasTime = false;

	this.selectMonth = null;
	this.selectDay = null;
	this.inputTime = null;
	this.divTimeList = null;
	
	this.strDefaultTime = "--:--";

	var arrMonths = ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"];

	var me = this;
	
	var DaysInMonth = function(iYear, iMonth)
	{
		return 32 - new Date(iYear, iMonth, 32).getDate();
	}

	var FormatTime = function(time)
	{
		var str = time.getHours();
		str += ":";
		if(time.getMinutes() < 10)
			str += "0";
		str += time.getMinutes();
		return str;
	}
	
	this.SetDiv = function(div)
	{
		me.div = div;
	}

	this.SetTime = function(time)
	{
		me.time = time;
		me.Show();
	}
	this.GetTime = function()
	{
		return me.time;
	}
	
	this.HasTime = function()
	{
		return me.bHasTime;
	}

	this.SetTimePart = function(strTime)
	{
		var time = null;
		if(strTime == g_Babel.GetWord('Now'))
		{
			time = new Date();
		}
		else 
		{
			var iHours = NaN;
			var iMinutes = NaN;
			var iPos = strTime.indexOf(':');
			if(iPos > 0)
			{
				iHours = parseInt(strTime.substr(0, iPos), 10);
				iMinutes = parseInt(strTime.substr(iPos+1), 10);
			}
			else
			{
				if(strTime.length < 3)
				{
					iHours = parseInt(strTime);
					iMinutes = 0;
				}
				else if(strTime.length == 3)
				{
					iHours = parseInt(strTime.substr(0, 1), 10);
					iMinutes = parseInt(strTime.substr(1), 10);
				}
				else if(strTime.length == 4)
				{
					iHours =parseInt(strTime.substr(0, 2), 10);
					iMinutes = parseInt(strTime.substr(2), 10);
				}
			}
			if(iHours != null && !isNaN(iHours) && iMinutes != null && !isNaN(iMinutes))
			{
				time = new Date(2009, 03, 28, iHours, iMinutes, 0);
			}
		}
		if(time != null)
		{
			me.bHasTime = true;
			me.time.setHours(time.getHours(), time.getMinutes());
		}
		else
			me.bHasTime = false;
		var div = NewTag('div', me.div);
		me.FillTimeEdit();
/*		
		if(me.bHasTime)
			NewTextTag(FormatTime(me.time), div);
		else
			NewTextTag('Empty time', div);
*/
	}
	
	this.Reset = function()
	{
		me.time = new Date();
		me.bHasTime = false;
		me.Show();
	}

	this.FillMonthCombo = function()
	{
		while(me.selectMonth.firstChild)
			me.selectMonth.removeChild(me.selectMonth.firstChild);
		var date = new Date(me.time);
		date.setDate(1);
		for(var i=0; i<12; i++)
		{
			var option = NewTag('option', me.selectMonth)
			option.value = date.getFullYear().toString() + date.getMonth();
			NewTextTag(" " + date.getFullYear() +" "+ arrMonths[date.getMonth()] + " " , option);
			date.setMonth(date.getMonth() + 1);
		}
	}
	
	this.FillDayCombo = function()
	{
		while(me.selectDay.firstChild)
			me.selectDay.removeChild(me.selectDay.firstChild);

		var iMaxDay = DaysInMonth(me.time.getFullYear(), me.time.getMonth());
		for(var iDay = 1; iDay <= iMaxDay; iDay++)
		{
			var option = NewTag('option', me.selectDay);
			option.value = iDay;
			NewTextTag(" " + iDay + " ", option);
			//if(iDay == me.time.getDate())
			//	option.setAttribute("selected", "selected");
		}
		me.selectDay.selectedIndex = me.time.getDate() - 1;
	}
	
	this.FillTimeEdit = function()
	{
		if(me.bHasTime)
			me.inputTime.value = FormatTime(me.time);
		else
			me.inputTime.value = me.strDefaultTime;
	}

	this.SwitchTimeList = function()
	{
		if(me.divTimeList && me.divTimeList.parentNode)
			me.HideTimeList();
		else
			me.ShowTimeList();
	}

	this.HideTimeList = function()
	{
		if(me.divTimeList && me.divTimeList.parentNode)
			me.divTimeList.parentNode.removeChild(me.divTimeList);
		me.divTimeList = null;
	}
	
	this.ShowTimeList = function()
	{
		me.HideTimeList();
		var input = me.inputTime;
		me.divTimeList = NewTag ('div',document.body);
		me.divTimeList.className = "AddressResult";
		me.divTimeList.style.position = "absolute";
		me.divTimeList.style.top = (GetAbsLayerTop(input)+GetLayerHeight(input)) + "px";
		me.divTimeList.style.left = (GetAbsLayerLeft(input)) + "px";
		me.divTimeList.style.width = (GetLayerWidth(input)-1 + 20) + "px";
		me.divTimeList.style.zIndex = 2003;

		var SetOnClick = function(a, str, i)
		{
			a.onclick = function()
			{
				me.inputTime.value = str;
				me.SetTimePart(str);
//				me.SetTrafficTime();
				me.HideTimeList();
			}
			//AddEvent(a, "focus", me.KillTimer);
		}

		var iHour=0;
		var str = "";
		var date = new Date();
		var iTop;

		for(i=-1; i<24; i++)
		{
			a = NewTag('a', me.divTimeList);
			a.setAttribute('href', 'javascript:void(0)');
			a.className = "AddressResult";
			a.style.zIndex = "5";
			if(i==-1)
			{
				str = g_Babel.GetWord("Now");
			}
			else
			{
				if(i<10)
					str = "0" + i +":00";
				else
					str = i + ":00";
			}
			SetOnClick(a, str, i);
			NewTextTag(str, a);
		}
		if(GetLayerHeight(me.divTimeList) > 105)
		{
			me.divTimeList.style.height = "105px";
			me.divTimeList.style.overflowY = "scroll";
			//me.divTimeList.scrollTop = iTop;
		}
	}

	this.Show = function()
	{
		if(me.div)
		{
			while(me.div.firstChild)
				me.div.removeChild(me.div.firstChild);

			var div = NewTag('div', me.div);
			div.className = 'combobox';

			me.selectMonth = NewTag('select', div);
			me.selectMonth.className = "monthcombo";
			me.FillMonthCombo();
			AddEvent(me.selectMonth, "change", me.OnMonthChanged);

			me.selectDay = NewTag('select', div);
			me.selectDay.className = "daycombo";
			me.FillDayCombo();
			AddEvent(me.selectDay, "change", me.OnDayChanged);

			me.inputTime = NewTag('input', div);
			me.inputTime.setAttribute('maxlength', 5);
			me.inputTime.className = "timecombo";
			AddEvent(me.inputTime, "blur", me.OnTimeBlur);
			AddEvent(me.inputTime, "focus", me.OnTimeFocus);
			AddEvent(me.inputTime, "keypress", me.OnTimeKeyPress);
			me.FillTimeEdit();

			var a = NewTag('a', div);
			a.setAttribute('href', 'javascript:void(0)');
			a.className = "timecombo";
			AddEvent(a, "click", me.SwitchTimeList);
			var img = NewTag('img', a);
			SetImage(img, "design/COMBOBOX.gif", 15, 14, 'V');
		}
	}
	
	
	this.OnMonthChanged = function()
	{
		var str = me.selectMonth.options[me.selectMonth.selectedIndex].value;
		var year = parseInt(str.substr(0, 4), 10);
		var month = parseInt(str.substr(4), 10);

		var str = me.selectDay.options[me.selectDay.selectedIndex].value;
		var day = parseInt(str, 10);
		if(day > DaysInMonth(year, month))
			day = DaysInMonth(year, month);

		me.time.setFullYear(year, month, day);
		me.FillDayCombo();
	}

	this.OnDayChanged = function()
	{
		var str = me.selectDay.options[me.selectDay.selectedIndex].value;
		var day = parseInt(str, 10);
		me.time.setDate(day);
	}
	
	this.OnTimeFocus = function()
	{
		if(me.inputTime.value == me.strDefaultTime)
			me.inputTime.value = "";
		me.HideTimeList();
	}
	this.OnTimeBlur = function()
	{
		if(me.inputTime.value == "")
			me.inputTime.value = me.strDefaultTime;
		me.SetTimePart(me.inputTime.value);
	}
	
	this.OnTimeKeyPress = function(pEvent)
	{
		if(pEvent == null)
			pEvent = window.event;
		if(pEvent.keyCode==13)
		{
			me.SetTimePart(me.inputTime.value);
			me.HideTimeList();
		}

	}
	
}

