var DateLinkerBackButton ='<div class="button_left_month"><img src="Design/cal_left_one.jpg" border="0" ></div>';
var DateLinkerNextButton ='<div class="button_right_month"><img src="Design/cal_right_one.jpg" border="0" ></div>';
var DateLinkerFirstButton='<div class="button_left_year"><img src="Design/cal_left_tot.jpg" border="0" ></div>';
var DateLinkerLastButton ='<div class="button_right_year"><img src="Design/cal_right_total.jpg" border="0" ></div>';

var DateLinkers=new Array();
var today=new Date();

var DateLinkerMinYear=today.getFullYear();
var DateLinkerMinMonth=today.getMonth();
var DateLinkerMinDay=today.getDate();

var DateLinkerMaxYear=today.getFullYear();
var DateLinkerMaxMonth=today.getMonth();
var DateLinkerMaxDay=today.getDate() - 1;


var DateLinkersCount=0;
var DateLinkerFormat=0;

function DateLinker(FieldName,SelDate,MinDate,MaxDate,AvbDates,F)
{
var AllowNone=true;
var TimeSel=false;
var STime=null;

if (TimeSel)
{
    var s=str2time(SelDate);
    if (s){
        STime=s;
    } else {
        STime='00:00';
    }
}


if (SelDate){ 
    var s=str2date(SelDate);
    if (s){
        SelDate=s;
    }else{
        SelDate=null;
    }
}

if (!FieldName) FieldName='DateLinker' + DateLinkersCount;

if (!SelDate) SelDate=null;
var SelDateTXT=date2str(SelDate);
if (!MinDate) MinDate=null;
if (!MaxDate) MaxDate=null;

if (!AvbDates) AvbDates=null;

var txt='';
txt +='<table border="0" cellspacing="0" cellpadding="0" class="LinkerTable">';
var id='DateLinkerRow'+DateLinkersCount;

txt +='<tr>';
txt +='<td class="out">';
txt +='<input type="hidden" name="' + FieldName + '" value="'+SelDateTXT;


if (STime!=null&& SelDateTXT!='')
{
    txt += ' ' + STime;
}

txt +='">';
txt +='</td>';
txt +='</tr>';

txt +='<tr name="'+ id +'" id="'+ id +'" >';
txt +='<td>';
txt +='<DIV id="Linker" class="Linker"></DIV>';
txt +='</td>';
txt +='</tr>';


txt +='</table>';


document.write(txt);
DateLinkers[DateLinkersCount]=new DateLinkerObj(FieldName,SelDate,MinDate,MaxDate,AvbDates,AllowNone,id,F,TimeSel,STime);
DateLinkers[DateLinkersCount].draw(true);
DateLinkersCount++;



}

