var $pid=1;
var $vid=1;
var $xii=1;
var $tii=1;
var $wix='';
var $cal=false;
var $itg=false;
var $m1n=false;
var $cur_dat=false;
var $rad_fix=false;
var $prev_val=false;
var $prev_cell=false;
var $prev_status='00';
var $cell_box=false;
var $fetch=false;
var $dirty=false;
var $dirt_block=false;
var $sare_block=false;
var $sare_full=false;
var $dirty_2=false;
var $util_00=false;
var $fli_swat=false;
var $ini_list=false;
var $page_ini=false;
var $vv_fid=0;
var $vv_tab=0;
var $vv_frm_xvars='';
var $vv_frm_stop=false;
var $vv_norec=false;
var $vv_pink=false; //form entry error
var $vv_savi=false;
var $vv_savex=false;
var $vv_rsti=false;
var $vv_input=[];
var $vv_wri=[];
var $vv_listi=[];
var $opt=[];
//var $vv_tix=1;

document.onclick=page_click;
document.onkeypress = stop_R_key;

//PAGE CLICKING
function page_reload(force){if($page_ini || force){window.location.reload()}else{$page_ini=true;};}
function page_click(){
  var ev = arguments[0] || window.event, targ = ev.target || ev.srcElement;
	if (ev.button==2 || ev.altKey){
		if (ev.altKey){
			//right_trap(ev);
			//return false;
		}else{
			//return false;
		}
	} 	
	if($cell_box){	
		if(targ.id!='cell_box' && targ.id.substring(2,5)!='cel' && !$valert_click){js_cell(false,'box_eval(false)');}
	}	
	//if($valert){if(ie){e.returnValue=false;}else{e.preventDefault();e.stopPropagation();}}
	if(!targ.attributes['ctl']){
		if(targ.attributes['qali']){
			qal('eval',targ,$itg);
		}else{
			ctl_clear(); 
		}
	}
	var id=targ.id;
	var c=id.substring(0,1);
	if($fli_swat){
		if(id.substring(0,3)!='fli'){
			pop_superfli(false,'none');
			$fli_swat=false;
		}
	}
	if(c=='¢'){
		var cat=id.substring(2,5);
		ctl_click(cat,targ,id);
	}
	if($pop){
		if($pop.id!='pop_data'){	
			pop_close();
		}
	}
}
function stop_R_key(e) {
	var e=(e) ? e: ((event) ? event : null);
	var node = (e.target) ? e.target : ((e.srcElement) ? e.srcElement : null);
	if((e.keyCode==13) && (node.type=='text') && (node.getAttribute('notab')!=1)) { 
		var gof=node.getAttribute('gof');
		if(gof){
			eval(gof);return false;
		}else{	
			next_focus(node.id,node); return false; 
		}
	}
}

function next_focus(id,node){
	if(window.next_focus_me){next_focus_me(node);return;}
	if(id.substring(0,4)=='fli_' || id.substring(0,4)=='exe_' || $valert){return false;}
	var box=document.getElementsByTagName('input');
	var go=false;
	for(var i=0;i<box.length;i++){
		if(go && box[i].type!='hidden'){box[i].focus();return false;}
		if(box[i].id==id){go=true;}
	}
}
function next_focus_tbl(box){
	var tbl=box.parentNode.parentNode.parentNode.parentNode;
	var tcell=box.parentNode.parentNode;
	var ci=box.parentNode.cellIndex;
	if(tcell.tagName=='TD'){
		ci=box.parentNode.parentNode.cellIndex;
		tcell=tcell.parentNode;
		tbl=tbl.parentNode;
	}else if(tcell.tagName!='TR'){
		return false;
	}
	ri=tcell.rowIndex;
	var r=tbl.rows;
	cn=r[0].cells.length;
	rn=r.length;
	var nb;	
	ri++
	nb=find_box(ri,ci);
	if(!nb){nb=find_box(0,0);}
	if(nb){nb.focus();}
	function find_box(r0,c0){
		for(var j=c0;j<cn;j++){	
			r0=(j==c0)?r0:0;
			//alert(r0 + "  j="+j+"  c0="+c0+"  cn="+cn);
			for(var i=r0;i<rn;i++){
				cel=r[i].cells[j];
				if(cel){
					b=cel.getElementsByTagName('input');
					if(b.length>0){
						return b[0];
					}
				}
			}
		}
		return false;
	}
}

//DIRT
function cal_dirty(new_dat){
	if(!$dirty){
		if(new_dat!=$cur_dat){
			frm_dirty($itg);
		}
	}
}

