//
// QUOSA Information Manager
// Copyright © 2000-2008 QUOSA, Inc.
// All Rights Reserved.
//
var xDataViewInfo = {
    xFrameId  : 'xDataView'
};

var xSortMode_ASC = 0;
var xSortMode_DSC = 1;

var xSortCell_Flagged   = 1;
var xSortCell_Number    = 2;
var xSortCell_Type      = 3;
var xSortCell_Authors   = 4;
var xSortCell_Title     = 5;
var xSortCell_Source    = 6;

var xFlaggedImg   = "images/x_seldoc1.gif";
var xUnFlaggedImg = "images/x_seldoc2.gif";


var xDataViewElementTemplate = '' 
    + '<table cellpadding="0" cellpadding="0" border="0" id="xRs%ID%Tc01" class="%TEXT_CLASS%"><tr>'
    + '<td width="32px" align="center" valign="top" nowrap="nowrap"><img src="%IMAGE%" width="16" height="16" id="xRs%ID%Tc00" style="cursor: pointer;"/></td>'
    + '<td width="50px" align="center" valign="top" nowrap="nowrap" id="xRs%ID%Tc02" class="%TEXT_CLASS%">%INDEX%</td>'
    + '<td width="50px" align="center" valign="top" nowrap="nowrap"><img src="images/%ICON%.gif"/></td>'
    + '<td width="152px" align="left" valign="top" title="%AUTHORS%" id="xRs%ID%Tc03" class="%TEXT_CLASS%">%SHORT_AUTHORS%</td>'
    + '<td width="403px" align="left" valign="top" id="xRs%ID%Tc04" class="%TEXT_CLASS%">%TITLE%</td>'
    + '<td align="left" valign="top" id="xRs%ID%Tc05" class="%TEXT_CLASS%">%SOURCE%</td>'
    + '</tr></table>';
    
function xDataView$() {
    return $(xDataViewInfo.xFrameId);
}
    