function DateLinkerObj(FieldName,SelDate,MinDate,MaxDate,AvbDates,AllowNone,id,F,TimeSel,STime){

var i=0;

var today=new Date();

this.num=DateLinkersCount;

if (F){
	if (F.elements){
	this.FormElement=F.elements[FieldName];
}}


this.CValue=this.FormElement.value;

this.FieldName=FieldName;
this.SelDate=SelDate;
this.TimeSel=TimeSel;
this.STime=STime;

this.date=today;
this.thisyear=today.getFullYear();
this.thismonth=today.getMonth();
this.thisday=today.getDate();

 if (!MinDate){
	if (!AvbDates) {
	 MinDate=new Date(DateLinkerMinYear, DateLinkerMinMonth, DateLinkerMinDay);
	} else {
	 MinDate=AvbDates[0];
	}
 } 

 if (!MaxDate){
	if (!AvbDates) {
	 MaxDate=new Date(DateLinkerMaxYear, DateLinkerMaxMonth, DateLinkerMaxDay);
	} else {
	 MaxDate=AvbDates[0];
	}
 } 



this.Day=0;

if (AvbDates){
 for(i=0;i<AvbDates.length;i++){
  if (AvbDates[i]<MinDate||MinDate==null) MinDate=AvbDates[i];
  if (AvbDates[i]>MaxDate||MaxDate==null) MaxDate=AvbDates[i];
 }
}

if (SelDate){
 this.Year=SelDate.getFullYear();
 this.Month=SelDate.getMonth();
 this.Day=SelDate.getDate();

 if (SelDate<MinDate) MinDate=SelDate;
 if (SelDate>MaxDate) MaxDate=SelDate; 
}

this.MinDate=MinDate;
this.MaxDate=MaxDate;


 this.MinYear=MinDate.getFullYear();
 this.MinMonth=MinDate.getMonth();
 this.MinDay=MinDate.getDate();



 this.MaxYear=MaxDate.getFullYear();
 this.MaxMonth=MaxDate.getMonth();
 this.MaxDay=MaxDate.getDate();

 this.todayEnabled=false;
 if (today>=MinDate&&MaxDate>=today){
    this.todayEnabled=true;
 }


if (!SelDate&&MinDate>today){
today=MinDate;
}

if (!SelDate&&MaxDate<today){
today=MaxDate;
}

if (!SelDate){
 this.Year=today.getFullYear();
 this.Month=today.getMonth();
}


this.AvbDates=AvbDates;
this.AvbDatesSTR=null;
if (AvbDates) this.AvbDatesSTR=AvbDates.join(';')
this.AllowNone=AllowNone;
this.visible=false;
this.id=id;
this.enabled=true;


 if (document.all){
  this.Row=document.all(id);
  this.RowStyle=document.all(id).style;
  this.Selector=this.Row.all('Linker');
  this.SelectorStyle=this.Selector.style;
 }else if (document.getElementById){
  this.Row=document.getElementById(id); 
  this.RowStyle=this.Row.style;
  this.Selector=this.Row.getElementsByTagName("DIV")[0];
  this.SelectorStyle=this.Selector.style;
 } else {
  this.enabled=false;
 }


}


DateLinkerObj.prototype.draw= function (d){
var txt='';
	if (this.enabled){
		if (d) txt=this.getHTML();
		this.Selector.innerHTML=txt;
	}
}
DateLinkerObj.prototype.getHTML= function (){
var txt='';

txt +='<table border="0" cellspacing="0" cellpadding="0" class="LinkerInTable">';
txt +='<tr>';
txt +='<td align="center" width="100%">';

   if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
   {
     var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
     if (ieversion<7)
         {
            txt +='<span style="padding: 0 0px 5px;">';
         }
         else
         {
           txt +='<span>';
         }
    }
     else
    {
       txt +='<span>';
    }



txt +=this.getYearHTML();
txt +='</span></td>';
txt +='</tr>';
txt +='<tr>';
txt +='<td align="center"  width="100%">';
txt +=this.getDaysHTML();
txt +='</td>';
txt +='</tr>';
txt +='</table>';
return txt;
}


