//Stores the USERID
var userId = getUserIDFromCookie();

//Stores the bookmarks details including Folder name
var BookMarksDB = new Array();

//Stores the Folders information
var FoldersDB = new Array();

//Stores the Tag Vs BookMarkID information
var TagVsBMIdDB = new Array();

//current selected parameter
var currentSlxn = "";

//current selected folder
var currentFolder = "";

//current selected Tag
var currentTag = "";

//current search value
var currentSearch = "";

//current Sort
//by default the sort is based on Date
var  previousSort = "Date";

//Sort ascending/descending order
//By default the bookmarks are sorted by lastEdited and in descending order
var isAscending = false;

//Stores the endIndex array, used in displaying nextX and prevX bookmarks
var endIndexArray = new Array();

//Stores the limit of next X article
var nextXArticleLimit = 5;


function BookMark(title,location,description,lastEdited,folderName,bookmarkId)
{
    this.title = title;
    this.location = location;
    this.description = description;
    this.lastEdited = 1*(lastEdited);
    this.folderName = folderName;
    this.bookmarkId = bookmarkId;
}

function Folder(folderId , folderName)
{
    this.folderId = folderId;
    this.folderName = folderName;
}

function TagVsBMIds(tagName , bmIdArray)
{
    this.tagName = tagName;
    this.bmIdArray = bmIdArray;
}

function getBookMarks()
{
    try
    {
        //alert("called:: UserId::"+userId);
        var urll = contextPath + "/bookmarks.do?method=getBookMarks&userId="+userId;
        sendAsyncAJAXRequest('GET',urll,bookmarksResponse);
    }
    catch(e)
    {
        alert("Unable to get bookmarks");
    }
}

//First element in the response contains bookmark details()
//Second element in the response contains folder details()
//third element in the response contains tag details()
function bookmarksResponse(xmlhttp)
{
    if (xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result != null && resp[0].result == "error")
        {
            alert("Unable to fetch bookmarks ");
            return;
        }
        var bookmarks = resp[0];
        var folders = resp[1];
        var tagVsbmId = resp[2];
        parseAndAddFolders(folders);
        parseAndAddTagsVsBM(tagVsbmId);
        parseAndAddBookMarks(bookmarks);
    }
}

function parseAndAddBookMarks(bookmarks)
{
    var bmLngth = bookmarks.length;
    var bookmarksTbody = '';
    if(bmLngth > 0)
    {
        formBookmarksTable();
        bookmarksTbody = document.getElementById("bookmarkTableTBody");
    }
    
    for(var cnt = 0 ; cnt < bmLngth ; cnt++ )
    {
        var bm = bookmarks[cnt];
        var bookmarkId = bm.BookMarkID;
        var title = bm.Title;
        var description = bm.Description;
        var location = bm.Location;
        var lastEdited = bm.LastEdited;
        var folderName = bm.FolderName;
        var bookmark =  new BookMark(title,location,description,lastEdited,folderName,bookmarkId);
        BookMarksDB[BookMarksDB.length] = bookmark;
        //addBookMarkInList(bookmark,bookmarksTbody);
    }
    //Since by default the bookmarks list is sorted based on Date in Descending order,
    //displaying bookmarks with out any sorting.
    populateBookMarksTable();
}

function parseAndAddFolders(folders)
{
    var foldersDiv = document.getElementById("foldersDiv");
    var fldrsLngth = folders.length;
    for(var cn = 0 ; cn < fldrsLngth ; cn++ )
    {
        var folderId = folders[cn].FolderID;
        var folderName = folders[cn].FolderName;
        FoldersDB[FoldersDB.length] = new Folder(folderId,folderName);
        populateFolders(folderId,folderName,foldersDiv);
    }
}

function parseAndAddTagsVsBM(tagVsBMId)
{
    var tagsDiv = document.getElementById("TagsDiv");
    var lngth = tagVsBMId.length;
    for(var cn = 0 ; cn < lngth ; cn++)
    {
        var tagName = tagVsBMId[cn].TagName;
        var bmIdArray = tagVsBMId[cn].BMIdArray;
        TagVsBMIdDB[TagVsBMIdDB.length] = new TagVsBMIds(tagName , bmIdArray);
        //TODO******************** Default sorting and then displaying is preferable ********
        populateTags(tagName,bmIdArray,tagsDiv);
    }
}

function populateFolders(folderId,folderName,foldersDiv)
{
    var folderInnerHtml = getFolderHTMLContent(folderId,folderName);
    foldersDiv.innerHTML = foldersDiv.innerHTML +  
                            "<li id=\"folder_"+folderId+"\">" 
                            +folderInnerHtml + "</li>";
}

function getLeftHandDisplayString(str,substrLength)
{
    var disFold = str;
    if(str.length > substrLength)
    {
        disFold = str.substring(0,(substrLength-3));
        disFold = disFold+"...";
    }
    return disFold;
}

function getMapContent(folderId,folderName)
{
      var mappContent = "<MAP NAME=\"MAP_"+folderId+"\"> <AREA HREF=\"javascript:editFolder('"+folderId+"','"+folderName+"')\" COORDS=\"0,0,33,10\"> <AREA HREF=\"javascript:onFolderDelete('"+folderId+"')\" COORDS=\"34,0,73,10\"></MAP>";
      return mappContent;
}

function getFolderHTMLContent(folderId,folderName)
{
      //matching map
      var mappContent = getMapContent(folderId,folderName);  
      //

      var disFold = getLeftHandDisplayString(folderName,11);
      var innContent =  "<div id=\"displayFolderDiv_"+folderId+"\" onmouseover=\"javascript:showFolderOptions('"+folderId+"')\" onmouseout=\"javascript:hideFolderOptions('"+folderId+"')\"><table><tr><td style=\"font-size:12px; font-weight:normal;\"><a title=\""+folderName+"\" href=\"javascript:setSelectedFolder('"+folderName+"')\">"+disFold+"</a></td><td><div id=\"showImage_"+folderId+"\" style=\"display:none\">"+mappContent+"<img src=\"images/option.gif\" USEMAP=\"#MAP_"+folderId+"\"></div></td></tr></table></div>"+
                      "<div id=\"renameDiv_"+folderId+"\" style=\"display:none\"></div>";
      return innContent;
}

function onFolderDelete(folderId)
{
    if(!confirm("Deleting a folder will delete all the related bookmark(s).Do you want to proceed?"))
    {
        return;
    }
    //alert("folderIDDDDDDDDDDD::"+folderId);
    //AJAX request
    try
    {
        var urll = contextPath + "/bookmarks.do?method=deleteFolder"+
            "&folderId="+folderId;
        sendAsyncAJAXRequest('GET',urll,deleteFolderResponse);
    }
    catch(e)
    {
        alert("Unable to process the request");
    }
}

function deleteFolderResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result == "error")
        {
            alert("Unable to delete the folder");
            return;
        }
        handleOnFldrDelete(resp);
    }
}

function handleOnFldrDelete(resp)
{
    var folderId = resp[0].folderId;
    var folderName = "";
    //alert("Response:::"+folderId);

    //FoldersDB update and panel update
    var dbLn = FoldersDB.length;
    for(var cn = 0 ; cn < dbLn ; cn++ )
    {
        var fId = FoldersDB[cn].folderId;
        if(fId == folderId)
        {
            folderName = FoldersDB[cn].folderName;
            FoldersDB.splice(cn,1);
            break;
        }
    }
    //Removing the folder from the panel
    var foldersDiv = document.getElementById("foldersDiv");
    var divEle = document.getElementById("folder_"+folderId);
    foldersDiv.removeChild(divEle);

    //Splicing the BookMarksDB and getting the BMId to 
    //process TagsDB
    var bmdbLn = BookMarksDB.length;
    var bmIds = new Array();
    //Stores the indexes of the bookmarks to be deleted
    var indxArr = new Array();
    for(var bl = 0 ; bl < bmdbLn ; bl++ )
    {
        var fName = BookMarksDB[bl].folderName;
        if(fName == folderName)
        {
            var bm_Id = BookMarksDB[bl].bookmarkId;
            bmIds[bmIds.length] = bm_Id;
            indxArr[indxArr.length] = bl;
        }
    }
    //Reversing the indexArray and splicing the
    //bookmarksDB
    for(var arr = (indxArr.length-1); arr >= 0 ; arr-- )
    {
        var indx = indxArr[arr];
        BookMarksDB.splice(indx,1);
    }
    
    
    //TagsDB update and populate:
    //Means tags associated with deleted bookmarks
    if(bmIds.length > 0)
    {
        var tagIndxArr = new Array();
        var tagLn = TagVsBMIdDB.length;
        for(var tl = 0 ; tl < tagLn ; tl++)    
        {
            if(bmIds.length == 0)
            {
                break;
            } 
            var tlName = TagVsBMIdDB[tl].tagName;
            var bmIdArr = TagVsBMIdDB[tl].bmIdArray;
            var bmIdLn = bmIds.length;
            for(var i = 0 ; i < bmIdLn ; i++ )
            {
                var bm_IId = bmIds[i];
                var indx = indexOfArr(bmIdArr,bm_IId);
                if(indx != -1)
                {
                    //Means this tag contains only one bookmark
                    if(bmIdArr.length == 1)
                    {
                        tagIndxArr[tagIndxArr.length] = tl;
                        //Removing the tag from the Tags panel
                        removeTagFromPanel(tlName);
                    }
                    else
                    {
                        bmIdArr.splice(indx,1);
                    }
                }
            }
        }

        //Splicing the Tags from the TagVsBMIdDB, if the tag
        //has no bmId after the deletion process
        if(tagIndxArr.length > 0)
        {
            for(var re = (tagIndxArr.length-1) ; re >= 0 ; re-- )
            {
                var indx = tagIndxArr[re];
                TagVsBMIdDB.splice(indx,1);
            }
        }
    }
    
    
    //Disabling all criteria
    disableAllCriteria();

    //populating table
    populateBookMarksTable();
        
}

