(function() {
    var Event=YAHOO.util.Event,
        Dom=YAHOO.util.Dom,
        oACDS, oAutoComp,
        show = {
            'private': false,
            'protected': false,
            'deprecated': false
        },
        
        ITEM_TEMPLATE = '{host} {name}',
        // ITEM_TEMPLATE = '{host} {params} {name}',
        // ITEM_TEMPLATE = '{host} {params} {name}
{description}
',
        yuidoc = YAHOO.namespace('yuidoc'),
        propdata,
        initialized = false;
yuidoc.init = function(altdata) {
   yuidoc.initUI(altdata);
};
yuidoc.initUI = function(altdata) {
    if (initialized) {
        return;
    }
    propdata = ALL_YUI_PROPS || altdata;
    //Checkboxes are available..
    var handleClick = function(e) {
        var id, checked = false;
        if (YAHOO.lang.isString(e)) {
            id = e;
        } else {
            var tar = Event.getTarget(e);
            id = tar.id;
        }
        var el = Dom.get(id);
        checked = el.checked;
        var className = id;
        if (checked) {
            show[id.replace('show_', '')] = true;
            Dom.addClass(document.body, className);
            YAHOO.util.Cookie.setSub('yuidoc', id, 'checked');
        } else {
            show[id.replace('show_', '')] = false;
            Dom.removeClass(document.body, className);
            YAHOO.util.Cookie.setSub('yuidoc', id, '');
        }
    };
    var checkCookie = function(id) {
        var value = YAHOO.util.Cookie.getSub('yuidoc', id),
            el = Dom.get(id), checked = (value === 'checked');;
        el.checked = checked;
        return checked;
    };
    var els = ['show_deprecated', 'show_protected', 'show_private'],
        reapplyHash = false;
    for (var i = 0; i < els.length; i++) {
        Event.on(els[i], 'click', handleClick);
        reapplyHash = checkCookie(els[i]) || reapplyHash;
        handleClick(els[i]);
    }
    // If we dynamically show private/protected/etc items during
    // load, we need to reapply anchors so that the search feature
    // works correctly for items that are initially hidden.
    if (reapplyHash) {
        var dl = document.location, hash = dl.hash;
        if (hash) {
            dl.hash = hash;
        }
    }
    
};
//Starting the AutoComplete code
    var getResults = function(query) {
        var results = [];
        if (query && query.length > 0) {
            var q = query.toLowerCase();
            for (var i=0, len=propdata.length; i -1 ) {
                        results.push([query, prop]);
                    }
                }
            }
        }
        return results;
    };
    // Define Custom Event handlers
    var myOnDataReturn = function(sType, aArgs) {
        var oAutoComp = aArgs[0];
        var query = aArgs[1];
        var aResults = aArgs[2];
        if(aResults.length == 0) {
            if (query.length > 0) {
                oAutoComp.setBody("Not found
");
            }
        }
    };
    var myOnItemSelect = function(sType, aArgs) {
        var ac = aArgs[0];
        var item = aArgs[2];
        location.href = item[1].url;
    };
    Event.onAvailable("searchresults", function() {
        // Instantiate JS Function DataSource
        oACDS = new YAHOO.widget.DS_JSFunction(getResults);
        oACDS.maxCacheEntries = 30;
        // Instantiate AutoComplete
        oAutoComp = new YAHOO.widget.AutoComplete('searchinput','searchresults', oACDS);
        //oAutoComp.alwaysShowContainer = true;
        oAutoComp.queryDelay = 0.2;
        oAutoComp.maxResultsDisplayed = 200;
        oAutoComp.minQueryLength = 0;
        oAutoComp.formatResult = function(oResultItem, query) {
            // var sMarkup = "" + oResultItem[1].host + ' ' + oResultItem[1].name + '';
            // return sMarkup;
            // return  "" + oResultItem[1].host + ' ' + oResultItem[1].name + '';
            return  YAHOO.lang.substitute(ITEM_TEMPLATE, oResultItem[1]);
        };
        // Subscribe to Custom Events
        oAutoComp.dataReturnEvent.subscribe(myOnDataReturn);
        oAutoComp.itemSelectEvent.subscribe(myOnItemSelect);
        
        // Set initial content in the container
        oAutoComp.sendQuery(Dom.get("searchinput").value);
    });
    var validateForm = function() {
        return false;
    };
    
    YAHOO.util.Event.onAvailable('classTab', function() {
        var tabs = new YAHOO.widget.TabView('classTab');
    });
    /*
    YAHOO.util.Event.onAvailable('codeTree', function() {
        var tree1 = new YAHOO.widget.TreeView('codeTree');
        tree1.render();    
    });
    */
    YAHOO.util.Event.onDOMReady(function() {
        if (typeof ALL_YUI_PROPS != "undefined") {
            YAHOO.yuidoc.initUI();
        }
    });
})();