function CalendarChange(cal,date)
{
	var sep = getseperator(cal.dateFormat);

	var i,fo = cal.dateFormat.split(sep),dt = date.split(sep);
	var dd,mm,yy;
	for(i=0;i<fo.length;i++)
	{
		switch(fo[i].substr(0,1))
		{
			case 'd':
				dd = dt[i];
				break;
			case 'm':
				mm = dt[i];
				break;
			case 'y':
				yy = dt[i];
				break;
		}
	}
	cal.sel.value = '';
	for(i=0;i<cal.datebFormat.length;i++)
	{
		sep = cal.datebFormat.substr(i,1);
		switch(sep)
		{
			case 'd':
				cal.sel.value += dd;
				break;
			case 'm':
				cal.sel.value += mm;
				break;
			case 'Y':
				cal.sel.value += yy;
				break;
			default:
				cal.sel.value += sep;
				break;
		}
	}
	if (cal.sel.func)	eval(cal.sel.func);
}

function CalendarHide(cal)
{
	cal.hide();
}

function CalendarOpen(id, format,bformat) 
{
	var el = document.getElementById(id);
	
	if (calendar != null) {
		// we already have some calendar created
		calendar.hide();                 // so we hide it first.
	} else {
		// first-time call, create the calendar.
		var cal = new Calendar(false, null, CalendarChange, CalendarHide);
		// uncomment the following line to hide the week numbers
		cal.weekNumbers = true;
		calendar = cal;                  // remember it in the global var
		cal.setRange(1900, 2070);        // min/max year allowed.
		cal.create();
	}
	
	calendar.setDateFormat(format,bformat);    // set the specified date format
	var v=el.value;
	if (v.indexOf('_')>-1) v=''; 
	calendar.parseDate(v);						 // try to parse the text in field
	calendar.sel = el;                 // inform it what input field we use

	if (document.getElementById('WindowsLoader'))
		calendar.showAt(event.clientX + document.body.scrollLeft,event.clientY + document.body.scrollTop + 10);
	else
		calendar.showAtElement(el);        // show the calendar below it
	
	return false;
}

function DateKeyDown(event,id,d)
{
	var keyCode=event.keyCode;

	if (keyCode==8) 
	{
		var rng=document.selection.createRange();
		rng.moveStart('character',-1);
		rng.moveEnd('character',-1);
		rng.select();
	}
	else if (keyCode==46) 
	{
		DateClear(id,d);
	}
	else
		return true;

	event.returnValue=false;
	return false;
}

function DateKeyPress(event,id,d)
{
	var keyCode=event.keyCode;
	if (keyCode==0) return true;

	rng=document.selection.createRange();
	rng.moveEnd('character',1);
	if (rng.text.length==1)
	{
		if (rng.text=='/' || rng.text==':' || rng.text==' ')
		{
			rng.moveStart('character',1);
			rng.select();
		}
		if (keyCode>47 && keyCode<58) return true;
	}

	event.returnValue=false;
	return false;
}

var CurStateOverWrite;

function DateFocus(inp)
{
	var rng=inp.createTextRange();
	rng.moveEnd('character',-inp.value.length);
	rng.select();
	CurStateOverWrite=rng.queryCommandValue('OverWrite');
	if (CurStateOverWrite) return;
	rng.execCommand('OverWrite',true);
}

function getseperator(fo)
{
	var i,sep = '/';
	for(i=0;i<fo.length;i++)
	{
		switch(fo.substr(i,1))
		{
			case 'd':
			case 'm':
			case 'y':
			case 'Y':
				break;
			default:
				sep = fo.substr(i,1);
				break;
		}
	}
	return(sep);
}

function DateBlur(inp,fo)
{
	var dd = '';
	var mm = '';
	var yy = '';
	var tt,i,j,k = getseperator(fo);
	var fl = inp.value.split(k);
	fi = fo.split(k);
	for(i=0;i<fi.length;i++)
	{
		switch(fi[i])
		{
			case 'd':
				tt = fl[i];
				dd = '';
				for(j=0;j<tt.length;j++)
				{
					k = tt.substr(j,1)
					if(k>='0' && k<='9') dd += k;
				}
				break;
			case 'm':
				tt = fl[i];
				mm = '';
				for(j=0;j<tt.length;j++)
				{
					k = tt.substr(j,1)
					if(k>='0' && k<='9') mm += k;
				}
				break;
			case 'Y':
				tt = fl[i];
				yy = '';
				for(j=0;j<tt.length;j++)
				{
					k = tt.substr(j,1)
					if(k>='0' && k<='9') yy += k;
				}
				break;
		}
	}
	if(dd==0 && mm==0 && yy==0)
	{
		inp.value = '';
		for(i=0;i<fo.length;i++)
		{
			k = fo.substr(i,1);
			switch(k)
			{
				case 'Y':
					inp.value += '__';
				case 'd':
				case 'm':
					inp.value += '__';
					break;
				default:
					inp.value += k;
					break;
			}
		}
	}
	else
	{
		if(!datechk(dd,mm,yy)) inp.focus();
		while(dd.length<2) dd = '0'+dd;
		while(mm.length<2) mm = '0'+mm;
		while(yy.length<4) yy = ((yy.length==3) ? '2' : '0') +yy;
		inp.value = '';
		for(i=0;i<fo.length;i++)
		{
			k = fo.substr(i,1);
			switch(k)
			{
				case 'd':
					if(dd=='00') dd = '01';
					inp.value += dd;
					break;
				case 'm':
					if(mm=='00') mm = '01';
					inp.value += mm;
					break;
				case 'Y':
					if(yy=='0000') yy = '0001';
					inp.value += yy;
					break;
				default:
					inp.value += k;
					break;
			}
		}
	}
	var rng=inp.createTextRange();
	rng.execCommand('OverWrite',CurStateOverWrite);
}

function DateClear(id,d)
{
	var inp=document.getElementById(id);
	inp.value=d;
	var rng=inp.createTextRange();
	rng.moveEnd('character',-inp.value.length);
	rng.select();
	return false;
}

function datechk(dd,mm,yy)
{
	dd = dd-0;
	mm = mm-0;
	yy = yy-0;
  
  if(dd==0 && mm==0 && yy==0) return(false);
	if(mm>12 || dd>31) return(false);
  if((mm==4 || mm==6 || mm==9 || mm==11) && dd==31) return(false);
  if(mm==2 && dd>28+((yy%4==0 && (yy<=1752 || yy%100!=0) || yy%400==0) ? 1:0)) return(false);
  return(true);
}
