var DocumentListDB = new Array();

//Stores the tags details (tag,count,associated Doc IDs in Array)
var TagsListDB = new Array();

var ticketID = getTicketIDFromCookie();
    
var apikey = getAPIKey() ; //to be fetched from session

//Stores the previous sortBy parameter
var previousSort = "";

//Stores the current tag value
var currentTag = "";

//Stores the username
var userName = getCookieValue("USERNAME");

//
var isAscending = "";

//Stores the recently uploaded file type
//"document" or "workbook" or "presentation"
var lastUploadedFileType = "";
    
//Message to be displayed on loading
var loadingMsg = "Loading... <img src='" + contextPath + "/images/loading.gif'>";

//Stores Currently displayed tag (top5/all)
var currentTagDisplayType = "";


//Stores the currently selected view, either myDocuemnts or sharedDocuments.
//Used to do perform searching based on it
var currentlySlctdView = "myDocuments";


//doc_name_url is used specificly for Writer and Presentation
function DocumentList(id,name,lastModTime,type,checkBxId,doc_name_url,tagsArray,readOnlyUsers,editUsers)
{
    this.id = id;
    //In Show services, if "'" present in the name, same has
    //been put as "&apos;".To make presentation names sync with the
    //other services, replacing "&apos;" with "'".
    if(type == "presentation")
    {
        name = replaceStr(name,"&apos;","\'");
    }
    this.name = name;
    this.type = type;
    this.lastModTime = lastModTime;
    this.checkBxId = checkBxId;
    this.document_name_url = doc_name_url;
    //Stores the associated tags
    this.tagsArray = tagsArray;
    this.readOnlyUsers = ""+readOnlyUsers;
    this.editUsers = ""+editUsers;
}

function TagDetail(tagName, docCount , docIdArray)
{
    this.tagName = tagName;
    this.docCount = docCount;
    this.docIdArray = docIdArray;
}

function getDocumentsData()
{
    //showLoadingMessage("loadingDiv",loadingMsg);
    var loadg = document.getElementById("loadingDiv");
    loadg.innerHTML=loadingMsg;
    loadg.style.display="block";
    try
    {
        //alert("called");
        sendAsyncAJAXRequest('GET',
                contextPath + '/getDocsList.do?method=getCompleteDocsList',responsePrint);
    }    
    catch(e)
    {
        alert("Unable to process the request ");
    }
}

 
function responsePrint(xmlhttp)
{
    if (xmlhttp.readyState == 4)
    {
        //hideLoadingMessage("loadingDiv");
    var loadg = document.getElementById("loadingDiv");
    loadg.innerHTML="";
    loadg.style.display="none";
        var xmll = xmlhttp.responseXML;
        if(xmll == null)
        {
            if(confirm("Unable to fetch data from server.Do you want to try again?"))
            {
                window.location.reload();
            }
        }
        //Error response check
        var errorNode = xmll.getElementsByTagName('ErrorResponseFor');
        
        if(errorNode != null && errorNode.item(0) != null )
        {
            var services = errorNode.item(0).attributes[0].value;
            var servArray = services.split(',');
            var servArrLength = servArray.length;
            var alertMssg = "Unable to fetch ";
            for(var i = 0 ; i < servArrLength ; i++ )
            {
                if(i != 0)
                {
                    alertMssg = alertMssg + " and ";
                }
                alertMssg = alertMssg + servArray[i] ;
            }
            if(confirm(alertMssg+". Do you want to try again?"))
            {
                window.location.reload();
                return;
            }
            //Means the xml doesnt contain response for any of the services
            if(servArrLength == 3)
            {
                return;
            }
        }
        //
        var doccc = xmll.getElementsByTagName('result');
        if(doccc != null && doccc.item(0) != null )
        {
            if(doccc.item(0).getElementsByTagName('documents').length != 0)
            {
                var documents = doccc.item(0).getElementsByTagName('documents')[0];
                parseAndAddInArray(documents,"document","documentName","documentId","lastModifiedTime");
            }
            if(doccc.item(0).getElementsByTagName('workbooks').length != 0)
            {
                var worksheets = doccc.item(0).getElementsByTagName('workbooks')[0];
                parseAndAddInArray(worksheets, "workbook", "workbookName","workbookId","lastModifiedTime");
            }
            if(doccc.item(0).getElementsByTagName('presentations').length != 0)
            {
                var presentations = doccc.item(0).getElementsByTagName('presentations')[0];
                parseAndAddInArray(presentations,"presentation","presentationName","presentationId","lastModifiedTime");
            }
            //If no documents available in the Zoho accounts
            if(noDocsAvailable())
            {
                displayNoDocDiv();
                return;
            }
            
            //Sorting tags based on docCount
            sortTagsOnCount();
            //**************** CAN BE REMOVED ****************************
            //showTagsListDB();
            //Display Tags
            displayTags("Top5");
            
            //Sorts the Documnets by LastEdited time and populates the table
            sortAndPopulate("Time");
        }
        //No need of this error handling.Since it has been handled already.
        //In case of error 
        else
        {
            if(confirm("Unable to fetch data from server.Do you want to try again?"))
            {
                window.location.reload();
            }
        }
    }
}

//axn = "Top5" or "All"
function displayTags(axn)
{
    //On delete uses the previously selected display tag type
    if(axn != "onDelete")
    {
        currentTagDisplayType = axn;
    }
    var tagsCnt = TagsListDB.length;
    var tagsDv = document.getElementById("tagsDiv");
    var innerHtml = createTagHTML(currentTagDisplayType);
    tagsDv.innerHTML = innerHtml;
    if(axn == "All")
    {
        //tagsDv.setAttribute("style","width:100%;overflow:auto;");
    }
    else if(axn == "Top5")
    {
        if(tagsCnt > 5 && currentTag != "" && !isCrrntTagInTagsDB('5'))
        {
            currentTag = '';
            setSelectedTag('');
        }
        //tagsDv.setAttribute("style","width:100%;");
    }
    else if(axn == "onDelete")
    {
       //If the deleted tag had only one document, making the 
       //Show All Documents selected
       if(currentTag != "" && !isCrrntTagInTagsDB('')) 
       {
           currentTag = '';
           setSelectedTag('');
       }
    }
    tagsDv.style.display = "block";
}

//Checks whether the currently selected tag in top 5 or not
function isCrrntTagInTagsDB(limit)
{
    var isInTop5 = false;
    var tagsCnt = TagsListDB.length;
    if(limit == '5')
    {
        tagsCnt = 5;
    }
    for(var i = 0 ; i < tagsCnt ; i++)
    {
        var tagName = TagsListDB[i].tagName;
        if(currentTag == tagName)
        {
            isInTop5 = true;
            break;
        }
    }
    return isInTop5;
}

//creates inner HTML content for Tag table based on the top5/all display
function createTagHTML(axn)
{
    var optionDiv = document.getElementById("tagsOption");
    optionDiv.innerHTML="";
    var tagCnt = TagsListDB.length;
    if(tagCnt == 0)
    {
        return "";
    }
    var tagHdr = "";
    var appendRow = "";
    if(axn == "" || axn == "Top5")
    {
        //If tag count is greater than 5
        if(tagCnt > 5)
        {
            tagCnt = 5;
            optionDiv.innerHTML = "<ul><li><a style='text-decoration:none' href=\"javascript:displayTags('All')\">Show All Tags</a></li></ul>";
            tagHdr = "Top 5 Tags";
        }
        //If total tags count is lesser than or equal to 5
        else
        {
            tagHdr = "All Tags";
        }
    }
    else
    {
        tagHdr = "All Tags";
        if(tagCnt > 5)
        {
            optionDiv.innerHTML = "<ul><li><a style='text-decoration:none' href=\"javascript:displayTags('Top5')\">Display Top 5 Tags</a></li></ul>";
        }
    }
    var tagHdrDv = document.getElementById("tagHeader");
    tagHdrDv.innerHTML = tagHdr;
    var tagsLi = "<ul>";
    for(var i = 0 ; i < tagCnt ; i++ )
    {
        var tag = TagsListDB[i].tagName;
        var textDecor = "none";
        if(currentTag == tag)
        {
            textDecor = "underline";
        }
        var titleVal = tag;
        var tagLngth = tag.length;
        if(tagLngth > 15)
        {
            tag = tag.substring(0,15) + "...";
        }
        tagsLi = tagsLi+"<li> <a style='text-decoration:"+textDecor+"' id=\"tag_"+titleVal+"\" title=\""+titleVal+"\" href=\"javascript:setSelectedTag('"+titleVal+"')\">"+tag+"</li>";
    }
    tagsLi = tagsLi+"</ul>";
    return tagsLi;
}

//Checks any documents avaible in the DocumentListDB array.
function noDocsAvailable()
{
    var dbCount = DocumentListDB.length;
    if(dbCount == 0)
    {
        return true;
    }
    return false;
}

function displayNoDocDiv()
{
    clearDocumentTable();
    var divEle = document.getElementById("noDocsAvailable");
    divEle.innerHTML = "&nbsp;<br> &nbsp;No Documents Available in the server. <br> &nbsp;";
    divEle.style.display = "block";
}

function parseAndAddInArray(documents,docType,tag1,tag2,tag3)
{
    var document = documents.getElementsByTagName(docType);
    var docCount = document.length;
    //alert(tag1+":::"+docCount);
    for(var i = 0 ; i < docCount ; i++ )
    {
        var docname = document.item(i).getElementsByTagName(tag1)[0].firstChild.data;
        var idd = document.item(i).getElementsByTagName(tag2)[0].firstChild.data;
        var time = document.item(i).getElementsByTagName(tag3)[0].firstChild.data;
        var checkBxId = idd+"_cb";
        //if(docType == 'workbook')
        //{
        //    time = toTimeInMillis(time);
        //}
        //Specific for Writer documents
        var doc_name_url = "";
        if(docType == "document")
        {
            doc_name_url = document.item(i)
                .getElementsByTagName("document_name_url")[0].firstChild.data;
            //alert("parseAndAddd::Writer Document::document_name_url::"+doc_name_url);
        }
        else if(docType == "presentation")
        {
            doc_name_url = document.item(i)
                .getElementsByTagName("presentationNameUrl")[0].firstChild.data;
            //alert("parseAndAdd::Presentaion Document::presentationNameUrl:"+doc_name_url);    
        }
        var tagsArray = fetchTagsFromNode(document.item(i),idd,"tags"); 

        //************ Shared details ***********
        var sharedDetails = getSharedDetails(document.item(i),docType);
        var readOnlyUsers = sharedDetails[0];
        var editUsers = sharedDetails[1];
        readOnlyUsers = trim(readOnlyUsers);
        editUsers = trim(editUsers);
        //alert("DocName::"+docname+":::docType:"+docType+":::readOnlyUsers:"+readOnlyUsers+":::editUsers:"+editUsers+"::");
        //***************************************

        DocumentListDB[DocumentListDB.length] = 
            new DocumentList(idd,docname,time,docType,checkBxId,doc_name_url,tagsArray,readOnlyUsers,editUsers);
    }
}