function xDataView() {
    var x = this; x.xObjId = xGetElementById(xDataViewInfo.xFrameId); $(x.xObjId.id, x);
    x.xContent = xGetElementById('xDataViewContent');
    x.xCurrentElement = null;
    x.xSelectedElements = new Array();
    x.xCatchedElement = null;
    x.xPressed = false;
    x.xMouseX = 0;
    x.xMouseY = 0;
    x.xSortCell = 0;
    x.xSortMode = 0;
    x.nNumResults = 0;
   
    x.xDockHide = xCreateButton('xHideDataView', 'x_dock');
    x.xDockHide.xOnClick = function () {
        var x = $(xDataViewInfo.xFrameId);
        $(xDataFrameInfo.xFrameId).xSetUiMode(xDataFrameUiMode_xDataFrame02);
    }
    
    x.xShiftFrameSize = function (xShiftX, xShiftY) {       
        var x = $(xDataViewInfo.xFrameId); xShiftObjSize(x.xObjId, xShiftX, xShiftY);
        xShiftObjSize(x.xContent, xShiftX, xShiftY);
    };
    
    x.xSetFrameSize = function (xSizeW, xSizeH) {
        var x = $(xDataViewInfo.xFrameId);
        var xNewSize = xSubObjMrs(x.xObjId, xSizeW, xSizeH);
        xSetObjSize(x.xObjId, xNewSize[0], xNewSize[1]);
        
        var xClientS = xGetObjClientSize(x.xObjId); 
        var xClientW = xClientS[0], xClientH = xClientS[1];
        xClientH -= xGetObjSize('xDataViewHeader')[1];
        xSetObjSize(x.xContent, xClientW-1, xClientH-1);        
    };
    
    x.xGetClassName = function (xIndex, xSelected, xCompleted) {
        var xClassName = 'xDvElementEven'; xIndex = parseInt(xIndex);
        if ((xIndex % 2) != 0) {
            if (xSelected) {
                xClassName = (xCompleted) ? 'xDvElementSelectedEven' : 'xDvElementSelectedBlockedEven';
            } else {
                xClassName = (xCompleted) ? 'xDvElementEven' : 'xDvElementBlockedEven';
            }           
        } else {
            if (xSelected) {
                xClassName = (xCompleted) ? 'xDvElementSelectedOdds' : 'xDvElementSelectedBlockedOdds';
            } else {
                xClassName = (xCompleted) ? 'xDvElementOdds' : 'xDvElementBlockedOdds';
            }                       
        }
        return xClassName;
    };
    
    x.xGetTextClassName = function (xIndex, xSelected, xCompleted, xMatched) {
        var xClassName = 'xDvTextEven'; var a = xIndex; xIndex = parseInt(xIndex);
        if (typeof(xMatched) != 'boolean') {
            xMatched = (parseInt(xMatched) == 0) ? false : true;
        }
        if ((xIndex % 2) != 0) {
            if (xSelected) {
                xClassName = (xCompleted) ? 'xDvTextSelectedEven' : 'xDvTextSelectedBlockedEven';
                if (xMatched) xClassName = 'xDvTextSelectedMatchedEven';
            } else {
                xClassName = (xCompleted) ? 'xDvTextEven' : 'xDvTextBlockedEven';
                if (xMatched) xClassName = 'xDvTextMatchedEven';
            }           
        } else {
            if (xSelected) {
                xClassName = (xCompleted) ? 'xDvTextSelectedOdds' : 'xDvTextSelectedBlockedOdds';
                if (xMatched) xClassName = 'xDvTextSelectedMatchedOdds';
            } else {
                xClassName = (xCompleted) ? 'xDvTextOdds' : 'xDvTextBlockedOdds';
                if (xMatched) xClassName = 'xDvTextMatchedOdds';
            }                       
        }
        return xClassName;
    };  
    
    x.xGetTemplate = function (xResult, xIsFinished) {
        var xTemplate = xDataViewElementTemplate;   
        var xDocNumber = xResult.xGetNumber();
       
        xTemplate = xTemplate.replace(/%IMAGE%/g, x.xGetFlagImage(xResult.xIsFlagged()));
        xTemplate = xTemplate.replace(/%TITLE%/g, xResult.xGetTitle());
        xTemplate = xTemplate.replace(/%SOURCE%/g, xResult.xGetSource());       
        xTemplate = xTemplate.replace(/%ID%/g, xResult.xGetId());       
        xTemplate = xTemplate.replace(/%INDEX%/g, xDocNumber);
        
        var xAuthors = xResult.xGetAuthorsString();
        xTemplate = xTemplate.replace(/%AUTHORS%/g, xAuthors);

        var iIndex = 0;
        for (xStep = 0; xStep < 3; ++xStep) {
            if ((iIndex = xAuthors.indexOf(',', iIndex+1)) < 0) break;
        }
        if (iIndex > 0) {
            xAuthors = xAuthors.substr(0, iIndex);
            xAuthors+= '...';
        }
        
        xTemplate = xTemplate.replace(/%SHORT_AUTHORS%/g, xAuthors);
        
        var xIsCompleted = xResult.xIsCompleted();      
        var xMatched = xResult.xHasDuplicates();
        xTemplate = xTemplate.replace(/%TEXT_CLASS%/g, x.xGetTextClassName(xDocNumber, false, xIsCompleted, xMatched));
        
        var xIcon = 'x_doc_abstract_01';
        if (xIsCompleted) {
            if (xResult.xGetType() == 0) {
                xIcon = 'x_doc_abstract_01';
            } else {
                xIcon = (xResult.xIsPDF()) ? 'x_doc_pdf_01' : 'x_doc_html_01';
            }
        } else {
            if (xIsFinished) {
                xIcon = 'x_doc_bad_abstract_01';
                if (xResult.xGetType() != 0) {
                    xIcon = (xResult.xIsPDF()) ? 'x_doc_bad_pdf_01' : 'x_doc_bad_html_01';
                }
            } else {
                xIcon = 'x_doc_busy';
            }
        }
        xTemplate = xTemplate.replace(/%ICON%/g, xIcon);
        return xTemplate;
    };
    
    /*
    x.xAddResult = function (xResult, xIsFinished) {
        var x = $(xDataViewInfo.xFrameId); 
        var xIndex = parseInt(x.xContent.childNodes.length);
        var xTemplate = x.xGetTemplate(xResult, xIndex, xIsFinished);
        var xElement = document.createElement('div');
        var xId = xResult.xGetId(), xCompleted = xResult.xIsCompleted();
        var xMatched = xResult.xHasDuplicates();
        xElement.setAttribute('rsid', xId);
        xElement.setAttribute('id', 'xRs'+xId);
        xElement.setAttribute('completed', xCompleted ? '1' : '0');
        xElement.setAttribute('index', xIndex);
        xElement.setAttribute('selected', 0);
        xElement.setAttribute('matched', xMatched ? '1' : '0');
        xElement.innerHTML = xTemplate;     

        var xElemImgs = xElement.getElementsByTagName("IMG");
        if (xElemImgs && xElemImgs.length > 0) {
            xElemImgs[0].attachEvent('onclick', x._xElementIMG00_OnClick);
            //xElemImgs[1].attachEvent('onclick', x._xElementIMG01_OnClick);
        }

        xElement.attachEvent('onclick', x._xElementOnClick);
        xElement.attachEvent('ondblclick', x._xElementOnDblClick);

        xElement.attachEvent('oncontextmenu', x._xElementOnContextMenu);

        xElement.attachEvent('onselectstart', x._xElementOnSelectStart);

        xElement.attachEvent('ondragstart', x._xElementOnDragStart);

        xElement.attachEvent('onmousedown', x._xElementOnMouseDown);
        xElement.attachEvent('onmouseout', x._xElementOnMouseOut);


        x.xContent.appendChild(xElement);       
        xSetClassName(xElement, x.xGetClassName(xIndex, false, xResult.xIsCompleted()));
        xElement = null;
    };*/
    
    /*
    x._xElementIMG01_OnClick = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        x._xElementOnMouseDown(xEvent);
    };
    */
    
    x._xElementIMG00_OnClick = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        x.xFlagResult(xElement);
        x.xOnFlagSwitch(xEvent);
    };

    x.xFlagResult = function(xElement)
    {
        var xProvider = xGetElementById('xProvider');
        if (xProvider && !xProvider.xSearchIsRunning())
        {
            xProvider.xFlagResults(xElement.rsid);
            if (! xElement.isFlaggged
                || xElement.isFlaggged != "1")
            {
                xElement.isFlaggged = "1";
            }
            else
            {
                xElement.isFlaggged = "0";
            }
        }
    };

    x.xOnFlagSwitch = function (xEvent)
    {
        var xImg = xEvent.srcElement;
        xImg.src = x.xGetFlagImage(x.xImgIsFlagged(xImg));
    };

    x.xGetFlagImage = function(isItFlagged) {
        if (isItFlagged)
        {
            return xFlaggedImg;
        }
        else
        {
            return xUnFlaggedImg;
        }
    };

    x.xImgIsFlagged = function(img)
    {
        if ( img.src.indexOf(xFlaggedImg) == -1 )
        {
            return true;
        }
        return false;
    };

    x._xElementOnDragEnd = function () {
        /*
        var x = $(xDataViewInfo.xFrameId);
        x.xPressed = false;
        if (x.xCatchedElement)
        {
            xMouseEvents.xUnSubscribe(xMouseEvent_OnMove, xDataViewInfo.xFrameId);
            x.xCatchedElement = null;
        }
        */
        var xEvent = xGetEvent();
        xEvent.returnValue = false;
        xEvent.cancelBubble = true;
        return false;
    }

    x._xElementOnDragStart = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        var xSelectedElements = new Array();
        var xNumElements = x.xContent.childNodes.length;
        var xUnselectedElements = 0;

        for (iIndex = 0; iIndex < xNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xElement.selected == '1' && xElement.completed == '1') 
            {
                xSelectedElements.push(xElement.rsid);
            }
            else
            {
                xUnselectedElements++;
            }
        }
        xEvent.dataTransfer.setData("text", 
            DRAGDROP_DATA_TEXT_PREFIX + xSelectedElements.toString());
    };

    x._xElementOnSelectStart = function () {
        xGetEvent().returnValue = false;
        return false;
    };
    
    x._xElementOnContextMenu = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        x.xOnContextMenu(xEvent, x, xElement);
    };
    
    x._xElementOnMouseOut = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        xElement.dragDrop();
    };
    
    x._xElementOnMouseDown = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);

        //x.xCatchedElement = xElement;
        //x.xMouseX = xMouseEvents.xCursorX;
        //x.xMouseY = xMouseEvents.xCursorY;
        //x.xPressed = true;
        //xMouseEvents.xSubscribe(xMouseEvent_OnMove, xDataViewInfo.xFrameId, xDataView$().xOnMouseEx_MouseMove);

        if (xEvent.ctrlKey && xEvent.shiftKey) {
        } else if (xEvent.ctrlKey ) {           
            x.xCurrentElement = xElement;
            x.xSwitchSelection(xElement, true);
        } else if (xEvent.shiftKey) {
            if (x.xCurrentElement == null) x.xCurrentElement = x.xContent.childNodes[0];
            xIndex1 = x.xCurrentElement.index;
            xIndex2 = xElement.index;
            if (xIndex1 > xIndex2) { 
                var xBuffer = xIndex1; xIndex1 = xIndex2; xIndex2 = xBuffer;
            }
            for (var xIndex = xIndex1; xIndex <= xIndex2; xIndex++)
                x.xSelectElement(x.xContent.childNodes[xIndex], true);
        } else {
            if ( !xElement.selected )
            {
                x.xClearSelection(); 
                x.xCurrentElement = xElement;
                x.xSelectElement(xElement, true);
            }
        }
    };

    
    x.xUpdateResult = function (xResult) {
        var x = $(xDataViewInfo.xFrameId); var xElement = null;
        if (!(xElement = xGetElementById('xRs' + xResult.xGetId()))) return ;
        xSetInnerHtml(xElement, x.xGetTemplate(xResult, false));
        xElement.setAttribute('completed', xResult.xIsCompleted() ? '1' : '0');
    };
    
    x.xClearSelection = function () {
        var x = $(xDataViewInfo.xFrameId); 
        var xNumSelected = x.xSelectedElements.length;
        for (xIndex = 0; xIndex < xNumSelected; ++xIndex)
        {
            x.xUnSelectElement(xGetElementById(x.xSelectedElements[xIndex]), false);
        }
        x.xSelectedElements = new Array();
        x.xShowAddDocTool();
        x.xShowEndnoteTool();
        x.xShowDeleteTool();
    };

    x.xSelectElement = function (xElement, xAddSelection) {
        var x = $(xDataViewInfo.xFrameId); 
        if (!xElement) return ;
        if (xElement.selected
            && xElement.selected == '1') return ;
        xElement.selected = 1;
        var xTextClass = x.xGetTextClassName(xElement.index, true, xElement.completed, xElement.matched);
        var xTextObj = 'xRs' + xElement.rsid + 'Tc0';

        xSetClassName(xTextObj + '1', xTextClass);
        xSetClassName(xTextObj + '2', xTextClass);
        xSetClassName(xTextObj + '3', xTextClass);
        xSetClassName(xTextObj + '4', xTextClass);
        xSetClassName(xTextObj + '5', xTextClass);
        //xSetImageSource(xTextObj + '0', 'images/x_seldoc1.gif');
        
        var xClassName = x.xGetClassName(xElement.index, true, xElement.completed);
        xSetClassName(xElement, xClassName);
        if (xAddSelection) x.xSelectedElements.push(xElement.id);
        x.xShowAddDocTool();
        x.xShowEndnoteTool();
        x.xShowDeleteTool();
    };
    
    x.xUnSelectElement = function (xElement, xRemoveSelection) {
        var x = $(xDataViewInfo.xFrameId); if (xElement.selected == '0') return ;
        xElement.selected = 0; 
        var xTextClass = x.xGetTextClassName(xElement.index, false, xElement.completed, xElement.matched);
        var xTextObj = 'xRs' + xElement.rsid + 'Tc0';
        xSetClassName(xTextObj + '1', xTextClass);
        xSetClassName(xTextObj + '2', xTextClass);
        xSetClassName(xTextObj + '3', xTextClass);
        xSetClassName(xTextObj + '4', xTextClass);
        xSetClassName(xTextObj + '5', xTextClass);
        //xSetImageSource(xTextObj + '0', 'images/x_seldoc2.gif');
        var xClassName = x.xGetClassName(xElement.index, false, xElement.completed);
        xSetClassName(xElement, xClassName);
        if (xRemoveSelection) {
        }
        x.xShowAddDocTool();
        x.xShowEndnoteTool();
        x.xShowDeleteTool();
    };
    
    x.xSwitchSelection = function (xElement, xProcessList) {
        var x = $(xDataViewInfo.xFrameId);
        var xIsSelected = (xElement.selected == '1') ? true : false;
        if (xIsSelected) {
            x.xUnSelectElement(xElement, xProcessList);
        } else {
            x.xSelectElement(xElement, xProcessList);
        }
    };
    
    x.xGetRootElement = function (xElement) {
        while (xElement != null && !xIsDefined(xElement.rsid))
            xElement = xElement.parentElement;
        return xElement;
    };
    
    x._xElementOnClick = function() {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        x.xOnElementClick(xEvent, x, xElement);
    };  
    
    x.xOnElementClick = function (xEvent, xDataView, xElement) {
        var x = xDataView;
        if (xEvent.ctrlKey && xEvent.shiftKey) {
        } else if (xEvent.ctrlKey ) {           
        } else if (xEvent.shiftKey) {
        } else {
            if ( xElement.selected )
            {
                x.xClearSelection(); 
                x.xCurrentElement = xElement;
                x.xSelectElement(xElement, true);
            }
        }
    };
    
    x._xElementOnDblClick = function () {
        var x = $(xDataViewInfo.xFrameId); var xEvent = xGetEvent();
        var xElement = x.xGetRootElement(xEvent.srcElement);
        x.xOnElementDblClick(xEvent, x, xElement);  
    };
    
    x.xOnElementDblClick = function (xEvent, xDataView, xElement) {
        var x = xDataView; if (!xElement) return ;
        //if (xElement.completed == '0') return ;
        x.xClearSelection(); x.xCurrentElement = xElement;
        x.xSelectElement(xElement, true);       
        var xProvider = xGetElementById('xProvider');
        if (xProvider) {
            var xDataFrame = $(xDataFrameInfo.xFrameId);
            if (xDataFrame.xUiMode == xDataFrameUiMode_xDataFrame02 ||
                xDataFrame.xUiMode == xDataFrameUiMode_xDataFrame01)
                xDataFrame.xSetUiMode(xDataFrameUiMode_xDataFrame12);           
            xProvider.xOpenResult(xElement.rsid);
        }
    };
    
    x.xReloadResults = function ()
    {
        var x = $(xDataViewInfo.xFrameId);
        x.xSetSortMarker(x.xSortCell, x.xSortMode);
        x.xShowAddDocTool();
        x.xShowEndnoteTool();
        x.xShowDeleteTool();
        var xOrganizer = xOrTreeView.qxOrganizer;
        xOrganizer.xRefreshActiveNode();
    };
    
    x.xOnSearchStart = function (xResultSet) {
        var x = $(xDataViewInfo.xFrameId);
        x.xFillResults(xResultSet, false);
        x.xShowAddDocTool();
        x.xShowEndnoteTool();
        x.xShowDeleteTool();
    };
    
    x.xOnResultChanged = function (xResult, xResultSet) {
        var x = $(xDataViewInfo.xFrameId);
        var xTreeObj = Env$().xGetOrganizerTree();
        if (xTreeObj != null && xIsObject(xTreeObj))
        {
            var xActiveSet = xTreeObj.xGetActiveResultsSet();
            if (xActiveSet != null && xIsObject(xActiveSet) 
                && xActiveSet.xGetId() == xResultSet.xGetId())
            {
                if (xGetElementById('xRs'+xResult.xGetId())) {
                    x.xUpdateResult(xResult);
                } else {
                    x.xAddResult(xResult);
                }
            }
        }
    };
    
    x.xOnSearchFinish = function (xResultSet) {
        var x = $(xDataViewInfo.xFrameId);
        var xTreeObj = Env$().xGetOrganizerTree();
        if (xTreeObj != null && xIsObject(xTreeObj))
        {
            var xActiveSet = xTreeObj.xGetActiveResultsSet();
            if (xActiveSet != null && xIsObject(xActiveSet))
            {
                x.xFillResults(xActiveSet, true);
                x.xShowAddDocTool();
                x.xShowEndnoteTool();
                x.xShowDeleteTool();
                var xOrganizer = xOrTreeView.qxOrganizer;
                xOrganizer.xRefreshActiveNode();
            }
        }
    };  

    x.xOnRefreshResultsSet = function (xResultSet) {
        var x = $(xDataViewInfo.xFrameId);
        var xTreeObj = Env$().xGetOrganizerTree();
        if (xTreeObj != null && xIsObject(xTreeObj))
        {
            var xActiveSet = xTreeObj.xGetActiveResultsSet();
            if (xActiveSet != null && xIsObject(xActiveSet)
                && xActiveSet.xGetId() == xResultSet.xGetId())
            {
                //x.xSetSortMarker(x.xSortCell, x.xSortMode);
                x.xFillResults(xActiveSet, true);
                x.xShowAddDocTool();
                x.xShowEndnoteTool();
                x.xShowDeleteTool();
            }
        }
    };  
    
    x.xOnMouseEx_MouseMove = function () {
        var x = $(xDataViewInfo.xFrameId);      
        if (x.xPressed) {
            var diff_x = Math.abs(x.xMouseX - xMouseEvents.xCursorX);
            var diff_y = Math.abs(x.xMouseY - xMouseEvents.xCursorY);
            if (diff_x > 50 || diff_y > 50) {
                x.xSelectElement(x.xCatchedElement, true);
                /*if (xGetElementById('xProvider').xSearchIsRunning()) {
                    return ;
                }*/ 
                var xProvider = xGetElementById('xProvider');
                if (! xProvider.xSearchIsRunning())
                {
                    if (x.xCatchedElement)
                    {
                        x.xCatchedElement.dragDrop();
                    }
                }
            }           
        }
    };
    
    x.xAddDocument = function () {
        var xProvider = xGetElementById('xProvider');
        if (xProvider && !xProvider.xSearchIsRunning())
        {
            xProvider.xAddDocument();
        }
    }

    x.xExportToEndnote = function () {
        var xSelectedElements = new Array();
        var xNumElements = x.xContent.childNodes.length;
        var i = 0;
        for (iIndex = 0; iIndex < xNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xElement.selected == '1' && xElement.completed == '1') {
                xSelectedElements.push(xElement.rsid);
                ++i;
            }
        }
        if (i > 0)
        {
            var xProvider = xGetElementById('xProvider');
            if (xProvider && !xProvider.xSearchIsRunning())
            {
                xProvider.xExportToEndnote(xSelectedElements.toString());
            }
        } else {
            alert('Please select documents you want to export');
        }
    }
    
    x.xSetSelectedFlagged = function () {
        var x = this;
        x.xClearSelection();
        var nNumElements = x.xContent.childNodes.length;
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xIsObject(xElement) && xElement != null) {
                if (xElement.isFlaggged == '1')
                {
                    x.xSelectElement(xElement, true);
                }
            }
        }
    }
    x.getSelectedElements = function () {
        var xSelectedElements = new Array();
        var nNumElements = x.xContent.childNodes.length;
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xIsObject(xElement) && xElement != null) {
                if (xElement.selected == '1' && xElement.completed == '1')
                {
                    xSelectedElements.push(xElement.rsid);
                }
            }
        }
        return xSelectedElements;
    }

    x.xExportSelectedToXml = function () {
        var xSelectedElements = new Array();
        var nNumElements = x.xContent.childNodes.length;
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xIsObject(xElement) && xElement != null) {
                if (xElement.selected == '1' && xElement.completed == '1')
                {
                    xSelectedElements.push(xElement.rsid);
                }
            }
        }
        if (xSelectedElements.length > 0) {
            var xProvider = xProvider$();
            if (xIsObject(xProvider) && xProvider != null) {
                if (!xProvider.xSearchIsRunning())
                  xProvider.xExportToXML(xSelectedElements.toString());
            }           
        } else {
            alert('Please select documents you want to export');
        }
    };
    
    x.xExportToQUOSA = function () {
        var xSelectedElements = new Array();
        var nNumElements = x.xContent.childNodes.length;
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xIsObject(xElement) && xElement != null) {
                if (xElement.selected == '1' && xElement.completed == '1')
                {
                    xSelectedElements.push(xElement.rsid);
                }
            }
        }
        if (xSelectedElements.length > 0) {
            var xProvider = xProvider$();
            if (xIsObject(xProvider) && xProvider != null) {
                if (!xProvider.xSearchIsRunning())
                  xProvider.xExportToQUOSA(xSelectedElements.toString());
            }           
        } else {
            alert('Please select documents you want to export');
        }
    };
    
    x.xDeleteResults = function () {
        var xSelectedElements = new Array();
        var nNumElements = x.xContent.childNodes.length;
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xIsObject(xElement) && xElement != null) {
                if (xElement.selected == '1')
                {
                    xSelectedElements.push(xElement.rsid);
                }
            }
        }
        if (xSelectedElements.length > 0) {
            var xProvider = xProvider$();
            if (xIsObject(xProvider) && xProvider != null) {
                if (!xProvider.xSearchIsRunning())
                {
                    xProvider.xDeleteResults(xSelectedElements.toString());
                    x.xReloadResults();
                }
            }
        }
    };

    x.xOnContextMenu = function (xEvent, xDataView, xElement) {
        if (! xDataView)  return ;
        if (!xElement) return ;
        var x = xDataView;
        //x._xElementOnMouseDown(xEvent, xDataView, xElement);
        if (xElement.completed == '1') {
            xGetElementById('xProvider').xShowResultContextMenu(
                xMouseEvents.xCursorX, xMouseEvents.xCursorY, xElement.rsid);
        }
        //x.xOnElementClick(xEvent, xDataView, xElement);
    };
    

    x.xRemoveSortMarkers = function () {
        xSetVisMode('RsSortIcon01', false);
        xSetVisMode('RsSortIcon02', false);
        xSetVisMode('RsSortIcon03', false);
        xSetVisMode('RsSortIcon04', false);
        xSetVisMode('RsSortIcon05', false);
    };
    
    x.xSetSortMarker = function (xSortCell, xSortMode) {
        var xObjId = xGetElementById('RsSortIcon0'+xSortCell);
        xSetImageSource(xObjId, 'images/x_sort_' + ((xSortMode == xSortMode_ASC) ? 'down' : 'up') + '.gif');
        xSetVisMode(xObjId, true);
        x.xSortMode = xSortMode;
        x.xSortCell = xSortCell;
        var xProvider = xGetElementById('xProvider');
        var xSortColumn = '#';
        var xSortOrder = 1;
        switch (xSortCell) {
            case xSortCell_Flagged: xSortColumn = 'FG'; break;
            case xSortCell_Number:  xSortColumn = '#';  break;
            case xSortCell_Type:    xSortColumn = 'ST'; break;
            case xSortCell_Authors: xSortColumn = 'AU'; break;
            case xSortCell_Title:   xSortColumn = 'TI'; break;
            case xSortCell_Source:  xSortColumn = 'SO'; break;
        }

        if (!xSortCell)
        {
            xSortOrder = 0;
        }
        else
        {
            xSortOrder = xSortMode? 0 : 1;
        }


        var xIsFinished = !xProvider.xSearchIsRunning();
        if (xIsFinished)
        {
            if ( (xResultSet = xProvider.xGetSortedResults(xSortOrder, xSortColumn)) )
            {
                x.xFillResults(xResultSet, xIsFinished);
            }
        }
    };
    
    x.xSetSortMode = function (xSortMode) {
        var x = $(xDataViewInfo.xFrameId);
    };
    
    x.xOnSortModeClick = function (xCellIndex) {
        var x = $(xDataViewInfo.xFrameId);
        x.xRemoveSortMarkers();
        if (xCellIndex == x.xSortCell) {
            x.xSetSortMarker(xCellIndex, !x.xSortMode);
        } else {
            x.xSetSortMarker(xCellIndex, false);    
        }
    };
    

    x.xShowAddDocTool = function() {
        xShowDisp('xAddDocToolSection01');
        var enable = false;
        var xProvider = xGetElementById('xProvider');
        if (! xProvider.xSearchIsRunning())
        {
            enable = true;
        }
        var xTool = $(xMainToolsInfo.xFrameId).xAddDocTool;
        if (xTool)
        {
            xTool.xOnClick = x.xAddDocument;
            xTool.xEnableControl(enable);
        }
    }

    x.xHideAddDocTool = function() {
        var xTool = $(xMainToolsInfo.xFrameId).xAddDocTool;
        if (xTool)
        {
            xTool.xEnableControl(false);
        }
    }

    x.xShowEndnoteTool = function() {
        xShowDisp('xEndnoteToolSection01');
        xShowDisp('xEndnoteToolSection02');
        var enable = false;
        var xProvider = xGetElementById('xProvider');
        if (! xProvider.xSearchIsRunning())
        {
            var xNumElements = x.xContent.childNodes.length;
            var i = 0;
            for (iIndex = 0; iIndex < xNumElements; ++iIndex) {
                var xElement = x.xContent.childNodes[iIndex];
                if (xElement.selected == '1' && xElement.completed == '1') {
                    ++i;
                }
            }
            if (i > 0)
            {
                enable = true;
            }
        }
        var xTool = $(xMainToolsInfo.xFrameId).xEndnoteTool;
        if (xTool)
        {
            xTool.xOnClick = x.xExportToEndnote;
            xTool.xEnableControl(enable);
        }
    }

    x.xHideEndnoteTool = function() {
        var xTool = $(xMainToolsInfo.xFrameId).xEndnoteTool;
        if (xTool)
        {
            xTool.xEnableControl(false);
        }
    }

    x.xShowDeleteTool = function() {
        xShowDisp('xDeleteToolSection01');
        var enable = false;
        var xProvider = xGetElementById('xProvider');
        if (! xProvider.xSearchIsRunning())
        {
            var xNumElements = x.xContent.childNodes.length;
            var i = 0;
            for (iIndex = 0; iIndex < xNumElements; ++iIndex) {
                var xElement = x.xContent.childNodes[iIndex];
                if (xElement.selected == '1') {
                    ++i;
                }
            }
            if (i > 0)
            {
                enable = true;
            }
        }
        var xTool = $(xMainToolsInfo.xFrameId).xDeleteTool;
        if (xTool)
        {
            xTool.xOnClick = x.xDeleteResults;
            xTool.xEnableControl(enable);
        }
    }

    x.xHideDeleteTool = function() {
        var xTool = $(xMainToolsInfo.xFrameId).xDeleteTool;
        if (xTool) xTool.xEnableControl(false);
    };

    x.xRemoveSortMarkers();
    //x.xSetSortMarker(1, false);

    x.xOnResultsSelectAll = function() {
        var xNumElements = x.xContent.childNodes.length;
        var i = 0;
        for (iIndex = 0; iIndex < xNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            if (xElement.selected == '1') {
                ++i;
            }
        }
        if (i == xNumElements)
        {
            x.xClearSelection();
        }
        else
        {
            x.xSelectAllElements();
        }
    }

    x.xSelectAllElements = function() {
        var x = $(xDataViewInfo.xFrameId);
        var xNumElements = x.xContent.childNodes.length;
        for (var iIndex = 0; iIndex < xNumElements; ++iIndex) {
            var xElement = x.xContent.childNodes[iIndex];
            x.xSelectElement(xElement, true);
        }
    };

    AP.addEvent(x.xObjId, "dragover", xDataView.onDragOver);
    AP.addEvent(x.xObjId, "drop", xDataView.onDrop);
};


