var searchBox = 'on';
var searchInterval = false;
var startSearch = 2;
var $search;		//  Set in $( document ).ready().
var $searchResults;	//  Set in $( document ).ready().


function init(){

	if ( $search.length > 0 ) {
		$search.keyup( makeRequest );
		$search.click( toggleResults );
	}

	if ( body_el ) {
		$( body_el ).click( hideResults );
	}
	
}

function makeRequest(){
	if(searchInterval !== false)
	{
		clearInterval(searchInterval);
	}
	searchInterval = setTimeout('makeRequest2()', 500);
}
function makeRequest2(){

	clearInterval(searchInterval);
	searchInterval = false;
	
	
	var url = '/search_engine/index.php';
	var pars = 'searchtext='+escape($search.val());
	var target = 'search-results';

	if ( $search.val() != '' && $search.val().length > startSearch ) {
	
		showLoading();
	
		$.ajax({
			'url': url,
			'type': 'post',
			'data': pars,
			'dataType': 'json',
			'success': function( r ) {
				showResults( r );
			}
		});
	}
	else {
		hideResults();
	}
}

function showResults(response){

	$searchResults.show();
	broadcastShowSearchResults();

	//jog opacity to force redraw (for Safari 3)
	$searchResults.css( 'opacity', '1.0' );
	$searchResults.css( 'opacity', '0.95' );
	$searchResults.html( '' );

	var params = {
		counter : 0,
		itemsPerRow : 3,
		results_pp : 6,
		results_page : 1,
		results_position : -1,
		results_counter : -1,
		results_last_style : '',
		results_last_price : '',
		results_last_season : ''
	};

	var thesaurus = response.thesaurus;
	var products = response.products;
	var searchtext = response.searchtext;
	
	if ( searchtext.length > 0 ) {
		if ( thesaurus.length>0 || products.length>0 ) {

			// thesaurus from furi table
			for ( i=0; i<thesaurus.length; i++ ) {
				params = displayProduct(thesaurus[i], false, params, $searchResults, searchtext);
			}

			// products
			for (i=0; i<products.length; i++) {
				params = displayProduct(products[i], true, params, $searchResults, searchtext);
			}
		}
		else {
			displayMessage($searchResults, 'No Records Found,<br/> Try our advanced search </br><button type="submit">Search</button>');
		}
	}
	else {
		displayMessage($searchResults, 'No Records Found, please enter a search term');
	}
	
	if (typeof dcsMultiTrack == 'function') {
		dcsMultiTrack(
			'WT.cg_n', '',
			'WT.cg_s', '',
			'WT.pn_sku', '',
			'WT.tx_e', '',
			'WT.tx_u', '',
			'WT.tx_s', '',
			'WT.tx_id', '',
			'WT.tx_curr', '',
			'WT.dl', '',
			'WT.mc_id', '',
			'WT.mc_ev', '',
			'WT.pi', '',
			'WT.si_n', '',
			'WT.si_x', '',
			'WT.z_VideoViewed', '',
			'WT.z_VideoID', '',
			'WT.z_Video', '',
			'WT.z_tx_eur', '',
			'WT.z_searchandising_purchase_name', '',
			'WT.z_searchandising_name', '',
			'WT.z_searchandising_value', '',
			'WT.z_searchandising_generic', '',
			'WT.oss', $search.val(),
			'WT.oss_r', parseInt(params.results_counter) + 1,
			'WT.z_oss_suggested_terms', '',
			'WT.z_oss_r_men', '',
			'WT.z_oss_r_women', '',
			'WT.z_oss_r_children', ''
		);
	}
}


function displayMessage( $container, message ) {

	$container.append( '<div align="center" style="margin-top:100px; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:16px;">' + message + '</div>' );
	
}


function displayProduct(product, is_product, params, $container, searchtext) {
	
	if ( is_product == true ) {
		if ( 
			product.Style_Number != params.results_last_style || 
			product.Current_Price != params.results_last_price || 
			product.season != params.results_last_season
		) {
			params.results_last_style = product.Style_Number;
			params.results_last_price = product.Current_Price;
			params.results_last_season = product.season;
			
			params.results_counter++;
			params.results_position++;

		}

		if ( product.prod_desc_id == 1001 ) {
			var href = product.BASE_URL + 'gift_card';
			var price = 'BUY NOW';
		}
		else {
			var href = product.BASE_URL + 'search_engine/bounce.php?quick_search=1&page=' + params.results_page + '&position=' + params.results_position + '&prod_desc_id=' + product.prod_desc_id + '&searchtext=' + searchtext+ '&category_id=' + product.category_id + '&season=' + product.season+'&all=1';
			var price = product.Current_Price;
		}

		var imgSrc = product.BASE_URL + 'downloads/Image/product/medium/' + product.Style_Number + '-' + product.Colour_Code + '-1.jpg';
	}
	else {
		params.results_counter++;
		params.results_position++;

		var href = product.url;
		var imgSrc = product.image;
	}
	
	//  Copying the old format with some EPICALLY out of date mark-up to help prevent breakages.
	var html = 
		'<div align="center" style="float:left; padding:0 15px 10px 15px; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:x-small; width:100px;">'
			+ '<p align="center">'
				+ '<a href="' + href + '">'
					+ '<img src="' + imgSrc + '" alt="' + product.Description + ' width="77" height="90" />'
				+ '</a>'
			+ '</p>'
			+ '<div align="center" style="font-size:10px; font-weight:bold;">'
				+ product.Description
			+ '</div>';
	
	if ( is_product == true ) {
		html += '<div align="center" style="font-size:10px; font-weight:bold;">' + price + '</div>';
	}
	
	params.counter++;
	if ( params.counter > (params.itemsPerRow-1) ) {
		html += '<br style="clear:both;" />';
		params.counter = 0;
	}
	
	html += '</div>';
	
	$container.append( html );
	
// commented out to show search results as one page
//	if ( params.results_counter >= (params.results_pp-1)) {
//		params.results_page++;
//		params.results_counter = 0;
//		params.results_position = 0;
//	}

	return params;
}


function toggleResults(){
	// position results
	if($search.val().length > startSearch) {
	
		$searchResults.toggle();
	}
	
	if ( $searchResults.is( ':visible' ) ) {
		broadcastShowSearchResults();
	} else {
		broadcastHideSearchResults();
	};
	
}


function hideResults( ev ){
	
	if ( $searchResults.length == 0 ) {
		return;
	};
	
	if ( ev.target.id == 'search-results' || $( ev.target ).parents( '#quicksearch' ).length > 0 ) {
		return;
	}
	
	$searchResults.hide();
	broadcastHideSearchResults();
}


function broadcastShowSearchResults() {
	//fires a custom event that could be listened to elsewhere
	$searchResults.trigger( 'show' );
}


function broadcastHideSearchResults() {
	//fires a custom event that could be listened to elsewhere
	$searchResults.trigger( 'hide' );
}


function showResultsTrans(){
		$searchResults.fadeIn( 500 );
		broadcastShowSearchResults();
}


function hideResultsTrans(){
		$searchResults.fadeOut( 500 );
		broadcastHideSearchResults();
}


function showLoading(){
	$searchResults.html( "<div align=\"center\" style=\"margin-top: 50px; margin-bottom: 50px; font-family: verdana,arial,helvetica; font-size: 16px;\">"+search_engine_text_loading+"...</div>" );
}


/*******************************************************************************
*  Document ready
*******************************************************************************/

$( document ).ready( function () {

	$search 		= $( '#search' );
	$searchResults 	= $( '#search-results' );
	
	if( searchBox == 'on' ){
		init();
	}
	
});
