﻿if (typeof im == 'undefined') { var im = {}; } 
im.namespace = function() { var a = arguments, e = null, c, b, d; for (c = 0; c < a.length; c++) { d = a[c].split('.'); e = im; for (b = (d[0] == 'im') ? 1 : 0; b < d.length; b++) { e[d[b]] = e[d[b]] || {}; e = e[d[b]] } } return e};

im.namespace('search');

var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event; 

//Event.onDOMReady(function() {
//    im.search.registerSearch();1
//});

im.search = {

    /**
    * Register the search auto complete
    */
    registerSearch: function() {

        /**
        * Register a Data Source for the AutoComplete
        */
        var ds = new YAHOO.util.XHRDataSource('/predictivesearch/generate.aspx');

        /**
        * DataSource properties
        */
        ds.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;

        /**
        * Data Source response schema
        */
        ds.responseSchema = {
            resultsList: 'ResultSet.Result',
            fields: ['ProductName', 'ProductId', 'PartNo', 'SefUrl']
        };

        /**
        * Register the AutoComplete
        */
        var ac = new YAHOO.widget.AutoComplete('s', 'acResultsContainer', ds);

        /**
        * AutoComplete properties
        */
        ac.animVert = false;
        ac.minQueryLength = 2;
        ac.typeAhead = false;
        ac.forceSelection = false;
        ac.allowBrowserAutocomplete = false;
        ac.resultTypeList = false;
        ac.useIFrame = true;
        ac.suppressInputUpdate = true;
        ac.autoHighlight = false;
        ac.maxResultsDisplayed = 16;

        /**
        * Custom result formatting
        */
        ac.formatResult = function(oResultData, sQuery, sResultMatch) {
            return (oResultData.ProductName);
        };

        /**
        * Overridable
        * Converts an autocomplete query into a request
        */
        ac.generateRequest = function(s) {
            var r = Math.floor(Math.random()*100000)
            return '?r=' + r + '&q=' + s;
        };

        /**
        * Overridable.
        * Custom events
        */
        var itemSelectEvent = function(sType, aArgs) {
            if (aArgs[2].PartNo == '#')
                window.location = '/search/?s=' + Dom.get('s').value;
            else if (aArgs[2].PartNo == '')
                return false;
            else
                window.location = '/product/' + aArgs[2].PartNo + '/' + aArgs[2].SefUrl + '/';
        }

        var dataRequestEvent = function(oSelf, oQuery) {
            Dom.get('ac-load').style.display = 'block';
        }

        var dataReturnEvent = function(oSelf, oQuery, aResults) {
            Dom.get('ac-load').style.display = 'none';
        }

        /**
        * Register custom events
        */
        ac.dataRequestEvent.subscribe(dataRequestEvent);
        ac.dataReturnEvent.subscribe(dataReturnEvent);
        ac.itemSelectEvent.subscribe(itemSelectEvent);

        /**
        * Register the DataSource and AutoComplete
        */
        return { oDS: ds, oAC: ac };
    },
    
    registerSafeLoad: function(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                if (oldonload) {
                    oldonload();
                }
                func();
            }
        }
    }
};

im.search.registerSafeLoad(function() {
    im.search.registerSearch();
});