xDataView.prototype.xAddResult = function (xResult, xIsFinished) {
    var x = this;
    var xIndex = parseInt(x.xContent.childNodes.length);

    var xId = xResult.xGetId(), xCompleted = xResult.xIsCompleted();

    var xTemplate = x.xGetTemplate(xResult, xIsFinished);
    var xElement = document.createElement('div');

    var xMatched = xResult.xHasDuplicates();
    xElement.setAttribute('rsid', xId);
    xElement.setAttribute('id', 'xRs'+xId);
    xElement.setAttribute('completed', xCompleted ? '1' : '0');
    xElement.setAttribute('index', xIndex);
    xElement.setAttribute('selected', 0);
    xElement.setAttribute('matched', xMatched ? '1' : '0');
    xElement.setAttribute('isFlaggged', xResult.xIsFlagged() ? '1' : '0');
    xElement.innerHTML = xTemplate;

    var xElemImgs = xElement.getElementsByTagName("IMG");
    if (xElemImgs && xElemImgs.length > 0) {
        xElemImgs[0].attachEvent('onclick', x._xElementIMG00_OnClick);
        //xElemImgs[1].attachEvent('onclick', x._xElementIMG01_OnClick);
    }

    xElement.attachEvent('onclick',         x._xElementOnClick);
    xElement.attachEvent('ondblclick',      x._xElementOnDblClick);

    xElement.attachEvent('onmousedown',     x._xElementOnMouseDown);
    xElement.attachEvent('onmouseout', x._xElementOnMouseOut);

    xElement.attachEvent('oncontextmenu',   x._xElementOnContextMenu);

    xElement.attachEvent('onselectstart',   x._xElementOnSelectStart);

    xElement.attachEvent('ondragstart',     x._xElementOnDragStart);
    xElement.attachEvent('ondragend',       x._xElementOnDragEnd);


    x.xContent.appendChild(xElement);
    xSetClassName(xElement, x.xGetClassName(xIndex, false, xResult.xIsCompleted()));
};

