function confirmDelete() { return confirm(aStr['delitem']); }
	function commentOpenUI(obj,id) {
		$(document).unbind( "click.commentOpen", handler );
		var handler = function() {
			if(obj.value == aStr['comment']) {
				obj.value = '';
				$("#comment-edit-text-" + id).addClass("comment-edit-text-full").removeClass("comment-edit-text-empty");
				$("#comment-tools-" + id).show();
			}
		};
		$(document).bind( "click.commentOpen", handler );
	}
	function commentCloseUI(obj,id) {
		$(document).unbind( "click.commentClose", handler );
		var handler = function() {
			if(obj.value == '') {
			obj.value = aStr['comment'];
				$("#comment-edit-text-" + id).removeClass("comment-edit-text-full").addClass("comment-edit-text-empty");
				$("#comment-tools-" + id).hide();
			}
		};
		$(document).bind( "click.commentClose", handler );
	}
	function commentOpen(obj,id) {
		if(obj.value == aStr['comment']) {
			obj.value = '';
			$("#comment-edit-text-" + id).addClass("comment-edit-text-full");
			$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
			$("#mod-cmnt-wrap-" + id).show();
			openMenu("comment-tools-" + id);
			return true;
		}
		return false;
	}
	function commentClose(obj,id) {
		if(obj.value == '') {
			obj.value = aStr['comment'];
			$("#comment-edit-text-" + id).removeClass("comment-edit-text-full");
			$("#comment-edit-text-" + id).addClass("comment-edit-text-empty");
			$("#mod-cmnt-wrap-" + id).hide();
			closeMenu("comment-tools-" + id);
			return true;
		}
		return false;
	}
	function showHideCommentBox(id) {
		if( $('#comment-edit-form-' + id).is(':visible')) {
			$('#comment-edit-form-' + id).hide();
		}
		else {
			$('#comment-edit-form-' + id).show();
		}
	}
	function commentInsert(obj,id) {
		var tmpStr = $("#comment-edit-text-" + id).val();
		if(tmpStr == '$comment') {
			tmpStr = '';
			$("#comment-edit-text-" + id).addClass("comment-edit-text-full");
			$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
			openMenu("comment-tools-" + id);
		}
		var ins = $(obj).html();
		ins = ins.replace('<','<');
		ins = ins.replace('>','>');
		ins = ins.replace('&','&');
		ins = ins.replace('"','"');
		$("#comment-edit-text-" + id).val(tmpStr + ins);
	}
	function insertbbcomment(comment,BBcode,id) {
		// allow themes to override this
		if(typeof(insertFormatting) != 'undefined')
		   return(insertFormatting(comment,BBcode,id));
		var urlprefix = ((BBcode == 'url') ? '#^' : '');
		var tmpStr = $("#comment-edit-text-" + id).val();
		if(tmpStr == comment) {
			tmpStr = "";
			$("#comment-edit-text-" + id).addClass("comment-edit-text-full");
			$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
			openMenu("comment-tools-" + id);
			$("#comment-edit-text-" + id).val(tmpStr);
		}
		textarea = document.getElementById("comment-edit-text-" +id);
		if (document.selection) {
			textarea.focus();
			selected = document.selection.createRange();
			selected.text = urlprefix+"["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
		} else if (textarea.selectionStart || textarea.selectionStart == "0") {
			var start = textarea.selectionStart;
			var end = textarea.selectionEnd;
			textarea.value = textarea.value.substring(0, start) + urlprefix+"["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
		}
		return true;
	}
	function viewsrc(id) {
		$.colorbox({href: 'viewsrc/' + id, maxWidth: '80%', maxHeight: '80%' });
	}
	function qCommentInsert(obj,id) {
		var tmpStr = $("#comment-edit-text-" + id).val();
		if(tmpStr == aStr['comment']) {
			tmpStr = '';
			$("#comment-edit-text-" + id).addClass("comment-edit-text-full");
			$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
			openMenu("comment-edit-submit-wrapper-" + id);
		}
		var ins = $(obj).val();
		ins = ins.replace('<','<');
		ins = ins.replace('>','>');
		ins = ins.replace('&','&');
		ins = ins.replace('"','"');
		$("#comment-edit-text-" + id).val(tmpStr + ins);
		$(obj).val('');
	}
	function showHideComments(id) {
		if( $('#collapsed-comments-' + id).is(':visible')) {
			$('#collapsed-comments-' + id + ' .autotime').timeago('dispose');
			$('#collapsed-comments-' + id).slideUp();
			$('#hide-comments-' + id).html(aStr['showmore']);
			$('#hide-comments-total-' + id).show();
		}
		else {
			$('#collapsed-comments-' + id + ' .autotime').timeago();
			$('#collapsed-comments-' + id).slideDown();
			$('#hide-comments-' + id).html(aStr['showfewer']);
			$('#hide-comments-total-' + id).hide();
		}
	}
  function openClose(theID) {
    if(document.getElementById(theID).style.display == "block") { 
      document.getElementById(theID).style.display = "none" 
    }
    else { 
      document.getElementById(theID).style.display = "block" 
    } 
  }
  function closeOpen(theID) {
    if(document.getElementById(theID).style.display == "none") { 
      document.getElementById(theID).style.display = "block" 
    }
    else { 
      document.getElementById(theID).style.display = "none" 
    } 
  }
  function openMenu(theID) {
      document.getElementById(theID).style.display = "block" 
  }
  function closeMenu(theID) {
      document.getElementById(theID).style.display = "none" 
  }
  function markRead(notifType) {
	$.get('ping?f=&markRead='+notifType);
	if(timer) clearTimeout(timer);
	$('#' + notifType + '-update').html('');
	timer = setTimeout(NavUpdate,2000);
  }
  function markItemRead(itemId) {
	$.get('ping?f=&markItemRead='+itemId);
	$('.unseen-wall-indicator-'+itemId).hide();
  }
	var src = null;
	var prev = null;
	var livetime = null;
	var msie = false;
	var stopped = false;
	var totStopped = false;
	var timer = null;
	var pr = 0;
	var liking = 0;
	var in_progress = false;
	var langSelect = false;
	var commentBusy = false;
	var last_popup_menu = null;
	var last_popup_button = null;
	var scroll_next = false;
	var next_page = 1;
	var page_load = true;
	var loadingPage = true;
	var pageHasMoreContent = true;
	var updateCountsOnly = false;
	var divmore_height = 400;
	var last_filestorage_id = null;
	$(function() {
		$.ajaxSetup({cache: false});
		msie = false; // $.browser.msie ;
		
		var e = document.getElementById('content-complete');
		if(e)
			pageHasMoreContent = false;		
		
		/* setup onoff widgets */
		$(".onoff input").each(function(){
			val = $(this).val();
			id = $(this).attr("id");
			$("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
			
		});
		$(".onoff > a").click(function(event){
			event.preventDefault();	
			var input = $(this).siblings("input");
			var val = 1-input.val();
			var id = input.attr("id");
			$("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
			$("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
			input.val(val);
			//console.log(id);
		});
		
		/* setup field_richtext */
		setupFieldRichtext();
		/* Turn elements with one of our special rel tags into popup menus */
		/* CHANGES: let bootstrap handle popups and only do the loading here */
	
		$('a[rel^=#]').click(function(e){
				manage_popup_menu(this,e);
				return;
		});
		$('span[rel^=#]').click(function(e){
				manage_popup_menu(this,e);
				return;
		});
		function manage_popup_menu(w,e) {
			menu = $( $(w).attr('rel') );
			/* notification menus are loaded dynamically 
			 * - here we find a rel tag to figure out what type of notification to load */
			var loader_source = $(menu).attr('rel');
		
			if(typeof(loader_source) != 'undefined' && loader_source.length) {	
				notify_popup_loader(loader_source);
			}
		}
		// fancyboxes
		// Is this actually used anywhere?
		$("a.popupbox").colorbox({
			'transition' : 'elastic'
		});
		
			
 		NavUpdate(); 
		// Allow folks to stop the ajax page updates with the pause/break key
		$(document).keydown(function(event) {
			if(event.keyCode == '8') {
				var target = event.target || event.srcElement;
				if (!/input|textarea/i.test(target.nodeName)) {
					return false;
				}
			}
			if(event.keyCode == '34') {
				if((pageHasMoreContent) && (! loadingPage)) {
					$('#more').hide();
					$('#no-more').hide();
					next_page++;
					scroll_next = true;
					loadingPage = true;
					if(($('.directory-end').length == 0) && ($('.photos-end').length == 0))
						liveUpdate();
					else
						pageUpdate();
					return true;
				}
			}
			if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) {
				event.preventDefault();
				if(stopped == false) {
					stopped = true;
					if (event.ctrlKey) {
						totStopped = true;
					}
					$('#pause').html(' ');
				} else {
					unpause();
				}
			} else {
				if (!totStopped) {
					unpause();
				}
			}
		});
		
		
	});
	function NavUpdate() {
		if(liking)
			$('.like-rotator').spin(false);
		if(! stopped) {
			var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
			$.get(pingCmd,function(data) {
				if(data.invalid == 1) { 
					window.location.href=window.location.href 
				}
				if(! updateCountsOnly) {
					// start live update
					if($('#live-network').length)   { src = 'network'; liveUpdate(); }
					if($('#live-channel').length)   { src = 'channel'; liveUpdate(); }
					if($('#live-home').length)      { src = 'home'; liveUpdate(); }
					if($('#live-display').length)   { src = 'display'; liveUpdate(); }
					if($('#live-search').length)    { src = 'search'; liveUpdate(); }
					if($('#live-photos').length) { 
						if(liking) {
							liking = 0;
							window.location.href=window.location.href 
						}
					}
				}
				updateCountsOnly = false;
				if(data.network == 0) { 
					data.network = ''; 
					$('.net-update').removeClass('show')
				} 
				else { 
					$('.net-update').addClass('show')
				}
				$('.net-update').html(data.network);
				if(data.home == 0) { data.home = ''; $('.home-update').removeClass('show') } else { $('.home-update').addClass('show') }
				$('.home-update').html(data.home);
			
				if(data.intros == 0) { data.intros = ''; $('.intro-update').removeClass('show') } else { $('.intro-update').addClass('show') }
				$('.intro-update').html(data.intros);
				if(data.mail == 0) { data.mail = ''; $('.mail-update').removeClass('show') } else { $('.mail-update').addClass('show') }
				$('.mail-update').html(data.mail);
			
				if(data.notify == 0) { data.notify = ''; $('.notify-update').removeClass('show') } else { $('.notify-update').addClass('show') }
				$('.notify-update').html(data.notify);
				if(data.register == 0) { data.register = ''; $('.register-update').removeClass('show') } else { $('.register-update').addClass('show') }
				$('.register-update').html(data.register);
				if(data.events == 0) { data.events = ''; $('.events-update').removeClass('show') } else { $('.events-update').addClass('show') }
				$('.events-update').html(data.events);
				if(data.events_today == 0) { data.events_today = ''; $('.events-today-update').removeClass('show') } else { $('.events-today-update').addClass('show'); $('.events-update').html(data.events + '*'); }
				$('.events-today-update').html(data.events_today);
				if(data.birthdays == 0) { data.birthdays = ''; $('.birthdays-update').removeClass('show') } else { $('.birthdays-update').addClass('show'); }
				$('.birthdays-update').html(data.birthdays);
				if(data.birthdays_today == 0) { data.birthdays_today = ''; $('.birthdays-today-update').removeClass('show') } else { $('.birthdays-today-update').addClass('show'); $('.birthdays-update').html(data.birthdays + '*'); }
				$('.birthdays-today-update').html(data.birthdays_today);
				if(data.all_events == 0) { data.all_events = ''; $('.all_events-update').removeClass('show') } else { $('.all_events-update').addClass('show') }
				$('.all_events-update').html(data.all_events);
				if(data.all_events_today == 0) { data.all_events_today = ''; $('.all_events-today-update').removeClass('show') } else { $('.all_events-today-update').addClass('show'); $('.all_events-update').html(data.all_events + '*'); }
				$('.all_events-today-update').html(data.all_events_today);
				$.jGrowl.defaults.closerTemplate = '
');
				} else {
					unpause();
				}
			} else {
				if (!totStopped) {
					unpause();
				}
			}
		});
		
		
	});
	function NavUpdate() {
		if(liking)
			$('.like-rotator').spin(false);
		if(! stopped) {
			var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
			$.get(pingCmd,function(data) {
				if(data.invalid == 1) { 
					window.location.href=window.location.href 
				}
				if(! updateCountsOnly) {
					// start live update
					if($('#live-network').length)   { src = 'network'; liveUpdate(); }
					if($('#live-channel').length)   { src = 'channel'; liveUpdate(); }
					if($('#live-home').length)      { src = 'home'; liveUpdate(); }
					if($('#live-display').length)   { src = 'display'; liveUpdate(); }
					if($('#live-search').length)    { src = 'search'; liveUpdate(); }
					if($('#live-photos').length) { 
						if(liking) {
							liking = 0;
							window.location.href=window.location.href 
						}
					}
				}
				updateCountsOnly = false;
				if(data.network == 0) { 
					data.network = ''; 
					$('.net-update').removeClass('show')
				} 
				else { 
					$('.net-update').addClass('show')
				}
				$('.net-update').html(data.network);
				if(data.home == 0) { data.home = ''; $('.home-update').removeClass('show') } else { $('.home-update').addClass('show') }
				$('.home-update').html(data.home);
			
				if(data.intros == 0) { data.intros = ''; $('.intro-update').removeClass('show') } else { $('.intro-update').addClass('show') }
				$('.intro-update').html(data.intros);
				if(data.mail == 0) { data.mail = ''; $('.mail-update').removeClass('show') } else { $('.mail-update').addClass('show') }
				$('.mail-update').html(data.mail);
			
				if(data.notify == 0) { data.notify = ''; $('.notify-update').removeClass('show') } else { $('.notify-update').addClass('show') }
				$('.notify-update').html(data.notify);
				if(data.register == 0) { data.register = ''; $('.register-update').removeClass('show') } else { $('.register-update').addClass('show') }
				$('.register-update').html(data.register);
				if(data.events == 0) { data.events = ''; $('.events-update').removeClass('show') } else { $('.events-update').addClass('show') }
				$('.events-update').html(data.events);
				if(data.events_today == 0) { data.events_today = ''; $('.events-today-update').removeClass('show') } else { $('.events-today-update').addClass('show'); $('.events-update').html(data.events + '*'); }
				$('.events-today-update').html(data.events_today);
				if(data.birthdays == 0) { data.birthdays = ''; $('.birthdays-update').removeClass('show') } else { $('.birthdays-update').addClass('show'); }
				$('.birthdays-update').html(data.birthdays);
				if(data.birthdays_today == 0) { data.birthdays_today = ''; $('.birthdays-today-update').removeClass('show') } else { $('.birthdays-today-update').addClass('show'); $('.birthdays-update').html(data.birthdays + '*'); }
				$('.birthdays-today-update').html(data.birthdays_today);
				if(data.all_events == 0) { data.all_events = ''; $('.all_events-update').removeClass('show') } else { $('.all_events-update').addClass('show') }
				$('.all_events-update').html(data.all_events);
				if(data.all_events_today == 0) { data.all_events_today = ''; $('.all_events-today-update').removeClass('show') } else { $('.all_events-today-update').addClass('show'); $('.all_events-update').html(data.all_events + '*'); }
				$('.all_events-today-update').html(data.all_events_today);
				$.jGrowl.defaults.closerTemplate = '
(.*?)<\/code>/gi,"[code]$1[/code]");
		rep(/<\/(strong|b)>/gi,"[/b]");
		rep(/<(strong|b)>/gi,"[b]");
		rep(/<\/(em|i)>/gi,"[/i]");
		rep(/<(em|i)>/gi,"[i]");
		rep(/<\/u>/gi,"[/u]");
		rep(/(.*?)<\/span>/gi,"[u]$1[/u]");
		rep(//gi,"[u]");
		rep(/]*>/gi,"[quote]");
		rep(/<\/blockquote>/gi,"[/quote]");
		rep(/
/gi,"[hr]");
		rep(/
/gi,"\n");
		rep(/
/gi,"\n");
		rep(/
/gi,"\n");
		rep(//gi,"");
		rep(/<\/p>/gi,"\n");
		rep(/ /gi," ");
		rep(/"/gi,"\"");
		rep(/</gi,"<");
		rep(/>/gi,">");
		rep(/&/gi,"&");
		return y; 
	};
    function b2h(s) {
		var y = s;
		function rep(re, str) {
			y = y.replace(re,str);
		};
		rep(/\&/gi,"&");
		rep(/\/gi,">");
		rep(/\"/gi,""");
		rep(/\n/gi,"
");
		rep(/\[b\]/gi,"");
		rep(/\[\/b\]/gi,"");
		rep(/\[i\]/gi,"");
		rep(/\[\/i\]/gi,"");
		rep(/\[u\]/gi,"");
		rep(/\[\/u\]/gi,"");
		rep(/\[hr\]/gi,"
");
		rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2");
		rep(/\[url\](.*?)\[\/url\]/gi,"$1");
		rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi," ");
		rep(/\[img\](.*?)\[\/img\]/gi,"
");
		rep(/\[img\](.*?)\[\/img\]/gi," ");
		// FIXME - add zid()
		rep(/\[zrl=([^\]]+)\](.*?)\[\/zrl\]/gi,"$2");
		rep(/\[zrl\](.*?)\[\/zrl\]/gi,"$1");
		rep(/\[zmg=(.*?)x(.*?)\](.*?)\[\/zmg\]/gi,"
");
		// FIXME - add zid()
		rep(/\[zrl=([^\]]+)\](.*?)\[\/zrl\]/gi,"$2");
		rep(/\[zrl\](.*?)\[\/zrl\]/gi,"$1");
		rep(/\[zmg=(.*?)x(.*?)\](.*?)\[\/zmg\]/gi," ");
		rep(/\[zmg\](.*?)\[\/zmg\]/gi,"
");
		rep(/\[zmg\](.*?)\[\/zmg\]/gi," ");
		rep(/\[list\](.*?)\[\/list\]/gi, '
");
		rep(/\[list\](.*?)\[\/list\]/gi, '$1
');
		rep(/\[list=\](.*?)\[\/list\]/gi, '$1
');
		rep(/\[list=1\](.*?)\[\/list\]/gi, '$1
');
		rep(/\[list=i\](.*?)\[\/list\]/gi,'$1
');
		rep(/\[list=I\](.*?)\[\/list\]/gi, '$1
');
		rep(/\[list=a\](.*?)\[\/list\]/gi, '$1
');
		rep(/\[list=A\](.*?)\[\/list\]/gi, '$1
');
		rep(/\[li\](.*?)\[\/li\]/gi, '- $1');
		rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2");
		rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"$2");
		rep(/\[code\](.*?)\[\/code\]/gi,"
$1");
		rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1
");
		rep(/\[video\](.*?)\[\/video\]/gi,"$1");
		rep(/\[audio\](.*?)\[\/audio\]/gi,"$1");
		rep(/\[\&\;([#a-z0-9]+)\;\]/gi,'&$1;');
		rep(/\<(.*?)(src|href)=\"[^hfm](.*?)\>/gi,'<$1$2="">');
		return y; 
	};
function zid(s) {
	if((! s.length) || (s.indexOf('zid=') != (-1)))
		return s;
	if(! zid.length)
		return s;
	var has_params = ((s.indexOf('?') == (-1)) ? false : true);
	var achar = ((has_params) ? '&' : '?');
	s = s + achar + 'f=&zid=' + zid;
	return s;
}