/**
 * class	JH_Search
 * author	Paul Kruijt
 */
var JH_Search = new Class({
	
	/**
	 * initialize
	 * @return void
	 */
	initialize: function()
	{
		// nodes
		this.filter_page_node				= $('filter_page');
		this.loader_node					= $('loader');
		this.logo_node						= $('logo');
		this.logo_img_node					= this.logo_node.getElement('img');
		
		this.main_node						= $('main');
		this.homepage_node					= $('homepage');
		this.details_node					= $('details');
		
		this.search_node					= $('search');
		this.search_form_node				= $('search_form');
		this.search_handler_node			= $('search_handler');
		this.search_page_nr_node			= $('search_page_nr');
		
		this.search_navigation_node			= $('search_navigation');
		this.homepage_navigation_node		= $('homepage_navigation');
		this.page_navigation_node			= $('page_navigation');
		
		this.search_results_node			= $('search_results');
		this.homepage_results_node			= $('homepage_results');
		this.homepage_results_found_node	= $('homepage_results_found');
		this.homepage_results_total_node	= $('homepage_results_total');
		this.details_results_node			= $('details_results');
		this.details_results_found_node		= $('details_results_found');
		this.details_results_total_node		= $('details_results_total');
		
		this.homepage_navigation_previous_node	= $('homepage_navigation_previous');
		this.homepage_navigation_next_node		= $('homepage_navigation_next');
		
		this.dots_left_node		= $('dots_left');
		this.dots_right_node	= $('dots_right');
		
		// classes
		this.animate_class				= 'animate';
		this.search_handler_off_class	= 'search_handler_off';
		this.search_handler_on_class	= 'search_handler_on';
		this.active_class				= 'active';
		this.hide_class					= 'hide';
		
		// strings
		this.str_logo_fade_flat		= 'logo_fade_flat';
		this.str_logo_fade_back		= 'logo_fade_back';
		this.str_logo				= 'logo';
		
		// settings
		this.slider_duration	= 300;
		this.alpha_duration		= 400;
	},
	
	/**
	 * start
	 * @return void
	 */
	start: function()
	{
		if (this.search_node && this.search_handler_node)
		{
			// position search wrapper
			this.position();
			
			// set events
			this.setEvents();
		}
	},
	
	/**
	 * position
	 * @return void
	 */
	position: function()
	{
		// settings
		var search_coordinates			= this.search_node.getCoordinates();
		var search_height				= search_coordinates.height;
		var search_handler_coordinates	= this.search_handler_node.getCoordinates();
		var search_handler_height		= search_handler_coordinates.height;
		
		// set start position
		this.search_pos_top_start	= search_handler_height - search_height;
		this.search_node.setStyle('top', this.search_pos_top_start+'px');
		
		// show search wrapper
		this.search_node.setStyle('visibility', 'visible');
	},
	
	/**
	 * set events
	 * @return void
	 */
	setEvents: function()
	{
		// set object as var
		var _this	= this;
		
		// handler
		this.search_handler_node.onclick = function()
		{
			// check if slider is open
			if (slider && slider.isSlideOpen())
			{
				slider.slideMenu();
			}
			
			// check if portfolio is open
			if (portfolio && portfolio.isSlideOpen())
			{
				portfolio.slide();
			}
			
			// toggle navigation
			if (!_this.isSlideOpen())
			{
				_this.toggleNavigation();
			}
			
			// slide search
			_this.slide();
		}
		
		// checkbox items
		var input_nodes			= $$('#search input');
		var label_nodes			= $$('#search label');
		var total_input_nodes	= input_nodes.length;
		var total_label_nodes	= label_nodes.length;
		
		if (total_input_nodes > 0 && total_label_nodes > 0 && total_input_nodes == total_label_nodes)
		{
			for (var a=0; a<total_input_nodes; a++)
			{
				var input_node	= input_nodes[a];
				var label_node	= label_nodes[a];
				
				if (input_node.checked) this.enableField(input_node);
				
				input_node.onmouseover	= function() {_this.enableField(this);}
				input_node.onmouseout	= function() {_this.disableField(this);}
				input_node.onclick		= function() {
					
					if (this.type == 'radio')
					{
						for (var b=0; b<total_input_nodes; b++)
						{
							var input_node	= input_nodes[b];
							
							if (input_node.type == 'radio' && input_node != this)
							{
								_this.disableField(input_node, 1);
							}						
						}
					}
					
					this.blur();
				}
				
				label_node.onmouseover	= function() {_this.enableField(this);}
				label_node.onmouseout	= function() {_this.disableField(this);}
			}
		}
		
		// submit button
		var search_submit_root_node	= $('search_submit_button');
		var search_submit_node		= search_submit_root_node.getElement('a');
		
		if (search_submit_node)
		{
			search_submit_node.onclick	= function()
			{
				// send form
				_this.search_form_node.submit();
				
				return false;
			}
		}
	},
	
	/**
	 * slide search wrapper in or out
	 * @return void
	 */
	slide: function()
	{
		// set object as var
		var _this	= this;
		
		// get coordinates of search
		var search_coordinates			= this.search_node.getCoordinates();
		var search_height				= search_coordinates.height;
		var search_top_start			= search_coordinates.top;
		
		var search_handler_coordinates	= this.search_handler_node.getCoordinates();
		var search_handler_height		= search_handler_coordinates.height;
		
		var search_top_end		= search_top_start > this.search_pos_top_start ? this.search_pos_top_start : parseInt((search_top_start + (search_height - search_handler_height)));
		
		// set indicator
		var search_handler_class	= search_top_start > this.search_pos_top_start ? this.search_handler_off_class : this.search_handler_on_class;
		
		// set logo
		var logo_file_old	= search_top_start > this.search_pos_top_start ? this.str_logo_fade_back : this.str_logo_fade_flat;
		var logo_file_new	= search_top_start > this.search_pos_top_start ? this.str_logo_fade_flat : this.str_logo_fade_back;
		
		// start effect
		var search_effect = new Fx.Morph(this.search_node, {duration: this.slider_duration, transition: Fx.Transitions.Quad.easeOut});
 
		search_effect.start({
		    'top': [search_top_start, search_top_end]
		}).chain(function(){
			
			// set new indicator
			_this.search_handler_node.className = search_handler_class;
			
			// set new logo
			if (_this.logo_img_node.className == _this.animate_class && logo_file_old != logo_file_new)
			{
				var logo_src_new = _this.logo_img_node.src.replace(logo_file_old, logo_file_new);
				_this.logo_img_node.src = logo_src_new;
			}
			
			// toggle navigation
			if (!_this.isSlideOpen())
			{
				_this.toggleNavigation();
			}
			
		});
	},
	
	/**
	 * toggle navigation
	 * @return void
	 */
	toggleNavigation: function()
	{
		// re-init nodes
		var homepage_node	= $('homepage');
		var details_node	= $('details');
		
		// homepage navigation
		if (homepage_node)
		{
			this.page_navigation_node.className = this.hide_class;
			this.page_navigation_node.setStyle('display', 'none');
			
			this.details_results_node.className = this.hide_class;
			this.details_results_node.setStyle('display', 'none');
			
			var homepage_navigation_display_style	= this.homepage_navigation_node.getStyle('display');
			var homepage_results_display_style		= this.homepage_results_node.getStyle('display');
			
			this.homepage_navigation_node.className	= '';
			this.homepage_results_node.className	= '';
			
			if (homepage_navigation_display_style == 'none')
			{
				this.homepage_navigation_node.setStyle('display', 'block');
			}
			else
			{
				this.homepage_navigation_node.setStyle('display', 'none');
			}
			
			if (homepage_results_display_style == 'none')
			{
				this.homepage_results_node.setStyle('display', 'block');
			}
			else
			{
				this.homepage_results_node.setStyle('display', 'none');
			}
		}
		
		// details navigation
		else if (details_node)
		{
			this.homepage_navigation_node.className	= this.hide_class;
			this.homepage_navigation_node.setStyle('display', 'none');
			
			this.homepage_results_node.className	= this.hide_class;
			this.homepage_results_node.setStyle('display', 'none');
			
			var page_navigation_display_style	= this.page_navigation_node.getStyle('display');
			var details_results_display_style	= this.details_results_node.getStyle('display');
			
			this.page_navigation_node.className	= '';
			this.details_results_node.className	= '';
			
			if (page_navigation_display_style == 'none')
			{
				this.page_navigation_node.setStyle('display', 'block');
			}
			else
			{
				this.page_navigation_node.setStyle('display', 'none');
			}
			
			if (details_results_display_style == 'none')
			{
				this.details_results_node.setStyle('display', 'block');
			}
			else
			{
				this.details_results_node.setStyle('display', 'none');
			}
		}
	},
	
	/**
	 * enable field
	 * @param	object	node
	 * @return	void
	 */
	enableField: function(node)
	{
		var root_node	= node.parentNode.parentNode;
		
		if (root_node)
		{
			var input_node	= root_node.getElementsByTagName('input')[0];
			var label_node	= root_node.getElementsByTagName('label')[0];
			
			if (input_node && label_node)
			{
				input_node.className	= this.active_class;
				label_node.className	= this.active_class;
			}
		}
	},
	
	/**
	 * disable field
	 * @param	object	node
	 * @param	boolean	override
	 * @return	void
	 */
	disableField: function(node, override)
	{
		var root_node	= node.parentNode.parentNode;
		
		if (root_node)
		{
			var input_node	= root_node.getElementsByTagName('input')[0];
			var label_node	= root_node.getElementsByTagName('label')[0];
			
			if (!override)
			{
				if (input_node && label_node && !input_node.checked)
				{
					input_node.className	= '';
					label_node.className	= '';
				}
			}
			else
			{
				input_node.className	= '';
				label_node.className	= '';
			}
		}
	},
	
	/**
	 * check if slide search is open
	 * @return boolean
	 */
	isSlideOpen: function()
	{
		var search_node = $('search');
		
		// get coordinates of search
		if (search_node)
		{
			var search_coordinates	= this.search_node.getCoordinates();
			var search_top_start	= search_coordinates.top;
			
			if (search_top_start > this.search_pos_top_start) return true;
			else return false;
		}
	}
	
});