    function thanks(name) {
        var item  = document.getElementById('flags.' + name);
        item.style.display  = "none";
        show('thanks.' + name);
    }
    function show(panel) {
        var item  = document.getElementById(panel);
        item.style.display  = "";
    }
    function hide(panel) {
        var item  = document.getElementById(panel);
        item.style.display  = "none";
    }
    function saveFavoriteItem(itemId) {
		jQuery.post("/template/favorites/ajax_save_favorite.jsp",{
			itemid: itemId
		},function(res){
		});    		
	}
	
    function flagItem(flag, itemId) {
		jQuery.post("/template/flags/ajax_save_flag.jsp",{
			itemid: itemId,
			flag: flag
		},function(res){
		});    
    }
    
	var itemBlocks={};
	
    function itemBlock(uid){
    	if(!itemBlocks[uid])
    		itemBlocks[uid] = jQuery("div.hReview[uid='"+uid+"']");
    	return itemBlocks[uid];
    }
    function unfoldComments(uid){
    	var item = itemBlock(uid);
    	if (item){
    		item.find(".btnUnfoldComments").fadeOut(function(){item.find(".folded").fadeIn();});
    	}
    }
    function workingCommentForm(){
		jQuery(".commentFormContent").html("<center><img src='/img/indicator.gif'></center>");
    }
    function cancelCommentForm(){
		jQuery(".commentFormContent").hide();
		jQuery(".commentFormContent").html("");
		
    }
	function showCommentForm(uid){
		jQuery(".commentFormContent").html("");
		jQuery(".commentFormContent").hide("");
		var cmtDiv = itemBlock(uid).find(".commentFormContent");
		cmtDiv.load("/template/comments/_commentForm.jsp",{uid:uid},function(){
			jQuery('.toclear').val('');cmtDiv.show();jQuery("#commentinput").focus();
		});
		return false;
	}
    function saveComment(/*, itemId*/) {
    	var uid = jQuery("#commentedItemUID").val();

    	var form=jQuery("#newCommentForm");
		var params = form.serializeArray()    	
		workingCommentForm();
		
		jQuery.post("/template/comments/ajax_save_comments.jsp",params,function(res){
			cancelCommentForm();
			var cmtDiv = itemBlock(uid).find("#itemcomments").append(res);
		});    
    }

    function emailPost(id) {

		jQuery("#send"+id).hide();
        var form=jQuery("#sendForm"+id);
		var params = form.serializeArray()
		jQuery.post("/sharemember",params);
    }

    function displayComment(username, comment, panelId) {
	
	var rand_no = Math.ceil(1000*Math.random())
	var buffer1 = '<div><div class="member" style="float:left"><a href="/user/'
		+username
		+'"><img width="27" height="27" src="/image/'
		+username
		+'"/></a></div><div class="dialogR"><div class="replyBubble rounded'
		+rand_no
		+'" style="border:medium none;position:relative;"><a class="metaContributor" href="/user/'
		+username
		+'">'
		+username
		+'</a> <span class="metaDate">(1 second  ago)</span> : <span class="metaPost">';
	var buffer2 = '</span></div></div></div>';
	var content = document.getElementById(panelId).innerHTML;
	document.getElementById(panelId).innerHTML = content + buffer1 + escapeHTML(comment) + buffer2;
	jQuery(function() {
		jQuery(".rounded"+rand_no).corner();
	});
	}

    function escapeHTML(s) {
     var MAP = {
       '&': '&amp;',
       '<': '&lt;',
       '>': '&gt;',
       '"': '&#34;',
       "'": '&#39;'
     };
      var repl = function(c) { return MAP[c]; };
      return s.replace(/[&<>'"]/g, repl);
  }

    function deleteComment(commentid, itemid) {
		jQuery.post("/template/comments/ajax_delete_comment.jsp",{
			commentid: commentid,
            itemid: itemid
        },function(res){
		});    
    }

    function deleteItem(itemid) {
		jQuery.post("/template/type/default/ajax_delete_item.jsp",{
            itemid: itemid
        },function(res){
		});
    }

function setAllCheckBox(elementsNames, allBox) {
    var elements = document.getElementsByName(elementsNames);
    for (var i = 0; i < elements.length; i++) {
        var e = elements[i];
        if (e.type == "checkbox")
            e.checked = allBox.checked;
    }
}

function checkAllBox(form, name, allBox) {
	var totalBoxes = 0;
	var totalOn = 0;

	if (isArray(name)) {
		for (var i = 0; i < form.elements.length; i++) {
			var e = form.elements[i];

			if ((e.name != allBox.name) && (e.type == "checkbox")) {
				for (var j = 0; j < name.length; j++) {
					if (e.name == name[j]) {
						totalBoxes++;

						if (e.checked) {
							totalOn++;
						}
					}
				}
			}
		}
	}
	else {
		for (var i = 0; i < form.elements.length; i++) {
			var e = form.elements[i];

			if ((e.name != allBox.name) && (e.name == name) && (e.type == "checkbox")) {
				totalBoxes++;

				if (e.checked) {
					totalOn++;
				}
			}
		}
	}

	if (totalBoxes == totalOn) {
		allBox.checked = true;
	}
	else {
		allBox.checked = false;
	}
}


function showEmbedByUID(url,uid){
	var itemblock = itemBlock(uid);
	itemblock.find(".videoSrcThumb").hide();
	itemblock.find(".videoSrcPlay").show();
	itemblock.find(".videoSrcPlay").html("<embed src='"+url+"' type='application/x-shockwave-flash'  width='300' height='244'></embed>");
}
function showEmbedIFrameByUID(url,uid){
	var itemblock = itemBlock(uid);
	itemblock.find(".videoSrcThumb").hide();
	itemblock.find(".videoSrcPlay").show();
	itemblock.find(".videoSrcPlay").html('<iframe align="center" src="'+url+'" frameBorder="0" width="300" scrolling="no" height="300"></iframe>');
}
function showEmbedSwfByUID(url,uid){
	var itemblock = itemBlock(uid);
	itemblock.find(".videoSrcThumb").hide();
	itemblock.find(".videoSrcPlay").show();
	itemblock.find(".videoSrcPlay").html('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash/cabs/swflash.cab#version=5,0,0,0" width="300" height="300"> <param name="movie" value="'+url+'"> <param name="play" value="true"> <embed src="'+url+'" width="300" height="300" type="application/x-shockwave-flash" play="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed></object>');
}
function showEmbedGoogleVideoByUID(docId,uid){
	var itemblock = itemBlock(uid);
	itemblock.find(".videoSrcThumb").hide();
	itemblock.find(".videoSrcPlay").show();
	itemblock.find(".videoSrcPlay").html("<embed style='width: 300px; height: 244px;' id='VideoPlayback' type='application/x-shockwave-flash' src='http://video.google.com/googleplayer.swf?docId="+docId+"&hl=en&autoplay=1' flashvars='&subtitle=on&playerMode=embedded'></embed>");
}
function showEmbedYoutubeVideoByUID(url,docId,uid){
	var itemblock = itemBlock(uid);
	itemblock.find(".videoSrcThumb").hide();
	itemblock.find(".videoSrcPlay").show();
	itemblock.find(".videoSrcPlay").html('<object width="300" height="250" style="padding: 0px; margin: 0px;"><param name="movie" value="'+url+'"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'+docId+'&autoplay=1" type="application/x-shockwave-flash" wmode="transparent" width="300" height="250"></embed>');
}	
function showEmbedVimeoVideoByUID(docId,uid){
	var itemblock = itemBlock(uid);
	itemblock.find(".videoSrcThumb").hide();
	itemblock.find(".videoSrcPlay").show();
	itemblock.find(".videoSrcPlay").html('<object width="300" height="244">	<param name="allowfullscreen" value="true" />	<param name="allowscriptaccess" value="always" />	<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id='+docId+'&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" />	<embed src="http://www.vimeo.com/moogaloop.swf?clip_id='+docId+'&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="300" height="244"></embed></object>');
}
	
	
/* inline editors ... */
function closeEditor(){
	var popup = jQuery("#thumbPreviewBubble");
	var popupContent = jQuery("#thumbPreviewImg");
	popup.hide();
	popupContent.html("");		
}
function editThumbnail(itemDiv){
	var popup = jQuery("#thumbPreviewBubble");
	var popupContent = jQuery("#thumbPreviewImg");
	var thumb = itemDiv.find(".metaThumbnail:first");
	var offset = thumb.position();
	offset.left+=100;
	popup.css(offset);
	popupContent.html("<center>Yokway is looking for other images for this item<br><img src='/img/indicator.gif'/> </center>");
	jQuery.post("/app/itemEditor/editThumbnail",{uid:itemDiv.attr("uid")},function(data){popupContent.html(data);});
	popup.show();
}
function updateThumbnail(uid,url){
	closeEditor();
	jQuery.post("/app/itemEditor/updateThumbnail",{uid:uid,url:url},function(newUrl){
		var itemThumb = itemBlock(uid).find(".metaThumbnail:first").find("img:first");
		itemThumb.attr("src",newUrl);
	});
}
	
/* share functions ... */
	
var Share = (function($){return {
	clear: function(){
		jQuery(".shareStringFieldActionBtn").hide();
		jQuery('#shareStringField').val('');
		$("#shareFormContentDiv").hide();
		$("#shareFormContent").html("");
	},
	search:function(topic,type,callback){
		$.post("/app/share/search",{topic:topic,type:type},callback,"json");
	},
	magicalPreview:function(topic,type){
		$("#shareFormContent").html("<center>Looking for an illustration<br><img src='/img/indicator.gif'/> </center>");
		$("#shareFormContentDiv").slideDown();
		Share.search(topic,type,function(r){Share.previewUrl(topic,r[0].url,r[0].title,r[0].description,r);});
	},
	previewUrl:function(topic,url,title,desc,otherLinks){
		$("#shareFormContent").html("<center>Extracting an image, a title and a description <br><img src='/img/indicator.gif'/> </center>")
		$("#shareFormContentDiv").slideDown();
		$.post("/app/share/previewUrl",{url:url,title:title,description:desc},function(data){
			$("#shareFormContent").html(data);
			if (otherLinks){
				$("#shareFormContent").find("#chooseOtherLinkContainer").html("Give me something else : <a href='#' class='findOther'>Web</a> | <a href='#' class='findOther' >Book</a> | <a href='#' class='findOther' >Movie</a> | <a href='#' class='findOther' >Place</a> | <a href='#' class='findOther' >Song</a> <div id='otherLinksContainer'></div>");
				$("#shareFormContent").find(".findOther").each(
					function(){
						var btn=jQuery(this);
						var type=btn.text();
						btn.click(function(){
							$.post("/app/share/findOtherLinks",{topic:topic,url:url,type:type},function(data){
								$("#otherLinksContainer").html(data);
							});
							return false;
						});
					}
				);
			}
		});
	},
	shareItem:function(url,type){
		$("input[name=shareString]").val("");
		var thumbnail 		= jQuery("input[name=thumbnail]").val();
		var post 			= jQuery("textarea[name=sharePost]").val();
		var description 	= jQuery("textarea[name=description]").val();
		var title 			= jQuery("input[name=title]").val();
		var address 		= jQuery("input[name=address]").val();
		$("#shareFormContent").parent().html("<center><img src='/img/indicator.gif'/> sending "+title+" to your network...</center>");
		$.post("/app/share/shareItem",{url:url,type:type,thumbnail:thumbnail,post:post,title:title,address:address,description:description},function(data){document.location.reload()});
	}
}})(jQuery);

/* Status bar tools */
var Status = function($){return {
	_bar:false,
	getBar:function(){
		if (!Status._bar) Status.initBar();
		return Status._bar;
	},
	initBar:function(){
		$("body").append("<div id='statusBar' style='display:none;left:0px;right:0px;z-index:1000;font-size:12px;position:fixed;bottom:0px;text-align:right;background-color:#f0f0f0;height:32px;border-top:1px outset;padding:2px 8px;'></div>");
		Status._bar=$("#statusBar");
	},
	html:function(tool){
		Status.getBar().html(tool);
	},
	show:function(){
		Status._bar.slideDown();
	},
	hide:function(){
		Status._bar.slideUp();
	}
}}(jQuery);


/* Other posts tools */
var Overview = function($){return {
	_block:null,
	_delay:0,
	_intervalId:null,
	init:function(delay){
		Overview._delay=delay;
		Overview._block=$("#overviewBlock");
		$('#overviewBlock').listen( 'mouseover', '.itemOverview', function(){
    		$(this).css("background-color","#e0e0e0");
		});
		$('#overviewBlock').listen( 'mouseout', '.itemOverview', function(){
    		$(this).css("background-color","#ffffff");
		});
		$('#overviewBlock').listen( 'click', '.circleLink', function(){
			var uid = $(this).attr("uid");
			$.post("/app/memoryItem/lastActivityReport",{circleUid:uid},function(result){
				$("#circleOverviewBlock").html(result);
				$("#circleOverviewBlock").slideDown();
			});
			return false;
		});
		$('#circleOverviewBlock').listen( 'click', '.backToOverviewLink', function(){
			$("#circleOverviewBlock").hide();
			$("#overviewBlock").show();
			return false;
		});
	},
	watch:function(){
		if (!Overview._intervalId){
			Overview.checkWhatsUp();
			Overview._intervalId = setInterval("Overview.checkWhatsUp()",Overview._delay);
		} else {
			alert("ERROR : watch called while thread already active");
		}
	},
	checkWhatsUp:function(){
		$.post("/app/memoryItem/lastActivityReport",{},function(result){
			Overview._block.html(result);
		});
	}
	
}}(jQuery);

/* Notification tools */

var Notification = function($){return {
	_element:null,
	_msgElement:null,
	_intervalId:null,
	_delay:0,
	_lastUid:null,
	_view:null,
	_list:Array(),
	//_refreshUrl:null,
	init:function(delay,lastUid,view){
		Notification._delay = delay;
		Notification._lastUid = lastUid;
		Notification._view = view;
		//Notification._refreshUrl = refreshUrl;
		$("body").append("<div id='notificationElement' style='max-width:300px;font-size:12px;z-index:1000;display:none;position:fixed;right:2px;bottom:38px;padding:8px;color:#666666; border: 1px solid #c0c0c0; background-color:#f0f0f0;'></div>");
		Notification._element = $("#notificationElement");
		Notification._element.html("<div class='msg' style='padding:2px;'></span>");
		Notification._msgElement = Notification._element.find(".msg:first");
	},
	watch:function(){
		if (!Notification._intervalId){
			Notification._intervalId = setInterval("Notification.checkWhatsNew()",Notification._delay);
		} else {
			alert("ERROR : watch called while thread already active");
		}
	},
	suspend:function(){
		clearInterval(Notification._intervalId);
		Notification._intervalId = 0;
	},
	hide:function(){
		Notification._element.slideUp();
	},
	show:function(){
		Notification._element.slideDown();
	},
	toggle:function(){
		Notification._element.toggle();
	},
	checkWhatsNew:function(){
		var params = {lastUid:Notification._lastUid};
		if (Notification._view){
			params["view"] = Notification._view;
		}
		$.post("/app/memoryItem/checkWhatsNew",params,function(result){
			if (result){
				var error = result["error"];
				if (error){
					//alert("ERROR : "+error);
				} else {
					var hasNew = result["hasNew"];
					if (hasNew){
						var contributor = result["contributor"];
						var type = result["type"];
						var uid = result["uid"];
						var txt = result["txt"];
						if (Notification._list.length>9) Notification._list.shift();
						Notification._list.push(result);
						Notification._lastUid = uid;
						Notification._msgElement.html("");
						for (var i=0;i<Notification._list.length;i++){
							var n = Notification._list[i];
							Notification._msgElement.append("<div style='margin-bottom:2px;'><nobr><img src='/image/"+n.contributor+"' height='18' style='background-color:white;vertical-align:middle'/> <span class='metaContributor'>"+n.contributor+"</span> "+(n.type=="comment"?"commented":"posted")+" : <i>"+n.txt+"</i></nobr></div>");
						}
						Notification._msgElement.append("<div>Click <a href='#' onClick='Notification.refreshPage();return false;'>here</a> to refresh the page</div>");
						Notification._element.slideDown("fast",function(){setTimeout("Notification.hide()",3000)});
						Status.html("<div style='background-image:url(/img/notification/chat32x32.png);background-repeat:no-repeat;color:white;cursor:pointer;float:right;font-size:11px;font-weight:bold;height:32px;padding-left:18px;padding-top:5px;text-align:left;width:12px;' onClick='Notification.toggle();'>"+Notification._list.length+"</div>");
						Status.show();
					}
				}
			}
		},"json");
	}, 
	refreshPage:function(){
		document.location.reload();
	}
}}(jQuery);	

/* misc ajax functions */
function displayWaitThenDo(msg,selector,effect,call){
	jQuery(selector).html("<center><img src='/img/indicator.gif'/> "+msg+"</center>");
	if (effect){
		jQuery(selector)[effect](function(){call()});
	} else {
		call();
	}
}
