// JavaScript Document

if(!Idea)
	var Idea = {}
if(!Idea.Booking)
	Idea.Booking = {}

Idea.DateSelector = function(type)
{
	this.currentDate = new Date();
	this.dayDropdown = null;
	this.yearMonthDropdown = null;
	this.textInput = null;
	this.datePicker = null;
	this.datePickerID = null;
	this.datePickerOpener = null;
	this.yearFormat = 'yyyy';
	this.monthsNames = ['sty','lut','mar','kwi','maj','cze','lip','sie','wrz','paz','lis','gru'];
	this.daysNames = ['nie','pon','wto','sro','czw','pia','sob'];
	this.todayText = 'Dzisiaj';
	this.daysNamesAvailable = true;
	this.MonthsNamesAvailable = true;
	this.synchronizedChildren = false;
	this.synchronizedParent = false;
	this.dateType = type;				// dropdowns / datepicker+dropdowns / datepicker+txt 
}

Idea.DateSelector.prototype = { 
	init:function()
	{
		this.setDate(this.currentDate);
		this.attachEvents();
	},
	renderDays:function(startDate)
	{
		var curDate = new Date(startDate);
		var daysTab = new Array();
		var daysIndexTab = new Array();
		for(var i=curDate.getDate(); i<=this.chckDaysInMonth(curDate.getFullYear(),curDate.getMonth()); i++)
		{
			if(i<10)
				index = 0;
		    else 
				index = '';
			daysTab.push(index+''+i);
			curDate.setDate(i);
			daysIndexTab.push(curDate.getDay());	
		}
		return [daysTab,daysIndexTab];
	},
	populateMonths:function(year,startIndex,lastIndex)
	{
		var monthTab = new Array();
		if(!lastIndex)
			var lastIndex = 11;
		for(var i=startIndex; i<=lastIndex; i++)
		{			
			if(i<9)
				index = 0;
		    else 
				index = '';
			monthTab.push(year+'-'+index+''+(i+1));
		}
		return monthTab;
	},
	renderYearMonths:function(startDate)
	{
		var parseDate = new Date(startDate);
		var monthTab = this.populateMonths(this.formatYear(parseDate.getFullYear()),parseDate.getMonth());
		if(monthTab.length<12)
		{
			parseDate.setFullYear((parseDate.getFullYear()+1));
			var monthTab1 = this.populateMonths(this.formatYear(parseDate.getFullYear()),0,(11-monthTab.length));
			monthTab = (monthTab+','+monthTab1).split(',');
		}
		return monthTab;
	},
	clearDropdown:function(dropdown)
	{
		for(var i=0; i<dropdown.options.length; i++)
			{
				dropdown.remove(i);
			}
	},
	formatYear:function(fullYear)
	{
		var yr = fullYear.toString();
		if(this.yearFormat.toLowerCase() == 'yy')
		{
			
			return yr.substring(2,4)
		}
		if(this.yearFormat.toLowerCase() == 'yyyy')
		{
			return yr;
		}
	},	
	populateDateDropDown:function(date)
	{
		this.clearDropdown(this.dayDropdown);
		var d = this.renderDays(date);
		var days = d[0];	
		var daysIndex = d[1];
		for (var i=0; i<days.length; i++)
		{
			this.dayDropdown.options[i] = new Option();
			this.dayDropdown.options[i].value = days[i];
			if(this.daysNamesAvailable)
				this.dayDropdown.options[i].text = this.translateDays(days[i],daysIndex[i]);
			else
				this.dayDropdown.options[i].text = days[i];
		}
	},
	populateDropdowns:function(date)
	{
		this.populateDateDropDown(date);
		var monthsYears = this.renderYearMonths(date);
		for (var i=0; i<monthsYears.length; i++)
		{
			this.yearMonthDropdown.options[i] = new Option();
			this.yearMonthDropdown.options[i].value = monthsYears[i];
			if(this.MonthsNamesAvailable)
				this.yearMonthDropdown.options[i].text = this.translateMonths(monthsYears[i])
			else
				this.yearMonthDropdown.options[i].text = monthsYears[i];
		}
	},
	populateInput:function(date)
	{
		var date = new Date(date);
		var m = date.getMonth()+1;
		var d = date.getDate();
		if(m<10)
			m = '0'+m;
		if(d<10)
			d = '0'+d;
		
		this.textInput.currentDate = date;
		if(this.MonthsNamesAvailable)
		{
			this.textInput.value = d+' '+this.translateMonths(this.formatYear(date.getFullYear())+'-'+m);
		}
		else
			this.textInput.value = this.formatYear(date.getFullYear())+'-'+m+'-'+d;
	},
	translateDays:function(day,index)
	{
		return day+' '+this.daysNames[index];
	},
	translateMonths:function(date)
	{
		var year = date.split('-')[0];
		var month = date.split('-')[1];
		return this.monthsNames[(parseFloat(month)-1)]+' '+year;
	},
	zeroDate:function(date)
	{
		return date.setDate(1);
	},
	createDatePicker:function()
	{
		this.datePicker = new CalendarPopup(this.datePickerID);
		this.datePicker.setTodayText(this.todayText);
		this.datePicker.setMonthNames(this.monthsNames);
		this.datePicker.setDayHeaders(this.daysNames);
		var $this = this;
		this.datePickerOpener.onclick = function()
			{
				var didi = $this.formatDate($this.currentDate);
				$this.datePicker.select($this,this.name,'yyyy-MM-dd',didi); return false;
			}
	},
	attachEvents:function()
	{
		var $this = this;
		if(this.dateType == 'dropdowns' || this.dateType == 'datepicker+dropdowns')
		{
			this.yearMonthDropdown.onchange = function()
			{
				var v = this.options[this.selectedIndex].value.split('-');
				if(v[0].length < 4)
					v[0] = '20'+v[0];
				var date = new Date(v[0],(parseFloat(v[1])-1),1);
				$this.populateDateDropDown(date);
				$this.upadteCurrentDate();
				$this.synchronize();
			}
			this.dayDropdown.onchange = function()
			{
				$this.upadteCurrentDate();
				$this.synchronize();
			}
			if(this.datePickerID && this.datePickerOpener)
			{
				this.createDatePicker();
			}
		}
		if(this.dateType == 'datepicker+txt')
		{
			this.textInput.onchange = function()
			{
				$this.upadteCurrentDate();
				if($this.synchronizedObj)
					$this.synchronize()
			}
			if(this.datePickerID && this.datePickerOpener)
			{
				this.createDatePicker();
				this.textInput.onclick = function()
				{
					var didi = $this.formatDate($this.currentDate);
					$this.datePicker.select($this,$this.datePickerOpener.name,'yyyy-MM-dd',didi); return false;
				}
			}
		}
	},
	upadteCurrentDate:function(){
		this.currentDate = this.getDate();
	},
	getDate:function()
	{
		var date = this.getURLDate().split('-');	
		return new Date(date[0],(parseFloat(date[1])-1),date[2])
	},
	getURLDate:function()
	{
		switch(this.dateType)
		{
			case 'dropdowns':
				var d = this.dayDropdown.options[this.dayDropdown.selectedIndex].value;
				var my = this.yearMonthDropdown[this.yearMonthDropdown.selectedIndex].value.split('-');
				if(my[0].length < 3)
					my[0] = '20'+my[0];
				return my[0]+'-'+my[1]+'-'+d;
			break;
			case 'datepicker+dropdowns':
				var d = this.dayDropdown.options[this.dayDropdown.selectedIndex].value;
				var my = this.yearMonthDropdown[this.yearMonthDropdown.selectedIndex].value.split('-');
				if(my[0].length < 3)
					my[0] = '20'+my[0];
				return my[0]+'-'+my[1]+'-'+d;
			break;
			case 'datepicker+txt':
				var date = this.textInput.currentDate;
				var m = date.getMonth()+1;
				var d = date.getDate();
				if(m<10)
					m = '0'+m;
				if(d<10)
					d = '0'+d;
				return date.getFullYear()+'-'+m+'-'+d;
			break;
		}
	},
	setDate:function(date)
	{
		switch(this.dateType)
		{
			case 'dropdowns':
				this.populateDropdowns(date);
			break;
			case 'datepicker+dropdowns':
				this.populateDropdowns(date);
			break;
			case 'datepicker+txt':
				this.populateInput(date);
			break;
		}
		this.currentDate = date;
	},
	setSynchronized:function(selector)
	{
		this.synchronizedChildren = selector;
		this.synchronizedChildren.synchronizedParent = this;
		this.synchronize();
	},
	synchronize:function()
	{
		if(this.synchronizedChildren)
			{
				var syncDate = new Date(this.currentDate)
				var syncChildren = this.synchronizedChildren;
				var dd = (this.currentDate.getDate()+1);
				syncChildren.setDate(syncDate.setDate(dd));
				if(syncChildren.datePicker!=null)
				{
					var d = this.formatDate(syncDate);
					syncChildren.datePicker.addDisabledDates(d);
				}
					
			}
		if(this.synchronizedParent)
		{
			var sp = this.synchronizedParent;
			if(this.currentDate<=sp.currentDate)
			{
				var sd = new Date(sp.currentDate);
				if(this.datePicker!=null)
				{
					var d = this.formatDate(sd);
					this.datePicker.addDisabledDates(d);
				}
					
				this.setDate(sd.setDate(sp.currentDate.getDate()+1))
			}
		}
	},
	setDPDate:function(date)
	{
		this.setDate(date);
		this.synchronize();	
	},
	formatDate: function(date,splitter)
	{
		date = new Date(date);
		d = date.getDate();
		m = date.getMonth()+1;
		y = date.getFullYear();
		var sp = '-';
		if(splitter)
		{
			sp = splitter;
		}
		if(d<10)
			d='0'+d;
		if(m<10)
			m='0'+m;
		var formatedDate = y+sp+m+sp+d;
		return formatedDate;
	},
	chckDaysInMonth:function(year,month){
		var intMonth = month;
		var intYear = year;
		
		var dteMonth = new Date(intYear,intMonth);//
		var intDaysInMonth = 28;
		var blnDateFound = false;
		
		while (!blnDateFound)
		{
			dteMonth.setDate(intDaysInMonth+1);
			var intNewMonth = dteMonth.getMonth();
			
			if (intNewMonth != intMonth)
			  blnDateFound = true;
			else
			  intDaysInMonth++;
		}
		return intDaysInMonth;
	}
}