function getSharedDetails(nnode,docType)
{
    var readOnlyUsers = "";
    var editUsers = "";

    var strArr = new Array();

    if(docType == 'document' || docType == 'workbook' || docType == 'presentation')
    {
        if(nnode != null && nnode.getElementsByTagName("share")[0] != null)
        {
            var shareNode = nnode.getElementsByTagName("share")[0];
            var chldrnNdsLn = shareNode.getElementsByTagName("user").length;
            if(chldrnNdsLn > 0)
            {
                for(var j = 0 ; j < chldrnNdsLn ; j++)
                {
                    var mailId = "";
                    var permission = "";
                    var tmpNode = shareNode.getElementsByTagName("user")[j];
                    var attLn = shareNode.getElementsByTagName("user")[j].attributes.length;
                    for(var ij = 0 ; ij < attLn ; ij++ )
                    {
                        var nname = shareNode.getElementsByTagName("user")[j].attributes[ij].name;
                        if(nname == "emailId" || nname == "email")
                        {
                            mailId = shareNode.getElementsByTagName("user")[j].attributes[ij].value;
                        }
                        if(nname == "permission")
                        {
                            permission = shareNode.getElementsByTagName("user")[j].attributes[ij].value;
                        }
                    }
                    if(mailId != null && mailId != "null" && trim(mailId) != "")
                    {
                        if(isReadOnly(docType,permission))
                        {
                            if(trim(readOnlyUsers) != "")
                            {
                                readOnlyUsers = readOnlyUsers + ",";
                            }
                            readOnlyUsers = readOnlyUsers + mailId;
                        }
                        else
                        {
                            if(trim(editUsers) != "")
                            {
                                editUsers = editUsers + ",";
                            }
                            editUsers = editUsers + mailId;
                        }
                    }
                }
            }
        }
    }
    strArr[0] = readOnlyUsers;
    strArr[1] = editUsers;
    return strArr;
}

//readOnlyParam and editParam are used to check the permission assigned.
//for writer, readOnlyParam and editParam are false and true respectively
//for sheet, readOnlyParam and editParam are readOnly and readWrite respectively
function isReadOnly(docType, perm)
{
    var permission = false;
    if(docType == 'document')
    {
        if(perm == "false")
        {
            permission = true;
        }
        else if(perm == "true")
        {
            permission = false;
        }
    }
    else if(docType == 'workbook' || docType == 'presentation')
    {
        if(perm == "readOnly")
        {
            permission = true;
        }
        else if(perm == "readWrite")
        {
            permission = false;
        }
    }
    return permission;
}

//Fetches tags from the node and constructs TagDetails 
//And adds the TagDetails in the TagsDB and 
//also returns a tagsArray
function fetchTagsFromNode(nnode,docId,tagName)
{
    var tagsArray = new Array();
    if(nnode != null && nnode.getElementsByTagName(tagName)[0] != null )
    {
        var tagsNode = nnode.getElementsByTagName(tagName)[0];
        var tagsCnt = tagsNode.getElementsByTagName("tag").length;
        if(tagsCnt > 0 )
        {
            for(var i = 0 ; i < tagsCnt ; i++ )
            {
                var tag = tagsNode.getElementsByTagName("tag")[i].attributes[0].value;
                //log("TagsNode:"+tagsNode.getElementsByTagName("tag")[i].attributes[0].value);
                tagsArray[i] = tag;
                checkAndAddInTagsDB(docId,tag);
            }
        }
        //log("fetchTagsFromNode:::DocId:"+docId+"**TagsArray:"+tagsArray);
    }
    return tagsArray;
}

//Used for displaying TagsListDB content 
// ******************** CAN BE REMOVED ***************************
function showTagsListDB()
{
    var tagsCount = TagsListDB.length;
    for(var i = 0 ; i < tagsCount ; i++)
    {
        alert("TagsList::"+i+"::TagName::"+TagsListDB[i].tagName
                +"*TagCount:"+TagsListDB[i].docCount+"*DocIdArray:"+TagsListDB[i].docIdArray);
    }
}


//If the given tag exists in TagsListDB, increases the docCount by one 
//and adds the docId in the docIdArray.
//If the given tag not exists, sets the docCount to one and creates a 
//new docIdArray with the given docId.
function checkAndAddInTagsDB(docId,tag)
{
    var isTagExist = false;
    var tagsCount = TagsListDB.length;
    for(var i = 0 ; i < tagsCount ; i++)
    {
        var tagName = TagsListDB[i].tagName;
        if(tagName == tag)
        {
            var docCount = TagsListDB[i].docCount;
            var docIdArray = TagsListDB[i].docIdArray;
            docIdArray[docIdArray.length] = docId;
            //
            TagsListDB[i].docCount = docCount+1;
            TagsListDB[i].docIdArray = docIdArray;
            //
            isTagExist = true;
            break;
        }
    }
    if(!isTagExist)
    {
        var docIdArray = new Array();
        docIdArray[0] = docId;
        var docCount = 1;
        TagsListDB[tagsCount] = new TagDetail(tag,docCount,docIdArray); 
    }
}

//converts the time in Millis to "month-date-year hours:minutes" 
function timeInString(timeInMillis)
{
    var datte = new Date();
    datte.setTime(timeInMillis);
    var yyear = datte.getFullYear();
    var mmonth = datte.getMonth()+1;
    var dday = datte.getDate();
    var hhour = datte.getHours();
    var mmin = datte.getMinutes();
    var dateInString = mmonth+"-"+dday+"-"+yyear;//+" "+hhour+":"+mmin;
    //alert("timeInString::: timeInMillis:"+timeInMillis
    //        +"* dateInString::"+dateInString);
    return dateInString;
}


//Used to set row colors on deleting documents
function setRowColors()
{
    var intable = document.getElementById("documentTableTBody");
    var curRowCnt = intable.childNodes.length;
    for(var i = 2 ; i < curRowCnt ; i++ )
    {
        var bgColor = getRowColor(i);
        var rowObj = intable.childNodes[i];
        var colCnt = rowObj.childNodes.length;
        for(var cn = 0 ; cn < colCnt ; cn++ )
        {
            rowObj.childNodes[cn].className = bgColor;
        }
    }
}

function addrowsInTable( docId, docName, docType, modTime, checkBxId , doc_name_url)
{
    //Name to be used in getting editor page url
    var editorDocName = docName;
    //ImageName w.r.t type
    var imageDisplayNamesArray = getImageNameAndDisplayType(docType);
    var imageName = imageDisplayNamesArray[0]
    //Display Type
    var displayDocType = imageDisplayNamesArray[1];
    //For Writer, document_name_url to be passed in getting the editor.
    if(docType == "document")
    {
        editorDocName = doc_name_url;
        //alert("addrowsInTable::editorDocName For Document::"+editorDocName);
    }
    //Wrapping special characters in docName to avoid problem
    //while passing across functions.
    var wrappedDocName = wrapUnwrapSplChar(docName,"wrap");
    //
    modTime = timeInString(modTime);
    var seperator = " | ";
    var exportId = docId+"_exp";
    var intable = document.getElementById("documentTableTBody");
    //Current row count
    var curRowCnt = intable.childNodes.length;
    var rclass = getRowColor(curRowCnt);    
    //
    var newRow = document.createElement("tr");
    newRow.id = docId;
    intable.appendChild(newRow);

    //
    var dispDocName = docName;
    if(dispDocName.length > 18)
    {
        dispDocName = dispDocName.substring(0,16);
        dispDocName = dispDocName+"...";
    }

    var cell1 = document.createElement("td");//newRow.insertCell(0);
    cell1.className = rclass;
    cell1.innerHTML = "<input id ='"+checkBxId+"'type=\"checkbox\" name=\"checkbox2\" value=\"checkbox\" /> <span title=\""+docName+"\">"+ dispDocName+"</span>";
    newRow.appendChild(cell1);

    var cell2 = document.createElement("td");//newRow.insertCell(1);
    cell2.className = rclass;
    cell2.innerHTML = "<img src='" + contextPath + "/images/"+imageName+"' width=\"21\" height=\"22\" align=\"absmiddle\" class=\"docimg\"/>"+displayDocType;
    newRow.appendChild(cell2);
   
    var cell3 = document.createElement("td");//newRow.insertCell(2);
    cell3.className = rclass;
    cell3.innerHTML = "<a href=\"javascript:getPreview('"+docId+"','"+docType+"','"+wrappedDocName+"','')\">Preview</a> | <a href=\"" + contextPath +"/getDocsList.do?method=getEditorPage&docId="+ docId + "&docType=" + docType +"&apiTicket="+ticketID+ "&docName="+editorDocName+"\">Edit</a> | <a  id='"+exportId+"' href=\"javascript:doExport('"+docId+"','"+wrappedDocName+"','"+docType+"','"+exportId+"','"+doc_name_url+"','')\">Export</a>";

   cell3.innerHTML = cell3.innerHTML  + " | <a href=\"javascript:shareDoc('"+docType+"','"+docId+"','"+wrappedDocName+"')\">Share</a>";

    newRow.appendChild(cell3);

    var cell4 = document.createElement("td");//newRow.insertCell(3);
    cell4.className = rclass;
    cell4.innerHTML = "<em>"+modTime+"</em>";
    newRow.appendChild(cell4);
}

//
function shareDoc(docType,docId,docName)
{
    var divEle = document.getElementById("shareDiv");
    //divEle.style.left = lastMouseClickX;
    //divEle.style.top = lastMouseClickY;
    divEle.style.display = "block";
    
    var dispDocName = truncateDisplayString(docName,18);
    document.getElementById("sharedHdrDiv").innerHTML = "<span title=\""+docName+"\">Share your Document - "+dispDocName+"</span>";


    showShareDiv();

    var bttnDiv = document.getElementById("shareButtonDiv");
    bttnDiv.innerHTML = "<input id=\"submitBttnShare\" type=\"button\" name=\"Share\" value=\"Share\" onclick=\"javascript:shareTheDoc('"+docType+"','"+docId+"')\"> <input id=\"cancelBttnShare\" type=\"button\" name=\"Cancel\" value=\"Cancel\" onclick=\"javascript:hideShareDoc()\">";

    formShareTab2(docId,docType);    
}

function formShareTab2(docId,docType)
{
    var readOnlyUsers = "";
    var editUsers = "";
    for(var x in DocumentListDB)
    {
        var idd = DocumentListDB[x].id;
        if(idd == docId)
        {
            readOnlyUsers = readOnlyUsers+DocumentListDB[x].readOnlyUsers;
            editUsers = editUsers+DocumentListDB[x].editUsers;
            break;
        }
    }

    var shareTab2Div = document.getElementById("shareTab2TableDiv");
    shareTab2Div.innerHTML = "<table cellpadding=\"0\" cellspacing=\"3\" style=\"width:100%;\"><tbody id=\"sharedDetailsTBody\">"+
                            "<tr class=\"password\"><td width=\"50%\" valign=\"top\"><strong>Email ID</strong></td><td width=\"25%\" valign=\"top\"><strong>Permission</strong></td><td width=\"25%\" valign=\"top\"><strong>Action</strong></td></tr>"+
                            "</tbody></table>";

    var tbbody = document.getElementById("sharedDetailsTBody");
    if(readOnlyUsers == "" && editUsers == "")
    {
        
        return;
    }
   
    var readArr = readOnlyUsers.split(",");
    for(var x in readArr)
    {
        var idd = readArr[x];
        if(idd != null && trim(idd) != "" )
        {
            addRowInSharedDetails(tbbody,docId,docType,idd,"readOnly");
        }
    }

    var editArr = editUsers.split(",");
    for(var y in editArr)
    {
        var idd = editArr[y];
        if(idd != null && trim(idd) != "" )
        {
           addRowInSharedDetails(tbbody,docId,docType,idd,"readWrite")
        }
    }

}

