var wdm_cal = {

	minMonth:'',
	maxMonth:'',
	monthNames:'',
	weekDays:'',
	

	load_month: function(date)
	{
		var year,month,mark_day=0,tmp,next_gen,prev_gen;


		if(!date){
			now=new Date();
			year = now.getYear();
			if (year < 1000){year+=1900}
			
			month=now.getMonth(); 
			mark_day=now.getDate();
			now=null;
			date = year+'-'+this.zero(month+1);
		}else{
			tmp = date.split('-');

			year=tmp[0]-1+1;
			month=tmp[1]-1;//ff 3 parseInt('08')=0

			if(tmp.length>2){
				mark_day=tmp[2];
				date=tmp[0]+'-'+tmp[1];
			}
		}

		var lastDay=new Array(31,(year%4==0)?29 : 28,31,30,31,30,31,31,30,31,30,31)[month];
		var firstDayInstance = new Date(year, month, 1);
		var firstDay = firstDayInstance.getDay();

		if(firstDay==0)firstDay=7;

		firstDayInstance = null;
		
		var prev_month=this.prevMonth(date);
		var next_month=this.nextMonth(date);


		if(  this.maxMonth >= next_month )next_gen='wdm_cal.load_month(\''+next_month+'\')';
		if(  this.minMonth <= prev_month )prev_gen='wdm_cal.load_month(\''+prev_month+'\')';	

		var html = '<TABLE id="wdm_clndr" cellspacing="1" cellpadding="0">';
		html += '<TH colspan="7" class="header">';
		if(prev_gen)html+= '<span title="'+prev_month+'" class="monthnav" ondoubleclick="'+prev_gen+'" onclick="'+prev_gen+'">&nbsp;&lt;&nbsp;</span>'
		html += '<select onchange="wdm_cal.load_month(this.value)">'+this.monthSelect(date)+'</select>';
		if(next_gen)html+= '<span title="'+next_month+'" class="monthnav" ondoubleclick="'+next_gen+'" onclick="'+next_gen+'">&nbsp;&gt;&nbsp;</span>'
		html += '</TH>';
		
		var openCol =  '<TH class="weekdays">'
		var closeCol = '</TH>'
		
		
		
		html += '<TR align="center">'

		for (var dayNum = 0; dayNum < 7; ++dayNum) 
			html += openCol + this.weekDays[dayNum] + closeCol
		
		html += '</TR>'
		
		var digit = 1
		var curCell = 1;
		
	
		for (var row = 1; row <= Math.ceil((lastDay + firstDay - 1) / 7); ++row) {
			html += '<TR align="center">'

			

			for (var col = 1; col <= 7; ++col) {
				if (curCell < firstDay) {
					html += '<TD class="empty">&nbsp;</TD>';
					curCell++
				}else{
					var link = '<a href="'+this.link+date+'-'+this.zero(digit)+'">'+digit+'</a>';
					if (digit == mark_day)
						html += '<TD class="today">'+link+'</TD>'
					else
						html+=((digit > lastDay)?'<td class="empty">&nbsp</td>':'<td'+
						((col==6)?' class="saturday"':((col==7)?' class="sunday"':''))+
						'>'+link+'</td>') + ''
					digit++
				}
			}
			html += '</TR>'
		}
				
		document.getElementById('wdm_clndr_cnt').innerHTML=html;	
		this.getActiveDays(date);
	},




	zero: function(x,z){x=String(x);while(x.length<z)x='0'+x;return(x)},


	nextMonth: function(date)//date format yyyy-mm
	{
		date=date.split('-');
		date[1]=date[1]-1+1;//ff 3 parseInt('08')=0

		return (date[1]=='12' ? parseInt(date[0]) + 1: date[0])+ '-' + (date[1]>'11' ? '01': this.zero(date[1]+1,2));
	},

	prevMonth: function(date)//date format yyyy-mm
	{
		date=date.split('-');
		date[1]=date[1]-1+1;//ff 3 parseInt('08')=0
		return (date[1]==01 ? parseInt(date[0]) - 1: date[0])+ '-' + (date[1]==01 ? '12': this.zero(date[1]-1,2) );
	},

	dateStr: function(date)//date format yyyy-mm
	{
		date=date.split('-');
		return date[0]+' '+this.monthNames[date[1]-1];
	},

	monthSelect: function(currdate)
	{
		var months = {};
		var curr=this.minMonth;
		var tmp='';
		var i=0;

		while(curr <= this.maxMonth && ++i < 50)
		{
			months[curr]=this.dateStr(curr);
			curr=this.nextMonth(curr);
		}

		tmp = this.generateOptions(months,currdate);;
		
		return tmp;
	},

	generateOptions: function(options,selected)
	{
		var str = '';
		for(key in options)
		{
			if(key!='extend')
				str += '<option value="'+key+'"'+(key==selected?' SELECTED':'')+'>'+options[key]+'</option>'+"\r\n";
		}
		return str;
	},
	
	getActiveDays: function(month)
	{
		new Ajax.Request
		(
			_ABS_PATH+'get_active_month_days.php',
			{
			  method: 'post', 
			  parameters: {'month':month}, 
			  onComplete: 
			  	function(req)
			  	{
			  		wdm_cal.setActiveDays(req.responseText.evalJSON());
				}
			}
		);	
	},	
	
	setActiveDays: function(days)
	{
		var elm = $('wdm_clndr').getElementsByTagName('A');
		
		for(var i=0; i<elm.length; i++)
		{
			var d =  elm[i].innerHTML;
			if(!days[d])
			{
				elm[i].className="emptyDay";
			}
			
			
		}
		
	}
};
