//
//  DymDom - dom based crossbrowser calendar
//  version 1.0.4
/////////////////////////////////////////////////////////////////////////////
//    global variables
var __doc=window.document;
if(!bw) var bw = new bwl();
var aLangs="rus,eng,usa";
var get_date_record='';
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 arrMnmDec_m = {rus:"Янв,Фев,Мрт,Апр,Мая,Июня,Июля,Авг,Сен,Окт,Нояб,Дек".split(","),
                 eng:"Jan,Feb,March,Apr,May,Jn,Jl,Aug,Sept,Oct,Nov,Dec".split(","),
                 usa:"Jan,Feb,March,Apr,May,Jn,Jl,Aug,Sep,Oct,Nov,Dec".split(",")};

//
array_week_days={
rus:{"0":"Вс", "1":"Пн", "2":"Вт", "3":"Ср", "4":"Чт", "5":"Пт", "6":"Сб"},
eng:{"0":"Su", "1":"Mn", "2":"Tu", "3":"Wd", "4":"Th", "5":"Fr", "6":"St"}
};
//
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 get_date_record;
    }
    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);
var objDate = new Date(sYear, sMonth, sDay);
var week_day=objDate.getDay();
get_date_record=array_week_days[this.m_lang][week_day]+",  " + sDay + " " + arrMnmDec_m[this.m_lang][sMonth];
            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();  
}
Date.prototype.zlong=function(val){return (val>0?Math.floor(val):Math.ceil(val));}
Date.prototype.zround=function(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;
}
/*
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=this.zlong((m-14)/12);
    var q=this.zlong(y+j+4800);
    var jd=(d-32075+this.zlong(1461*q/4)+this.zlong(367*(m-2-12*j)/12)-this.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+this.zround(t,5);
    if(m<3){y--;m+=12;}
    var a=this.zlong(y/100);var b=0;
    if(y+m/100+dt/10000>1582.1015) b=2-a+this.zlong(a/4);
    var c=this.zlong(365.25*y);
    if(y<0)c=this.zlong(365.25*y-0.75);
    var jd=c+this.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=\"/images/dym.css\">");