/*
*Version : 1.1
*Author  : Lasantha Kularatne
*Email   : lasanthak@gmail.com
*Created : 04 Feb, 2005
*Warning : Doing any modification to this file is a breach to the license agreement 
*          and will get yourself into a lawsuit eventually.
*Notice  : This Code should not be used without author's permission.
*/
var _bKQ=false,_bFF=false,_bOP=false,_bIE=false,_bNN=false,_bMZ=false,_bUN=false;
var brSt = navigator.userAgent.toLowerCase();
if (brSt.indexOf('konqueror')>=0) _bKQ=true;//Konqueror
else if (brSt.indexOf('firefox')>=0) _bFF=true;//FireFox
else if (brSt.indexOf('opera')>=0) _bOP=true;//Opera
else if (brSt.indexOf('msie')>=0) _bIE=true;//Internet Explorer
else if (brSt.indexOf('netscape')>=0) _bNN=true;//Netscape Navigator
else if (brSt.indexOf('mozilla')>=0) _bMZ=true;//Mozilla
else _bUN=true;
brSt=null;

var dtFormat=1;// 1:dd/mm/yyyy, 2:mm/dd/yyyy

var stId=1;
var headCol=new Array("#666666","#666666")[stId];
var weekCol=new Array("#CCCCCC","#CCCCCC")[stId];
var daysCol=new Array("#EFEFEF","#EFEFEF")[stId];
var dfocCol=new Array("#FFFF99","#FFFF99")[stId];
var dselCol=new Array("#FFFFFF","#FFFFFF")[stId];
var stl={
	"mmn":new Pallete("#FFFFFF",headCol),
	"mmf":new Pallete("#000000",headCol),
	"yyn":new Pallete("#FFFFFF",headCol),
	"yyf":new Pallete("#000000",headCol),
	"aan":new Pallete("#FFFFFF",headCol),
	"aaf":new Pallete("#000000",headCol),
	"wwn":new Pallete("#000000",weekCol),
	"ddn":new Pallete("#333333",daysCol),//day norm
	"dsn":new Pallete("#FF0000",daysCol),//sunday norm
	"ddd":new Pallete("#888888",daysCol),//day disabled
	"dsd":new Pallete("#FF8888",daysCol),//sunday dis
	"ddf":new Pallete("#0000FF",dfocCol),//day focused
	"dds":new Pallete("#000000",dselCol),//day sel
	"lsn":new Pallete("#000000","#FEFDFB"),//list norm
	"lsf":new Pallete("#FFFFFF","#777777")//list sel
}
var st;
var fld;
var la="&laquo;";//"«"
var ra="&raquo;";//"»"
var bd=new Array("1px solid "+stl["ddn"].bg,"1px solid #333333","1px solid #666666");//0:def,1:focus:2:selected
var dvbd="1px solid "+headCol;
var xdisp=(_bIE?-10:-10), ydisp=(_bIE?7:10);
var cur=(_bIE?"hand":"pointer");
var defcur="default";
var cTimer=-1;
var timeout=5000;
var _fclost=false, _msover=false, _cpvisible=false;
var _vis_mon=false,_vis_yrs=false;
var _func_msover=null,_func_click=null; 

var td=new Date();//temp date
var fd=new Date();//date of txtBox
var CAL=new Cal(0,0,0000,0,0);
var days=new Array(42);for(i=0;i<42;i++){days[i]=new Day(-1,-1)}
var dOffset=0;
var selDateId=-1;
var blkBefId=-1;var blkAftId=-1;
var dsBefDt;var dsAftDt;
var cbFunc;
var mnWidth=0;var yrWidth=0;

var dn=new Array('S','M','T','W','T','F','S');
var mn=new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var yn=new Array(5);for(i=0;i<yn.length;i++){yn[i]=fd.getFullYear()-1+i;}

st='<style type=text/css>.CpFntCss{font-weight:normal;font-size:10px;font-family:Verdana;}</style>';

st+='<div id="dvcl" onmouseover="dispHndl(1)" onmouseout="dispHndl(0)" style="background:'+stl["mmn"].bg+';overflow:visible;position:absolute;display:none;z-index:151;"><center>';