function addRowInSharedDetails(shareTableTbody,docId,docType,mailId,access)
{
    var roww = document.createElement("tr");
    roww.id = docId+"_"+mailId+"_"+access;
    roww.className = "formtext";
    shareTableTbody.appendChild(roww);
    
    var cell1 = document.createElement("td");
    cell1.verticalAlign="top";
    var dispMailId = truncateDisplayString(mailId,25);
    cell1.innerHTML = "<span title=\""+mailId+"\">"+dispMailId+"</span>";
    roww.appendChild(cell1);

    var cell2 = document.createElement("td");
    var dispAccess = (access == "readOnly")?"Read Only":"Read / Write";
    cell2.verticalAlign="top";
    cell2.innerHTML = dispAccess;
    roww.appendChild(cell2);

    var cell3 =  document.createElement("td");
    cell3.verticalAlign="top";
    cell3.innerHTML = "<a href=\"javascript:revertSharing('"+docId+"','"+mailId+"','"+docType+"','"+access+"')\">Remove</a>";
    roww.appendChild(cell3);

}

function revertSharing(docId,mailId,docType,access)
{
    try
    {
        var divEle = document.getElementById("shareLoadingDiv");
        divEle.innerHTML = "Processing... <img src='" + contextPath + "/images/loading.gif'>";
        divEle.style.display = "block";
        var urll = contextPath + "/getDocsList.do?method=revertSharing&docId="
            +docId+"&type="+docType+"&mailId="+mailId+"&access="+access;
        sendAsyncAJAXRequest('GET',urll,responseRevertShare);
    }
    catch(e)
    {
        alert("Unable to revert the shared document ");
    }
}

function responseRevertShare(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = xmlhttp.responseText;
        if(resp != null)
        {
            var jsonrsp = eval ( '('+resp+')');
            //alert("Revert Sharing:::::jsonResp:::::::::::::::::"+jsonrsp);
            var docId = jsonrsp.docId;
            var access = jsonrsp.access;
            var mailId = ""+jsonrsp.mailId;
            var result = jsonrsp.result;
            //alert("::::::::::::::::::::::::::::::::::::::::"+docId+":::::::"+result);
            if(result == "success")
            {
                //Removing the row from the shared details table
                var rowId = docId+"_"+mailId+"_"+access;
                removeRowFromSharedDetails(rowId);
                
                //Removing the mail Id from DocumentsDB
                updateSharedMailId(docId,mailId,"remove",access);        
                
                var divEle = document.getElementById("shareLoadingDiv");
                divEle.style.display = "none";
            }
            else
            {
                alert("Unable to revert sharing.");
            }
        }
        else
        {
            alert("Unable to revert sharing.");
        }
    }
}

function updateSharedMailId(docId,mailId,axn,access)
{
    var mailIds = "";
    var ln = DocumentListDB.length;
    if(ln == 0)
    {
        return;
    }
    for(var x = 0 ; x < ln ; x++)
    {
        var doc_Id = DocumentListDB[x].id;
        if(doc_Id == docId)
        {
            if(access == "readOnly")
            {
                mailIds = ""+DocumentListDB[x].readOnlyUsers;
                if(axn == "remove")
                {
                    mailIds = removeMailID(mailIds,mailId);
                }
                else if(axn == "add")
                {
                    mailIds = appendMailID(mailIds,mailId);
                }
                DocumentListDB[x].readOnlyUsers = ""+mailIds;
        //        alert("updateMailIds:"+access+":axn:"+axn+":mailId:"+mailId+":mailIds:"+DocumentListDB[x].readOnlyUsers+"**");
            }
            else if(access == "readWrite")
            {
                mailIds = ""+DocumentListDB[x].editUsers;
                if(axn == "remove")
                {
                    mailIds = removeMailID(mailIds,mailId);
                }
                else if(axn == "add")
                {
                    mailIds = appendMailID(mailIds,mailId);
                }
                DocumentListDB[x].editUsers = ""+mailIds;
        //        alert("updateMailIds:"+access+":axn:"+axn+":mailId:"+mailId+":mailIds:"+DocumentListDB[x].editUsers+"**");
            }
            break;
        }
    }
    return mailIds;
}

function removeMailID(mailIds,mailId)
{
    if(mailIds != null && trim(mailIds) != "")
    {
        if(mailIds.indexOf(mailId) != -1)
        {
            var strArr = mailIds.split(",");
            for (var x in strArr)
            {
                var idd = strArr[x];
                if(idd == mailId)
                {
                    strArr.splice(x,1);
                    break;
                }
            }
            mailIds = strArr.toString();
        }
    }
    return mailIds;
}

function appendMailID(mailIds , mailId)
{
    if(mailIds != null && trim(mailIds) != "" )
    {
        mailIds = mailIds + "," + mailId;
    }
    else
    {
        mailIds = mailId;
    }
    return mailIds;
}

function removeRowFromSharedDetails(rowId)
{
    var rowEle = document.getElementById(rowId);
    var tbbody = document.getElementById('sharedDetailsTBody');
    tbbody.removeChild(rowEle);
}


function hideShareDoc()
{
    document.getElementById("shareDoc_View").value = "";
    document.getElementById("shareDoc_Edit").value = "";
    
    document.getElementById("shareTab2TableDiv").innerHTML = "";

    var divEle = document.getElementById("shareDiv");
    divEle.style.display = "none";
}

//Returns imageName w.r.t document type
function getImageNameAndDisplayType(docType)
{
    var tempArray = new Array();
    var imageName = "";
    var displayType = "";
    if(docType == "document")
    {
        imageName = "large_icons/icon_doc1.gif";
        displayType = "Document";
    }
    else if(docType == "workbook")
    {
        imageName = "large_icons/icon_doc2.gif";
        displayType = "Workbook";
    }
    else if(docType == "presentation")
    {
        imageName = "large_icons/icon_doc3.gif";
        displayType = "Presentation";
    }
    tempArray[0] = imageName;
    tempArray[1] = displayType;
    return tempArray;
}

function getPreview(docId,docType,docName,ownerName)
{
    if(docType == 'presentation')
    {
        var urll = "http://show.zoho.com/View.do?P_ID="+docId+"&TP=true&ticket="+ticketID;
        if(ownerName != null && ownerName != '')
        {
            urll = urll+"&SHRD_BY="+ownerName;
        }
        popupNewWindow(urll);
    }
    else if(docType == 'workbook')
    {
        //get url from server
        getSheetPreviewURL(docId,docType,docName);
    }
    else if(docType == 'document')
    {
        //get url from server
        //getDocContent(docId,docType,docName);
        var urll = "http://www.writer.zoho.com/docview.do?docId="
            +docId+"&mode=read&nologo=true&ticket="+ticketID;
        popupNewWindow(urll);
    }
}

function getDocContent(docId,docType,docName)
{
    try
    {
        var urll = contextPath + "/getDocsList.do?method=getDocContent&docId="
            +docId+"&docName="+docName+"&docType="+docType;
        sendAsyncAJAXRequest('GET',urll,responseDocContent);
    }
    catch(e)
    {
        alert("Unable to get the document content ")
    }
}

function responseDocContent(xmlhttp)
{
    if (xmlhttp.readyState == 4)
    {
        var response = xmlhttp.responseXML;
        var doccc = response.getElementsByTagName('result');
        if(doccc != null && doccc.item(0) != null )
        {
            var docum = doccc.item(0).getElementsByTagName('document')[0];
            var cont = docum.getElementsByTagName('content')[0].firstChild.data;
            previewConsole(cont);
        }
        else
        {
            alert("Unable to get the document content");
            return;
        }
    }
}

function getSheetPreviewURL(docId,docType,docName)
{
    try
    {
        var urll = contextPath + "/getDocsList.do?method=getSheetPreview&docId="
            +docId+"&docName="+docName+"&docType="+docType;
        sendAsyncAJAXRequest('GET',urll,responseSheetPreVURL);
    }
    catch(e)
    {
        alert("Unable to show preview");
    }
}

function responseSheetPreVURL(xmlhttp)
{
    if (xmlhttp.readyState == 4)
    {
        var response = xmlhttp.responseText;
        popupNewWindow(response);
    }
}


function doExport(docId,docName,docType,linkId,doc_name_url,ownerName)
{
        
    var urlPrefix = docId+"?apikey="+apikey+"&ticket="+ticketID;
    
    var div = document.getElementById("menuDiv");

    var linkEle = document.getElementById(linkId);
    var pointXX = lastMouseClickX;//findPosX(linkEle);
    var pointYY = lastMouseClickY;//findPosY(linkEle);
    var menus = "";
    if(docType == 'document')
    {
        var inDOCUrl = "http://export.writer.zoho.com/api/private/doc/download/"+urlPrefix;
        var inPDFUrl = "http://export.writer.zoho.com/api/private/pdf/download/"+urlPrefix;
        var inHTMLUrl = "http://export.writer.zoho.com/api/private/html/download/"+urlPrefix;
        var inSXWUrl = "http://export.writer.zoho.com/api/private/sxw/download/"+urlPrefix;
        var inODTUrl = "http://export.writer.zoho.com/api/private/odt/download/"+urlPrefix;
        var inRTFUrl = "http://export.writer.zoho.com/api/private/rtf/download/"+urlPrefix;

        menus = menus + 
               "<table style=\"font-family:Verdana,sans-serif;font-size:12px;\" cellpadding='3' cellspacing='0'>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inDOCUrl+"')\">Word Document (.doc)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inPDFUrl+"')\">PDF Document (.pdf)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inHTMLUrl+"')\">HTML Document (.html)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inSXWUrl+"')\">OpenOffice Writer (.sxw)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inODTUrl+"')\">Open Document (.odt)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inRTFUrl+"')\">Rich Text File (.rtf)</a></td></tr>" +
                "</table>";
                
    }
    else if(docType == 'workbook')
    {
        var inXLSUrl = "http://sheet.zoho.com/api/private/xls/download/"+urlPrefix;
        var inSXCUrl = "http://sheet.zoho.com/api/private/sxc/download/"+urlPrefix;
        var inPDFUrl = "http://sheet.zoho.com/api/private/pdf/download/"+urlPrefix;
        var inHTMLUrl = "http://sheet.zoho.com/open.do?docid="+docId+"&ticket="+ticketID+"&export=html";

        menus = menus + 
               "<table style=\"font-family:Verdana,sans-serif;font-size:12px;\" cellpadding='3' cellspacing='0'>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inXLSUrl+"')\">MS Excel Workbook (.xls)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inPDFUrl+"')\">PDF Document (.pdf)</a></td></tr>"
                    + "<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inSXCUrl+"')\">OpenOffice Spreadsheet (.sxc)</a></td></tr>" 
                    +"<tr><td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\"><a href=\"javascript:openExportInNewTab('"+inHTMLUrl+"')\">HTML Document (.html)</a></td></tr>"+
                "</table>";
            
    }
    else if(docType == 'presentation')
    {
        docName = wrapUnwrapSplChar(docName,"wrap");
        var urll = "http://show.zoho.com/ExportAsHTML.do?ticket="+ticketID+"&P_ID="+docId+"&P_NAME="+docName+"&P_NAME_URL="+doc_name_url+"&TP=true";
        if(ownerName != null && ownerName != '')
        {
            urll = urll + "&SHRD_BY="+ownerName;
        }
        menus = menus + 
               "<table style=\"font-family:Verdana,sans-serif;font-size:12px;\" cellpadding='3' cellspacing='0'> <tr> <td onmouseover=\"style.backgroundColor='#7C7EFF'\" onmouseout=\"style.backgroundColor='#ffffff'\">" 
                    + "<a href=\"javascript:openExportInNewTab('"+urll+"')\">HTML Document (.do)</a>"+
                "</td> </tr> </table>";
    }
    div.innerHTML = menus;
    div.classname = "tagmenu";
    div.style.right = "";
    //div.style.border = "1px solid black";
    div.style.left = pointXX;
    div.style.top = pointYY;
    div.style.position = "absolute";
    div.style.display = "block";
    div.style.backgroundColor = "#ffffff";
}