DateLinkerObj.prototype.getYearHTML= function (){
var txt='';
var i;
txt +='<table border="0" cellspacing="1" cellpadding="1" align="center">';
txt +='<tr>';
txt +='<td>';
if (this.MinYear==this.MaxYear){
	txt +=this.Year;
}else
if (this.MinYear==this.MaxYear&&this.MinMonth==this.MaxMonth){
	txt +=Months[this.Month];
}else{

var FirstMonth=0

if (this.Year>this.MinYear) txt +='<a  href="javascript://" onclick="DateLinkers['+this.num+'].setYear(' + (parseInt(this.Year)-1) + ');return false;">';
txt +=DateLinkerFirstButton;
if (this.Year>this.MinYear) txt +='</a>';

txt +='</td>';
txt +='<td>';

if (this.Year!=this.MinYear||(this.Year==this.MinYear&&this.Month!=this.MinMonth)) txt +='<a  href="javascript://" onclick="DateLinkers['+this.num+'].setMonth(' + (parseInt(this.Month)-1) + ');return false;">';
txt +=DateLinkerBackButton;
if (this.Year!=this.MinYear||(this.Year==this.MinYear&&this.Month!=this.MinMonth)) txt +='</a>';


txt +='</td>';
txt +='<td width="100%" align="center">';

for (i=this.MinYear;i<=this.MaxYear;i++){
if (this.Year==i) txt +=i;
}


txt +='</td>';
txt +='<td width="100%" align="center">';

var LastMonth=11;
if (this.Year==this.MaxYear) LastMonth=this.MaxMonth

for (i=FirstMonth;i<=LastMonth;i++){
if (this.Month==i) txt +=Months[i];
}
txt +='</td>';

txt +='<td>';

if (this.Year!=this.MaxYear||(this.Year==this.MaxYear&&this.Month!=this.MaxMonth)) txt +='<a  href="javascript://" onclick="DateLinkers['+this.num+'].setMonth(' + (parseInt(this.Month) + 1) + ');return false;">';
txt +=DateLinkerNextButton;
if (this.Year!=this.MaxYear||(this.Year==this.MaxYear&&this.Month!=this.MaxMonth)) txt +='</a>';


txt +='</td>';
txt +='<td>';

if (this.Year<this.MaxYear) txt +='<a  href="javascript://" onclick="DateLinkers['+this.num+'].setYear(' + (parseInt(this.Year) + 1) + ');return false;">';
txt +=DateLinkerLastButton;
if (this.Year<this.MaxYear) txt +='</a>';
}

txt +='</td>';
txt +='</tr>';
txt +='</table>';
return txt;
}




DateLinkerObj.prototype.getDaysHTML= function (){
var txt=''
var i;
var d;
var t;
var ii;
var align="center";
if (navigator.userAgent.indexOf("Firefox")!=-1)
{
    align="right"
}

txt +='<table border="0" align="'+align+'" width="100%" class="LinkerTable" cellpadding="0" cellspacing="0">';
txt +='<tr class="week">';
for (i=0;i<7;i++){
txt +='<td>'+ShortDays[i]+'</td>';
}
txt +='</tr>';

var maxday = Date.UTC(this.Year, parseInt(this.Month) + 1, 1, 0, 0, 0) - Date.UTC(this.Year, this.Month, 1, 0, 0, 0)
maxday /= 24*3600000

d=new Date(this.Year, this.Month, 1)
t=d.getDay()
if (t==0) t=7
t=t-1
txt +='<tr class="Days">';
for(i=0;i<t;i++){
txt +=this.DrawDayTD(0,i);
}
for(i=t;i<7;i++){
txt +=this.DrawDayTD(i - t + 1,i );
}
txt +='</tr>';


for(ii=0;(i - t + 1 )<=maxday;ii++){
 if (!((7+ii*7 - t + 1 )>maxday)){
txt +='<tr class="Days">';
for(i=7+ii*7;i<7+(ii+1)*7;i++){
 if ((i - t + 1 )>maxday){
  txt +=this.DrawDayTD(0,i-(7+ii*7)  );
 } else {
  txt +=this.DrawDayTD(i - t + 1,i-(7+ii*7));
 }
}
txt +='</tr>';
}}

txt +='</table>';
return txt;
}

DateLinkerObj.prototype.DrawDayTD= function (d,wd){
var txt=''
var clas='day_link'
if (this.Year==this.thisyear&&this.Month==this.thismonth&&this.thisday==d) clas='today_link'
var tday=''
var isEnabled=false;
if (d<1) {
	clas +='Disabled'
	if (wd>4) clas +='WeekEnd'
	    tday='&nbsp;';
	} else{
	    isEnabled=this.isEnabled(d);
	    if (isEnabled) {
		    clas +='Enabled'
		    if (wd>4) clas +='WeekEnd'
	    }else{
		    clas +='Disabled'
		    if (wd>4) clas +='WeekEnd'
	    }
	tday=d;
	}
txt +='<td  class="' + clas + '" ';

if (isEnabled) {
txt +='onmouseover="this.className=\''+ clas +'On\';" onmouseout="this.className=\''+ clas +'\'"'
txt +=' onclick="DateLinkers['+this.num+'].setDay(' + d + ');"';
}
txt += '>'
txt += tday;

txt += '</td>';


return txt;
}

