var calendar = {
	_year: (new Date()).getFullYear(),
	_month: (new Date()).getMonth()+1,
	_days: {},
	_city: '',
	colors: new Array( 'FF6F74', 'FFBE70', '0053ED', '33DD7A'),
	
	show: function() {
		document.getElementById('bg').style.width = (document.documentElement.offsetWidth+10)+'px';
		document.getElementById('bg').style.height = (document.documentElement.scrollHeight+10)+'px';
		
		document.getElementById('bg').style.display = 'block';
		request.html("/calendar/index/?year="+calendar._year+"&month="+calendar._month+'&city='+calendar._city, function(h) {
//		request.html("calendar.htm", function(h) {
			$("calendarbody").innerHTML = h;
			showandcenter($("calendar_main"));
			//document.forms.index.style.visibility = "hidden";
			/*$("calendariframe").style.display = "block";
			$("calendariframe").style.left = (parseInt($("calendar_main").style.left)+3)+"px";
			$("calendariframe").style.top = (parseInt($("calendar_main").style.top)+3)+"px";
			$("calendariframe").style.width = (parseInt($("calendar_main").clientWidth)-6)+"px";
			$("calendariframe").style.height = (parseInt($("calendar_main").clientHeight)-6)+"px";*/

			$("close").style.display = "block";
			$("close").style.left = (parseInt($("calendar_main").style.left) + parseInt($("calendar_main").clientWidth) - 50)+"px";
			$("close").style.top = (parseInt($("calendar_main").style.top)-20)+"px";
			
			var old = $("events").getElementsByTagName("div");
			var weeks = new Array();
			var cal = new Array();
			for (var i=old.length-1; i>=0; i--)
				$("events").removeChild(old[i]);
		
			var date = new Date();

			request.json("/calendar/data/?year="+calendar._year+"&month="+calendar._month+'&city='+calendar._city, function(rs) {
//			request.json("tour_list.txt", function(rs) {
				var n = 0;
				for (var i=0; i<rs.length; i++) {
					var dts = parseDate(rs[i].startdt);
					var dte = parseDate(rs[i].enddt);
					var dtem = parseDate(rs[i].menddt);
					
					//td_start = 1*rs[i].startdt.substr(8,2);
					//td_end = 1*rs[i].enddt.substr(8,2);
					if (weeks[dts.getWeekNumber()] == null)
						weeks[dts.getWeekNumber()] = 0;
					/*else
						weeks[dts.getWeekNumber()] +=16;*/
					
					//var pos_left = 40 + (dts.getWeekDay()-1)*80;// - 2*(dts.getWeekDay()-1);
					var pos_top_abs = 148 + (dts.getWeekNumber()-1)*58 + weeks[dts.getWeekNumber()];
					
					//alert(weeks);

					//$('td'+td_start).style.bgcolor = "#dddddd";

					days = dtem.getDate() - dts.getDate() + 1;
					num_weeks = Math.ceil((days + dts.getWeekDay()-1)/7);
					//alert(days + ' '+ (dts.getWeekDay()) +' ' + num_weeks);
					z = dts.getDate();
					//alert(z+' :: '+dtem.getDate());
					flag = false; level = null;
					
					y = 1;
					while(y < 4)
					{
						if (!cal[dts.getDate()] || !cal[dts.getDate()][y])
						{	
							level = y;
							break;
						}
						y++;
					}
					if (level!= null)
					{
						flag = true;
						z = dts.getDate();
						while (z < (dtem.getDate() + 1))
						{
							if (!cal[z])
								cal[z] = new Array();
							cal[z][level] = 1
							z++;
						}
					}
					
					if (flag == true)
					{
						k = 0;
						start_day = dts.getWeekDay();
						
						while (k < num_weeks)
						{
							extra = null;
                            
                            pos_left = 20 + (start_day -1)*80 - 2*(start_day-1);
							if ((start_day + days) < 9)
							{
									width = ((dtem.getWeekDay() - start_day+1)*79);
									pos_top = pos_top_abs + k*58 + ((level - 1) * 16);
                                    if (k> 0)
                                        extra = 'right';
                                    
							}
							else 
							{
									if (k> 0)
                                        extra = 'none';
                                    else
                                        extra = 'left';
                                    width = (8 - start_day)*79;
									days = days + start_day -7; 
									start_day = 1;
									pos_top = pos_top_abs + k*58 + ((level - 1) * 16);
							}
							//weeks[(dts.getWeekNumber() + k)] +=16;
							
							//alert();
							setTimeout("calendar.showTimeLine("+rs[i].id+", "+ k +", '"+rs[i].title+"', '"+rs[i].startdt+"-"+rs[i].enddt+"', "+pos_left+", "+pos_top+", "+width+", \'"+calendar.colors[n]+"\', \'"+extra+"\')", 10);
							
							//calendar.showTimeLine(rs[i].id, k, rs[i].title, rs[i].startdt+"-"+rs[i].enddt, pos_left, pos_top, width, calendar.colors[n]);
							k++;
						}
						
							n++;
							if (n > (calendar.colors.length -1))
								n=0;	
					}
					else 
					{
						s_day = dts.getDate();
						
						while (s_day < dtem.getDate())
						{
							//alert(dts.getFullYear()+'-'+dts.getMonth()+'-'+s_day);
							document.getElementById('td'+s_day+'-'+(dts.getMonth()+1)).innerHTML = "<a href='javascript:void(0)' onclick=\"calendar.showday('"+dts.getFullYear()+'-'+(dts.getMonth()+1)+'-'+s_day+"');return false;\">more ...</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+s_day;
							s_day++;
						}
					}
					/*if ((dte.getWeekDay() - dts.getWeekDay()+1)> 0)
						width = ((dte.getWeekDay() - dts.getWeekDay()+1)*79);
					else 
					{
						
						width = (8 - dts.getWeekDay())*79;
						
					}
						
					calendar.showTimeLine(rs[i].id, rs[i].title, rs[i].startdt+"-"+rs[i].enddt, pos_left, pos_top, width);*/
					

					
				}
			});
		});
	},
	showTimeLine: function( id, w_num, title, alt, pos_left, pos_top, width, color, extra){
		var tmp;
		tmp = document.createElement("div");
		tmp.innerHTML = "<a href=\"javascript:void(0)\" onclick=\"calendar.showevent("+id+");return false;\" title='"+title+" ("+alt+")'>&nbsp;"+title+"</a>";
		tmp.setAttribute("class","calendarevent");
		tmp.className = "calendarevent";
		tmp.id = "timeline"+id+w_num;
		tmp.style.left = pos_left+"px";
		tmp.style.top = pos_top+"px";
		tmp.style.width = width+"px";
		tmp.style.height = "15px";
		tmp.style.overflow = "hidden";
		tmp.style.background += ' #'+color;
		$("events").appendChild(tmp);
		Nifty("div#timeline"+id+w_num,"transparent medium "+extra);
	},
	close: function(){
		$("close").style.display = "none";
		$("calendariframe").style.display = "none";
		$("calendar_main").style.display = "none";
		document.getElementById('bg').style.display = 'none';
		document.forms.index.style.visibility = "visible";
		
	},
	
	showevent: function(id) {
		request.json("/calendar/detail/"+id, function(rs){
//		request.json("tour_detail.txt", function(rs){
		$("eventtitle").innerHTML = '<h2>'+rs.title+'</h2>';
		if (rs.image)
			$("eventdescr").innerHTML = '<img width ="253px" src="'+rs.image+'"/>'+rs.description;
		else
			$("eventdescr").innerHTML = rs.description;
		$("eventdescr").innerHTML += "<br/><b><a href="+rs.link+">Go to the travel</a></b>";
		});
	},
	
	showday: function(date) {
		request.json("/calendar/day/"+date+'?city='+calendar._city, function(rs){
//		request.json("tour_detail.txt", function(rs){
		$("eventtitle").innerHTML = rs.title;
		$("eventdescr").innerHTML = rs.description;
		});
	}
}


Date.prototype.getWeekDay = function() {
	var a = this.getDay();
	return a ? a : 7;
}
Date.prototype.getWeekNumber = function() {
	var a = this.getDate()-this.getWeekDay();
	return Math.ceil(a/7)+1;
}

function parseDate(str) {
	var d = new Date(str.substr(0,4), str.substr(5,2)-1, str.substr(8,2));
	return d;
}