//CONTROL CLICKING
function ctl_click(cat,targ,id){
	switch (cat){
		case 'nav':
			var v=id.split('_');			
			nav_action('nav',v[2]*1,0,false,false);
			break;
		case 'frm':
		case 'tab':
			var tab='';
			if(cat=='tab'){
				var x=id.split('~');
				id=x[0];
				tab='&tab='+x[1];
			}
			var v=id.split('_');
			//var div=ge('db_'+v[2]);
			if(v[2]=='0.00'){ //NEW PATIENT
				location.href='i.php?new=1&sys='+$sys+'&db=1';
			}else if(v[2]=='0.01'){ //NEW VISIT/TIME
				db_new_record('ifo');
			}else{
				if($dirty && $vv_wri[sys_v] && !$vv_savi){ //if dirty, save then call again with $ajx					
					frm_save($vv_fid,"frm_status('00');$dirty=false;ctl_click('frm',false,'"+ id+"');");					
					return false;				
				}else{
					if(sys_v=='pdg'){
						location.href='i.php?sys='+$sys+'&db=1&iid='+0+'&rid='+$vv_id[2]+'&fid='+v[2]+tab+$vv_frm_xvars;
					}else{
						location.href='i.php?db='+$db+'&i1='+$vv_id[1]+'&i2='+$vv_id[2]+'&fid='+v[2]+tab+$vv_frm_xvars;
					}
				}				
			}
			
			break;			
		case 'bti':
			var key=targ.innerHTML;
			var val;
			if(key.charCodeAt(0)==169){
				val='';
			}else{
				if($itg.value==$cur_dat){
					val=key;
				}else{
					val=$itg.value+key;
				}
			}
			$itg.value=val;
			break;
		case 'npa':
			$itg=ge(targ.id.substring(6,targ.id.length));
			$ctl=ge('numpad');
			$prev_val=$itg.value;
			var p=f_pos($itg);
			var x=p[0]+0+'px';
			var y=p[1]+20+'px';	
			$cur_dat=$itg.value;
			$ctl.style.left=x;
			$ctl.style.top=y;
			gi('x_row_02').style.display=$touch?'':'none';
			$ctl.style.display='block';
			var wid=$itg.offsetWidth;
			if(wid<101){
				wid=101;
			}
			$ctl.style.width=(wid + 2) + 'px';	
			break;					
		case 'hhi':				
			var v=targ.id.split('_');
			var ix=v[2]*1;
			var tim=gi('¢_hhi_100_disp');
			var tam=gi('¢_hhi_200_ampm');
			var din=(tam.innerHTML=='···');
			if (ix<100){
				clock_set(targ,ix,-1,false);
				//if(din){
					if((ix>7 && ix<12) || ix>57){
						ampm='AM';
					}else{
						ampm='PM';
					}
					din=false;
					tam.innerHTML=ampm;
					tam.className='hhi_'+ampm;
				//}
				var mins="00";
				if(ix>50){
					mins="30";
					ix=ix-51;
				}
				if(ix==0){ix=12;}
				if(ix<10){ix='0' + ix;}
				tim.innerHTML=ix + ":" + mins;
			}else if (ix==200){
				if(din==false){ //AMPM has been defined
					var ampm=tam.innerHTML;
					var am=(ampm=='AM');
					if(v[3]=='ampm'){
						ampm='AM';
						if(am){
							ampm='PM';
						}
						tam.innerHTML=ampm;
						tam.className='hhi_'+ampm;
					}else{
						var hrs=tim.innerHTML.substring(0,2)*1;
						var mins=tim.innerHTML.substring(3,5)*1;
						var wind=false;
						if(v[3]=='L'){ //left arrow
							if($m1n){
								if(mins==0){hrs=hrs-1;mins=59;}else{mins=mins-1;}
							}else{
								if(mins==0){hrs=hrs-1;mins=55;}else{mins=mins-5;}
							}
							if(mins==55 || mins==25){wind=true;}
						}else{ //right arrow
							if($m1n){
								if(mins==59){hrs=hrs+1;mins=0;}else{mins=mins+1;}
							}else{
								if(mins==55){hrs=hrs+1;mins=0;}else{mins=mins+5;}
							}
							if(mins==30 || mins==0){wind=true;}
						}
						if(hrs==13){hrs=1;}else if(hrs==0){hrs=12;}
						if(wind){clock_set(false,hrs,mins,false);} //reset clock if boundary crossed
						if(hrs<10){hrs='0' + hrs;}
						if(mins<10){mins='0' + mins;}
						tim.innerHTML=hrs + ":" + mins;
					}
				}
			}else if (ix>900){ //enter time
				if(tim.innerHTML!='00:00'){
					var preval=$itg.value;
					if($itg.nodeName=='A'){
						$itg.innerHTML=tim.innerHTML+tam.innerHTML;
						if($itg.id.substring(0,1)=='c'){
							cal_time_edit(tim.innerHTML+tam.innerHTML); //cal!!!
						}
					}else{
						$itg.value=tim.innerHTML+tam.innerHTML;
					}
					if(preval!=$itg.value){frm_dirty($itg);}
				}
				ctl_clear(); 
			}
			return false;
			break;
		case 'tim':
			$itg=ge(targ.id.substring(6,targ.id.length));
			$ctl=ge('¢_hhi_100_clock');
			var tim;
			if($itg.nodeName=='A'){tim=$itg.innerHTML;}else{tim=$itg.value;}
			var p=f_pos($itg);
			var x=p[0]+0+'px';
			var y=p[1]+20+'px';	
			$cur_dat=$itg.value;
			$ctl.style.left=x;
			$ctl.style.top=y;
			$ctl.style.display='block';
			var wid=$itg.offsetWidth;
			if(wid<101){
				wid=101;
			}
			$ctl.style.width=(wid + 2) + 'px';	
			if(tim.length==0){
				clock_set(0,0,0,false);
			}else{
				clock_set(false,tim.substring(0,2)*1,tim.substring(3,5)*1,tim.substring(5,7));
			}			
			break;			
		case 'cal':
			$ctl=ge('cal');
			$ctl.style.display='block';
			if(targ.getAttribute('ccu')==1){
				targ=ge("¢_ccu."+id.substring(6,id.length));
			}else{
				targ=ge(id.substring(6,id.length));
			}			
			qal('show',targ);			
			$cur_dat=targ.value;
			$itg=targ;
			break;			
		case 'dro':
			$itc=targ;
			$itg=ge(targ.id.substring(6,targ.id.length));
			var drop=ge('dro_'+ targ.attributes['lev'].value);
			var p=f_pos(targ);
			var x=p[0]+1+'px';
			var y=p[1]+19+'px';		
			var wid=getStyle(targ,'width');
			wid=(wid.substring(0,wid.length-2)*1 + 17) + 'px';
			drop.style.zIndex=targ.getAttribute('uni')?302:200;
			drop.style.left=x;
			drop.style.top=y;
			drop.style.width=wid;
			drop.style.display='block';
			$ctl=drop;
			break;			
		case 'dra':
			var tx=targ.innerHTML;
			if(tx=='«««'){
				$itc.value='';
				$itg.value='';
			}else{
				$itc.value=tx;
				$itg.value=targ.attributes['valu'].value;
			}
			if(!$itc.getAttribute('uni'))frm_dirty($itg);
			return false;break;		
		case 'gxp':					
			var ix=targ.innerHTML.charCodeAt(0);
			if (ix==9660){
				targ.innerHTML='&#9650;';
				targ.className='exp_01';
				disp=browser_rowdisp();
			}else{
				targ.innerHTML='&#9660;';
				targ.className='exp_00';
				disp='none';
			}
			group_expand(document, 'tr', "gxp_" + targ.id.substring(6,targ.id.length), disp);
			break;			
		case 'ccu': ccu_click(targ); break;
		case 'chk': chk_click(targ); break;
		case 'tri': tri_click(targ); break;
		case 'rad':	rad_click(targ);break;	
		case 'fli':	pop_superfli(targ,'block');break;
		case 'tix':	frm_tix('click',targ);break;	
		case 'sxi':	frm_sxi('click',targ);break;	
		case 'cel': js_cell(targ);break;
		case 'ops': opo_show(targ,"fix",false,0,0);break;
		case 'opo': opo_click(targ);break;
		case 'url': location.href=targ.getAttribute('url');break;
		default:
			var fni=cat+'_click';
			eval('if(!window.'+fni+'){fni=false;}');
			if(fni){
				eval(fni+'(targ)');
			}else{
				ctl_click_app(cat,targ,id);
			}
		break;
	}
	$sel=targ;
}
function jfu_click(targ){
	var fn=targ.id.substring(2,targ.id.length);
	var id=targ.id.substring(6,targ.id.length);
	eval(fn.replace(/\./g,'$')+"(ge('"+id+"'))");
}
function ccu_click(targ){
	var id=targ.id;
	var ctl=targ.getAttribute('ctl');
	var val=targ.getAttribute('val');
	var cls=targ.className;
	eval(ctl+'_click()');
	function txt_click(){}
	function chk_click(){
		targ.className=(val==1)?'chk_00':'chk_00_sel';
		targ.attributes['val'].value=(val==1)?0:1;
	}
	function rad_click(){
		var v=id.split('#');
		var ii=v[0]+'#';
		var pri=ge(ii+'0'); //primary
		var trg=true;
		var i=0;
		while(trg){
			trg=ge(ii+i);
			if(trg){
				trg.className=(trg.id==targ.id)?'rad_00_sel':'rad_00';
				if(trg.id==targ.id){pri.attributes['val'].value=trg.getAttribute('vli');}
			}i++;
		}
		targ=pri;
	}
	function ops_click(){opo_show(targ,"fix",false,0,0);}
	targ.attributes['chg'].value=1;
}
function ccu_valid(targ){	
	if(typeof(targ)!='object'){
		targ=(targ.substring(0,1)=='¢')?targ:'¢_ccu.'+targ;
		targ=ge(targ);
	}	
	if(targ){
		var typ=targ.getAttribute('typ');
		switch (typ){
			case 'n':return tval(targ,typ,false,targ.getAttribute('min'),targ.getAttribute('max'),2);break;
		}
	}
}