function editFolder(folderId,folderName)
{
    document.getElementById("displayFolderDiv_"+folderId).style.display = "none";
    
    var renameDiv = document.getElementById("renameDiv_"+folderId);
    
    var divEle = document.getElementById("formDiv");
    document.getElementById("form_FolderId").value = folderId;
    document.getElementById("form_FolderName").value = folderName;
    document.getElementById("form_ExistingFolderName").value = folderName;
    
    renameDiv.appendChild(divEle);
    divEle.style.display = "block";
    renameDiv.style.display = "block";

    setFocus(document.getElementById("form_FolderName"));
}

function showFolderOptions(folderId)
{
    var imgDivId = "showImage_"+folderId;
    document.getElementById(imgDivId).style.display = "block";
}

function hideFolderOptions(folderId)
{
    var imgDivId = "showImage_"+folderId;
    document.getElementById(imgDivId).style.display = "none";
}

function populateTags(tagName,bmIdArray,tagsDiv)
{
    var disTag = getLeftHandDisplayString(tagName,13);
    tagsDiv.innerHTML = tagsDiv.innerHTML 
        + "<li id=\"tag_"+tagName+"\" onmouseover=\"javascript:showTagOption('"+tagName+"')\" onmouseout=\"javascript:hideTagOption('"+tagName+"')\"><table><tr><td style=\"font-size:12px; font-weight:normal;\"><a title=\""+tagName+"\" href=\"javascript:setSelectedTag('"+tagName+"')\">"+disTag
        +"</a></td><td><div id=\"tagOption_"+tagName+"\" style=\"display:none\"><img src=\"images/trash.gif\" onclick=\"javascript:deleteTag('"+tagName+"')\"></div></td></tr></table></li>";
}

function showTagOption(tagName)
{
    var tagEle = document.getElementById("tagOption_"+tagName);
    tagEle.style.display = "block";
}

function hideTagOption(tagName)
{
    var tagEle = document.getElementById("tagOption_"+tagName);
    tagEle.style.display = "none";
}

function deleteTag(tagName)
{
    if(!confirm("Do you want to delete the selected Tag?"))
    {
        return;
    }
    //AJAX request
    try
    {
        var urll = contextPath + "/bookmarks.do?method=deleteTag"+
            "&tagName="+tagName+"&userId="+userId;
        sendAsyncAJAXRequest('GET',urll,deleteTagResponse);
    }
    catch(e)
    {
        alert("Unable to process the request");
    }
}

function deleteTagResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result == "error")
        {
            alert("Unable to delete the tag");
            return;
        }
        handleOnDeleteTags(resp);
    }
}

function handleOnDeleteTags(resp)
{
    var tagName = resp[0].tagName;

    //Splicing the tagNamme from the TagVsBMIdDB
    var ln = TagVsBMIdDB.length;
    for(var v = 0 ; v < ln ; v++ )
    {
        var tName = TagVsBMIdDB[v].tagName;
        if(tName == tagName)
        {
            TagVsBMIdDB.splice(v,1);
            break;
        }
    }

    //Removing the TagName from the Tags panel
    removeTagFromPanel(tagName);

    //disable all criteira to view all bookmarks
    disableAllCriteria();
    
    //Repopulating the Bookmarks table
    populateBookMarksTable();
}

function formBookmarksTable()
{
    var bmTableDiv = document.getElementById("bookmarksTableDiv");
    
    var bmTable = document.createElement("table");
    bmTable.style.width = "100%";
    bmTable.style.border = "0";
    bmTable.cellPadding = "0";
    bmTable.cellSpacing = "0";
    bmTable.className = "formtext";
    bmTable.style.borderLeft = "solid 1px #CCCCCC";
    bmTable.style.borderRight = "solid 1px #CCCCCC";
    bmTableDiv.appendChild(bmTable);

    var bmTableTbody = document.createElement("tbody");
    bmTableTbody.id = "bookmarkTableTBody";
    bmTable.appendChild(bmTableTbody);

    var lable = "All Bookmarks";
    if(currentSlxn == "Search")
    {
        lable = "Search Result";
    }
    else if(currentSlxn == "Folder")
    {
        if(currentFolder == null || currentFolder == "null"
            || currentFolder == "" || currentFolder == "NULL")
        {
             lable = "Folder: UnCategorized";
        }
        else
        {
             lable = "Folder: "+currentFolder;
        }
    }
    else if(currentSlxn == "Tag")
    {
        lable = "Tag: "+currentTag;
    }
    var labDiv = document.getElementById("labelDiv");
    var dispLbl = truncateDisplayString(lable,45);
    labDiv.innerHTML = "<strong title=\""+lable+"\">"+dispLbl+"</strong>";
}

function addBookMarkInList(bookmark,tbody)
{
    var title = bookmark.title;
    var location = bookmark.location;
    var description = bookmark.description;
    var folderName = bookmark.folderName;
    var bookmarkId = bookmark.bookmarkId;
    
    //Forming a form of object and passing the same through arguments
    //to avoid the special characters handling
    var arrObj = new Array(bookmarkId,folderName,title,description,location);

    //var getDivInnerHTML = getBookMarkDivInHTML(bookmarkId,folderName,title,description,location);
    var getDivInnerHTML = getBookMarkDivInHTML(arrObj);
    
    var newRow = document.createElement("tr");
    newRow.id = "bookmarkRow_"+bookmarkId;
    tbody.appendChild(newRow);
    
    var rowCount = tbody.childNodes.length;
    var isOddRow = ((rowCount%2)==1)?true:false;
    
    var cell1 = document.createElement("td");
    cell1.id = "cell1Div_"+bookmarkId;
    cell1.className = "rowclear";
    var cellBgColor = "";
    if(isOddRow)
    {
         cell1.style.backgroundColor = "#eff4f8";
         cellBgColor = "#eff4f8";
    }
    cell1.style.borderBottom = "solid 1px #CCCCCC";
    
    var dispDivHTML ="<div id=\"displayDiv_"+bookmarkId+"\">"+getDivInnerHTML[0]+"</div>";
    var editDivHTML = "<div id=\"editDiv_"+bookmarkId+"\" style=\"display:none;\">"+getDivInnerHTML[1]+"</div>";

    //Set an hidden input parameter  to find out the default bgcolor of 
    //the row and displaying/hiding the edit/display view
    cell1.innerHTML = "<input type=\"hidden\" id=\"defaultBg_"+bookmarkId+"\" value=\""+cellBgColor+"\">"+dispDivHTML + editDivHTML ;
    newRow.appendChild(cell1);

    
    var cell2 = document.createElement("td");
    cell2.id = "cell2Div_"+bookmarkId;
    cell2.className = "rowclear";
    cell2.style.width = "27";
    cell2.align = "center";
    //cell2.style.valign = "middle";
    if(isOddRow)
    {
        cell2.style.backgroundColor = "#eff4f8";
    }
    cell2.style.borderLeft = "dotted 1px #CCCCCC";
    cell2.style.borderBottom = "solid 1px #CCCCCC";
    cell2.innerHTML = "<div id=\"displayDeleteCol_"+bookmarkId+"\"><input id=\"CB_"+bookmarkId+"\" type=\"checkbox\" name=\"checkbox2\" value=\"checkbox\" onclick=\"javascript:disableSelectAll()\"/></div>"+
                      "<div style=\"display:none\" id=\"editCancel_"+bookmarkId+"\"><a href=\"javascript:hideEditDiv('"+bookmarkId+"')\"><img src=\"images/large_icons/icon_cancel.gif\" border=\"0\" class=\"imgcancel\" title=\"Close\"/></a></div>";
    newRow.appendChild(cell2);
}

