<html>
  <head>
    <title>Bookmarks</title>
    <link id="Flake_v0_Css" rel="stylesheet" type="text/css" href="/users/kishore/css/flake.css?v=2"/>
    <script id="PageFlakesHelper_v0_Script" type="text/javascript" src="http://www.pageflakes.com/users/kishore/pageflake.helper.js?v=26"></script>
    <script id="BookmarksFlake_JS_v0" type="text/javascript"><![CDATA[
      function BookmarksFlake_v0(id) {

        var instance;
        var profile;

        var EMPTY = "";
        var SPACE = "&nbsp;";
        var DELIMITER = "<";
        var SYSTEM_TAG = "system:unfiled";
        var editBookmarkId;
        var action;

        var WindowEnum = {
          NEW : 'new',
          THIS : 'this'
        };

        var DisplayEnum = {
          HIDE : "none",
          SHOW : ""
        };

        var PaginationEnum = {
          NEXT : "next",
          PREVIOUS : "previous"
        };

        var ActionEnum = {
          ADD : "ADD",
          UPDATE : "UPDATE"
        };

        var ProfileEnum = {
          OPEN_LINKS_IN : "OPEN_LINKS_IN",
          BOOKMARKS_PER_PAGE : "BOOKMARKS_PER_PAGE",
          BOOKMARKS : {
            ID : "BOOKMARK",
            TOTAL : "BOOKMARK-TOTAL"
          },
          TAGS : {
            ID : "TAG",
            TOTAL : "TAG-TOTAL"
          }
        }

        var tag  = -1;
        var page = 1;

        var titleEl;
        //var titleErrorEl;
        var urlEl;
        var urlErrorEl;
        var descriptionEl;
        var tagsEl;
        var addBookmarkDivEl;
        var bodyDivEl;
        var openLinksInEl;
        var bookmarksPerPageEl;
        var bookmarksContentEl;
        var tagsContentEl;
        var previousEl;
        var nextEl;

        this.load = function(flakeInstance) {

          instance = flakeInstance;
          profile = instance.Profiles;

          instance.setTitle("Bookmarks");

          this.setProfileDefault(ProfileEnum.BOOKMARKS.TOTAL, 0);
          this.setProfileDefault(ProfileEnum.TAGS.TOTAL, 1);
          this.setProfileDefault(ProfileEnum.TAGS.ID + "0", SYSTEM_TAG);
          this.setProfileDefault(ProfileEnum.BOOKMARKS_PER_PAGE, "5");
          this.setProfileDefault(ProfileEnum.OPEN_LINKS_IN, WindowEnum.NEW);

          titleEl            = $(id + "add_bookmark_title");
          //titleErrorEl     = $(id + "add_bookmark_title_error");
          urlEl              = $(id + "add_bookmark_url");
          urlErrorEl         = $(id + "add_bookmark_url_error");
          descriptionEl      = $(id + "add_bookmark_description");
          tagsEl             = $(id + "add_bookmark_tags");
          addBookmarkDivEl   = $(id + "add_bookmark");
          bookmarksContentEl = $(id + "bookmarks_content");
          tagsContentEl      = $(id + "tags_content");
          bodyDivEl          = $(id + "body");
          openLinksInEl      = $(id + "open_links_in");
          bookmarksPerPageEl = $(id + "bookmarks_per_page");
          previousEl         = $(id + "previous");
          nextEl             = $(id + "next");

	      this.loadProfile();

	      // Overriding toggleEdit here
	      if(!instance._toggleEdit) {
	        instance._toggleEdit = instance.toggleEdit;
	        instance.toggleEdit = $PageFlakesHelper.bind(function() {
	          this.loadProfile();
	          instance._toggleEdit();
	        }, this);
	      }
	      this.showBookmarksAndTags();
	    }

	    this.setProfileDefault = function(key, value) {
	      if(profile[key] == null) {
	        profile[key] = value;
	      }
	    }

	    this.loadProfile = function() {
	      bookmarksPerPageEl.value = profile[ProfileEnum.BOOKMARKS_PER_PAGE];
	      openLinksInEl.value = profile[ProfileEnum.OPEN_LINKS_IN];
	    }

	    this.saveProfile = function() {
	      profile[ProfileEnum.BOOKMARKS_PER_PAGE] = bookmarksPerPageEl.value
	      profile[ProfileEnum.OPEN_LINKS_IN] = openLinksInEl.value;
	      this.resetPage();
	      instance._toggleEdit();
	      this.showBookmarksAndTags();
	      instance.save();
	    }

	    this.show = function(el) {
	      for(var i=0; i < arguments.length ; i++) {
	        arguments[i].style.display = DisplayEnum.SHOW;
	      }
	    }

	    this.hide = function(el) {
	      for(var i=0; i < arguments.length ; i++) {
	        arguments[i].style.display = DisplayEnum.HIDE;
	      }
	    }

	    this.showAddBookmark = function(actionValue) {
	      if(ActionEnum.UPDATE == actionValue) {
	        action = ActionEnum.UPDATE;
	      } else {
	        action = ActionEnum.ADD;
	      }
	      this.hide(bodyDivEl);
	      this.show(addBookmarkDivEl);
	    }

	    this.hideAddBookmark = function() {
	      this.hide(urlErrorEl);
	      this.hide(addBookmarkDivEl);
	      this.show(bodyDivEl);
	    }

	    var BookmarksManager = {

	      getBookmarksTotal : function() {
	        return parseInt(profile[ProfileEnum.BOOKMARKS.TOTAL]);
	      },

	      getBookmarksTotalForTagIndex : function(tagIndex) {
	        var tagProfileValue = profile[ProfileEnum.TAGS.ID + tagIndex];
	        var indexOfDelimiter = tagProfileValue.indexOf(DELIMITER);
	        var count = 0;
	        while(indexOfDelimiter != -1) {
	          count ++;
	          indexOfDelimiter = tagProfileValue.indexOf(DELIMITER, (indexOfDelimiter + 1));
	        }

	        return count;
	      },

	      getTagsTotal : function() {
	        return parseInt(profile[ProfileEnum.TAGS.TOTAL]);
	      },

	      getTagID : function(tag) {
	        var total = BookmarksManager.getTagsTotal();
	        for(var i=0; i < total; i++) {
	          var value = profile[ProfileEnum.TAGS.ID + i];
	          if(value != null) {
	            var indexOfDelimiter = value.indexOf(DELIMITER);
	            if(indexOfDelimiter != -1) {
	              value = value.substring(0, indexOfDelimiter);
	            }
	            
	            if(tag == value) {
	              return i;
	            }
	          }
	        }
	        return -1;
	      },

	      setBookmarksTotal : function(total) {
	        profile[ProfileEnum.BOOKMARKS.TOTAL] = total;
	      },

	      setTagsTotal : function(total) {
	        profile[ProfileEnum.TAGS.TOTAL] = total;
	      },

	      getTagName : function(tagId) {
	        var tagName, tagValue = profile[ProfileEnum.TAGS.ID + tagId];
	        var indexOfDelimiter = tagValue.indexOf(DELIMITER);
	        if(indexOfDelimiter == -1) {
	          tagName = tagValue;
	        } else {
	          tagName = tagValue.substring(0, indexOfDelimiter);
	        }
	        return tagName;
	      },

	      deleteString : function(str, delimiter, removeString) {
		    var index = str.indexOf(delimiter);
		    if(index == -1) {
		      if(str == removeString) {
		        return "";
		      } else {
		        return str;
		      }
		    } else {
		      var c = 0;
		      var s = "";
		      while(index != -1) {
		        var id = str.substring(c, index);
		        if(id != removeString) {
		          s += id;
		          s += delimiter;
		        }
		        c = index + delimiter.length;
		        index = str.indexOf(delimiter, c);
		        if(index == -1) {
		          id = str.substring(c, str.length);
		          if(id != removeString) {
		            s += id;
		          }
		        }
		      }

		      var lastIndexOfdelimiter = s.lastIndexOf(delimiter);
		      if(lastIndexOfdelimiter != -1) {
		        if(lastIndexOfdelimiter + delimiter.length == s.length) {
		          s = s.substring(0, lastIndexOfdelimiter);
		        }
		      }

		      return s;
		    }

		  },

	      addBookmark : function(bookmark) {
	        var bt = BookmarksManager.getBookmarksTotal();

	        profile[ProfileEnum.BOOKMARKS.ID + bt] = bookmark.TITLE + DELIMITER + bookmark.URL + DELIMITER + bookmark.DESCRIPTION;
	        var tags = bookmark.TAGS;
	        $PageFlakesHelper.foreach(tags, function(tag) {
	          if(tag != EMPTY) {
	            var tt = BookmarksManager.getTagsTotal();
	            var id = BookmarksManager.getTagID(tag);
	            var tagId;
	            if(id != -1) {
	              var pt = profile[ProfileEnum.TAGS.ID + id];
	              profile[ProfileEnum.TAGS.ID + id] = pt + DELIMITER + bt;
	              tagId = id;
	            } else {
	              profile[ProfileEnum.TAGS.ID + tt] = tag + DELIMITER + bt;
	              BookmarksManager.setTagsTotal(tt + 1);
	              tagId = tt;
	            }
	            var bookmarkTags = profile[ProfileEnum.BOOKMARKS.ID + bt + "TAGS"];
	            if(bookmarkTags != null) {
	              profile[ProfileEnum.BOOKMARKS.ID + bt + "TAGS"] = bookmarkTags + DELIMITER + tagId;
	            } else {
	              profile[ProfileEnum.BOOKMARKS.ID + bt + "TAGS"] = tagId;
	            }
	          }
	        });
	        BookmarksManager.setBookmarksTotal(bt + 1);
	      },

	      updateBookmark : function(bookmarkId, bookmark) {
	        var previousTagsValue = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"];
	        var previousTags = (previousTagsValue != null) ? ("" + previousTagsValue).split(DELIMITER) : [];
	        profile[ProfileEnum.BOOKMARKS.ID + bookmarkId] = bookmark.TITLE + DELIMITER + bookmark.URL + DELIMITER + bookmark.DESCRIPTION;
	        var currentTags = bookmark.TAGS;

	        var deletedTags = [];
	        var addedTags = [];

	        $PageFlakesHelper.foreach(previousTags, function(previousTag) {
	          var tagName = BookmarksManager.getTagName(previousTag);
	          var tagDeleted = ($PageFlakesHelper.find(currentTags, function(ct1) {
	            return ct1 == tagName;
	          }) == null);
	          if(tagDeleted) {
	            deletedTags.push({ID : previousTag});
	          }
	        });

	        $PageFlakesHelper.foreach(currentTags, function(currentTag) {
	          var tagAdded = ($PageFlakesHelper.find(previousTags, function(pt1) {
	            var tagName = BookmarksManager.getTagName(pt1);
	            return tagName == currentTag;
	          }) == null);
	          if(tagAdded) {
	            addedTags.push({NAME : currentTag});
	          }
	        });

	        $PageFlakesHelper.foreach(deletedTags, function(deletedTag) {
	          if(deletedTag.ID != 0) {
	            var bookmarksForTag = profile[ProfileEnum.TAGS.ID + deletedTag.ID];
	            bookmarksForTag = BookmarksManager.deleteString(("" + bookmarksForTag), DELIMITER, bookmarkId);
	            if(bookmarksForTag.indexOf(DELIMITER) == -1) {
	              profile[ProfileEnum.TAGS.ID + deletedTag.ID] = null;
	              //var tt = BookmarksManager.getTagsTotal();
	              //BookmarksManager.setTagsTotal(tt - 1);
	            } else {
	              profile[ProfileEnum.TAGS.ID + deletedTag.ID] = bookmarksForTag;
	            }

	            var tagsForBookmark = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"];
	            tagsForBookmark = BookmarksManager.deleteString(("" + tagsForBookmark), DELIMITER, deletedTag.ID);
	            if(tagsForBookmark == EMPTY) {
	              tagsForBookmark = "0";
	            }
	            profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"] = tagsForBookmark;
	          }
	        });

	        $PageFlakesHelper.foreach(addedTags, function(addedTag) {
	          if(addedTag != EMPTY) {
	            var tt = BookmarksManager.getTagsTotal();
	            var id = BookmarksManager.getTagID(addedTag.NAME);
	            if(id == -1) {
	              profile[ProfileEnum.TAGS.ID + tt] = addedTag.NAME + DELIMITER + bookmarkId;
	              BookmarksManager.setTagsTotal(tt + 1);
	              id = tt;
	            }

	            var bookmarkTags = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"];
	            if(bookmarkTags != null) {
	              if(bookmarkTags != 0) {
	                profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"] = bookmarkTags + DELIMITER + id;
	              } else {
	                profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"] = id;
	              }
	            } else {
	              profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"] = id;
	            }
	          }
	        });
	      }
	    };

	    this.importFromDelicious = function(user, password) {
	      App.ContentProxy.GetUrl("http://www.pageflakes.com/users/kishore/base64/base64.php?action=encode&data="+(user+":"+password), $PageFlakesHelper.bind(function(base64) {
	        var headers = [["Authorization", "Basic " + base64]];
	        App.ContentProxy.GetUrl2("http://del.icio.us/api/posts/all", headers, $PageFlakesHelper.bind(function(details) {
	          var xmlDoc = $PageFlakesHelper.getXmlDoc(details);
	          var posts = $PageFlakesHelper.getNodes(xmlDoc, "post");
	          $PageFlakesHelper.foreach(posts, $PageFlakesHelper.bind(function(post) {
	            BookmarksManager.addBookmark({
	              TITLE : EMPTY,
	              URL : this.escapeString(post.getAttribute("href")),
	              DESCRIPTION : this.escapeString(post.getAttribute("description")),
	              TAGS : ((post.getAttribute("tag") != null) ? this.escapeString(post.getAttribute("tag")).split(" ") : [])
	            });
	          }, this));
	          this.showBookmarksAndTags();
	          instance.save();
	        }, this));
	      }, this));
	    }

	    this.resetPage = function() {
	      page = 1;
	    }

	    this.paginate = function(direction) {
	      if(PaginationEnum.NEXT == direction) {
	        page ++;
	      } else {
	        page --;
	      }
	      this.showBookmarks();
	    }

	    this.addBookmark = function() {
	      this.hide(urlErrorEl);
	      var url = urlEl.value;
	      if($PageFlakesHelper.trim(url) == EMPTY) {
	        this.show(urlErrorEl);
	      } else {
	        var title = $PageFlakesHelper.trim(titleEl.value);
	        var description = $PageFlakesHelper.trim(descriptionEl.value);
	        var tagElValue = $PageFlakesHelper.trim(tagsEl.value);
	        tagElValue = (tagElValue == EMPTY) ? SYSTEM_TAG : tagElValue;
	        var tags = this.escapeString(tagElValue).split(",");

	        var params = {
	          TITLE : ((title != EMPTY) ? this.escapeString(title) : EMPTY),
	          URL : this.escapeString(url),
	          DESCRIPTION : ((description != EMPTY) ? this.escapeString(description) : EMPTY),
	          TAGS : tags
	        };

	        var date = new Date();

	        if(ActionEnum.UPDATE != action) {
	          BookmarksManager.addBookmark(params);
	        } else {
	          BookmarksManager.updateBookmark(editBookmarkId, params);
	        }

	        alert("time for adding or updating == " + (new Date().getTime() - date.getTime()));

	        titleEl.value = urlEl.value = descriptionEl.value = tagsEl.value = EMPTY;
	        this.hideAddBookmark();
	        tag = -1;
	        
	        this.showBookmarksAndTags();
	        
	        date = new Date();
	        instance.save();
	        alert("time for saving profile == " + (new Date().getTime() - date.getTime()));
	        //this.dumpProfile();
	      }
	    }

	    this.editBookmark = function(bookmarkId) {
	      var bookmark = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId];
	      if(bookmark != null) {
	        var fields = bookmark.split(DELIMITER);
	        titleEl.value = fields[0];
	        urlEl.value = fields[1];
	        descriptionEl.value = fields[2];
	        var tagProfileValue = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"];
	        var tagsElValue = EMPTY;
	        if((tagProfileValue != null) && (tagProfileValue != 0)) {

	          var tagsArray = ("" + tagProfileValue).split(DELIMITER);

	          for(var i=0; i < tagsArray.length; i++) {
	            var name = this.getTagName(tagsArray[i]);
	            if(name != SYSTEM_TAG) {
	              tagsElValue += name;
	              if(i != (tagsArray.length - 1)) {
	                tagsElValue += ",";
	              }
	            }
	          }
	        }
	        tagsEl.value = tagsElValue;
	        editBookmarkId = bookmarkId;
	        this.showAddBookmark(ActionEnum.UPDATE);
	      }
	    }

	    this.dumpProfile = function() {
	      for(var key in profile) {
	        debug.dump(key + " == " + profile[key]);
	      }
	    }

	    this.getTagName = function(tagId) {
	      return BookmarksManager.getTagName(tagId);
	    }

	    this.showBookmarks = function() {
	      var showAllTags = (tag == -1);

	      var total = showAllTags ? BookmarksManager.getBookmarksTotal() : BookmarksManager.getBookmarksTotalForTagIndex(tag);
	      var bpp = profile[ProfileEnum.BOOKMARKS_PER_PAGE];
	      var tagName;

	      if(tag == -1) {
	        tagName = "All";
	      } else if(tag == 0) {
	        tagName = SYSTEM_TAG;
	      } else {
	        tagName = this.getTagName(tag);
	      }

	      instance.setTitle("Bookmarks for tag: " + tagName);

	      if(page == 1) {
	        this.hide(previousEl);
	      } else {
	        this.show(previousEl);
	      }

	      if(page * bpp >= total) {
	        this.hide(nextEl);
	      } else {
	        this.show(nextEl);
	      }

	      bookmarksContentEl.innerHTML = EMPTY;

	      if(total > 0) {
	        var index = (page - 1) * bpp;
	        var upperBound = page * bpp;
	        upperBound = (upperBound > total) ? total : upperBound;
	        var dummyDiv = $PageFlakesHelper.newNode("div");
	        var _total = total-1;
	        for(var i=index; i < upperBound; i++) {
	          var html = "<div>";
	          var bookmarkId = (showAllTags) ? (_total-i) : this.getBookmarkId(tag, (_total-i));
	          if(bookmarkId != null) {
	            var bookmark = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId].split(DELIMITER);
	            var title = bookmark[0];
	            var url = bookmark[1];
	            var description = $PageFlakesHelper.trim(bookmark[2]);

	            title = (title == EMPTY) ? url : title;
	            html += "<div style=\"line-height:1.2em;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\">";
	            html += "<div style=\"padding:4px 8px 4px 8px;\">";
	            html += "<div>";
	            html += "<span style=\"cursor:hand;cursor:pointer;\" class=\"NavigateActive\" onmouseout=\"$PageFlakesHelper.setClassName(this, 'NavigateActive');\" onmouseover=\"$PageFlakesHelper.setClassName(this, 'NavigateHover');\" onclick=\"" + id + ".navigate('" + url + "')\">";
	            html += title;
	            html += "</span>";
	            html += "</div>"
	            if(description != EMPTY) {
	              html += "<div>";
	              html += "<span>" + description + "</span>";
	              html += "</div>";
	            }
	            var tagProfileValue = profile[ProfileEnum.BOOKMARKS.ID + bookmarkId + "TAGS"];
	            if((tagProfileValue != null)) {
	              //&& (tagProfileValue != 0)) {
	              var tagsArray = ("" + tagProfileValue).split(DELIMITER);
	              var str = "";
	              for(var j=0; j < tagsArray.length; j++) {
	                str += "<span style=\"color:#000080;\">";
	                str += this.getTagName(tagsArray[j]);
	                str += "</span>";
	                if(j != tagsArray.length - 1) {
	                  str += "<span style=\"color:#000080;padding-right:4px\">,</span>";
	                }
	              }
	              html += "<div>";
	              html += "<table style=\"width:100%;table-layout:fixed\" cellpadding=\"0\" cellspacing=\"0\">"
	              html += "<tr><td style=\"width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">"
	              html += str;
	              html += "</td>";
	              html += "<td style=\"width:20%;\" align=\"right\">";
	              html += "<span style=\"cursor:hand;cursor:pointer;\" class=\"NavigateActive\" onmouseout=\"$PageFlakesHelper.setClassName(this, 'NavigateActive');\" onmouseover=\"$PageFlakesHelper.setClassName(this, 'NavigateHover');\" onclick=\"" + id + ".editBookmark('" + bookmarkId + "')\">";
	              html += "edit";
	              html += "</span>";
	              html += "<span style=\"padding-left:2px;padding-right:2px;\">/</span>";
	              html += "<span style=\"cursor:hand;cursor:pointer;\" class=\"NavigateActive\" onmouseout=\"$PageFlakesHelper.setClassName(this, 'NavigateActive');\" onmouseover=\"$PageFlakesHelper.setClassName(this, 'NavigateHover');\" onclick=\"" + id + ".deleteBookmark('" + bookmarkId + "')\">";
	              html += "delete";
	              html += "<span>";
	              html += "</td>";
	              html += "</tr>";
	              html += "</table>";
	              html += "</div>";
	            }

	            html += "</div></div>";
	            dummyDiv.innerHTML = html;
	            bookmarksContentEl.appendChild(dummyDiv.firstChild);
	          }
	        }
	      } else {
	        var message;
	        var html = "<div>";
	        if(showAllTags) {
	          message = "No bookmarks found.";
	        } else {
	          message = "No bookmarks found for tag: " + tagName + ".";
	        }
	        html += "<span style=\"color:#000080;padding-left:4px;\">" + message + "</span>";
	        html += "</div>";
		
	      bookmarksContentEl.innerHTML = html;
	      }

	      
	    }

	    this.getBookmarkId = function(tag, index) {
	      var value = profile[ProfileEnum.TAGS.ID + tag];
	      if(value == null) {
	        return null;
	      }
	      var indexOfDelimiter = value.indexOf(DELIMITER);
	      var count = 0;
	      if(indexOfDelimiter == -1) {
	        return value;
	      }
	      var bookmarkId = null;
	      while(indexOfDelimiter != -1) {
	        count ++;
	        var nextIndex = value.indexOf(DELIMITER, indexOfDelimiter + 1);
	        if((count > index) || nextIndex == -1) {
	          bookmarkId = (nextIndex != -1) ? value.substring(indexOfDelimiter + 1, nextIndex) : value.substring(indexOfDelimiter + 1) ;
	          break;
	        }
	        indexOfDelimiter = nextIndex;
	      }
	      return bookmarkId;
	    }

	    this.showTags = function() {
	      var date = new Date();
	      tagsContentEl.innerHTML = EMPTY;
	      var total = BookmarksManager.getTagsTotal();
	      var dummyDiv = $PageFlakesHelper.newNode("div");

	      for(var i=0; i < total; i++) {
	        
	        var tag = profile[ProfileEnum.TAGS.ID + i];
	        if((tag != null) && (tag != EMPTY)) {
	          var html = "";
	          var indexOfDelimiter = tag.indexOf(DELIMITER);
	          tag = (indexOfDelimiter == -1) ? tag : tag.substring(0, indexOfDelimiter);
	          
	          html += "<span style=\"padding-left:4px;cursor:hand;cursor:pointer;\" class=\"NavigateActive\" onmouseout=\"$PageFlakesHelper.setClassName(this, 'NavigateActive');\" onmouseover=\"$PageFlakesHelper.setClassName(this, 'NavigateHover');\" onclick=\"" + id + ".showBookmarksForTag(" + i + ")\">";
	          html += tag;
	          
	          if(i != (total - 1)) {
	            html += ",<wbr/>";
	          }
	          html += "</span>";
	          dummyDiv.innerHTML  = html;
	        tagsContentEl.appendChild(dummyDiv.firstChild);
	        }
	        
	        
	        
	        
	      }

	      
	      //tagsContentEl.innerHTML = html;
	      debug.dump("total for showing tags == "+ (new Date().getTime() - date.getTime()));
	    }

	    this.showBookmarksAndTags = function() {
	      var date  = new Date();
	      
	      this.showBookmarks();
	      alert("time for showing bookmarks == " + (new Date().getTime() - date.getTime()));
	      date = new Date();
	      this.showTags();
	      alert("time for showing tags == " + (new Date().getTime() - date.getTime()));
	    }

	    this.showBookmarksForTag = function(i) {
	      tag = i;
	      this.resetPage();
	      this.showBookmarks();
	    }

	    this.navigate = function(url) {
	      this._navigate(url, profile[ProfileEnum.OPEN_LINKS_IN]);
	    }

	    this._navigate = function(url, openLinksIn) {
	      if(url.indexOf("://") == -1) {
	        url = "http://" + url;
	      }
	      if(WindowEnum.NEW == openLinksIn) {
	        window.open(url);
	      } else {
	        window.document.location.href = url;
	      }
	    }


	    this.escapeString = function(value) {
	      var rValue = "";
	      for(var i=0; i < value.length; i++) {
	        var ch = value.charAt(i);
	        switch(ch) {
	          case "'"  : rValue += "&#039;";
	                      break;
	          case "\"" : rValue += "&#034;"
	                      break;
	          case "&"  : rValue += "&amp;";
	                      break;
	          case DELIMITER  : rValue += "&lt;";
	                      break;
	          case ">"  : rValue += "&gt;";
	                      break;
	          default   : rValue += ch;
	        }
	      }
	      return rValue;
	    }

        this.handleEnter = function(e, func) {
          var key;
          if(e.which) {
            key = e.which;
          } else if(e.keyCode) {
            key = e.keyCode;
          }
          if(key == 13 && (typeof(func) == "function")) {
            ($PageFlakesHelper.bind(func, this))();
          }
        }
      }
    ]]></script>
    <script id="_PAGEFLAKES_Instance" type="text/javascript"><![CDATA[
      var _PAGEFLAKES_ = new BookmarksFlake_v0('_PAGEFLAKES_');
    ]]></script>
  </head>
  <body>
    <div id="_PAGEFLAKES_edit">
      <table width="100%">
        <tr>
          <td width="1%" nowrap="nowrap">
            <span style="font-weight:bold">Bookmarks per page:</span>
          </td>
          <td>
            <select id="_PAGEFLAKES_bookmarks_per_page">
              <option value="5">5</option>
              <option value="10">10</option>
              <option value="15">15</option>
              <option value="20">20</option>
              <option value="25">25</option>
              <option value="30">30</option>
              <option value="35">35</option>
              <option value="40">40</option>
              <option value="45">45</option>
              <option value="50">50</option>
            </select>
          </td>
        </tr>
        <tr>
          <td width="1%" nowrap="nowrap">
            <span style="font-weight:bold">Open links in:</span>
          </td>

          <td>
            <select id="_PAGEFLAKES_open_links_in">
              <option value="new">new browser window</option>
              <option value="this">this browser window</option>
            </select>
          </td>
        </tr>
        <tr>

          <td colspan="2" align="center">
            <div style="padding-top:2px;border-top:1px solid #cccccc;text-align:middle">
              <input type="button" value="Save" onclick="_PAGEFLAKES_.saveProfile();">
            </div>
          </td>
        </tr>
      </table>
    </div>
    <div id="_PAGEFLAKES_add_bookmark" style="display:none;background-color:#e4ecf4;padding:4px 4px 4px 4px">
      <table width="100%" cellpadding="2" cellspacing="0">
        <tr>
          <td colspan="2" valign="top">
            <span style="padding-bottom:4px;font-weight:bold">Add bookmark</span>
          </td>
        </tr>
        <tr>
          <td width="10%" valign="top">
            <span>Title</span>
          </td>
          <td valign="top">
            <input type="text" style="margin-top:4px;width:90%;border:1px solid #7f9db9;" id="_PAGEFLAKES_add_bookmark_title" onkeydown="_PAGEFLAKES_.handleEnter(event, _PAGEFLAKES_.addBookmark)"/>
            <div id="_PAGEFLAKES_add_bookmark_title_error" style="display:none;line-height:1.2em;font-size:10px;color:#ff0000">Please enter a title.</div>
          </td>
        </tr>
        <tr>
          <td valign="top">
            <span>URL</span>
          </td>
          <td valign="top">
            <input type="text" style="margin-top:4px;width:90%;border:1px solid #7f9db9;" id="_PAGEFLAKES_add_bookmark_url" onkeydown="_PAGEFLAKES_.handleEnter(event, _PAGEFLAKES_.addBookmark)"/>
            <div id="_PAGEFLAKES_add_bookmark_url_error" style="display:none;line-height:1.2em;font-size:10px;color:#ff0000">Please enter an url.</div>
          </td>
        </tr>
        <tr>
          <td valign="top">
            <div>Description</div><div style="line-height:1.2em">(optional)</div>
          </td>
          <td valign="top">
            <textarea style="margin-top:4px;width:90%;border:1px solid #7f9db9" rows="2" id="_PAGEFLAKES_add_bookmark_description"></textarea>
          </td>
        </tr>
        <tr>
          <td valign="top">
            <div>Tags</div><div style="line-height:1.2em">(optional)</div>
          </td>
          <td valign="top">
            <input type="text" style="margin-top:4px;width:90%;border:1px solid #7f9db9" id="_PAGEFLAKES_add_bookmark_tags" onkeydown="_PAGEFLAKES_.handleEnter(event, _PAGEFLAKES_.addBookmark)"/>
            <div style="line-height:1.2em;font-size:10px">Separte by commas.</div>
          </td>
        </tr>
        <tr>
          <td>
            <span>&nbsp;</span>
          </td>
          <td valign="top">
            <span style="padding-right:4px;"><input type="button" value="Save" onclick="_PAGEFLAKES_.addBookmark()"/></span>
            <span><input type="button" value="Cancel" onclick="_PAGEFLAKES_.hideAddBookmark()"/></span>
          </td>
        </tr>
      </table>
    </div>
    <div id="_PAGEFLAKES_body">
      <div id="_PAGEFLAKES_bookmarks" style="border:1px solid #999999;">
        <div id="_PAGEFLAKES_bookmarks_content">
        </div>
        <div style="padding:0px 4px 0px 4px">
          <table width="100%" cellpadding="0" cellspacing="0">
            <tr>
              <td width="50%">
                <div id="_PAGEFLAKES_previous" style="display:none"><span class="NavigateActive" onmouseout="$PageFlakesHelper.setClassName(this, 'NavigateActive');" onmouseover="$PageFlakesHelper.setClassName(this, 'NavigateHover');" onclick="_PAGEFLAKES_.paginate('previous')">Previous page</span></div>
              </td>
              <td align="right">
                <div id="_PAGEFLAKES_next" style="display:none"><span class="NavigateActive" onmouseout="$PageFlakesHelper.setClassName(this, 'NavigateActive');" onmouseover="$PageFlakesHelper.setClassName(this, 'NavigateHover');" onclick="_PAGEFLAKES_.paginate('next')">Next page</span></div>
              </td>
            </tr>
          </table>
        </div>
      </div>
      <div style="padding-top:8px"></div>
      <div id="_PAGEFLAKES_tags" style="background-color:#f1eded;padding:2px 2px 2px 2px">
        <div style="padding:0px 4px 0px 4px"><div style="width:50%;float:left;font-weight:bold">View by tag:</div><div style="width:50%;float:right;" align="right"><span style="cursor:hand;cursor:pointer;" class="NavigateActive" onmouseout="$PageFlakesHelper.setClassName(this, 'NavigateActive');" onmouseover="$PageFlakesHelper.setClassName(this, 'NavigateHover');" onclick="_PAGEFLAKES_.showBookmarksForTag(-1);">[All]</span></div><div style="clear:both"></div></div>
        <div id="_PAGEFLAKES_tags_content">
        </div>
      </div>
      <div id="_PAGEFLAKES_actions" style="font-size:10px;padding-top:8px;">
        <span style="padding-right:4px" class="NavigateActive" onmouseout="$PageFlakesHelper.setClassName(this, 'NavigateActive');" onmouseover="$PageFlakesHelper.setClassName(this, 'NavigateHover');" onclick="_PAGEFLAKES_.showAddBookmark()"><span style="padding-right:4px"><img align="absmiddle" src="/users/kishore/bookmarks/images/add.bookmark.gif"/></span>Add Bookmark</span>
        <span class="NavigateActive" onmouseout="$PageFlakesHelper.setClassName(this, 'NavigateActive');" onmouseover="$PageFlakesHelper.setClassName(this, 'NavigateHover');" onclick="_PAGEFLAKES_.importFromDelicious('chiru', 'chiru')"><span style="padding-right:4px"><img align="absmiddle" src="/users/kishore/bookmarks/images/import.bookmarks.gif"/></span>Import Bookmarks</span>
      </div>
    </div>
  </body>
</html>