/****************************************************************

Search v1.2

Max Felker | max@bigroomstudios.com

Product search functionality

****************************************************************/

var Search = Class.create({

	initialize: function() {
	
		this.search_spyglass = $('frame-search-go');
		this.search_field = $('search-field');
		
		if(this.search_field){
		
			if(live.browser.type=="safari") {
				this.search_field.setStyle('padding-top:54px');
			}
			
			if($('target-store-search-field')!=undefined) { var target_home = true; }
			
			if(target_home) {
				this.search_local_field = $('target-store-search-field');
				this.default_local_text = this.search_local_field.value;
			}
	
			this.default_text =  this.search_field.value;
	
			this.results_container = $('frame-search-results');
			this.results_list = $('frame-search-list');
				 	
			this.results_container.observe('mouseleave', this.hide_results.bind(this));
			
			this.search_field.observe('focus', function(){
			
				this.set_text();
	
				live.keys.look_for('alpha',function() {
					this.search_products();
				}.bind(this),true);
			
				 live.keys.look_for('numeric',function() {
					this.search_products();
				}.bind(this),true);
			
				live.keys.look_for('chars',function() {
					this.search_products();
				}.bind(this),true);
			
				live.keys.look_for('backspace',function() {
					this.search_products();
				}.bind(this),true);
				
				live.keys.look_for('space',function() {
					this.search_products();
				}.bind(this),true);
			 
				live.keys.look_for('arrow_down',function() {
					this.show_next_result();
				}.bind(this),true);
				
				live.keys.look_for('arrow_right',function() {
					this.show_next_result();
				}.bind(this),true);
			   
				live.keys.look_for('arrow_up',function() {
					this.show_previous_result();
				}.bind(this),true);
				
				live.keys.look_for('arrow_left',function() {
					this.show_previous_result();
				}.bind(this),true);
			
				if(!nx.unboxed) {
					live.keys.look_for('enter',function() {
						this.select_result();
					}.bind(this));
				}
	
			}.bind(this));
			
			this.search_field.observe('blur', this.set_text.bind(this));
			
			if(target_home) {
				this.search_local_field.observe('focus', function(){
				
					this.set_local_text();
					
				}.bind(this));
					
				this.search_local_field.observe('blur', this.set_local_text.bind(this));
			}
			
			if(!nx.unboxed) {
				this.search_spyglass.observe('click', this.select_result.bind(this));
			}
			
			Event.on(window,'load',function() {
	
				this.search_field.enable();
				if(target_home) { this.search_local_field.enable(); }
				
			}.bind(this));
		
		}
		
  	},
  
	set_text: function() {
	  
		if(this.search_field.value==this.default_text) {
		
			this.search_field.value = "";
		
		} else if(this.search_field.value.empty()) {
		
			this.search_field.value=this.default_text;
		
		} 
	  
	},
	
	set_local_text: function() {
		if(this.search_local_field.value==this.default_local_text) {
		
			this.search_local_field.value = "";
		
		} else if(this.search_local_field.value.empty()) {
		
			this.search_local_field.value=this.default_local_text;
		
		} 
	},
  
	search_products: function() {
		
		this.search_spyglass.addClassName('text-searching');
		
		clearTimeout(this.search_timeout);
				
		this.search_timeout = setTimeout(function(){
		
			nx.service.calc.product_search.call(this.search_field.value);
		
		}.bind(this),200);
				
		nx.service.calc.product_search.result = function(items) {
		
			this.results = items;
			this.results_count = 0;     
			this.results_list.update('');
				
			this.results.each(function(item) {
		   
				this.results_count++;

				var as_much_as_price = this.set_as_much_as(item);
				 
				if(nx.unboxed) {
					var result_item_html = Builder.node('li',{id:"frame-search-list-item-"+item.product_id},[
						Builder.node('img',{src:'/inc/scripts/image.php?trim=1&w=30&h=50&file_id='+item.file_id}),
						Builder.node('a',{onclick:"return false;"}, [
							Builder.node('div',item.title),
						]), 
						Builder.node('span',as_much_as_price)
					]);
				}
				else {
					var result_item_html = Builder.node('li',{id:"frame-search-list-item-"+item.product_id},[
						Builder.node('img',{src:'/inc/scripts/image.php?trim=1&w=30&h=50&file_id='+item.file_id}),
						Builder.node('a',{target:'_self', href: base_url+'/product/'+item.product_id+'/'}, [
							Builder.node('div',item.title.truncate(70, ' [...]')),
						]), 
						Builder.node('span',as_much_as_price)
					]);
				}

				this.results_list.appendChild(result_item_html);

				Event.observe("frame-search-list-item-"+item.product_id,'mouseenter',function() {
				
					$$('#frame-search-list li.on').each(function(result) {
						result.removeClassName('on');
					});
				
					$("frame-search-list-item-"+item.product_id).addClassName('on');

				}.bind(this));
				
				Event.observe("frame-search-list-item-"+item.product_id,'click',function() {
				
					$$('#frame-search-list li.on').each(function(result) {
						result.removeClassName('on');
					});
				
					$("frame-search-list-item-"+item.product_id).addClassName('on');
					
					if(!nx.unboxed) {
						this.select_result();
					}

				}.bind(this));
			   
		   	}.bind(this)); // END EACH  
		   
		   	this.results_list.scrollTop = 0;
		   
		   	if(this.results_count>0) {
		   		this.show_results();
		   	} else {
		   		this.hide_results();
		   	}
			  
		   	this.search_spyglass.removeClassName('text-searching');
		
		}.bind(this) // END ACE Call

	},
  
	show_results: function() {

		this.results_container.show();
		
		if($("target-search-bar")!=undefined) {
			$("target-search-bar").setStyle({ backgroundImage: 'url(/images/target.new/search_dropdown_bg_left_cap.jpg)' });
		}

	},
  
	hide_results: function() {

		this.results_container.hide();
		
		if($("target-search-bar")!=undefined) {
			$("target-search-bar").setStyle({ backgroundImage: 'url(/images/target.new/search_bg_left_cap.jpg)' });
		}

	},
  
	show_next_result: function() {

		this.current_result = $$('#frame-search-list li.on')[0];
		
		if(!this.current_result) {
			this.current_result = $$('#frame-search-list li').last();
		}
		
		this.next_result = this.current_result.next();
		
		if(!this.next_result) {
			this.next_result = $$('#frame-search-list li')[0];
		}

		if(this.next_result) {

			this.current_result.removeClassName('on');
			this.current_result = this.next_result;
			this.next_result ='';
			this.current_result.addClassName('on');
	
			this.scroll_results();
	
			return true;

		}

	},
  
	show_previous_result: function() {

		this.current_result = $$('#frame-search-list li.on')[0];
		
		if(!this.current_result) {
			this.current_result = $$('#frame-search-list li')[0];
		}
		
		this.previous_result = this.current_result.previous();
	
		if(!this.previous_result) {
			this.previous_result = $$('#frame-search-list li').last();
		}

		if(this.previous_result) {

			this.current_result.removeClassName('on');
			this.current_result = this.previous_result;
			this.preivous_result ='';
			this.current_result.addClassName('on');
	
			this.scroll_results();

		}

	},
  
	scroll_results: function() {
  		
  		if(this.current_result.offsetTop < this.results_list.scrollTop){
	
			this.results_list.scrollTop = this.current_result.offsetTop-12;
		
		}else if(this.current_result.offsetTop >= this.results_list.scrollTop + this.results_list.offsetHeight - this.current_result.offsetHeight){
	
			this.results_list.scrollTop = (this.current_result.offsetTop+12) - this.results_list.offsetHeight + this.current_result.offsetHeight;
		}
  		
	},
  
	select_result: function() {
		
		if(live.unboxed) {
			return;
		}

		this.current_result_link = $$('#frame-search-list li.on a')[0];
		
		if(!this.current_result_link) {
		
			if(this.search_field.value==this.default_text 
			|| this.search_field.value.empty()) {
			
				alert('Please enter something in the search field');
				return false;
				
			}
			
			window.location = "/search/1/q/" + this.search_field.value + "/";
			
		} else {
		
			window.location = this.current_result_link.href;
			
		}

		return false;

	},
  
	set_as_much_as: function(item) {
	  
		var as_much_as = 0;
		var as_much_as_html = 'Recycle it!'

		as_much_as = parseFloat(item.nw_price_good);     
		
		if(nx.partner_id==511 || nx.partner_id==109) {
			as_much_as = parseFloat(item.nw_price_fair);
		}

		if(item.root_category_id == 56) {
			as_much_as = parseFloat(item.nw_price_excellent);     
		}

		if(as_much_as > 0){
			
			var as_much_as_price = Math.format_number(as_much_as,{currency:nx.currency});

			// if instore or store partners, give them price range
			if(nx.unboxed) {
				as_much_as_html = 'Average Trade Value: ' + as_much_as_price;
			} else {
				as_much_as_html = "Click to find out how much we'll pay for yours!";
			}	
		}

		return as_much_as_html;
	  
	}
  
});

