function datetime(k,e,o,b,f){
	var getCpos=function(o){
		if(document.selection){
			var e=document.selection.createRange();
			var l=e.text.length;
			e.moveStart('character',-o.value.length);
			return e.text.length-l;
		}else if(o.selectionStart || o.selectionStart=='0'){
			return o.selectionStart;
		}
	}
	var setCpos=function(o,p){
		if(document.selection){
			o.focus();
			var e=document.selection.createRange();
			e.moveStart ('character',-o.value.length);
			e.moveEnd ('character',-o.value.length);
			e.moveEnd ('character',p);
			e.moveStart('character',p);
			e.select();
		}else if(o.selectionStart || o.selectionStart=='0'){
			o.selectionStart=p;
			o.selectionEnd=p;
			o.focus();
		}
	}
	var num=function(v){
		try{v=new Number(v);}catch(e){v=0;}
		return v;
	}
	var pad=function(s,v){
		v=v.toString();
		while(v.length<s)v='0'+v;
		return v;
	}

	var feb=function(y){
		return y%4==0&&(y<=1752||y%100!=0)||y%400==0 ? true:false;
	}
	var maxd=function(m,y){
		if(m==2&&y&&feb(y))return 29;
		if(m==2&&y&&!feb(y))return 28;
		if(m==2)return 28;
		if(m==4||m==6||m==9||m==11)return 30;
		return 31;
	}
	var datesplit=function(s,v){
		v=v.split('/');
		v[0]=num(v[0]);
		v[1]=num(v[1]);
		if(s==10)v[2]=num(v[2]);
		return v;
	}
	var datejoin=function(s,v){
		if(s==5)return pad(2,v[0])+'/'+pad(2,v[1]);
		if(s==7)return pad(2,v[0])+'/'+pad(4,v[1]);
		return pad(2,v[0])+'/'+pad(2,v[1])+'/'+pad(4,v[2]);
	}
	var datecheck=function(s,v){
		switch(s){
			case 5:
				if(v[0]==0&&v[1]==0)return '';
				if(v[0]<1){--v[1];v[0]=maxd(v[1]);}
				if(v[0]>maxd(v[1])){v[0]=1;++v[1];}
				if(v[1]<1)v[1]=1;
				if(v[1]>12)v[1]=12;
				return datejoin(s,v);
			case 7:
				if(v[0]==0&&v[1]==0)return '';
				if(v[0]<1){v[0]=12;--v[1];}
				if(v[0]>12){v[0]=1;++v[1];}
				if(v[1]<1)v[1]=cdate()[2];
				if(v[1]>9999)v[1]=9999;
				return datejoin(s,v);
			default:
				if(v[0]==0&&v[1]==0&&v[2]==0)return '';
				if(v[0]<1){--v[1];v[0]=maxd(v[1],v[2]);}
				if(v[0]>maxd(v[1],v[2])){v[0]=1;++v[1];}
				if(v[1]<1){v[1]=12;--v[2];}
				if(v[1]>12){v[1]=1;++v[2];}
				if(v[2]<1)v[2]=cdate()[2];
				if(v[2]>9999)v[2]=9999;
				return datejoin(s,v);
		}
		return '';
	}
	var datemove=function(p,s,v,a){
		if(p<2)v[0]+=a;
		if(p>2&&p<5)v[1]+=a;
		if(p>5&&p<=10)v[2]+=a;
		return datecheck(s,v);
	}
	var cdate=function(){
		var v=new Date();
		return new Array(v.getDate(),v.getMonth()+1,v.getFullYear());
	}
	var makedate=function(e,o,b){
		var p=getCpos(o);
		var s=o.maxLength;
		var v=(o.value+'          ').substr(0,s).split('');
		switch(s){
			case 5: // HH/MM
			case 7: // MM/EEEE
				v[2]='/';
				break;
			case 10: // HH/MM/EEEE
				v[2]=v[5]='/';
				break;
		}
		o.value=v.join('');
		v=datesplit(s,o.value);
		if(b){ // onblur
			v=datecheck(s,v);
			if(v.length==0)
				o.value='';
			else if(o.value!=v){
				o.value=v;
				o.focus();
			}
			return;
		}
		var c=e.keyCode?e.keyCode:e.which?e.which:e.charCode;
		switch(c){
			case 96: //NUMPAD 1
			case 97:
			case 98:
			case 99:
			case 100:
			case 101:
			case 102:
			case 103:
			case 104:
			case 105:
				c-=48;
			case 48: //KEYPAD 1
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 54:
			case 55:
			case 56:
			case 57:
				if(p<s){
					if(p==2||s==10&&p==5)++p;
					v=o.value.split('');
					v[p]=String.fromCharCode(c);
					v=v.join('');
					o.value=v.search(' ')>=0 ? v:datecheck(s,datesplit(s,v));
					if(++p==2||s==10&&p==5)++p;
				}
				break;
			case 40://DOWN
				o.value=datemove(p,s,v,-1);
				break;
			case 38://UP
				o.value=datemove(p,s,v,1);
				break;
			case  8://BS
				o.value='';
				p=0;
				break;
			case 46://DEL
				o.value=o.value.substr(0,p);
				break;
			case 9 ://TAB
			case 35://END
			case 36://HOME
				return;
			case 37://LEFT
				if(p>0)--p;
				if(p==2 || p==5)--p;
				break;
			case 39://RIGHT
				if(p<s)++p;
				if(p==2 || p==5)++p;
				break;
			case 32://SP TODAY
				v=cdate();
				if(s==7)v=v.slice(1,3);
				o.value=datejoin(s,v);
				p=0;
				break;
		}
		setCpos(o,p)
		e.returnValue=false;
	}

	var timesplit=function(f,v){
		v=v.split(':');
		v[0]=num(v[0]);
		if(f.length>2)v[1]=num(v[1]);
		if(f.length>5)v[2]=num(v[2]);
		return v;
	}
	var timejoin=function(f,v){
		if(f.length==2)return pad(2,v[0]);
		if(f.length==5)return pad(2,v[0])+':'+pad(2,v[1]);
		return pad(2,v[0])+':'+pad(2,v[1])+':'+pad(2,v[2]);
	}
	var timecheck=function(f,v){
		var m;
		switch(f.length){
			case 2:
				if(v[0]==0)return'';
				if(v[0]<0)v[0]=0;
				m=f.charAt(0)=='h'?23:59;
				if(v[0]>m)v[0]=m;
				return timejoin(f,v);
			case 5:
				if(v[0]==0&&v[1]==0)return '';
				if(v[1]<0){v[1]=59;--v[2]};
				if(v[1]>59)v[1]=59;
				m=f.charAt(0)=='h'?23:59;
				if(v[0]<0||v[0]>m)v[0]=m;
				return timejoin(f,v);
			default:
				if(v[0]==0&&v[1]==0&&v[2]==0)return '';
				if(v[2]<0)if(v[1]==0){v[2]=0;}else{v[2]=59;--v[1];}
				if(v[2]>59)if(v[1]==59){v[2]=59;}else{v[2]=0;++v[1];}
				if(v[1]<0)if(v[0]==0){v[1]=0;}else{v[1]=59;--v[0];}
				if(v[1]>59)if(v[0]==23){v[1]=59}else{v[1]=0;++v[0];}
				if(v[0]<0)v[0]=0;
				if(v[0]>23)v[0]=23;
				return timejoin(f,v);
		}
		return '';
	}
	var timemove=function(p,f,v,a){
		if(p<2)v[0]+=a;
		if(p>2&&p<5)v[1]+=a;
		if(p>5&&p<=8)v[2]+=a;
		return timecheck(f,v);
	}
	var ctime=function(){
		var v=new Date();
		return new Array(v.getHours(),v.getMinutes(),v.getSeconds());
	}
	var maketime=function(e,o,b,f){
		var p=getCpos(o);
		var v=(o.value+'          ').substr(0,f.length).split('');
		switch(f.length){
			case 2: // HH or MM or SS
				break;
			case 5: // HH:MM or MM:SS
				v[2]=':';
				break;
			case 8: // HH:MM:SS
				v[2]=v[5]=':';
				break;
		}
		o.value=v.join('');
		v=timesplit(f,o.value);
		if(b){ // onblur
			v=timecheck(f,v);
			if(v.length==0)
				o.value='';
			else if(o.value!=v){
				o.value=v;
				o.focus();
			}
			return;
		}
		var c=e.keyCode?e.keyCode:e.which?e.which:e.charCode;
		switch(c){
			case 96: //NUMPAD 1
			case 97:
			case 98:
			case 99:
			case 100:
			case 101:
			case 102:
			case 103:
			case 104:
			case 105:
				c-=48;
			case 48: //KEYPAD 1
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 54:
			case 55:
			case 56:
			case 57:
				if(p<f.length){
					if(p==2||f.length==8&&p==5)++p;
					v=o.value.split('');
					v[p]=String.fromCharCode(c);
					v=v.join('');
					o.value=v.search(' ')>=0 ? v:timecheck(f,timesplit(f,v));
					if(++p==2||f.length==8&&p==5)++p;
				}
				break;
			case 40://DOWN
				o.value=timemove(p,f,v,-1);
				break;
			case 38://UP
				o.value=timemove(p,f,v,1);
				break;
			case  8://BS
				o.value='';
				p=0;
				break;
			case 46://DEL
				o.value=o.value.substr(0,p);
				break;
			case 9 ://TAB
			case 35://END
			case 36://HOME
				return;
			case 37://LEFT
				if(p>0)--p;
				if(p==2 || p==5)--p;
				break;
			case 39://RIGHT
				if(p<f.length)++p;
				if(p==2 || p==5)++p;
				break;
			case 32://SP TODAY
				o.value=timejoin(f,ctime());
				p=0;
				break;
		}
		setCpos(o,p)
		e.returnValue=false;
	}
	if(k=='d')
		makedate(e,o,b);
	else
		maketime(e,o,b,f);
}
/*function makedate1(e,o){
	var getCpos=function(o){
		if(document.selection){
			var e=document.selection.createRange();
			var l=e.text.length;
			e.moveStart('character',-o.value.length);
			return e.text.length-l;
		}else if(o.selectionStart || o.selectionStart=='0'){
			return o.selectionStart;
		}
	}
	var setCpos=function(o,p){
		if(document.selection){
			o.focus();
			var e=document.selection.createRange();
			e.moveStart ('character',-o.value.length);
			e.moveEnd ('character',-o.value.length);
			e.moveEnd ('character',p);
			e.moveStart('character',p);
			e.select();
		}else if(o.selectionStart || o.selectionStart == '0'){
			o.selectionStart=p;
			o.selectionEnd=p;
			o.focus();
		}
	}
	var strdate=function(d,s){
		h=d.getDate().toString();
		while(h.length< 2) h='0'+h;
		m=(d.getMonth()+1).toString();
		while(m.length< 2) m='0'+m;
		e=d.getFullYear().toString();
		while(e.length< 2) e='0'+e;
		return h+'/'+m+'/'+e;
	}
	var movedate=function(o,p,w,s,c){
		var l=o.value.length,d=new Date();
		if(l==0){
			h=new Number(d.getDate());
			m=new Number(d.getMonth()+1);
			e=new Number(d.getFullYear());
		}else if(l<=3){
			h=new Number(s==7?d.getDate():o.value.substr(0,2));
			m=new Number(d.getMonth()+1);
			e=new Number(d.getFullYear());
		}else if(l<=5){
			h=new Number(s==7?d.getDate():o.value.substr(0,2));
			m=new Number(o.value.substr(s==7?0:3,2));
			e=new Number(d.getFullYear());
		}else{
			h=new Number(s==7?d.getDate():o.value.substr(0,2));
			m=new Number(o.value.substr(s==7?0:3,2));
			e=new Number(o.value.substr(s==7?3:6,4));
		}
		if(c){
			d=new Date(e,m-1,h);
			n=strdate(d,s).split('');
			if(p<10 && p!=2 && p!=5)n[p]=String.fromCharCode(c);
			n=n.join('').split('/');
			h=new Number(n[0]);
			m=new Number(n[1]);
			e=new Number(n[2]);
		}
		if(p<=2){
			h+=w;
		}else if(p<=5){
			m+=w;
		}else{
			e+=w;
			//if(e<1970)e=1970;
			//if(e>2040)e=2040;
		}
		d=new Date(e,m-1,h);
		d=strdate(d,s);
		if(s==7) d=d.substr(3);
		if(s==5) d=d.substr(0,5);
		o.value=d;
		p += (c?1:0);
		if(p==2 || p==5)++p;
		setCpos(o,p-(s==7?3:0));
	}
	var c=e.keyCode?e.keyCode:e.which?e.which:e.charCode;
	var s=o.maxLength;
	var p=getCpos(o)+(s==7?3:0);
	switch(c){
		case 96: //NUMPAD 1
		case 97:
		case 98:
		case 99:
		case 100:
		case 101:
		case 102:
		case 103:
		case 104:
		case 105:
			c-=48;
		case 48: //KEYPAD 1
		case 49:
		case 50:
		case 51:
		case 52:
		case 53:
		case 54:
		case 55:
		case 56:
		case 57:
			movedate(o,p,0,s,c);
			break;
		case 40://DOWN
			movedate(o,p,-1,s)
			break;
		case 38://UP
			movedate(o,p,1,s)
			break;
		case  8://BS
		case 46://DEL
			o.value='';
			setCpos(o,0);
			break;
		case 9 ://TAB
		case 35://END
		case 36://HOME
			return;
		case 37://LEFT
			if(p==3 || p==6 && s!=7) setCpos(o,--p);
			return;
		case 39://RIGHT
			if(p==1 || p==4 && s!=7) setCpos(o,++p);
			return;
		case 32://SP TODAY
			o.value='';
			movedate(o,s,0,s);
			break;
	}
	if(p==2 || p==5 && s!=7)setCpos(o,++p-(s==7?3:0));
	e.preventDefault ? e.preventDefault():e.returnValue=false;
}*/
function CalendarOpen(el,format,bformat){
	if(calendar!=null){
		calendar.hide();
	}else{
		var cal=new Calendar(false,null,CalendarChange,CalendarHide);
		cal.weekNumbers=true;
		calendar=cal;
		cal.setRange(1900,2070);
		cal.create();
	}
	calendar.setDateFormat(format,bformat);
	var v=el.value;
	if(v.indexOf('_')>-1) v='';
	calendar.parseDate(v);
	calendar.sel = el;
	if(document.getElementById('WindowsLoader')){
		calendar.showAt(event.clientX+document.body.scrollLeft,event.clientY+document.body.scrollTop+10);
	}else{
		calendar.showAtElement(el);
	}
}
function CalendarChange(cal,date){
	var sep='/';
	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);
	cal.sel.focus();
}
function CalendarHide(cal){
	cal.hide();
}