//function getBookMarkDivInHTML(bookmarkId,folderName,title,description,location)
function getBookMarkDivInHTML(arrObj)
{
    var bookmarkId = arrObj[0];
    var folderName = arrObj[1];
    var title = arrObj[2];
    var description = arrObj[3];
    var location = arrObj[4];


    //var bottomBMDiv = bottomBookMarkDiv(bookmarkId,folderName,title,description,location);
    var bottomBMDiv = bottomBookMarkDiv(arrObj);
  
    

    var dispDesc = "";
    var splitter = "\n";
    if(description.indexOf(splitter) != -1 )
    {
        var tmpArr = description.split(splitter);
        var ln = tmpArr.length;
        for(var ii = 0 ; ii < ln ; ii++ )
        {
            if(dispDesc != "")
            {
                dispDesc = dispDesc+"<br>";
            }
            dispDesc = dispDesc+tmpArr[ii];
        }
    }
    if(dispDesc == "")
    {
        dispDesc = description;
    }


    var displayDivHTML = "<div id=\"title_"+bookmarkId+"\" class=\"bookmarkheader\"><a href=\"javascript:openNewWindow('"+location+"')\">"+title+"</a></div><div id=\"description_"+bookmarkId+"\" class=\"bookmarktext\"><div style=\"overflow:hidden\">"+dispDesc+"</div>"+bottomBMDiv[0]+"</div>";
    //var editDivHTML = "<div> <input id=\"editTitle_"+bookmarkId+"\" class=\"bookmarkheader\" style=\"border-width:1px;\" type=\"text\" size=\"50\" value=\""+title+"\"></div><div><input id=\"editLocation_"+bookmarkId+"\" type=\"text\" value=\""+location+"\" size=\"50\" DISABLED></div><div ><textarea id=\"editDescription_"+bookmarkId+"\" class=\"bookmarktext\" cols=\"60\" rows=\"2\">"+description+"</textarea>"+bottomBMDiv[1]+"</div>";
    
    //If the title contains double quotes("), handling in the following way.
    var editTitle = replaceStr(title,"'","&apos;");
    //
    
    var editDivHTML = "<div class=\"addheader\">Edit Bookmark</div> <div class=\"bookmarktext\">Bookmark:<img src=\"images/spacer.gif\" width=\"10\" height=\"1\"/><input id=\"editTitle_"+bookmarkId+"\" name=\"title_edit\" value='"+editTitle+"' type=\"text\" size=\"50\" onkeydown=\"return checkEnterOnEdit(event,'"+bookmarkId+"')\"/></div> <div class=\"bookmarktext\">URL:<img src=\"images/spacer.gif\" width=\"40\" height=\"1\"/><input id=\"editLocation_"+bookmarkId+"\" name=\"edit_Loc\" value=\""+location+"\" type=\"text\" size=\"50\" DISABLED></div> <div class=\"bookmarktext\">Description: <textarea id=\"editDescription_"+bookmarkId+"\" name=\"textfield\" cols=\"50\" rows=\"3\">"+description+"</textarea></div>"+bottomBMDiv[1];
    var bmDivArr = new Array();
    bmDivArr[0] = displayDivHTML;
    bmDivArr[1] = editDivHTML;
    return bmDivArr;
}



//function bottomBookMarkDiv(bmId,folderName,title,description,location)
function bottomBookMarkDiv(arrObj)
{
    var bmId = arrObj[0];
    var folderName = arrObj[1];
    var title = arrObj[2];
    var description = arrObj[3];
    var location = arrObj[4];


    var tagsDBLng = TagVsBMIdDB.length;
    var assoTags = "";
    var addTagsBMDiv = "<div class=\"savetext\"><img src=\"images/large_icons/icon_tag_sm.gif\" align=\"top\" class=\"imgicon\"/>Tag:";
    for(var cn = 0 ; cn < tagsDBLng ; cn++ )
    {
        var tgName = TagVsBMIdDB[cn].tagName;
        var bmIds = TagVsBMIdDB[cn].bmIdArray;
        var bmIdsLngth = bmIds.length;
        for(var cnt = 0 ; cnt < bmIdsLngth ; cnt++ )
        {
            var tmp = bmIds[cnt];
            if(tmp == bmId)
            {
                var dispTag = truncateDisplayString(tgName,10);
                addTagsBMDiv = addTagsBMDiv+"<a title=\""+tgName+"\" href=\"javascript:setSelectedTag('"+tgName+"')\" class=\"lowbuttb\"> "+dispTag+"</a>,";
                assoTags = assoTags+tgName+",";
                break;
            }
        }
    }
    //Removing "," from the addTagsBMDiv and assoTags;
    if(addTagsBMDiv.lastIndexOf(",") == (addTagsBMDiv.length-1))
    {
        addTagsBMDiv = addTagsBMDiv.substring(0,(addTagsBMDiv.length-1));
        assoTags = assoTags.substring(0,(assoTags.length-1));
    }
    //Means no tags available for this bookmark
    else
    {
        addTagsBMDiv = addTagsBMDiv + "none";
    }

    
    //Setting folderName to Uncategorized, if its value is null or empty
    var displayFolderName = folderName;
    if(folderName == null || folderName == "null" || 
            folderName == "NULL" || trim(folderName) == "")
    {
        displayFolderName = "UnCategorized";
    }
    
    displayFolderName = truncateDisplayString(displayFolderName,14);

    addTagsBMDiv = addTagsBMDiv + 
                "<img src=\"images/large_icons/icon_folder_sm.gif\" align=\"top\" class=\"imgicon\"/>Folder:"+
                "<a href=\"javascript:setSelectedFolder('"+folderName+"')\" title=\""+folderName+"\" class=\"lowbuttb\"> "+displayFolderName+"</a> <img src=\"images/large_icons/icon_edit_sm.gif\" width=\"16\" height=\"15\" align=\"top\" class=\"imgicon\"/><a href=\"javascript:showEditDiv('"+bmId+"')\" class=\"lowbuttb\">Edit </a></div>";

    var editCombo = "<select id=\"modFolder_"+bmId+"\" >"+formFoldersCombo("edit",folderName)+"</select>";
    var editTagsBMDiv = "<div class=\"bookmarktext\"><img src=\"images/large_icons/icon_tag_sm.gif\" width=\"16\" height=\"15\" align=\"absmiddle\" class=\"img\"/>Tag:<img src=\"images/spacer.gif\" width=\"21\" height=\"1\"/> <input id=\"modTags_"+bmId+"\" value=\""+assoTags+"\" name=\"textfield\" type=\"text\" size=\"20\" onkeyup=\"return checkFldrTagStr('modTags_"+bmId+"','tag')\" onblur=\"javascript:hideRestrictCharDiv()\" onkeydown=\"return checkEnterOnEdit(event,'"+bmId+"')\"/><input id=\"prvsTags_"+bmId+"\" type=\"hidden\" value=\""+assoTags+"\"><img src=\"images/spacer.gif\" width=\"20\" height=\"1\"/><img src=\"images/large_icons/icon_folder_sm.gif\" width=\"16\" height=\"15\" align=\"absmiddle\" class=\"img\"/>Folder:"+editCombo+"<input id=\"prvsFolder_"+bmId+"\" type=\"hidden\" value=\""+folderName+"\"><div class=\"bookmarktext\"><img src=\"images/spacer.gif\" width=\"68\" height=\"1\"/><input type=\"button\" name=\"submit_eed\" value=\"Save\" onclick=\"javascript:submitEditData('"+bmId+"')\" /> <input type=\"button\" name=\"cancel_ee\" value=\"Cancel\" onclick=\"javascript:hideEditDiv('"+bmId+"')\" /></div>";
    var tagsBMDivArr = new Array();
    tagsBMDivArr[0] = addTagsBMDiv;
    tagsBMDivArr[1] = editTagsBMDiv;
    return tagsBMDivArr;
}
  
function submitEditData(bmId)
{
    var title_Id = "editTitle_"+bmId;
    var titleId = document.getElementById(title_Id);
    var title = titleId.value;
    if(!validate(title))
    {
        alert("Please enter a valid bookmark title ");
        setFocus(titleId);
        return false;
    }
    var descId = "editDescription_"+bmId;
    var description = document.getElementById(descId).value;
    var folderId = document.getElementById("modFolder_"+bmId).value;
    var tagsRslt = getTagsDiffInStringOnEdit(bmId);

    //alert("Tags Diff::"+tagsRslt);
    title = getEncodedValue(title);
    description = getEncodedValue(description);

    //sendAJAX Call to server
    try
    {
        var urll = contextPath + "/bookmarks.do?method=updateBookMark&title="
            +title+"&description="+description+"&folderId="+folderId+
            "&"+tagsRslt+"&userId="+userId+"&bookMarkId="+bmId;
        sendAsyncAJAXRequest('GET',urll,editResponse);
    }
    catch(e)
    {
        alert("Unable to process the bookmark request");
    }
    return true;
    
}

function editResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        //alert(resp);
        if(resp[0].result == "error")
        {
            alert("Unable to edit the Bookmark");
            return;
        }
        var bookmarkId = resp[0].BookMarkID;
        updateBookmark(resp);
        hideEditDiv(bookmarkId);
    }
}

//function updateBookmark(resp)
function updateBookmark(resp)
{
    var bmId = resp[0].BookMarkID;
    var ttleId = "editTitle_"+bmId;
    var title = document.getElementById(ttleId).value;
    var descId = "editDescription_"+bmId;
    var description = document.getElementById(descId).value;
    var folderDiv = document.getElementById("modFolder_"+bmId);
    var folderName = folderDiv.options[folderDiv.selectedIndex].text;
    var location = document.getElementById("editLocation_"+bmId).value;
    var lastEdited = resp[0].LastEdited;
    if(folderName == "UnCategorized")
    {
        folderName = "null";
    }
    var addedTags = resp[0].AddedTags;
    var deletedTags = resp[0].DeletedTags;
    //alert("RESP::ATs:"+addedTags+"* DLTTs:"+deletedTags);

    //Update the tags db using reconstructTagsDB
    if(addedTags != null && addedTags != "null" 
            && addedTags != "NULL" && trim(addedTags) != "")
    {
        parseAndReconstructTags(bmId,addedTags,"add");
    }
    if(deletedTags != null && deletedTags != "null" 
            && deletedTags != "NULL" && trim(deletedTags) != "")
    {
        parseAndReconstructTags(bmId,deletedTags,"delete");
    }
    
    //Update the BookmarksDB
    updateBookMarksDB(bmId,title,description,folderName,lastEdited);
    
    //
    var arrObj = new Array(bmId,folderName,title,description,location);
    //var getDivInnerHTML = getBookMarkDivInHTML(bmId,folderName,title,description,location);
    var getDivInnerHTML = getBookMarkDivInHTML(arrObj);
    var dispDiv = document.getElementById("displayDiv_"+bmId);
    var editDiv = document.getElementById("editDiv_"+bmId);
    dispDiv.innerHTML = getDivInnerHTML[0];
    editDiv.innerHTML = getDivInnerHTML[1];
}

