/*  Consumer Contact & Support - pageloader.js.
 *  Version: 1.0.0
 *  Date: July 29, 2008
*/

var SM_DEBUG=false;
var ResultsAutoSuggest="";
var contentType;
var autoSuggestHeader;
var userquery="";
var lastquery="";
function smdebug(mesg) { if (SM_DEBUG) alert(mesg)};

var _supportpage = {
	loadBrowserInfo : false, 
	text : [],									// This needs to be deleted and the Team Site JSON will come in place
	browserInfo : []
}
   // var browser = new BrowserDetect();
    var isIE = false;
    var isIEMac = false;
    var req = new Array();
    var urls;
    var pages = new Array();
    var lastRequest = "";
    var loadingOrder = new Array();
    var productItem;
    isBookmarked = false;
    var searchWord;
    var firsttime = "FirstTime";

//Start AutoSuggest Sander Kerstens
/* 	CLASS : Events
*/
_supportpage.Events = {
	__listeners:[],
	// Add event 
	add:function(el, type, fn) {
		if (el.addEventListener) 
			el.addEventListener(type, fn, false);
		else if (el.attachEvent)
			el.attachEvent('on'+type, fn);
		var event = {
			el: el,
			type: type,
			fn: fn
		};
		_supportpage.Events.__listeners.push(event);
		return event;
	},
	// Remove event
	remove:function(el, type, fn) {			
		if (el.removeEventListener)
			el.removeEventListener(type, fn, false);
		else if (el.detachEvent)
			el.detachEvent('on'+type, fn);
	},
	// Remove SAFELY event to avoid mem leaks, only applicable if you have stored the element
	removeSafe:function(event) {
		if(!event) return;	
		var el = event.el;
		var type = event.type;
		var fn = event.fn;
		_supportpage.Events.remove(el, type, fn);
		for (var i = 0; i < this.__listeners.length; i++) {
			if (this.__listeners[i] == event) {
				_supportpage.Events.__listeners.splice(i, 1);
				break;
			}
		}
	},
	// Remove All events 
	removeAll:function() {
		 while (_supportpage.Events.__listeners.length > 0)
			_supportpage.Events.removeSafe(_supportpage.Events.__listeners[0]);
	},
	// Cancel event
	cancel:function(e) {
		if(!e) 
			var e = window.event;
		if(e.stopPropagation) 
			e.stopPropagation();
		if(e.preventDefault)
			e.preventDefault();
		e.cancelBubble = true;
		e.cancel = true;
		e.returnValue = false;
		return false;
	},
	// Get target 
	getTarget:function(e) {
		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
		return targ;
	}
};
_supportpage.startEvent = function(obj,type,args){
	args=(!args?arguments:args);
	if(typeof(obj[type])=="function"){
		obj[type].apply(obj,args);
	}
};
var QUERY_WIDGET_ID = 'searchValue';
var DIV_SUGGESTIONS_ID = 'search_cat_suggestlist';

mouseEventDetectEnabled = true;

var MIN_LETTERS = 2;

// Simplification of the prototype.js $() function
function fc(element) {
  if (element)
    element = document.getElementById(element);
  return element;
}

/// Register to the events we need to listen to:
/**
 * In case the user clicks somewhere - hide the dropdown
 */
/*_supportpage.Events.add(document, 'click', function(e) {
	try {
		fc(DIV_SUGGESTIONS_ID).innerHTML = '';
		fc(DIV_SUGGESTIONS_ID).style.display = 'none';
	} catch (e) {}
}
);*/

_supportpage.Events.add(document, 'mousemove', function(e) {	
	try {
		mouseEventDetectEnabled = true;
	} catch (e) {}
});

/**
 * In case the window resizes - move the dropdown
 */
_supportpage.Events.add(window, 'resize', function(e) {
	try {
		positionSuggestDiv();
	} catch (e) {}
});

_supportpage.Events.add(document, 'keydown', function(e) {
	try {
		if (fc(DIV_SUGGESTIONS_ID).style.display != 'none') {
			if(e.keyCode == 38) {
				//e.stop();
				mouseEventDetectEnabled = false;
				setSuggestOver(selectedSuggestionItem-1);
			} else if (e.keyCode == 40) {
				//e.stop();
				mouseEventDetectEnabled = false;
				setSuggestOver(selectedSuggestionItem+1);
			} else if (e.keyCode == 13) {
				setSearch(selectedSuggestionItem,false);
				//hideSuggestDiv();
			}
		}
	} catch (e) {}
});

