/*
    © 2003 Verity, Inc. All rights reserved. Verity®, KeyView® are trademarks of
    Verity, Inc. in the USA and numerous other countries. All other marks or
    symbols are those of their respective owners. This software is licensed, not
    sold, and is subject to worldwide copyright laws and the terms of the Verity,
    Inc. software license agreement contained in this package.

 *
 * File: advancedQuery.js
 *
 *  Javascript for Verity K2 Enterprise Web Sample Templates - Advanced Query Generation
 *
 *  This code combines the form entry fields using VQL operators. If this is changed
 *  to use a different query parsing syntax then the Search module will need to be modified
 *  as well to change the setSourceParser() argument (currently set to "Simple").
 *
 * Depends upon:
 *      forms.js
 */

// Change this to true if zone queries are desired for title,
// author, summary searches, ie: name <IN> Title
var g_blnZoneQuery = false;

// Helper function to trim whitespace
String.prototype.trim = function()
{
  var strThis = this;
  strThis = strThis.replace(/^\s*(.*)/, "$1");
  strThis = strThis.replace(/(.*?)\s*$/, "$1");
  return strThis;
}




/*
 * =====================================================================
 *                 F O R M   S U B M I T   &   C L E A R
 * =====================================================================
 */
function generateQuery()
{
    var strResult = "";

    // Generate the adv form  fields VQL query
    var blnFirstTime = true;
    var strNewQueryArr = new Array();
    strNewQueryArr[strNewQueryArr.length] = getAll();
    strNewQueryArr[strNewQueryArr.length] = getExact();
    strNewQueryArr[strNewQueryArr.length] = getAtLeastOne();
    strNewQueryArr[strNewQueryArr.length] = getNone();
    strNewQueryArr[strNewQueryArr.length] = getMimeType();
    strNewQueryArr[strNewQueryArr.length] = getFieldOrZoneQuery("Title");
    strNewQueryArr[strNewQueryArr.length] = getFieldOrZoneQuery("Author");
    strNewQueryArr[strNewQueryArr.length] = getFieldOrZoneQuery("VDKSummary");
    strNewQueryArr[strNewQueryArr.length] = getSubject();
    strNewQueryArr[strNewQueryArr.length] = getRubrik();
    strNewQueryArr[strNewQueryArr.length] = getSubjYear();
    strNewQueryArr[strNewQueryArr.length] = getSubjIssue();
    strNewQueryArr[strNewQueryArr.length] = getSubjPage();
    //strNewQueryArr[strNewQueryArr.length] = getDate("Start");
    //strNewQueryArr[strNewQueryArr.length] = getDate("End");

    for (var i = 0; i < strNewQueryArr.length; i++)
    {
        if (strNewQueryArr[i] != "")
        {
            if (!blnFirstTime)
            {
                strResult = strResult + " <AND> ";
            }
            else
            {
                blnFirstTime = false;
            }
            strResult = strResult + "(" + strNewQueryArr[i] + ")";
        }
    }

    document.getElementById("AdvQueryText").value = strResult;
    document.getElementById("AdvancedQuery").submit();
}







function clearAdvancedFormFields()
{
    var strFormFieldArr = new Array("All", "Exact", "AtLeastOne", "None", "Title", "Author", "VDKSummary", "SubjPage");
    
    setSelect(document.getElementById("Subject"), "all");
    setSelect(document.getElementById("Rubrik"), "all");
    setSelect(document.getElementById("SubjYear"), "all");
    setSelect(document.getElementById("SubjIssue"), "all");
    
    

    for (var i = 0; i < strFormFieldArr.length; i++)
    {
        var elmField = document.getElementById(strFormFieldArr[i]);
        if (elmField)
        {
            elmField.value = "";
        }
    }

}



/*
 * =====================================================================
 *                 I N P U T   F I E L D S  ->  V Q L
 * =====================================================================
 */

function getAll()
{
    var strResult = "";
    strResult = document.getElementById("All").value;
    strResult = strResult.trim();
    if ( strResult != "" )
    {
        strResult = strResult.replace(/\s+/g, " <AND> ");
    }
    return strResult;
}

function getExact()
{
    var strResult = "";
    strResult = document.getElementById("Exact").value;
    if ( strResult != "" )
    {
        strResult = '"' + strResult + '"';
    }
    return strResult;
}

function getAtLeastOne()
{
    var strResult = "";
    strResult = document.getElementById("AtLeastOne").value;
    strResult = strResult.trim();
    if ( strResult != "" )
    {
        strResult = strResult.replace(/\s+/g, " <OR> ");
    }
    return strResult;
}