function ccu_create(ctl,vari,oi,ini){
	if(ctl=='rad'){
		var i=0;
		var extra,cls,val;
		var leni=$opt[oi].length-1;
		for(ix in $opt[oi]){
			if(i<leni){
				val=ini?ini:0;
				extra=(i==0)?"val='"+val+"' chg='0'":"noc='1'";
				sel=(ini && (ini-1)==i)?"_sel":"";
				cls=(i==leni-1)?"ctl":"cti";
				document.write("<div class='"+cls+"'><a idx='¢_ccu."+vari+"#"+i+"' vli='"+ix+"' ctl='rad' class='rad_00"+sel+"' "+extra+">"+$opt[oi][ix]+"</a></div>\n");
			}
			i++;
		}
	}else{
	}	
}
function opo_click(targ){
	cat=targ.getAttribute('cat');
	switch(cat){
		case 'cel_opi':
			$cell.innerHTML=targ.getAttribute('vlu');
			js_cell(false,'%change');
			break;
		case 'cel_opo':
			$cell.innerHTML=targ.innerHTML;
			//$cell.setAttribute('vlu')=targ.getAttribute('vlu');
			js_cell(false,'change,'+targ.getAttribute('vlu'));
			break;
		case 'fix':
			var pop=ge('opt_pop');
			ge(pop.getAttribute('trg')).value=targ.getAttribute('vlu');
			break;
		case 'rep_list':
			var pop=ge('opt_pop');
			var sql=targ.getAttribute('sql');
			var pdat=pop.getAttribute('pdat');			
			u_repo_sql(sql,0,false,'',pdat);
			break;
	}
}
function opo_show(targ,cat,oi,xa,ya,xv){
	if(!oi){oi=targ.getAttribute('opt');}
	var cati=(cat=='cel_opo' || cat=='cel_opi')?'cel':cat;
	if(cati=='cel'){
		if(!xv['pop']){
			if(!js_cell(false,'%check_i')){return;}//cell check universal
		}
	} 
	targ.blur();
	xa=xa?xa:0;
	ya=ya?ya:0;
	ctl_clear();
	var dg='';
	var n=0;
	if(cat=='rep_list'){
		for(var ix in oi){
			sql=oi[ix];
			sql=sql.replace(/:/g,'');
			sql=sql.replace(/ /g,'_');
			dg+='<a id="¢_opo_'+ix+'" cat="'+cat+'" vlu="'+ix+'" sql="'+xv['path']+sql+'">'+oi[ix]+'</a>\n';
			n++;
		}			
		if(xv['glt']){
			dg+='<a id="¢_opo_'+ix+'" cat="'+cat+'" vlu="'+ix+'" sql="'+xv['glt']+'">GL transactions</a>\n';
			n++;
		}
		if(xv['go']){
			dg+='<a id="¢_url_'+ix+'" url="'+xv['go']+'">GO</a>\n';
			n++;
		}
		n--;
	}else{
		for(var ix in $opt[oi]){
			dg+='<a id="¢_opo_'+ix+'" cat="'+cat+'" vlu="'+ix+'">'+$opt[oi][ix]+'</a>';
			n++;
		}				
		dg+='<a id="¢_opo_z" cat="'+cat+'" vlu="">«««</a>';
	}
	var pop=ge('opt_pop');
	var popi=ge('opt_popi');
	var p=f_pos(targ);
	var wid=targ.offsetWidth*1;
	var hig=targ.offsetHeight*1;		
	if(cati=='cel'){
		pop.style.left=(p[0])+'px';
		pop.style.top=(p[1]+hig+ya)+'px';
	}else if(cat=='rep_list'){
		pop.setAttribute('pdat',xv['pdat']);
		pop.style.left=(p[0]+xa+10)+'px';
		pop.style.top=(p[1]+hig+ya+7)+'px';
		pop.setAttribute('trg',targ.id);
	}else{
		pop.style.left=(p[0]+xa)+'px';
		pop.style.top=(p[1]+hig+ya)+'px';
		pop.setAttribute('trg',targ.id);
	}
	if(n<7){
		popi.style.height=((n+1)*18)+'px';
	}else{
		popi.style.height='140px';
	}
	$ctl=pop;
	popi.innerHTML=dg;
	pop.style.display='block';
}
function chk_click(targ){
	if($click_flag){$click_flag=false;return false;} //blocked onclick
	var v = targ.id.split('.');
	var itarg=ge('i' + targ.id.substring(1,targ.id.length));
	if (targ.className=='chk_00'){
		targ.className='chk_00_sel';
		itarg.value=1;
	}else{
		targ.className='chk_00';
		itarg.value=0;
	}
	frm_dirty(itarg);
}
function mrk_click(targ){
	var v = targ.id.split('.');
	var itarg=ge('i' + targ.id.substring(1,targ.id.length));
	if (itarg.value==0){
		targ.className='sel';
		itarg.value=1;
	}else{
		targ.className='reg';
		itarg.value=0;
	}
	frm_dirty(itarg);
}
function tri_click(targ){
	var v = targ.id.split('.');
	var itarg=ge('i' + targ.id.substring(1,targ.id.length));
	switch(targ.className){
		case 'tri_00':
			targ.className='tri_00_sel';
			itarg.value=1;
			break;
		case 'tri_00_sel':
			targ.className='tri_00_unk';
			itarg.value=2;
			break;
		case 'tri_00_unk':
			targ.className='tri_00';
			itarg.value=0;
			break;
	}
	frm_dirty(itarg);
}
function rad_click(targ){
	var v = targ.id.split('.'), iFlag;
	var mx=targ.attributes['max'].value
	var input='i_rad_'+v[0].substring(6,v[0].length)+'.'+v[1];
	var cal=(right(v[0],1)=='c');
	var ti=ge(input);
	if ($fetch==false){
		if(ti.value == targ.attributes['valu'].value){ //click on same -> undo
			if($rad_fix==false){
				targ.className='rad_00';	
				ti.value='';
				mx=-1; //prevent fill
			}
		}
	}
	$rad_fix=false
	for(var i=0;i<mx;i++){
		itarg=v[0]+'.'+v[1]+'.'+i;
		if(i==v[2]*1){
			targ.className='rad_00_sel';	
			var yes=targ.attributes['y'].value;
			if(yes!=''){ //if click on a y=1 option
				var hi=ge('hi_' + input.substring(6,input.length));
				if (hi){ //make sure hi exists first (not necessarily so, given lev relations)
					if (yes==1){
						hi.className='hi_rad_00_sel';
					}else{
						hi.className='hi_rad_00';
					}
				}
			}
			ti.value=targ.attributes['valu'].value;			
		}else{
			ge(itarg).className='rad_00';			
		}		
	}
	if(!$cal){ //use $dirt_block instead !!!!
		frm_dirty(ti);	
	}
}
function bti_click(targ){
	var v = targ.id.split('.'), iFlag;
	var ti=ge('i_bti_'+v[0].substring(6,v[0].length)+'.'+v[1]);
	var mx=ti.attributes['mx'].value;
	if ($fetch==false){
		if(ti.value == targ.attributes['valu'].value){ //click on same -> undo
			targ.className='bti';	
			ti.value='';
			mx=-1; //prevent fill
		}
	}
	for(var i=0;i<mx;i++){
		itarg=v[0]+'.'+v[1]+'.'+i;
		if(i==v[2]*1){
			targ.className='bti_sel';	
			ti.value=targ.attributes['valu'].value;			
		}else{
			ge(itarg).className='bti';			
		}		
	}
	frm_dirty(ti);	
}
function rad_clear(ctl){
	var mx=ge('¢_rad_' + ctl + '.0').attributes['max'].value;
	var val=ge('i_rad_' + ctl ).value;
	for(i=0;i<mx;i++){
		trg=ge('¢_rad_'+ctl+'.'+i);
		if(trg.attributes['valu'].value==val){
			rad_click(trg);
			return false;
		}
	}
}
function input_clear(targ,lead){
	var nam=targ.id;
	nam=lead+nam.substring(5,nam.length);
	ge(nam).value='';
}
function clock_set(targ,h,m,ampm){
	var tam=ge('¢_hhi_200_ampm');
	for(var i=1;i<13;i++){
		ge('¢_hhi_' + i).className='hhi_reg';
		ge('¢_hhi_' + (i+50)).className='hhi_haf_reg';
	}
	if(h==0){
		ge('¢_hhi_100_disp').innerHTML='00:00';
		tam.innerHTML='···';
		tam.className='hhi_am';
	}else{
		if(m>-1){
			if(ampm){ //setting time from control
				var ht=h;var mt=m;
				if(h<10){ht='0'+h;}
				if(m<10){mt='0'+m;}
				ge('¢_hhi_100_disp').innerHTML=ht+':'+mt;
				tam.innerHTML=ampm;
				tam.className='hhi_'+ampm;
			}
			if(m> 25){h+=51;}
			if(h==63){h= 51;}
			targ=ge('¢_hhi_' + h);
		}
		if(h<50){
			targ.className='hhi_sel';
		}else{
			targ.className='hhi_haf_sel';
		}
	}
}
function lst_change(targ){
	frm_dirty(targ);
}
function lst_unselect(targ,dirt){
	targ.value='';
	targ.selectedIndex = -1;
	if(dirt){
		frm_dirty(targ);
	}
}
function lst_filter(ix,box,filters){
	var pos;
	var lst=ge('lst_'+ix);
	var lst_flt=ge('lst_'+ix+'_flt');
	var cnt=0;
	var itx='';
	var flt=[];
	var filter_go=true;
	var f_sum=0;
	var code=false;
	var cdi=false;
	tx=box.value.trim().toLowerCase();
	if(filters){
		if(filters=='code'){
			code=tx;
			filters=false;
		}else{
			for(var f=0;f<filters;f++){
				flt[f]=ge('filter_'+f).value;
				f_sum+=flt[f]*1;
			}
			if(!f_sum){
				filters=0;
			}
		}
	}	
	if(!tx && !filters && !code){
		lst_flt.style.display='none';
		lst.style.display='block';
		lst.selectedIndex=0;
		lst.onchange();
	}else{
		var mx=lst.length;
		lst_flt.length=0;
		for(var i=0;i<mx;i++){
			if(code){
				pos=-1;
				cdi=lst.options[i].getAttribute('code');
				if(cdi){
					if(code==cdi.toLowerCase()){
						pos=1;
					}
				}
			}else{
				if(!tx){
					pos=1;
				}else{
					itx=lst.options[i].text.toLowerCase();
					pos=itx.indexOf(tx);		
				}
				if(filters){
					filter_go=0;
					for(f=0;f<filters;f++){
						if(flt[f]==lst.options[i].getAttribute('flt'+f) || flt[f]==0){
							filter_go++;
						}
					}
					filter_go=(filter_go==filters);
				}
			}
			if(pos>-1 && filter_go){
				//if(cnt==0 && lst_flt.length>0){lst_flt.length=0;}
				lst_flt.options[lst_flt.length] = new Option(lst.options[i].text,lst.options[i].value);	
				cnt++;
			}
		}
		if(lst.style.display='block'){
			lst.style.display='none';
			lst_flt.style.display='block';
		}
		if(cnt>0){
			lst_flt.selectedIndex=0;
		}
		lst_flt.onchange();
	}
}
function lss_change(targ,typ,frm){
	//alert(typ + "  " + targ.options[targ.selectedIndex].value)
	if(targ.selectedIndex>-1){
		$vv_listi[typ]=targ.options[targ.selectedIndex].value;
	}else{
		$vv_listi[typ]=0;
	}
	frm_restore(frm,false);
}
function frm_blocker(display){
	ge('blocker').style.display=(display)?'block':'none';
}
function is_blocked(){
	return(ge('blocker').style.display=='block');
}
function lst_update(box,lst){
	lst=ge(lst);
	lst.options[1].innerHTML=box.value;
}