st+='<table class="CpFntCss" cellspacing="0" cellpadding="0" style="border:'+dvbd+'" bgcolor='+headCol+' height="100px" width="100px"><tr height="15px"><td';
st+=tdStr('10%','center','hapr',103,stl['aan'].fg,cur,11,null)+'&nbsp;'+la+'</td><td align="center"><span';
st+=tdStr('55%','center','hmon',101,stl['mmn'].fg,cur,11,'Arial')+'Month</span></td><td';
st+=tdStr('10%','center','hanx',104,stl['aan'].fg,cur,11,null)+ra+'&nbsp;</td><td';
st+=tdStr('25%','center','hyrs',102,stl['yyn'].fg,cur,10,'Tahoma')+'Year</td>';
function tdStr(w,a,id,i,fg,c,fs,fn){
	return(' id="'+id+'" onmouseover="msOver(this,'+i+')" onmouseout="msOut(this,'+i+')" onClick="msClick(this,'+i+')" class="CpFntCss" style="'+(fn!=null?'font-family:'+fn+';':'')+'font-size:'+fs+'px;font-weight:bold;color:'+fg+';cursor:'+c+'" width="'+w+'" align="'+a+'">');
}

st+='</tr><tr><td style="background-color:'+headCol+'" colspan="4">';

st+='<table class="CpFntCss" cellspacing="0" cellpadding="1" bgcolor='+stl["ddn"].bg+' style="cursor:'+defcur+';">';
st+='<tr style="background-color:'+stl["wwn"].bg+'">';
for (j = 0;j<7;j++){
	st+='<td class="CpFntCss" width="15px" align="center" style="color:'+(j==0?stl["dsn"].fg:stl["wwn"].fg);
	st+=';">'+dn[j]+'</td>';
}
st+='</tr>';

for (i = 0;i<6;i++){
	st+='<tr id="tr'+i+' style="background-color:'+stl["ddn"].bg+'">';
	for (j=0;j<7;j++) {
		var x=i*7+j;
		st+='<td id="td'+x+'" class="CpFntCss" onClick="msClick(this,'+x+')" onmouseover="msOver(this,'+x+')" onmouseout="msOut(this,'+x+')" ';
		st+='width="15px" align="center" style="color:'+(j==0?stl["dsn"].fg:stl["ddn"].fg);
		st+=';border:'+bd[0]+';cursor:'+cur+';">'+((i*7)+j)+'</td>';
	}
	st+='</tr>';
}
st+='</table></td></tr></table></center></div>';

st+=divStr('dvmv',mn,200);
st+=divStr('dvyv',yn,220);
function divStr(id,ar,starti){
	var s='<div id="'+id+'" onmouseover="dispHndl(1)" onmouseout="dispHndl(0)" width="60px" height="100px" style="background:'+stl["lsn"].bg+';border:1px solid #111111;overflow:auto;position:absolute;display:none;z-index:153;">';
	s+='<table cellspacing="1" cellpadding="1" border="0" bgcolor="'+stl["lsn"].bg+'" style="color:'+stl["lsn"].fg+';cursor:'+defcur+'">';
	for(i=0;i<ar.length;i++){
		var x=starti+i;
	 	s+='<tr><td class="CpFntCss" height="10px" onmouseover="msOver(this,'+x+')" onmouseout="msOut(this,'+x+')" onClick="msClick(this,'+x+')">'+ar[i]+'</td></tr>';
	 	}
	s+='</table></div>';
	return s;
}

if(_bIE)st+=ifStr('ifcl',150);
if(_bIE)st+=ifStr('ifls',152);
function ifStr(id,zi){
	var s;
	s='<iframe id="'+id+'" style="position:absolute;display:none;z-index:'+zi+';filter:Alpha(opacity=0);" src="javascript:false;" width="200px" height="200px" border="0" frameborder="none" marginwidth="0px" marginheight="0px" vspace="0" hspace="0" scrolling="no"></iframe>';
	return s;
}

document.write(st);
st=null;

function showCal(txtId,btnId,callback,dsBefDate,dsAftDate,selDate){
	
	if(_cpvisible) hideAll(); 
	
	cbFunc=callback;
	fd=new Date();
	fld=txtId;
	
	//get text date
	var accept=false;
	if(selDate&&selDate!=null)accept=validDt(selDate,fd);
	
	var f=document.getElementById(fld);
	if(accept)f.value=selDate;
	else{
	var s=f.value;
	if(s&&s!=null)accept=validDt(s,fd);
	}
	
	if(!accept)f.value="";	
	
	//set date
	CAL.date=-1;
	CAL.month=fd.getMonth();
	CAL.year=fd.getFullYear();
	
	//set dis dates
	if(dsBefDate&&validDt(dsBefDate,td)){
		dsBefDt=new Date();
		with(dsBefDt){		
			setDate(1);
			setFullYear(td.getFullYear())
			setMonth(td.getMonth());
			setDate(td.getDate());
			}
		}
	else dsBefDt=null;
	if(dsAftDate&&validDt(dsAftDate,td)){
		dsAftDt=new Date();
		with(dsAftDt){		
			setDate(1);
			setFullYear(td.getFullYear())
			setMonth(td.getMonth());
			setDate(td.getDate());
			}
		}
	else dsAftDt=null;
	
	//possition and show
	renderCal(true);
	posElem("dvcl",btnId,0,0,-1);
	if(_bIE)placeIF("ifcl","dvcl");
	if(_bIE)dispElem("ifcl",true);
	_cpvisible=true;
	
	clearTimeout(cTimer);cTimer=setTimeout('hideAll()', timeout);
	
	_func_click=document.onclick;
	_func_msover=document.onmouseover;
	document.onmouseover=docMsOver;
}

