// NEW FEATURES
// NEW CONFIG VARS TO ADD IN MS_AUTOCONFIG
var as_searcherrormsg = 'Time out. Please refresh the page!';
// Unused yet
var as_animatesearchmsg = true;
var as_commandLineSuport = true;
var as_keyshortcutsSuport = true;
var as_useLastKeywordsSuport = true;
//////////////////////////////////////////


// Utiles
/* ajaxlog */		var ajaxLog = new Array(); var AJAXQueue = new Array(); var AJQueueInProgress = 1;
/* Ajax object */	function AJAXObject() { var httpobj = null; if(window.ActiveXObject) { httpobj = new window.ActiveXObject('Microsoft.XMLHTTP');	} else if(window.XMLHttpRequest) { httpobj = new XMLHttpRequest(); }; return httpobj; };
/* Ajax Send */		function AJAXSend(ajSettings){if(ajSettings){if(ajSettings['urls']){AJAXQueue=null;AJAXQueue=[];for(var i=0;i<ajSettings['urls'].length;i++){AJAXQueue.push(ajSettings['urls'][i]);}}var url=(ajSettings['url']&&ajSettings['url']!='')?ajSettings['url']:null;var restype=(ajSettings['restype']&&ajSettings['restype']!='')?ajSettings['restype']:null;var oncomplete=(ajSettings['oncomplete'])?ajSettings['oncomplete']:function(){return;};var onerror=(ajSettings['onerror'])?ajSettings['onerror']:function(){return;};var onload=(ajSettings['onload'])?ajSettings['onload']:function(){return;};}else{ajaxLog.push('No se han propuesto opciones de configuracion : AJAXSend.ajSettings es nulo');return null;}if(!url&&(!AJAXQueue||AJAXQueue.length<=0)){ajaxLog.push('No hay url para ejecutar el pedido : AJAXSend.url es nulo');ajaxLog.push('No hay url para ejecutar el pedido : AJAXSend.urls esta vacio');return null;}var req=AJAXObject();if(restype&&restype=='xml'){if(req.overrideMimeType){req.overrideMimeType('text/xml');}}req.onreadystatechange=function(){if(req.readyState==4){if(req.status==200){if(AJAXQueue.length>0&&AJQueueInProgress!=(AJAXQueue.length)){AJAXSend({'url':AJAXQueue[AJQueueInProgress],'oncomplete':oncomplete,'onload':onload,'onerror':onerror});AJQueueInProgress++;}else{if(restype&&restype=='xml'){oncomplete(req.responseXML);}else{oncomplete(req.responseText);}AJQueueInProgress=1;}}else{onerror(req.statusText);}}else{onload();}};var currentURL=(url)?url:AJAXQueue[0];req.open('GET',currentURL);if(document.all){req.send();}else{req.send(null);}return req;}
/* replaceAll */	String.prototype.replaceAll = function(b, c) { return this.split(b).join(c); };
/* capitalize */	String.prototype.capitalize = function(){ return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); };

var restrictKeys = {
	'16' : true,
	'17' : true,
	'18' : true,
	'13' : true,
//	'27' : true,
	'91' : true,
	'20' : true,
	'38' : true,
	'40' : true,
	'9' : true
}

var excludFromHilight = {
	'id' : 1,
	'custitemimgthumb' : 1,
	'itemurl' : 1
}

function headerSearchItem()	{
	//document.location.href = as_searchurl + '?' + as_searchparam + '=' + escape(jQuery('#ms_autocomplete').val());
	document.location.href = 'http://shopping.netsuite.com/s.nl/c.' + as_accountNumber + '/sc.' + as_searchTabNumber + '/.f?' + as_searchparam + '=' + escape(jQuery('#ms_autocomplete').val());
}

function setSearchResultsLayout() {
	// Set Results Container
	jQuery('<div id="search_results" style="display: none;"> <div id="sr_title"></div> <div id="sr_list"></div><div id="sr_footer"></div> </div>').insertBefore('#ms_autocomplete');
}

