//
//  DymDom - dom based crossbrowser calendar
//  version 1.0.4
//
// -you can't use this code or it's any part without author agreement
// -вы не имеете право использовать данный скрипт или его любую часть 
//	в коммерческих разработках и проектах(с целью получения прибыли) без согласия автора.
// -для использования в свободных проектах и разработках для личного пользования
//  условий и ограничений на использование скрипта нет.
//
//  author: ethan hunt email: ethanhunt@newmail.ru
//          cooperation with http://forum.ru-board.com/
//  date: 21.09.2004
//
//	когда нибудь наверное наступят времена, что позволят писать web проекты без оглядки на совместимость с браузерами.
//	я хотел написать что-то без постоянных оглядок типа - "Ето кто, а Вы Мозилыч, ну тогда сделаем так".
//	но не все получилось(подключение событий, некоторые глюки с собственным мнением браузеров на то как что-то надо делать(css) и т.д.).
//
//	I like w3c[http://www.w3.org/](интересно то, сколько там документов с соавторством сотрудников из Microsoft).
//
/////////////////////////////////////////////////////////////////////////////
//    global variables
var __doc=window.document;
if(!bw)	var bw = new bwl();
var aLangs="rus,eng,usa";
var bUseCapture=false;
var arrMnmRes = {rus:"Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь",
								 eng:"January,February,March,April,May,June,July,August,September,October,November,December",
								 usa:"January,February,March,April,May,June,July,August,September,October,November,December"};
var arrMnmDec = {rus:"Января,Февраля,Марта,Апреля,Майя,Июня,Июля,Августа,Сентября,Октября,Ноября,Декабря".split(","),
								 eng:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),
								 usa:"January,February,March,April,May,June,July,August,September,October,November,December".split(",")};
var arrDnmRes = {rus:"Пн,Вт,Ср,Чт,Пт,Сб,Вс",
								 eng:"Mn,Tu,Wd,Th,Fr,St,Su",
								 usa:"Mn,Tu,Wd,Th,Fr,St,Su"};
var arrEwords = {rus:{cur:"выбрано"},
								 eng:{cur:"selected"},
								 usa:{cur:"selected"}};
var arrHardHolidays={rus:{"0":{"1":"Новый год","2":"Новый год","7":"Рождество Христово"},
												  "1":{"23":"День защитника Отечества"},
												  "2":{"8":"Международный женский день"},
												  "4":{"1":"Праздник Весны и Труда","2":"Праздник Весны и Труда","9":"День Победы"},
												  "5":{"12":"День России"},
												  "10":{"7":"День согласия и примирения"},
												  "11":{"12":"День Конституции Российской Федерации"}
													},
											eng:{"0":{"1":"New Year's Day","2":"-","27":"-"},
												  "1":{"14":"Saint Valentine's Day"},
												  "2":{"1":"St. David's Day","17":"Saint Patrick's Day","26":"Mother's Day"},
												  "3":{"1":"Fool's Day","23":"St. George's Day"},
													"9":{"31":"Halloween"},
													"10":{"5":"Guy Fawkes' Day","11":"Memory Day","30":"St. Andrew's Day"},
												  "11":{"25":"Christmas Day","26":"Christmas Day","27":"Christmas Day"}
													},
											usa:{"0":{"1":"New Year's Day","15":"Martin Luther King Day","20":"Presidential Inauguration Day"},
												  "1":{"2":"Groundhog Day","12":"Presidents' Day","14":"Saint Valentine's Day"},
												  "3":{"1":"April's fool Day"},
												  "5":{"14":"Flag Day"},
												  "6":{"4":"Independence Day"},
													"9":{"31":"Halloween"},
													"10":{"11":"Veteran's Day"},
												  "11":{"25":"Christmas Day"}
													}
										};
//var arrFloatHolidays={rus:{}};
var dymDays={"2004":{"9":"16,1,20","11":"16,1,20"},
						 "2005":{"0":"16,1,20"}};
