var Bookmark={urlPrefix:"/bookmarks/",removeRequested:false,deletedBookmarks:[],remove:function(b){var a=undefined;if(typeof(b)=="number"){a=$("bookmark_"+b)}else{a=b;b=Bookmark.getPositionInList(b)}if(!Bookmark.removeRequested){Bookmark.removeRequested=true;new Ajax.Request(Bookmark.urlPrefix+"delete/",{parameters:{id:b},method:"get",onSuccess:function(e){undoParameters={};undoParameters.undo="True";undoParameters.position=Bookmark.getPositionInList(a);var c=a.getElementsByClassName("bookmarkLink")[0];undoParameters.title=c.title.length<=33?c.title:c.title.substring(0,30)+"...";undoParameters.url=c.href;Bookmark.deletedBookmarks.push(undoParameters);a.remove();Bookmark.addAddLink();var d=$("undoTitle");d.innerHTML="";d.appendChild(document.createTextNode(undoParameters.title));Element.show($("undoRemoveFlash"))},onComplete:function(){Bookmark.removeRequested=false}})}},undoRemove:function(){Bookmark.cancelModify();var a=Bookmark.deletedBookmarks.pop();new Ajax.Request(Bookmark.urlPrefix+"modify/",{parameters:a,method:"get",onSuccess:function(e){var b=$("bookmarks").getElementsByClassName("bookmark_list")[0].getElementsByTagName("li");Bookmark.loadBookmarkFromResponse(e.responseText,b[parseInt(a.position)]);var c=Bookmark.deletedBookmarks.pop();if(c){Bookmark.deletedBookmarks.push(c);var d=$("undoTitle");d.innerHTML="";d.appendChild(document.createTextNode(c.title))}else{Element.hide($("undoRemoveFlash"))}Bookmark.addAddLink()},onException:function(b){throw b}})},addAddLink:function(){var d=$("bookmarks").getElementsByClassName("empty")[0];if(d){d.remove()}var a=$("registerText");if(a&&$("bookmarks").getElementsByClassName("drop").length>3){Element.show(a)}else{var c=$("parkedAddBookmark");c.id="";var b=c.cloneNode(true);b.className+=" empty";c.id="parkedAddBookmark";c.parentNode.insertBefore(b,c);if(a){Element.hide(a)}Element.show(b)}},modify:function(d){Bookmark.cancelModify();var a=undefined;if(typeof(d)=="number"){a=$("bookmark_"+d);$("id_id").value=d}else{a=d}var c=$("parkedModifyBookmark");Element.hide(a);a.parentNode.insertBefore(c,a);Element.show(c);c.id="modifyBookmark";c._target=a;var b=a.getElementsByClassName("bookmarkLink")[0];if(b){$("id_url").value=b.href;$("id_title").value=b.title}$("id_url").focus()},confirmModify:function(){var d={};var c=$("modifyBookmark");Element.show($("busyBookmark"));inputs=c.getElementsByTagName("input");for(var a=0;a<inputs.length;a++){if(inputs[a].className!="button"&&inputs[a].type!="checkbox"){d[inputs[a].name]=inputs[a].value}if(inputs[a].type=="checkbox"&&inputs[a].checked){d[inputs[a].name]="True"}}var b=c._target;d.position=Bookmark.getPositionInList(b)-1;Bookmark.request=new Ajax.Request(Bookmark.urlPrefix+"modify/",{parameters:d,method:"get",cancelled:false,onSuccess:function(f){if(!Bookmark.request.cancelled){Bookmark.cancelModify();if(f.responseText.indexOf("modifyBookmark")>0){var e=Element.create(f.responseText);b.parentNode.insertBefore(e,b);Element.hide(b);e._target=b;$("id_id").value=d.id}else{Bookmark.loadBookmarkFromResponse(f.responseText,b);b.remove();Bookmark.addAddLink();if($("registerText")){Bookmark.deletedBookmarks=[];Element.hide($("undoRemoveFlash"))}}}}})},loadBookmarkFromResponse:function(c,b){var a=Element.create(c);DnD.registerDnDMouseDown(a);b.parentNode.insertBefore(a,b);var d=a.getElementsByTagName("img")[0];if(d.complete){Bookmark.initAndReloadBookmarkThumbnail(d)}else{d.onload=function(){Bookmark.initAndReloadBookmarkThumbnail(d)}}},initAndReloadBookmarkThumbnail:function(a){bookmarkSlider.initThumbnailSize(a);setTimeout(function(){a.onload=function(){a.style.height="";a.style.width="";bookmarkSlider.initThumbnailSize(a)};a.src=a.src+"#"+new Date().getTime()},5000)},addFromResult:function(d,b,f,c,a){var e={url:b,title:f,type:c,tags:a};new Ajax.Request(Bookmark.urlPrefix+"modify/",{parameters:e,method:"get",onSuccess:function(g){d.className+=" added"}})},cancelModify:function(){if(Bookmark.request){Bookmark.request.cancelled=true}Element.hide($("busyBookmark"));var b=$("parkedModifyBookmark");if(!b){b=$("modifyBookmark");b.id="parkedModifyBookmark"}inputs=b.getElementsByTagName("input");for(var a=0;a<inputs.length;a++){if(inputs[a].className!="button"){inputs[a].value=""}}if(b._target){Element.show(b._target)}Element.hide(b);b.parentNode.appendChild(b);b=$("modifyBookmark");if(b){if(b.nextSibling&&b.nextSibling.nodeType==1){Element.show(b.nextSibling)}b.remove()}},getPositionInList:function(c){var d=c.parentNode.childNodes;var a=-1;for(var b=0;b<d.length;b++){if(d[b].tagName=="LI"){a++}if(d[b]==c){return a}}return a},setPosition:function(b,a){if(b!=a){new Ajax.Request(Bookmark.urlPrefix+"reposition/",{parameters:{oldPosition:b,newPosition:a},method:"get",onSuccess:function(c){}})}}};var DnD={dragObject:undefined,dragging:false,originalObject:undefined,originalPosition:undefined,initialOffset:undefined,firstMovePosition:undefined,mouseupListener:[],mousemoveListener:[],mouseMove:function(c){c=c||window.event;for(var b=DnD.mousemoveListener.length-1;b>=0;b--){DnD.mousemoveListener[b].mousemove(c)}if(DnD.originalObject&&!$("modifyBookmark")){if(!DnD.firstMovePosition){DnD.firstMovePosition=DnD.getMouseCoordinates(c);return}var e=DnD.getMouseCoordinates(c);if(!DnD.dragging){if(Math.abs(DnD.firstMovePosition.x-e.x)>1||Math.abs(DnD.firstMovePosition.y-e.y)>1){DnD.dragging=true;DnD.dragObject=document.createElement("div");DnD.dragObject.className="dndContainer";DnD.dragObject.appendChild(DnD.originalObject.cloneNode(true));DnD.dragObject.style.position="absolute";DnD.dragObject.style.display="None";DnD.dragObject.style.fontSize=$("bookmarks").getStyle("font-size");document.body.style.cursor="move";document.body.appendChild(DnD.dragObject);DnD.setInitialOffset(DnD.originalObject,c);DnD.changePositionOfDragObject(c);d=document.createElement("li");d.id="dropIndicator";d.className="drop bookmark";DnD.originalObject.parentNode.insertBefore(d,DnD.originalObject);DnD.originalObject.parentNode.removeChild(DnD.originalObject)}}if(DnD.dragging){var a=DnD.getTarget(DnD.changePositionOfDragObject(c));if(a&&a.target){parentNode=a.target.parentNode;var d=$("dropIndicator");if(a.target&&a.target!=d){if(a.leftNeighbour==d){parentNode.insertBefore(a.target,d)}else{parentNode.insertBefore(d,a.target)}}}}}},changePositionOfDragObject:function(a){var b=DnD.getMouseCoordinates(a);DnD.dragObject.style.display="block";DnD.dragObject.style.top=b.y+DnD.initialOffset.y+"px";DnD.dragObject.style.left=b.x+DnD.initialOffset.x+"px";return b},getMouseCoordinates:function(a){return{x:a.pageX||(a.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft)),y:a.pageY||(a.clientY+(document.documentElement.scrollTop||document.body.scrollTop))}},registerBookmarks:function(c){var b=c.getElementsByClassName("dnd");for(var a=0;a<b.length;a++){DnD.registerDnDMouseDown(b[a])}},registerDnDMouseDown:function(a){a.onmousedown=function(b){DnD.originalObject=this;DnD.originalPosition=Bookmark.getPositionInList(this);DnD.dragging=false;DnD.firstMovePosition=false;if(b){Event.stop(b)}}},setInitialOffset:function(a,b){mouse=DnD.getMouseCoordinates(b);a=DnD.getElementCoordinates(a);DnD.initialOffset={x:a.x-mouse.x,y:a.y-mouse.y}},getElementCoordinates:function(a){var c=0;var b=0;while(a.offsetParent){c+=a.offsetLeft;b+=a.offsetTop;a=a.offsetParent}c+=a.offsetLeft;b+=a.offsetTop;return{x:c,y:b}},mouseUp:function(c){if(DnD.dragging){var d=$("dropIndicator");var b=Bookmark.getPositionInList(d);Bookmark.setPosition(DnD.originalPosition,b);d.parentNode.insertBefore(DnD.originalObject,d);$("bookmarks").getElementsByClassName("bookmark_list")[0].removeChild($("dropIndicator"));DnD.dragging=false;DnD.firstMovePosition=false;document.body.removeChild(DnD.dragObject)}DnD.dragObject=undefined;DnD.originalObject=undefined;document.body.style.cursor="default";for(var a=DnD.mouseupListener.length-1;a>=0;a--){DnD.mouseupListener[a].mouseup(c)}},getTarget:function(i){var a=$("bookmarks");var d=DnD.getRelativePosition(i,a);if(d){var g=a.getElementsByClassName("drop");var j=g[0].offsetWidth;var f=g[0].offsetHeight;var b=Math.floor(a.offsetWidth/j);var k=Math.floor(d.y/f);var h=b*k;if(h>=0&&h<g.length){var c=Math.floor((d.x-g[h].offsetLeft)/j);var e=b*k+c;if(e>=0&&e<g.length){return{leftNeighbour:e==0?undefined:g[e-1],target:g[e]}}}}return undefined},getRelativePosition:function(c,b){var a=DnD.getElementCoordinates(b);if(c.x>a.x&&c.x<a.x+parseInt(b.offsetWidth)&&c.y>a.y&&c.y<a.y+parseInt(b.offsetHeight)){return{x:c.x-a.x,y:c.y-a.y}}return undefined}};bookmarkSlider={initialize:function(c){this.bookmarks=c;var e=this.bookmarks.getElementsByTagName("img");for(var b=e.length-1;b>=0;b--){this.initThumbnailSize(e[b])}DnD.mouseupListener.push(this);DnD.mousemoveListener.push(this);this.slidebar=$("slidebar");this.slider=$("slider");var a=this.slidebar.getStyle("width");this.slideBarWidth=parseInt(a.slice(0,a.length-2));var d=this.slider.getStyle("width");this.sliderOffset=parseInt(d.slice(0,d.length-2))/2;this.currentFontSize=parseInt(this.bookmarks.getStyle("font-size").gsub(/(\d+)px|em/,"#{1}"));this.slider.style.left=this._getSliderPositionFromFontSize(this.currentFontSize)+"px";Event.observe(this.slidebar,"mousedown",this._startSlide.bind(this));Event.observe(this.slider,"mousedown",this._startSlide.bind(this));Event.observe(this.slidebar,"click",this._setValue.bind(this))},_startSlide:function(a){this.sliding=true;this.slidebarOffset=DnD.getElementCoordinates(this.slidebar).x;Event.stop(a)},_setValue:function(a){this.slidebarOffset=DnD.getElementCoordinates(this.slidebar).x;this.slider.style.left=this._setSizeAndGetPosition(a)+"px";this._sendRequest()},mousemove:function(a){if(this.sliding){this.slider.style.left=this._setSizeAndGetPosition(a)+"px";Event.stop(a)}},_setSizeAndGetPosition:function(b){position=DnD.getMouseCoordinates(b).x-this.slidebarOffset;position=position<=0?0:position;position=position>=this.slideBarWidth?this.slideBarWidth:position;var a=this._getFontSizeFromSliderPosition(position);if(a!=this.currentFontSize){this.currentFontSize=a;this.bookmarks.style.fontSize=a+"px"}return position-this.sliderOffset},mouseup:function(a){if(this.sliding){this._sendRequest()}},_sendRequest:function(){this.sliding=false;thumbnails=this.bookmarks.getElementsByTagName("img");for(var a=thumbnails.length-1;a>=0;a--){this._updateThumbnails(thumbnails[a])}new Ajax.Request(Bookmark.urlPrefix+"saveSize/",{parameters:{size:this.currentFontSize},method:"get"})},initThumbnailSize:function(a){if(!a.complete){var b=function(){this.initThumbnailSize(a)}.bind(this);setTimeout(b,250)}else{dimensions=$(a).getDimensions();if(dimensions.width>dimensions.height){if(dimensions.width>110){a.style.width="10em"}}else{if(dimensions.height>82){a.style.height="7.5em"}}}},_updateThumbnails:function(b){var a=new Image();a.onload=function(){b.src=a.src};a.src=b.src.gsub(/&w=\d+/,"&w="+Math.floor(this.currentFontSize*10)).gsub(/&h=\d+/,"&h="+Math.floor(this.currentFontSize*7.5))},_getFontSizeFromSliderPosition:function(a){return Math.floor(a/this.slideBarWidth*30+11)},_getSliderPositionFromFontSize:function(a){return Math.floor((a-11)/30*this.slideBarWidth)}};var bookmarks=$("bookmarks");if(bookmarks){document.onmousemove=DnD.mouseMove;document.onmouseup=DnD.mouseUp;DnD.registerBookmarks(bookmarks);bookmarkSlider.initialize(bookmarks)};