var calendarIdOkol='';
var calendarSustenance=null;
var calendarOfferLength=null;
var calendarOfferWeeks=null;
var calendarTableShift=0;
var currentMonth=[5,6];
var currentYear=[2009,2009];
var nextMonth="";
var previousMonth="";
var calendarWeeks=[];

var calendarElements=[];
calendarElements[0]=[];
calendarElements[1]=[];
calendarElements[2]=[];
calendarElements[3]=[];
calendarElements[4]=[];

function initializeCalendar(){
	var calendarTable=document.getElementById('offerReservationCalendarTable');
	var cells=calendarTable.getElementsByTagName('td');
	x=0;
	m=0;
	for(i=7;i<cells.length;i++){
		calendarElements[x][m]=[];
		calendarElements[x][m]['main']=cells[i];
		calendarElements[x][m]['offers']=[];
		divs=cells[i].getElementsByTagName('div');
		for(z=0;z<divs.length;z++){
			if(divs[z].className=='dayNumber'){
				calendarElements[x][m]['dayNumber']=divs[z];
			}
			if(divs[z].className=='offer'){
				calendarElements[x][m]['offers'].push(divs[z]);
			}
		}
		m++;
		if((i+1)%7==0){
			x++;
			m=0;
		}
	}
}

function startOfferCalendar(){
	var id_oferty='';
	var id_biura='';
	var id_okol='';
	var dzien='';

	for(i=0;i<calendarElements.length;i++){
		for(z=0;z<calendarElements[i].length;z++){
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace((/loading/g,''),'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/today/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/lowestPrice/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/day/g,'');

			calendarElements[i][z]['main'].className+=" loading";
		}
	}

	if(History.currentState.paramsTable['id_oferty']['value']){
		id_oferty=History.currentState.paramsTable['id_oferty']['value'];
	}else{
		id_oferty=History.currentState.paramsTable['id_oferty']['defaultValue'];
	}

	if(History.currentState.paramsTable['id_biura']['value']){
		id_biura=History.currentState.paramsTable['id_biura']['value'];
	}else{
		id_biura=History.currentState.paramsTable['id_biura']['defaultValue'];
	}

	if(calendarIdOkol){
		id_okol=calendarIdOkol;
	}else{
		if(History.currentState.paramsTable['id_okol']['value']){
			id_okol=History.currentState.paramsTable['id_okol']['value'];
		}else{
			id_okol=History.currentState.paramsTable['id_okol']['defaultValue'];
		}
	}

	if(History.currentState.paramsTable['dzien']['value']){
		dzien=History.currentState.paramsTable['dzien']['value'];
	}else{
		dzien=History.currentState.paramsTable['dzien']['defaultValue'];
	}

	shift=calendarTableShift;

	loadCalendar(id_oferty,id_biura,id_okol,dzien,'','',shift);
}


var calendarWeeks=[];

function loadCalendar(id_oferty,id_biura,id_okol,dzien,weekFrom,weekTo,shift){
	if(!calendarWeeks[id_okol]){
		calendarWeeks[id_okol]=[];
	}
	calendarIdOkol=id_okol;
	weekNum=shift;

	var callback =
		{
			success: function(o) {
				weeks=o.responseXML.getElementsByTagName('week');
				for(i=0;i<weeks.length;i++){
					week=[];
					week['id']=weeks[i].getAttribute('id');
					week['number']=weeks[i].getAttribute('number');
					week['month']=weeks[i].getAttribute('month');
					week['year']=weeks[i].getAttribute('year');
					week['days']=[];

					days=weeks[i].getElementsByTagName('day');
					for(z=0;z<days.length;z++){
						day=[];
						day['date']=days[z].getAttribute('date');
						day['number']=days[z].getAttribute('number');
						day['month']=days[z].getAttribute('month');
						day['year']=days[z].getAttribute('year');
						day['offers']=[];
						if(days[z].getAttribute('today')){
							day['today']=days[z].getAttribute('today');
						}
						week['days'].push(day);


						offers=days[z].getElementsByTagName('offer');
						for(m=0;m<offers.length;m++){
							offer=[];
							offer['url']=offers[m].getAttribute('url');
							offer['length']=offers[m].getAttribute('length');
							offer['weeks']=offers[m].getAttribute('weeks');
							offer['price']=offers[m].getAttribute('price');
							offer['catering']=offers[m].getAttribute('catering');
							offer['cateringFull']=offers[m].getAttribute('cateringFull');
							day['offers'].push(offer);
						}
					}
					calendarWeeks[id_okol][weekNum]=week;
					weekNum++;
				}
				//alert(print_r(calendarWeeks[id_okol]))
				generateCalendar(id_okol);
			},
			failure: function(o) {}
		};
	if(document.getElementById('ofertaReservationContent')){
		YAHOO.util.Connect.asyncRequest('POST', '/offerReservation-offerReservationCalendarAjax.xml', callback, "id_oferty="+id_oferty+"&id_biura="+id_biura+"&id_okol="+id_okol+"&dzien="+dzien+"&weekFrom="+weekFrom+"&weekTo="+weekTo);
	}
}



function generateCalendar(id_okol){

	for(i=0;i<calendarElements.length;i++){
		generateCalendarWeek(id_okol,i);
	}

	chooseLowestPrice(id_okol);
	chooseToday(id_okol);
	if(calendarWeeks[id_okol][calendarTableShift] && calendarWeeks[id_okol][calendarTableShift+4]){

		//var date=calendarWeeks[id_okol][calendarTableShift]['days'][6]['date'];
		//alert(print_r(calendarWeeks[id_okol][calendarTableShift]));
		/* for(date in this.weeks[this.shift]['days']){
			currentMonth[0]=date.split('-')[1]*1-1;
			currentYear[0]=date.split('-')[0]*1;
		}
		for(date in this.weeks[this.shift+4]['days']){
			currentMonth[1]=date.split('-')[1]*1-1;
			currentYear[1]=date.split('-')[0]*1;
			break;
		}*/
		if(calendarWeeks[id_okol][calendarTableShift]['days'] && calendarWeeks[id_okol][calendarTableShift+4]['days']){
			currentMonth[0]=calendarWeeks[id_okol][calendarTableShift]['days'][6]['date'].split('-')[1]*1-1;
			currentYear[0]=calendarWeeks[id_okol][calendarTableShift]['days'][6]['date'].split('-')[0]*1;
			currentMonth[1]=calendarWeeks[id_okol][calendarTableShift+4]['days'][0]['date'].split('-')[1]*1-1;
			currentYear[1]=calendarWeeks[id_okol][calendarTableShift+4]['days'][0]['date'].split('-')[0]*1;
		}

		if(currentMonth[0] == currentMonth[1]){
			nextMonth=currentMonth[0]+1;
			previousMonth=currentMonth[0]-1;
		}else{
			nextMonth=currentMonth[1];
			previousMonth=currentMonth[0];
		}

		document.getElementById('previousMonth').innerHTML=getMonthName(previousMonth);
		document.getElementById('nextMonth').innerHTML=getMonthName(nextMonth);
		if(currentMonth[0] == currentMonth[1]){
			document.getElementById('currentMonth').innerHTML=getMonthName(currentMonth[0])+' '+currentYear[0];
		}else{
			document.getElementById('currentMonth').innerHTML=getMonthName(currentMonth[0])+'/'+getMonthName(currentMonth[1])+' '+currentYear[0];
		}

	}

}

function chooseLowestPrice(id_okol){
	var minPrice=1000000;
	var minWeek=-1;
	var minDay=-1;

	for(i=0;i<calendarElements.length;i++){
		for(z=0;z<calendarElements[i].length;z++){
			if(calendarWeeks[id_okol][i+calendarTableShift]){
				offers=getCalendarOffers(calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['offers'],calendarSustenance,calendarOfferWeeks);
				for(m=0;m<offers.length;m++){
					if((1*offers[m]['price'])<minPrice){
						minWeek=i;
						minDay=z;
						minPrice=(1*offers[m]['price']);
					}
				}
			}
		}
	}

	if(minWeek>=0){
		calendarElements[minWeek][minDay]['main'].className+=" lowestPrice";
	}
}

function chooseToday(id_okol){
	for(i=0;i<calendarElements.length;i++){
		for(z=0;z<calendarElements[i].length;z++){
			if(calendarWeeks[id_okol][i+calendarTableShift]){
				if(calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['today']){
					calendarElements[i][z]['main'].className+=" today";
				}
			}
		}
	}
}


function generateCalendarWeek(id_okol,i){
	for(z=0;z<calendarElements[i].length;z++){
		calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/loading/g,'');
		calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/today/g,'');
		calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/lowestPrice/g,'');
		calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/day/g,'');

		calendarElements[i][z]['main'].className+=" loading";
	}

	for(z=0;z<calendarElements[i].length;z++){
		if(calendarWeeks[id_okol][i+calendarTableShift]){
			//calendarElements[i][z]['dayNumber'].innerHTML='<div style="padding-top:3px;padding-right:8px;text-align:right;color:#666666">';
			//calendarElements[i][z]['dayNumber'].innerHTML+=calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['number'];
			//calendarElements[i][z]['dayNumber'].innerHTML+='</div>';
			if(calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['number']=='1'){
				calendarElements[i][z]['dayNumber'].innerHTML='<div style="padding:3px 8px 4px 0px;background:#d2e2f1;color:#ffffff;float:right;zoom:1;position:relative">'+calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['number']+'</div><div style="padding:3px 0px 4px 0px;text-align:center;background:#d2e2f1;color:#ffffff;">&nbsp;&nbsp;'+this.getMonthName(calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['month']-1)+'</div>';
			}else{
				calendarElements[i][z]['dayNumber'].innerHTML='<div style="padding-top:3px;padding-right:8px;text-align:right">'+calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['number']+'</div>';
			}
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/loading/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/today/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/lowestPrice/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/day/g,'');
			calendarElements[i][z]['main'].className+=" day";
			if(calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['today']){
				calendarElements[i][z]['main'].className+=" today";
			}

			offers=getCalendarOffers(calendarWeeks[id_okol][i+calendarTableShift]['days'][z]['offers'],calendarSustenance,calendarOfferWeeks);

			if(offers[2]){
				calendarElements[i][z]['offers'][2].innerHTML='<a href="'+offers[2]['url']+'" class="color_blue hover_underline" target="_blank" style="font-weight:bold">'+offers[2]['price']+' zł</a> <img src="http://static.wakacje.pl/wakacje/images/mini/arrow.gif" alt="" /><br />';
				calendarElements[i][z]['offers'][2].innerHTML+='<span style="font-size:9px">'+offers[2]['length']+' dni, '+offers[2]['catering']+'</span>';
			}else{
				calendarElements[i][z]['offers'][2].innerHTML='';
			}

			if(offers[1]){
				calendarElements[i][z]['offers'][1].innerHTML='<a href="'+offers[1]['url']+'" class="color_blue hover_underline" target="_blank" style="font-weight:bold">'+offers[1]['price']+' zł</a> <img src="http://static.wakacje.pl/wakacje/images/mini/arrow.gif" alt="" /><br />';
				calendarElements[i][z]['offers'][1].innerHTML+='<span style="font-size:9px">'+offers[1]['length']+' dni, '+offers[1]['catering']+'</span>';
			}else{
				calendarElements[i][z]['offers'][1].innerHTML='&nbsp;<br />&nbsp;';
			}

			if(offers[0]){
				calendarElements[i][z]['offers'][0].innerHTML='<a href="'+offers[0]['url']+'" class="color_blue hover_underline" target="_blank" style="font-weight:bold">'+offers[0]['price']+' zł</a> <img src="http://static.wakacje.pl/wakacje/images/mini/arrow.gif" alt="" /><br />';
				calendarElements[i][z]['offers'][0].innerHTML+='<span style="font-size:9px">'+offers[0]['length']+' dni, '+offers[0]['catering']+'</span>';
			}else{
				calendarElements[i][z]['offers'][0].innerHTML='&nbsp;<br />&nbsp;';
			}
		}else{
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/loading/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/today/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/lowestPrice/g,'');
			calendarElements[i][z]['main'].className=calendarElements[i][z]['main'].className.replace(/day/g,'');
			calendarElements[i][z]['main'].className+=" loading";
		}
	}
}