// Private vars
var suggestAjaxRequestOngoing = false;
var selectedSuggestionItem = -1;
var mouseEventDetectEnabled = true;
var lastQuery = "";
var escapeQuery;

function showSuggestDiv() {
	positionSuggestDiv();
	fc(DIV_SUGGESTIONS_ID).style.display = 'block';
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
		var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (ieversion<=6)
			document.getElementById("sortcontainer").style.display='none'
	}
}

function hideSuggestDiv() {	
	fc(DIV_SUGGESTIONS_ID).style.display = 'none';
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
		var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (ieversion<=6)
			document.getElementById("sortcontainer").style.display='block'
	}
}
function positionSuggestDiv() {
	//fc(DIV_SUGGESTIONS_ID).clonePosition(fc(QUERY_WIDGET_ID), {setHeight:false,offsetTop:getDimensions(fc(QUERY_WIDGET_ID)).height-1})
}
function updateSuggestDiv(suggestions) 
{
	//var searchString = fc(QUERY_WIDGET_ID).value;
	var ss = fc(DIV_SUGGESTIONS_ID);	
	ss.innerHTML = '';	
	var suggest = '';
	var regexpstr = '/' + lastquery +'/';
	var regexp = new RegExp(lastquery,'gi');
	if ((suggestions.length > 0) && (fc(QUERY_WIDGET_ID).value.length >= 2)) {
		suggest += '<div class="autosuggest leftmargin16" style="display:block;">'
		suggest += '<div class="autosuggesttop"></div>';
		suggest += '<div class="autosuggestclosebox">';
		suggest += '<div class="padding10">';
		suggest += '<div class="floatLeft">' + autoSuggestHeader + '</div>';
		suggest += '<div><a href="javascript:hideSuggestDiv()" class="btnpopclose">Close</a></div>';
		suggest += '<div class="clearAll"></div>';
		suggest += '</div></div>';
		suggest += '<div class="autosuggestresult">';
		for(i=0; i < suggestions.length; i++) {
			suggest += '<div class="hand" id="suggestValue' + i + '" onclick="setSearch(' + i + ',true);" onmouseover="suggestOver(' + i + ');">' + suggestions[i].replace(regexp, "<b>$&</b>") + '</div>';
		}
		suggest += '<div class="clearAll"></div>';
		suggest += '</div>';
		suggest += '<div class="clearAll"></div>';
		suggest += '<div class="autosuggestbottom"></div>';
		suggest += '</div>';
		ss.innerHTML = suggest;
		showSuggestDiv();
	} else {
		//alert('suggestion size is 0');
		hideSuggestDiv();
	}
}
function suggestOver(v) {
	if (mouseEventDetectEnabled) {	
		setSuggestOver(v);
	}
}