function showMenuDiv()
{
    var div = document.getElementById("menuDiv");
    div.style.display="block";
}

function openExportInNewTab(urll)
{
    var wind = window.open(urll,null,'menubar=yes');
    hideMenuDiv();
}

function hideMenuDiv()
{
    var div = document.getElementById("menuDiv");
    div.style.display="none";
}

function previewConsole(content)
{
    var gen = window.open('','name','');
    gen.document.write(content);
    gen.document.close();
}

//Sending synchronous request to server on documents deletion
function deleteDoc()
{
    var dbCount = DocumentListDB.length;
    //Used to store the index(in the DocumentListDB) of the documents deleted.
    //-- Used for removing those documnets from the DocumentListDB.
    //deleted
    var indexOfDocsRmvd = new Array();
    //To check whether any document has been selected for
    //deletion
    var isDocSelected = false;
    for(var j = 0 ; j < dbCount ; j++ )
    {
        var cbId = DocumentListDB[j].checkBxId;
        var ele = document.getElementById(cbId);
        if(ele != null && ele.checked == true)
        {
            isDocSelected = true;
            break;
        }
    }
    if(isDocSelected)
    {
        if(!confirm("Do you want to delete the selected document(s)?"))
        {
           return;
        }
    }
    else
    {
        alert("No documents selected for deletion");
        return;
    }
    var docsRemoved = 0;
    var docParams = "";
    for(var i = 0  ; i < dbCount ; i++ )
    {
        var cbId = DocumentListDB[i].checkBxId;
        var ele = document.getElementById(cbId);
        if( ele != null && ele.checked == true)
        {
            var docName = DocumentListDB[i].name;
            var docId = DocumentListDB[i].id;
            var docType = DocumentListDB[i].type;
            var param = docId+"_"+docType;
            if(docParams != "")
            {
                docParams = docParams + ",";
            }
            docParams = docParams + param;
        }
    }
    try
    {
        var urll = contextPath + "/getDocsList.do?method=deleteDoc&docParams="+docParams;
        sendAsyncAJAXRequest('GET',urll,docDeleteResponse);
        var loadg = document.getElementById("loadingDiv");
        loadg.innerHTML= "Deleting in progress.Please wait... <img src='" + contextPath + "/images/loading.gif'>";
        loadg.style.display="block";
    }
    catch(e)
    {
        alert("Unable to delete document ");
    }
}

function docDeleteResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        deleteDeletedDoc(resp);
    }
}

function deleteDeletedDoc(resp)
{
    if(resp == null || resp.length == 0)
    {
        return;
    }
   
    var notDltdDocs = "";

    var ln = resp.length;
    for(var i = 0 ; i < ln ; i++ )
    {
        var docId = resp[i].docId;
        var rslt = resp[i].result;
        var docLn = DocumentListDB.length;
        for(var cn = 0 ; cn < docLn ; cn++ )
        {
            var doc_Id = DocumentListDB[cn].id;
            if(doc_Id == docId)
            {
                var docName = DocumentListDB[cn].name;
                var docType = DocumentListDB[cn].type;
                if(rslt == "success")
                {
                    //Deleting doc from the table
                    deleteDocFromTable(docName,docId,docType);
                    
                    //Removing this index from DocumentListDB
                    var tagArray = cloneArray(DocumentListDB[cn].tagsArray);
                    //
                    DocumentListDB.splice(cn,1);
                    //Handling tags on deletion
                    handleTagsOnDocDelete(tagArray,docId);
                    
                    break;
                }
                else
                {
                    notDltdDocs = notDltdDocs + " \n " + docName;
                    break;
                }
            }
        }
    }
    //Setting colors for rows
    setRowColors();
    var loadg = document.getElementById("loadingDiv");
    loadg.style.display = "none";
    if(notDltdDocs != "")
    {
        alert("Unable to delete the following documents: "+ "\n" +notDltdDocs);
    }

    //If all the rows are deleted from the table under search,tag and showAll scenarios,
    //repopulating the all documents.
    var docsInTable = document.getElementById("documentTableTBody").childNodes.length;
    if(docsInTable <= 2)
    {
        setSelectedTag("");
    }
}


//
function handleTagsOnDocDelete(tagArray,docId)
{
    var assoTagCnt = tagArray.length;
    if(assoTagCnt > 0)
    {
        //var tagsCnt = TagsListDB.length;
        for(var i = 0 ; i < TagsListDB.length ; i++ )
        {
            var tagArrayCnt = tagArray.length;
            if(tagArrayCnt == 0)
            {
                break;
            }
            var tagName = TagsListDB[i].tagName;
            for(var tC = 0 ; tC < tagArrayCnt ; tC++)
            {
                var tempTag = tagArray[tC];
                if(tagName == tempTag)
                {
                    var docCountInTags = TagsListDB[i].docCount;
                    //If docCount for this tag is one, then no
                    //other document is related to this tag.So removing
                    //this tag from the TagsListDB
                    if(docCountInTags == 1)
                    {
                        TagsListDB.splice(i,1);
                        //On splicing TagsListDB count is reduced by one,
                        //so to keep the for loop in sync, reducing the 
                        //current value by 1
                        i = i - 1;
                    }
                    else 
                    {
                        //Reducing the count by 1
                        TagsListDB[i].docCount = docCountInTags-1;
                        //Removing this docId from the docIdArray
                        var docIdArr = TagsListDB[i].docIdArray;
                        var arrCnt = docIdArr.length;
                        for(var cnt = 0 ; cnt < arrCnt ; cnt++ )
                        {
                            var tmpDocId = docIdArr[cnt];
                            if(tmpDocId == docId)
                            {
                                docIdArr.splice(cnt,1);
                            }
                        }
                        
                    }
                    //Removing the processed tag from the tagArray
                    tagArray.splice(tC,1);
                    break;
                }
            }
        }
        //Sorting the tags
        sortTagsOnCount();
        //showTagsListDB();
        displayTags("onDelete");
    }
}

function deleteDocFromTable(docName,docId,docType)
{
    var rowToDel = document.getElementById(docId);
    var tableEle = document.getElementById("documentTableTBody");
    tableEle.removeChild(rowToDel);
}


function clearDocumentTable()
{
    var intable = document.getElementById("documentTableDiv");
    intable.innerHTML = '';
}
/*
function clearHeaderTable()
{
    var hdrDiv = document.getElementById("headerDiv");
    hdrDiv.innerHTML = "";
}
*/
function populateTable()
{
    clearDocTableAndAddHeader();
    var dbCount = DocumentListDB.length;
    for(var dc = 0 ; dc < dbCount ; dc++ )
    {
        getAndAddRow(DocumentListDB[dc]);
    }
}
/*
function createDocumentTable()
{    
    var inDiv = document.getElementById("docListDiv");
    inDiv.setAttribute("style","width:100%;overflow:auto;height:550px");
    var intable = document.createElement("table");
    intable.id = "documentTable";
    intable.cellSpacing = "0";
    intable.style.width = "100%";
    intable.className="globalText";
    inDiv.appendChild(intable);
    inDiv.style.display = "block";
}
*/
function setCellWidthAndAlign(cll,wdth,algn)
{
    cll.style.width = wdth;
    cll.style.align = algn;
}


function addTableHeader()
{
    var tableDiv = document.getElementById("documentTableDiv");
    var mainTable = document.createElement("table");
    mainTable.id = "documentTable";
    //mainTable.style.width = "793";
    mainTable.style.width = "100%";
    mainTable.style.border = "0";
    mainTable.className = "formtext";
    mainTable.cellSpacing = "0";
    mainTable.cellPadding = "0";
    tableDiv.appendChild(mainTable);
    
    var intable = document.createElement("tbody");
    intable.id = "documentTableTBody";
    mainTable.appendChild(intable);
    
    var newRow = document.createElement("tr");
    intable.appendChild(newRow);
    var cell1 = document.createElement("td");//newRow.insertCell(0);
    //cell1.width = "232";
    cell1.style.backgroundColor = "#b8d4ec";
    cell1.className = "rowclear";
    cell1.innerHTML = "<strong>File Name: </strong>";
    newRow.appendChild(cell1);
    var cell2 = document.createElement("td");//newRow.insertCell(1);
    //cell2.width = "187";
    cell2.style.backgroundColor = "#b8d4ec";
    cell2.className = "rowclear";
    cell2.innerHTML = "<strong>File Type:</strong>";
    newRow.appendChild(cell2);
    var cell3 = document.createElement("td");//newRow.insertCell(2);
    //cell3.width = "209";
    cell3.style.backgroundColor = "#b8d4ec";
    cell3.className = "rowclear";
    cell3.innerHTML = "<strong>File Actions:";
    newRow.appendChild(cell3);
    var cell4 = document.createElement("td");//newRow.insertCell(3);
    //cell4.width = "181";
    cell4.style.backgroundColor = "#b8d4ec";
    cell4.className = "rowclear";
    cell4.innerHTML = "<strong> Date </strong>";
    newRow.appendChild(cell4);

    //Previous Sort has the recently sorted column name.
    var sortTypeStyle = (previousSort == 'Type')?"underline":"none";
    var sortDateStyle = (previousSort == 'Time')?"underline":"none";
    var sortNameStyle = (previousSort == 'Name')?"underline":"none";
    
    //
    var newRow2 = document.createElement("tr");
    intable.appendChild(newRow2);
    var cell1 = document.createElement("td");//newRow2.insertCell(0);
    cell1.style.padding = "5px 0 5px 10px";
    cell1.className = "formoptions";
    cell1.innerHTML = "<a href=\"javascript:selectOrDeselectAll(true)\">Select All</a> | <a href=\"javascript:selectOrDeselectAll(false)\">Deselect All</a>";
    newRow2.appendChild(cell1);
    var cell2 = document.createElement("td");//newRow2.insertCell(1);
    cell2.style.padding = "5px 0 5px 5px";
    cell2.className = "formoptions";
    cell2.innerHTML = "Sort by: <a id='Type' style='text-decoration:"+sortTypeStyle+"' href=\"javascript:sortAndPopulate('Type')\">Type</a>";
    newRow2.appendChild(cell2);
    var cell3 = document.createElement("td");//newRow2.insertCell(2);
    cell3.style.padding = "5px 0 5px 5px";
    cell3.className = "formoptions";
    cell3.innerHTML = "";
    newRow2.appendChild(cell3);
    var cell4 = document.createElement("td");//newRow2.insertCell(3);
    cell4.style.padding = "5px 0 5px 5px";
    cell4.className = "formoptions";
    cell4.innerHTML = "Sort by: <a id='Time' style='text-decoration:"+sortDateStyle+"' href=\"javascript:sortAndPopulate('Time')\">Date</a> | "+
                       "<a id='Name' style='text-decoration:"+sortNameStyle+"' href=\"javascript:sortAndPopulate('Name')\">Name</a>";
    newRow2.appendChild(cell4);
}
 