function renderCal(init){
	//make
	td.setDate(1);
	td.setFullYear(CAL.year)
	td.setMonth(CAL.month);
	
	dOffset=td.getDay();
	td.setMonth(CAL.month+1);
	td.setDate(0);
	var dmax=td.getDate();
	
	blkBefId=-2;blkAftId=-2;
	if(dsBefDt&&dsBefDt!=null){
		with(dsBefDt){
			if(getFullYear()>CAL.year) blkBefId=dOffset+dmax;
			else if(getFullYear()==CAL.year){
				if(getMonth()>CAL.month) blkBefId=dOffset+dmax;
				else if(getMonth()==CAL.month) blkBefId=dOffset+getDate()-1;
				}
		}
	}
	if(dsAftDt&&dsAftDt!=null){
		with(dsAftDt){
			if(getFullYear()<CAL.year)blkAftId=dOffset-1;
			else if(getFullYear()==CAL.year){
				if(getMonth()<CAL.month) blkAftId=dOffset-1;
				else if(getMonth()==CAL.month) blkAftId=dOffset+getDate()-1;
				}
		}
	}
	
	for(i=0;i<42;i++){var d=days[i];d.d=-1;d.v=-1;}//clear
	for(i=dOffset;i<dOffset+dmax;i++){var d=days[i];d.d=i-dOffset+1;d.v=1;}
	for(i=dOffset;i<dOffset+dmax&&i<blkBefId;i++)days[i].v=0;//dis bef dates
	for(i=blkAftId+1;i>-1&&i<dOffset+dmax;i++)days[i].v=0;//des aft dates

	if((fd.getMonth()==CAL.month)&&(fd.getFullYear()==CAL.year)) selDateId=fd.getDate()+dOffset-1;
	else selDateId=-1;
	
	//display
	var c;var s;var d;
	for (i=0;i<42;i++){
		d=days[i];
		c=document.getElementById("td".concat(i));
		s=c.style;
		if(d.v>-1){
			c.innerHTML=d.d;
			if(s!=null){
				s.cursor=defcur;
				if(selDateId!=i){
					if(d.v==1){//enabled
						if((i%7)==0) s.color=stl["dsn"].fg;
						else s.color=stl["ddn"].fg;
						s.cursor=cur;
						}
					else if(d.v==0){//disabled
						if((i%7)==0) s.color=stl["dsd"].fg;
						else s.color=stl["ddd"].fg;
						}
					s.background=stl["ddn"].bg;
					s.border=bd[0];
				}
				else{
					s.color=stl["dds"].fg
					s.background=stl["dds"].bg;
					s.border=bd[2];
					if(d.v==1) s.cursor=cur;
				}
			}
		}	
		else{
			c.innerHTML="";
			if(s!=null){
				if((i%7)==0) s.color=stl["dsn"].fg;
				else s.color=stl["ddn"].fg;
				s.background=stl["ddn"].bg;
				s.border=bd[0];
				s.cursor=defcur;
			}
		}
	}
			
	c=document.getElementById("hmon");
	c.innerHTML=mn[CAL.month];
	c=document.getElementById("hyrs");
	c.innerHTML=CAL.year+'&nbsp;';
	
	if(_bIE&&!init)placeIF("ifcl","dvcl");
	
}

function placeIF(stif,stdv){
	var dv = document.getElementById(stdv);
	var dvs = dv.style;
	var iff = document.getElementById(stif);
	if(iff!=null){
	var ifs = iff.style;
	ifs.width = dv.offsetWidth;
	ifs.height = dv.offsetHeight;
	ifs.top = dvs.top;
	ifs.left = dvs.left;
	}
} 

