window.addEvent('domready', function(){
	Element.implement({  
         //implement show  
         show: function() { 
			 this.setStyle('display',''); 
             this.fade('in');  
         },  
         
		 //implement hide  
         hide: function() {
		 	this.fade('out');
			this.setStyle('display','none');     
         }  
    });
	var search_url = "/process/home/do_search";
	var result_table_wrapper = $('result_table_wrapper');
	
	var search_sticky = [];

	var search_req = new Request.JSON({
		method: 'get',
		url: search_url,
		link: 'cancel',
		onRequest: function(){ $('indicator').empty().addClass('ajax-loading'); },
		onComplete: function(jsonObj) { show_results(jsonObj.results); }
	});
	
	var toggle_req = new Request.JSON({
		method: 'get',
		url: search_url,
		link: 'cancel',
		onRequest: function(){  },
		onComplete: function(jsonObj) { load_selects(jsonObj.results); }
	});
	
	var desc_req = new Request.JSON({
		method: 'get',
		url: search_url,
		link: 'cancel',
//		onRequest: function(){ $('indicator').empty().addClass('ajax-loading'); },
		onComplete: function(jsonObj) { show_desc(jsonObj.results); }
	});


	//$('search_field').addEvent('click', function(){ if(this.value == "Start your search ...") this.value = ""; } );
	$('search_field').addEvent('keyup',function() { if(this.value.length >= 3) do_search(); this.addClass('search_field_keypress'); } );
	$('search_desc').addEvent('click',function() { if($('search_field').value.length >= 3) do_search(); } );
	//$('searchButton').addEvent('click',function() { do_search(); } );
	
	$('standard_select').addEvent('change',function() { 
								toggle('standard',this.value); 
								$('search_field').addClass('disabled').disabled=1;
							} 
	);
	$('category_select').addEvent('change',function() { 
								toggle('category',this.value); 
								$('search_field').addClass('disabled').disabled=1;
							} 
	);
	$('control_ref_select').addEvent('change',function() { 
								$('search_field').addClass('disabled').disabled=1;
								do_search();
							} 
	);
	$('reset_button').addEvent('click',function(){ 
								$('standard_select').options[0].selected=1; 
								toggle('reset',0); 
								$('search_field').removeClass('disabled').disabled=0; 
								$('search_field').value = "";
								} 
	);
	
	var toggle = function(mode, value){
		var options = {}
		
		options['toggle'] = mode;
		options['value'] = value;
		
		// send the request and cancel previous (link)
		toggle_req.send({data : options});
	}

	var load_desc = function(wcid){
		var options = {}
		
		options['description'] = 1;
		options['wcid'] = wcid;
		options['keyword'] = $('search_field').value;
		
		if($(wcid + '_desc').innerHTML == '')
			desc_req.send({data : options});
		//else	// toggle the desc slider
			$(wcid + '_desc').slide('toggle');
		
		//swap the open/ close image	
		$(wcid).src = ($(wcid).src.indexOf('less.gif') > 0) ? '/images/more.gif' : '/images/less.gif';
		
	}
	
	var load_selects = function(results){
		results.each(function(type){
			$(type.name + '_select').empty();
			var option_item = new Element('option', {'value': '', 'html' : type.name});	// add a blank option
			option_item.inject($(type.name + '_select'));
			
			type.data.each(function(result){
				var option_item = new Element('option', {'value': result.id, 'html' : result.name});
				option_item.inject($(type.name + '_select'));
			});
	  	});
		
		// trigger a real time search
		do_search();
	};
	
	var do_search = function(keyword) {
		var options = {}

		options['search'] = 1;
		options['search_desc'] = ($('search_desc').checked == true) ? 1 : 0;
		options['keyword'] = (keyword) ? keyword : $('search_field').value;
		options['standard'] = $('standard_select').value;
		options['category'] = $('category_select').value;
		options['control_ref'] = $('control_ref_select').value;

		// store dropdown search terms
		search_sticky[0] = ($('standard_select').value) ? $('standard_select').options[$('standard_select').selectedIndex].text + ", " : "";
		search_sticky[1] = ($('category_select').value) ? $('category_select').options[$('category_select').selectedIndex].text + ", " : "";
		search_sticky[2] = ($('control_ref_select').value) ? $('control_ref_select').options[$('control_ref_select').selectedIndex].text : "";
									
		if(options['keyword'] || options['standard'] || options['category'] || options['control_ref']){
			if(options['standard'] || options['category'] || options['control_ref']){
				var result_status_text = search_sticky[0] + search_sticky[1] + search_sticky[2];
				$('search_field').value = result_status_text;
			}
			else if(options['keyword'])
				var result_status_text = '"' + options['keyword'] + '"  ';
			
			var result_status = new Element('p', {'html': result_status_text });
			result_status.inject($('result_status').empty());
			
			// send the request and cancel previous (link)
			search_req.send({data : options});
			
		}
		else
			$('search_field').value="";
	}
	
	var show_results = function(results){
		$('search_field').removeClass('search_field_keypress');
		var result_count = 0;
		var total_results = 0;
		if(results.length){
			$('table_wrapper').show();
			result_table_wrapper.empty();
			results.each(function(type){
				if(type.name != "total"){
					var table = new Element('table', {'class': 'result_table'});
					var tbody = new Element('tbody').inject(table);
					var row = new Element('tr', {'class': 'd0' }).inject(tbody);
					var itema = new Element('td', {'html': type.name,'class' : 'widtha header_row'}).inject(row);
					var itemb = new Element('td', {'class': 'shadow shadow_d0'}).inject(row);
					var itemc = new Element('td', {'html': '&nbsp;','class' : 'widthb'}).inject(row);
					var itemd = new Element('td', {'class': 'shadow shadow_d0'}).inject(row);
					var iteme = new Element('td', {'html': '&nbsp;','class' : 'widthc'}).inject(row);
					var itemf = new Element('td', {'class': 'shadow shadow_d0'}).inject(row);
					var itemg = new Element('td', {'class': 'widthd','html': '&nbsp;'}).inject(row);
				
					var alt_color = 0;
					type.data.each(function(result){
						result_count++;
						var col_classes = ['d1','d2'];
						alt_color++;
						// populate results table 
						var row = new Element('tr', {'class': col_classes[alt_color % 2] }).inject(tbody);
						var itema = new Element('td', {'html': result.control_ref,'class' : 'widtha'}).inject(row);
						var itemb = new Element('td', {'class': 'shadow shadow_' + col_classes[alt_color % 2],'html': '&nbsp;'}).inject(row);
						var itemc = new Element('td', {'html': result.wcid,'class' : 'widthb'}).inject(row);
						var itemd = new Element('td', {'class': 'shadow shadow_' + col_classes[alt_color % 2]}).inject(row);
						var iteme = new Element('td').inject(row);
						var iteme_sum = new Element('p', {'html': result.summary}).inject(iteme);
						var iteme_desc = new Element('div', {'id' : result.wcid + '_desc','class' : 'widthc desc_slider'}).inject(iteme);
						var itemf = new Element('td', {'class': 'shadow shadow_' + col_classes[alt_color % 2]}).inject(row);
						var itemg = new Element('td', {'class': 'widthd'}).inject(row);
	
						// attach event to the open link and add slide control
						//var slider = new Fx.Slide(result.wcid + '_desc');
						var itemg_link = new Element('img', {'src' : '/images/more.gif','id' : result.wcid,'class' : 'desc_opener' }).addEvent('click',function(){
																												load_desc(this.id) 
																												}).inject(itemg);
					});
					
					// inject final result set
					table.inject(result_table_wrapper);
				}
				else
					type.data.each(function(result){total_results=result.id;});
			});	
		}
		else
			$('table_wrapper').hide();

		var result_count = new Element('p', {'html': result_count + " results of " + total_results + " total."});
		$('indicator').empty();
		result_count.inject($('indicator'));
		
		$('indicator').removeClass('ajax-loading');
	};
	
	var show_desc = function(results){
		$(results[0].wcid + "_desc").slide('hide');	
		var desc = new Element('span', {'html' : results[0].desc }).inject($(results[0].wcid + "_desc"));
		$(results[0].wcid + "_desc").removeClass('desc_slider');		// ie fix, set at 1px, no overflow, then remove to avoid jerkiness
		$(results[0].wcid + "_desc").slide('in');		
	};
	
	// override enter key to do_search
	function stopRKey(evt) {
		var evt  = (evt) ? evt : ((event) ? event : null);
		var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		if ((evt.keyCode == 13) && (node.type=="text")) { 
			//do_search(); 
			return false; 
		}
	}

	document.onkeypress = stopRKey;

	// initial dummy search
	do_search('security');

}); 