function drawSearchResults(items, token) {
	var resultsHTML = '';
	var itemTem;
	if(items.length > 4) {
		itemTem = '#temp2';
	} else {
		itemTem = '#temp1';
	}
	for(var i = 0; i < 15; i++) {
		var tREG = new RegExp(token,"gi");
		if(items[i]) {
			if(unescape(items[i]['storedisplayname']).match(tREG) || unescape(items[i]['itemid']).match(tREG)) {
				var cItemTemp = jQuery(itemTem).html();
				var tokRE = new RegExp(token, "gi");

				for(var col in items[i]) {
					var currentVal = unescape(items[i][col]);
					if(!excludFromHilight[col] && currentVal.match(tokRE)) {
						currentVal = currentVal.replaceAll(currentVal.match(tokRE)[0], '<span class="token_match">' + currentVal.match(tokRE)[0] + '</span>');
					}
					cItemTemp = cItemTemp.replaceAll('[[' + col + ']]',currentVal);
				}

				cItemTemp = cItemTemp.replaceAll('[lt]', '<');
				cItemTemp = cItemTemp.replaceAll('[gt]', '>');

				cItemTemp = cItemTemp.replaceAll('<c', '<');
				cItemTemp = cItemTemp.replaceAll('</c', '</');

				cItemTemp = cItemTemp.replaceAll('<C', '<');
				cItemTemp = cItemTemp.replaceAll('</C', '</');
				
				cItemTemp = cItemTemp.replaceAll('{AND}','&&').replaceAll('{OR}','||').replaceAll('{GT}','>').replaceAll('{LT}','<');
				var expressionExp = new RegExp("\\[\\[EXPRESSION:[^\\[\\]]*\\]\\]","gi");

				while(cItemTemp.match(expressionExp)) {
					var expressionStr = cItemTemp.match(expressionExp)[0].replace('[[EXPRESSION:','').replace(']]','');
					eval('var expressionResult = ' + expressionStr);
					cItemTemp = cItemTemp.replaceAll(cItemTemp.match(expressionExp)[0], expressionResult);
				}
				
				resultsHTML += cItemTemp;
			}
		}
	}
	return resultsHTML;
}

