// Helper function to trim whitespace
String.prototype.trim = function()
{
  var strThis = this;
  strThis = strThis.replace(/^\s*(.*)/, "$1");
  strThis = strThis.replace(/(.*?)\s*$/, "$1");
  return strThis;
}

//translates the query to VQL
function generateQuery()
{
    var strResult = "";       
    if(document.getElementById("excludeWords").value == "")
    {        
        document.getElementById("excludeWords").value= " ";
    }
    if(document.getElementById("includeWords").value == "")
    {        
        document.getElementById("includeWords").value= " ";
    }
    // Generate the adv form  fields VQL query    
    var blnFirstTime = true;
    var strNewQueryArr = new Array();
    var CurrentDocumentSearchScope = getDocumentSearchScope(strNewQueryArr);    
    if(CurrentDocumentSearchScope != "")
    {        
        strNewQueryArr[strNewQueryArr.length] = CurrentDocumentSearchScope;
    }
    else
    {
        //strNewQueryArr[strNewQueryArr.length] = getIncludeWords(strNewQueryArr);    
        strNewQueryArr[strNewQueryArr.length] = "(" + getIncludeWords(strNewQueryArr) + "<IN>div<WHEN>id=bodyArea)";
    }
       
    // Todo: Check
	strNewQueryArr[strNewQueryArr.length] = getExcludeWords(strNewQueryArr);
    strNewQueryArr[strNewQueryArr.length] = getIncludeMimeType(strNewQueryArr);
    strNewQueryArr[strNewQueryArr.length] = getExcludeMimeType(strNewQueryArr);
	for (var i = 0; i < strNewQueryArr.length; i++)
    {
        if (strNewQueryArr[i] != "")
        {
            strResult = strResult + strNewQueryArr[i];
        }
    }
    document.getElementById("selectedCollectionId").value = document.getElementById("selectedCollection").options[document.getElementById("selectedCollection").selectedIndex].id;    
    document.getElementById("resultingQueryText").value = strResult;
    document.getElementById("AdvancedQueryForm").submit();
}

/*
 * =====================================================================
 *                 I N P U T   F I E L D S  ->  V Q L
 * =====================================================================
 */
function getIncludeQueryString()
{    
    var strQuery = "";
    strQuery = document.getElementById("includeWords").value;
    if(strQuery != "")
    {
        var strQueryType = document.getElementById("documentSearchType").value;        
        strQuery = strQuery.trim();
        if(strQueryType == "" || strQueryType == "all")
        {
			//comma delimit an AND query
           strQuery = "(<THESAURUS>" + strQuery + ")";
           strQuery = "(" + strQuery + "<IN>div<WHEN>id=bodyArea)";
           
        }
        if(strQueryType == "any")
        {
			// '<OR>' delimit an OR query
            strQuery = "(<THESAURUS> " + strQuery.replace(/\s+/g, " <OR> <THESAURUS> ") + ")";
        }
        if(strQueryType == "phrase")
        {
			// put quotes around a phrase query
            strQuery = "<THESAURUS> \"" + strQuery + "\"";            
        }
    }
    return strQuery;
}

/*
 * =====================================================================
 *                 I N P U T   F I E L D S  ->  V Q L
 * =====================================================================
 */
function getFieldIncludeQueryString(IgnoreOr)
{    
    var strQuery = "";
    strQuery = document.getElementById("includeWords").value;
    if(strQuery != "")
    {
        var strQueryType = document.getElementById("documentSearchType").value;        
        strQuery = strQuery.trim();
        if(strQueryType == "" || strQueryType == "all" || IgnoreOr == true)
        {
            //return as is...for field queries we don't delimit AND searches with a comma.
        }
        else
        {
			if(strQueryType == "any")
			{
				// '<OR>' delimit an OR query
				strQuery = strQuery.replace(/\s+/g, " <OR> ");
			}
			else
			{
				if(strQueryType == "phrase")
				{
					// put quotes around a phrase query
					strQuery = "\"" + strQuery + "\"";            
				}			
			}
		}
    }
    return strQuery;
}

function getIncludeWords(strCurrentQuery)
{
    var strResult = "";
    var strQuery = getIncludeQueryString();
    if (strQuery != "")
    {
        if(strCurrentQuery != "")
        {
            strResult = " <AND> ( ";
        }
        strResult += strQuery;    
        if(strCurrentQuery != "")
        {
            strResult += " ) ";
        }        
    }   
    return strResult;
}

function getExcludeWords(strCurrentQuery)
{
    var strQuery = "";
    var strResult = "";
    strQuery = document.getElementById("excludeWords").value;
    strQuery = strQuery.trim();
    if ( strQuery != "" )
    {
        if(strCurrentQuery != "")
        {
            strResult = " <AND> ( ";
        }
        strQuery = " " + strQuery;        
        strQuery = strQuery.replace(/\s+/g, " <NOT> ");
        strResult += strQuery
        if(strCurrentQuery != "")
        {
            strResult += " )";
        }        
    }    
    return strResult;
}

function getIncludeMimeType(strCurrentQuery)
{
    var strResult = "";    
    var elmMimeType = document.getElementById("includeMimeType");
    if (elmMimeType)
    {
        var strMimeType = elmMimeType.value;
        // For ALL and unknown, let it default to empty string.
        if(strMimeType != "all" && strMimeType != "")
        {            
            var strResultingMimeTypeQuerySegment = getMimeTypeQuerySegment(strMimeType);
            if(strResultingMimeTypeQuerySegment != "")
            {
                if(strCurrentQuery != "")
                {
                    strResult = " <AND> ( ";
                }
                strResult += strResultingMimeTypeQuerySegment;
                if(strCurrentQuery != "")
                {
                    strResult += " )";
                }
            }
        }
    }
    return strResult;
}

function getExcludeMimeType(strCurrentQuery)
{
    var strResult = "";
    var elmMimeType = document.getElementById("excludeMimeType");
    var strMimeType = elmMimeType.value;    
    if (strMimeType != "all" && strMimeType != "")
    {
        var strResultingMimeTypeQuerySegment = getMimeTypeQuerySegment(strMimeType);
        if(strResultingMimeTypeQuerySegment != "")
        {
            if(strCurrentQuery != "")
            {
                strResult = " <NOT> ( ";
            }
            strResult += strResultingMimeTypeQuerySegment;
            if(strCurrentQuery != "")
            {
                strResult += " )";
            }
        }
    }
    return strResult;
}

function getMimeTypeQuerySegment(strMimeType)
{    
    var strResult = "";
    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;
        default:
            break;
    }
    
    return strResult;
}

function getDocumentSearchScope(strCurrentQuery)
{    	
    var strResult = "";
    var elmDocumentSearchScope = document.getElementById("documentSearchScope");
    var strDocumentSearchScope = elmDocumentSearchScope.value;    
    if(strDocumentSearchScope != "" && strDocumentSearchScope != "all")
    {
        if(strDocumentSearchScope == "img")
        {
            if(strCurrentQuery != "")
            {
                strResult = " AND ( ";
            }
            strResult += "*<IN> " + strDocumentSearchScope + " <WHEN> (ALT <CONTAINS> " + getFieldIncludeQueryString(true) + ")";
            if(strCurrentQuery != "")
            {
                strResult += " ) ";
            }
        }
        else
        {
            if(strCurrentQuery != "")
            {
                strResult = " AND ( ";
            }
            strResult += strDocumentSearchScope + " <CONTAINS> " + getFieldIncludeQueryString(false);
            if(strCurrentQuery != "")
            {
                strResult += " ) ";
            }
        }
    }    
    return strResult;    
}