//booleean = true:: selects all the checkboxes
//booleean = false:: deselects all the checkboxes
function selectOrDeselectAll(booleean)
{
    var dbCount = DocumentListDB.length;
    for(var c = 0 ; c < dbCount ; c++)
    {
        var checkBxId = DocumentListDB[c].checkBxId;
        if(document.getElementById(checkBxId) != null)
        {
            document.getElementById(checkBxId).checked = booleean;
        }
    }
}

function sortAndPopulate(sortBy)
{
    if(previousSort == sortBy)
    {
        if(isAscending == "true")
        {
            sortByDesc(sortBy);
        }
        else
        {
            sortByAsc(sortBy);
        }
    }
    else
    {
        sortByDesc(sortBy)
    }
    previousSort = sortBy;
    searchDocAndPopulate();
}

function sortByAsc(sortBy)
{
    var docCount = DocumentListDB.length;
    if(sortBy == 'Name')
    {
        for(var ext = 0 ; ext < docCount ; ext++ )
        {
            for(var intr = 0 ; intr < docCount-1 ; intr++ )
            {
                var idd1 = DocumentListDB[intr].name;
                var idd2 = DocumentListDB[intr+1].name;
                if(idd1 > idd2 ) //ascending
                {
                    var tmp = DocumentListDB[intr+1];
                    DocumentListDB[intr+1] = DocumentListDB[intr];
                    DocumentListDB[intr] = tmp;
                }
            }
        }
    }
    else if(sortBy == 'Type')
    {
        for(var ext = 0 ; ext < docCount ; ext++ )
        {
            for(var intr = 0 ; intr < docCount-1 ; intr++ )
            {
                var idd1 = DocumentListDB[intr].type;
                var idd2 = DocumentListDB[intr+1].type;
                if(idd1 > idd2 ) //ascending
                {
                    var tmp = DocumentListDB[intr+1];
                    DocumentListDB[intr+1] = DocumentListDB[intr];
                    DocumentListDB[intr] = tmp;
                }
            }
        }
    }
    else if(sortBy == 'Time')
    {
        for(var ext = 0 ; ext < docCount ; ext++ )
        {
            for(var intr = 0 ; intr < docCount-1 ; intr++ )
            {
                var idd1 = 1*(DocumentListDB[intr].lastModTime);
                var idd2 = 1*(DocumentListDB[intr+1].lastModTime);
                if(idd1 > idd2 ) //ascending
                {
                    var tmp = DocumentListDB[intr+1];
                    DocumentListDB[intr+1] = DocumentListDB[intr];
                    DocumentListDB[intr] = tmp;
                }
            }
        }
    }
    //
    isAscending = "true";
}

function sortByDesc(sortBy)
{
    var docCount = DocumentListDB.length;
    if(sortBy == 'Name')
    {
        for(var ext = 0 ; ext < docCount ; ext++ )
        {
            for(var intr = 0 ; intr < docCount-1 ; intr++ )
            {
                var idd1 = DocumentListDB[intr].name;
                var idd2 = DocumentListDB[intr+1].name;
                if(idd1 < idd2 ) //descending
                {
                    var tmp = DocumentListDB[intr+1];
                    DocumentListDB[intr+1] = DocumentListDB[intr];
                    DocumentListDB[intr] = tmp;
                }
            }
        }
    }
    else if(sortBy == 'Type')
    {
        for(var ext = 0 ; ext < docCount ; ext++ )
        {
            for(var intr = 0 ; intr < docCount-1 ; intr++ )
            {
                var idd1 = DocumentListDB[intr].type;
                var idd2 = DocumentListDB[intr+1].type;
                if(idd1 < idd2 ) //descending
                {
                    var tmp = DocumentListDB[intr+1];
                    DocumentListDB[intr+1] = DocumentListDB[intr];
                    DocumentListDB[intr] = tmp;
                }
            }
        }
    }
    else if(sortBy == 'Time')
    {
        for(var ext = 0 ; ext < docCount ; ext++ )
        {
            for(var intr = 0 ; intr < docCount-1 ; intr++ )
            {
                var idd1 = 1*(DocumentListDB[intr].lastModTime);
                var idd2 = 1*(DocumentListDB[intr+1].lastModTime);
                if(idd1 < idd2 ) //descending
                {
                    var tmp = DocumentListDB[intr+1];
                    DocumentListDB[intr+1] = DocumentListDB[intr];
                    DocumentListDB[intr] = tmp;
                }
            }
        }
    }
    //
    isAscending = "false";
}

//Sorts tags based on docCount in descending order
function sortTagsOnCount()
{
    var tagsCnt = TagsListDB.length;
    if(tagsCnt > 0)
    {
        for(var i = 0 ; i < tagsCnt ; i++ )
        {
            for(var j = 0 ; j < tagsCnt-1 ; j++)
            {
                var tagCnt1 = 1*(TagsListDB[j].docCount);
                var tagCnt2 = 1*(TagsListDB[j+1].docCount);
                if(tagCnt1 < tagCnt2) // descending
                {
                    var tmp = TagsListDB[j+1];
                    TagsListDB[j+1] = TagsListDB[j];
                    TagsListDB[j] = tmp;
                }
            }
        }
    }
}

function searchDocAndPopulate()
{
    //
    showDocsListDiv();

    //Moving the div to top
    moveTheDocDivToTop("docListDiv");
    
    var dbCount = DocumentListDB.length;
    if(dbCount == 0)
    {
        displayNoDocDiv();
        return;
    }

    var searchValue = document.getElementById("searchField").value;
    //If searchField and currently selected tag values are empty ie.
    //they are not provided,populate the table without any check.
    if(searchValue == "" && currentTag == "")
    {
        populateTable();
        currentTag = "";
        document.getElementById("tag_showAllDocs").style.textDecoration = "underline";
        return;
    }
    clearDocTableAndAddHeader();
    //If searchField has selected
    if(searchValue != "" )
    {
        for(var cou = 0 ; cou < dbCount ; cou++)
        {
            var docName = DocumentListDB[cou].name;
            if(docName.match(searchValue) != null)
            {
                getAndAddRow(DocumentListDB[cou]);
            }
        }
        //
        actionOnSearchRslt();
    }
    //If tag has been selected 
    //else if(searchValue == "" && currentTag != "")
    else
    {
        var associatedDocs = getAssoDocIDsForCrntTag();
        var assoDocsCnt = associatedDocs.length;
        if(assoDocsCnt > 0 )
        {
            var dbCnt = DocumentListDB.length;
            for(var i = 0 ; i < dbCnt ; i++ )
            {
                var docIdCnt = associatedDocs.length;
                if(docIdCnt == 0)
                {
                    break;
                }
                var docId = DocumentListDB[i].id;
                for(var j = 0 ; j < docIdCnt ; j++ )
                {
                    if(docId == associatedDocs[j])
                    {
                        //Splicing the matched docId from the associatedDocs
                        associatedDocs.splice(j,1);
                        getAndAddRow(DocumentListDB[i]);
                        //Breaking this internal for loop
                        break;
                    }
                }
            }
        }
    }
    /*
    //If both the tag and searchField has been selected
    //Tag filter and the search filter
    else if(searchValue != "" && currentTag != "")
    {
        var associatedDocs = getAssoDocIDsForCrntTag();
        var assoDocsCnt = associatedDocs.length;
        if(assoDocsCnt > 0 )
        {
            var dbCnt = DocumentListDB.length;
            for(var i = 0 ; i < dbCnt ; i++ )
            {
                var docIdCnt = associatedDocs.length;
                if(docIdCnt == 0)
                {
                    break;
                }
                var docId = DocumentListDB[i].id;
                for(var j = 0 ; j < docIdCnt ; j++ )
                {
                    if(docId == associatedDocs[j])
                    {
                        //Splicing the matched docId from the associatedDocs
                        associatedDocs.splice(j,1);
                        //Search Field check
                        var docName = DocumentListDB[i].name;
                        if(docName.match(searchValue) != null)
                        {
                            getAndAddRow(DocumentListDB[i]);
                        }
                        //Breaking this internal for loop
                        break;
                    }
                }
            }
        }
        //
        isDocsMatchForSearch();
    }
    */
}

//Called once the table data is populated.
//If the table does not contain any documents, means the
//given search string is not matched with any of the documents.
function actionOnSearchRslt()
{
    var tbody = document.getElementById("documentTableTBody");
    var cnt = tbody.childNodes.length;
    //first two rows correspond to the header and the options
    if(cnt <= 2)
    {
        clearDocumentTable();
        var divE = document.getElementById("noDocMatchedForSearchDiv");
        divE.style.display = "block";
    }

    //Disabling the currently selected tag in the left hand side panel
    var curEle = "";
    if(currentTag == "")
    {
        curEle = document.getElementById("tag_showAllDocs");
    }
    else
    {
        curEle = document.getElementById("tag_"+currentTag);
    }
    curEle.style.textDecoration = "none";
    currentTag = "";
}

function hideDocsNotMatchOnSearchDiv()
{
    var divE = document.getElementById("noDocMatchedForSearchDiv");
    divE.style.display = "none";
}

//Gets the associated docId array for the currentTag
function getAssoDocIDsForCrntTag()
{
    var tagsCnt = TagsListDB.length;
    var associatedDocs = new Array();
    for(var cou = 0 ; cou < tagsCnt ; cou++)
    {
        var tagName = TagsListDB[cou].tagName;
        if(tagName == currentTag)
        {
            var docIdArr = TagsListDB[cou].docIdArray;
            associatedDocs = cloneArray(docIdArr);
            break;
        }
    }
    return associatedDocs;
}

//gets data from the DocumentListDB object and adds a row
function getAndAddRow(documentList)
{
    var docId = documentList.id;
    var docName = documentList.name;
    var docType = documentList.type;
    var modTime = documentList.lastModTime;
    var checkBxId = documentList.checkBxId;
    var doc_name_url = documentList.document_name_url;
    var readOnlyUsers = documentList.readOnlyUsers;
    var editUsers = documentList.editUsers;
    addrowsInTable( docId, docName, docType, modTime, checkBxId , doc_name_url);    
}

function clearDocTableAndAddHeader()
{
    clearDocumentTable();
    //clearHeaderTable();
    //
    hideDocsNotMatchOnSearchDiv();
    hideNoDocsAvailableDiv();
    //
    addTableHeader();
    //createDocumentTable();
}

