﻿/*
    Attach a Yahoo Autocompleter to the input box with id 'search_input'
    Oli 31/01/2008
    
    Requires - yahoo autocomplete javascript:
    http://developer.yahoo.com/yui/autocomplete/

*/

var autocompleteNumToShow = 200;
var acData;

function InitialiseAutocomplete(productRange) {

    var callback = 
    { 
	  success: function(o) {
        try {
            acData = YAHOO.lang.JSON.parse(o.responseText);
        }
        catch (x) {
            return;
        }
        load_autocomplete_success();
	  },
	   
	  failure: function(o) {

	  }, 
	  timeout: 10000
	} 

    YAHOO.util.Connect.asyncRequest('GET', '/handlers/AjaxHandler.ashx?action=GetWineWords&productRange=' + productRange + '&club=' + productRange, callback, null); 
}

function start_autocomplete(datasource) {
    var myAutoComp = new YAHOO.widget.AutoComplete("search_input",
                                                   "search_container", 
                                                   datasource);
    myAutoComp.minQueryLength           = 1;
    myAutoComp.queryDelay               = 0;
    myAutoComp.autoHighlight            = false; 
    myAutoComp.useShadow                = false; 
    myAutoComp.allowBrowserAutocomplete = false;  
    myAutoComp.maxResultsDisplayed      = 10;
    myAutoComp.animVert                 = true;
    myAutoComp.animHoriz                = true;
    myAutoComp.animSpeed                = 0.3;
    myAutoComp.useIFrame                = true;
    myAutoComp.itemSelectEvent.subscribe(OnItemSelectEvent);
    
    myAutoComp.formatResult = function(resultItem, userQuery) 
    {
        var formatted = resultItem[0].replace(userQuery, ' <div class="acMatch">' + userQuery + '</div>');

        // nasty fix for IE
        formatted = formatted.replace('</div> ', '</div>&nbsp;');
        return formatted; 
    };
}

function load_autocomplete_success() {

    var myDataSource1 = new YAHOO.widget.DS_JSArray(acData); 
    myDataSource1.queryMatchContains = true;
    myDataSource1.queryEvent.subscribe(onQueryEvent);

    start_autocomplete(myDataSource1)
}

function OnItemSelectEvent(type, args) {
    if (document.searchform != null) {
        document.searchform.action = 'searcharticles.aspx';
        document.searchform.submit();
    }
}

function onQueryEvent(type, args) {
    var query = args[2];
    var matchAtStartArray = new Array();
    var matchAtNotStartArray = new Array();
    
    // fix up space characters    
    query = query.replace('%20', ' ');
    
    var matchAtStartCount    = 0;
    var matchAtNotStartCount = 0;
    
     for (var i=0; i<acData.length;i++) {
        var phrase = acData[i];
        
        if (phrase.indexOf(query) == 0) {
            matchAtStartArray[matchAtStartCount] = phrase;
            matchAtStartCount++;
        }
        else 
        {
            matchAtNotStartArray[matchAtNotStartCount] = phrase;
            matchAtNotStartCount++;
        }
     }
     matchAtStartArray.sort();
     matchAtNotStartArray.sort();
    
    var fullListCounter = 0;
    for (var i=0; i<matchAtStartArray.length;i++) {
        acData[fullListCounter] = matchAtStartArray[i];
        fullListCounter++;
    }
    
    for (var i=0; i<matchAtNotStartArray.length;i++) {
        acData[fullListCounter] = matchAtNotStartArray[i];
        fullListCounter++;
    }
}
        