function getCalendarOffers(offers,catering,weeks){
	var i=0;
	var returnedOffers=[];
	for(c=0;c<offers.length;c++){
		if(  (catering==offers[c]['catering'] || (!catering))  &&  (weeks==offers[c]['weeks'] || (!weeks))  ){
			returnedOffers.push(offers[c]);
			i++;
			if(i==3){
				break;
			}
		}
	}
	return(returnedOffers);
}

function showNextWeek(){
	var id_oferty='';
	var id_biura='';
	var id_okol='';
	var dzien='';

	if(History.currentState.paramsTable['id_oferty']['value']){
		id_oferty=History.currentState.paramsTable['id_oferty']['value'];
	}else{
		id_oferty=History.currentState.paramsTable['id_oferty']['defaultValue'];
	}

	if(History.currentState.paramsTable['id_biura']['value']){
		id_biura=History.currentState.paramsTable['id_biura']['value'];
	}else{
		id_biura=History.currentState.paramsTable['id_biura']['defaultValue'];
	}


	for(i=0;i<calendarWeeks[calendarIdOkol].length;i++){
		if(calendarWeeks[calendarIdOkol][i]){
			numberLast=calendarWeeks[calendarIdOkol][i]['number'];
			yearLast=calendarWeeks[calendarIdOkol][i]['year'];
		}
	}
	for(i=(calendarWeeks[calendarIdOkol].length-1);i>=0;i--){
		if(calendarWeeks[calendarIdOkol][i]){
			numberFirst=calendarWeeks[calendarIdOkol][i]['number'];
			yearFirst=calendarWeeks[calendarIdOkol][i]['year'];
		}
	}


	if(calendarWeeks[calendarIdOkol][calendarTableShift+5]){
		calendarTableShift++;
		generateCalendar(calendarIdOkol);
	}else{
		calendarWeeks[calendarIdOkol].push(null);
		calendarWeeks[calendarIdOkol].push(null);
		calendarWeeks[calendarIdOkol].push(null);
		calendarWeeks[calendarIdOkol].push(null);
		calendarWeeks[calendarIdOkol].push(null);
		calendarTableShift++;
		loadCalendar(id_oferty,id_biura,calendarIdOkol,'',((1*numberLast)+1)+':'+yearLast,((1*numberLast)+5)+':'+yearLast,calendarTableShift+4);
		generateCalendar(calendarIdOkol);
	}
}