//Tags with comma seperated
function parseAndReconstructTags(bmId,tags,axn)
{
    var tagArr = tags.split(",");
    var arrL = tagArr.length;
    for(var cn = 0 ; cn < arrL ; cn++ )
    {
        var tmp = tagArr[cn];
        reconstructTagsDB(bmId,tmp,axn);
    }
}

function showEditDiv(bmId)
{
    //
    var cell1div = document.getElementById("cell1Div_"+bmId);
    cell1div.style.backgroundColor = "#b8d4ec";
    //
    var addDivId = document.getElementById("displayDiv_"+bmId);
    addDivId.style.display = "none";
    //
    var delColDiv = document.getElementById("displayDeleteCol_"+bmId);
    var delEle = document.getElementById("CB_"+bmId);
    //To avoid this bookmark deletion on below scenario
    //delete box is selected and then edit opened and 
    //selected few other bookmarks and doing delete
    delEle.checked = false;
    delColDiv.style.display = "none";

    var cell2Id = document.getElementById("cell2Div_"+bmId);
    cell2Id.style.verticalAlign = "top";
    //cell2Id.align = "center";
    cell2Id.style.backgroundColor = "#b8d4ec";

    var editdivId = document.getElementById("editDiv_"+bmId);
    editdivId.style.display="block";
    var editCancleDiv = document.getElementById("editCancel_"+bmId);
    editCancleDiv.style.display="block";
}

function hideEditDiv(bmId)
{
    var bgColorVal = document.getElementById("defaultBg_"+bmId).value;
    
    var editdivId = document.getElementById("editDiv_"+bmId);
    editdivId.style.display="none";
    var editCancleDiv = document.getElementById("editCancel_"+bmId);
    editCancleDiv.style.display="none";
    
    //
    var cell1div = document.getElementById("cell1Div_"+bmId);
    cell1div.style.backgroundColor = bgColorVal;
    var cell2Id = document.getElementById("cell2Div_"+bmId);
    cell2Id.style.verticalAlign = "middle";
    cell2Id.style.backgroundColor = bgColorVal;
    //
    var delColDiv = document.getElementById("displayDeleteCol_"+bmId);
    delColDiv.style.display = "block";
    var addDivId = document.getElementById("displayDiv_"+bmId);
    addDivId.style.display = "block";
}

function updateBookMarksDB(bmId,title,description,folderName,lastEdited)
{
    var dbL = BookMarksDB.length;
    for(var i = 0 ; i < dbL ; i++ )
    {
        var bm_id = BookMarksDB[i].bookmarkId;
        if(bm_id == bmId)
        {
            BookMarksDB[i].title = title;
            BookMarksDB[i].description = description;
            BookMarksDB[i].folderName = folderName;
            BookMarksDB[i].lastEdited = lastEdited;
            return;
        }
    }
}


function openNewWindow(location)
{
    var newWin = window.open(location,null,'');
}

function setSelectedTag(tagName)
{
    currentSlxn = "Tag";
    currentTag = tagName;
    currentFolder = "";
    currentSearch = "";
    //
    resetEndIndexArray();
    //
    populateBookMarksTable();
}

function setSelectedFolder(folderName)
{
    currentSlxn = "Folder";
    currentFolder = folderName;
    currentTag = "";
    currentSearch = "";
    //
    resetEndIndexArray();
    //
    populateBookMarksTable();
}

function setSearchValue(searchVal)
{
    if(searchVal == "")
    {
        disableAllCriteria();
    }
    else
    {
        //
        resetEndIndexArray();
        //
        currentSlxn = "Search";
        currentFolder = "";
        currentTag = "";
        currentSearch = searchVal;
    }
    populateBookMarksTable();
}

function showAll()
{
    disableAllCriteria();
    populateBookMarksTable();
}

function disableAllCriteria()
{
    currentSlxn = "";
    currentFolder = "";
    currentTag = "";
    currentSearch = "";
    resetEndIndexArray();
}

function fetchBMIdsForTag(tagName)
{
    var lngth = TagVsBMIdDB.length;
    var bmIdArray = new Array();
    for(var cn = 0 ; cn < lngth ; cn++ )
    {
        var tagN = TagVsBMIdDB[cn].tagName;
        if(tagName == tagN)
        {
            bmIdArray = TagVsBMIdDB[cn].bmIdArray;
            break;
        }
    }
    return cloneArray(bmIdArray);
}

function showNoBookMarksDiv()
{
    var nextXDiv = document.getElementById("nextXArticlesDiv");
    nextXDiv.style.display = "none";
    var noBMDiv = document.getElementById("noBookMarksDiv");
    noBMDiv.style.display = "block";
}

function hideNoBookMarksDiv()
{
    var nextXDiv = document.getElementById("nextXArticlesDiv");
    nextXDiv.style.display = "block";
    var noBMDiv = document.getElementById("noBookMarksDiv");
    noBMDiv.style.display = "none";
}

function populateBookMarksTable()
{
    var bmCnt = BookMarksDB.length;
    clearBookmarksTable();
    if(bmCnt == 0)
    {
        showNoBookMarksDiv();
        return;
    }
    formBookmarksTable();
    var tableTbody = document.getElementById("bookmarkTableTBody");
    
    //Display X article::::::::
    var startCnt = 0;
    if(endIndexArray.length > 0)
    {
        var lastIndx = endIndexArray.length - 1;
        startCnt = endIndexArray[lastIndx]+1;
    }
    //
    isNextEnabled = false;
    var limitVal = 0;
    if(currentSlxn == "")
    {
         for(var cn = startCnt ; cn < bmCnt ; cn++ )
         {
              //
              limitVal = limitVal+1;
              //checks any more similar bookmark exists in the
              //BookMarksDB, if exists setting isNextEnabled to true
              if(limitVal == (nextXArticleLimit+1))
              {
                  isNextEnabled = true;
                  break;
              }
              //Updating the endIndexArray at the time of
              //** count limit meets the nextX limit
              //** end of the bookmark count 
              if(limitVal == nextXArticleLimit || cn == (bmCnt-1) )
              {
                  endIndexArray[endIndexArray.length] = cn;
              }
              //alert("LimitValue::"+limitVal+"** nextXArticleLimit::"+nextXArticleLimit);
              //
              var bookmark = BookMarksDB[cn];
              addBookMarkInList(bookmark,tableTbody);
         }
    }
    else if(currentSlxn == "Tag")
    {
        var bmIdArray = fetchBMIdsForTag(currentTag);    
        for(var cn = startCnt ; cn < bmCnt ; cn++)
        {
            //if(bmIdArray == 0)
            //{
            //    break;
            //}
            var bmId =  BookMarksDB[cn].bookmarkId;    
            for(var bn = 0 ; bn < bmIdArray.length ; bn++ )
            {
                if(bmId == bmIdArray[bn])
                {
                     //
                     limitVal = limitVal+1;
                     //Will not display the similar bookmark comes
                     //after the last bookmark.Will be used in
                     //setting Next X Article link enable
                     if(limitVal <= nextXArticleLimit)
                     {
                         addBookMarkInList(BookMarksDB[cn],tableTbody);
                         bmIdArray.splice(bn,1);
                     }
                     //Updating the endIndexArray at the time of
                     //** count limit meets the nextX limit
                     //** end of the bookmark count 
                     if(limitVal == nextXArticleLimit)
                     {
                         endIndexArray[endIndexArray.length] = cn;
                     }
                     break;
                }
            }
            //checks any more similar bookmark exists in the
            //BookMarksDB, if exists setting isNextEnabled to true
            if(limitVal == (nextXArticleLimit+1))
            {
                isNextEnabled = true;
                break;
            }
            //If the limitVal not touches the pageLimit value but
            //the BM count reaches the end
            if(limitVal != nextXArticleLimit && cn == (bmCnt-1))
            {
                endIndexArray[endIndexArray.length] = cn;
            }

        }
    }
    else if(currentSlxn == "Folder")
    {
        for(var cn = startCnt ; cn < bmCnt ; cn++ )
        {
            var folderName = BookMarksDB[cn].folderName;
            if(folderName == currentFolder)
            {
                //
                limitVal = limitVal+1;
                //Updating the endIndexArray at the time of
                //** count limit meets the nextX limit
                //** end of the bookmark count 
                if(limitVal == nextXArticleLimit)
                {
                  endIndexArray[endIndexArray.length] = cn;
                }
                //
                if(limitVal <= nextXArticleLimit)
                {
                    addBookMarkInList(BookMarksDB[cn],tableTbody);
                }
            }
            //checks any more similar bookmark exists in the
            //BookMarksDB, if exists setting isNextEnabled to true
            if(limitVal == (nextXArticleLimit+1))
            {
                isNextEnabled = true;
                break;
            }
            //If the limitVal not touches the pageLimit value but
            //the BM count reaches the end
            if(limitVal != nextXArticleLimit && cn == (bmCnt-1))
            {
                endIndexArray[endIndexArray.length] = cn;
            }
        }
    }
    else if(currentSlxn == "Search")
    {        
        for(var cn = startCnt ; cn < bmCnt ; cn++ )
        {
            var title = BookMarksDB[cn].title;
            if(title.match(currentSearch))
            {
                //
                limitVal = limitVal+1;
                //Updating the endIndexArray at the time of
                //** count limit meets the nextX limit
                //** end of the bookmark count 
                if(limitVal == nextXArticleLimit)
                {
                   endIndexArray[endIndexArray.length] = cn;
                }
                //
                if(limitVal <= nextXArticleLimit)
                {
                    addBookMarkInList(BookMarksDB[cn],tableTbody);
                }
            }
            //checks any more similar bookmark exists in the
            //BookMarksDB, if exists setting isNextEnabled to true
            if(limitVal == (nextXArticleLimit+1))
            {
                isNextEnabled = true;
                break;
            }
            //If the limitVal not touches the pageLimit value but
            //the BM count reaches the end
            if(limitVal != nextXArticleLimit && cn == (bmCnt-1))
            {
                endIndexArray[endIndexArray.length] = cn;
            }
        }
    }
    var xArDiv = document.getElementById("NextXArticleText");
    xArDiv.innerHTML = "";
    if(isNextEnabled)
    {
        xArDiv.innerHTML = xArDiv.innerHTML+"<a href=\"javascript:showNextXArticle()\" class=\"lowbuttnext\"> Next "+nextXArticleLimit+" Articles &raquo;</a>";
    }
    if(endIndexArray.length > 1)
    {
        var reverseString = String.fromCharCode( 171 );
        xArDiv.innerHTML = xArDiv.innerHTML+"<a href=\"javascript:previousXArticle()\" class=\"lowbuttnext\"> "+reverseString+" Previous "+nextXArticleLimit+" Articles </a>";
    }
}