function msOver(c,i)
{
	if(i<0) return;
	
	if(_vis_mon&&((i<200&&i!=101)||i>=212)){if(_bIE)dispElem("ifls",false);dispElem("dvmv",false);_vis_mon=false;}
	if(_vis_yrs&&((i<220&&i!=102)||i>=220+yn.length)){if(_bIE)dispElem("ifls",false);dispElem("dvyv",false);_vis_yrs=false;}
	
	//index 0..41 days
	if(i<42&&days[i].v>0){
		var s=c.style;
		if(s!=null){
			s.color=stl["ddf"].fg;
			s.background=stl["ddf"].bg;
			s.border=bd[1];
		}
	}
	else if(i>=42 && i<200){
		var s=c.style;
		if(s!=null){
			switch(i){
			case 101: s.color=stl["mmf"].fg;break;//month
			case 102: s.color=stl["yyf"].fg;break;//year
			case 103: s.color=stl["aaf"].fg;break;//< arrows
			case 104: s.color=stl["aaf"].fg;break;//> arrows
		  	}
		}
	}
	else if((i>=200 && i<200+mn.length)||(i>=220 && i<220+yn.length)){
		var s=c.style;
		if(s!=null){s.color=stl["lsf"].fg;s.background=stl["lsf"].bg;}
	}
	
}

function msOut(c,i)
{
	if(i<0) return;
	
	//index 0..41 days
	if(i<42&&days[i].v>0){
		var s=c.style;
		if(s!=null){
			if(selDateId==i){
				s.color=stl["dds"].fg
				s.background=stl["dds"].bg;
				s.border=bd[2];
			}
			else{
				if((i%7)==0) s.color=stl["dsn"].fg;
				else s.color=stl["ddn"].fg;
				s.background=stl["ddn"].bg;
				s.border=bd[0];
			}
		}
	}
	else if(i>=42 && i<200){
		var s=c.style;
		if(s!=null){
			switch(i){
				case 101: s.color=stl["mmn"].fg;break;//month
				case 102: s.color=stl["yyn"].fg;break;//year
				case 103: s.color=stl["aan"].fg;break;//< arrows
				case 104: s.color=stl["aan"].fg;break;//> arrows
			 }
		}
	}
	else if((i>=200 && i<200+mn.length)||(i>=220 && i<220+yn.length)){
		var s=c.style;
		if(s!=null){s.color=stl["lsn"].fg;s.background=stl["lsn"].bg;}
	}

}

function msClick(c,i){
	if(i<0) return;
	
	//index 0..41 days
	if(i<42&&days[i].v>0){
		CAL.date=days[i].d;
		var c=document.getElementById(fld);
		if(c!=null )
        {
            c.value = toStr(CAL.date, CAL.month, CAL.year);
        }
        hideAll();
		if(window[cbFunc]) window[cbFunc]();
	}
	else if(i>=42 && i<200){
		switch(i){
			case 101://month
				mnWidth=posElem("dvmv","hmon",0,0,mnWidth);
				if(_bIE)placeIF("ifls","dvmv");								
				if(_bIE)dispElem("ifls",true);
				_vis_mon=true;
		  		break;
			case 102://year
				yrWidth=posElem("dvyv","hyrs",0,0,yrWidth);
				if(_bIE)placeIF("ifls","dvyv");				
				if(_bIE)dispElem("ifls",true);
				_vis_yrs=true;
		  		break;
			case 103://< arrows
				td.setDate(1);
				td.setFullYear(CAL.year);
				td.setMonth(CAL.month-1);
				
				CAL.date=-1;
				CAL.month=td.getMonth();
				CAL.year=td.getFullYear();
				renderCal(false);
		  		break;
			case 104://> arrows
				td.setDate(1);
				td.setFullYear(CAL.year);
				td.setMonth(CAL.month+1);
			
				CAL.date=-1;
				CAL.month=td.getMonth();
				CAL.year=td.getFullYear();
				renderCal(false);
		  		break;
			default:
		  		break;
		 }
	}
	else{
		var ls=false;
		if(i>=200 && i<212){
			dispElem("dvmv",false);
			if(_bIE)dispElem("ifls",false);
			_vis_mon=false;
			td.setDate(1);
			td.setFullYear(CAL.year);
			td.setMonth(i-200);
			ls=true;
		}
		else if(i>=220 && i<220+yn.length){
			dispElem("dvyv",false);
			if(_bIE)dispElem("ifls",false);
			_vis_yrs=false;
			td.setDate(1);
			td.setFullYear(yn[i-220]);
			td.setMonth(CAL.month);
			ls=true;
		}
		if(ls){
		CAL.date=-1;
		CAL.month=td.getMonth();
		CAL.year=td.getFullYear();
		renderCal(false);
		var s=c.style;
		if(s!=null){s.color=stl["lsn"].fg;s.background=stl["lsn"].bg;}
		}
	}
}