function showPreviousWeek(){
	var id_oferty='';
	var id_biura='';
	var id_okol='';
	var dzien='';

	if(History.currentState.paramsTable['id_oferty']['value']){
		id_oferty=History.currentState.paramsTable['id_oferty']['value'];
	}else{
		id_oferty=History.currentState.paramsTable['id_oferty']['defaultValue'];
	}

	if(History.currentState.paramsTable['id_biura']['value']){
		id_biura=History.currentState.paramsTable['id_biura']['value'];
	}else{
		id_biura=History.currentState.paramsTable['id_biura']['defaultValue'];
	}


	for(i=0;i<calendarWeeks[calendarIdOkol].length;i++){
		if(calendarWeeks[calendarIdOkol][i]){
			numberLast=calendarWeeks[calendarIdOkol][i]['number'];
			yearLast=calendarWeeks[calendarIdOkol][i]['year'];
		}
	}
	for(i=(calendarWeeks[calendarIdOkol].length-1);i>=0;i--){
		if(calendarWeeks[calendarIdOkol][i]){
			numberFirst=calendarWeeks[calendarIdOkol][i]['number'];
			yearFirst=calendarWeeks[calendarIdOkol][i]['year'];
		}
	}


	if(calendarWeeks[calendarIdOkol][calendarTableShift-1]){
		calendarTableShift--;
		generateCalendar(calendarIdOkol);
	}else{
		calendarWeeks[calendarIdOkol].unshift(null);
		calendarWeeks[calendarIdOkol].unshift(null);
		calendarWeeks[calendarIdOkol].unshift(null);
		calendarWeeks[calendarIdOkol].unshift(null);
		calendarWeeks[calendarIdOkol].unshift(null);
		calendarTableShift+=4;
		loadCalendar(id_oferty,id_biura,calendarIdOkol,'',((1*numberFirst)-5)+':'+yearFirst,((1*numberFirst)-1)+':'+yearFirst,calendarTableShift-4);
		generateCalendar(calendarIdOkol);
	}
}

