﻿// JScript File

function AppendSearchForm()
{
    if(document.getElementById("SearchForm")==null)
    {
//        var oForm = document.createElement('<form id="SearchForm" action="ResourceDataListPage.aspx"></form>');
//        var oDatabaseBox = document.createElement("<input type=hidden name=database>");
//        var oExpressionBox = document.createElement("<input type=hidden name=expression>");
//        var oSortableFieldBox = document.createElement("<input type=hidden name=sortableField>");
//        var oSortModeBox = document.createElement("<input type=hidden name=sortMode>");
//        var oRecordSchemaBox = document.createElement("<input type=hidden name=recordSchema>");
        var oForm = document.createElement('form');
        oForm.id = 'SearchForm';
        oForm.action = 'ResourceDataListPage.aspx'; 
        
        //var oDatabaseBox = document.createElement('<input name=database>');
        var oDatabaseBox = document.createElement('input');
        oDatabaseBox.type = 'hidden';
        oDatabaseBox.name = 'database';
        oDatabaseBox.id = 'database';
        
        //var oExpressionBox = document.createElement('<input name=expression>');
        var oExpressionBox = document.createElement('input');
        oExpressionBox.type = 'hidden';
        oExpressionBox.name = 'expression';
        oExpressionBox.id = 'expression';
        
        //var oSortableFieldBox = document.createElement('<input name=sortableField>');
        var oSortableFieldBox = document.createElement('input');
        oSortableFieldBox.type = 'hidden';
        oSortableFieldBox.name = 'sortableField';
        oSortableFieldBox.id = 'sortableField';
        
        //var oSortModeBox = document.createElement('<input name=sortMode>');
        var oSortModeBox = document.createElement('input');
        oSortModeBox.type = 'hidden';
        oSortModeBox.name = 'sortMode';
        oSortModeBox.id = 'sortMode';
        
        //var oRecordSchemaBox = document.createElement('<input name=recordSchema>');
        var oRecordSchemaBox = document.createElement('input');
        oRecordSchemaBox.type = 'hidden';
        oRecordSchemaBox.name = 'recordSchema';
        oRecordSchemaBox.id = 'recordSchema';
        
        oForm.appendChild(oDatabaseBox);
        oForm.appendChild(oExpressionBox);
        oForm.appendChild(oSortableFieldBox);
        oForm.appendChild(oSortModeBox);
        oForm.appendChild(oRecordSchemaBox);
        document.body.appendChild(oForm);
    }
}

function DoSearch(databases, expression, recordschema, sortField, sortMode, resultPageUrl, target, resultPageParms)
{
    AppendSearchForm();
    //searchForm = document.all["SearchForm"];//firefox 不能识别
    searchForm = document.getElementById("SearchForm");

    if(searchForm)
    {
        if(resultPageUrl)
            searchForm.action = resultPageUrl;
        if(target)
            searchForm.target = target;
        if(searchForm.database)
            searchForm.database.value = databases;
        if(searchForm.expression)
            searchForm.expression.value = expression;
        if(searchForm.recordSchema && recordschema)
            searchForm.recordSchema.value = recordschema;
        if(searchForm.sortField)
            searchForm.sortField.value = sortField;
        if(searchForm.sortMode)
            searchForm.sortMode.value = sortMode;
            
        if(resultPageParms && resultPageParms.length>0)
        {
            for(var i=0; i<resultPageParms.length; i++)
            {
                if(resultPageParms[i] && resultPageParms[i].length >=2 )
                {
                    var oParmBox = document.createElement('input');
                    oParmBox.type = 'hidden';
                    oParmBox.name = resultPageParms[i][0];
                    oParmBox.value = resultPageParms[i][1];
                    searchForm.appendChild(oParmBox);
                }
            }
        }

        searchForm.submit();
    }
}

function BuildSearchExpression(schema, field, searchWordMode, keyWord, splitByWhiteSpace)
{
    if(IsStringNullOrEmpty(keyWord))
        return "";
        
    var expression = "";

    if(!IsStringNullOrEmpty(keyWord))
    {
        if(splitByWhiteSpace && searchWordMode!="exact" && !(keyWord.charAt(0)=='"' && keyWord.charAt(keyWord.length-1)=='"'))
        {
            // split the keyword int to keywords by whitespace(" ")
            // each keyword will be processed
            var keyWordsSplited = keyWord.split(" ");
            if(keyWordsSplited.length > 1)
            {
                for(var i=0; i<keyWordsSplited.length; i++)
                {
                    if(!IsStringNullOrEmpty(keyWordsSplited[i]))
                    {
                        var expressionPice = BuildSearchExpression(schema, field, searchWordMode, keyWordsSplited[i]);
                        if(!IsStringNullOrEmpty(expressionPice))
                        {
                            if(IsStringNullOrEmpty(expression))
                                expression = expressionPice;
                            else
                                expression = expression + " and " + expressionPice;
                        }
                    }
                }
                
                return expression;
            }
        }
        
        var fieldLimit = field;
        if(!IsStringNullOrEmpty(schema) && schema=="native")
		schema="";
        if(!IsStringNullOrEmpty(field))
            if(!IsStringNullOrEmpty(schema))
                fieldLimit = schema + "." + field;

        // replace the '"' with '\"'
        keyWord = keyWord.replace(/"/g, "\\\"");
        keyWord = "\"" + keyWord + "\"";

        if(!IsStringNullOrEmpty(fieldLimit))
        {
            if(searchWordMode=="exact")
                expression = fieldLimit + " exact " + keyWord;
            else if(searchWordMode=="^")
                expression = fieldLimit + "=^" + keyWord;
            else
                expression = fieldLimit + "=" + keyWord;
        }
        else
            expression = keyWord;
        
        return expression;
    }
    else
        return null;
}