//Select an item function
function setSuggestOver(v) {
	// Unselect the previous item
	setSuggestOut(selectedSuggestionItem);
	// Set and select the next item
	try {
		selectedSuggestionItem = v;
		fc('suggestValue' + v).className = 'hand suggestover';	
		
	} catch (e) {
		if (selectedSuggestionItem < 9) {
			selectedSuggestionItem = 10;
		} else {
			selectedSuggestionItem = 0;
	
			fc('suggestValue0').className = 'hand suggestover';	
		}
		
	}
}
//Unselect - try/catch because we might be unselecting 
//illegal tables (eg -1)
function setSuggestOut(v) {	
	try {
		fc('suggestValue' + v).className = 'hand suggestout';
	} catch (e) {}
}
//Click function
function setSearch(v,submit) {
	try {
		var regexpBoldStart = '/' + '<B>' +'/';
		var regexpBoldEnd = '/' + '</B>' +'/';
		var regexpBoldSmallStart = '/' + '<b>' +'/';
		var regexpBoldSmallEnd = '/' + '</b>' +'/';
		var doSubmit = (typeof submit != "undefined"?submit:true);
		var returnString = fc('suggestValue' + v).innerHTML;
		do{
			returnString = returnString.replace('<B>', "");
			returnString = returnString.replace('</B>', "");
			returnString = returnString.replace('<b>', "");
			returnString = returnString.replace('</b>', "");
		  }while((returnString.indexOf('<B>') != -1)|(returnString.indexOf('</B>') != -1)|(returnString.indexOf('<b>') != -1) |(returnString.indexOf('</b>')!= -1));
		fc(QUERY_WIDGET_ID).value = returnString;
		if(doSubmit)submitSearch();
	} 
	catch (e) 
	{}	
}
// Submit function
function submitSearch() {
	var searchValue =  document.getElementById("searchValue").value;
   searchValue=searchValue.replace(/\s/g,"%20");
   document.searchForm.action="/support/search/search.jsp?searchValue="+searchValue;
   document.searchForm.submit();
}
//Autosuggest Code Start Here
function getResult(sectionString,country,language,url){
	localeString = language + '_' + country;
	userquery = fc(QUERY_WIDGET_ID).value;
	if(lastquery != userquery){
		lastquery = userquery;
		if(userquery.length >= MIN_LETTERS){
			url = url + '?query=' + userquery + '&section=' + sectionString + '&locale=' + localeString;
			if (!_page.headerSayT) {
					_page.headerSayT = {};
			}
			delete _page.headerSayT.results;
			var headID = document.getElementsByTagName("head")[0];
			var newScript = document.createElement('script');
			newScript.type = 'text/javascript';
			newScript.src = url;  
			headID.appendChild(newScript);
			//suggestAjaxRequestOngoing = false;
			//searchSuggest();
			setTimeout("searchSuggest()",1000);
		}else{
			hideSuggestDiv();
		}
	}else{
		//alert('same');
	}
}

	
function searchSuggest(){
	ResultsAutoSuggest = _page.headerSayT.results;
    if (typeof(ResultsAutoSuggest)!= 'undefined'){
    	if(ResultsAutoSuggest.length > 0){
    		var contentType = ResultsAutoSuggest[0].info;
    		if(contentType == 'C'){
    			autoSuggestHeader = " Product categories containing " + "'" + fc(QUERY_WIDGET_ID).value + "'?";
    		}else if(contentType == 'N'){
    			autoSuggestHeader = "Matching product names";
    		}else if(contentType == 'P'){
    			autoSuggestHeader = "Are you looking for a product model?";
    		}
    	}else{
    		//alert('result set size is 0');
    	}
        //var userQuery = fc(QUERY_WIDGET_ID).value;
        //lastQuery = userQuery;
        selectedSuggestionItem = -1;
        escapeQuery = lastquery;
        for(i = 0; i < lastquery.length; i++){	        
            escapeQuery = escapeQuery.replace("%20", " ");
        }
        updateSuggestDiv(collectSuggest(escapeQuery,ResultsAutoSuggest));
    }else{
    	setTimeout("searchSuggest()",100);
    }
}	

//Create Suggestion List from JSON datasource
function collectSuggest(query,ResultsAutoSuggest){
    //ResultArray Both Words        
    var suggestions = new Array();
    var regulairExpression = "";
    var regulairArray = "";
    var j = 0;
    var resultArrayBothWords = new Array(); 

    //zoekStringInternal = ".*" + query.replace(" ", ".*") + ".*";
    //zoekStringInternal = zoekStringInternal.replace("[","");
    //zoekStringInternal = zoekStringInternal.replace("]","");
    //regulairExpression = new RegExp(zoekStringInternal.toLowerCase(), "g");
    for(i = 0; i < ResultsAutoSuggest.length; i++){
		if(ResultsAutoSuggest[i].query != '') {
                suggestions[j] = ResultsAutoSuggest[i].query;
                j++
		    }
    }
   // var listLength;
    //var k = 0;
    /*if(resultArrayBothWords.length > 10){
      listLength = 10;
    }else{
      listLength = resultArrayBothWords.length;
    }*/
   // alert("resultArrayBothWords.length : " + resultArrayBothWords.length);
    //Return a list of 10 items max
   /* for(i = 0; i < resultArrayBothWords.length; i++){
        newWordConstruct = resultArrayBothWords[i];
        suggestions[k] = newWordConstruct;
        k++;   
    }*/
    //Return the results
    return suggestions;
}