xDataView.prototype.xRemoveAll = function () {
    var x = this;
    x.xSelectedElements = new Array();              
    x.xContent.innerHTML = '';
    $(xMainToolsInfo.xFrameId).xSetResultSet(false);
};
    
xDataView.prototype.xFillResults = function (xResultSet, xIsFinished)
{
    var x = this; 
    x.xRemoveAll();
    var xResult = null;
    var xSomeResultSet = xResultSet;

    $(xMainToolsInfo.xFrameId).xSetResultSet(xSomeResultSet.xGetId());

    var nNumResults = xSomeResultSet.xGetNumberOfResults();
    x.nNumResults = nNumResults;

    for (iIndex = 0; iIndex < nNumResults; ++iIndex)
    {
        xResult = xSomeResultSet.xGetResultByNumber(iIndex);
        x.xAddResult(xResult, xIsFinished);
    }

};

xDataView.onDragOver = function(ev)
{
    ev || (ev = window.event);
    var obj = (AP.isIE() ? ev.srcElement : ev.currentTarget);
    return xDataView.prototype.doDragOver(ev, obj);
};

xDataView.onDrop = function(ev)
{
    ev || (ev = window.event);
    var obj = (AP.isIE() ? ev.srcElement : ev.currentTarget);
    return xDataView.prototype.doDrop(ev, obj);
};

