AttachEvent(window,'load',function(){
	function Init(){
		var inps = document.getElementsByTagName('input');
		for (var i=0,len=inps.length;i<len;i++){
			var inp=inps[i],fid=inp.getAttribute('for');
			if (!fid) continue;
			inp.filterfor = document.getElementById(fid);
			if (!inp.filterfor) continue;
			inp.filterfor.emptyfilter = document.getElementById(inp.filterfor.getAttribute('filter_nomatch'));
			AttachEvent(inp,'keyup',Filter,false);

			// assign|create filter as property for speed
			for (var i=0,lines=inp.filterfor.childNodes,len=lines.length;i<len;i++){
				var line=lines[i];
				if (!line.getAttribute) continue;
				var fkey=line.filter || line.getAttribute('filter');
				if (!fkey) line.filter=line.innerHTML.replace(/<[^>]+>/g,' ').replace(/[\n\t\r]+/g,' ');
				line.filter = line.filter.toLowerCase();
			}
		}
		
		FilterInp(inp);
	}

	function Filter(evt){
		//var startTime = new Date();
		if (!evt && window.event) evt=event;
		var inp = evt.target || evt.srcElement;
		if (inp.filterfor) FilterInp(inp);
		//var endTime = new Date();
		//DebugOut((endTime-startTime)+'ms',0);
	}

	function FilterInp(inp){
		var val = inp.value.toLowerCase();
		var lines = inp.filterfor.childNodes;
		
		for (var i=0,ct=0,len=lines.length;i<len;i++){
			var line=lines[i];
			if (!line.getAttribute) continue;
			var fkey=line.filter;
			line.className=line.className.replace(/(^|\b)(filter_nomatch|odd|even)(\b|$)/g,'');
			if (fkey.indexOf(val)==-1) line.className+=' filter_nomatch';
			else line.className+=' '+((ct++%2==0)?'odd':'even');

		}
		var ef = inp.filterfor.emptyfilter;
		ef.className=ef.className.replace(/(^|\b)(filter_nomatch)?(\b|$)/,'');
		if (ct==0) ef.className+=' filter_nomatch';
	}
	
	Init();
},false);

