var pre = '';
var cachedCouponSuggest = new Array();
var cachedBusinessSuggest = new Array();
//var isIe6 = $.browser.msie && $.browser.version == 6.0;

$(function(){
	$('#key').attr('autocomplete', 'off');
	
	//if ($('#menuDiv #result').val() == 5) {
		loadSearchCouponJs();
	//}
/*	
	$('#menuUL li>a').click(
		function(){
			$("#key").unbind('keydown');
			$("#key").unbind('keyup');
		
			if ($('#menuDiv #result').val() == 5) {			//切换搜索选项时触发
				if ($('#couponjs').size() == 0) {		//未加载 js
					loadSearchCouponJs();
				} else {
					$("#key").keyup(function(e) {inputSuggest(e);});
					
					$("#key").keydown(
						function(e) {
							upDownEvent(e);
						}
					);
				}
			} 
		}
	);
*/
});

function loadSearchCouponJs() {
	var now = new Date();
	var str = now.getFullYear() + '' + now.getMonth() + now.getDate();		//防止js缓存超过一天
	
	setTimeout(function(){LoadJS('/js/search/coupon_' + $('#header-mainbox #city_id').val() + '.js?rnd=' + str, 'couponjs');}, 50);
}

function isSearchCouponOrBusiness() {
	return ($('#menuDiv #result').val() == 1 || $('#menuDiv #result').val() == 5);
}

function inputSuggest(evt) {
	if (!isSearchCouponOrBusiness()) { 
		return;
	}
	
	if (!coupons) {		//防止js没有load完成就执行了该方法，报js错误
		return null;
	}
	
	if (evt.keyCode == 38 || evt.keyCode == 40) {
		return;
	}
	
	var value = jQuery.trim($('#key').val());
	
	if (pre == value) {
		return;
	}
	
	pre = value;
	
	if (value.length == 0) {
		$('#spellSuggest').hide();
	} else {
		displaySuggest(getSuggestData(value));
	}
}

function getSuggestData(value) {
	var resultArr = [];
	var searchType = $('#menuDiv #result').val();
	
	var cachedResult = getDataCached(value, searchType);
	
	if (cachedResult.found) {
		return cachedResult.result;
	}
	
	if (searchType == 5) {
		return couponSuggest(value);
	} else {
		return BusinessSuggest(value);
	}
}

function getDataCached(value, searchType) {
	var cached = null;
	
	if (searchType == 5) {
		cached = cachedCouponSuggest;
	} else {
		cached = cachedBusinessSuggest;
	}
	
	for (var m = 0,item; item = cached[m++];) {
		if (item[0] == value) {
			return {'found' : true, 'result' : item[1]};
		}
	}
	
	return {'found' : false};
}

function couponSuggest(value) {
	var cnt = 0;
	var resultArr = [];
	var result = '';
	
	for (var i = 0, len = coupons.length; i < len; i++) {
		result = '';
		
		if (inputing) {
			return;
		}
		
		if (coupons[i][2].startWith(value.toLowerCase()) || coupons[i][3].startWith(value.toLowerCase())) {
			result = coupons[i][2] + '<span>' + coupons[i][0] + '</span>';
		} else if (coupons[i][0].startWith(value.toLowerCase()) || coupons[i][1].startWith(value.toLowerCase())) {
			result = coupons[i][0] + '<span>' + coupons[i][2] + '</span>';
		}
		
		if (result.length > 0 && !resultArr.contains(result)) {
			resultArr.push(result);
			
			if (++cnt > 9) {
				break;
			}
		}
	}
	
	if (cnt < 10) {
		for (var i = 0, len = coupons.length; i < len; i++) {
			result = '';
			
			if (inputing) {
				return;
			}
			
			if (coupons[i][2].hasContainsAndNotStart(value) || coupons[i][3].hasContainsAndNotStart(value)) {
				result = coupons[i][2] + '<span>' + coupons[i][0] + '</span>';
			} else if (coupons[i][0].hasContainsAndNotStart(value) || coupons[i][1].hasContainsAndNotStart(value)) {
				result = coupons[i][0] + '<span>' + coupons[i][2] + '</span>';
			}
			
			if (result.length > 0 && !resultArr.contains(result)) {
				resultArr.push(result);
				
				if (++cnt > 9) {
					break;
				}
			}
		}
	}
	
	var item = [];
	item.push(value);
	item.push(resultArr);
	
	cachedCouponSuggest.push(item)
	
	return resultArr;
}