//CLEARING
function date_action(){
	if($sel){
		var targ=$sel;
		if(targ.attributes['jfc']!=undefined){
			eval(targ.attributes['jfc'].value);
		}
	}
}
function ctl_clear(){
	if($ctl){	
		if($ctl.id=='numpad'){if($prev_val!=$itg.value){fire_event($itg,'change');}}
		$ctl.style.display='none';
		$ctl=false;
	}
}
function sel_clear(){
	$sel=false;
}

//DATA
function frm_exe(fnc,tbl,arr){
	var dat=array_to_post(arr);
	$aji='data_exec';
	ajax_post('a_data.php',dat,'&fnc='+fnc+'&tbl='+tbl);
}
function frm_go_exec(ix,url){
	var id=ge(['exe_'+ix]);	
	if(id!='invalid'){
		location.href=url+id['exe_'+ix];
	}
}
function frm_insert(fid,module,tix){
	var tbl=frm_name(fid);
	if(tbl.substring(0,1)=='!'){ //this will not happen for tix>1 so no need to send module name
		alert(module + ' module not yet available.');
		return false;
	}
	var dat='&tid='+frm_tid(fid)+'&tbl='+tbl+'&mod='+1;
	
	if(sys_v=='pdg'){
		$vv_tix=tix?tix:1;
	}else{
		var iix=frm_tix_val(fid,tix,false,true);
		dat+="&iii=id_"+iix;
	}
	frm_status('02');
	$aji='data_insert';
	if(tix){ //insertion of extra time index
		dat+='&fetch=1';
		$ajx="frm_status('00');frm_fill(rsp,false);$dirty=false;";
	}else{ //insertion of new module
		$ajx="frm_status('00');frm_showmod(rsp,'"+fid+"');$dirty=false;";
	}
	ajax_post('a_data.php','frm='+fid+frm_ids()+dat);	
}
function frm_showmod(rsp,fid){
	if(rsp=='OK'){
		var loc=location.href;
		ix=loc.indexOf('&fid');
		if(ix>1){
			loc=loc.substring(0,ix);
		}
		loc+='&fid='+fid;
		location.href=loc;
	}
}
function frm_restore(fid,xdat){
	if($vv_rsti){eval($vv_rsti);return;}
	if(!fid){fid=$vv_fid;}
	var	vtab=-1;
	if(fid>500){
		if($vv_tab){fid=((fid*1)+($vv_tab/100)).toFixed(2);}
	}else{
		vtab=$vv_tab;
	}
	if($sare_block && $sare_full){
		var exec="handler_"+frm_name(fid)+"('fetch',false);";
		eval(exec);
		return false;
	}
	frm_status('02');
	$aji='data_fetch';
	$ajx="frm_status('00');frm_fill(rsp,false);$dirty=false;";
	xdat=xdat?xdat:'';
	ajax_post('a_data.php','frm='+fid+frm_ids()+xdat+'&tab='+vtab);			
}
function frm_save(fid,ajx){ //if ajx, switch frm after save for pre-loaded systems
	if($vv_pink){return false;}
	if($vv_savi){eval($vv_savi);return;}
	if(!fid){fid=$vv_fid;}
	if(window.frm_wix_set){frm_wix_set(frm_name(fid));}
	var dat=frm_data(fid);
	if(dat=='[]'){return false;}
	if($vv_savex){eval($vv_savex);}
	$aji='data_save';
	if(ajx){
		$ajx=ajx;
	}else{
		if(window.frm_save_ajx){
			$ajx=frm_save_ajx();
		}else{
			$ajx="frm_clean();";
		}
	}
	ajax_post('a_data.php','data='+dat+frm_ids()+'&norec='+$vv_norec+frm_sxi_post('get'));			
}
function frm_ids(){
	var pst='';
	var psx='';
	for(ix in $vv_listi){psx='&'+ix+'='+$vv_listi[ix];}
	for(i=0;i<4;i++){
		pst+='&id_'+i+'='+$vv_id[i];
		pst+='&ix_'+i+'='+$vv_ix[i];		
	}	
	pst+='&tix='+$vv_tix+'&fid='+$vv_fid+'&tab='+$vv_tab;		
	return pst+psx;
}
function frm_sxi_post(act,id,val){	
	if(act=='set'){
		id=id.split('.');
		$vv_sxi[id[1]]=val;	
	}else{
		tx='';
		for(ix in $vv_sxi){
			tx+='&'+ix+'='+$vv_sxi[ix];
		}
		return tx;	
	}
}
function frm_sxi(act,targ,dat){	
	if(act=='set'){
		var id=targ;
		targ=ge(targ);
		if(targ.hasChildNodes()){
	    while(targ.childNodes.length >= 1 ){
				targ.removeChild(targ.firstChild);       
	    } 
		}
		var tbl=document.createElement("Table");
		tbl.className='tbl_sx_00';
		tbl.cellSpacing='0';
		tbl.style.borderCollapse="collapse";
		var v=dat.split('_');		
		var rows=1+Math.floor((v[1]-1)/10);
		var cols=11;
		var n;
		var not=false;
		if(rows==0){
			rows=1;
			not=true;
		}
	  for(i=0;i<rows;i++){
			var tr=tbl.insertRow(i);
	    for(j=0;j<cols;j++){
				var td=tr.insertCell(j);      
				n=i*10+j+1;		
				var d=id.split('.');
				td.setAttribute('id','¢_sxi_'+i+'_'+j+'@'+d[1]);
				if(j==10){
					if(not){
						td.innerHTML='&#9668;&#9668;';				
						td.className='not';
					}else{
						td.innerHTML='ifo';				
						td.className='ifo';
					}
					td.rowSpan=rows;
				}else{
					if(n<=v[1]){
						if((i*10+j+1)==v[0]){
							td.className='sel';
							frm_sxi_post('set',id,n);
						}else{
							td.className='reg';
						}					
						td.innerHTML=n;				
					}else{
						td.innerHTML='&nbsp;';				
						td.className='nil';
					}
				}
	    }
	  }
		targ.appendChild(tbl);
		ge(id.substr(4,id.length)).value=v[0];
		var hig=targ.getAttribute('hig')*1;
		var tr=targ.parentNode.parentNode;			
		var tbl=tr.parentNode.parentNode			
		for(i=tr.rowIndex+1;i<tr.rowIndex+hig;i++){
			tbl.rows[i].style.display=not?'none':browser_rowdisp();
		}
		if(not){
			var div=document.createElement("div");         
			div.className ='div_sx_not';            
			div.innerHTML='click on grid to add '+targ.getAttribute('nam')+' index';
			targ.appendChild(div);	
		}
	}else if(act=='click'){
		var n=targ.innerHTML;
		var id=targ.parentNode.parentNode.parentNode.parentNode.id;
		if(targ.className=='reg'){
			if($dirty){
				alert('Please save current changes before swithing index.');
				return;
			}
			var itarg=ge(id.substr(4,id.length));
			frm_sxi_post('set',id,targ.innerHTML);	
			itarg.value=targ.innerHTML;
			frm_dirty(itarg);
			frm_save(false,"frm_status('00');$dirty=false;frm_restore(false,false);");
		}else if(targ.className=='nil' || targ.className=='not'){		
			if(!$vv_wri[sys_v]){return;}		
			var next_act=(targ.parentNode.parentNode.parentNode.rows[0].cells[10].innerHTML=='ifo')?'new':'zero';
			var msg='Do you wish to add a new '+ge(id).getAttribute('nam')+' index?';
			valert(msg,'new index','yesno',false,"frm_sxi('"+next_act+"','"+id+"');");
		}else if(targ.className=='ifo'){		
			frm_sxi('ifo',id,false);
		}
	}else if(act=='new' || act=='ifo' || act=='zero'){		
		var v=targ.substr(4,targ.length).split('.');
		targ=ge(targ);
		if(act=='new'){		
			$aji='sxi_insert';
			$ajx="frm_sxi('refresh',false,rsp);";
		}else if(act=='zero'){		
			$aji='sxi_zero';
			$aji='sxi_insert';
			$ajx="frm_sxi('refresh',false,rsp);";
		}else{
			$aji='sxi_info';
			$ajx="frm_sxi('ifo_show','"+targ.getAttribute('nam')+"',rsp);";
		}
		ajax_post('a_data.php','frm='+$vv_fid+'&rc_tbl='+v[0]+'&rc_col='+v[1]+'&ix_tbl='+targ.getAttribute('tbl')+frm_ids());		
	}else if(act=='ifo_show'){			
		valert("<center>"+dat+"</center>",targ);
		var tbi=gec('tbl_pop_ifo',ge('valert'));
		tbi[0].cellSpacing="1";
	}else if(act=='refresh'){		
		if(dat==1){
			frm_restore(false,false);
		}else{
			valert('error writing to db');
		}
	}
}