DateLinkerObj.prototype.isEnabled=function(d){
var r=true
var d=new Date(this.Year, this.Month, d)
if (d<this.MinDate||d>this.MaxDate){
r=false
return r;
}
if (this.AvbDatesSTR){
 d=''+d;
 r=(this.AvbDatesSTR.indexOf(d)>-1);
}
return r;
}

DateLinkerObj.prototype.isEnabledDate=function(d){
var r=true
if (d<this.MinDate||d>this.MaxDate){
r=false
return r;
}
if (this.AvbDatesSTR){
 d=''+d;
 r=(this.AvbDatesSTR.indexOf(d)>-1);
}
return r;
}


DateLinkerObj.prototype.setYear= function (y){
this.Year=y
this.Day=0
if (this.Year==this.MaxYear&&this.Month>this.MaxMonth) this.Month=this.MaxMonth
if (this.Year==this.MinYear&&this.Month<this.MinMonth) this.Month=this.MinMonth
this.draw(true);
}

DateLinkerObj.prototype.setMonth= function (m){
var need=true

this.Day=0

this.Month=parseInt(m)
if (parseInt(this.Month)<0) {
	need=false
	this.Year=parseInt(this.Year)-1
	this.setMonth(12+parseInt(this.Month))
   }
if (this.Month>11) {
	need=false
	this.Year=parseInt(this.Year)+1
	this.setMonth(parseInt(this.Month)-12)
   }
	
if	(need)  this.draw(true);
}

DateLinkerObj.prototype.setDay= function (d){
var seldateTXT;
var i;

this.Day=d

if (d>0){
    seldateTXT=date2str(new Date(this.Year, this.Month, d));
} else if (d==-1) {
    seldateTXT=date2str(new Date(this.thisyear, this.thismonth, this.thisday));
}else{
seldateTXT='';
}
if (seldateTXT!=''&&this.TimeSel)
{
    seldateTXT += ' ' + this.STime; 
}

if (this.FormElement){
if (this.FormElement.name){
	this.FormElement.value=seldateTXT
}
   if (this.FormElement.form.onsubmit)
   {
    var _r=this.FormElement.form.onsubmit()
    if (_r) this.FormElement.form.submit()
   } else {
    this.FormElement.form.submit()
   } 
}
}
function date2str(objDate){
 var r='';
  if (objDate){
   var y=objDate.getFullYear();
   var m=objDate.getMonth() + 1;
   if (m<10) m='0' + m
   var d=objDate.getDate();
   if (d<10) d='0' + d

   switch (DateLinkerFormat) {
    case 0:
      r= y + '-' + m + '-' + d;
	  break;
	default :
      r= y + '.' + m + '.' + d;
  	  break;
   } 
  }
 return r;
}
function str2date(strdt) {
dt=null;
var y;
var m;
var d;
    
   switch (DateLinkerFormat) {
    case 0:
        y=strdt.substr(0,4)
        m=strdt.substr(5,2)
        d=strdt.substr(8,2)
        if (m.substr(0,1)=='0') m=m.substr(1,1)
        if (d.substr(0,1)=='0') d=d.substr(1,1)
        y=parseInt(y)
        m=parseInt(m)
        d=parseInt(d)

        if (!isNaN(y)&&!isNaN(m)&&!isNaN(d)) dt =new Date(y,m-1,d);
	  break;
	default :
        y=strdt.substr(0,4)
        m=strdt.substr(5,2)
        d=strdt.substr(8,2)
        if (m.substr(0,1)=='0') m=m.substr(1,1)
        if (d.substr(0,1)=='0') d=d.substr(1,1)
        y=parseInt(y)
        m=parseInt(m)
        d=parseInt(d)

        if (!isNaN(y)&&!isNaN(m)&&!isNaN(d)) dt =new Date(y,m-1,d);
  	  break;
   } 

return dt;
}