function clearBookmarksTable()
{
    //If no bookmark div is opened
    hideNoBookMarksDiv();
    //If the cloudview is opened
    hideCloudViewDiv();
    //If the add div is opened,closing the same
    hideAddDiv();
    //If move div is in display
    hideMoveDiv();
    //
    disableSelectAll();

    var tableDiv = document.getElementById("bookmarksTableDiv");
    bookmarksTableDiv.innerHTML = "";
    var labDiv = document.getElementById("labelDiv");
    labDiv.innerHTML = "";
}

function sortBookmarks(sortBy)
{
    if(previousSort == sortBy)
    {
        if(isAscending)
        {
            sortByDesc(sortBy);
        }
        else
        {
            sortByAsc(sortBy);
        }
    }
    else
    {
        sortByDesc(sortBy);
    }
    //
    var prvSortId = document.getElementById("sort"+previousSort);
    prvSortId.style.textDecoration = "none";
    var curSortId = document.getElementById("sort"+sortBy);
    curSortId.style.textDecoration = "underline";
    
    previousSort = sortBy;
    //disableAllCriteria();
    //
    resetEndIndexArray();
    //
    populateBookMarksTable();
}

function sortByAsc(sortBy)
{
    var count = BookMarksDB.length;
    if(sortBy == "Date")
    {
        for(var ext = 0 ; ext < count ; ext++ )
        {
            for(var intr = 0 ; intr < count-1 ; intr++ )
            {
                var idd1 = 1*(BookMarksDB[intr].lastEdited);
                var idd2 = 1*(BookMarksDB[intr+1].lastEdited);
                if(idd1 > idd2 ) //ascending
                {
                    var tmp = BookMarksDB[intr+1];
                    BookMarksDB[intr+1] = BookMarksDB[intr];
                    BookMarksDB[intr] = tmp;
                }
            }
        }
    }
    else if(sortBy == "Title")
    {
        for(var ext = 0 ; ext < count ; ext++ )
        {
            for(var intr = 0 ; intr < count-1 ; intr++ )
            {
                var idd1 = BookMarksDB[intr].title;
                var idd2 = BookMarksDB[intr+1].title;
                if(idd1 > idd2 ) //ascending
                {
                    var tmp = BookMarksDB[intr+1];
                    BookMarksDB[intr+1] = BookMarksDB[intr];
                    BookMarksDB[intr] = tmp;
                }
            }
        }
    }
    isAscending = true;
}

function sortByDesc(sortBy)
{
    var count = BookMarksDB.length;
    if(sortBy == "Date")
    {
        for(var ext = 0 ; ext < count ; ext++ )
        {
            for(var intr = 0 ; intr < count-1 ; intr++ )
            {
                var idd1 = 1*(BookMarksDB[intr].lastEdited);
                var idd2 = 1*(BookMarksDB[intr+1].lastEdited);
                if(idd1 < idd2 ) //descending
                {
                    var tmp = BookMarksDB[intr+1];
                    BookMarksDB[intr+1] = BookMarksDB[intr];
                    BookMarksDB[intr] = tmp;
                }
            }
        }
    }
    else if(sortBy == "Title")
    {
        for(var ext = 0 ; ext < count ; ext++ )
        {
            for(var intr = 0 ; intr < count-1 ; intr++ )
            {
                var idd1 = BookMarksDB[intr].title;
                var idd2 = BookMarksDB[intr+1].title;
                if(idd1 < idd2 ) //descending
                {
                    var tmp = BookMarksDB[intr+1];
                    BookMarksDB[intr+1] = BookMarksDB[intr];
                    BookMarksDB[intr] = tmp;
                }
            }
        }
    }
    isAscending = false;
}

function showAddDiv()
{

    //If move div is in display
    hideMoveDiv();
    
    var addDiv = document.getElementById("addBookMarkDiv");

    //Adding folders list
    var optionString = formFoldersCombo('add','');
    var innFoldersHTML = "<select id=\"add_FoldersCombo\">"
        +optionString+"</select>"    ;
    var addFolderDiv = document.getElementById("add_FoldersDiv");
    addFolderDiv.innerHTML = "<img src=\"images/large_icons/icon_folder_sm.gif\" width=\"16\" height=\"15\" align=\"absmiddle\" class=\"img\"/>Folder:<img src=\"images/spacer.gif\" width=\"10\" height=\"1\"/>" +innFoldersHTML;
    //
  

    //addDiv.style.position = "absolute";
    //addDiv.classname = "tagmenu";
    addDiv.style.backgroundColor = "#B8D4EC";
    addDiv.style.display="block";

    document.getElementById("add_URL").value = "http://";
    
    var urlFld = document.getElementById("add_URL");
    setFocus(urlFld);
    
}

function checkEnterOnEdit(ev,bmId)
{
    var keyCode = ev.keyCode;
    if(keyCode == 13)
    {
       submitEditData(bmId); 
       return false;
    }
    else
    {
        return true;
    }
}

function checkEnterOnAdd(ev)
{
    var keyCode = ev.keyCode;
    if(keyCode == 13)
    {
       submitAddBM(); 
       return false;
    }
    else
    {
        return true;
    }
}

function formFoldersCombo(axn,folderName)
{
    var fldLngth = FoldersDB.length;
    var optionString = "";
    if(axn == "edit" && folderName == "UnCategorized")
    {
        optionString = "<OPTION value=\"-1\" SELECTED>UnCategorized";
    }
    else
    {
        optionString = "<OPTION value=\"-1\" SELECTED>UnCategorized";
    }
    for(var cn = 0 ; cn < fldLngth ; cn++ )
    {
        var folderNa = FoldersDB[cn].folderName;
        var folderId = FoldersDB[cn].folderId;
        var temp = "";
        if(axn == "edit" && folderName == folderNa)
        {
            temp = "<OPTION value=\""+folderId+"\" SELECTED>"+folderNa;
        }
        else 
        {
            temp = "<OPTION value=\""+folderId+"\">"+folderNa;
        }
        optionString = optionString + temp;
    }
    return optionString;
}

function hideAddDiv()
{
    var urlId = document.getElementById("add_URL");
    urlId.value = "";
    var titleId = document.getElementById("add_Title");
    titleId.value = "";
    var descId = document.getElementById("add_Description");
    descId.value = "";
    var addFolderDiv = document.getElementById("add_FoldersDiv");
    addFolderDiv.innerHTML = "";
    var tagsId = document.getElementById("add_Tags");
    tagsId.value = "";
    var addDiv = document.getElementById("addBookMarkDiv");
    addDiv.style.display="none";
}

function appendHttpForUrl(urll)
{
    if(urll.indexOf("http://") != 0)
    {
         urll = "http://"+urll;
    }
    return urll;
}

function submitAddBM()
{
    var urlId = document.getElementById("add_URL");
    var urlValue = urlId.value;
    if(!validate(urlValue))
    {
        alert("Please enter a valid bookmark URL");
        setFocus(urlId);
        return false;
    }
    if(urlValue == "http://")
    {
        alert("Please enter a valid bookmark URL");
        setFocus(urlId);
        return false;
    }
    urlValue = appendHttpForUrl(urlValue);
    var titleId = document.getElementById("add_Title");
    var titleVal = titleId.value;
    if(!validate(titleVal))
    {
        alert("Please enter a valid bookmark title");
        setFocus(titleId);
        return false;
    }
    var descVal = document.getElementById("add_Description").value;
    var tagsVal = document.getElementById("add_Tags").value;
    var folderVal = document.getElementById("add_FoldersCombo").value;

    //Replacing new line characters with space
    //descVal = replaceStr(descVal,"\n"," ");
   
    //Encoding values 
    titleVal = getEncodedValue(titleVal);
    descVal = getEncodedValue(descVal);
    folderVal = getEncodedValue(folderVal);
    tagsVal = getEncodedValue(tagsVal);

    //Sending AJAX request
    try
    {
        var urll = contextPath + "/bookmarks.do?method=addBookMark&title="
            +titleVal+"&description="+descVal+"&folderId="+folderVal+
            "&location="+urlValue+"&tags="+tagsVal+"&userId="+userId;
        sendAsyncAJAXRequest('GET',urll,addResponse);
    }
    catch(e)
    {
        alert("Unable to add bookmark");
    }
    return true;
}