/////////////////////////////////////////////////////////////////////////////
//    service function
function zAttachEvent(_eo,ef,et,_ce){//eo-object;of-event function;et-event type("onmouseover" etc.);ce-captureEvent
	var eo=(typeof(_eo)=="string"?document.getElementById(_eo):_eo);var ce=(!_ce||_ce==undefined)?false:_ce;
	if(typeof(eo)!="object" || typeof(ef)!="function" || typeof(et)!="string") return;
	try{
		if(eo.addEventListener){
			et=et.replace(/on/,"");eo.addEventListener(et,ef,ce);
		}else if(eo.attachEvent){
			eo.attachEvent(et,ef);
		}
	}catch(e){var st="exception ";for(var i in e)st+=(i+"="+e[i]+"\n");alert(st);}	
}
function zGetObjByID(hObj){
	if(zIsObject(hObj))	return hObj;
	if(!zIsString(hObj))	return null;
	return ((bw.ie||bw.op)?__doc.all[hObj]:__doc.getElementById(hObj));
}
function zGetEventSrcObj(e){
	var obj;
	try{
		if(bw.ie){
			if(!e) e=event;
			obj=e.srcElement;
		}else if(bw.ns6){
			obj=e.target;
		}else if(bw.op7){
			obj=e.target;
		}
	}catch(e){var st="exception ";for(var i in e)st+=(i+"="+e[i]+"<br>");alert(st);}
	return obj;
}
//////////////////////////////////////////////////////////////////////////////
//
//	oParent may be:
//		object - for static link created calendar
//		string - for absolute positioning, string format - "top:100px;left:100px;"
// lang - what language to use;
// sdf-date format;
// sdv-date value(string or date object);
// fwd-first day of week
// wh-with holidays;
// ct-calendar type;
// lf-link format; ;
// lt:(optional)number - link target; default-"_self"
function zDymDom(oParent,slang,sdf,sdv,fwd,wh,ct,lf,lt){
	this.oElement=null;
	this.m_lang=(!slang || slang==undefined || (aLangs.indexOf(slang)==-1))?"rus":slang;
	//
	this.m_wh=(!wh || wh==undefined)?false:true;
	var _sdf=(!sdf || sdf==undefined)?"d/m/y":sdf.toLowerCase();
	this.m_sdf=(/dmy|dym|myd|mdy|ymd|ydm/.test(_sdf.replace(/[^ymd]/g,'')))?_sdf:"d/m/y";
	this.m_sdv=(!sdv || sdv==undefined)?(new Date()):sdv;
	this.m_ct=(!ct || ct==undefined || ct<1 || ct>2)?1:ct;
	this.m_lf=(!lf || lf==undefined)?"/#year#/#month#/#day#/":lf;
	this.m_lt=(!lt || lt==undefined)?"_self":lt;
	this.m_nmYear;this.m_nmMonth;this.m_nmDay;// cash current calendar values
	//
	this.fwd=(!fwd || fwd==undefined || fwd<1 || fwd>7)?0:fwd-1;
	this.postID=0;
	var __this=this;
	// cashed objects for speed
	this.oParent=oParent;
	this.oElementStyle={position:"static"};
	this.oSelMonth=null;this.oSelYear=null;
	this.oTdHeader=null;this.oTdFooter=null;this.oTdBody=null;
	this.oTable=null;
	// jewels :-D
	this.szID = null;this.arrMnm = null;this.arrDnm = null;
	//
	this.t_mt = {
		TABLE:{
			attr:{id:"ctable",cellSpacing:"0",border:"0"},
			tags:{
				TBODY:{
					tags:{
						TR_1:{attr:{id:""},tags:{TD_1:{attr:{id:"cheader",align:"center",valign:"middle",className:"clsheader"}}}},
						TR_2:{attr:{id:""},tags:{TD_2:{attr:{id:"cbody",align:"center",valign:"middle",className:"clsbody"}}}},
						TR_3:{attr:{id:""},tags:{TD_3:{attr:{id:"cfooter",align:"center",valign:"middle",className:"clsfooter"}}}}						
					}
				}
			}
		}
	};
	this.t_h = {
		TABLE:{
			attr:{id:"ctable",cellPadding:"0",cellSpacing:"0",className:"",border:"0"},
			tags:{
				TBODY:{
					tags:{
						TR_1:{
							attr:{id:""},
							tags:{
								TD_1:{attr:{align:"center",valign:"middle",id:"decMonth",className:"clsbtn",cstext:"\u003C"}},
								TD_2:{attr:{align:"center",valign:"middle",colspan:"5"},tags:{SELECT_1:{attr:{id:"selMonth"}},SELECT_2:{attr:{id:"selYear"}}}},
								TD_3:{attr:{align:"center",valign:"middle",id:"incMonth",className:"clsbtn",cstext:"\u003E"}}
							}
						}
					}
				}
			}
		}
	};
	////////////////////////////////////////////////////////////////////////////////////////////////////
	this.onChange=function(e){
		var oe=zGetEventSrcObj(e);
		var szID=oe.id;szID=(!szID || szID==""?"":szID.substr(0,szID.length-__this.postID.toString().length));			
		switch (oe.tagName.toLowerCase()){
			case "select":
				switch (szID){
					case "selYear":
						__this.m_nmYear=parseInt(oe.value,10);__this.createCalendar();
						break;
					case "selMonth":
						__this.m_nmMonth=parseInt(oe.value,10);__this.createCalendar();
						break;
				}
				break;
		}
		if(!bw.op)return false;
	}
	this.onMouseOver = function(e){
		var oe = zGetEventSrcObj(e);
		switch (oe.tagName.toLowerCase()){
			case "td":
				if (oe.className.indexOf("datecel")!=-1){
					if(!(__this.m_ct==2) || __this.isEnableDay(bw.ns6?oe.dateval:oe.getAttribute("dateval")) && !(/ cur\s?/.test(oe.className)))	oe.className+=" cur ";
				}else if(oe.className.indexOf("clsbtn")!=-1){
					oe.className="clsbtnup";
				}
				break;
		}
		if(!bw.op)return false;		
	}
	this.onMouseOut=function(e){
		var oe = zGetEventSrcObj(e);
		switch (oe.tagName.toLowerCase()){
			case "td":
				if (oe.className.indexOf("datecel")!=-1){
					if((/ cur\s?/.test(oe.className)))	oe.className=oe.className.replace(/ cur\s?/,"");
				}else if(oe.className.indexOf("clsbtn")!=-1){
					oe.className="clsbtn";
				}
			break;
		}
		if(!bw.op)return false;
	}
	this.onMouseDown=function(e){
		var oe = zGetEventSrcObj(e);
		switch (oe.tagName.toLowerCase()){
			case "td":
				if(oe.className.indexOf("clsbtn")!=-1){
					oe.className="clsbtndown";
				}
			break;
		}
		if(!bw.op)return false;
	}
	this.onMouseUp=function(e){
		var oe = zGetEventSrcObj(e);
		switch (oe.tagName.toLowerCase()){
			case "td":
				if(oe.className.indexOf("clsbtn")!=-1){
					oe.className="clsbtnup";
				}
			break;
		}
		if(!bw.op)return false;
	}
	this.onClick=function(e){
		var oe = zGetEventSrcObj(e);var surl;
		var szID=oe.id;szID=(!szID || szID==""?"":szID.substr(0,szID.length-__this.postID.toString().length));			
		switch (oe.tagName.toUpperCase()){
			case "TD":
				if (oe.className.indexOf("datecel")!=-1){
					var sday=bw.ns6?oe.dateval:oe.getAttribute("dateval");
					__this.m_nmDay=parseInt(sday,10);__this.setSelectedDate();__this.createCalendar();
					if(__this.m_ct==2 && (surl=bw.ns6?oe.surl:oe.getAttribute("surl"))!=""){window.open(surl,__this.m_lt);}
				}else{
					switch (szID){
						case "decMonth":
							__this.changeMonth(-1);__this.createCalendar();__this.syncHeader();
							break;
						case "incMonth":
							__this.changeMonth(1);__this.createCalendar();__this.syncHeader();						
							break;					
					}
				}
				break;
		}
		if(!bw.op)return false;
	}
	this.templater=function(template,obj){
		if(!template) return;
		var ort=null;var sz="";
		var mar=new Array();for(var i in template){mar[mar.length]=i;};mar.sort();
		//for(var i in template){ // fucked Opera not work propertly with this fuck,fuck,fuck...
		for(var ii=0;ii<mar.length;ii++){
			var i=mar[ii];
			sz=(i.indexOf("_")!=-1?i.substr(0,i.indexOf("_")):i);
			ort=document.createElement(sz);if(obj)obj.appendChild(ort);
			for(var j in template[i]){
				switch(j){
					case "attr":
						for(var z in template[i][j]){
							if(typeof(ort[z])=="object"){
								switch(z){
									case "style":
										var s=template[i][j][z];var re = new RegExp("(.)(-)(.)","");
										while(re.test(s)){s=s.replace(re,RegExp.$1+RegExp.$3.toUpperCase());}
										var sar=s.split(";");
										for(var ci=0;ci<sar.length;ci++){
											if(sar[ci]!=""){
												var ssar=sar[ci].split(":");
													ort[z][ssar[0]]=ssar[1];
											};
										}
										break;
									default:;
								}
							}else{
								switch(z){
									case "cstext":ort.appendChild(document.createTextNode(template[i][j][z]));break;
									case "id":/*ort[z]=(template[i][j][z]+this.postID);*/ort.setAttribute(z,template[i][j][z]+this.postID);break;
									default:if(!bw.ns6){ort.setAttribute(z,template[i][j][z]);}else{ort[z]=template[i][j][z];}
								}
							}
						}
						break;
					case "tags":
						this.templater(template[i][j],ort);
						break;
				}
			}
		}
		if(!obj)return ort;
	}
	this.createMno=function(){
		var os=this.oSelMonth;if(!os)return;
		for(var i=0;i<this.arrMnm.length;i++)os.options[os.options.length] = new Option(this.arrMnm[i],i);
		return;
	}
	this.createYro=function(){
		var os=this.oSelYear;if(!os)return;
		for (var i=1900;i<2100;i++)os.options[os.options.length] = new Option(i,i);
		return;
	}	
	this.getWeekDay=function(fdow,dateVal){
		return (6 + dateVal.getDay() - fdow)%(7);
	}
	this.isEnableDay=function(d){
		var re=new RegExp('(^|,)'+d+'(,|$)');
		return(typeof(dymDays)!="undefined" && dymDays[this.m_nmYear]!=undefined &&( dymDays[this.m_nmYear][this.m_nmMonth]==d || re.test(dymDays[this.m_nmYear][this.m_nmMonth])));
	}
	this.isDate = function(dv){
		var ds = this.m_sdf.toLowerCase().replace(/[^ymd]/g,'')
		var re = /^\d{1,4}( |-|\/|\.)\d{1,4}\1\d{1,4}$/
		if(!re.test(dv))
			return false
		var ad = dv.split(RegExp.$1); //split date into month, day, year
		var id = parseInt(ad[ds.indexOf('d')],10); 
		var im = parseInt(ad[ds.indexOf('m')],10);
		var iy = parseInt(ad[ds.indexOf('y')],10);
		if (iy < 30)	iy+=2000
		if (iy < 100)	iy+=1900	
		var d = new Date( iy, im-1, id )
		if ( (d.getFullYear() != iy) ||  (d.getMonth() != im-1)  || (d.getDate() != id) || (iy < 1000) ) 
			return false
		return true
	}
	this.getDatePart=function(part,dv){
		var ds = this.m_sdf.toLowerCase().replace(/[^ymd]/g,'');
		var re = /^\d{1,4}( |-|\/|\.)\d{1,4}\1\d{1,4}$/;
		re.test(dv);
		var ad = dv.split(RegExp.$1); //split date into month, day, year
		return parseInt(ad[ds.indexOf(part)],10);
	}
	this.setDatePart=function(part,dv,pv){
		var ds = this.m_sdf.toLowerCase().replace(/[^ymd]/g,'')
		var re = /^\d{1,4}( |-|\/|\.)\d{1,4}\1\d{1,4}$/
		re.test(dv)
		var ad = dv.split(RegExp.$1); //split date into month, day, year
		ad[ds.indexOf(part)]=pv;
		return ad.join(RegExp.$1);
	}
	this.getDateStr=function(){
		var dv=this.m_sdf;
		dv=dv.replace(/m/,"01");dv=dv.replace(/d/,"01");dv=dv.replace(/y/,"1990");
		dv=this.setDatePart("d",dv,this.m_sdv.getDate());
		dv=this.setDatePart("m",dv,this.m_sdv.getMonth()+1);
		dv=this.setDatePart("y",dv,this.m_sdv.getFullYear());
		return dv;
	}
	this.cashDate=function(){
		this.m_nmMonth=this.m_sdv.getMonth();this.m_nmYear=this.m_sdv.getFullYear();this.m_nmDay=this.m_sdv.getDate();
	}
	this.setSelectedDate=function(){
		this.m_sdv.setDate(1);this.m_sdv.setFullYear(this.m_nmYear);this.m_sdv.setMonth(this.m_nmMonth);this.m_sdv.setDate(this.m_nmDay);
	}	
	this.syncHeader=function(){
		var i=0;//this trick for liked Opera gratification increase max i bound if Opera don't set select elements properly
		while(this.oSelMonth.value!=this.m_nmMonth && i<3){this.oSelMonth.value = this.m_nmMonth;i++;};
		while(this.oSelYear.value!=this.m_nmYear && i<3){this.oSelYear.value = this.m_nmYear;i++;};
	}
	this.changeMonth=function(adj){
		this.m_nmMonth += adj;
		if(this.m_nmMonth==12){this.m_nmMonth=0;this.m_nmYear+=1;}
		if(this.m_nmMonth==-1){this.m_nmMonth=11;this.m_nmYear-=1;}
		if(this.m_nmYear<1900)this.m_nmYear=2099;if(this.m_nmYear>2099)this.m_nmYear=1900;
	}
	this.createCalendar = function(){
		var d = new Date(); 					// get current date
		var tDay=d.getDate(),tMonth=d.getMonth(),tYear=d.getFullYear();
		var sDay=this.m_sdv.getDate(),sMonth=this.m_sdv.getMonth(),sYear=this.m_sdv.getFullYear();
		d.setDate(1);									// set day to first day of month
		d.setMonth(this.m_nmMonth);		// set current month 
		d.setFullYear(this.m_nmYear);	// set current year
		var firstDay,lastDay;
		var mArr=new Array(6);
		for(var i=0;i<mArr.length;i++) mArr[i]=new Array(7);
		for(var day=1;day<32;day++){
			d.setDate(day);
			if(day == 1)	firstDay=this.getWeekDay(this.fwd,d);
			if((d.getMonth()) == this.m_nmMonth){
				var weekNo = parseInt((((firstDay + day - 1)/7)*1));
				mArr[weekNo][this.getWeekDay(this.fwd,d)] = d.getDate();
				lastDay = day;
			}
		}
		if(parseInt(this.m_nmDay,10)>lastDay){this.m_nmDay=lastDay};
		////////
		var sid="",scls="",stitle="",surl="",bhol=false;
		var tnb={TABLE:{attr:{id:"tst2",cellPadding:"0",cellSpacing:"1",style:"width:100%;heght=100%;",border:"0"}}};
		tnb["TABLE"]["tags"]={TBODY:""};
		tnb["TABLE"]["tags"]["TBODY"]={tags:{TR_H:""}};
		tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H"]={tags:""};
		tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H"]["tags"]=new Object();
		for(var i=0;i<this.arrDnm.length;i++)
			tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H"]["tags"]["TH_"+i]={attr:{style:"width:14%",	cstext:this.arrDnm[(i+this.fwd)%(7)]}};
		for(var i=0;i<mArr.length;i++){
			if(typeof(mArr[i][0])=="undefined" && i!=0) break;
			tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H_"+i]={tags:""};
			tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H_"+i]["tags"]=new Object();
			for(var j=0;j<mArr[i].length;j++){stitle="";bhol=false;surl="";
				if(typeof(mArr[i][j])=="undefined")
					tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H_"+i]["tags"]["TD_"+i+j]={attr:{className:"dataempty",cstext:"\u0020"}}
				else{
					if(this.m_wh){
						if(arrHardHolidays[this.m_lang] && arrHardHolidays[this.m_lang][this.m_nmMonth] && arrHardHolidays[this.m_lang][this.m_nmMonth][mArr[i][j]]){
							stitle=arrHardHolidays[this.m_lang][this.m_nmMonth][mArr[i][j]];bhol=true;};
					}
					scls="datecell";
					if(this.m_nmYear==sYear && this.m_nmMonth==sMonth && mArr[i][j]==sDay){
						scls+=" sel";sid="cselday"+this.postID;
					}else	if(this.m_nmYear==tYear && this.m_nmMonth==tMonth && mArr[i][j]==tDay){
						scls+=" today";sid="ctoday"+this.postID;
					}else{
						sid="";if(bhol)scls+=" holibg";
					}
					if(this.m_ct==2){
						if(this.isEnableDay(mArr[i][j])){
							surl=(this.m_lf.replace(/#year#/g,this.m_nmYear).replace(/#month#/g,parseInt(this.m_nmMonth)+1).replace(/#day#/g,mArr[i][j]));
						}else{scls+=" dis";}
					}
					scls+=(((j+this.fwd)%(7)==5 || (j+this.fwd)%(7)==6)?" we":"");
					if(bhol)scls+=" holi";
					tnb["TABLE"]["tags"]["TBODY"]["tags"]["TR_H_"+i]["tags"]["TD_"+i+j]={attr:{id:sid,"surl":surl,className:scls,title:stitle,bgcolor:"",dateval:mArr[i][j],cstext:mArr[i][j]}};
				}
			}
		}
		var tn,cn,ot;
		cn=this.oTdBody.childNodes[0];if(cn) this.oTdBody.removeChild(cn);
		this.templater(tnb,this.oTdBody);
		if(this.m_ct==1){
			cn=this.oTdFooter.childNodes[0];if(cn) this.oTdFooter.removeChild(cn);
			tn = __doc.createTextNode(innerText = " "+arrEwords[this.m_lang]["cur"]+" - " + sDay + " " + arrMnmDec[this.m_lang][sMonth] + " " +sYear);
			this.oTdFooter.appendChild(tn);
		}else if(this.m_ct==2){
			//
		}
		//this.oElement.style.width=(parseInt(this.oTable.offsetWidth,10)+(bw.op?0:0))+"px";
	}
	this.initialise = function(){
		//
		//this.doc=window.document;
		if(!__doc.body || !bw.dom)	return;
		if(!this.oParent) this.oParent=__doc.body;
		if(typeof(this.oParent)=="string"){
			this.oElementStyle["position"]="absolute";
			var at=this.oParent.split(";");
			for(var i=0;i<at.length;i++){
				if(at[i]!=""){
					var att=at[i].split(":");
					this.oElementStyle[att[0]]=att[1];
				}
			}
			this.oParent=__doc.body;
		}
		for(this.postID=0;this.postID<100;this.postID++){if(!__doc.getElementById("cdiv"+this.postID))break;};
		this.arrMnm = arrMnmRes[this.m_lang].split(',');
		this.arrDnm = arrDnmRes[this.m_lang].split(',');
		//
		this.oElement = __doc.createElement("DIV");this.oElement.className="caliv";this.oElement.id="cdiv"+this.postID;
		for(var i in this.oElementStyle){
			this.oElement.style[i]=this.oElementStyle[i];
		}
		if(!this.oElement) return;
		this.oParent.appendChild(this.oElement);
		this.templater(this.t_mt,this.oElement);
		this.oTable=__doc.getElementById("ctable"+this.postID);
		this.oTdHeader=__doc.getElementById("cheader"+this.postID);this.oTdBody=__doc.getElementById("cbody"+this.postID);this.oTdFooter=__doc.getElementById("cfooter"+this.postID);
		this.templater(this.t_h,__doc.getElementById("cheader"+this.postID));
		this.oSelMonth=__doc.getElementById("selMonth"+this.postID);this.oSelYear=__doc.getElementById("selYear"+this.postID);
		this.createMno();this.createYro();
		if(bw.ns6 && this.oElementStyle["position"]!="absolute"){this.oTdHeader.style.width=(parseInt(this.oTdHeader.clientWidth,10)-2)+"px";}
		if(typeof(this.m_sdv)=="object" && typeof(this.m_sdv.getDate)=="function"){
		//
		}else if(typeof(this.m_sdv)=="string" && this.isDate(this.m_sdv)){
			var d = new Date();
			d.setDate(parseInt(this.getDatePart('d',this.m_sdv),10));
			d.setFullYear(parseInt(this.getDatePart('y',this.m_sdv),10));
			d.setMonth(parseInt(this.getDatePart('m',this.m_sdv),10)-1);
			this.m_sdv = d;
		}
		this.cashDate();this.createCalendar();this.syncHeader();
		//if(bw.ie6)window.clipboardData.setData("Text",this.oElement.outerHTML);
		// attach events
		zAttachEvent(this.oElement,this.onMouseOver,"onmouseover",false);
		zAttachEvent(this.oElement,this.onMouseOut,"onmouseout",false);
		zAttachEvent(this.oElement,this.onMouseDown,"onmousedown",false);
		zAttachEvent(this.oElement,this.onMouseUp,"onmouseup",false);
		zAttachEvent(this.oElement,this.onClick,"onclick",false);
		zAttachEvent(this.oSelMonth,this.onChange,"onchange",false);
		zAttachEvent(this.oSelYear,this.onChange,"onchange",false);
	}
	this.initialise();	
}
function zLong(val){return (val>0?Math.floor(val):Math.ceil(val));}
function zRound(x,n,br){
	var d=1;for(var i=0;i<n;i++)d*=10;br=(br || 4);
	var _x=x*d;var _x1=Math.floor(_x);var _x2=Math.floor((_x-_x1)*10);
	return (_x1+(_x2>br?1:0))/d;
}
Date.prototype.jd1=function(){
	// для дат позднее 15.10.1582 года
	var y=this.getFullYear();var m=this.getMonth()+1;var d=this.getDate();
	var j=zLong((m-14)/12);
	var q=zLong(y+j+4800);
	var jd=(d-32075+zLong(1461*q/4)+zLong(367*(m-2-12*j)/12)-zLong(3*((q+100)/100)/4));
	return jd;
}
Date.prototype.jd2=function(){
	// int Y,int M,double DT
	// Перевод даты григорианского календаря в юлианскую дату (алгоритм Меёса)
	// Y - григорианский год [-4713,9999]
	// М - григорианский месяц [1,12]
	// целая часть DT - день [1,31], дробная часть DT - время, прошедшее от начала текущего дня [.0,.99999]
	// Возвращаемое значение - юлианская дата
	// Целая часть JD - число дней, прошедших от 1 января 4713 года до новой эры, дробная часть JD - время, прошедшее после 12 часов полудня дня JD
	// Корректная работа для дат начиная с 1.01.4713 до н. э. (то есть от Y = -4712, м = 1, от = 1.5) 
	var y=this.getFullYear();var m=this.getMonth()+1;var d=this.getDate();var h=this.getHours();
	//h=(((h/12)^1)*12+(h%12)); // to Julian time convert
	var t=(h*3600+this.getMinutes()*60+this.getSeconds())/86400;
	var dt=d+zRound(t,5);
	if(m<3){y--;m+=12;}
	var a=zLong(y/100);var b=0;
	if(y+m/100+dt/10000>1582.1015) b=2-a+zLong(a/4);
	var c=zLong(365.25*y);
	if(y<0)c=zLong(365.25*y-0.75);
	var jd=c+zLong(30.6001*(m+1))+1720994.5+b+dt;
	return jd;
}
Date.prototype.jd3=function(){
	// упрощенный Меёс
	var jd=0;
	var y=this.getFullYear();var m=this.getMonth()+1;var d=this.getDate();var h=this.getHours();
	return jd;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// CheckBrowser object    original idea Thomas Brattli (www.bratta.com)
function bwl(){
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent.toLowerCase()
	this.dom=__doc.getElementById?1:0
	this.ns4=(!this.dom && __doc.layers)?1:0;
	this.op=window.opera 
	this.moz=(this.agent.indexOf("gecko")>-1 || window.sidebar)
	this.ie=this.agent.indexOf("msie")>-1 && !this.op
	if(this.op){
		this.op5=(this.agent.indexOf("opera 5")>-1 || this.agent.indexOf("opera/5")>-1)
		this.op6=(this.agent.indexOf("opera 6")>-1 || this.agent.indexOf("opera/6")>-1)
		this.op7=this.dom&&!this.op5&&!this.op6 //So all higher opera versions will use it
	}else if(this.moz) this.ns6 = 1;
	else if(this.ie){
		this.ie4 = !this.dom && __doc.all
  	this.ie5 = (this.agent.indexOf("msie 5")>-1)
  	this.ie55 = (this.ie5 && this.agent.indexOf("msie 5.5")>-1)
  	this.ie6 = this.dom && !this.ie4 && !this.ie5 && ! this.ie55
	}
	//this.mac=(this.agent.indexOf("mac")>-1)
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.op5 || this.op6 || this.op7)
  //this.usedom= this.ns6||this.op7//Use dom creation
  //this.reuse = this.ie||this.op7||this.usedom //Reuse layers
  this.px=this.dom&&!this.op5?"px":""
	return this
}
// apend style rules
document.writeln("<link rel=\"stylesheet\" href=\"dym.css\">");
