var searchItems = {};
var selectedSearchItems = new Array;
// set results per page here
var rpp = 5;
var currentResults;

jQuery.fn.stripTags = function() { return this.replaceWith( this.html().replace(/<\/?[^>]+>/gi, '') ); };

jQuery(function() {

	$('#suppliers_search_input').bind('keypress', function(e) {
		if (e.keyCode == 13) {
			content = $('.hover p');
			if (content.text().length > 0) {
				$('#suppliers_search_input').val(content.text());
			}
			return false;
		}
	});

	// json suggest control
	$('input#suppliers_search_input').jsonSuggest(testData.codes, {
		onSelect : callback
	});

	// When they click the add button
	$('#add_to_search').click(function() {

		if ($('input#suppliers_search_input').attr('value').length < 2) {
			alert("Less than 2 chars is not permitted");
			return false;
		}
		var tag = $('input#suppliers_search_input').attr('value');
		$('input#suppliers_search_input').attr('value', '');

		// alert(tag.toLowerCase().replace(/ /g, '_').replace(/&/g, 'and'));
		
		// does this match anything in the list, higlight if it does
			$('#search_list_' + tag.toLowerCase().replace(/ /g, '_').replace(/&/g, 'and') + ' > a').addClass('on');

			addSearchItem(tag.toLowerCase(), true);
			return false;
		});

	$('#search_list > li').click(function() {
		tag = this.id.replace("search_list_", "").replace(/_/g, " ");
		$(this).find("a").addClass("on");
		addSearchItem(tag, true);
		return false;
	});
});

function callback(item) {

}

function addSearchItem(tag, executeSearch) {
	if (selectedSearchItems.inArray(tag)) {
		alert("That already exists in the search");
	} else if (tag.length == 0) {
		alert("Nothing in the box");
	} else {
		// item not already in the array so add it to the search list
		tmp = tag.replace(' and ', ' & ');
		selectedSearchItems.push(escape(tmp));
		// replace spaces in tags with _'s
		idString = "looking_for_" + tag.replace(/\s/g, "_");
		idString = idString.replace(/&/g, "and");
		$('#looking_for').append(
				'<li style="display:none" id="' + idString + '"><a href="#">'
						+ tmp + '</a></li>');
		$('#' + idString).fadeIn();

		// add handlers for when the items get clicked for deletion
		$('#' + idString).click(function() {
			deleteSearchItem(this.id);
			return false;
		});
		if (executeSearch) {
			// Kick off the search process here...
			runSearch();
		}
	}
}

function runSearch() {
	// clear the results
	$('#content').find('div.suppliers_result').fadeOut(function() {
		$('#content').find('div.suppliers_result').remove();
	});
	$('#pages').html('');
	$('#pages').empty();
	$('#pages').remove();

	if (selectedSearchItems.length > 0) {
		$('#loader').show("fast");
		// ajax call to server for search results
		$.getJSON('index.php?r=site/directorysearch',
				'search=' + selectedSearchItems.join(), function(json) {
					if (json) {
						currentResults = json;
						displayResults(0);
					} else {
						// $('#content > p.loading').remove();
				$('#loader').hide();
				showResultsCount(0);
				// $('#loader').hide();
			}

		});
	} else {
		showResultsCount(0);
	}

}

function displayPage(page) {
	$('#content').find('div.suppliers_result').remove();
	$('#pages').html('');
	$('#pages').empty();
	$('#pages').remove();
	displayResults(page);
}

function displayResults(page) {
	// remove the loading screen
	// $('#content > p.loading').remove();
	$('#loader').hide();
	var results = new Array();
	var counter = 0;
	$.each(currentResults, function(i, item) {
		results[counter] = item;
		counter++;
	});

	showResultsCount(results.length);

	// if more than "results per page (rpp)" results add in paging
	if (Math.ceil(results.length / rpp) > 1) {
		var pages = '<div id="pages" style="width:98%; float:left; display:inline; text-align:right; margin-top:5px;"><span style="float:left;display:inline; padding-left:10px;">Total Results: ' + results.length + '</span>Pages:&nbsp; </div>';
		if ($('#pages').length == 0) {
			$('#content').append(pages);
		} else {
			$('#pages').remove();
			$('#content').append(pages);
		}

		// add in the links
		for (i = 1; i < Math.ceil(results.length / rpp) + 1; i++) {
			if (page == (i - 1)) {
				$('#pages').append(
						'<span style="font-weight: bold" id="page_' + (i - 1)
								+ '">' + i + '</span> | ');
			} else {
				$('#pages').append(
						'<a href="#" id="page_' + (i - 1) + '">' + i
								+ '</a> | ');
			}

			$('#page_' + (i - 1)).click(function() {
				displayPage(this.id.replace('page_', ''));
				return false;
			});
		}
	}

	(results.length > rpp) ? count = rpp : count = results.length;

	// are we on the last page ?
	if (count == rpp && page == Math.ceil(results.length / rpp) - 1
			&& results.length > rpp) {
		if (results.length % rpp > 0) {
			count = results.length % rpp;
		} else {
			count = rpp;
		}
	}

	start = page * rpp;
	// alert('start:' + start + ' count: ' + (count+start));
	for (i = start; i < (count + start); i++) {
		var result = "";
		if (results[i].supplier.is_enhanced == 1) {
			result += getResultEnhanced(results[i]);
		} else {
			result += getResultNotEnhanced(results[i]);
		}

		$('#content').append(result);
		$('#content').find('div.suppliers_result').fadeIn();

		// highlight the search terms in results
		$.each(selectedSearchItems, function(i, item) {
			tmp = unescape(item);
			$('.suppliers_result').highlight(tmp);
		});

	}
}

