var fundSuggestionTimerId;
var fundSuggestionTimerDuration = 500;
var fundSuggestionTimerRunning = false;
var fundSuggestionMinChar_en = 2;
var fundSuggestionMinChar_tc = 2;

var forSelectStr = "_forSelect";

function getFundSuggestionMinChar() {
    if (siteInfo.lang == "en")
        return fundSuggestionMinChar_en;
    else
        return fundSuggestionMinChar_tc;
}

function getSpanSearchFundObj(forSelect) {
    if (forSelect)
        return $j("#spanSearchFund" + forSelectStr);
    else
        return $j("#spanSearchFund");
}

function clickSearchFundLink(itIsforSelect) {    
    getSpanSearchFundObj(itIsforSelect).click();
}

function getFundSearchBoxObj(forSelect) {
    if (forSelect)
        return $j("#txtFundSearch" + forSelectStr);
    else
        return $j("#txtFundSearch");
}

function getFundSearchBox(forSelect) {
    return getFundSearchBoxObj(forSelect).val();
}

function clearFundSearchBox(forSelect) {
    getFundSearchBoxObj(forSelect).val("");
}

function focusFundSearchBox(forSelect) {
    return getFundSearchBoxObj(forSelect).focus();
}

function setFundSearchBox(v, forSelect) {
    return getFundSearchBoxObj(forSelect).val(v);
}

function trimFundSearchBox(forSelect) {
    getFundSearchBoxObj(forSelect).val(getFundSearchBox(forSelect).trim());
}

function trimAndValidateFundSearchBox(forSelect) {
    trimFundSearchBox(forSelect);

    var query = getFundSearchBox(forSelect);

    if (query.match(pattern_fundSearchBoxInvalidChar)) {
        closeFundSearchSuggestion(forSelect);
        alert(errFundSearchBoxContainInvalidChar);
        return false;
    }
    return true;
}

function openFundSearchSuggestion(forSelect) {
    var s = forSelect ? forSelectStr : "";
    $j("#" + div_fundSearchSuggestion + s).css("display", "block");    
}

function closeFundSearchSuggestion(forSelect) {
    var s = forSelect ? forSelectStr : "";
    $j("#" + div_fundSearchSuggestion + s).css("display", "none");
}

function fundSearch_inputBox_setQuery(forSelect) {    
    if (siteInfo.query != "" && siteInfo.query != null) {
        //getFundSearchBoxObj(forSelect).val(siteInfo.query);
        setFundSearchBox(siteInfo.query, forSelect)
    }
}

function clearFundSearchSuggestionTimer() {
    clearTimeout(fundSuggestionTimerId);
}



$j(document).ready(function() {
    if (getFundSearchBoxObj().length > 0)
        focusFundSearchBox();
    else if (getFundSearchBoxObj(true).length > 0)
        focusFundSearchBox(true);
});

$j("#txtFundSearch, #txtFundSearch_forSelect").die("keydown");
$j("#txtFundSearch, #txtFundSearch_forSelect").live("keydown", function(e) {
    var itIsforSelect = false;
    if ($j(this).attr("id") == "txtFundSearch_forSelect")
        itIsforSelect = true;

    if (e.keyCode == 13) {  // press enter -> submit form
        clearFundSearchSuggestionTimer();
        closeFundSearchSuggestion(itIsforSelect);
        clickSearchFundLink(itIsforSelect);
        return false;
    }
    else if (e.keyCode == 27) {  // escape -> reset/clear form
        clearFundSearchSuggestionTimer();
        closeFundSearchSuggestion(itIsforSelect);
        clearFundSearchBox(itIsforSelect);
        return false;
    }
    else {
        // show suggestion
        if (fundSuggestionTimerRunning) {
            clearFundSearchSuggestionTimer();
        } else {
            fundSuggestionTimerRunning = true;
        }

        fundSuggestionTimerId = setTimeout("displayFundSuggestion(" + itIsforSelect + ")", fundSuggestionTimerDuration);
    }
});

$j("#spanShowAllFund, #spanShowAllFund_forSelect").die("click");
$j("#spanShowAllFund, #spanShowAllFund_forSelect").live("click", function() {
    var itIsforSelect = false;
    if ($j(this).attr("id") == "spanShowAllFund_forSelect")
        itIsforSelect = true;

    if (siteInfo.pageFileName.toLowerCase() == fileName_fundSearch.toLowerCase() || itIsforSelect) {
        resetFundSearchFilter();
        //resetFundSearchPager();
        clearFundSearchBox(itIsforSelect);
        clearFundSearchSuggestionTimer();
        //closeFundSearchSuggestion(itIsforSelect);
        //updateFundSearchResult(itIsforSelect);
        fundSearch_inputBox_resetAndUpdateResult(itIsforSelect);
    } else {
        location.href = '/' + siteInfo.lang + url_fundSearch;
    }
});




