﻿
var BookClubsUtil = {
    maxBookmarks:5,
    countBookmarks:0,
    bookmarksAdded:0,
    countSubscriptions:0,
    subscriptionsAdded:0,
    loginId:null,
    rememberLogin:false,
    bookclubsUrl:"http://bookclubs.barnesandnoble.com",
    restUrl: "http://bookclubs.barnesandnoble.com/restapi/vc",
    session_key:"",
    prettyDate:function(time){

    /*
     * JavaScript Pretty Date
     * Copyright (c) 2008 John Resig (jquery.com)
     * Licensed under the MIT license.
     */
     
    // Modified by myang to take GMT time
    // Returns a string representing how long ago the date represents.

    var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
	    diff = (((new Date()).getTime() + (new Date().getTimezoneOffset() * 60000) - date.getTime()) / 1000),
	    day_diff = Math.floor(diff / 86400);

        if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
	        return "";
    			
        return day_diff == 0 && (
		        diff < 60 && "just now" ||
		        diff < 120 && "1 minute ago" ||
		        diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
		        diff < 7200 && "1 hour ago" ||
		        diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
	        day_diff == 1 && "Yesterday" ||
	        day_diff < 7 && day_diff + " days ago" ||
	        day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
    },
    $:function(id) {
        return document.getElementById(id);
    },
    formatGMTDates:function(elm) {
        var datesArray = elm.getElementsByTagName("span")
        for (var i = 0; i < datesArray.length; i++) {
            datesArray[i].innerHTML = BookClubsUtil.prettyDate(datesArray[i].innerHTML);
        }
    },
    getHtml:function(target,container) {
        var xmlhttp = this.createXHR();
        
        if(target !== ""){
        var url = target;
        xmlhttp.open('GET', url, true);
        xmlhttp.onreadystatechange = function() {
          if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            container.innerHTML = xmlhttp.responseText;
          } 
        };
        xmlhttp.send(null);
      }
    },
    getLatestPosts:function(target,container) {
    
        var xmlhttp = this.createXHR();
        
        if(target !== ""){
        var url = target;
        xmlhttp.open('GET', url, true);
        xmlhttp.onreadystatechange = function() {
          if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            
            container.innerHTML = xmlhttp.responseText;
            BookClubsUtil.formatGMTDates(container);
          } 
        };
        xmlhttp.send(null);
      }
    },
    createXHR:function() { 
      var xmlhttp;
      if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
      } 
      else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      return xmlhttp;
    },
    loadScript:function(url, id) {
        var script = document.getElementById(id);
        if (script) {
	        script.parentNode.removeChild(script);
        }

        script = document.createElement("script");
        script.type = "text/javascript";
        script.id = id;	
    	
        script.src = url;
    		
        document.getElementsByTagName("head")[0].appendChild(script);
    },
    getLoginId:function() {
       
        var scriptUrl = this.formatScriptUrl(this.restUrl + "/users/self?xslt=json.xsl&callback=BookClubsUtil.getMessages")
        
        this.loadScript(scriptUrl,"self")
        BookClubsUtil.getBookmarks();
        BookClubsUtil.getSubscriptions();
        
    },
    getMessages:function(result) {
        
        if (result.response.user) {
            if (result.response.user.login) {
                this.loginId = result.response.user.login.$;
                
                var mUrl = this.formatScriptUrl(this.restUrl + "/users/login/" + this.loginId + "/mailbox/notes/inbox/unread?xslt=json.xsl&callback=BookClubsUtil.loadMessages")
                
                this.loadScript(mUrl,"messages");
            }
            else {
                this.$("signin-pod").style.display="";
            }
        }
        
    },
    loadMessages:function(result) {
        
        document.getElementById("myupdates").style.display="";
        this.$("signin-pod").style.display="none"
        this.$("signin-indicator").innerHTML = ""
        
        if (result.response.notes==null) {
            this.$("pm-count").innerHTML = 0;
            return;
        }
            
        var counter = result.response.notes.note.length
        
        if (counter==undefined) {
            this.$("pm-count").innerHTML = 1;
	        document.getElementById("myupdates-container").innerHTML += this.formatPrivateMessage(result.response.notes.note);;
	        return;
        }
        
        this.$("pm-count").innerHTML = counter;
        
        if (counter > 5)
            counter = 5;
        
        for (var i=0;i<counter;i++)
        {
	        this.$("myupdates-container").innerHTML += this.formatPrivateMessage(result.response.notes.note[i]);
        }
        
        
    },
    getBookmarks:function() {
        var bUrl = this.formatScriptUrl(this.restUrl + "/subscriptions/users/self/bookmark/thread/?xslt=json.xsl&callback=BookClubsUtil.loadBookmarks")
        this.loadScript(bUrl,"bookmarks-script")        
    },
    loadBookmarks:function(result) {
    
        this.populateBookmarks(result,"bookmarks","thread");
        
        var bmUrl = this.formatScriptUrl(this.restUrl + "/subscriptions/users/self/bookmark/message/?xslt=json.xsl&callback=BookClubsUtil.loadBookmarkedMessages")
        this.loadScript(bmUrl,"bookmarks-messages-script")
        
    },
    loadBookmarkedMessages:function(result) {
        this.populateBookmarks(result,"bookmarks","message");
        
        var bbUrl = this.formatScriptUrl(this.restUrl + "/subscriptions/users/self/bookmark/board/?xslt=json.xsl&callback=BookClubsUtil.loadBookmarkedBoards")
        this.loadScript(bbUrl,"bookmarks-boards-script")
    },
    loadBookmarkedBoards:function(result) {
        this.populateBookmarks(result,"bookmarks","board");
    },
    getSubscriptions:function() {
        var sUrl = this.formatScriptUrl(this.restUrl + "/subscriptions/users/self/email/thread/?xslt=json.xsl&callback=BookClubsUtil.loadSubscriptions")
        this.loadScript(sUrl,"subscriptions")
    },
    loadSubscriptions:function(result) {
        this.populateBookmarks(result,"subscribe","thread");
        
        var smUrl = this.formatScriptUrl(this.restUrl + "/subscriptions/users/self/email/message/?xslt=json.xsl&callback=BookClubsUtil.loadSubscribedMessages")
        this.loadScript(smUrl,"subscriptions-messages-script")
        
    },
    loadSubscribedMessages:function(result) {
        this.populateBookmarks(result,"subscribe","message");
    },
    populateBookmarks:function(result,id, type) {
        var bookmarkscontainerid = id+"-container"
    
        if (result.response.subscriptions==null)
            return;
            
        var counter = result.response.subscriptions.subscription.length
        
        
        if (id=="bookmarks") {
        
            if (counter==undefined) // only 1 bookmarked thread
                this.countBookmarks += 1;
            else
                this.countBookmarks += counter;
                            
            if (counter > this.maxBookmarks - this.bookmarksAdded)
                counter = this.maxBookmarks - this.bookmarksAdded;
            
            if (this.bookmarksAdded >=5)
                return;
        }
        else if (id=="subscribe") {
            
            if (counter==undefined) // only 1 bookmarked thread
                this.countSubscriptions += 1;
            else
                this.countSubscriptions += counter;
                            
            if (counter > this.maxBookmarks - this.subscriptionsAdded)
                counter = this.maxBookmarks - this.subscriptionsAdded;
            
            if (this.subscriptionsAdded >=5)
                return;
            
		}
        
        if (counter==undefined) { // only 1 bookmark
            switch(type) {
                case "thread":
                    this.$(bookmarkscontainerid).innerHTML += this.formatBookmarkedThreadSnippet(result.response.subscriptions.subscription);
                    break;
                case "message":
                    this.$(bookmarkscontainerid).innerHTML += this.formatBookmarkedMessageSnippet(result.response.subscriptions.subscription);
                    break;
                case "board":
                    this.$(bookmarkscontainerid).innerHTML += this.formatBookmarkedBoardSnippet(result.response.subscriptions.subscription);
                    break;
            }
            if (id=="bookmarks") {
                this.bookmarksAdded++;
            }
            return;
        }
       
        for (var i=0;i<counter;i++)
        {
            switch (type)
            {
                case "thread":
                    this.$(bookmarkscontainerid).innerHTML += this.formatBookmarkedThreadSnippet(result.response.subscriptions.subscription[i]);    
                    break;
                case "message":
                    this.$(bookmarkscontainerid).innerHTML += this.formatBookmarkedMessageSnippet(result.response.subscriptions.subscription[i]);
                    break;
                case "board":
                    this.$(bookmarkscontainerid).innerHTML += this.formatBookmarkedBoardSnippet(result.response.subscriptions.subscription[i]);
                    break;
            }
            
            if (id=="bookmarks") {
                this.bookmarksAdded++;
            }
        }
    },
    formatPrivateMessage:function(thePM) {
        var messageUrl = this.bookclubsUrl + "/t5/notes/privatenotespage/note-id/" + thePM.href.substring(10) + "/notes-view-mode/single"
        var snippet = "<li><a href='"+ messageUrl +"'>" + thePM.subject.$ + "</a> <span class='stand-out'>FROM: " + thePM.from.login.$ +"</span></li>"
        return snippet;
    },
    formatBookmarkedThreadSnippet:function(theThread) {
        var threadUrl = this.bookclubsUrl + "/bn/board/message?board.id=" + theThread.target.messages.topic.board.href.substring(11) + "&thread.id=" + theThread.target.messages.topic.board_id.$;
        var snippet = "<li><a href='"+ threadUrl +"'>" + theThread.target.messages.topic.subject.$ + "</a></li>"
        return snippet;
    },
    formatBookmarkedMessageSnippet:function(theMessage) {
        var messageUrl = this.bookclubsUrl + "/bn/board/message?board.id=" + theMessage.target.board.href.substring(11) + "&message.id=" + theMessage.target.board_id.$ + "#M" + theMessage.target.board_id.$;
        var snippet = "<li><a href='"+ messageUrl +"'>" + theMessage.target.subject.$ + "</a></li>"
        return snippet;
    },
    formatBookmarkedBoardSnippet:function(theBoard) {
        
        var boardUrl = this.bookclubsUrl + "/bn/board?board.id=" + theBoard.target.href.substring(11);
        var snippet = "<li><a href='"+ boardUrl +"'>" + theBoard.target.title.$ + "</a></li>"
        return snippet;
    },
    signMeIn:function() {
        var username = encodeURIComponent(this.$("username").value);
        var password = encodeURIComponent(this.$("password").value);
        
        //this.rememberLogin=BookClubsUtil.$("cb-remember").checked
        
        this.$("signin-indicator").innerHTML = "Please wait..."
        
        this.loadScript(this.restUrl + "/authentication/sessions/login?user.login=" + username + "&user.password=" + password +"&xslt=json.xsl&callback=BookClubsUtil.signInCallback","signin");
    },
    formatScriptUrl:function(url) {
        
        if (this.session_key!="") {
            url +="&restapi.session_key="+this.session_key
        }
      
        return url;
    },
    signInCallback:function(result) {
        if (result.response.status=="success") {
            this.session_key = result.response.value.$;
            
            if (this.rememberLogin)
                bnNav.setCookie("bcSessionKey",this.session_key);
            
            this.getLoginId();
            
            //alert(bnNav.getCookie("bcSessionKey"));
        }
        else 
            alert("Login failed - please try again.");
    },
    checkKey:function(result) {
        if (result.response.status=="success") {
            this.session_key = bnNav.getCookie("bcSessionKey")    
        }
        BookClubsUtil.getLoginId();
    },
    initSignIn:function() {
         if (bnNav.getCookie("bcSessionKey")) {
            var testUrl = BookClubsUtil.restUrl + "/users/self/?xslt=json.xsl&callback=BookClubsUtil.checkKey&restapi.session_key=" + bnNav.getCookie("bcSessionKey")
            BookClubsUtil.loadScript(testUrl);
        }
        else {
            BookClubsUtil.getLoginId(); // maybe signed in thru lithium
        }
    }
} //end

 









