
var car_date=new Date();//carrent setted date
car_date.isVis=false;//is calendar visible now
var name='';
function Element(_inp, _div)//for div and input
{
this.input=_inp;
this.div=_div;
this.isVis=false;
}

//change year of dy(+1/-1)
function ch_year(dy)
  {
	 
   var month=car_date.getMonth();
   car_date.setYear(car_date.getFullYear()+dy);
   //this is for change Feb 29 to Feb 28
   if(car_date.getMonth() != month) {car_date.setMonth(1); car_date.setDate(28);}

   elements.div.innerHTML = filtable(car_date.getFullYear(), car_date.getMonth(), car_date.getDate());   
  }

//change month to any
function ch_mon(dm)
  {
   var new_Mon=car_date.getMonth()+dm,
		last_day=daysInMonth(car_date.getYear(), (new_Mon>=0&&new_Mon<=11)?new_Mon:0);
   //for changing, if number of days is more can be
   if(last_day < car_date.getDate()) car_date.setDate(last_day);
   car_date.setMonth(new_Mon);
    
   elements.div.innerHTML = filtable(car_date.getFullYear(), car_date.getMonth(), car_date.getDate());   
  }

//number of days in month
function daysInMonth(year, month)
  {   
   switch(parseInt(month))
   {
    case 0: case 2: case 4: case 6: case 7:  case 9:  case 11: return 31;
    case 3: case 5: case 8: case 10: return 30;
			//if leap year
    case 1: return (year%4===0?29:28);
    default: alert("Error. Incorrect month = " + month);return -1;
   }
  }

//fill the calendar
function filtable(year, mon, day)
{
var firstday=new Date(year,mon,1-1);//first day in month for russia standart
var monthes = Array("ßíâàðü", "Ôåâðàëü", "Ìàðò", "Àïðåëü", "Ìàé", "Èþíü", "Èþëü", "Àâãóñò", "Ñåíòÿáðü", "Îêòÿáðü", "Íîÿáðü", "Äåêàáðü"),
    WeekDays = Array("Ïí", "Âò", "Ñð", "×ò", "Ïò", "Ñá", "Âñ");
		    //monthes
var sy ="<form>";
	sy+="<input type='button' class=PrevNextBut value='<' onclick='ch_mon(-1)'></input>";
	sy+="<input type='text' name='inp_year'  class=YearField size='3' value=" + monthes[mon] + "></input>";
	sy+="<input type='button' class=PrevNextBut value='>' onclick='ch_mon(+1)'></input>";
		
				//button of previos year
sy+="</select> <input type='button' class=PrevNextBut value='<' onclick='ch_year(-1);'></input>";
			//year field
sy+="<input type='text' name='inp_year'  class=YearField size='3' value=" + year + "></input>";
			//button of next year
sy+="<input type='button' class=PrevNextBut value='>' onclick='ch_year(+1);'></input>";
  
 sy+="<TABLE CELLSPACING=0 class=TabelStyle><TR><TD colspan=7 align=center class=y_style>";
 sy+= monthes[mon];//month name
 sy+="</TD></TR><TR ALIGN=CENTER>";
 
 //fill WeekDays
 for(var ii=0; ii < 7; sy+="<TD class=day>" + WeekDays[ii++] + "</TD>");

 sy+="</TR><TR ALIGN=CENTER>";

//first rows with " "
for(var i = 0; i < firstday.getDay(); sy+="<TD> </TD>", i++);  
    //day of week //date //days in month
var k = i,        j = 1, last_day=daysInMonth(year, mon);
while(j<=last_day)
   {    
    if((k%7)===0) sy += "</TR><TR ALIGN=CENTER>";//every week - next row
								//if current day
    sy+="<TD id='" + j + "' class='tab_mouse" + (j===day?" activeday":"") + "' onclick='fillinp(id)';'>"; sy+=j++; sy+="</TD>";    
    k++;
   }
sy += "</TR></TABLE></form>"; 
return sy;
}

//write date to field and close calendar
function fillinp(day)
{
document.getElementById(name).value=car_date.getFullYear()+ "-" + (car_date.getMonth()>8?car_date.getMonth()+1:("0" + (car_date.getMonth()+1))) + "-" + ((day>9)?day:("0" + day));
HideCal();
}

	    //absolute position of object(button) in px
function getAbsolutePosition(obj) {
	var result = [0, 0];
    while (obj != null) {
        result[0] += obj.offsetTop;
        result[1] += obj.offsetLeft;
        obj = obj.offsetParent;
    }
    return result;
}

//hide calendar
function  HideCal()
{
with(elements.div.style)
     {
      visibility = "hidden";
      display = "none";
     }
elements.div.innerHTML.innerHTML="";   
car_date.isVis=false;	
}

//Show calendar//button
function ShowCal(ip, dv)
{
	name=ip;
elements = new Element(document.getElementById(ip), document.getElementById(dv));
      
  if(car_date.isVis==false)//if unvisible
    {		
     var pos=getAbsolutePosition(elements.input);
          elements.div.style.top = pos[0]+elements.input.offsetHeight+"px";
          elements.div.style.left = pos[1]+elements.input.offsetWidth/10+"px";
          elements.div.style.display = "block";
          elements.div.style.visibility = "visible";
	      elements.div.style.position = "absolute";

     //current text in input
     var inp_date=elements.input.value;
     //if field is empty
     if(inp_date == "") car_date = new Date();
        else //if field have any text
	       {
	        var day=inp_date.substr(8,2),mon= inp_date.substr(5,2),year=inp_date.substr(0,4);
            //if date is correct - set this date (monthes begin with 0)
			if((day<=31 && day>=1) && (mon<=12 && mon>=1) && (year>=1901 && year<=2100))car_date=new Date(year, --mon, day);	 
		       else 
				   {//if date is incorrect
		            alert("Incorrect date");
		            car_date = new Date();//set local date
		           }
                                
	       }
		   //alert(car_date)
	 elements.div.innerHTML = filtable(car_date.getFullYear(), car_date.getMonth(), car_date.getDate());
     car_date.isVis=true;   
    }
    else  HideCal();//if visible
}
function Show(dv,sl)
{

	el=	 document.getElementById(dv);
			var pos=getAbsolutePosition(document.getElementById(sl));
			el.style.top = pos[0]+3+"px";
          el.style.left =pos[1]+document.getElementById(sl).offsetWidth+3+"px";
          el.style.display = "block";
          el.style.visibility = "visible";
	      el.style.position = "absolute";
}
function Shown(dv,sl)
{
	el=	 document.getElementById(dv);
	var pos=getAbsolutePosition(document.getElementById(sl));
	el.style.top = pos[0]+document.getElementById(sl).offsetHeight+3+"px";
          el.style.left =pos[1]+3+"px";
          el.style.display = "block";
          el.style.visibility = "visible";
	      el.style.position = "absolute";
}
function closediv(dv)
{
		  el=	 document.getElementById(dv);
          el.style.display = "block";
          el.style.visibility = "hidden";
	      el.style.position = "absolute";
}