function getEncodedValue(str)
{
    var tmp = encodeURIComponent(str);
    return tmp;
}

function addResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result == "error")
        {
            alert("Unable to add Bookmarks")
            return;
        }
        addBMInDB(resp[0]);
        hideAddDiv();
    }
}

function addBMInDB(resp)
{
    var lastEdited = resp.LastEdited;
    var bookmarkId = resp.BookmarkID;
    var location = document.getElementById("add_URL").value;
    location = appendHttpForUrl(location);
    var title = document.getElementById("add_Title").value;
    var description = document.getElementById("add_Description").value;
    var tagsVal = document.getElementById("add_Tags").value;
    var folderComboId = document.getElementById("add_FoldersCombo");
    var folderName = folderComboId.options[folderComboId.selectedIndex].text;
    if(folderName == "UnCategorized")
    {
        folderName = "null";
    }
    //alert("LastEdited::"+lastEdited+"*** bookmarkId:"+bookmarkId+"**");

    //Adding and repopulating tags
    
    if(tagsVal != null && trim(tagsVal) != "")
    {
        parseAndReconstructTags(bookmarkId,tagsVal,"add");
    }
    
    //adding in bookmarksdb & repopulating table
    BookMarksDB[BookMarksDB.length] =  
        new BookMark(title,location,description,lastEdited,folderName,bookmarkId);    
    //Disabling all the criteria
    disableAllCriteria();
    //To sort the bookmarks in descending order, 
    //so that the recent bookmark comes first
    isAscending = true;
    sortBookmarks('Date');

    //alert("FolderName::"+folderName);
}

function reconstructTagsDB(bmId ,tagName ,axn)
{
    var lng = TagVsBMIdDB.length;
    var tagsDiv = document.getElementById("TagsDiv");
    for(var cn = 0 ; cn < lng ; cn++ )
    {
        var tagN = TagVsBMIdDB[cn].tagName;
        if(axn == "add")
        {
            //If the incoming tag already exists in the TagVsBMIdDB,
            //just updating the bmId array and returns.
            if(tagN == tagName)
            {
                var arr = TagVsBMIdDB[cn].bmIdArray;
                arr[arr.length] = bmId;
                return;
            }
        }
        else if(axn == "delete")
        {
            if(tagN == tagName)
            {
                var arr = TagVsBMIdDB[cn].bmIdArray;
                //If array length is one, means this tag
                //has only the incoming bookmark ID.So
                //removing this tag from the Tags DB
                //and from the Tags panel
                if(arr.length == 1)
                {
                    TagVsBMIdDB.splice(cn,1);
                    //Removing this tag from its panel
                    removeTagFromPanel(tagName);
                    //If the current selection is in this
                    //deleting tag, redirecting the 
                    //selection to All bookmarks
                    if(currentSlxn == "Tag" &&
                            currentTag == tagN)
                    {
                        currentSlxn = "";
                        currentTag = "";
                        resetEndIndexArray();
                        populateBookMarksTable();
                    }
                    return;
                }
                //Which means this tag has more than one bookmarkIDs.
                //So removing the incoming bmId from its bmIdArray.
                else
                {
                    var arr = TagVsBMIdDB[cn].bmIdArray;
                    var indx = indexOfArr(arr,bmId);
                    arr.splice(indx,1);
                    return;
                }
            }
        }
    }
    //If the method comes here, means no tag exists with this tagName.
    //If incoming tag no exists in the TagVsBMIdDB,
    //adding the same in the TagVsBMIdDB and in the Tags panel
    if(axn == "add")
    {
        var arr = new Array();
        arr[0] = bmId;
        TagVsBMIdDB[lng] = new TagVsBMIds(tagName,arr);
        populateTags(tagName,arr,tagsDiv);
    }
}

//Removes the tag from the TagsPanel
function removeTagFromPanel(tagName)
{
    var TagDivId = "tag_"+tagName;
    var ele = document.getElementById(TagDivId);
    if(ele != null)
    {
        var tagPanel = document.getElementById("TagsDiv");
        tagPanel.removeChild(ele);
    }
}

function setFocus(obj)
{
    obj.focus();
}

function validate(str)
{
    if(str != null && trim(str) != "")
    {
        return true;
    }
    return false;
}

//Gives an array with the addedTags 
//and deletedTags with comma seperation
function getTagsDiffInStringOnEdit(bmId)
{
    var existingTags = document.getElementById("prvsTags_"+bmId).value;
    var currentTags = document.getElementById("modTags_"+bmId).value;
    
    var deletedTags = existingTags.split(",");
    var addedTags = currentTags.split(",");

    if(deletedTags.length > 0 && addedTags.length > 0)
    {
        var tmp = new Array();
        var dltLngth = deletedTags.length;
        for(var cn = 0 ; cn < dltLngth ; cn++ )
        {
            var isCommon = false;
            if(addedTags.length == 0)
            {
                break;
            }
            var dltTag = deletedTags[cn];
            while (indexOfArr(addedTags,dltTag) != -1)
            {
                var indx = indexOfArr(addedTags,dltTag);
                addedTags.splice(indx,1);
                isCommon = true;
            }
            if(isCommon)
            {
                tmp[tmp.length] = dltTag;
            }
        }

        for(var cn = 0 ; cn < tmp.length ; cn++)
        {
            while((indexOfArr(deletedTags,tmp[cn])) != -1)
            {
                var indx = indexOfArr(deletedTags,tmp[cn]);
                deletedTags.splice(indx,1);
            }
        }
    }
        
    if(deletedTags.length == 0 && addedTags.length == 0)
    {
        return "";
    }
    if(deletedTags.length == 0 && addedTags.length > 0)
    {
        var add_Tags = getTagsInString(addedTags);
        if(add_Tags != "")
        {
            return "addedTags="+add_Tags;
        }
        return "";
    }
    else if(addedTags.length == 0 && deletedTags.length > 0)
    {
        var dlt_Tags = getTagsInString(deletedTags);
        if(dlt_Tags != "")
        {
            return "deletedTags="+dlt_Tags;
        }
        return "";
    }
    else 
    {
        var add_Tags = getTagsInString(addedTags);
        var dlt_Tags = getTagsInString(deletedTags);
        var rslt = "";
        if(trim(add_Tags) != "")
        {
            rslt = "addedTags="+add_Tags;
        }
        if(trim(dlt_Tags) != "")
        {
            if(rslt != "")
            {
                rslt = rslt + "&" ;
            }
            rslt = rslt+"deletedTags="+dlt_Tags;
        }
        return rslt;
    } 
}

function getTagsInString(tagArr)
{
    var tagsInStr = "";
    var ln = tagArr.length;
    for(var v = 0 ; v < ln ; v++ )
    {
        if( trim(tagsInStr) != "" && tagsInStr.lastIndexOf(",") != (tagsInStr.length-1))
        {
            tagsInStr = tagsInStr + ","
        }
        if(trim(tagArr[v]) != "")
        {
            tagsInStr = tagsInStr + getEncodedValue(tagArr[v]);
        }
    }
    tagsInStr = trim(tagsInStr);
    if(tagsInStr.lastIndexOf(",") == (tagsInStr.length-1))
    {
        tagsInStr = tagsInStr.substring(0,(tagsInStr.length-1));
    }
    //alert("tagsInStr::"+tagsInStr+"**");
    return tagsInStr;
}

function deleteBMs()
{
    var bookmarkIds = getSelectedBMIds();

    if(bookmarkIds == "")
    {
        alert("Please select a bookmark to delete");
        return;
    }
    if(!confirm("Do you wish to delete the selected bookmark(s)?"))
    {
        return;
    }
    
    //alert("Delete bookmarkIds:"+bookmarkIds);
    //AJAX request
    try
    {
        var urll = contextPath + "/bookmarks.do?method=deleteBookMark"+
            "&bookMarkIds="+bookmarkIds;
        sendAsyncAJAXRequest('GET',urll,deleteResponse);
    }
    catch(e)
    {
        alert("Unable to delete the selected bookmark");
    }
}

//Returns selected BMIds with comma seperation
function getSelectedBMIds()
{
    var bookmarkIds = "";
    var dbL = BookMarksDB.length;
    for(var v = 0 ; v < dbL ; v++)
    {
        var bmId = BookMarksDB[v].bookmarkId;
        var checkBoxEleId = "CB_"+bmId;
        var checkBoxEle = document.getElementById(checkBoxEleId);
        if(checkBoxEle != null && checkBoxEle.checked == true)
        {
            if(bookmarkIds != "")
            {
                bookmarkIds = bookmarkIds + ","
            }
            bookmarkIds = bookmarkIds+bmId;
        }
    }
    return bookmarkIds;
}

function deleteResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        //alert(resp);
        if(resp[0].result == 'error')
        {
            alert("Unable to delete the selected Bookmarks");
            return;
        }
        handleOnDelete(resp);
        disableSelectAll();
    }
}

