/*****************
 * Live search functionality
 *****************/
var lastAjaxSearch = '';
var isComplete;
var lastSearch = '';
var haveCompleteResults = false;
jQuery.fn.gelaSearch = function(){
	val = this.val();
	if(val && val != "Search for devices, artists, etc."){
		val = jQuery.trim(jQuery(this).val().toLowerCase())
		if(lastSearch != val){
			$('#input_search').addClass('search-active');
			this.ajaxSearch();
		}
	}else{
		$('#livesearch').hide();
	}
}
jQuery.fn.ajaxSearch = function() {
    //$('#searchProgressIndicator').html("<img id='search-ajax-loading' src='/resources/images/loading.gif' />");
    lastAjaxSearch = jQuery.trim(jQuery(this).val().toLowerCase());
	$.ajax({
		  url: '/search?blockID=searchResblock&q='+lastAjaxSearch,
		  dataType: 'json',
		  success: function(data) {
			$('#input_search').removeClass('search-active');
			$('#livesearch').show();
			//updatePageBlocks(data);
			updatePageData(data.setData);
			if(pageData['lastSearch'] == lastAjaxSearch){
				ajaxUpdate(data);
    		    haveCompleteResults = pageData['isComplete'];
    		    lastSearch = lastAjaxSearch;
    		    $('#see-all-link').attr('href', '/Search?q=' + urlencode(lastAjaxSearch));
    		    //$('#searchProgressIndicator').html("");
			}
		  }
	});
}
jQuery.fn.liveUpdate = function(list, haveCompleteResults) {
	list = jQuery(list);
	if (list.length) {
		var rows = list.children('li'), cache = rows.map(function() {
			return this.innerHTML.toLowerCase();
		});
		if(haveCompleteResults){
			var term = jQuery.trim(jQuery(this).val().toLowerCase()), scores = [];
			$('#see-all-link').attr('href', '/Search?q=' + urlencode(term));
			lastSearch = jQuery(this).val();
			if (!term) {
				rows.show();
			} else {
				var regex = /\w+/g;
				var terms = [];
				while (m = regex.exec(term)){
					terms.push(m);
				}
				var matchReq = terms.length;
				rows.each(function(index, row) {
					var txt = $(row).text();
					var matchCount = 0;
					$(row).show();
					for(i=0; i< terms.length; i++){
						word = terms[i];
						var reg = new RegExp(word, "i");
						if (reg.test(txt)) {
							if(matchCount == matchReq){
								$(row).show();
								//$(row).css("background-color", '#0f0');
							}
							matchCount ++;
						} else {
							$(row).hide();
							//$(row).css("background-color", '#f00');
							break;
						}
					}
				});
			}
		}
	}
};
function urlencode(str) {
	// http://kevin.vanzonneveld.net
	// +   original by: Philip Peterson
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +      input by: AJ
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Brett Zamir (http://brett-zamir.me)
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +      input by: travc
	// +      input by: Brett Zamir (http://brett-zamir.me)
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Lars Fischer
	// +      input by: Ratheous
	// +      reimplemented by: Brett Zamir (http://brett-zamir.me)
	// +   bugfixed by: Joris
	// +      reimplemented by: Brett Zamir (http://brett-zamir.me)
	// %          note 1: This reflects PHP 5.3/6.0+ behavior
	// %        note 2: Please be aware that this function expects to encode into UTF-8 encoded strings, as found on
	// %        note 2: pages served as UTF-8
	// *     example 1: urlencode('Kevin van Zonneveld!');
	// *     returns 1: 'Kevin+van+Zonneveld%21'
	// *     example 2: urlencode('http://kevin.vanzonneveld.net/');
	// *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
	// *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
	// *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'

	str = (str + '').toString();

	// Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
	// PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
	return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27')
			.replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A')
			.replace(/%20/g, '+');
}