function getNone()
{
    var strResult = "";
    strResult = document.getElementById("None").value;
    strResult = strResult.trim();
    if ( strResult != "" )
    {
        strResult = " " + strResult;
        strResult = strResult.replace(/\s+/g, " <NOT> ");
    }
    return strResult;
}


function getFieldOrZoneQuery(strFieldOrZoneName)
{
    var strResult = "";

    strResult = document.getElementById(strFieldOrZoneName).value;
    strResult = strResult.trim();
    if ( strResult != "" )
    {
        if (g_blnZoneQuery)
        {
            strResult += " <IN> " + strFieldOrZoneName;
        }
        else
        {
            strResult =  strFieldOrZoneName + " <CONTAINS> " + strResult;
        }
    }
    return strResult;
}



//function getDate(strStartOrEnd)
//{
//    var strResult = "";
//    strResult = document.getElementById(strStartOrEnd + "Date").value;
//    strResult = strResult.trim();
//    if ( strResult != "" )
//    {
//        if ( strStartOrEnd == "Start" )
//        {
//            strResult = "Date >= " + strResult;
//        }
//        else if ( strStartOrEnd == "End" )
//        {
//            strResult = "Date <= " + strResult;
//        }
//        else {
//            strResult = "the argument to the javascript function getDate must be a string that equals either 'Start' or 'End'";
//        }
//    }
//    return strResult;
//}




function getSubject()
{
    var strResult = "";
    var elmSubject = document.getElementById("Subject");
    
    if (elmSubject)
    {
        var strSubject = elmSubject.value;
        switch (strSubject) {
            case "all":
                  break;
            default:
                strResult = "Subject <CONTAINS> " + strSubject;
        }
    }
    return strResult;
}


function getRubrik()
{
    var strResult = "";
    var elmSubject = document.getElementById("Rubrik");
    
    if (elmSubject)
    {
        var strSubject = elmSubject.value;
        switch (strSubject) {
            case "all":
                  break;
            default:
                strResult = "Subject <CONTAINS> " + strSubject;
        }
    }
    return strResult;
}





/* Suchfeld SubjYear - Teilsuche in PDF-Feld Subject (K2App)*/
function getSubjYear()
{
    var strResult = "";
    var elmSubjYear = document.getElementById("SubjYear");
    
    if (elmSubjYear)
    {
        var strSubjYear = elmSubjYear.value;
        switch (strSubjYear) {
            case "all":
                  break;
            default:
                strResult = "Subject <CONTAINS> " + "Y" + strSubjYear;
        }
    }
    return strResult;
}


/* Suchfeld SubjIssue - Teilsuche in PDF-Feld Subject (K2App)*/
function getSubjIssue()
{
    var strResult = "";
    var elmSubjIssue = document.getElementById("SubjIssue");
    
    if (elmSubjIssue)
    {
        var strSubjIssue = elmSubjIssue.value;
        switch (strSubjIssue) {
            case "all":
                  break;
            default:
                strResult = "Subject <CONTAINS> " + "I" + strSubjIssue;
        }
    }
    return strResult;
}



/* Suchfeld SubjPage - Teilsuche in PDF-Feld Subject (K2App)*/
function getSubjPage()
{
    var strResult = "";
    strResult = document.getElementById("SubjPage").value;
    strResult = strResult.trim();
    if ( strResult != "" )
    {
        strResult = "Subject <CONTAINS> " + "P" + strResult;
    }
    return strResult;

}


function getMimeType()
{
    var strResult = "";
    var elmMimeType = document.getElementById("MimeType");
    if (elmMimeType)
    {
        var strMimeType = elmMimeType.value;
        switch (strMimeType) {
            case "application/pdf":
            case "text/html":
            case "text/xml":
                strResult = "MIME-Type <MATCHES> " + strMimeType;
                break;
            case "ms-excel":
            case "ms-powerpoint":
            case "msword":
            case "plain":
                strResult = "MIME-Type <CONTAINS> " + strMimeType;
                break;
            case "wordperfect":
                strResult = "MIME-Type <SUBSTRING> " + strMimeType;
                break;
            // For ALL and unknown, let it default to empty string.
            case "all":
            default:
                break;
        }
    }
    return strResult;
}


/*
 * =====================================================================
 *                 V Q L   O P E R A T O R   H E L P E R S
 * =====================================================================
 */