function showNextMonth(){
	var id_oferty='';
	var id_biura='';
	var id_okol='';
	var dzien='';

	if(History.currentState.paramsTable['id_oferty']['value']){
		id_oferty=History.currentState.paramsTable['id_oferty']['value'];
	}else{
		id_oferty=History.currentState.paramsTable['id_oferty']['defaultValue'];
	}

	if(History.currentState.paramsTable['id_biura']['value']){
		id_biura=History.currentState.paramsTable['id_biura']['value'];
	}else{
		id_biura=History.currentState.paramsTable['id_biura']['defaultValue'];
	}



	numberLast=calendarWeeks[calendarIdOkol][calendarTableShift+4]['number'];
	yearLast=calendarWeeks[calendarIdOkol][calendarTableShift+4]['year'];

	numberFirst=calendarWeeks[calendarIdOkol][calendarTableShift]['number'];
	yearFirst=calendarWeeks[calendarIdOkol][calendarTableShift]['year'];


	//sprawdź, od jakiego tygodnia zaczyna się następny miesiąc
	var startWeek=getWeeksOfYearFromMonth(nextMonth,currentYear[1]);

	if(Math.abs(startWeek-numberLast)>5){
		startWeek+=53;
		var weeksToShift=4-(numberLast-startWeek);
	}else{
		var weeksToShift=4-(numberLast-startWeek);
	}
	if(weeksToShift>5){
		weeksToShift=5;
	}

	if(calendarWeeks[calendarIdOkol][calendarTableShift+4+weeksToShift]){
		calendarTableShift+=weeksToShift;
		generateCalendar(calendarIdOkol);
	}else{
		for(m=0;m<weeksToShift;m++){
			calendarWeeks[calendarIdOkol].push(null);
		}
		calendarTableShift+=weeksToShift;
		loadCalendar(id_oferty,id_biura,calendarIdOkol,'',((1*numberLast)+1)+':'+yearLast,((1*numberLast)+weeksToShift)+':'+yearLast,calendarTableShift+5-weeksToShift);
		generateCalendar(calendarIdOkol);
	}
}