function hideNoDocsAvailableDiv()
{
    divEle = document.getElementById("noDocsAvailable");
    divEle.innerHTML = "";
    divEle.style.display = "none";
}

function uploadDoc(docEle)
{
    var uplEle = document.getElementById("uploadDiv");
    var dimens = getRelativePos(docEle,uplEle,"20");
    uplEle.classname = "tagmenu";
    //uplEle.style.border = "1px solid black";
    //uplEle.align = "center";
    //uplEle.style.width = dimens[0];
    //uplEle.style.height = dimens[1];
    //uplEle.style.top = dimens[3];
    //uplEle.style.left = dimens[2];
    //uplEle.style.position = "absolute";
    //uplEle.style.backgroundColor = "#E4E4E4";
    //uplEle.style.border = "1px solid black";
    uplEle.style.display = "block";
}

function hideImportView()
{
    var upldLoadg = document.getElementById("uploadLoadingDiv");
    upldLoadg.innerHTML='';
    upldLoadg.style.display="none";
    var uplEle = document.getElementById("uploadDiv");
    var browseFieldId = document.getElementById("browseField");
    browseFieldId.value = '';
    uplEle.style.display = "none";
    //Enabling buttons 
    var uploadBtn = document.getElementById("uploadBttn");
    uploadBtn.disabled = false;    
    var cancelBtn = document.getElementById("cancelBttn");
    cancelBtn.disabled = false;
}

function getFileExtn()
{
    var fExtn;
    var fname;
    browsedoc = document.getElementById("browseField").value;
    if(browsedoc == null || trim(browsedoc) == "")
    {
        return;
    }
    if (browsedoc.lastIndexOf("/") != -1) 
    {
        fname = browsedoc.substring(browsedoc.lastIndexOf('/')+1,browsedoc.length);
    }
    else 
    {
        fname = browsedoc.substring(browsedoc.lastIndexOf('\\')+1,browsedoc.length);
    }

    if(fname.indexOf('.')!=-1)
    {
        fExtn = fname.substring(fname.lastIndexOf('.')+1);
        fname = fname.substring(0,fname.lastIndexOf('.'));
        //alert("file name::::::"+fname);
    }
    
    var arr = new Array();
    arr[0] = fname;
    arr[1] = fExtn;
    return arr;
}

function getFileType(fExtn)
{
    var fType = "";
    if(fExtn == "html" || fExtn == "doc" || fExtn == "sxw"
            || fExtn == "odt" || fExtn == "rtf" || fExtn == "txt")
    {
        fType = "document";
    }
    else if(fExtn == "xls" || fExtn == "ods" || fExtn == "sxc"
            || fExtn == "csv")
    {
        fType = "workbook";
    }
    else if(fExtn == "ppt" || fExtn == "pps" || fExtn == "odp" 
            || fExtn == "sxi")
    {
        fType = "presentation";
    }
    return fType;
}

function importDoc()
{
    //
    var specificDiv = document.getElementById("specificParameters");

    var fileLink = document.getElementById("browseField").value;
    if(fileLink == null || trim(fileLink) == "")
    {
        alert("Please select a file to upload");
        return;
    }
    var fArray = getFileExtn(fileLink);
    var fName = fArray[0];
    var fileExtn = fArray[1];
    //alert("Extn:::"+fileExtn);
    var fileType = getFileType(fileExtn);
    //alert("FileType::"+fileType);
    if(fileLink == null || trim(fileLink) == "")
    {
        alert("Please select a file to upload");
        return;
    }
    if(fileType != "document" && fileType != "workbook" && fileType != "presentation")
    {
        alert("Please select a valid file to upload");
        return;
    }
    var actionurll = "";
    if(fileType == "document")
    {
        actionurll = "http://export.writer.zoho.com/api/private/json/uploadDocument?apikey="+apikey+"&ticket="+ticketID;
    }
    else if(fileType == "workbook")
    {
        specificDiv.innerHTML = "<input type=\"hidden\" name=\"contentType\" value=\""+fileExtn+"\">"+
                                "<input type=\"hidden\" name=\"bookName\" value=\""+fName+"\">";
        actionurll = "http://sheet.zoho.com/api/private/json/uploadbook?apikey="+apikey
                  +"&ticket="+ticketID;
    }
    else if(fileType == "presentation")
    {
        specificDiv.innerHTML = "<input type=\"hidden\" name=\"contenttype\" value=\""+fileExtn+"\">"+
                                "<input type=\"hidden\" name=\"presentationname\" value=\""+fName+"\">";
        actionurll = "http://show.zoho.com/api/private/json/uploadpresentation?apikey="+apikey
                 +"&ticket="+ticketID;
    }

    //
    var upFrm = document.getElementById("uploadForm");
    upFrm.action = actionurll;
    lastUploadedFileType = fileType;
    upFrm.submit();
    //
    
    var upldLoadg = document.getElementById("uploadLoadingDiv");
    upldLoadg.innerHTML=loadingMsg;
    upldLoadg.style.display="block";
    //Disabling buttons 
    var uploadBtn = document.getElementById("uploadBttn");
    uploadBtn.disabled = true;    
    var cancelBtn = document.getElementById("cancelBttn");
    cancelBtn.disabled = true;
}

function iFrameOnLoad()
{
    //
    var spdiv = document.getElementById("specificParameters");
    spdiv.innerHTML = "";

    //Preventing from calling the AJAX call on page load or refresh
    if(lastUploadedFileType == "")
    {
        return;
    }
    
    //
    try
    {
        var urll = contextPath + '/getDocsList.do?method=getDocCount&docType='
                   +lastUploadedFileType;
        sendAsyncAJAXRequest('GET',urll,docCountResponse);
    }
    catch(e)
    {
        alert("Unable to upload document");
    }
}

function handleUploadResponse(rsltNode, tag1 , tag2)
{
    //alert("firstnode::"+tag1+"** countnode:"+tag2);
    var docNode = rsltNode[0].getElementsByTagName(tag1);
    var cntNode = docNode[0].getElementsByTagName(tag2);
    var countVal = cntNode[0].firstChild.data;
    log("CountVal From Server:::"+countVal);

    //Current count in client
    var currentDocCount = currentDocumentCountFromArray(lastUploadedFileType);
    log("CurrentDocCount in client:"+currentDocCount+"********* TYPE:"+lastUploadedFileType);

    if(countVal == (currentDocCount+1))
    {
        window.location.reload();
    }
    else if(countVal == currentDocCount) 
    {
        alert("Unable to upload the selected document");
    }
    
    //Setting the lastUploadedFileType to empty string
    lastUploadedFileType = "";
}

function docCountResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        hideImportView(); 
        var response = xmlhttp.responseXML;
        var resultNode = response.getElementsByTagName('result');
        //Unable to get the response from the server
        if(resultNode == null && resultNode[0] == null)
        {
            //alert("Unable to upload the file.Please try again.");
            return;
        }
        if(lastUploadedFileType == 'document')
        {
            handleUploadResponse(resultNode,"documents","documentsCount");
        }
        else if(lastUploadedFileType == 'workbook')
        {
            handleUploadResponse(resultNode,"workbooks","workbooksCount");
        }
        else if(lastUploadedFileType == 'presentation')
        {
            handleUploadResponse(resultNode,"presentations","presentationsCount");
        }
    }
}

function currentDocumentCountFromArray(docType)
{
    var dbCount = DocumentListDB.length;
    var docCount = 0;
    for(var i = 0 ; i < dbCount ; i++ )
    {
        var docTypeInDB = DocumentListDB[i].type;
        if( docTypeInDB == docType)
        {
            docCount = docCount+1;
        }
    }
    return docCount;
}

function setSelectedTag(tag)
{
     //If currently selected tag(incoming tag) is same as
     //that of the previous tag, returns with out any operation
     //if(currentTag == tag)
     //{
     //    return;
     //}
     var curEle = "";
     var nextEle = "";
     if(currentTag == "")
     {
         curEle = document.getElementById("tag_showAllDocs");
     }
     else
     {
         curEle = document.getElementById("tag_"+currentTag);
     }
     if(tag == "")
     {
         nextEle = document.getElementById("tag_showAllDocs");
     }
     else
     {
         nextEle = document.getElementById("tag_"+tag);
     }
     //Making the search field disable
     document.getElementById("searchField").value = "";
     curEle.style.textDecoration = "none";
     nextEle.style.textDecoration = "underline";
     currentTag = tag;
     if(tag == 'showSharedDocs')
     {
         currentlySlctdView = "sharedDocuments";
         showSharedDocsTable();
     }
     else
     {
        currentlySlctdView = "myDocuments";
        searchDocAndPopulate();
     }
}

function showDocsListDiv()
{
    //
    hideSharedDocsTable();

    var docDiv = document.getElementById("docListDiv");
    docDiv.style.display = "block";
    var docOpDiv = document.getElementById("docsOptionsDiv");
    docOpDiv.style.display = "block";
}

function hideDocsListDiv()
{
    var docDiv = document.getElementById("docListDiv");
    docDiv.style.display = "none";
    var docOpDiv = document.getElementById("docsOptionsDiv");
    docOpDiv.style.display = "none";
}

function showSharedDocsTable()
{
    //Hiding uplod div 
    hideImportView();
    //Hiding share div
    hideShareDoc();

    //Hiding the docListDiv
    hideDocsListDiv();

    //
    //Clearing the shared docs table
    var divEle = document.getElementById("sharedDocTable");
    divEle.innerHTML = "";

    var shrDiv = document.getElementById("sharedDocListDiv");
    shrDiv.style.display = "block";

    //if(isSharedDataFetched)
    //{
    //    populateSharedDocData('');
    //}
    //else
    //{
   
    SharedDocsDB = new Array();
    getSharedDataFromServer();
    //}
}

function hideSharedDocsTable()
{
    var shrDiv = document.getElementById("sharedDocListDiv");
    shrDiv.style.display = "none";
}

//
var SharedDocsDB = new Array();

var isSharedDataFetched = false;

function SharedDoc(id,type,name,lastModTime,doc_name_url,writePermission,ownerName)
{
    this.id = id;
    //In Show services, if "'" present in the name, same has
    //been put as "&apos;".To make presentation names sync with the
    //other services, replacing "&apos;" with "'".
    if(type == "presentation")
    {
        name = replaceStr(name,"&apos;","\'");
    }
    this.name = name;
    if(type == 'incomingWorkbook')
    {
        type = 'workbook';
    }
    else if(type == 'incomingPresentation')
    {
        type = 'presentation';
    }
    this.type = type;
    this.lastModTime = lastModTime;
    this.document_name_url = doc_name_url;
    this.writePermission = writePermission;
    this.ownerName = ownerName;
}

function getSharedDataFromServer()
{
    try
    {
        var loadg = document.getElementById("loadingDiv");
        loadg.innerHTML=loadingMsg;
        loadg.style.display="block";
        sendAsyncAJAXRequest('GET',
                contextPath + '/getDocsList.do?method=getSharedDocsList',sharedDocResponse);
    }    
    catch(e)
    {
        alert("Unable to process the request ");
    }
}

function sharedDocResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var loadg = document.getElementById("loadingDiv");
        loadg.style.display="none";

        var xmll = xmlhttp.responseXML;
        //alert("sharedDocResponse::::::::::"+xmll);
        

        //Error response ***************
        var errorNode = xmll.getElementsByTagName('ErrorResponseFor');
        if(errorNode != null && errorNode.item(0) != null )
        {
            var services = errorNode.item(0).attributes[0].value;
            var servArray = services.split(',');
            //Exception occurs in the Writer or Workbook response or both
            if(servArray != null && servArray.length > 0)
            {
                //
                var servArrLength = servArray.length;
                var alertMssg = "Unable to fetch shared ";
                for(var i = 0 ; i < servArrLength ; i++ )
                {
                    if(i != 0)
                    {
                        alertMssg = alertMssg + " and ";
                    }
                    alertMssg = alertMssg + servArray[i] ;
                }
                if(alertMssg != "Unable to fetch shared ")
                {
                    alert(alertMssg);
                }
                //Means the xml doesnt contain response for any of the services
                if(servArrLength == 3)
                {
                    return;
                }
            }
        }
        //

        var doccc = xmll.getElementsByTagName('result');
        if(doccc != null && doccc.item(0) != null )
        {
            if(doccc.item(0).getElementsByTagName('incomingdocuments').length != 0)
            {
                var documents = doccc.item(0).getElementsByTagName('incomingdocuments')[0];
                parseAndAddInSharedArray(documents,"document","documentName","documentId","lastModifiedTime","writePermission","authorName");
            }
            if(doccc.item(0).getElementsByTagName('incomingWorkbooks').length != 0)
            {
                var worksheets = doccc.item(0).getElementsByTagName('incomingWorkbooks')[0];
                parseAndAddInSharedArray(worksheets, "incomingWorkbook", "workbookName","workbookId","lastModifiedTime","allowToWrite","ownerName");
            }
            if(doccc.item(0).getElementsByTagName('incomingPresentations').length != 0)
            {
                var presenations = doccc.item(0).getElementsByTagName('incomingPresentations')[0];
                parseAndAddInSharedArray(presenations,"incomingPresentation","presentationName","presentationId","lastModifiedTime","allowToWrite","ownerName");
            }
            populateSharedDocData('');
            isSharedDataFetched = true;
        }
    }
}


function parseAndAddInSharedArray(documents,docType,tag1,tag2,tag3,tag4,tag5)
{
    var document = documents.getElementsByTagName(docType);
    var docCount = document.length;
    //alert(tag1+":::"+docCount);
    for(var i = 0 ; i < docCount ; i++ )
    {
        var docname = document.item(i).getElementsByTagName(tag1)[0].firstChild.data;
        var idd = document.item(i).getElementsByTagName(tag2)[0].firstChild.data;
        var time = document.item(i).getElementsByTagName(tag3)[0].firstChild.data;
        var doc_name_url = "";
        if(docType == "document")
        {
            doc_name_url = document.item(i)
                .getElementsByTagName("document_name_url")[0].firstChild.data;
        }
        var writePermission = document.item(i).getElementsByTagName(tag4)[0].firstChild.data;
        var ownerName = document.item(i).getElementsByTagName(tag5)[0].firstChild.data;
        SharedDocsDB[SharedDocsDB.length] = 
            new SharedDoc(idd,docType,docname,time,doc_name_url,writePermission,ownerName);
    }
}

function recreateSharedListTable()
{
     var divEle = document.getElementById("sharedDocTable");
     divEle.innerHTML = "<table cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" class=\"formtext\" border=\"0\">"+
                          "<tbody id=\"sharedDocTbody\"> <tr>"+
                          "<td class=\"rowclear\" style=\"background-color:#b8d4ec\"><strong>File Name:</strong></td>"+
                          "<td class=\"rowclear\" style=\"background-color:#b8d4ec\"><strong>File Type:</strong></td>"+
                          "<td class=\"rowclear\" style=\"background-color:#b8d4ec\"><strong>File Actions:</strong></td>"+
                          "<td class=\"rowclear\" style=\"background-color:#b8d4ec\"><strong>Date</strong></td>"+
                          "</tr></tbody></table>";
    divEle.style.display = "block";
}

function populateSharedDocData(enableSearch)
{
    var ln = SharedDocsDB.length;
    var divEle = document.getElementById("noSharedDocAvailable");
    if(ln == 0)
    {
        divEle.innerHTML = "&nbsp;<br> &nbsp;No shared document available. <br> &nbsp;";
        divEle.style.display = "block";
        return;
    }
    
    //createTableAndAddHeader
    recreateSharedListTable();

    //Hiding* if search not matched in previous query and matches in the current query
    divEle.style.display = "none";

    var divEEle = document.getElementById("sharedDocTable");
    divEEle.style.display = "block";

    var srchVal = document.getElementById("searchField").value; 
    if(enableSearch == 'enable' && srchVal != null && srchVal != "")
    {
        var isMatched = false;
        for(var i = 0 ; i < ln ; i++ )
        {
            var docId = SharedDocsDB[i].id;
            var docName = SharedDocsDB[i].name;
            var docType = SharedDocsDB[i].type;
            var modTime = SharedDocsDB[i].lastModTime;
            var doc_name_url = SharedDocsDB[i].document_name_url;
            var writePermission = SharedDocsDB[i].writePermission;
            var ownerName = SharedDocsDB[i].ownerName;
            if(docName.match(srchVal) != null)
            {
                addrowsInShareDocTable( docId, docName, docType, modTime, doc_name_url,writePermission,ownerName);
                isMatched = true;
            }
        }
        if(!isMatched)
        {
            divEle.innerHTML = "&nbsp;<br> &nbsp;There are no document that match your search.<br> &nbsp;";
            divEle.style.display = "block";
        }
    }
    else
    {
        for(var i = 0 ; i < ln ; i++ )
        {
            var docId = SharedDocsDB[i].id;
            var docName = SharedDocsDB[i].name;
            var docType = SharedDocsDB[i].type;
            var modTime = SharedDocsDB[i].lastModTime;
            var doc_name_url = SharedDocsDB[i].document_name_url;
            var writePermission = SharedDocsDB[i].writePermission;
            var ownerName = SharedDocsDB[i].ownerName;
            addrowsInShareDocTable( docId, docName, docType, modTime, doc_name_url,writePermission,ownerName);
        }
    }
}

function addrowsInShareDocTable( docId, docName, docType, modTime, doc_name_url , writePermission,ownerName)
{
    
    //Name to be used in getting editor page url
    var editorDocName = docName;
    //ImageName w.r.t type
    var imageDisplayNamesArray = getImageNameAndDisplayType(docType);
    var imageName = imageDisplayNamesArray[0]
    //Display Type
    var displayDocType = imageDisplayNamesArray[1];
    //For Writer, document_name_url to be passed in getting the editor.
    if(docType == "document")
    {
        editorDocName = doc_name_url;
        //alert("addrowsInTable::editorDocName For Document::"+editorDocName);
    }
    //Wrapping special characters in docName to avoid problem
    //while passing across functions.
    var wrappedDocName = wrapUnwrapSplChar(docName,"wrap");
    //
    modTime = timeInString(modTime);
    var seperator = " | ";
    var exportId = docId+"_exp";
    var intable = document.getElementById("sharedDocTbody");
    //Current row count
    var curRowCnt = intable.childNodes.length;
    var rclass = getRowColor(curRowCnt);    
    //
    var newRow = document.createElement("tr");
    newRow.id = docId;
    intable.appendChild(newRow);

    //
    var dispDocName = docName;
    if(dispDocName.length > 23)
    {
        dispDocName = dispDocName.substring(0,20);
        dispDocName = dispDocName+"...";
    }

    var cell1 = document.createElement("td");//newRow.insertCell(0);
    cell1.className = rclass;
    cell1.innerHTML = "<span title=\""+docName+"\">"+ dispDocName+"</span>";
    newRow.appendChild(cell1);

    var cell2 = document.createElement("td");//newRow.insertCell(1);
    cell2.className = rclass;
    cell2.innerHTML = "<img src='" + contextPath + "/images/"+imageName+"' width=\"21\" height=\"22\" align=\"absmiddle\" class=\"docimg\"/>"+displayDocType;
    newRow.appendChild(cell2);
   
    var cell3 = document.createElement("td");//newRow.insertCell(2);
    cell3.className = rclass;
    if(writePermission == "true")
    {
        cell3.innerHTML = "<a href=\"javascript:getPreview('"+docId+"','"+docType+"','"+wrappedDocName+"','"+ownerName+"')\">Preview</a> | <a href=\"" + contextPath +"/getDocsList.do?method=getEditorPage&docId="+ docId + "&docType=" + docType +"&apiTicket="+ticketID+ "&docName="+editorDocName+"\">Edit</a> | <a  id='"+exportId+"' href=\"javascript:doExport('"+docId+"','"+wrappedDocName+"','"+docType+"','"+exportId+"','"+doc_name_url+"','"+ownerName+"')\">Export</a>";
    }
    else
    {
        cell3.innerHTML = "<a href=\"javascript:getPreview('"+docId+"','"+docType+"','"+wrappedDocName+"','"+ownerName+"')\">Preview</a> |  <a  id='"+exportId+"' href=\"javascript:doExport('"+docId+"','"+wrappedDocName+"','"+docType+"','"+exportId+"','"+doc_name_url+"','"+ownerName+"')\">Export</a>";
    }

    newRow.appendChild(cell3);

    var cell4 = document.createElement("td");//newRow.insertCell(3);
    cell4.className = rclass;
    cell4.innerHTML = "<em>"+modTime+"</em>";
    newRow.appendChild(cell4);
}

function shareTheDoc(docType,docId)
{
    //alert("shareTheDoc:::::::::::docType:"+docType+"**docId:"+docId+"**");
    var readDoc = document.getElementById("shareDoc_View");
    var editDoc = document.getElementById("shareDoc_Edit");

    var readUsers = readDoc.value;
    var editUsers = editDoc.value;
    if(readUsers == null && editUsers == null )
    {
        alert("No users specified to share.");
        readDoc.focus();
        return;
    }
    readUsers = ""+readUsers;
    editUsers = ""+editUsers;
    readUsers = trim(readUsers);
    editUsers = trim(editUsers);
    
    if(readUsers == "" && editUsers == "" )
    {
        alert("No users specified to share.");
        readDoc.focus();
        return;
    }
    if(!checkMailIds(readUsers))
    {
        readDoc.focus();
        return;
    }
    if(!checkMailIds(editUsers))
    {
        editDoc.focus();
        return;
    }
    
    var users = crossCheckSharedDetails(readUsers,editUsers,docId);
    readUsers = users[0];
    editUsers = users[1];

    //If the mails to be shared are already shared
    if(readUsers == "" && editUsers == "")
    {
        showSharedDetailsDiv();
    }

    try
    {
        document.getElementById('submitBttnShare').disabled = true; 
        var urll = contextPath +"/getDocsList.do?method=shareDocument"+
                    "&readOnly="+readUsers+"&edit="+editUsers+"&type="+docType
                    +"&docId="+docId+"&userName="+userName;
        var divEle = document.getElementById("shareLoadingDiv");
        divEle.innerHTML = "Sharing... <img src='" + contextPath + "/images/loading.gif'>";
        divEle.style.display = "block";
        sendAsyncAJAXRequest('GET', urll,shareResponse);
    }
    catch(e)
    {
        alert("unable to process the request.");
    }
}