var currentItems = [];
var lastSearch = '';
var hideResults = true;
function checkChanges(cToken) {
	if(lastSearch != '') {
		if(cToken.toLowerCase().indexOf(lastSearch.toLowerCase()) != -1 || lastSearch.toLowerCase().indexOf(cToken.toLowerCase()) != -1) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function initAutoSearch() {
	var searchTimer;
	var reqObj;
	// Set search event
	jQuery('#ms_autocomplete').val(as_defaultText);
	jQuery('#ms_autocomplete').keyup(function(e) {
		var kcode = e.keyCode ? e.keyCode : e.which;
		var currentSearch = jQuery(this).val();

		////////////////////////////////////////////////
		// NEW FEATURE - HIDE RESULTS WHEN PRESS ESC KEY
		if(parseInt(kcode) == 27) {
			jQuery('#search_results').hide();
			jQuery('#sr_list .it_row.mover').removeClass('mover');
			return false;
		}
		////////////////////////////////////////////////
		////////////////////////////////////////////////

		if(currentSearch != lastSearch) {
			if(currentSearch.split('').length > 2) {
				if(restrictKeys[kcode] != true && (parseInt(kcode) < 111 || parseInt(kcode) > 123)) {
					clearTimeout(searchTimer);
					if(reqObj) {
						reqObj.abort();
						reqObj = null;
					}
					if(checkChanges(currentSearch) && currentItems.length > 0) {
						if(currentSearch.split('').length > lastSearch.split('').length) {
							lastSearch = currentSearch;
						}
						jQuery('#sr_list').html(drawSearchResults(currentItems, currentSearch));
					}

					lastSearch = currentSearch;
					searchTimer = setTimeout(function() {
						reqObj = AJAXSend({
							'url' : suiteletURL + '&token=' + escape(currentSearch),
							'oncomplete' : function(resString) {
								eval(resString);
								currentItems = items;
								jQuery('#search_results').show();
								jQuery('#link_to_results').remove();
								if(items.length > 0) {
									if(items.length > 15) {
										jQuery('#sr_footer').append('<div id="link_to_results"><a href="javascript:;" onclick="jQuery(\'#ms_searchSubmit\').click();">View all results</a></div>')
									}
								}
								jQuery('#sr_list').html(drawSearchResults(items, currentSearch));
								if(jQuery('#sr_list .it_row').length > 0) {
									jQuery('#sr_title').html('<div class="results_info">Results for <b>"' + currentSearch + '"</b> : <span id="res_count">' + ((items.length>15&&jQuery('#sr_list .it_row').length==15)?'more than 15</span>':jQuery('#sr_list .it_row').length + '</span></div>')).removeClass('searching');
								} else {
									jQuery('#sr_title').html('<div class="results_info">No results for <b>"' + currentSearch + '"</b></div>').removeClass('searching');
								}
								if(window.ons_callback) {
									ons_callback();
								}
							},

							////////////////////////////////////////////////
							// BUG RESOLVED - SHOW ERROR ON ERROR REQUEST //
							'onerror' : function() {
								jQuery('#sr_title').html('<div class="results_info">' + as_searcherrormsg + '</div>');
							},
							////////////////////////////////////////////////
							////////////////////////////////////////////////
							
							'onload' : function() {
								jQuery('#search_results').show();
								jQuery('#sr_title').html('<div class="results_info">Performing search...</div>').addClass('searching');
							}
						});
					}, 300);
				}
			} else {
				jQuery('#search_results').hide();
			}
		}
		// up arrow key event
		if(parseInt(kcode) == 38) {
			if(jQuery('#sr_list .it_row.mover').length == 0 || jQuery('#sr_list .it_row.mover:eq(0)').attr('id') == jQuery('#sr_list .it_row:first').attr('id')) {
				jQuery('#sr_list .it_row.mover').removeClass('mover');
				jQuery('#sr_list .it_row:last').addClass('mover');
			} else {
				jQuery(jQuery('#sr_list .it_row.mover').removeClass('mover').prev()).addClass('mover');
			}
		}
		// down arrow key event
		else if(parseInt(kcode) == 40) {
			jQuery('#search_results').show();
			if(jQuery('#sr_list .it_row.mover').length == 0 || jQuery('#sr_list .it_row.mover:eq(0)').attr('id') == jQuery('#sr_list .it_row:last').attr('id')) {
				jQuery('#sr_list .it_row.mover').removeClass('mover');
				jQuery('#sr_list .it_row:first').addClass('mover');
			} else {
				jQuery(jQuery('#sr_list .it_row.mover').removeClass('mover').next()).addClass('mover');
			}
		}
		// enter key event
		else if(parseInt(kcode) == 13) {
			if(jQuery('#sr_list .it_row.mover').length > 0) {
				document.location.href = jQuery('#sr_list .it_row.mover a').attr('href');
				return;
			} else {
				headerSearchItem();
			}
		}
	}).focus(function() {
		if(jQuery(this).val() == as_defaultText) {
			jQuery(this).val('');
		}
	}).blur(function() {
		if(jQuery(this).val() == '') {
			jQuery(this).val(as_defaultText);
		}
		if(hideResults) {
			jQuery('#search_results').hide();
		}
	});

	jQuery('#search_results').click(function() {
		jQuery('#ms_autocomplete').focus();
	}).hover(function() {
		hideResults = false;
	}, function() {
		hideResults = true;
	});
	jQuery('#ms_searchSubmit').click(function() {
		headerSearchItem();
	})
}

var dontChange = false;
ons_callback = function() {
	jQuery('#sr_list .it_row').hover(function() {
		dontChange = false;
		jQuery(this).addClass('m_over');
	}, function() {
		if(!dontChange) {
			jQuery(this).removeClass('m_over');
		}
	}).click(function() {
		dontChange = true;
		jQuery('#sr_list .it_row').removeClass('m_over').removeClass('mover');
		jQuery(this).addClass('mover');
		jQuery('#ms_autocomplete').focus();
		document.location.href = jQuery(this).find('a').attr('href');
	});
	if(window.onsearch) {
		onsearch();
	}
}

jQuery('#ms_autocomplete').ready(function() {
	setSearchResultsLayout();
	initAutoSearch();
});
