var calendar={
	today:new Date(),
	params:{
		'lang':'rus',
		'daysInMonths':[31,28,31,30,31,30,31,31,30,31,30,31]
	},
	titles:{
		rus:{
			months:{
				full:['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
				short:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек']
			},
			days:{
				short:['Пн','Вт','Ср','Чт','Пт','Сб','Вс']
			}
		}
	},
	pick:function(params) {
		if((!(this.today.getFullYear()%4)&&((this.today.getFullYear()%100)||!(this.today.getFullYear()%400)))!=false){
			this.params.daysInMonths[1]='29';
		}
		for(var p in params){
			this.params[p]=params[p];
		}
		var input=document.getElementById(this.params.input_id);
		var wrapper=document.createElement('div');
		wrapper.id='picker_'+input.id;
		document.body.appendChild(wrapper);
		this.render('month',this.today.getTime(),wrapper.id);
		wrapper.style.position='absolute';
		wrapper.style.backgroundColor='#eee';
		wrapper.style.padding='3px';
		var pos=this.get_position(this.params.toggler);
		wrapper.style.top=(pos[1]-this.params.toggler.offsetHeight-wrapper.offsetHeight)+'px';
		wrapper.style.left=pos[0]+'px';
		var style=document.createElement('style');
		document.body.appendChild(style);
		style_common ='div#'+wrapper.id+' ';
		style.innerHTML ='';
		style.innerHTML+=style_common+'td[onclick]{cursor:pointer;}';
//		wrapper.innerHTML=window.pageYOffset+'/'+pos;
	},
	render:function(what,value,wrapper_id) {
		var c='';
		var d=0;
		var t=new Date(value);
		var f=new Date(t.getFullYear(),t.getMonth(),1);
//		alert(t.toDateString());
		var html='';
		var prev=[];
		var next=[];
		switch(what){
			case 'month':
				if(t.getMonth()=='0'){
					prev['year']=t.getFullYear()-1;
					prev['month']='11';
				}else{
					prev['year']=t.getFullYear();
					prev['month']=t.getMonth()-1;
				}
				if(t.getMonth()=='11'){
					next['year']=t.getFullYear()+1;
					next['month']='0';
				}else{
					next['year']=t.getFullYear();
					next['month']=t.getMonth()+1;
				}
				html+='<table><tr>';
				html+='<td onclick="calendar.render(\'month\','+new Date(prev['year'],prev['month'],1).getTime()+',\''+wrapper_id+'\')">&#8592;</td>';
				html+='<td onclick="calendar.render(\'year\', '+new Date(t.getFullYear(),0,1).getTime()+',\''+wrapper_id+'\')">'+this.titles[this.params.lang].months.full[t.getMonth()]+' '+t.getFullYear()+'</td>';
				html+='<td onclick="calendar.render(\'month\','+new Date(next['year'],next['month'],1).getTime()+',\''+wrapper_id+'\')">&#8594;</td>';
				html+='</tr></table>';
				html+='<table>';
				if((!(t.getFullYear()%4)&&((t.getFullYear()%100)||!(t.getFullYear()%400)))!=false){
					this.params.daysInMonths[1]='29';
				}else{
					this.params.daysInMonths[1]='28';
				}
				for(var r=0;r<=6;r++){
					html+='<tr>';
					for (var i=0;i<7;i++){
						if(r=='0'){
							html+='<td>'+this.titles[this.params.lang].days.short[i]+'</td>';
						}else{
							if(r=='1'){
								var wd=f.getDay()-1;
								if(wd<0){wd=6;}
								if(i==wd){
									d=1;
								}
							}
							if(d>0 && d<=this.params.daysInMonths[t.getMonth()]){
								html+='<td onclick="document.getElementById(\''+this.params.input_id+'\').value=\''+d+'.'+(t.getMonth()+1)+'.'+t.getFullYear()+'\';">'+d+'</td>';
								d++;
							}else{
								html+='<td></td>';
							}
						}
					}
					html+='</tr>';
				}
				html+='</table>';
			break;
			case 'year':
				html+='<table><tr>';
				html+='<td onclick="calendar.render(\'year\','+new Date((t.getFullYear()-1),0,1).getTime()+',\''+wrapper_id+'\')">&#8592;</td>';
				html+='<td onclick="calendar.render(\'years\','+t.getTime()+',\''+wrapper_id+'\')">'+t.getFullYear()+'</td>';
				html+='<td onclick="calendar.render(\'year\','+new Date((t.getFullYear()+1),0,1).getTime()+',\''+wrapper_id+'\')">&#8594;</td>';
				html+='</tr></table>';
				html+='<table>';
				for(var r=0;r<3;r++){
					html+='<tr>';
					for (var i=0;i<4;i++){
						html+='<td onclick="calendar.render(\'month\','+new Date(t.getFullYear(),d,1).getTime()+',\''+wrapper_id+'\');">'+this.titles[this.params.lang].months.short[d]+'</td>';
						d++;
					}
					html+='</tr>';
				}
				html+='</table>';
			break;
			case 'years':
				var year=t.getFullYear().toString();
			//	year[3]='0';
				var decade=year[0]+year[1]+year[2]+'0';
				html+='<table><tr>';
				html+='<td onclick="calendar.render(\'years\','+new Date((decade.toInt()-10),0,1).getTime()+',\''+wrapper_id+'\')">&#8592;</td>';
				html+='<td>'+decade+'&#151;'+(decade.toInt()+9)+'</td>';
				html+='<td onclick="calendar.render(\'years\','+new Date((decade.toInt()+10),0,1).getTime()+',\''+wrapper_id+'\')">&#8594;</td>';
				html+='</tr></table>';
				html+='<table>';
				d=decade.toInt()-1;
				for(var r=0;r<3;r++){
					html+='<tr>';
					for (var i=0;i<4;i++){
						html+='<td onclick="calendar.render(\'year\','+new Date(d,0,1).getTime()+',\''+wrapper_id+'\');">'+d+'</td>';
						d++;
					}
					html+='</tr>';
				}
				html+='</table>';
			break;
		}
//		alert(document.getElementById(wrapper_id));
		document.getElementById(wrapper_id).innerHTML=html;
	},
	close: function(wrapper_id) {
		document.getElementById(wrapper_id);
	},
	get_position:function(el) {
		var curleft=curtop=0;
		if (el.offsetParent){
			do{
				curleft+=el.offsetLeft;
				curtop+=el.offsetTop;
			}while(el=el.offsetParent);
			return [curleft,curtop];
		}
	}
}