function handleOnDelete(resp)
{
    var bookmarkIds = resp[0].bookmarkIds;
    //alert("response::bookmarkIds::"+bookmarkIds);
    var idArr = bookmarkIds.split(",");
    for(var cn = 0 ; cn < idArr.length ; cn++ )
    {
        var bmId = idArr[cn];
        if(bmId != "")
        {
            //Splicing the data from DB
            var dbL = BookMarksDB.length;
            for(var ln = 0 ; ln < dbL ; ln++)
            {
                var bm_id = BookMarksDB[ln].bookmarkId;
                if(bm_id == bmId)
                {
                    BookMarksDB.splice(ln,1);
                    //Breaks the inner for loop
                    break;
                }
            }
            
            //Reconstructing the TagsDB
            var assoTagId = "prvsTags_"+bmId;
            var tagEle = document.getElementById(assoTagId);
            if(tagEle != null)
            {
                var tags = tagEle.value;
                //alert("Associated tags::"+tags);
                if(tags != "none")
                {
                    //If a tag is selected at this delete operation and
                    //it only contains the deleting bmId, then
                    //the whole table is populated.So no div exists for
                    //this bookmark id in the webpage
                    parseAndReconstructTags(bmId,tags,"delete");
                }
            }

            //Removing the row from table if exists(may be cleared on the
            //above scenario)
            var tableTbody = document.getElementById("bookmarkTableTBody");
            var bookmarkRow = document.getElementById("bookmarkRow_"+bmId);
            if(bookmarkRow != null)
            {
                tableTbody.removeChild(bookmarkRow);
            }
        }
    }
    if(idArr.length > 0)
    {
        var tablebody = document.getElementById("bookmarkTableTBody");
        var currentRowCnt = tablebody.childNodes.length;
        //handling display x articles
        //If currentRow count equals 0, getting the previous view on below conditions
        if(currentRowCnt == 0)
        {
            //Getting the previous view
            if(endIndexArray.length > 1)
            {
                var indx = endIndexArray.length-2;
                endIndexArray.splice(indx,2);
            }
            //* if there is no previous view, that is all the bookmarks are deleted 
            //from the first page
            else
            {
                resetEndIndexArray();
            }
        }
        else
        {
            //Getting the current page refreshed
            spliceLastEndIndex();
        }
        populateBookMarksTable();
    }
}

function showMoveDiv()
{
    //if addDiv exists, closing the same
    hideAddDiv();
    
    var bookmarkIds = getSelectedBMIds();
    if(bookmarkIds == "")
    {
        alert("Please select a bookmark to move");
        return;
    }

    var movdiv = document.getElementById("MoveDiv");
    var movEle = document.getElementById("moveCombo");
    var comboOption = formFoldersCombo('add' , '');
    movEle.innerHTML = "<img src=\"images/large_icons/icon_folder_sm.gif\" width=\"16\" height=\"15\" align=\"absmiddle\" class=\"img\"/>Folder:<img src=\"images/spacer.gif\" width=\"7\" height=\"1\"/>"+
                       "<select id=\"moveComboValue\">"+comboOption+"</select> ";
    
    //movdiv.style.position = "absolute";
    //movdiv.classname = "tagmenu";
    movdiv.style.backgroundColor = "#B8D4EC";
    movdiv.style.display = "block";
}

function moveBMs()
{
    var modFolderId = document.getElementById("moveComboValue").value;
    var bookmarkIds = getSelectedBMIds();
    //alert("moveBMs::"+modFolderId);

    try
    {
        var urll = contextPath + "/bookmarks.do?method=moveBMsFolder"+
           "&bookMarkIds="+bookmarkIds+"&folderId="+modFolderId;
        sendAsyncAJAXRequest('GET',urll,moveResponse);
    }
    catch(e)
    {
        alert("Unable to move the selected bookmark");
    }

}

function hideMoveDiv()
{
    var movdiv = document.getElementById("MoveDiv");
    movdiv.style.display = "none";
}

function moveResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result == "error")
        {
            alert("Unable to move the selected folder");
            return;
        }
        handleOnMove(resp);
    }
}

function handleOnMove(resp)
{
    var bmIds = resp[0].bookmarkIds;
    var modFolder = document.getElementById("moveComboValue");
    var folderName = modFolder.options[modFolder.selectedIndex].text;

    var idArr = bmIds.split(",");
    for(var n = 0 ; n < idArr.length ; n++ )
    {
        var bmId = idArr[n];
        if(bmId != "")
        {
            var dbl = BookMarksDB.length;
            for(var cn = 0 ; cn < dbl ; cn++ )
            {
                var bm_id = BookMarksDB[cn].bookmarkId;
                if(bm_id == bmId)
                {
                    BookMarksDB[cn].folderName = folderName;
                    break;
                }
            }
        }
    }
    //To repopulate the current page
    spliceLastEndIndex();
    //
    //Repopulating the bookmarks table
    populateBookMarksTable();
}

function selectOrDeselectAll()
{
    var isSelected = document.getElementById("selectAll").checked;
    var dbCount = BookMarksDB.length;
    for(var c = 0 ; c < dbCount ; c++)
    {
        var bmId = BookMarksDB[c].bookmarkId;
        var checkBxId = "CB_"+bmId;
        if(document.getElementById(checkBxId) != null)
        {
            document.getElementById(checkBxId).checked = isSelected;
        }
    }
}

function disableSelectAll()
{
   document.getElementById("selectAll").checked = false;
}

function showNewFolderDiv()
{
    var divEle = document.getElementById("NewFolderDiv");
    //divEle.style.top = lastMouseClickY;
    //divEle.style.left = lastMouseClickX;
    divEle.style.position = "absolute";
    divEle.classname = "tagmenu";
    divEle.style.backgroundColor = "#FFFFFF";
    divEle.style.display = "block";
    setFocus(document.getElementById("newFolderText"));
}

function hideNewFolderDiv()
{
    document.getElementById("newFolderText").value = "";
    var divEle = document.getElementById("NewFolderDiv");
    divEle.style.display = "none";
}

function renameFolder()
{
    //
    hideRestrictCharDiv();
    //
    var folderId = document.getElementById("form_FolderId").value;
    var modFolderName = document.getElementById("form_FolderName").value;
    var existingFolderName = document.getElementById("form_ExistingFolderName").value;
    
    //If the foldername contains empty value
    if(trim(modFolderName) == "")
    {
        document.getElementById("renameDiv_"+folderId).style.display="none";
        document.getElementById("displayFolderDiv_"+folderId).style.display="block";
        return false;
    }

    //If the name is not modified
    if(existingFolderName == modFolderName)
    {
        //alert("folder name not modified");
        document.getElementById("renameDiv_"+folderId).style.display="none";
        document.getElementById("displayFolderDiv_"+folderId).style.display="block";
        return false;
    }

    //Already folder exists
    if(isFolderExist(modFolderName))
    {
        document.getElementById("renameDiv_"+folderId).style.display="none";
        document.getElementById("displayFolderDiv_"+folderId).style.display="block";
        return false;
    }


    
    //Send AJAX call
    try
    {
        var urll = contextPath + "/bookmarks.do?method=renameFolder"+
                "&folderId="+folderId+"&modFolderName="+modFolderName;
        sendAsyncAJAXRequest('GET',urll,renameFolderResponse);
    }
    catch(e)
    {
        alert("Unable to rename the selected folder");
    }
    return false;
}

function renameFolderResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result == 'error')
        {
            alert("Unable to rename the selected folder");
            return;
        }
        handleOnRename();
    }
}

function handleOnRename()
{
    var folderId = document.getElementById("form_FolderId").value;
    var existingFolderName = document.getElementById("form_ExistingFolderName").value;
    var folderName = document.getElementById("form_FolderName").value;

    //FoldersDB modification
    var dbLn = FoldersDB.length;
    for(var cn = 0 ; cn < dbLn; cn++)
    {
        var fId = FoldersDB[cn].folderId;
        if(fId == folderId)
        {
            FoldersDB[cn].folderName = folderName;
            break;
        }
    }
    
    //Folder Panel modification
    var disFold = getLeftHandDisplayString(folderName,11);
     
    var mappContent = getMapContent(folderId,folderName); 

    var displayDivInnHTML = "<table><tr><td style=\"font-size:12px; font-weight:normal;\"><a title=\""+folderName+"\" href=\"javascript:setSelectedFolder('"+folderName+"')\">"+disFold+"</a></td><td><div id=\"showImage_"+folderId+"\" style=\"display:none\">"+mappContent+"<img src=\"images/option.gif\" USEMAP=\"#MAP_"+folderId+"\"></div></td></tr></table>";
    var dispDivEle = document.getElementById("displayFolderDiv_"+folderId);
    dispDivEle.innerHTML = displayDivInnHTML;
    //
    document.getElementById("renameDiv_"+folderId).style.display="none";
    document.getElementById("displayFolderDiv_"+folderId).style.display="block";
    //

    //BookMarksDB FolderName modification
    var dbL = BookMarksDB.length;
    for(var v = 0 ; v < dbL ; v++)
    {
        var fName = BookMarksDB[v].folderName;
        if(fName == existingFolderName)
        {
            BookMarksDB[v].folderName = folderName;
        }
    }
    //** Repopulating the bookmark DB **
    //If the currentSlxn is Folder and currentFolder is the folder getting modified,
    //changing the currentFolder value to the modified folder name
    if(currentSlxn == "Folder")
    {
        if(currentFolder == existingFolderName)
        {
            currentFolder = folderName;
        }
    }
    //
    spliceLastEndIndex();
    //Repopulate the tables
    populateBookMarksTable();
}