//==============================
// Search Funds
//==============================

function fundSearch_inputBox_resetAndUpdateResult(itIsforSelect) {
    resetFundSearchPager();
    updateFundSearchResult(itIsforSelect);
    closeFundSearchSuggestion(itIsforSelect);
}

$j("#spanSearchFund, #spanSearchFund_forSelect").die("click");
$j("#spanSearchFund, #spanSearchFund_forSelect").live("click", function() {
    var itIsforSelect = false;
    if ($j(this).attr("id") == "spanSearchFund_forSelect")
        itIsforSelect = true;

    if (!trimAndValidateFundSearchBox(itIsforSelect)) {
        return false;
    }

    var query = getFundSearchBox(itIsforSelect);

    if (query == "") {
        alert(errFundSearchBoxIsBlank);
        focusFundSearchBox(itIsforSelect);
        return false;
    }

    //var setCookie = itIsforSelect ? false : true;
    var setCookie = false;
    
    $j.getJSON(
        '/' + siteInfo.lang + url_fundSearchAjax,
        {
            query: query,
            action: "getSingleFundCodeByQuery",
            setCookie: setCookie,
            returnType: 'json'
        },
        function(data) {
            if (data.error == "no record") {
                alert(errFundSearchBoxHasNoRecord);
                focusFundSearchBox(itIsforSelect);
                return false;
            } else {
                if (itIsforSelect) {
                    fundSearch_inputBox_resetAndUpdateResult(itIsforSelect);
                } else {
                    if (data.fundcode != "") {
                        // One single record found
                        //location.href = '/' + siteInfo.lang + url_fundInfoBase + data.fundcode.substr(0, 1) + '/' + data.fundcode + '.aspx';
                        location.href = '/' + siteInfo.lang + url_fundHistoricalPrice + '?fundcode=' + data.fundcode;
                        
                    } else {
                        // More than 1 records found
                        if (siteInfo.pageFileName.toLowerCase() == fileName_fundSearch.toLowerCase()) {
                            fundSearch_inputBox_resetAndUpdateResult(itIsforSelect);
                        } else {
                            location.href = '/' + siteInfo.lang + url_fundSearch + "?query=" + query.trim().replace(/"/g, '\\"');
                        }
                    }
                }
            }
        }
    );
})


//==============================
// Funds Suggestion
//==============================

function displayFundSuggestion(itIsforSelect) {
    trimFundSearchBox(itIsforSelect);
    if (getFundSearchBox(itIsforSelect).length < getFundSuggestionMinChar()) {
        closeFundSearchSuggestion(itIsforSelect);
    } 
    else {

        if (!trimAndValidateFundSearchBox(itIsforSelect)) {
            return false;
        }

        query = getFundSearchBox(itIsforSelect);

        $j.ajax({
            type: 'post',
            url: '/' + siteInfo.lang + url_fundSearchSuggestion,
            data: ({ query: query }),
            success: function(result) {
                if (!result.match(/<tr>/i)) {
                    closeFundSearchSuggestion(itIsforSelect);
                } else {
                    var s = itIsforSelect ? forSelectStr : "";
                    $j("#" + div_fundSearchSuggestionResult + s).html(result);
                    openFundSearchSuggestion(itIsforSelect);
                }
            }
        });
    }
}

$j(document).ready(function() {
    $j("#" + div_fundSearchSuggestionClose).die("click");
    $j("#" + div_fundSearchSuggestionClose).live("click", function() {
        //closeFundSearchSuggestion();
        $j(this).parent().css("display","none");
    });
});

$j("#divFundSearchSuggestionResult #tableFundsSuggestion tr").die("click");
$j("#divFundSearchSuggestionResult #tableFundsSuggestion tr").live("click", function() {
    clickSuggestion($j(this), false);
});

$j("#divFundSearchSuggestionResult_forSelect #tableFundsSuggestion tr").die("click");
$j("#divFundSearchSuggestionResult_forSelect #tableFundsSuggestion tr").live("click", function() {
    clickSuggestion($j(this), true);
});

function clickSuggestion(trObj, itIsforSelect) {
    var fundcode = trObj.find("th").text();

    setFundSearchBox(fundcode, itIsforSelect);

    clearFundSearchSuggestionTimer();
    closeFundSearchSuggestion(itIsforSelect);
    clickSearchFundLink(itIsforSelect);
}