function deleteSearchItem(id) {
	// format correctly (needs a function really)
	tagWithUs = id.replace("looking_for_", "");
	tag2 = tagWithUs.replace(/_and_/, "_&_");
	tag = tag2.replace(/_/g, " ");
	tag = escape(tag);

	selectedSearchItems = $.grep(selectedSearchItems, function(val) {
		return val != tag;
	});

	// $('#' + id).fadeOut( function() {
	$('#' + id).remove();
	// also need to reset the css on the ]#search_list
	searchListId = "search_list_" + tagWithUs;
	$('#' + searchListId + ' > a').removeClass('on');
	// });
	runSearch();
}

function showResultsCount(count) {
	var pages = '<div id="pages" style="width:98%; text-align:right">Total Results: ' + count + '</div>';
	if ($('#pages').length == 0) {
		$('#content').append(pages);
	} else {
		$('#pages').remove();
		$('#content').append(pages);
	}
}

Array.prototype.inArray = function(value) {
	var i;
	for (i = 0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

function getResultNotEnhanced(item) {
	var result = '<div class="suppliers_result"><div class="info"><h2>' + item.supplier.name + '</h2>' + '<p class="address">';

	if (item.supplier.address1.length > 0) {
		result += item.supplier.address1;
	}
	if (item.supplier.address2.length > 0) {
		result += ', ' + item.supplier.address2;
	}
	if (item.supplier.address3.length > 0) {
		result += ', ' + item.supplier.address3;
	}
	if (item.supplier.address4.length > 0) {
		result += ', ' + item.supplier.address4;
	}
	if (item.supplier.postcode.length > 0) {
		result += ', ' + item.supplier.postcode;
	}
	result += '</p>' + '<p>' + item.supplier.description + '</p><dl>';

	if (item.supplier.email.length > 0) {
		//result += '<p class="tags"><strong>Tagged:</strong> ' + item.tags + '</p>';

	}

	result += "</dl></div>";
	result += '<div class="side">';
	result += '<p class="contact"><strong>Tel</strong> ' + item.supplier.phone + '</p> ';
	// result += '<p class="button"><a href="' + item.supplier.web + '">Visit
	// Website</a></p>';

	result += '</div>';

	return result;
}

function getResultEnhanced(item) {

	var result = '<div class="suppliers_result enhanced_result"><div class="info"><h2>' + item.supplier.name + '</h2>' + '<p class="address">';
	if (item.supplier.address1.length > 0) {
		result += item.supplier.address1;
	}
	if (item.supplier.address2.length > 0) {
		result += ', ' + item.supplier.address2;
	}
	if (item.supplier.address3.length > 0) {
		result += ', ' + item.supplier.address3;
	}
	if (item.supplier.address4.length > 0) {
		result += ', ' + item.supplier.address4;
	}
	if (item.supplier.postcode.length > 0) {
		result += ', ' + item.supplier.postcode;
	}
	result += '</p>' + '<p>' + item.supplier.description + '</p><dl style="width:430px;">';

	if (item.supplier.contact.length > 0) {
		result = result + "<dt>Contact</dt> <dd>" + item.supplier.contact
				+ "<br /></dd>";
	}

	if (item.supplier.phone.length > 0) {
		result += "<dt>Phone</dt> <dd>" + item.supplier.phone + "<br /></dd>";
	}

	if (item.supplier.email.length > 0) {
		result += '<dt>Email</dt> <dd><a href="mailto:' + item.supplier.email
				+ '">' + item.supplier.email + '</a><br /></dd>';
	}

	if (item.tags.length > 0) {
		//result += '<dt>Tagged</dt> <dd>' + item.tags + '<br /></dd>';
	}

	result += "</dl></div>";
	result += '<div class="side">';

	if (item.supplier.logo != 'no_logo.gif') {
		result += '<img src="/media/images/supplier_logos/' + item.supplier.logo + '" width="116" height="116" alt="image needed" />';
	}
	result += '<p class="button"><a href="' + item.supplier.web + '">Visit Website</a></p>';
	result += '<p class="button"><a href="/commercial/supplier-listing?id=' + item.supplier.id + '">View Full Listing</a></p></div>';
	result += '</div>';

	return result;
}