function crossCheckSharedDetails(readUsers,editUsers,docId)
{
    var exstReadUsers = "";
    var exstEditUsers = "";
    for(var x in DocumentListDB)
    {
        var idd = DocumentListDB[x].id;
        if(idd == docId)
        {
            exstReadUsers = ""+DocumentListDB[x].readOnlyUsers;
            exstEditUsers = ""+DocumentListDB[x].editUsers;
            break;
        }
    }

    var cmpltSharedMailIds = "";

    if(exstReadUsers != null && trim(exstReadUsers) != "")
    {
        cmpltSharedMailIds = exstReadUsers ;
    }
    if(exstEditUsers != null && trim(exstEditUsers) != "")
    {
        if(cmpltSharedMailIds == null || cmpltSharedMailIds == "")
        {
            cmpltSharedMailIds = exstEditUsers;
        }
        else
        {
            cmpltSharedMailIds = cmpltSharedMailIds + "," + exstEditUsers;
        }
    }

    //Removing the view mailIds present in the view&write mail ids
    readUsers = removeCommonArray(editUsers,readUsers);

    //Removing the already shared mail ids from read only mail ids to be shared
    readUsers = removeCommonArray(cmpltSharedMailIds,readUsers);

    //Removing the already shared mail ids from edit mail ids to be shared
    editUsers = removeCommonArray(cmpltSharedMailIds,editUsers);

    var tmpArr = new Array();
    tmpArr[0] = trim(readUsers);
    tmpArr[1] = trim(editUsers);
    //alert("TTT:::::::::::::::::::"+tmpArr);
    return tmpArr;

}

//Removes the common mail ids from processMailIds and removes
//the same in string format
function removeCommonArray(mainMailIds,processMailIds)
{
    if(processMailIds != "")
    {
        var arr1 = processMailIds.split(",");
        if(mainMailIds != "")
        {
            var arr2 = mainMailIds.split(",");
            for(var x in arr2)
            {
                var idd = arr2[x];
                idd = trim(idd);
                for(var y in arr1)
                {
                    var tmpidd = arr1[y];
                    tmpidd = trim(tmpidd);
                    if(idd == tmpidd)
                    {
                        arr1.splice(y,1);
                        break;
                    }
                }
            }
        }
        if(arr1.length == 0)
        {
            processMailIds = "";
        }
        else
        {
            processMailIds = arr1.toString();
        }
    }
    return trim(processMailIds);
}

function shareResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var isErrorOccured = false;
        document.getElementById('submitBttnShare').disabled = false; 
        var divEle = document.getElementById("shareLoadingDiv");
        divEle.style.display = "none";
        var resp = xmlhttp.responseText;
        if(resp != null)
        {
            var evResp = eval('('+resp+')');
            var ln = evResp.length;
            var ttype = evResp[0].type;
            var nonRegisteredUsers = evResp[(ln-1)].nonRegisteredUsers;
            
            var docType = "";
            var allReadOnlyUsers = "";
            var allEditUsers = "";
            var docId = "";
            
            if(ttype == "writer" || ttype == "show")
            {
                if(ttype == "writer")
                {
                    docType = "document";
                }
                else if(ttype == "show")
                {
                    docType = "presentation";
                }
                var errorIn = "";
                for(var i = 1 ; i < ln-1 ; i++)
                {
                    var acRsp = evResp[i];
                    var sharedTo = "";
                    if(evResp[i].readonly != null)
                    {
                        if(evResp[i].readonly.response.result == null)
                        {
                            errorIn = "Read Only";
                        }
                        else
                        {
                           //Writer docs
                           if(ttype == "writer")
                           {
                               sharedTo = evResp[i].readonly.response.result.sharedto;
                               docId = evResp[i].readonly.response.result.documentId;
                               var usr = sharedTo.user;
                               if(usr.length != null || usr.length == 0)
                               {
                                  allReadOnlyUsers = updateSharedMailId(docId,usr,"add","readOnly");
                               }
                               else
                               {
                                   for(var x in usr)
                                   {
                                       var idd = usr[x];
                                       allReadOnlyUsers = updateSharedMailId(docId,idd,"add","readOnly");
                                   }
                               }
                           }
                           //Show docs
                           else if(ttype == "show")
                           {
                                docId = evResp[i].readonly.response.result.presentationId;
                                sharedTo = evResp[i].readonly.response.result.sharedTo;
                                if(sharedTo != null && sharedTo != "")
                                {
                                    var userROInputs = document.getElementById("shareDoc_View").value;
                                    var commonIds = getCommonMailIds(sharedTo,userROInputs);
                                    for(var x in commonIds)
                                    {
                                        var idd = commonIds[x];
                                        allReadOnlyUsers = updateSharedMailId(docId,idd,"add","readOnly");
                                    }
                                }
                           }
                        }
                    }
                    else if(evResp[i].edit != null)
                    {
                        if(evResp[i].edit.response.result == null)
                        {
                            if(errorIn != "")
                            {
                                errorIn = "Read/Write";
                            }
                            else
                            {
                                errorIn = errorIn + " and Read/Write";
                            }
                        }
                        else
                        {
                            //writer docs
                            if(ttype == "writer")
                            {
                                sharedTo = evResp[i].edit.response.result.sharedto;
                                docId = evResp[i].edit.response.result.documentId;
                                var usr = sharedTo.user;
                                if(usr.length != null || usr.length == 0)
                                {
                                    allEditUsers = updateSharedMailId(docId,usr,"add","readWrite");
                                }
                                else
                                {
                                    for(var x in usr)
                                    {
                                        var idd = usr[x];
                                        allEditUsers = updateSharedMailId(docId,idd,"add","readWrite");
                                    }
                                }
                            }
                            //show docs
                            else if(ttype == "show")
                            {
                                docId = evResp[i].edit.response.result.presentationId;
                                sharedTo = evResp[i].edit.response.result.sharedTo;
                                if(sharedTo != null && sharedTo != "")
                                {
                                    var userEdtInputs = document.getElementById("shareDoc_Edit").value;
                                    var commonIds = getCommonMailIds(sharedTo,userEdtInputs);
                                    for(var x in commonIds)
                                    {
                                        var idd = commonIds[x];
                                        allEditUsers = updateSharedMailId(docId,idd,"add","readWrite");
                                    }
                                }
                            }
                        }
                    }
                }
                if(errorIn != "")
                {
                    alert("Unable to share the document to "+errorIn+" mail Ids.");
                    isErrorOccured = true;
                }
            }
            else if(ttype == "sheet")
            {
                docType = "workbook";
                if(ln == 3)
                {
                    var rspp = evResp[1].response.result;
                    if(rspp == null)
                    {
                        alert("Unable to share the document.");
                        //return;
                    }
                    else
                    {
                        var readOnlyUsr = rspp.readOnlyUsers.user;
                        var editUser = rspp.readWriteUsers.user;
                        docId = rspp.workbookId;
                        for(var xy in readOnlyUsr)
                        {
                            var idd = readOnlyUsr[xy].emailId;
                            allReadOnlyUsers = updateSharedMailId(docId,idd,"add","readOnly");
                        }
                        for(var yx in editUser)
                        {
                            var idd = editUser[yx].emailId;
                            allEditUsers = updateSharedMailId(docId,idd,"add","readWrite");
                        }
                    }
                }
            }

            //non registered users
            if(nonRegisteredUsers != null && trim(nonRegisteredUsers) != "")
            {
                var nonRUser = nonRegisteredUsers.toString();
                nonRUser = replaceStr(nonRUser,",","\n");
                alert("Unable to share the documents for the email Ids \n \n"+nonRUser);
                isErrorOccured = true;
            }
            
            /*
            hideShareDoc();

            if(!isErrorOccured)
            {
                alert("Document shared successfully.");
            }
            */

            //
            //Forming shared details table
            if(docId != null && docId != "")
            {
               formShareTab2(docId,docType);
            }
            showSharedDetailsDiv();
            

        }
        else
        {
            alert("Unable to share the document.");
        }
    }
}

//Used in finding out the shared show emailids. 
//On sharing,show will give the complete shared emailids.To split
//the currently shared and already shared email ids, this method
//is used. mailIds1 contains the completly shared wheread mailIds2 contains
//currently shared.
//Returns only the currently shared in array format.
function getCommonMailIds(mailIds1,mailIds2)
{
    var arr1 = mailIds1.split(",");
    var arr2 = trim(mailIds2).split(",");
    var tmpArr = new Array();
    for(var x in arr2)
    {
        var idd = trim(arr2[x]);
        for(var y in arr1)
        {
           var tmpidd = trim(arr1[y]);
           if(idd == tmpidd)
           {
               tmpArr[tmpArr.length] = idd;
               break;
           }
        }
    }
    return tmpArr;
}

var mailIdfilter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

function checkMailIds(mailIds)
{
    var strArr = mailIds.split(",");
    for(var x in strArr)
    {
        var mId = strArr[x];
        mId = trim(mId);
       if(trim(mId) != "" && !mailIdfilter.test(mId))
       {
           alert(mId+" is not a valid email id.");
           return false;
       }
    }
    return true;
}

//Returns a string array with first array containing the 
//emailIds available only in usrIds1 and the second containing
//emailIds available only in usrIds2
function compareArrays(usrIds1,usrIds2)
{
    var newIds = "";
    var rmvdIds = "";
    
    var arr1 = usrIds1.split(",");
    var arr2 = usrIds2.split(",");

    var arr2Indxs = new Array();
    for(var x in arr2)
    {
        var idd = arr2[x];
        for(var y in arr1)
        {
            var tmpidd = arr1[y];
            if(idd == tmpidd)
            {
                //Splicing the id from array1
                arr1.splice(y,1);
                arr2Indxs[arr2Indxs.length] = idd;
            }
        }
    }
    
    //Splicing the common ids from arr2 using arr2Indxs
    var arr2ln = arr2Indxs.length;
    if(arr2ln > 0)
    {
        for(var i = arr2ln-1 ; i >= 0 ; i-- )
        {
            var indx = arr2Indxs[i];
            arr2.splice(indx,1);
        }
    }

    newIds = arr1.toString();
    rmvdIds = arr2.toString();

    var tmpArr = new Array();
    tmpArr[0] = newIds;
    tmpArr[1] = rmvdIds;

    return tmpArr;
}

function showShareDiv()
{
    document.getElementById("shareDoc_View").value = "";
    document.getElementById("shareDoc_Edit").value = "";
    document.getElementById("tab1_option").style.borderBottom = "0px";
    document.getElementById("tab2_option").style.borderBottom = "1px solid" ;
    document.getElementById("shareTab2").style.display = "none";
    document.getElementById("shareTab1").style.display = "block";
    //Setting focus on read doc view
    document.getElementById("shareDoc_View").focus();
}

function showSharedDetailsDiv()
{
    document.getElementById("tab2_option").style.borderBottom = "0px";
    document.getElementById("tab1_option").style.borderBottom = "1px solid";
    document.getElementById("shareTab2").style.display = "block";
    document.getElementById("shareTab1").style.display = "none";
}

function doSearchInDoc()
{
    if(currentlySlctdView == "sharedDocuments")
    {
        populateSharedDocData('enable');
    }
    else
    {
        searchDocAndPopulate();
    }
}