xDataView.prototype.doDragOver = function(xEvent, obj)
{
    var xSelectedElementsString = xEvent.dataTransfer.getData("text");
    var xSelectedElementsUrl = xEvent.dataTransfer.getData("URL");
    var isLinkDDAllowed = false;

    if (xSelectedElementsString != null
        && xSelectedElementsUrl == null
        && AP.validUrl(xSelectedElementsString))
    {
        xSelectedElementsUrl = xSelectedElementsString;
    }

    if ( xSelectedElementsString != null )
    {
        if (xSelectedElementsUrl != null)
        {
            xEvent.dataTransfer.dropEffect = 'link';
            xEvent.returnValue = true;
            return false; 
        }
        else
        {
            xEvent.dataTransfer.dropEffect = 'none';
        }
    }
    xEvent.returnValue = false;
    return false;
};

xDataView.prototype.doDrop = function(xEvent, obj)
{
    var xSelectedElementsString = xEvent.dataTransfer.getData("text");
    var xSelectedElementsUrl = xEvent.dataTransfer.getData("URL");
    if (xSelectedElementsString != null
        && xSelectedElementsUrl == null
        && AP.validUrl(xSelectedElementsString))
    {
        xSelectedElementsUrl = xSelectedElementsString;
    }

    if (xSelectedElementsUrl != null)
    {
        xProvider$().xSaveAndResolveURL("", xSelectedElementsUrl);
        xEvent.returnValue = true;
        return false;
    }

    xEvent.dataTransfer.dropEffect = 'none';
    xEvent.returnValue = false;
    return false;
};