function frm_tix(act,tix,targ){	
	var ex='';
	var typ=false;
	var tf_div=ge('frm_divs');
	switch(act){
		case 'set':		
			if(!tix){if(tf_div){tf_div.style.display='none';}}
			if(tix.indexOf('_')>-1){
				var u=tix.split('_');
				ex='_'+u[0];
				tix=u[1];
			}
			//alert(tix)
			var v=tix.split('!');
			var t=v[0].split(',');
			var n=t[0]*1;
			var r=(v.length==2)?v[1].split(','):false;
			var e=(v.length==3)?v[2].split(','):false;
			for(i=1;i<n+1;i++){
				targ=ge('¢_tix_'+i+ex);
				targ.innerHTML='';
				targ.className='bti';
			}
			var tii;
			if(sys_v=='pdg'){
				tii=$vv_tix
			}else{
				tii=frm_tix_val(false,false);
			}
			for(i=1;i<t.length;i++){
				targ=ge('¢_tix_'+i+ex);
				targ.innerHTML=i;
				if(i==tii){targ.className='bti_sel';}
				if(r){targ.setAttribute('tid',r[i-1]);} //record id #s
				if(e){ //extra marker
					ge('etix_'+i+ex).innerHTML=e[i-1];
				}
			}
			break;
		case 'click':
			targ=tix;
			var v=targ.id.split('_');
			if(targ.innerHTML){
				var tid=targ.getAttribute('tid');
				if(tid!=null){
					frm_tix_switch(targ,tid);
				}else{
					$vv_tix=v[2];	
					frm_restore(false,false);
				}
			}else{ //new
				if(!$vv_wri[sys_v]){return;}
				if($dirty){
					valert('You must save/discard changes before adding a new index.','new index');
					return;
				}
				typ=targ.parentNode.getAttribute('typ');
				typ=typ?typ+' ':'';
				if(v.length==4){
					//alert(v[3])
					ex='_'+v[3];
				}
				for(var i=v[2];i>0;i--){
					if(ge('¢_tix_'+i+ex).innerHTML!=''){break;}
				}
				v[2]=i+1;
				var msg='Do you wish to add '+typ+'index '+v[2]+'?';
				//msg+=(i+1!=v[2])?'<br><br><b class="red">WARNING</b><br>It is not the next logical selection.':'';
				typ=typ?typ:'time ';
				valert(msg,typ+'index','yesno',false,"frm_tix('add',"+v[2]+",'"+targ.id+"')");
			}
			break;
		case 'add':
			targ=ge(targ).parentNode; //parent row
			typ=targ.getAttribute('exe');
			if(typ){
				frm_insert_rec(typ,tix);
			}else{
				if(tf_div){tf_div.style.display='block';}
				frm_insert($vv_fid,'',tix);
			}
			break;
	}
}
function frm_fill(rsp,direct){
	var frm=ge('frm_'+$vv_fid);
	var rs;
	var go=false;
	$vv_norec=0;
	$vv_recnum=-1;
	$fetch=true;
	$dirt_block=true;
	var iex,v,vi,typ,ctl,sel,targ,itarg,trg,mx,tx;
	if(!direct){
		rs=eval('(' + rsp + ')');
	}else{
		rs=rsp;
	}
	for(var i=0;i<rs.length;i++){
		v=rs[i].v;
		iex=v.substr(0,2);
		go=(iex=='i_' || iex=='e_' || iex=='x_')
		if(go){
			if(iex=='x_'){ //for XRS data
				typ='xrs';				
			}else{
				if(iex=='e_'){ //for ic data
					v=frm.elements['n_'+v.substr(2,v.length)].id;
				}
				typ=v.substr(2,3);
				if(typ=='txt' || typ=='num' || typ=='dtx' || typ=='mag'){
					ctl=v.substr(6,v.length);
				}else{
					ctl=v.substr(2,v.length);
				}
			}
			//if(i<3){valert(v + "  : :  " +typ + " " + rs[i].x);}
			switch(typ){
				case 'arr':frm_arr($vv_fid,rs[i].x);break;
				case 'div':				
					var targ=ge(ctl.substr(4,ctl.length));
					//alert(ctl.substr(4,ctl.length))
					targ.innerHTML=rs[i].x;
					targ.style.display=rs[i].x?'block':'none';
					break;
				case 'tbl':frm_tbl_fill(ge(ctl.substr(4,ctl.length)),rs[i].x);break;
				case 'tix':frm_tix('set',rs[i].x,0);break;
				case 'sxi':frm_sxi('set',ctl,rs[i].x);break;
				case 'vix':frm_vix(frm_name($vv_fid),rs[i].x,0);break;
				case 'vvx':frm_vix(frm_name($vv_fid),rs[i].x,1);break;
				case 'iii':var iv=rs[i].x.split("_");$vv_id[iv[1]]=iv[2];$vv_norec=0;break; //norec reset upon insertion
				case 'nnn':
					$vv_norec=(rs[i].x*1==0)?1:0;
					if(typeof frm_norec_handler=='function'){frm_norec_handler($vv_norec);}
					break;
				case 'rad':
					targ=ge('¢_' + ctl + '.0');
					if(!targ){
						alert('¢_' + ctl + '.0')
					}
					mx=targ.attributes['max'].value;
					if(rs[i].x.length==0){
						ge(v).value='';
						for(var a=0;a<mx;a++){
							ge('¢_' + ctl + '.' + a).className='rad_00';
						}
					}else{
						for(var a=0;a<mx;a++){
							targ=ge('¢_' + ctl + '.' + a);
							if(rs[i].x==targ.attributes['valu'].value){
								rad_click(targ);								
								a=mx;
							}
						}
					}
					break;
				case 'chk':
					var tg=ge(v)
					if(tg){
						tg.value=rs[i].x;
					}else{
						alert(v);
					}
					targ=ge('¢_' + ctl);
					if(rs[i].x*1==1){
						targ.className='chk_00_sel'
					}else{
						targ.className='chk_00'
					}
					break;
				case 'mrk':
					ge(v).value=rs[i].x;
					targ=ge('¢_' + ctl);
					if(rs[i].x*1==1){
						targ.className='sel';
					}else{
						targ.className='reg';
					}					
					break;
				case 'tri':
					ge(v).value=rs[i].x;
					targ=ge('¢_' + ctl);
					switch(rs[i].x*1){
						case 0:
							targ.className='tri_00';
							break;
						case 1:
							targ.className='tri_00_sel';
							break;
						case 2:
							targ.className='tri_00_unk';
							break;
					}
					break;
				case 'dro': //this one is a bit special RE v~ctl
					vi=ctl.split('#');
					ctl=vi[0].substr(4,vi[0].length);
					trg=ge('¢_dro_' + ctl);
					if(rs[i].x.length>0){
						targ=ge('¢_dra_' + trg.attributes['lev'].value + "." + rs[i].x);
						if(targ!=undefined){
							tx=targ.innerHTML;
						}else{
							tx='';
						}
					}else{
						tx='';
					}
					ge(ctl).value=rs[i].x;
					trg.value=tx;
					break;
				case 'qir':
					ge('¢_'+ctl).value=rs[i].x;
					break;
				case 'num':
					ge(ctl).value=rs[i].x;
					break;
				case 'fli':		
					ge('i_'+ctl).value=rs[i].x;
					break;
				case 'txt':
					if(ge(ctl)==undefined){
						valert(ctl);
					}else{
						ge(ctl).value=rs[i].x;
					}
					break;
				case 'dtx':
					if(rs[i].x==null){
						tx='';
					}else{
						if(rs[i].x.length==0){
							tx='';
						}else{
							tx=rs[i].x.substr(0,10);
							v=tx.split("-");
							tx=v[2] + '-' + month_mmm(v[1]*1) + '-' + v[0];
						}
					}
					ge(ctl).value=tx;
					break;
				case 'tmx':
					tx='';
					if(rs[i].x.length>0){
						v=rs[i].x.substring(11,16).split(":");
						var hrs=v[0]*1;
						if(hrs==0){
							hrs=12;
							v[1]+='AM';
						}else if(hrs>11){
							if (hrs>12){
								hrs=hrs-12;
							}
							v[1]+='PM';
						}else{
							v[1]+='AM';
						}
						if(hrs<10){
							tx='0';
						}
						tx+=hrs+':'+v[1];
					}
					ge(ctl.substring(4,ctl.length)).value=tx;
					break;					
				case 'lst':
					if(rs[i].x*1>0){
						targ=ge(rs[i].v+'.'+rs[i].x);
						if(targ){
							ix=targ.attributes['ix'].value;
							targ=ge("i_"+ctl);
							targ[ix].selected=true;
							targ.style.borderColor='#474747';;
						}else{
							if(ge("i_"+ctl)==undefined){
								valert("i_"+ctl);
							}else{
								ge("i_"+ctl).style.borderColor='#ff00e4';;
							}
						}
					}else{
						targ=ge(rs[i].v);
						if(targ.value!=''){
							targ.value='';
							ix=ge(rs[i].v+'.'+ targ.value).attributes['ix'].value;
							ge("i_"+ctl)[ix].selected=false;
						}
					}
					break;					
				case 'xrs':
					xrs_chk(false, rs[i].x*1);
					break;
				case 'mag':
					ge(ctl).value=rs[i].x;
					break;
				case 'lsi':
					var v=rs[i].x.split('·');
					if(v[0]!=''){
						ge(ctl+v[0]).innerHTML=v[1];
					}
					break;
				case 'hic':
					targ=ge('¢_'+ctl);
					ge('i_'+ctl).value=rs[i].x*1;
					if(rs[i].x*1==1){
						targ.className='hi_chk_00_sel';
					}else if(rs[i].x*1==2){
						targ.className='hi_chk_00_nil';
					}else{
						targ.className='hi_chk_00';
					}
					break;					
				case 'bti':
					targ=ge('¢_' + ctl + '.0');
					itarg=ge(v);
					mx=itarg.attributes['mx'].value;
					if(rs[i].x.length==0){
						itarg.value='';
						for(var a=0;a<mx;a++){
							ge('¢_' + ctl + '.' + a).className='bti';
						}
					}else{
						for(var a=0;a<mx;a++){
							targ=ge('¢_' + ctl + '.' + a);
							if(rs[i].x==targ.attributes['valu'].value){
								bti_click(targ);
								a=mx;
							}
						}
					}
					break;					
			}
		}else{
			if(ge(v)){
			}else{
				//valert(v);
			}
			//.innerHTML=rs[i].x;
		}
	}
	$fetch=false;
	$dirt_block=false;
	frm_status('00');
	if(window.frm_restore_reaction){frm_restore_reaction();}
	if(window.frm_magic){frm_magic();}
	//my_foot();
}
function frm_tbl_fill(tbl,dat){
	var row,cell,c;
  var hed=1; // constant for now
	var r=dat.split('§');
	var lr=tbl.rows.length
	for(var i=lr-1;i>hed-1;i--){
		tbl.deleteRow(i);
	}
	for(var i=0;i<r.length;i++){
		row=tbl.insertRow(hed+i);
		c=r[i].split('·');
		for(var j=0;j<c.length;j++){
			cell=row.insertCell(0);
			cell.innerHTML=c[j];
		}
	}
	
}
//	if(window.frm_multi){var go=frm_multi(targ);if(!go){return};}
function frm_ctl_pro(targ,att){
	var ret=false;
	var id=targ.id;
	if(id.substr(0,2)=='i_'){id=id.substr(6,id.length);}
	var v=id.split('.');	
	if(!att){
		ret=v;
	}else if(att=='col'){
		ret=v[1];
	}else if(att=='tbl'){
		ret=v[0];
	}
	return ret;
}
function frm_go(targ){
	var cfm=targ.getAttribute('frm');
	var go=true;		
	if(cfm){
		cfm=cfm.replace(/\./g, '_');
		eval("if(window.frmi_"+cfm+"){go=frmi_"+cfm+"();}");		
	}
	return go;
}
function frm_data(fid,aux){
	var i,id,ti,typ,chg,val,targ,a,go;
	var dat=[],v,col;
	var tg=aux?ge(fid).getElementsByTagName('INPUT'):ge('frm_'+fid).elements;			
	for(i=0; i<tg.length; i++){
		targ=tg[i];
		id=targ.id;
		typ=targ.attributes['typ'] ? targ.attributes['typ'].value : 'x';
		chg=targ.attributes['chg'] ? targ.attributes['chg'].value :  0 ;						
		if(typ!='x' && chg==1){
			v=frm_ctl_pro(targ);
			ti=v[0];		
			col=v[1];
			if(aux){go=true;}else{go=frm_go(targ);}
			if(go){
				targ.attributes['chg'].value=0; //change reset!!
				if(chg==1){
					val=db_val(targ.value,typ,true)
					if(val!='!@!'){
						if(ti=='x'){ //XRS						
						}else{
							if(dat[ti]==undefined){dat[ti]=[];}
							dat[ti][dat[ti].length]=col+'='+val;
						}
					}
				}
			}
		}
	}		
	var jsn='';
	var spc=0; //special saves handled here
	for(ti in dat){
		if(jsn){jsn+=',';}
		jsn+='{"ti":'+ti+',"set":"'+dat[ti].join(',')+'","w":"'+$wix+'","spc":"'+spc+'"}';
	}
	return '['+jsn+']';
}
function frm_dirty(targ,force){
	if($dirt_block && !force){return false;}
	if(targ){
		if(targ.attributes['typ']!=undefined){
			if(targ.attributes['typ'].value=='x'){return false;}
		}
	}
	if($fetch==false){
		if(!targ){
			if($dirty==false){
				frm_status('01');
			} 
		}else{
			if(targ.attributes['chg']!=undefined){
				targ.attributes['chg'].value=1;
				if(!frm_go(targ)){return;}
				if($dirty==false){
					frm_status('01');
				} 
			}
		}
	}
	//valert(targ.id);
	$dirty=true;
}
function frm_save_block(id,cri){ //this can be expanded later
	if(id){if(!ge(id).value){return;}}
	$vv_savi='1';
	$dirt_block =1;
	ge('vim_sav').style.display='none';
	ge('frm_divs_pre').innerHTML="<span>THIS RECORD IS LOCKED FOR EDITING</span>";
}
function frm_isdirty(){return frm_status('get')*1;}
function frm_clean(){frm_status('00');$dirty=false;}