function posElem(element,offElement,offX,offY,elemWidth){
	var f=document.getElementById(element);
	var b=document.getElementById(offElement);
	var s=f.style;
	if(b!=null&&f!=null&&s!=null){
		var dB=document.body;
		var L=0;var T=0;
		for(var e=b;e&&e.tagName!='BODY';e=e.offsetParent){
			L+=e.offsetLeft;T+=e.offsetTop;
			}
			
		s.top=T+b.offsetHeight+offY+"px";
		L+=offX;
		if(!_bIE){
			if(elemWidth>0)s.left=L+(b.offsetWidth-elemWidth)/2;
			else s.left=L+"px";
			s.display="inline";
			}
		if(_bIE){
			s.display="inline";
			if(elemWidth!=-1)s.left=L+(b.offsetWidth-f.offsetWidth)/2;
			else s.left=L+"px";
			}
		return f.offsetWidth;
	}
}

function dispElem(sid,show){
	var f=document.getElementById(sid);
		if(f!=null){
		var s=f.style;
		if(show)s.display="inline";
		else s.display="none";
		}
}

function hideAll(){
	document.onmouseover=_func_msover;
	document.onclick=_func_click;
	sbar("");	
	dispElem("dvmv",false);dispElem("dvyv",false);
	dispElem("dvcl",false);dispElem("ifcl",false);
	if(_bIE)dispElem("ifls",false);
	clearTimeout(cTimer);
	_cpvisible=false;_msover=false;
	_vis_mon=false;_vis_yrs=false;
}

function hideCal(){
	if(!_msover){
	clearTimeout(cTimer);
	cTimer=setTimeout('hideAll()', 100);}
}

function dispHndl(x){
	if(x==1){_fclost=false;_msover=true;clearTimeout(cTimer);}//in
	else if(x==0){_fclost=true;_msover=false;}//out
}

function Pallete(fg,bg){this.fg=fg;this.bg=bg;}

function Cal(d,m,y,l,t){
	this.date=d;//date 1..31
	this.month=m;//month 0..11
	this.year=y;//year 2005
	this.left=l;//cal left
	this.top=t;//cal top
}
function Day(d,v){
	this.d=d;//date 1..31
	this.v=v;//-1:hidden,0:disabled,1:enabled
}
function Month(m,v){
	this.m=m;//month 0..11
	this.v=v;//0:disabled,1:enabled
}
function Year(y,v){
	this.y=y;//year 2005
	this.v=v;//0:disabled,1:enabled
}

function toStr(d,m,y){
	if(d>0&&d<32&&m>=0&&m<12&&y>1000){
		if(dtFormat==1)
			return ( (d<10?"0":"")+d+"/"+(m<9?"0":"")+(m+1)+"/"+y );
		else if(dtFormat==2)
			return ( (m<9?"0":"")+(m+1)+"/"+(d<10?"0":"")+d+"/"+y );
	}
	else return "";
}

function validDt(s,d)
{
	if(!s||!d) return false;
	var accept=false;
	var a=s.indexOf("/");
	var b=s.indexOf("/",a+1);
	var c=s.indexOf("/",b+1);
	if(a>0&&b>0&&c==-1){
		if(dtFormat==1){
			var dd=parseInt(s.substring(0,a));
			if(dd==0) dd=parseInt(s.substring(1,a));
			var mm=parseInt(s.substring(a+1,b));
			if(mm==0) mm=parseInt(s.substring(a+2,b));
		}
		else if(dtFormat==2){
			var mm=parseInt(s.substring(0,a));
			if(mm==0) mm=parseInt(s.substring(1,a));
			var dd=parseInt(s.substring(a+1,b));
			if(dd==0) dd=parseInt(s.substring(a+2,b));
		}
		var yyyy=parseInt(s.substring(b+1));
		if(dd>0&&mm>0&&mm<13&&yyyy>1000){
			d.setDate(1);
			d.setFullYear(yyyy);
			d.setMonth(mm-1);
			d.setDate(dd);
			accept=true;
		}
	}
	return d;
}


function sbar(s){window.status=s;}

function docMsOver(e){
	if(_fclost){
	clearTimeout(cTimer)
	cTimer=setTimeout('hideAll()', timeout);
	document.onclick=docClick;
	_fclost=false;
	}}

function docClick(e){if(_cpvisible&&!_msover){hideAll();}}