findProgramHandler = function(){
	$delay 					= 600;
	$programs				= '';
	$order					= [];
	$order_class			= [];
	$order['p_name']		= 1;
	$order['host']			= 1;
	$order['genre'] 		= 1;	
	$order['network']		= 1;
	
	$order_class['p_name']	= 'desc';
	$order_class['host']	= 'desc';
	$order_class['genre'] 	= 'desc';	
	$order_class['network']	= 'desc';	
	
	$searchTimer				= 0;	
	
	return {			
		init : function(){
			$T_fph = this;
			$E.addListener('radioSearch','keyup',$T_fph.setSearchTimer);
			$E.addListener('radioSearch','keydown',$T_fph.resetTimer);			
		},
		render : function (programs){
		//render : function(_str,_render_obj){
		//	var response = eval("("+_str+")");	
		//	var pg = '';
		//response.programs
			$T_fph.renderPrograms(programs);
			$programs = programs;
		},
		renderFail : function(){
			//console.log('fail');
		},
		renderPrograms : function(_dataset){
			pg = '';
			n=0;
			for(i=0;i < _dataset.length; i++){
				if (_dataset[i].d == 'none') continue;
				_class = (n % 2) ? ' class="alt"': '';
				pg += '<li'+_class+' onclick="fpHandler.goLocation(\''+_dataset[i].link+'\');" ' + 
				'onmouseout ="fpHandler.clearActive(this);" ' + 
				'onmouseover="fpHandler.showInfo(this);">' + 
				'<span class="col_pname">'+_dataset[i].p_name+'</span>' + 
				'<span class="col_host">'+_dataset[i].host+'</span>' + 
				'<span class="col_genre">'+_dataset[i].genre+'</span>' + 
				'<span class="col_network">'+_dataset[i].network+'</span>' + 
				'<span class="col_desc">'+_dataset[i].desc+'</span></li>';
				n++;				
			}		
			$('radioSearch').className 	= '';			
			$('pset').innerHTML = '<ul id="programs">'+pg+'</ul>';
		},
		sortFields : function(_link,_field){
			$order[_field] 			= ($order[_field] > 0) ? -1 : 1;
			curClass				= $order_class[_field];
			$order_class[_field] 	= ($order_class[_field] == 'asc') ? 'desc' : 'asc';
			li_els = $('sorters').getElementsByTagName('LI');
			for(i=0;i<li_els.length;i++){
				$D.removeClass(li_els[i],'activeCol');
				$D.replaceClass(li_els[i].firstChild,curClass,$order_class[_field]);
			}
			$D.addClass(_link.parentNode,'activeCol');
			if( _field == "host" )
			{
				function personlitySort ( a,b )
				{
					var newa = a.personalites;
					var newb = b.personalites;
					
					if( newa.length == 0 && newb.length == 0 ) return 0;
					if( newa.length == 0 ) return -1;
					if( newb.length == 0 ) return 1;
					
					var i;
					var max = Math.min(newa.length,newb.length);
					for( i = 0; i < max; i++ )
					{
						//console.log( "newa[ i ].lastName: " + newa[ i ].personality.lastName );
						//console.log( "newb[ i ].lastName: " + newb[ i ].personality.lastName );
						if( newa[ i ].personality.lastName == newb[ i ].personality.lastName ) continue;
						if( newa[ i ].personality.lastName < newb[ i ].personality.lastName ) return -1;
						return 1;
					}
					return 1;
				}
				
				$programs.sort( function ( a, b ) { 
					
					var result = personlitySort( a, b );
					
					if( $order_class[_field] == 'asc' ) 
					{
						result *= -1;
					}
					return result;
						} );
			}
			else
			{
				$programs.sort(function(a,b){
					if (a[_field].toLowerCase() < b[_field].toLowerCase()) return (-1 * $order[_field]);
					if (a[_field].toLowerCase() > b[_field].toLowerCase()) return (1 * $order[_field]);
					return 0;}
				);
			}
			_link.blur();			
			$T_fph.radioSearch();
		},
		resetTimer : function(){
			clearTimeout($searchTimer);
			$('radioSearch').className 	= '';			
		},		
		setSearchTimer : function(){
			$('radioSearch').className 	= 'searching';
			$searchTimer = setTimeout("$T_fph.radioSearch()",1500)
		},
		goLocation : function(_url){
			if(_url == ''){ return false; }
			window.location.href= _url;
		},
		showInfo : function(_el){
			$D.addClass(_el,'active');
		},		
		clearActive : function(_el){
			$D.removeClass(_el,'active');
		},
		radioSearch : function()
		{
			//var _str = YAHOO.lang.trim( $('radioSearch').value );
			var _str = $('radioSearch').value;
			if( _str =='filter results' )
			{ 
				_str = '';
			}else{
				//_sv = $('radioSearch').value.replace(/[^a-zA-Z0-9_\-'Ì©Ì \. ]/ig,'')
				//searchVal = new RegExp(_sv,"igm");
			}
			
			//make search safe - + * ? ( ) [ ] \ | $ ^ !
			var s = [ "'", "-", "+", "*", "?", "(", ")", "[", "]", "\\", "|", "$", "^", "!" ];
			var i = s.length;
			var c;
			while( i-- )
			{
				c = s[ i ]
		       _str = _str.replace( c, "\\" + c );
			}
			
			var pg 	= []; 
			c = 0;
			for(i=0;i<$programs.length;i++){
//				try{ 
//					searchStr 	= $programs[i].desc+' '+$programs[i].p_name+' '+$programs[i].host;
//					searchStr 	= searchStr.toLowerCase();
//					m 			= searchStr.split(searchVal);
//					if(m.length > 1){
//						$programs[i].d = '';
//						c++;
//					}else{
//						$programs[i].d = 'none';}
//					m.length = null;	
//				}catch(err){ //$programs[i].d = 'none'; 
//				
//				}
				if( $programs[i].search( _str ) )
				{
					$programs[i].d = '';
					c++;
				}
				else
				{
					$programs[i].d = 'none';
				}
			}
			$('result_count').innerHTML = c+' results';
			$T_fph.renderPrograms($programs);
		}
	}
}();