//MAGIC BOXES
function mag_fill(){
}

//VALIDATION
function eslash(val){
	if(!val){
		val='';
	}else{	
		val=val.replace(/\r/g, ''); //to get rid of extra return in IE
		val=escape(addslashes(val));
	}
	return val;
}
function js_val(val){
	return val.replace(/"/g,'\\"');
}
function db_val(val,typ,jsn,targ){
	if(!val){
		val='';
	}else{
		if(typeof(val)=='object'){
			typ=val.getAttribute('typ');
			if(typ=='x'){typ=val.getAttribute('val_typ');typ=typ?typ:'x';}
			val=val.value;
		}
	}
	if(typ=='n'){ //number
		if(val.length==0){
			val='Null';
		}else if(val==0){
		}else if(!is_numeric(val)){
			val='Null';
		}else{
			val=val*1;
		}
	}else if(typ=='d'){ //date
		if (val.length==0){
			val='Null';
		}else{
			val=date_format(val);
		}
	}else if(typ=='h'){ //time
		if (val.length==0){
			val='Null';
		}else{
			val="'" + time_format(val) + "'";
		}
	}else if(typ=='t'){ //t=text			
		if (val.length==0){
			val='Null';
		}else{
			val=val.replace(/\r/g, ''); //to get rid of extra return in IE
			val="'" + escape(addslashes(val)) + "'";
			if(jsn){
				val=val.replace(/%5C%27/g, '%5C%5C%27'); //escape escape for json
			}
		}
	}else if(typ=='b'){ //b=binary
		if (val.length==0){
			val=0;
		}else{
			val=val*1;
		}
	}else if(typ=='l'){ //list
		if (val.length==0){
			val='Null';
		}else{
			val=val*1;
		}		
	}else if(typ=='n0'){ //number
		if(val.length==0){
			val=0;
		}else if(!is_numeric(val)){
			val=0;
		}else{
			val=val*1;
		}
	}else{
		val='!@!';				
	}		
	return val;
}
function tval(targ,typ,brd,min,max,no_dirt){
  var msg='';
	var lbl=' ';
	var mag=false;
	if(typ=='@' || "ccu"){
		if("ccu"){targ=ge('¢_ccu.'+targ);}		
		typ=targ.getAttribute('typ');
		min=targ.getAttribute('min');
		max=targ.getAttribute('max');
		no_dirt=2;
		lbl=' '+brd+' ';
	}
	if(!no_dirt){frm_dirty(targ);}
  switch(typ){
  case 'd': //date
    break;
  case 't': //string
    break;
  case 'm': //string in textareawith max len
    if(max!=''){
	    if(targ.value.length > max*1){
	      msg='Your'+lbl+'entry may not exceed ' + max + ' characters.\n\n';
	    }
		}
    break;
  case "n": //number
		if(min=='!'){
			if(window.frm_magic){frm_magic();}
			return false;
		}
		mag=true;
    num=isnumeric(targ.value);
    if(num!=",,,,"){
      if(num == null){
        msg="Your"+lbl+"entry is not a number.";
      }else{
        var num=targ.value*1;
        if (num<min*1 || num>max*1){
          msg="Your"+lbl+"entry is out of range.";
        }
      }
    }
		if (msg != ""){
			msg+= '\n\n' + 'Please key in a value between: ' + min + ' and ' + max + '\n\n';
		}
    break;
  }
	if(no_dirt==2){
		return msg;
	}else{
		var ebox=ge("frm_er");
		var etot=ebox.value*1;
		if (msg != ""){
			etot=etot+1;		
			targ.style.borderColor='#ff00e4';
			$prev_status=(frm_status('get')=='03')?$prev_status:frm_status('get');
			frm_status('03');
			valert(msg);
		}else{
			if(etot>0){
				etot=etot-1;
				targ.style.borderColor=brd;
				if(etot==0){
					frm_status($prev_status);
				}
			}
			if(mag==true){mag_fill()};
		}
		if(!etot){$vv_pink=false;}else{$vv_pink=true;}
		ebox.value=etot;
	}
	if(window.frm_magic){frm_magic();}
}
function location_go(href){
	location.href=href;
}
function data_unique(tbl,col,val,wq,fnc){
	var v=[];
	v['tbl']=tbl;
	v['col']=col;
	v['val']=val;
	if(wq){v['wq']=wq;}
	var pdat=array_to_post(v);		
	$aji="data_unique";
	$ajx=fnc;
	ajax_post('a_data.php',pdat,false); //this may need adjustment
}

//HIDDEN ROWS
function browser_rowdisp(){
	if (navigator.appName== "Microsoft Internet Explorer") {
		return 'inline';
	}else{
		return 'table-row';
	}
}
function group_expand(oElm, strTagName, strClassName, disp){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var e;
	for(var i=0; i<arrElements.length; i++){
		e = arrElements[i];
		if(oRegExp.test(e.className)){
			e.style.display=disp;
		}
	}
	my_foot();
}
function my_foot(){
	gi('foot').className='clear'; //because of f*ck$#g IE to drop footer down to bottom on data load
}

$vv_wino=false;
//REPORT
function reports_sql(sql,win,til,gdat,pdat){//add tranny
  if(win){
    window.open('../00I/u_repo.php?i=0&sql='+sql+'&win=1&app=norvision');
  }else{
		u_repo_sql(sql,win,til,gdat,pdat);
  }
}
function u_repo_sql(sql,win,poptil,gdat,pdat){//add tranny
  if(win){
		var action='../00I/u_repo.php?i=0&sql='+sql+'&win=1&app='+sys_v;
		var form=ge('uf');
		if(form){form.parentNode.removeChild(form);}
		form=document.createElement("FORM");
		document.body.appendChild(form);		
		form.setAttribute("id", "uf");
		form.setAttribute("target", "u_repo");
		form.setAttribute("method", "post");
		form.setAttribute("action", action);		
		if(pdat){
			if(!isarray(pdat)){pdat=array_from_post(pdat);}
			for(i in pdat){new_e(form,i,pdat[i]);}
		}
		var newwindow=window.open('','u_repo');
		if($vv_wino=='u_repo'){
			newwindow.close();
			newwindow=window.open('','u_repo');
		}
		$vv_wino='u_repo';
		newwindow.focus();
		form.submit();		
  }else{
		if(!poptil){poptil=sys_v;}
		pdat=pdat?pdat:'';
    dat='sql='+sql+'&win=0&app='+sys_v+'&typ=ajx';
		if(gdat){dat+="&"+gdat;}
    $aji=0;
    $ajx="valert(rsp,'"+poptil+"','yesno',false,'txl_exec()^valert(false)','XL','close')";
    ajax_post('../00I/u_repo.php',pdat,dat);	
  }
	function new_e(form,nam,val){
		var e=document.createElement("INPUT");
		e.setAttribute("type","hidden");
		e.setAttribute("name",nam);
		e.setAttribute("value",val);
		form.appendChild(e);
	}		
}