function BusinessSuggest(value) {
	var cnt = 0;
	var resultArr = [];
	var result = '';
	
	for (var i = 0, len = coupons.length; i < len; i++) {
		result = '';
		
		if (inputing) {
			return;
		}
		
		if (coupons[i][0].startWith(value.toLowerCase()) || coupons[i][1].startWith(value.toLowerCase())) {
			result = coupons[i][0];
		}
		
		if (result.length > 0 && !resultArr.contains(result)) {
			resultArr.push(result);
			
			if (++cnt > 9) {
				break;
			}
		}
	}
	
	if (cnt < 10) {
		for (var i = 0, len = coupons.length; i < len; i++) {
			result = '';
			
			if (inputing) {
				return;
			}
			
			if (coupons[i][0].hasContainsAndNotStart(value) || coupons[i][1].hasContainsAndNotStart(value)) {
				result = coupons[i][0];
			}
			
			if (result.length > 0 && !resultArr.contains(result)) {
				resultArr.push(result);
				
				if (++cnt > 9) {
					break;
				}
			}
		}
	}
	
	var item = [];
	item.push(value);
	item.push(resultArr);
	
	cachedBusinessSuggest.push(item)
	
	return resultArr;
}

function displaySuggest(resultArr) {
	if (resultArr.length > 0) {
		var str = '';
		
		for (var j = 0, lenj = resultArr.length; j < lenj; j++) {
			str += '<div>' + resultArr[j]  + '</div>';
		}
		
		$('#spellSuggest').html(str);
		
		$('#spellSuggest div').hover(
			function() {highLightRow($(this));},
			function() {$(this).css('background-color','');}
		).click(
			function() {
				$('#key').val(removeSpanContent(this.innerHTML));
				doHeadSearch();
			}
		);
		$('#spellSuggest').show();
	} else {
		$('#spellSuggest').hide();
//			$('#spellSuggest').html('<div>没有相关商家</div>');
	}
}

function upDownEvent(evt) {
	if (evt.keyCode != 40 && evt.keyCode != 38) {
		return;	
	}
	
	if (!$("#spellSuggest").is(":visible")){
		return;
	}
	var divNum = $('#spellSuggest div').size();
	var index = -1;
	
	$('#spellSuggest div').each(
		function(i) {
			if ($(this).css('background-color') != 'transparent') {
				index = i;
			}
		}
	)
	
	if (evt.keyCode == 40) {				//down
		index = ((index + 1) >= divNum) ? 0 : (index + 1);
	} else if (evt.keyCode == 38) {			//up
		index = ((index - 1) < 0) ? divNum - 1 : (index - 1);
	}
	
	var obj = $('#spellSuggest div').eq(index);
	if (obj) {
		$('#spellSuggest div').css('background-color','');
		obj.css('backgroundColor', '#3366cc');
		$('#key').val(removeSpanContent(obj.html()));
		pre = $('#key').val();
	}
}

function removeSpanContent(src) {
	$('#tmpDiv').html(src.replace(/<span>.*?<\/span>/i, ''));
	return $('#tmpDiv').text();
}

function highLightRow(obj) {
	$('#spellSuggest div').css('background-color','');
	obj.css('backgroundColor', '#3366cc');
	
//	obj.style.backgroundColor = '#D5E2FF';
}

String.prototype.startWith = function(str) {
	if (!str || str.isNull() || this.isNull()) {
		return false;
	}
	
	return this.toLowerCase().substr(0, str.length) == str;
}

/**
 * 字符串中中是否包含指定的字符串，且不是以指定的字符串开头,不区分大小写
 */
String.prototype.hasContainsAndNotStart = function(str) {
	if (!str || str.isNull() || this.isNull()) {
		return false;
	}
	
	return this.toLowerCase().indexOf(str.toLowerCase()) > 0;
}

String.prototype.trim = function() { 
	return this.replace(/(^\s*)|(\s*$)/g, ""); 
}

//字符串为空或只含有空格
String.prototype.isNull = function() {
	return this == null || this.trim().length == 0;
}

Array.prototype.contains = function(value) {
	var chr = String.fromCharCode(5);
	
	return (chr + this.join(chr) + chr).indexOf(chr + value + chr) != -1
}

function LoadJS(fileUrl, id) {
	var id = id || '';
	var scriptTag = document.getElementById(id);
	var oHead = document.getElementsByTagName('HEAD').item(0);
	var oScript = document.createElement("script");

	if (scriptTag) {
		oHead.removeChild(scriptTag);
	}
	
	oScript.id = id;
	oScript.type = "text/javascript";
	oScript.src = fileUrl;
	oHead.appendChild(oScript);

}