function showPreviousMonth(){
	var id_oferty='';
	var id_biura='';
	var id_okol='';
	var dzien='';

	if(History.currentState.paramsTable['id_oferty']['value']){
		id_oferty=History.currentState.paramsTable['id_oferty']['value'];
	}else{
		id_oferty=History.currentState.paramsTable['id_oferty']['defaultValue'];
	}

	if(History.currentState.paramsTable['id_biura']['value']){
		id_biura=History.currentState.paramsTable['id_biura']['value'];
	}else{
		id_biura=History.currentState.paramsTable['id_biura']['defaultValue'];
	}



	numberLast=calendarWeeks[calendarIdOkol][calendarTableShift+4]['number'];
	yearLast=calendarWeeks[calendarIdOkol][calendarTableShift+4]['year'];

	numberFirst=calendarWeeks[calendarIdOkol][calendarTableShift]['number'];
	yearFirst=calendarWeeks[calendarIdOkol][calendarTableShift]['year'];


	//sprawdź, od jakiego tygodnia zaczyna się następny miesiąc

	var bool=false;
	for(k=0;k<7;k++){
		if(calendarWeeks[calendarIdOkol][calendarTableShift]['days'][k]['number']==1){
			bool=true;
		}
	}

	var startWeek=this.getWeeksOfYearFromMonth(previousMonth,currentYear[0]);
	var weeksToShift=numberFirst-startWeek;

	if(calendarWeeks[calendarIdOkol][calendarTableShift-weeksToShift+1]){
		calendarTableShift=calendarTableShift-weeksToShift;
		generateCalendar(calendarIdOkol);
	}else{
		for(m=0;m<weeksToShift;m++){
			calendarWeeks[calendarIdOkol].unshift(null);
		}
		calendarTableShift=0;
		//alert(numberFirst);
		loadCalendar(id_oferty,id_biura,calendarIdOkol,'',((1*numberFirst)-weeksToShift)+':'+yearFirst,((1*numberFirst)-1)+':'+yearLast,0);
		generateCalendar(calendarIdOkol);
	}

}


function unselectAllOfferLengths(){
	var elements=document.getElementById('offerReservationCalendarOfferLengths').getElementsByTagName('div');
	for(i=0;i<elements.length;i++){
		if((elements[i].className=='calendarOfferTypeSelected')||(elements[i].className=='calendarOfferType')){
			elements[i].className='calendarOfferType';
		}
	}
}

function unselectAllSustenances(){
	var elements=document.getElementById('offerReservationCalendarSustenances').getElementsByTagName('div');
	for(i=0;i<elements.length;i++){
		if((elements[i].className=='calendarOfferTypeSelected')||(elements[i].className=='calendarOfferType')){
			elements[i].className='calendarOfferType';
		}
	}
}

function unselectAllCities(){
	var elements=document.getElementById('bookmarksCitiesCalendar').getElementsByTagName('div');
	for(i=0;i<elements.length;i++){
		if((elements[i].className=='zakladkaBookmarkSelected')||(elements[i].className=='zakladkaBookmark')){
			elements[i].className='zakladkaBookmark';
		}
	}
}



this.getWeeksOfYearFromMonth=function(month,year){
		if(month==-1){
			month=11;
			year--;
		}
		if(month==12){
			month=0;
			year++;
		}

		daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
	      daysInMonths[1] = 29;
	    else
	      daysInMonths[1] = 28;

		var numberOfDays=0;
		for(var i=0;i<month;i++){
			numberOfDays+=daysInMonths[i];
		}

		var firstDayOfYear=new Date(year, 0, 0);
		var newYear=firstDayOfYear.getDay();
		daysInFirstWeek=((7-newYear)%7);

		var weekFrom=Math.floor((numberOfDays-daysInFirstWeek)/7);
		if(newYear<4){
			return weekFrom+2;
		}else{
			return weekFrom+1;
		}
	}

function getMonthName(month){
	month=month%12;
	months = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];

    return months[month];
}
