//methods for handling the authentication and registration aspects of the site

var bookmark = 
{
    data : null,
    url :  null,
    navUrl : null,
    resultsPerCall : gyzork.numberReturnedPerQuery,
    currentCategoryId : null,
    currentBrowseCategoryId : null,
    contentId : 0,
	control :null,
	buttonLabel : null,
	container: null,
	bookmarkId : null,
	usingSearch : false,
	currentSearchTerm : null,
	currentDisplayCount : 0,
	currentDisplayTotal : 0,
	performingInit : true,
	buttonLabel : "",
    pageCount : 1,
	scrollEnabled : 0,
	resultsElement : null,
	resultsContainerElement : null,
	
    init : function()
    {
        bookmark.resultsElement = document.getElementById("results");
        bookmark.resultsContainerElement = document.getElementById("resultsContainer");

		// establish either list or detail view
    	gyzork.establishItemViewMode("GyzorksPage","list");  

        var queryParameters = gyzork.getQueryParameters();
           
        //initialize our DHTML history
        dhtmlHistory.initialize();
    
        //subscribe to DHTML history change events
        dhtmlHistory.addListener(bookmark.historyChange);
    
        gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.browseDisplayableLabel);
        
	    bookmark.currentCategoryId =0;
	    if (typeof queryParameters["categoryId"] != "underfined")  bookmark.currentCategoryId = 0;
        if ( typeof queryParameters["fText"] != "undefined") {
            bookmark.currentSearchTerm = decodeURI( queryParameters["fText"] ).trim();
            gyzork.updateContent(document, "findSimilarId", "value", bookmark.currentSearchTerm);
            bookmark.usingSearch = true;
            bookmark.selectType("find");
        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.similarDisplayableLabel);
        }

        var url = "/bookmarkQuery.html";
        bookmark.url = url + "?queryOperation=BOOKMARKS&format=JSON&orderBy=BOOKMARKS_DATE&tsvRootDimensionId=";

        bookmark.navUrl = url + "?queryOperation=CATEGORY_COUNTS&format=JSON&tsvRootDimensionId=",

		bookmark.searchQuery="&searchConstraints=TITLE,NOTES&searchTerm=";

        bookmark.callForBookmarks(bookmark.resultsPerCall,1);
	    bookmark.callForDimensionNav();
	    
	    // initialize the content frame resizer, with the vertical elements
        // that are used in this view.
        contentResizer.init({ 
        	'header': 0, 
      		'footer': 0
        });
    },

    handleContentChange : function(selectBox)
    {
    	var ccId = selectBox.value;
    	setCookie("ccId",ccId,365);
    	
    	var location = window.location.href;
    	var pos = location.indexOf("#");
    	if (pos > -1) 
    		location = window.location.href.substring(0, pos);
    		
    	if (bookmark.usingSearch) {
            fText = encodeURI( bookmark.currentSearchTerm );
            
            location += "#categoryId=0&fText=" + fText + "&CC_ID=" + ccId;
        }

   		window.location.href = location;
   		if (bookmark.usingSearch)  window.location.reload();
    },
    
	historyChange : function(newLocation, historyData) 
    {
        if (bookmark.performingInit)  return;
        
        if (window.parent.modalWindow.showingDetailModal) {
        	gyzork.closeModalWindow();
        	history.go(1);
        }

        bookmark.currentCategoryId = 0;
        bookmark.pageCount = 1;

        if ( historyData ) {
            if ( historyData.categoryId )  bookmark.currentCategoryId = historyData.categoryId;
            if ( historyData.fText ) {
                bookmark.currentSearchTerm = historyData.fText;
                gyzork.updateContent(document, "findSimilarId", "value", historyData.fText);
                bookmark.usingSearch = true;
            } else {
                bookmark.usingSearch = false;
            }
        }
        
        if ( bookmark.usingSearch ) 
        {
    		bookmark.currentBrowseCategoryId = bookmark.currentCategoryId;
            gyzork.updateContent(document, "browse-selector", "style.display", "block");
            gyzork.updateContent(document, "find-selector", "style.display", "none");
            gyzork.updateContent(document, "search-box-container", "style.display", "block");
            gyzork.updateContent(document, "find-label", "style.display", "none");
            gyzork.updateContent(document, "browse-label", "style.display", "none");
        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.similarDisplayableLabel);
        } else {   
            gyzork.updateContent(document, "browse-selector", "style.display", "none");
            gyzork.updateContent(document, "find-selector", "style.display", "block");
            gyzork.updateContent(document, "search-box-container", "style.display", "none");
            gyzork.updateContent(document, "find-label", "style.display", "none");
            gyzork.updateContent(document, "browse-label", "style.display", "block");
        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.browseDisplayableLabel);
			bookmark.currentSearchTerm = "";
	    }

        bookmark.callForBookmarks(bookmark.resultsPerCall,1);
	    bookmark.callForDimensionNav();
     },   
    
    bookmarkState : function()
    {
        var complexObject = new Object();
        complexObject.categoryId = bookmark.currentCategoryId;
        if (bookmark.usingSearch) 
        	complexObject.fText = bookmark.currentSearchTerm;

        var label = "categoryId=" + bookmark.currentCategoryId;
        label += "&CC_ID=" + complexObject.CC_ID;
        
        if (bookmark.usingSearch) 
            label += "&fText=" + bookmark.currentSearchTerm;
            
        label = encodeURI( label );

		//if the label is empty the browser will simply refresh and really mess things up
        dhtmlHistory.add(label, complexObject);
    },
    
    selectCategory : function(contentId)
    {
        bookmark.navigationChange(contentId);
    },
    
    navigationChange : function(categoryId)
    {
        bookmark.pageCount = 1;
		bookmark.currentCategoryId = categoryId;
		bookmark.currentDisplayCount = 0;
		
	    // clear the results area
	    gyzork.removeAllChildren("results");
	    bookmark.callForBookmarks(bookmark.resultsPerCall,1);
        bookmark.callForDimensionNav();
		bookmark.bookmarkState();       
    },

    callForDimensionNav : function()
    {
        var call = bookmark.navUrl + bookmark.currentCategoryId;
		if(bookmark.usingSearch)
			call  += bookmark.searchQuery  + bookmark.currentSearchTerm.replace(/\"/g,"").replace(/'/g, "");
	    new XHR( {method: 'get', onSuccess: bookmark.handleBookmarkJSON, async: true } ).send(call);    
    },
      
    callForBookmarks : function(numberPerPage, pageNumber) 
    {
	    var call = bookmark.url+ bookmark.currentCategoryId;
	    
		if(bookmark.usingSearch) {
			call  += bookmark.searchQuery + bookmark.currentSearchTerm.replace(/\"/g, "").replace(/'/g, "");

        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.similarDisplayableLabel);
		} else {
        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.browseDisplayableLabel);
		}

	    if(numberPerPage!=null)
		    call +='&numberPerPage='+ numberPerPage;
	    if(pageNumber!=null)
		    call +='&pageNumber='+ pageNumber;
		    
	     new XHR( {method: 'get', onSuccess: bookmark.handleBookmarkJSON, async: true } ).send(call);
    },

    handleBookmarkJSON : function(response)
    {
	    if(response==null) return;
	    
        var data = Json.evaluate( response);
 
 	    if ( data.bookmarks != null ) 
 	    {
			// is we got a request for an initial page and there are no results
			// then blank out everything
            if (data.bookmarks.length == 0) 
            {
                if (bookmark.pageCount == 1) {
            	    bookmark.clearDimensionNav();
                    var message = (bookmark.usingSearch) ? gyzork.noResultsMessage :  gyzork.noGyzorksMessage;
                    bookmark.resultsElement.innerHTML = message;
            	    gyzork.updateContent(document, "find-label", "style.display", "none");
                    gyzork.updateContent(document, "browse-label", "style.display", "none");
        	        gyzork.updateContent(document, "displayedCount", "innerHTML", 0);
		            gyzork.updateContent(document, "displayableCount", "innerHTML", 0);
		        } else {
    				gyzork.updateContent(document, "displayableCount", "innerHTML", document.getElementById("displayedCount").innerHTML);
		            gyzork.updateContent(document, "bookmarks-loader-" + bookmark.pageCount, "style.display", "none");
		        }
 	        } 
 	        else 
 	        {
                if (bookmark.pageCount > 1) 
                	gyzork.updateContent(document, "results-loader-template", "style.display", "none");

            
				if(bookmark.usingSearch){
					gyzork.updateContent(document, "browse-label", "style.display", "none");
					gyzork.updateContent(document, "find-label", "style.display", "block");
				}
				else{					
	             	gyzork.updateContent(document, "find-label", "style.display", "none");
	                gyzork.updateContent(document, "browse-label", "style.display", "block");
	            }

    	        bookmark.data = data;
 	            bookmark.processBookmarkData(bookmark.data);
 	            if (bookmark.pageCount <=1)   bookmark.currentDisplayCount = 0;
 	            
 	            bookmark.currentDisplayCount +=  bookmark.data.bookmarks.length;	            
        	    gyzork.updateContent(document, "displayedCount", "innerHTML", bookmark.currentDisplayCount);
        	    
			    var total = (bookmark.data.metaData !=null && typeof bookmark.data.metaData !="undefined")
			    			? bookmark.data.metaData.totalResults : 0;
			    if ( (bookmark.pageCount == 1) || (bookmark.currentDisplayTotal < total) ) {			    			
			    	bookmark.currentDisplayTotal = total;
		        	gyzork.updateContent(document, "displayableCount", "innerHTML", total);
		        }

		        if (bookmark.currentDisplayCount < total) {
		        	window.setTimeout("gyzork.checkNumberOfResults('bookmark');", 250);
		        	bookmark.enableScroll();
		        } else {
		        	bookmark.disableScroll();
		        }
            }
        } 
    
        if ( data.breadcrumbs != null )  
        { 
            var breadcrumbs = data.breadcrumbs;
            breadcrumbs[0].nodeLabel = "All Categories";
            breadcrumbs[0].fullLabel = "All Categories";
            gyzork.displayLeftGutterCategoryInfo("bookmark", data.breadcrumbs);
        }
         
        if (data.bookmarkedContentIds != null) { 
            gyzork.bookmarkIds = data.bookmarkedContentIds;
            bookmark.doIt(this, bookmark.contentId, false, false, bookmark.buttonLabel, true);
        }
    },

    processBookmarkData : function(bookmarkData)
    {
	    if(bookmarkData.bookmarks.length==0)
	   	    return; 
	
        bookmark.performingInit = false;
	        
        if (bookmark.pageCount == 0)  gyzork.removeAllChildren("results");

	    var originalTemplate = document.getElementById("bmTemplate");
	    var originalTemplateParent = originalTemplate.parentNode;
		originalTemplateParent.removeChild(originalTemplate);
	    for(var x=0;x<bookmarkData.bookmarks.length;x++)
	    {   
		    var bm = bookmarkData.bookmarks[x];
			var template = originalTemplate.cloneNode(true);
			bookmark.resultsElement.appendChild(template);
		    gyzork.createBookmarkResultItemElement("bookmark", template, bm);

		    if(x>0)  gyzork.updateContent(template, "lineId", "style.display", "block");

			// leave these here since they are specific to the gyzorks page only and not the detail page
			gyzork.updateContent(template, "editButton", "href", "javascript:bookmark.editBookmark('"+template.id+"',"+bm.bookmarkId+");");
			gyzork.updateContent(template, "editButton", "id", "editButton-"+bm.bookmarkId);
			gyzork.updateContent(template, "deleteButton", "href", "javascript:bookmark.deleteBookmark('"+template.id+"',"+bm.bookmarkId+");");
			gyzork.updateContent(template, "deleteButton", "id", "deleteButton-"+bm.bookmarkId);
    	    gyzork.handleItemDisplay(template);
	    }
	    originalTemplateParent.appendChild(originalTemplate);
    },   

    editBookmark : function(template,id)
    {
	    bookmark.editIt(document.getElementById(template),id);
    },

    deleteBookmark : function(container,id)
    {
	    if(confirm("Are you sure you want to delete the selected bookmark?"))
	    	bookmark.deleteIt(document.getElementById(container),id);
    },
    
    setupScrollForContent : function()
    {
	    // fetch more content
	    if(bookmark.data.metaData.currentPage >= bookmark.data.metaData.pageCount){
		    window.onscroll = null;
		    return;
	    }
	    window.onscroll = bookmark.scrollCall;
    },     
   
    authenticationDone : function()
    {
        new XHR( {method: 'get', onSuccess: bookmark.handleBookmarkJSON, async: true } ).send(gyzork.bookmarkServer);    
    },
    
	doIt :function (control,
					contentId,
					showContentCtrl,
					showUrlCtrl,
					buttonLabel,
					refresh)
	{
		if (typeof refresh != "undefined")  modalWindow.refreshPage = refresh;
	    bookmark.contentId = contentId;
	    bookmark.buttonLabel = buttonLabel;
	    
	    if (! authenticated) {
	        delete gyzork.bookmarks;
	        authentication.showLogin(this, "bookmark.authenticationDone();");
	        return;
	    }
	    
	    if ( gyzork.bookmarkIds[contentId] ) {
	        discover.addGyzork(buttonLabel, contentId);
	        alert("Article has already been Gyzork'd");
	        
	    	if (modalWindow.refreshPage)  window.parent.location.reload( false );
	    } else {
		    bookmark.contentId=contentId;
		    bookmark.control = control;
		    bookmark.buttonLabel = buttonLabel;

			var contentCollectionId =(typeof gyzork !='undefined' && gyzork ) 
								? gyzork.getContentCollectionId() : 'rssblogs';
		    var url = "bookmark.html?operation=CREATE&CC_ID="+contentCollectionId;
	    	if(showContentCtrl==true || showUrlCtrl==true)
	    	{
			     url +="&NIC=true";
			     if(showUrlCtrl)
			    	 url +="&showUrlCtrl=true";
			     else
				     url +="&showContentCtrl=true";
		    }
		    else{
			    url +="&NIC=false&CONTENT_ID="+contentId;
		    }	
		    var iframe = modalWindow.buildIFrame(500,400,url);  
		    modalWindow.show(iframe,"#000000",500,400);
		}
	},
	

	deleteIt :function (container,bookmarkId)
	{
		bookmark.container = container;
		var url = "bookmark.html?operation=DELETE&BM_ID=" + bookmarkId+"&format=JSON";
        new XHR( {method: 'post', onFailure : bookmark.deleteFailure,  onSuccess: bookmark.updateDelete, async: true } ).send(url);
	},
	
	deleteFailure:function()
	{
		alert("An error has occured while attempting to delete the selected Gyzork");
	},

	updateDelete:function()
	{
		// need to get it from the container from the bookmark object directly
		var container = bookmark.container;
		if(container!=null){
			var id = container.id.split("-")[0];
			container.parentNode.removeChild(container);
			var seperator = document.getElementById(id+-'-seperatorLine');
			if(seperator!=null)
				seperator.parentNode.removeChild(seperator);
		}
		bookmark.callForDimensionNav();
		
		bookmark.currentDisplayCount--;
		gyzork.updateContent(document, "displayedCount", "innerHTML", bookmark.currentDisplayCount);
		gyzork.updateContent(document, "displayableCount", "innerHTML", bookmark.currentDisplayCount);		
	},

	editIt : function(container,bookmarkId,showContentCtrl,showUrlCtrl)
	{
		bookmark.container=container;
		bookmark.bookmarkId= bookmarkId;
		var url = "bookmark.html?operation=MODIFY&BM_ID="+bookmarkId;
		if(showContentCtrl==true || showUrlCtrl==true)
		{
			 url +="&NIC=true";
			 if(showUrlCtrl)
				 url +="&showUrlCtrl=true";
			 else
				 url +="&showContentCtrl=true";
		}
		var iframe = modalWindow.buildIFrame(500,400,url);  
		modalWindow.show(iframe,"#000000",500,400);
	},

	updateEdits : function(title,notes,contentCollectionId)
	{
       gyzork.updateContent(bookmark.container, "results-data-title-"+bookmark.bookmarkId, "innerHTML", title+ 
       			'<span class="titleDescriptionText" >'+ ' - ' +notes+'</span>');

		element = document.getElementById("results-data-related-"+bookmark.bookmarkId);
		if (typeof element != "undefined") {       
        	var href = CTXT_ID + "/detail.html?bookmarkId=" + bookmark.bookmarkId + "&contentId=" + bookmark.contentId;
        	if (gyzork.detailPageFormat == "modal") 
            	href = "javascript:gyzork.showDetailAsModal('" + CTXT_ID + "/modalDetail.html?bookmarkId=" + bookmark.bookmarkId + 
                       "&contentId=" + bookmark.contentId + "&SOURCE_CC_ID=" + contentCollectionId + "');";
        	element.href = href;
        	
        	var label = "View Related " + contentCollectionId;
        	element.innerHTML = label;
        }
	},
	
    createSuccessful : function()
    {
	    modalWindow.close();
	    discover.addGyzork(this.buttonLabel, this.contentId);
	        
		if (modalWindow.refreshPage)
		{
        	if(!window.parent.parent)
         		window.parent.document.location.href = window.parent.document.location.href;
            else if(typeof detail.repaintMain != "undefined")
            	detail.repaintMain = true;
        }
        
        if ( window.parent.modalWindow.showingDetailModal && (window.parent.location.href.indexOf("gyzorks.html") > -1) )
        	window.parent.modalWindow.refreshPage = true;
    },
 
    submitFindRequest : function() 
    {   
        bookmark.pageCount = 1;

        var element = document.getElementById("findSimilarButtonId").focus();
        bookmark.currentSearchTerm = document.getElementById("findSimilarId").value.trim();
	    gyzork.removeAllChildren("results");
        bookmark.clearDimensionNav();
		bookmark.callForBookmarks(bookmark.resultsPerCall,1);
	    bookmark.callForDimensionNav(0);

	    bookmark.bookmarkState();
    },

    clearDimensionNav : function()
    {
        var navChildren = document.getElementById('list').childNodes;
        
	    // element 0 is the template, don't delete it
	    for(var x=navChildren.length;x>1;x--)
	    {
    		var item = navChildren[x-1];
		    item.parentNode.removeChild(item);
	    }  
	    gyzork.updateContent(document, "currentNavLocation", "innerHTML", ""); 
	},
  
	selectType : function(type)
    {
        gyzork.selectType(type); // delegate common behavior

        if (type == "find") 
        {
    		bookmark.currentBrowseCategoryId = bookmark.currentCategoryId;
			bookmark.currentCategoryId = 0;
	        bookmark.clearDimensionNav();
			bookmark.usingSearch= true;
            gyzork.updateContent(document, "find-label", "style.display", "none");
            gyzork.updateContent(document, "browse-label", "style.display", "none");
            gyzork.updateContent(document, "contentHeader", "innerHTML", "Find Gyzorks to Manage");
			bookmark.currentSearchTerm = document.getElementById("findSimilarId").value.trim();
        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.similarDisplayableLabel);
    		
        } else {   
			bookmark.usingSearch= false;
            gyzork.updateContent(document, "contentHeader", "innerHTML", "Manage Your Gyzorks");
            gyzork.updateContent(document, "find-label", "style.display", "none");
            gyzork.updateContent(document, "browse-label", "style.display", "block");
            bookmark.navigationChange(bookmark.currentBrowseCategoryId);
			bookmark.currentSearchTerm = "";
        	gyzork.updateContent(document, "displayableLabel", "innerHTML", gyzork.browseDisplayableLabel);
        }
    },
    
    setViewType : function(type)
    {
        if (type == "list") {
            gyzork.hideAll();
            
            if (bookmark.currentDisplayCount < bookmark.currentDisplayTotal)     
            	window.setTimeout("gyzork.checkNumberOfResults('bookmark');", 100);
        } else {
            gyzork.showAll();
        }
    },
    
    disableScroll : function() 
    {
        bookmark.scrollEnabled = 0;
    },
    
    enableScroll : function()
    {
        if (bookmark.scrollEnabled)  return;
        
        bookmark.scrollEnabled = 1;
        window.setTimeout('bookmark.checkScroll()', 250);
    },
    
    checkScroll : function() 
    {
    	// If no scroll bar, then return
        if (bookmark.resultsContainerElement.scrollHeight <= bookmark.resultsContainerElement.offsetHeight)  return;
        
    	bookmark.disableScroll();
    	
        var e = bookmark.resultsContainerElement;
        
        var pos = e.scrollHeight - (e.offsetHeight + e.scrollTop);
        // pos < e.scrollTop was to ensure that the first page does not scroll until the user moves the scroll bar, even if pos < 40.
		if ( (pos < gyzork.scrollTrigger)  && (pos < e.scrollTop) )  {

		    var tmpCount = bookmark.pageCount + 1;
            gyzork.updateContent(document, "results-loader-template", "style.display", "block");
        
			window.setTimeout('bookmark.getMoreResults()', 250);
			
		} else {
		    bookmark.enableScroll();
		}
    },

    getMoreResults : function() 
    {
    	bookmark.disableScroll();
    
        bookmark.pageCount++;
        bookmark.callForBookmarks(bookmark.resultsPerCall,bookmark.pageCount);
    }
}