function vqlToggleCheckBoxesOnLoad()
{
    var elmQuery = document.getElementById("QueryText");
    if (elmQuery)
    {
        var strQuery = new String(elmQuery.value);

        var elmCaseSens = document.getElementById("vqlCaseSens");
        if (elmCaseSens && strQuery.indexOf("<CASE>") != -1)
        {
            elmCaseSens.checked = true;
        }

        var elmSoundex  = document.getElementById("vqlSoundex");
        if (elmSoundex && strQuery.indexOf("<SOUNDEX>") != -1)
        {
            elmSoundex.checked = true;
        }

        var elmSynonyms = document.getElementById("vqlSynonyms");
        if (elmSynonyms && strQuery.indexOf("<THESAURUS>") != -1)
        {
            elmSynonyms.checked = true;
        }

        var elmTypo     = document.getElementById("vqlTypo");
        if (elmTypo && strQuery.indexOf("<TYPO/1>") != -1)
        {
            elmTypo.checked = true;
        }
    }
}

function vqlOperatorHelper(strVQLOperator)
{
    var elmQuery = document.getElementById("QueryText");
    if (elmQuery)
    {
        elmQuery.value = elmQuery.value + " " + strVQLOperator + " ";
        elmQuery.focus();
        var elmOperator = document.getElementById("vqlOperator");
        if (elmOperator)
        {
            elmOperator[0].selected = true;
        }
    }
}

function vqlCaseSensitivityCheck(strValue)
{
    var elmQuery    = document.getElementById("QueryText");
    var elmCaseSens = document.getElementById("vqlCaseSens");
    var elmSoundex  = document.getElementById("vqlSoundex");
    if (elmQuery && elmCaseSens)
    {
        var strQuery = new String(elmQuery.value);
        var strQTemp, objRegExp;
        if(elmCaseSens.checked == true)
        {
            // If case sens checked then uncheck/remove soundex and
            // add case sens operator (passed in as argument)
            objRegExp = new RegExp("<SOUNDEX>");
            strQTemp = strQuery.replace(objRegExp, "");
            elmQuery.value = strValue + strQTemp;
            if (elmSoundex)
            {
                elmSoundex.checked = false;
            }
        }
        else
        {
            // if case sens unchecked remove it from query string
            objRegExp = new RegExp(strValue);
            strQTemp = strQuery.replace(objRegExp, "");
            elmQuery.value = strQTemp;
        }
        elmQuery.focus();
    }
}

function vqlSoundexCheck(strValue)
{
    var elmQuery    = document.getElementById("QueryText");
    var elmCaseSens = document.getElementById("vqlCaseSens");
    var elmSoundex  = document.getElementById("vqlSoundex");

    if (elmQuery && elmCaseSens)
    {
        var strQuery = new String(elmQuery.value);
        var strQTemp, objRegExp;
        
        if(elmSoundex.checked == true)
        {
            // If soundex checked then uncheck/remove case sens and
            // add soundex operator (passed in as argument)
            
            objRegExp = new RegExp("<CASE>");
            strQTemp = strQuery.replace(objRegExp, "");
            elmQuery.value = strValue + strQTemp;
            if (elmCaseSens)
            {
                elmCaseSens.checked = false;
            }
        }
        else
        {
            // if soundex unchecked remove it from query string
            objRegExp = new RegExp(strValue);
            strQTemp = strQuery.replace(objRegExp, "");
            elmQuery.value = strQTemp;
        }
        elmQuery.focus();
    }
}



function vqlThesaurusCheck(strValue)
{
    var elmQuery    = document.getElementById("QueryText");
    var elmSynonyms = document.getElementById("vqlSynonyms");

    if (elmQuery && elmSynonyms)
    {
        var strQuery = new String(elmQuery.value);
        if(elmSynonyms.checked == true)
        {
            // If synonyms checked then add the operator (passed in as argument)
            // to the beginning of the query.
            elmQuery.value = strValue + elmQuery.value;
        }
        else if(elmSynonyms.checked == false)
        {
            // if synonyms unchecked remove it from query string
            var objRegExp = new RegExp(strValue);
            var strQTemp = strQuery.replace(objRegExp, "");
            elmQuery.value = strQTemp;
        }
        elmQuery.focus();
    }
}

function vqlTypoCheck(strValue)
{
    var elmQuery = document.getElementById("QueryText");
    var elmTypo  = document.getElementById("vqlTypo");

    if (elmQuery && elmTypo)
    {
        var strQuery = new String(elmQuery.value);
        if(elmTypo.checked == true)
        {
            // If typo checked then add the operator (passed in as argument)
            // to the beginning of the query.
            elmQuery.value = strValue + elmQuery.value;
        }
        else if(elmTypo.checked == false)
        {
            // if typo unchecked remove it from query string
            var objRegExp = new RegExp(strValue);
            var strQTemp = strQuery.replace(objRegExp, "");
            elmQuery.value = strQTemp;
        }
        elmQuery.focus();
    }
}
