﻿// ---------- nav search helper class ---------- //
Ext.ux.NavSearchHelper = Ext.extend(Ext.util.Observable, {

    // internal fields

    // standard constructor
    constructor: function(initiateElementId, resetElementId,
        queryElementId, searchTargetElementId,
        defaultSearchTarget) {

        // args passed in
        this.m_initiateElementId = initiateElementId;
        this.m_resetElementId = resetElementId;
        this.m_queryElementId = queryElementId;
        this.m_searchTargetElementId = searchTargetElementId;

        this.m_defaultSearchTarget = defaultSearchTarget;

        // add custom events
        this.addEvents(g_customEvent_navSearchHelper_searchInitiated);
        this.addEvents(g_customEvent_navSearchHelper_resetInitiated);

        Ext.ux.NavSearchHelper.superclass.constructor.call(this);
    },

    // standard initializer
    initComponent: function() {
        Ext.ux.NavSearchHelper.superclass.initComponent.apply(this, arguments);

        // extra args have to go here as base class initComponent doesn't get called for some reason
        var config = {};

        Ext.apply(this, config);
        Ext.apply(this.initialConfig, config);
    },

    // initialize
    initialize: function() {
        // can't use 'this' in callbacks
        var me = this;

        // bind to form click handlers
        $("#" + this.m_initiateElementId).bind("submit",
            function() {
                me.doSearch();
                return false; // return false to prevent form submitting
            }
        );
        $("#" + this.m_resetElementId).bind("click",
            function() {
                me.doReset();
                return false; // return false for consistency
            }
        );
    },

    // retrieve current query text
    getQuery: function() {
        var query = $("#" + this.m_queryElementId).val();
        query = $.trim(query);

        return query;
    },

    // set the default search target
    setDefaultSearchTarget: function(defaultSearchTarget) {
        this.m_defaultSearchTarget = defaultSearchTarget;
    },

    // retrieve current search target
    getSearchTarget: function() {
        var searchTarget = $(this.m_searchTargetElementId).val(); // note: don't use '#' here
        searchTarget = searchTarget.toLowerCase();

        return searchTarget;
    },

    // set current search target - called when we switch tabs
    setSearchTarget: function(searchTarget) {
        searchTarget = searchTarget.toLowerCase();
        if ($("#searchtarget_" + searchTarget).length === 1) {
            $("#searchtarget_" + searchTarget).attr("checked", "checked");
        }

        // remember the default search target for when we reset
        this.setDefaultSearchTarget(searchTarget);
    },

    // handle search initiated
    doSearch: function() {
        // retrieve query & searchtarget
        var query = this.getQuery();
        var searchTarget = this.getSearchTarget();

        if (query !== "") {
            // fire off the event for whoever is listening (with query text)
            this.fireEvent(g_customEvent_navSearchHelper_searchInitiated, query, searchTarget);
        }
    },

    // handle reset clicked
    doReset: function() {
        this.resetControls();

        // fire off the event for whoever is listening to reset
        this.fireEvent(g_customEvent_navSearchHelper_resetInitiated);
    },

    // reset the search controls
    resetControls: function() {
        $("#searchtarget_" + this.m_defaultSearchTarget).attr("checked", "checked"); // reset to default
        $("#" + this.m_queryElementId).val("");
    }
});