monthMaxDays=[31,28,31,30,31,30,31,31,30,31,30,31];monthMaxDaysLeap=[31,29,31,30,31,30,31,31,30,31,30,31];hideSelectTags=[];function getRealYear(dateObj)
{return(dateObj.getYear()%100)+(((dateObj.getYear()%100)<39)?2000:1900);}
function getDaysPerMonth(month,year)
{if((year%4)==0)
{if((year%100)==0&&(year%400)!=0)
return monthMaxDays[month];return monthMaxDaysLeap[month];}
else
return monthMaxDays[month];}
function createCalender(year,month,day)
{var curDate=new Date();var curDay=curDate.getDate();var curMonth=curDate.getMonth();var curYear=getRealYear(curDate)
if(!year)
{var year=curYear;var month=curMonth;}
var yearFound=0;for(var i=0;i<document.getElementById('selectYear').options.length;i++)
{if(document.getElementById('selectYear').options[i].value==year)
{document.getElementById('selectYear').selectedIndex=i;yearFound=true;break;}}
if(!yearFound)
{document.getElementById('selectYear').selectedIndex=0;year=document.getElementById('selectYear').options[0].value;}
document.getElementById('selectMonth').selectedIndex=month;var fristDayOfMonthObj=new Date(year,month,1);var firstDayOfMonth=fristDayOfMonthObj.getDay();continu=true;firstRow=true;var x=0;var d=0;var trs=[]
var ti=0;while(d<=getDaysPerMonth(month,year))
{if(firstRow)
{trs[ti]=document.createElement("TR");if(firstDayOfMonth>0)
{while(x<firstDayOfMonth)
{trs[ti].appendChild(document.createElement("TD"));x++;}}
firstRow=false;var d=1;}
if(x%7==0)
{ti++;trs[ti]=document.createElement("TR");}
if(day&&d==day)
{var setID='calenderChoosenDay';var styleClass='choosenDay';var setTitle='this day is currently selected';}
else if(d==curDay&&month==curMonth&&year==curYear)
{var setID='calenderToDay';var styleClass='toDay';var setTitle='this day today';}
else
{var setID=false;var styleClass='normalDay';var setTitle=false;}
var td=document.createElement("TD");td.className=styleClass;if(setID)
{td.id=setID;}
if(setTitle)
{td.title=setTitle;}
td.onmouseover=new Function('highLiteDay(this)');td.onmouseout=new Function('deHighLiteDay(this)');if(targetEl)
td.onclick=new Function('pickDate('+year+', '+month+', '+d+')');else
td.style.cursor='default';td.appendChild(document.createTextNode(d));trs[ti].appendChild(td);x++;d++;}
return trs;}
function showCalender(elPos,tgtEl)
{targetEl=false;if(document.getElementById(tgtEl))
{targetEl=document.getElementById(tgtEl);}
else
{if(document.forms[0].elements[tgtEl])
{targetEl=document.forms[0].elements[tgtEl];}
else
{}}
var calTable=document.getElementById('calenderTable');var positions=[0,0];var positions=getMouse();calTable.style.left=positions[0]+'px';calTable.style.top=positions[1]+'px';calTable.style.display='block';var matchDate=new RegExp('^([0-9]{2})-([0-9]{2})-([0-9]{4})$');var m=matchDate.exec(targetEl.value);if(m==null)
{trs=createCalender(false,false,false);showCalenderBody(trs);}
else
{if(m[1].substr(0,1)==0)
m[1]=m[1].substr(1,1);if(m[2].substr(0,1)==0)
m[2]=m[2].substr(1,1);m[2]=m[2]-1;trs=createCalender(m[3],m[2],m[1]);showCalenderBody(trs);}
hideSelect(document.body,1);}
var firefox=document.getElementById&&!document.all;document.onmousemove=mouseMove;cX=0;cY=0;scrollX=0;scrollY=0;function mouseMove(e){if(firefox){cX=e.clientX;cY=e.clientY;}
else{cX=event.clientX;cY=event.clientY;}
ScrollAmount();}
function ScrollAmount(){if(self.pageYOffset){scrollX=self.pageXOffset;scrollY=self.pageYOffset;}
else if(document.documentElement&&document.documentElement.scrollTop){scrollX=document.documentElement.scrollLeft;scrollY=document.documentElement.scrollTop;}
else if(document.body){scrollX=document.body.scrollLeft;scrollY=document.body.scrollTop;}}
function getMouse(){var positions=[0,0];positions[0]=cX+scrollX;positions[1]=cY+scrollY;return positions;}
function showCalenderBody(trs)
{var calTBody=document.getElementById('calender');while(calTBody.childNodes[0])
{calTBody.removeChild(calTBody.childNodes[0]);}
for(var i in trs)
{calTBody.appendChild(trs[i]);}}
function setYears(sy,ey)
{var curDate=new Date();var curYear=getRealYear(curDate);if(sy)
startYear=curYear;if(ey)
endYear=curYear;document.getElementById('selectYear').options.length=0;var j=0;for(y=ey;y>=sy;y--)
{document.getElementById('selectYear')[j++]=new Option(y,y);}}
function hideSelect(el,superTotal)
{if(superTotal>=100)
{return;}
var totalChilds=el.childNodes.length;for(var c=0;c<totalChilds;c++)
{var thisTag=el.childNodes[c];if(thisTag.tagName=='SELECT')
{if(thisTag.id!='selectMonth'&&thisTag.id!='selectYear')
{var calenderEl=document.getElementById('calenderTable');var positions=[0,0];var positions=getParentOffset(thisTag,positions);var thisLeft=positions[0];var thisRight=positions[0]+thisTag.offsetWidth;var thisTop=positions[1];var thisBottom=positions[1]+thisTag.offsetHeight;var calLeft=calenderEl.offsetLeft;var calRight=calenderEl.offsetLeft+calenderEl.offsetWidth;var calTop=calenderEl.offsetTop;var calBottom=calenderEl.offsetTop+calenderEl.offsetHeight;if(((thisLeft>=calLeft&&thisLeft<=calRight)||(thisRight<=calRight&&thisRight>=calLeft)||(thisLeft<=calLeft&&thisRight>=calRight))&&((thisTop>=calTop&&thisTop<=calBottom)||(thisBottom<=calBottom&&thisBottom>=calTop)||(thisTop<=calTop&&thisBottom>=calBottom)))
{hideSelectTags[hideSelectTags.length]=thisTag;thisTag.style.display='none';}}}
else if(thisTag.childNodes.length>0)
{hideSelect(thisTag,(superTotal+1));}}}
function closeCalender()
{for(var i=0;i<hideSelectTags.length;i++)
{hideSelectTags[i].style.display='block';}
hideSelectTags.length=0;document.getElementById('calenderTable').style.display='none';}
function highLiteDay(el)
{el.className='hlDay';}
function deHighLiteDay(el)
{if(el.id=='calenderToDay')
el.className='toDay';else if(el.id=='calenderChoosenDay')
el.className='choosenDay';else
el.className='normalDay';}
function pickDate(year,month,day)
{month++;day=day<10?'0'+day:day;month=month<10?'0'+month:month;if(!targetEl)
{alert('target for date is not set yet');}
else
{targetEl.value=year+'-'+month+'-'+day;closeCalender();}}
function getParentOffset(el,positions)
{positions[0]+=el.offsetLeft;positions[1]+=el.offsetTop;if(el.offsetParent)
positions=getParentOffset(el.offsetParent,positions);return positions;}
