// Serbis Calendar
// 26.06.2005
// небольшие упрощения и доработки для возможности работы в браузере Opera
// если кто знает как в Опере установить текущее значение value в select - напишите мне :)
// 11.07.2005
// возврат к старому внешнему виду - выбор года кнопками
// распространение на браузеры IE 5 и выше, Opera 7 и выше, Netscape 6 и выше
// 28.11.2008
// добавлен цвет дней по дням недели - переменная colorweekday
// 06.12.2008
// добавлено авто-скрытие календаря

var colorweekday=new Array("","","","","","#ff2121","#ff2121")
var sbcalcreate=false
var sbdateinpute
var sbtimeout=null
//-----------------------------
function sbseldate(e,evt)
{

var elemValue = e.value;

var rgx = new RegExp("([0-2][0-9]|3[01])\\.(0[0-9]|1[012])\\.[0-9]{4}");
if (!rgx.test(elemValue))
{
	e.value="";
}

if (!sbcalcreate)
	{   
	var sbcal = document.createElement("div");sbcal.id="sbcal";sbcal.style.position="absolute";sbcal.style.display="none";sbcal.style.backgroundColor="#fffaee"; sbcal.style.borderColor="black"; sbcal.style.borderStyle="solid"; sbcal.style.borderWidth="1px"; sbcal.style.width="154px"
	sbcal.onmouseout=sbmouseout
    sbcal.onmouseover=sbmouseover

	var tbl=document.createElement("table");tbl.border=0;tbl.style.fontSize=12;tbl.style.fontFamily="serif";tbl.width="154px";tbl.cellPadding=0;tbl.cellSpacing=0
    tbl.onmouseout=sbmoutall
	var thd=document.createElement("thead")
	var ttr=document.createElement("tr")
	var tth=document.createElement("th");tth.colSpan=7
	
	var tbli=document.createElement("table");tbli.border=0;tbli.style.fontSize=12;tbli.style.fontFamily="serif";tbli.width="100%";tbli.cellPadding=0;tbli.cellSpacing=0
	var tbdi=document.createElement("tbody")
	var ttri=document.createElement("tr")
	var tthi=document.createElement("th");tthi.rowSpan=2
	
	var sel=document.createElement("select");sel.style.width="92px";sel.id="sbmcal"
	sel.onclick=sbredrowcal
    sel.onmouseout=sbmoutall
	
	var m= new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь")
	for (var i=0;i<12;i++){var selop=document.createElement("option"); selop.value=i; selop.innerHTML=m[i]; sel.appendChild(selop);}
	
	tthi.appendChild(sel)
	ttri.appendChild(tthi)
	
	var tthi=document.createElement("th");tthi.rowSpan=2
	var inp=document.createElement("input");inp.type="text";inp.style.width="46px";inp.id="sbycal";inp.readOnly=true
    inp.onmouseout=sbmoutall
	tthi.appendChild(inp)
	var inp=document.createElement("input");inp.type="text";inp.id="sbdcal";inp.style.display="none"
    inp.onmouseout=sbmoutall
	tthi.appendChild(inp)
	ttri.appendChild(tthi)
	
	var tthi=document.createElement("th")
	//var but=document.createElement("input");but.type="button";but.style.width="16px";but.style.height="10px";but.value=""
	var but=document.createElement("img");but.style.width="9px";but.style.height="5px";but.value="",but.src="http://portal.nlb.by/portal/content/img/up_calendar.gif"
    but.onmouseout=sbmoutall
	but.onmousedown=sbyupdoit
	tthi.appendChild(but)
	
	ttri.appendChild(tthi)
	tbdi.appendChild(ttri)
	
	var ttri=document.createElement("tr")
	var tthi=document.createElement("th")
	//var but=document.createElement("input");but.type="button";but.style.width="16px";but.style.height="10px";but.value=" "
	var but=document.createElement("img");but.style.width="9px";but.style.height="5px";but.value="",but.src="http://portal.nlb.by/portal/content/img/down_calendar.gif"
    but.onmouseout=sbmoutall
	but.onmousedown=sbydowndoit
	tthi.appendChild(but)
	ttri.appendChild(tthi)
	tbdi.appendChild(ttri)
	
	tbli.appendChild(tbdi)
	
	tth.appendChild(tbli)
	ttr.appendChild(tth)
	thd.appendChild(ttr)
	
	var ttr=document.createElement("tr")
	var tth=document.createElement("th");tth.colSpan=7;tth.innerHTML=" ";tth.style.cursor="hand";tth.onclick=sbsetcurdate
	ttr.appendChild(tth)
	thd.appendChild(ttr)
	tbl.appendChild(thd)
	
	var ttr=document.createElement("tr");ttr.style.color="Black";ttr.style.backgroundColor="#d6ebcd"
	
	var dw= new Array("Пн","Вт","Ср","Чт","Пт","Сб","Вс")
	for (var i=0;i<7;i++){var tth=document.createElement("th");tth.width="22px";tth.innerHTML=dw[i];ttr.appendChild(tth);}
	thd.appendChild(ttr)
	tbl.appendChild(thd)
	
	var tbd=document.createElement("tbody");tbd.style.cursor="hand";tbd.id="sbbcal"
	tbd.onclick=sbsetdateclose
	for (var i=0;i<7;i++)
		{
		var ttr=document.createElement("tr");ttr.style.height="1px"
		for (var j=0;j<7;j++){var ttd=document.createElement("td");ttd.style.textAlign="center";ttr.appendChild(ttd);}
		tbd.appendChild(ttr)
		}
	
	tbl.appendChild(tbd)
	sbcal.appendChild(tbl)
	document.body.appendChild(sbcal)
	sbcalcreate=true
	}

sbdateinpute=e
//sbselhide()
var sbcal=document.getElementById("sbcal")
sbcal.style.display="inline"
sbcal.style.left=evt.clientX
sbcal.style.top=evt.clientY

var sbstr = sbdateinpute.value
if (sbstr && sbstr.length==10)
	{
	document.getElementById("sbdcal").value=(sbstr.substr(0,2))
	document.getElementById("sbmcal").value=(sbstr.substr(3,2)-1)
	document.getElementById("sbycal").value=(sbstr.substr(6,4))
	sbredrowcal()
	}
else sbsetcurdate()
}
//-----------------------------
function sbsetcurdate()
{
var dt = new Date()
var d=dt.getDate();d=(d<10)?'0'+d:d
var m=dt.getMonth()
var i=dt.getYear();if (i < 1900) i=i-0+1900

document.getElementById("sbdcal").value=d
document.getElementById("sbmcal").value=m
document.getElementById("sbycal").value=i

sbredrowcal()
}
//-----------------------------
function sbyupdoit(){document.getElementById("sbycal").value++;sbredrowcal()}
//-----------------------------
function sbydowndoit(){document.getElementById("sbycal").value--;sbredrowcal()}
//-----------------------------
function sbredrowcal()
{
var dt = new Date()
dt.setDate(1)
dt.setMonth(document.getElementById("sbmcal").value)
dt.setYear(document.getElementById("sbycal").value)

var dmax, m=dt.getMonth()
for (dmax=1;dmax<32;dmax++) {dt.setDate(dmax);if (m!=dt.getMonth()) break}

dt.setDate(1)
dt.setMonth(m)
for (var i=0;i<7;i++) for (var j=0;j<7;j++)
	{
	document.getElementById("sbbcal").childNodes[i].childNodes[j].innerHTML=''
	document.getElementById("sbbcal").childNodes[i].childNodes[j].style.color=colorweekday[j]
	document.getElementById("sbbcal").childNodes[i].childNodes[j].style.background="#fffaee"
	}

var d,n=0
var sbstr = document.getElementById("sbdcal").value;
if (sbstr.length>0)	sbstr=sbstr.substr(0, 2)
else {var ndt= new Date();var dd=ndt.getDate();dd=(dd<10)?'0'+dd:dd;sbstr=dd}

for (d=1;d<dmax;d++)
	{
	dt.setDate(d);w=dt.getDay()-1;w=(w==-1)?6:w
	var dd=(d<10)?'0'+d:d
	document.getElementById("sbbcal").childNodes[n].childNodes[w].innerHTML=dd
	if (sbstr==dd)
		{
		document.getElementById("sbbcal").childNodes[n].childNodes[w].style.color="white"
		document.getElementById("sbbcal").childNodes[n].childNodes[w].style.background="navy"
		}
	if (w==6) n++
	}
}
//-----------------------------
function sbsetdateclose(evt){sbsetdate(evt);sbcalhide()}
//-----------------------------
function sbsetdate(evt)
{
var td=(document.all)?event.srcElement:evt.target
var d=td.innerHTML;if (d.length==0) return
var m=parseInt(document.getElementById("sbmcal").value)+1;if (m<10) m='0'+m
sbdateinpute.value=d+'.'+m+'.'+document.getElementById("sbycal").value
}
//-----------------------------
function sbselhide()
{
if (!document.all) return
var sel = document.all.tags("SELECT")
var nsel=sel.length
for (var i=0; i<nsel;i++) if (sel(i).id!="sbmcal") sel(i).style.visibility="hidden"
}
//-----------------------------
function sbselshow()
{
if (!document.all) return
var sel = document.all.tags("SELECT")
var nsel=sel.length
for (var i=0; i<nsel;i++) if (sel(i).id!="sbmcal") sel(i).style.visibility="visible"
}
//-----------------------------
function sbcalhide(){document.getElementById("sbcal").style.display="none";sbselshow()}
//-----------------------------
function sbmouseout(){sbmouseover();sbtimeout=setTimeout("sbcalhide()",3000)}
//-----------------------------
function sbmoutall(evt){return true}
//-----------------------------
function sbmouseover(){if (sbtimeout) clearTimeout(sbtimeout);sbtimeout=null}
//-----------------------------