function isFolderExist(fldrName)
{
    var foldLn = FoldersDB.length;
    for(var cn = 0 ; cn < foldLn ; cn++ )
    {
        foldName = FoldersDB[cn].folderName;
        if(foldName == fldrName)
        {
            return true;
        }
    }
    return false;
}

function addFolder()
{
    var val_ele = document.getElementById("newFolderText");
    var val = val_ele.value;
    if(!validate(val))
    {
        alert("Please enter a valid folder name");
        setFocus(val_ele);
        return;
    }

    //Already exists check
    if(isFolderExist(val))
    {
        alert("Folder name already exists. Please enter a different name");
        setFocus(val_ele);
        return;
    }
    //
    val = getEncodedValue(val);

    //Send AJAX call
    try
    {
        var urll = contextPath + "/bookmarks.do?method=addFolder"+
                "&userId="+userId+"&folderName="+val;
        sendAsyncAJAXRequest('GET',urll,addFolderResponse);
    }
    catch(e)
    {
        alert("Unable to add folder");
    }
}

function addFolderResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval(xmlhttp.responseText);
        if(resp[0].result == 'error')
        {
            alert("Unable to add folder");
            return;
        }
        handleOnAddFolder(resp);
        hideNewFolderDiv();
    }
}

function handleOnAddFolder(resp)
{
    var folderName = document.getElementById("newFolderText").value;
    var folderId = resp[0].folderId;
    //
    var foldersDiv = document.getElementById("foldersDiv");
    FoldersDB[FoldersDB.length] = new Folder(folderId,folderName);
    populateFolders(folderId,folderName,foldersDiv);
    //
    //Since the editDiv has been set at the time of display, the folder
    //combo remains unchanged till the table repopulates.So 
    //repopulating the table which in turn gets the new folder in their
    //edit div's folder combo. 
    //
    spliceLastEndIndex();
    //
    populateBookMarksTable();
}
//Used in on fly.
//Stores the tagName Vs bmIdcount
function CloudViewObject(tagName,bmIdCount)
{
    this.tagName = tagName;
    this.bmIdCount = bmIdCount;
}

function showCloudView()
{
    var tagsLn = TagVsBMIdDB.length;
    if(tagsLn == 0)
    {
        alert("No tags available for cloud view");
        return;
    }
    //
    var topMenuDiv = document.getElementById("topMenusDiv");
    topMenusDiv.style.display = "none";
    var bmDiv = document.getElementById("bookmarksTableDiv");
    bmDiv.style.display = "none";
    var nextXDiv = document.getElementById("nextXArticlesDiv");
    nextXDiv.style.display = "none";
    //
    var cloudViewArray = new Array();
    var iterationArray = new Array();
    var maxCount = 0;

    //
    for(var v = 0 ; v < tagsLn ; v++ )
    {
        var tName = TagVsBMIdDB[v].tagName;
        var bmIdArr = TagVsBMIdDB[v].bmIdArray;
        var arrCnt = bmIdArr.length;
        //Always passes the below condition
        if(arrCnt > 0)
        {
            //Setting in colud view
            cloudViewArray[cloudViewArray.length] = new CloudViewObject(tName,arrCnt);
            //Setting maximum bookmarks count associated to a tag
            if(arrCnt > maxCount)
            {
                maxCount  = arrCnt;
            }


            //Setting iteration level
            //
            if(indexOfArr(iterationArray,arrCnt) == -1)
            {
                iterationArray[iterationArray.length] = arrCnt;
            }
        }
    }
    //

    var iterationLength = iterationArray.length;
    //if iterationLength > 50
    var multiplyingFactor = 1;
    if(iterationLength <= 20 )
    {
        multiplyingFactor = 5;
    }
    else if(iterationLength <= 50 )
    {
        //Decimal value will be set here
        multiplyingFactor = (100/iterationLength);
    }
    //alert("IterationLength:::"+iterationLength+"::MultiplyingFactor::"+multiplyingFactor+"**maxCount:"+maxCount);

    var maxFont = multiplyingFactor * iterationLength;
    var fontXFactor = (maxCount/maxFont);

    //Since adding 25 for the resultant color value,set
    //the maximum color value to 230
    var maxColor = 230;
    var colorXFactor = (maxCount/maxColor);

    //alert("Font X Factor:::"+fontXFactor+"** Color X Factor:"+colorXFactor);
    displayCloudView(cloudViewArray,fontXFactor,colorXFactor);
}

function displayCloudView(cloudViewArray,fontXFactor,colorXFactor)
{
    var dbCount = cloudViewArray.length;
    var cloudEle = document.getElementById("cloudViewDiv");
    cloudEle.innerHTML = "";
    cloudEle.style.display="block";
    //In case of black background,below background color needs to be set.
    //For white background just comment out this.
    //cloudEle.style.backgroundColor= "rgb(0,0,0)";
    var htmlContent = "";    
    for(var i = 0 ; i < dbCount ; i++ )
    {
        var tName = cloudViewArray[i].tagName;
        var bmCount = cloudViewArray[i].bmIdCount;
        var fontSize = 12;
        if(fontXFactor != 0)
        {
            fontSize = fontSize+(bmCount/fontXFactor);
        }
        var fontColor = 25;
        if(colorXFactor != 0)
        {
            fontColor = fontColor+parseInt(bmCount/colorXFactor);
        }
        //In case of black background, below logic needs to be commented.
        fontColor = 255-fontColor;
        htmlContent = htmlContent+"<span style=\"padding:5px 0px 0px 5px;font-weight:bold;\"><a title=\""+tName+"("+bmCount+")\" style=\"text-decoration:none;color:rgb("+fontColor+","+fontColor+","+fontColor+");font-size:"+fontSize+";\" href=\"javascript:setSelectedTag('"+tName+"')\">  "+ tName+"</a></span>";
    }
    cloudEle.innerHTML = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td style=\"padding-left:5px; border-top:solid 1px #999; border-left:solid 1px #999; border-right:solid 1px #999; background-color:#b8d4ec;\">Tag Cloud:</td><td align=\"right\" class=\"toplink\"></td></tr></table><table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"formtext\"><tr><td align=\"left\" valign=\"top\" style=\"border:solid 1px #999; height:500px\"><div>"+htmlContent+"</div></td></tr></table>";
}

function hideCloudViewDiv()
{
    var cloudEle = document.getElementById("cloudViewDiv");
    cloudEle.style.display = "none";
    //
    var topMenuDiv = document.getElementById("topMenusDiv");
    topMenusDiv.style.display = "block";
    var bmDiv = document.getElementById("bookmarksTableDiv");
    bmDiv.style.display = "block";
    var nextXDiv = document.getElementById("nextXArticlesDiv");
    nextXDiv.style.display = "block";
    //
}

function setNextXArticle(limit)
{
    nextXArticleLimit = limit;
    resetEndIndexArray();
    populateBookMarksTable();
}

function resetEndIndexArray()
{
    endIndexArray = new Array();
}

function showNextXArticle()
{
    populateBookMarksTable();
}

function previousXArticle()
{
    var ln = endIndexArray.length;
    if(ln > 1)
    {
        //Splicing the last two end indexes and populating the bookmarks table
        endIndexArray.splice((ln-2),2);
        populateBookMarksTable();
    }
}

function spliceLastEndIndex()
{
    var ln = endIndexArray.length;
    //Always goes through the below condition
    if(ln > 0)
    {
        endIndexArray.splice((ln-1),1);
    }
}

function isValidFldrOrTag(str,type)
{
    var regExp = null;
    if(type == 'folder')
    {
        regExp = /^[a-z-a-z0-9_\-\.\@\$]{0,100}$/i;
    }
    else if(type == 'tag')
    {
        regExp = /^[a-z-a-z0-9_,\-\.\@\$]{0,256}$/i;
    }
    if (!regExp.test(str)) 
    {
        return false;
    }
    return true;
}

function checkFldrTagStr(idd,type)
{
    var textId = document.getElementById(idd);
    var val = textId.value;
    if(!isValidFldrOrTag(val,type))
    {
        textId.value = val.substring(0,(val.length)-1);
        var pointXX = findPosX(textId);
        var pointYY = findPosY(textId);
        pointYY = pointYY-30;
        showRestrictCharDiv(pointXX,pointYY,type);
    }
    return true;
}

function showRestrictCharDiv(xx,yy,type)
{
    var divv = document.getElementById("restrictCharDiv");
    var innrmssg = "";
    if(type == 'folder')
    {
        innrmssg = "Accepts only -_ @\$. a to z and 0 to 9";
    }
    else if(type == 'tag')
    {
        innrmssg = "Accepts only -_ ,@\$. a to z and 0 to 9";
    }
    divv.innerHTML = "<span style=\"color: rgb(255, 0, 0);\">"+innrmssg+"</span>";
    divv.style.top = yy;
    divv.style.left = xx;
    divv.style.position = "absolute";
    divv.classname = "tagmenu";
    divv.style.backgroundColor = "rgb(255, 255, 51)";
    divv.style.display="block";
}

function hideRestrictCharDiv()
{
    var divv = document.getElementById("restrictCharDiv");
    divv.style.display="none";
}

function indexOfArr(arr,str)
{
    var indx = -1
    var ln = arr.length;
    if(ln != 0)
    {
        for(var i = 0 ; i < ln ; i++ )
        {
            var tmp = arr[i];
            if(tmp == str)
            {
                indx = i;
                break;
            }
        }
    }
    return indx;
}

function addFldrOnEnter(ev)
{
    var keyCode = ev.keyCode;
    if(keyCode == 13)
    {
        addFolder();
    }
}
