/*!
 * HTML5 Placeholder jQuery Plugin
 * @link http://github.com/mathiasbynens/Placeholder-jQuery-Plugin
 * @author Mathias Bynens <http://mathiasbynens.be/>
 */
;(function($) {
 $.fn.placeholder = function() {
  // Quit if there�s support for HTML5 placeholder
  if (this[0] && 'placeholder' in document.createElement('input')) {
   // Allow chaining
   return this;
  };
  // Made this a function, because we actually need it on two different occasions:
  // 1) Once when the DOM is loaded;
  // 2) Once every time the focusout() is triggered.
  function setPlaceholder($elem) {
   if ($elem.val() === '') {
    $elem.val($elem.attr('placeholder'));
   };
  };
  function preventSubmit($elem) {
   if ($elem.val() === $elem.attr('placeholder')) {
    $elem.val('').focus();
    return false;
   };
  };
  return $(this).each(function() {
   var $input = $(this);
   $input.css("color", "#7f7f7f");
   // Quit if the current element is a password input, or not an input at all
   if ($input.is(':password') || !$input.is(':input')) {
    return;
   }
   setPlaceholder($input);
   // Cancel both the submit event of this form and the click event of the submit button of this form
   // I found this to be necessary when using the jQuery Validation Plugin
   // Even preventDefault() failed � AMIDOINITRITE?!
   $(this.form).submit(function() {
    // preventDefault(); doesn�t seem to work here
    preventSubmit($input);
   }).find('input[type=submit]').click(function() {
    // preventDefault(); doesn�t seem to work here
    preventSubmit($input);
   });
   $input.focusin(function() {
    if ($input.val() === $input.attr('placeholder')) {
     $input.val('').css("color", "#000");
    };
   }).focusout(function() {
    setPlaceholder($input);
   });
  });
 };
})(jQuery);
$('input, textarea').placeholder();

/* url plugin */
// JQuery URL Parser plugin - https://github.com/allmarkedup/jQuery-URL-Parser
// Written by Mark Perkins, mark@allmarkedup.com
// License: http://unlicense.org/ (i.e. do what you want with it!)
;(function($,undefined){var tag2attr={a:'href',img:'src',form:'action',base:'href',script:'src',iframe:'src',link:'href'},key=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","fragment"],aliases={"anchor":"fragment"},parser={strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/},querystring_parser=/(?:^|&|;)([^&=;]*)=?([^&;]*)/g,fragment_parser=/(?:^|&|;)([^&=;]*)=?([^&;]*)/g;function parseUri(url,strictMode){var str=decodeURI(url),res=parser[strictMode||false?"strict":"loose"].exec(str),uri={attr:{},param:{},seg:{}},i=14;while(i--){uri.attr[key[i]]=res[i]||""}uri.param['query']={};uri.param['fragment']={};uri.attr['query'].replace(querystring_parser,function($0,$1,$2){if($1){uri.param['query'][$1]=$2}});uri.attr['fragment'].replace(fragment_parser,function($0,$1,$2){if($1){uri.param['fragment'][$1]=$2}});uri.seg['path']=uri.attr.path.replace(/^\/+|\/+$/g,'').split('/');uri.seg['fragment']=uri.attr.fragment.replace(/^\/+|\/+$/g,'').split('/');uri.attr['base']=uri.attr.host?uri.attr.protocol+"://"+uri.attr.host+(uri.attr.port?":"+uri.attr.port:''):'';return uri};function getAttrName(elm){var tn=elm.tagName;if(tn!==undefined)return tag2attr[tn.toLowerCase()];return tn}$.fn.url=function(strictMode){var url='';if(this.length){url=$(this).attr(getAttrName(this[0]))||''}return $.url(url,strictMode)};$.url=function(url,strictMode){if(arguments.length===1&&url===true){strictMode=true;url=undefined}strictMode=strictMode||false;url=url||window.location.toString();return{data:parseUri(url,strictMode),attr:function(attr){attr=aliases[attr]||attr;return attr!==undefined?this.data.attr[attr]:this.data.attr},param:function(param){return param!==undefined?this.data.param.query[param]:this.data.param.query},fparam:function(param){return param!==undefined?this.data.param.fragment[param]:this.data.param.fragment},segment:function(seg){if(seg===undefined){return this.data.seg.path}else{seg=seg<0?this.data.seg.path.length+seg:seg-1;return this.data.seg.path[seg]}},fsegment:function(seg){if(seg===undefined){return this.data.seg.fragment}else{seg=seg<0?this.data.seg.fragment.length+seg:seg-1;return this.data.seg.fragment[seg]}}}}})(jQuery);

/* To load on ajax call for groups*/
function _loadTinyMCE(){
	tinyMCE.init({
		// General options
		mode : "exact",
		theme : "advanced",
		elements : "editor",
		skin : "o2k7",
		skin_variant : "black",
		plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
		// Theme options
		theme_advanced_buttons1 : "forecolor,bold,italic,underline,strikethrough,sub,sup,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect,formatselect",
		theme_advanced_buttons2 : "link,unlink,anchor,image,cleanup,|,bullist,numlist,|,tablecontrols,|,hr,removeformat,visualaid,|,charmap",
		theme_advanced_buttons3 : "styleprops,code,preview,|,search,replace,|,undo,redo",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_resizing : true,
		// Example content CSS (should be your site CSS)
		content_css : "css/User.css",

		// Drop lists for link/image/media/template dialogs
		valid_elements : "@[style|class|title|rel|id],"
	+ "a[rev|charset|hreflang|type|name|href|target=_blank|title],strong/b,em/i,strike,u,"
	+ "#p,-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|"
	+ "src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,"
	+ "-blockquote,-table[border=0|cellspacing=0|cellpadding|width|frame|rules|"
	+ "height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|"
	+ "height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,"
	+ "#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor"
	+ "|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,"
	+ "-span,-code,-pre,address,-h1,-h2,-h3[class],-h4,-h5,-h6,-div,hr[size|noshade],-font[face"
	+ "|size|color],dd,dl,dt,cite,abbr,acronym,area[shape|coords|href|alt|target],bdo,"
	+ "button,col[align|char|charoff|span|valign|width],form[action|accept|accept-charset|enctype|method],"
	+ "input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value],"
	+ "option[disabled|label|selected|value],select[disabled|multiple|name|size],label[for]",
		template_external_list_url : "js/template_list.js",
		external_link_list_url : "js/link_list.js",
		external_image_list_url : "js/image_list.js",
		media_external_list_url : "js/media_list.js",
		oninit : function(){
			var $mainStyle = $("<style />");
			var $style = $("<style />");
			$("head").append( $mainStyle );
			$("#editor_ifr").contents().find("head").append( $style );

			editor = CodeMirror.fromTextArea(document.getElementById("code"), {
				height: "550px",
				matchBrackets: true,
				mode:  "css",
				onChange: function(){
					//var $style = $("#editor_ifr").contents().find("style");
					var val = $("#code").nextAll(".CodeMirror").find(".CodeMirror-lines").text().replace(/(<([^>]+)>)/ig,"").replace(/\{\s+/g, "{");
					$style.text( val );
					$mainStyle.text( val );
				},
				onLoad: function(){
					//var $style = $("#editor_ifr").contents().find("style");
					var val = $("#code").nextAll(".CodeMirror").find(".CodeMirror-lines").text().replace(/(<([^>]+)>)/ig,"").replace(/\{\s+/g, "{");
					$style.html( val );
					$mainStyle.html( val );
				}
			});
			$("#editor_ifr").contents().find("style").text( $("textarea[name=css]").val() );
			$("style").text( $("textarea[name=css]").val() );
		}
	});
	$(function(){
		$(".collapsable").click(function(){
			editor.refresh();
		});
	});
};

$(function(){
/*
 * Ajax plugin for www.rphaven.com
 * Copyright (c) www.rphaven.com
 * Not for use on any other site without permission.  rp.chatroom@gmail.com
*/

	//new msg bar.
	
	if( typeof newmsgs != 'undefined' && newmsgs[0] ){
		var $container = $('#newmsgs');
		$('<a href="#" class="collapse" style="display:inline-block;width:65px;">+ Expand</a>').appendTo( $container );
		$('<span class="msgcount"></span>').appendTo( $container );
		$('<span class="invitecount"></span>').appendTo( $container );
		var $dl = $('<dl class="toggleExpand" style="display:none;" />').appendTo( $container );
		var numMsgs = 0;
		var numInvites = 0;
		var addMsg = function(msg){
			msg.type = parseInt(msg.type);
			if(msg.msg){
				msg.msg = msg.msg.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"<a href='$1'>$1</a>"); 
			}
			switch(msg.type){
				case 0:
				case 1:
					if( !$('#msgs-list')[0] )
						$('<dt id="msgs-list">Unread Messages:</dt>').appendTo( $dl );
					var html = '<dd class="posts"><div class="msgManipContainer" style="visibility: hidden; ">'+
						'<a href="group.php?id='+msg.group_id+'">View message</a><br><a href="ajax_profile.php?mark_read='+msg.msg_id+'" class="error markread">Mark as read</a></div>'+
						'<a href="profile.php?user='+msg.user_name+'" class="light">'+msg.user_name+'</a>@<a href="group.php?name='+msg.group_name+'">'+msg.group_name+'</a> posted: '+msg.msg+'</dd>';
					$(html).insertAfter( $dl.find('#msgs-list') );
					numMsgs++;
				break;
				case 11:
					if( !$('#forum-msgs-list')[0] )
						$('<dt id="forum-msgs-list">Unread Forum Messages:</dt>').appendTo( $dl );
					var html = '<dd class="posts">'+
						'<a href="profile.php?user='+msg.user_name+'" class="light">'+msg.user_name+'</a>@<a href="group.php?name='+msg.group_name+'">'+msg.group_name+'</a> made a new post in the topic <a href="topics.php?id='+msg.group_id+'#topic='+msg.topic_id+'&page=1">'+msg.topic_title+'</a>.</dd>';
					$(html).insertAfter( $dl.find('#forum-msgs-list') );
					numMsgs++;
				break;
				case 8:
				case 9:
					if( !$('#invites-list')[0] )
						$('<dt id="invites-list">Unresolved Invites:</dt>').appendTo( $dl );
					var html = '<dd class="invites"><div class="msgManipContainer" style="visibility: hidden; ">'+
						'<a href="ajax_profile.php?invite='+msg.msg_id+'&act=accept" class="acceptinvite">Accept invite</a><br /><a href="ajax_profile.php?invite='+msg.msg_id+'&act=deny" class="error markread">Deny invite</a></div>'+
						'<span class="light">'+msg.to_user_name+'</span> invited by <a href="profile.php?user='+msg.user_name+'" class="light">'+msg.user_name+'</a>@<a href="group.php?name='+msg.group_name+'">'+msg.group_name+'</a> with message: '+msg.msg+'</dd>';
					$(html).insertAfter( $dl.find('#invites-list') );
					numInvites++;
				break;
				case 7:
					if( !$('#admin-msgs-list')[0] )
						$('<div id="admin-msgs-list"><strong>Admin Alerts:</strong></div>').prependTo( $('#newmsgs') );
					var html = '<div class="posts"><div class="msgManipContainer" style="visibility: hidden; ">'+
						'<a href="ajax_profile.php?mark_read='+msg.msg_id+'" class="error markread">Mark as read</a></div>'+
						'<a href="profile.php?user='+msg.user_name+'" class="light">'+msg.user_name+'</a>@<a href="group.php?name='+msg.group_name+'">'+msg.group_name+'</a> posted: '+msg.msg+'</div>';
					$(html).appendTo( $('#admin-msgs-list') );
					numMsgs++;
				break;
			}
		}
		$.each(newmsgs, function(i, msg){
			addMsg(msg);
		});
		if( numMsgs == 0 )
			numMsgs = 'no';
		if( numInvites == 0 )
			numInvites = 'no';
		$container.find('.msgcount').text('You have '+numMsgs+' new messsages. ');
		$container.find('.invitecount').text('You have '+numInvites+' new invites.');
		$('<dd><a href="ajax_profile.php?mark_all_read" class="error markall">Mark all messages as read.</a></dd>').appendTo( $dl );
		$('<p><a href="ajax_profile.php?mark_all_read" class="error markall">Mark all messages as read.</a></p>').prependTo( $container );
	}
	
	var loadTimer

	$.fn.animateLoad = function() {
		$("#rph_loading > div").css('top', (loadFrame * -40) + 'px');
		loadFrame = (loadFrame + 1) % 12;
	};

	$.fn.buildLoader = function() {
		loadFrame = 1;
		var html = '';
		var halfHeight = $(this).height()/2;
		var halfHeightAdjusted = halfHeight - 0;

		html += '<div style="width:40px;height:40px;margin:0 auto;margin-top:'+halfHeightAdjusted+'px;">';
		html += '<div id="rph_loading" style="display:block;"><div style="display:block;"></div></div>';
		html += '</div>';

		$(html).appendTo(this);
		$.fn.animateLoad();
		loadTimer = setInterval($.fn.animateLoad, 66);
	};
	
/*
 * 
 * Login page, registration, account.
 * 
 */
	$("#recover-password").bind("click", function(ev){
		ev.preventDefault();
		$container = $('#inputContainer');
		$container.find("h2").text("Recover lost Password");
		$('label[for="password"]').remove();
		$('input[name="password"]').remove();
		$('input[name="submit"]').val("Submit Request");
		$('form').submit(function(ev){
			ev.preventDefault();
			var username = $('input[name="login"]').val();
			var target = $("#recover-password").attr('href') + '&username=' + username;
			$.ajax({
				type: "POST", url: target, dataType: 'json',
				success: function(json){
					$container.html("<p />").text(json.msg);
				}
			});
		});
	});
	
/*
 *
 * For Profiles
 *
 */
/*	
/* Profiles Ajax */
	var $helpBtn = $('<a class="bigBtn light ui-corner-all" href="#">View Help</a>');
	$('#editor').before($helpBtn);
	$helpBtn.bind('click', function(ev){
		ev.preventDefault();
		$.ajax({
			type: "POST", url: 'help.php',
			success : function (data) {
				var $helpDialog = $('<div />');
				$helpDialog.dialog({
			  						width: 700, height: 400, title: 'Help', top: 150
								});
				$helpDialog.html(data);
				/*$.getScript("http://www.rphaven.com/javascript/donatorjs.js", function(){
				});*/
				setCollapsables();
				setTabs();
				setCarousel();
				setUnicorns();
				setSwaps();
			}
		});
	});
	
	if( !$('#donator')[0] ){
		$("#profile-container *").filter(function(index) {
			return $(this).css('position') == 'fixed';
		}).css('position', 'static');
	
		$("#profile-container").find("*").each(function(index) {
			if( parseInt($(this).css('top')) < 0 )
				$(this).css('top', '0');
			if( parseInt($(this).css('margin-top')) < 0 )
				$(this).css('margin-top', '0');
		});
	}
	
	$("a#clean, #dirty").click(function(){
		clearInterval(loadTimer);
		$("div#voteResultContainer").empty().buildLoader();
		$("div#voteResultContainer").load(this.href);
		return false;
	});
	
	$("a#miniGroup").live("click", function(){
		clearInterval(loadTimer);
		$("div#groupLoad").buildLoader();
		$.ajax({
			url: this.href,
			cache: false,
			success: function(html){
				$("div#rph_loading").parent().remove();
				$("div#profileContainer").prepend(html);
			}
		});
		return false;
	});
	
	$("a#miniGroupClose").live("click", function(){
		$("div#miniGroup").remove();
		return false;
	});	
	
/* 
 *
 * New messages stuff on all.
 *
 */
	/* For collapsing */
	$("a.collapse").toggle(
      function () {
        $("div#newmsgs dl.toggleExpand:hidden").slideDown("slow");
		$("a.collapse").empty().text("- Collapse");
      },
      function () {
        $("div#newmsgs dl.toggleExpand:visible").slideUp("slow");
		$("a.collapse").empty().text("+ Expand");
      }
    );
	
	/* mark as read link */
	$("div.posts, dd.posts, dd.invites").hover(
      function () {
        $('.msgManipContainer', this).css("visibility","visible");
      }, 
      function () {
        $('.msgManipContainer', this).css("visibility","hidden");
      }
    );
	
	$(".msgManipContainer a.acceptinvite").click(function(){
	  $(this).parent().parent().load(this.href);
	  return false;
	});
	
	$(".msgManipContainer a.markread").click(function(){
	  var thisElement = this;
	  $.get(thisElement.href, function(){
		$(thisElement).parent().parent().fadeOut("slow");
	  });
	  return false;
	});
	
	$("div#newmsgs a.markall").click(function(){
	  $.get(this.href, function(){
		$("div.posts, dd.posts").fadeOut("slow");
		$("div#newmsgs a.markall").before("<span>There are no longer any new messages to list here.</span>").empty();
		$("span.msgcount").removeClass("light").empty().text("You no longer have any unread messages.");
	  });
	  return false;
	});
	
	/*
	 *
	 * For profiles
	 *
	 */
	if( $("#profileHeader")[0] ){
		
		var infoJson = null;
		
		var open = false;
		$("#profileHeader").hover(function(){
			if( !open ){
				var $profHeader = $(this);
				
				if( !infoJson ){
					$.ajax({
						type: "GET", url: "ajax_profile.php?info="+userid, dataType: 'json',
						async: false,
						success: function(json){
							infoJson = json;
						}
					});
					
					if( infoJson.tags[0] ){
						var $container = $('<li id="tags-list"><ul /></li>').hide().appendTo("#profile-tags");
						$.each( infoJson.tags, function(key, val){
							var $el = $('<li />')
								.appendTo($container);
							$('<a href="search.php#tags='+val.name+'&page=0" />').text(val.name)
								.appendTo($el);
						});
					}
					
					if( infoJson.groups[0] || infoJson.your_groups[0] ){
						var $container = $('<li id="groups-list"><ul /></li>').hide().appendTo("#profile-groups");
						if( infoJson.groups[0] ){
							$.each( infoJson.groups, function(key, val){
								var $el = $('<li />')
									.appendTo($container);
								var $link = $('<a href="group.php?name='+val.group_name+'" />').text(val.group_name)
									.appendTo($el);
							});
						}

						if( infoJson.your_groups[0] ){
							var $el = $('<li />')
								.appendTo($container);
							$('<span />').text("Invite this person to a group:")
								.appendTo($el);
								"ajax_profile.php?get_inviter=18&to=56772"
							$.each( infoJson.your_groups, function(key, val){
								var $el = $('<li />')
									.appendTo($container);
								var $link = $('<a href="ajax_profile.php?invite_to='+val.group_id+'&user='+userid+'" />').text(val.group_name)
									.appendTo($el);
								$link.click(function(ev){
									ev.preventDefault();
									var usersJson = null;
									$.ajax({
										type: "GET", url: "ajax_profile.php?users_in="+val.group_id, dataType: 'json',
										async: false,
										success: function(json){
											usersJson = json;
										}
									});
									var $userSelectOuter = $('<li class="invite-dialog">Select a user to invite from:</li>')
										.appendTo($el);
									var $userSelectContainer = $('<ul />')
										.appendTo( $userSelectOuter );
									$.each(usersJson.users, function(userKey, userVal){
										console.log(userVal);
										var $userSelectLink = $('<li><a href="#">'+userVal.user_name+'</a></li>')
											.appendTo($userSelectContainer);
										$userSelectLink.click(function(ev){
											ev.preventDefault();
											var $messageEl = $('<li><textarea placeholder="Enter a message to accompany your invite."></textarea></li>')
												.appendTo($userSelectContainer);
											var $submit = $('<input type="submit" value="Invite" class="submit" />').button()
												.appendTo( $('<li />').appendTo($userSelectContainer) );
											$submit.click(function(ev){
												ev.preventDefault();
												var msg = $messageEl.val();
												$.ajax({
													type: "GET",
													url: 'ajax_profile.php?invite_to='+val.group_id+'&user='+userid+'&inviter='+userVal.user_id+'&msg='+msg,
													dataType: 'json',
													success: function(json){
														if( !json.error ){
															$userSelectOuter.text('Invite sent to join '+val.group_name+' from '+userVal.user_name);
														}
													}
												});
											});
										})
									});
								});
							});
						}
					}
				}
				
				$("#tags-list, #groups-list").slideDown(500);
				
				$profHeader.find('img').animate({'width':'120px','height':'120px'}, 500);
				$profHeader.find("#profileHeader-name").animate({'width':'150px'}, 500);
				
				open = true;
			}
		}, function(){
			if( open ){
				$profHeader = $(this);
				
				$("#tags-list, #groups-list").slideUp(500);
				$profHeader.find("#profileHeader-name").animate({'width':'240px'}, 500);
				$profHeader.find('img').animate({'width':'25px','height':'25px'}, 500, function(){
					open = false;
				});
			}
		});
	}
	
	/*
	 *
	 * For Groups.
	 *
	 */  
	
	/* Mini Profile view on Groups*/
	$(".groupMembers, .groupModerators, .groupOwners")
	  .hover(
		function () {
		  $('.miniProContainer', this).css("visibility","visible");
	  },
		function () {
		  $('.miniProContainer', this).css("visibility","hidden");
	  }
	);
  
	/* Ajax for Groups */
	$("#editSettings, #joinGroup, #leaveGroup, #addForum").click(function(){
	  clearInterval(loadTimer);
	  $("div#headLoad").empty().buildLoader();
	  $("div#headLoad").load(this.href);
	  return false;
	});
  
	$("#editBody, #setupSftp").click(function(){
		clearInterval(loadTimer);
		//var settingsHtml = '';
		$("div#editArea").css("min-height",$("div#editArea").height()).empty().buildLoader();
		$("div#editArea").load(this.href, function(){
			if( $(this).attr('id') == 'editArea'  ){
				_loadTinyMCE();
			}
			});
		return false;
	});
	
	$(".adminButtons").click(function(){
	  clearInterval(loadTimer);
	  $(this).nextAll('.miniProRight:first').empty().buildLoader();
	  $(this).nextAll('.miniProRight:first').load(this.href);
	  return false;
	});
	
/*
 *
 * Generic
 *
 */	
	$('ul.jsdropdown > li > a').live("click", function(){
		$(this).next('ul').toggle();
	});
	
	/* Close drop down on blur */
	$(document).bind("click", function(ev){
		var $clicked = $(ev.target);
		if( $clicked != $('ul.jsdropdown ul') && !$clicked.closest('ul.jsdropdown > li').length )
			$("ul.jsdropdown > li > ul").hide();
	});
	
	function _bindForm() {
		$("form.ajaxSubmit").submit(function(){
			// 'this' refers to the current submitted form
			var str = $(this).serialize();
				$.ajax({
				type: "POST",
				url: this.action,
				data: str,
				success: function(html){
					$("form.ajaxSubmit").replaceWith(html);
				}
			});
			return false;
		});
	};

	/* clear text on click. */
	function _clearme() {
		$(".clearme").focus(function(){
			if ($(this).val() == this.defaultValue) {
				$(this).val() = ''; }
		})
		.blur(function(){
			if ($(this).val().length === 0) { 
				$(this).val(this.defaultValue); }
		});
	};
	
	if( $("#groupBody").length > 0 || $("#profileContainerEdit").length > 0 ){
		$.getScript("http://www.rphaven.com/javascript/donatorjs.js", function(){
		});
	}
	
	/* Account page stuff */
	$('.change-pass').click(function(ev){
		var $container = $('#modify-account');
		$container.children().remove();
		var html = '<form>'+
		'<label for="password">New Password:</label><input type="password" name="password" /><br />'+
		'<label for="password2">Confirm Password:</label><input type="password" name="password2" /><br />'+
		'<input type="submit" value="Change Password" class="submit">'+
		'<br style="clear:both;" />'+
		'</form>';
		var $html = $(html);
		$html.appendTo($container);
		
		$html.submit(function(ev){
			ev.preventDefault();
			$.ajax({
				type: "POST", url: 'http://www.rphaven.com/settings.php?edit&act=change_password', dataType: 'json',
				data: "password=" + $("input[name=password]").val() + "&password2=" + $("input[name=password2]").val(),
				success: function(json){
					var html = '<p class="light" />';
					if(json.error)
						html = '<p class="error" />';
					$(html).text(json.msg).prependTo('#log');
					if(!json.error)
						$container.slideUp();
				}
			});
		});
		
		$container.slideDown();
	});
	$('.change-email').click(function(ev){
		var $container = $('#modify-account');
		$container.children().remove();
		var html = '<form>'+
		'<label for="email">New E-Mail:</label><input type="email" name="email" /><br />'+
		'<label for="email2">Confirm E-Mail:</label><input type="email" name="email2" /><br />'+
		'<input type="submit" value="Change E-Mail" class="submit">'+
		'<br style="clear:both;" />'+
		'</form>';
		var $html = $(html);
		$html.appendTo($container);
		
		$html.submit(function(ev){
			ev.preventDefault();
			$.ajax({
				type: "POST", url: 'http://www.rphaven.com/settings.php?edit&act=change_email', dataType: 'json',
				data: "email=" + $("input[name=email]").val() + "&email2=" + $("input[name=email2]").val(),
				success: function(json){
					var html = '<p class="light" />';
					if(json.error)
						html = '<p class="error" />';
					$(html).text(json.msg).prependTo('#log');
					if(!json.error)
						$container.slideUp();
				}
			});
		});
		
		$container.slideDown();
	});
	$('.transfer-chars').click(function(ev){
		var $container = $('#modify-account');
		$container.children().remove();
		var html = '<form>'+
		'<div class="by-email" style="opacity:0.5;">'+
		'<p class="light">Enter the E-Mail+Password for the account you want to move names to:</p>'+
		'<label for="email">E-Mail:</label><input type="email" name="email" /> '+
		'<label for="password">Password:</label><input type="password" name="password" /><br /></div>'+
		/*'<div class="by-name"  style="opacity:0.5;">'+
		'<p class="light">OR enter a character name from the target account:</p>'+
		'<label for="name">Character Name:</label><input type="name" name="name" /><br /></div>'+*/
		'<input type="submit" value="Send Confirmation" class="submit">'+
		'<br style="clear:both;" />'+
		'</form>';
		var $html = $(html);
		$html.appendTo($container);
		var $emailForm = $html.find('.by-email');
		var $nameForm = $html.find('.by-name');
		var focusedForm = false;
		$emailForm.add($nameForm).hover(function(){
				$(this).css('opacity', '1');
			}, function(){
				if( !$(this).hasClass('selected') )
					$(this).css('opacity', '0.5');
			});
		$emailForm.find('input').keydown(function(){
			$emailForm.css('opacity', '1');
			$emailForm.addClass('selected');
			$nameForm.css('opacity', '0.5');
			$nameForm.removeClass('selected');
			focusedForm = 'email';
		});
		$nameForm.find('input').keydown(function(){
			$nameForm.css('opacity', '1');
			$nameForm.addClass('selected');
			$emailForm.css('opacity', '0.5');
			$emailForm.removeClass('selected');
			focusedForm = 'name';
		});
		
		$html.submit(function(ev){
			ev.preventDefault();
			if(focusedForm){
				var formData = "email=" + $emailForm.find("input[name=email]").val() + "&password=" + $emailForm.find("input[name=password]").val();
				if( focusedForm == 'name' )
					formData = "name=" + $nameForm.find("input[name=name]").val();
				$.ajax({
					type: "POST", url: 'http://www.rphaven.com/settings.php?edit&act=transfer_names', dataType: 'json',
					data: formData,
					success: function(json){
						var html = '<p class="light" />';
						if(json.error)
							html = '<p class="error" />';
						$(html).text(json.msg).prependTo('#log');
						if(!json.error)
							$container.slideUp();
					}
				});
			}
		});
		
		$container.slideDown();
	});
	
	$('#oldAcc li').each(function(){
		var $this = $(this);
		var $button = $('<a>&gt;</a>').button().appendTo($this);
		$button.click(function(ev){
			ev.preventDefault();			
			var userid = $this.attr('rel');
			$.ajax({
				type: "GET", url: $.url().attr('source'), dataType: 'json',
				data: '&uid='+userid,
				success: function(json){
					$this.appendTo('#newAcc');
				}
			});
		});
	});
	
	/*
 * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
 * http://benalman.com/projects/jquery-bbq-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
/*
 * jQuery hashchange event - v1.3 - 7/21/2010
 * http://benalman.com/projects/jquery-hashchange-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
	/* 
	 * Search ajax
	 */
	function createTag(target){
		var $createTagHtml = '<div class="add-tag ui-state-highlight ui-corner-all" style="padding: 12px 10px; text-align:center;">'+
			'<form><dl>'+
			'<dt style="text-align:left;"><label for="tag-name">Tag name</label>'+
			'<input type="text" name="tag-name" placeholder="Tag_name" class="ui-corner-left" style="border-right:none;"></input></dt>'+
			'<dd style="text-align:left; margin-left:10.5em;"><label for="desc">Description</label>'+
			'<input type="text" name="desc" placeholder="Description for the tag" class="ui-corner-right"></input></dd>'+
			'</dl><input type="submit" value="Add tag" style="width:100%;" class="ui-corner-all"></input>'+
			'</form>'+
			'</div>';
		$createTagHtml = $($createTagHtml);
		target.append( $createTagHtml );
		$createTagHtml.submit(function(ev){
			ev.preventDefault();
			var $name_input = $createTagHtml.find('input[name=tag-name]');
			var $desc_input = $createTagHtml.find('input[name=desc]');
			if( $name_input.val().length > 125 || $name_input.val().length > 255 ){
				$('<p class="error">Tag name must be less than 125 characters, and description less than 255.</p>').appendTo('#add-tags');
				return false;
			}
			$.ajax({
				type: "POST", url: 'search.php?ajax&create_tag', dataType: 'json',
				data: 'tag='+$name_input.val()+'&desc='+$desc_input.val(),
				success: function(json){
					if( !json.error ) {
						$('<p class="light">' + json.msg + '</p>').appendTo( $createTagHtml.parent() );
						$name_input.val('');
						$desc_input.val('');
					}
					else {
						$('<p class="error">' + json.msg + '</p>').appendTo( $createTagHtml.parent() );
					}
				}
			});
		});		
		return $createTagHtml;
	};
	$.fn.autocompleteTags = function(){
		$(this).autocomplete({
			source: function( request, response ) {
				var term = request.term;
				if ( term in cache ) {
					response( cache[ term ] );
					return;
				}
				lastXhr = $.getJSON( "search.php?ajax&autocomplete", request, function( json, status, xhr ) {
					cache[ term ] = json.msg;
					if ( xhr === lastXhr ) {
						response( json.msg );
					}
				});
			},
			open: function() {
				$('.ui-menu').css({background: "#eee", width: "200px", fontSize: "13px"})
			}
		});
		return $(this);
	};
	function addTag(tagname, target){
		$.ajax({
			type: "POST", url: 'search.php?ajax&add_tag', dataType: 'json',
			data: 'tag='+tagname+'&userid='+userid,
			success: function(json){
				if( !json.error ) {
					addTagHtml(tagname, target);
				}
				else if( json.msg == "Tag doesn't exist." ) {
					if( $('.add-tag')[0] )
						$('.add-tag').remove();
					var addBox = createTag( $("#tags > div") );
					addBox.prepend('<p class="error">That tag doesn\'t exist.  You may create a new one here before adding it.</p>');
					addBox.find('input[name=tag-name]').val(tagname);
				}
				else {
					$('<p class="error">'+json.msg+'</p>').appendTo("#tags > div");
				}
			}
		});
	};	
	addTagHtml = function(tagname, target){
		var $tab = $('<div class="tab"><span class="tag">'+tagname+'</span></div>')
			.appendTo(target);		
		$('<span class="ui-corner-all" title="close"><a class="ui-icon ui-icon-closethick">close</a></span>').button()
			.click(function(){
				$.ajax({
					type: "POST", url: 'search.php?ajax&remove_tag', dataType: 'json',
					data: 'tag='+tagname+'&userid='+userid,
					success: function(json){
						if( !json.error ) {
							$tab.remove();
						}
						else {
							//error..
						}
					}
				});
			})
			.appendTo($tab);
	};
	function changeAlias(parent, for_tag, $el){
		$.ajax({
			type: "POST", url: 'search.php?ajax&change_tag_alias', dataType: 'json',
			data: 'parent='+parent+'&tag='+for_tag,
			success: function(json){
				if( !json.error ) {
					$el.unbind('mouseenter mouseleave');
					$el.text(parent);
				}
				else {
					$el.unbind('mouseenter mouseleave');
					console.log($el);
					$el.html('<p class="error">'+json.msg+'</p>')
				}
			}
		});
	}
	if( $("#add-tags")[0] ) {
		createTag( $("#add-tags") );
	}
	if( $("#find-tags")[0] ){
		var prevData = '';
		var searchPages = function(formData, page){
				var formData = formData ? formData : '';
				var page = page ? page : 0;
				if( prevData != formData ){
					prevData = formData;
				}
				var $pages = $('#pages');
				$.ajax({
					type: "POST", url: 'search.php?ajax&find_tag', dataType: 'json',
					data: formData + "&page=" + page,
					success: function(json){
						if( json.error || page == 0 ){
							$pages.children().remove();
							if( json.error )
								$('<p class="error">' + json.msg + '</p>').appendTo($pages);
						}
						if( !json.error ) {
							var $page = $('<div id="page'+(page+1)+'" class="page" />').appendTo($pages);
							$('<p style="text-align:center;">Showing results '+(page*25+1)+'-'+((page+1)*25)+'</p>').appendTo($page);
							var $table = $('<table><tr><th width="3%">Uses</th><th width="20%">Tag Name</th><th width="50%">Description</th><th width="7%">Type</th><th width="20%">Alias for</th></tr>').appendTo($page);
							$.each(json.msg.results, function(i,data){
								if( data.alias == null )
									data.alias = 'none';
								var $row = $('<tr><td class="count">'+data.count+'</td><td class="tag">'+data.name+'</td><td>'+data.desc+'</td><td>'+data.type+'</td><td>'+data.alias+'</td></tr>').appendTo($table);
								if( data.alias == 'none' ){
									$row.find('td:last').hover(function(ev){
												var $td = $(this);
												$td.text('');
												$('<input type="text" />').autocompleteTags()
												.bind( "autocompleteselect", function(ev, ui) {
													var $this = $(this);
													if( ui.item.value != '' )
														changeAlias( ui.item.value, data.name, $td );
													ev.preventDefault();
												})
												.keypress(function(ev){
													var $this = $(this);
													if( (ev.which == 32 /*space*/ || ev.which == 13 /*enter*/) && $this.val() != '' ){
														ev.preventDefault();
														changeAlias( $this.val(), data.name, $td );
													}
												})
												.appendTo($td);												
											}, function(ev){
												var $td = $(this);
												$td.text(data.alias);
											})
										
								}
							});
							
							if( page == 0 ){
								var numPages = Math.ceil(json.msg.numResults/25);
								if( $('#page-tabs')[0] )
									$('#page-tabs').remove();
								var $pageTabs = $('<div id="page-tabs" style="text-align:center;" />').appendTo($pages.parent());
								for( var i = 0; i < numPages; i = i + 1 ){
									var $link = $('<a href="#page'+ (i+1) +'">'+ (i+1) +'</a>').appendTo($pageTabs);
									$link.click(function(){
										var $this = $(this);
										var $target = $( $this.attr("href") );
										$pages.children('.page').hide();
										if( $target[0] ){
											$target.show();
										}
										else
											searchPages(formData, $this.index());
									});
								}								
							}
						}
					}
				});
		};
		searchPages();
		
		var $tagForm = $('#find-tags input[name=tag-name]');
		var $descForm = $('#find-tags input[name=desc]');
		var focusedForm = false;
		$tagForm.add($descForm).hover(function(){
				$(this).css('opacity', '1');
			}, function(){
				if( !$(this).hasClass('selected') )
					$(this).css('opacity', '0.5');
			});
		$tagForm.keydown(function(){
			$tagForm.css('opacity', '1');
			$tagForm.addClass('selected');
			$descForm.css('opacity', '0.5');
			$descForm.removeClass('selected');
			focusedForm = 'tag';
		});
		$descForm.keydown(function(){
			$descForm.css('opacity', '1');
			$descForm.addClass('selected');
			$tagForm.css('opacity', '0.5');
			$tagForm.removeClass('selected');
			focusedForm = 'desc';
		});
		$('#find-tags form').submit(function(ev){
			ev.preventDefault();
			var formData = "tag-name=" + $tagForm.val();
			if( focusedForm == 'desc' )
				formData = "desc=" + $descForm.val();
			searchPages(formData);
		});
	}	
	$("input[name=tag-name]").keypress(function(ev){
		if( ev.which == 32 /*space*/){
			ev.preventDefault();
		}
	});
	if( $("#search")[0] ){
		var prevData = '';
		var searchPages = function(tags, name, profile, page){
				var $pages = $('#pages');
				$.ajax({
					type: "POST", url: 'search.php?ajax&search_users', dataType: 'json',
					data: "tags="+tags + "&name="+name + "&profile="+profile + "&page="+page,
					success: function(json){
						if( json.error || page == 0 ){
							$pages.children().remove();
							if( json.error )
								$('<p class="error">' + json.msg + '</p>').appendTo($pages);
						}
						if( !json.error ) {
							$pages.children().remove();
							var $page = $('<div id="page'+(page+1)+'" class="page" />').appendTo($pages);
							$('<p style="text-align:center;">Showing results '+(page*12+1)+'-'+((page+1)*12)+'</p>').appendTo($page);
							$.each(json.msg.results, function(i,data){
								var online = '<span>(Offline)</span>';
								if( data.online == 1 )
									online = '<span class="msg">(Online)</span>';
								$('<div class="search-result-user ui-corner-all"><a href="profile.php?user='+data.name+'"><img src="avatar/th_'+data.img+'" /><span class="tag">'+data.name+'</span>'+online+'</a></div>').appendTo($page);
							});
							
							var numPages = Math.ceil(json.msg.numResults/12);
							var $pageTabs = $('#page-tabs');
							$pageTabs.children().remove();
							for( var i = 0; i < numPages; i = i + 1 ){
								var $link = $('<a href="#tags='+tags+'&page='+i+'">'+ (i+1) +'</a>').appendTo($pageTabs);
								$link.click(function(ev){
									ev.preventDefault();
									var state = {'page': $(this).index()};
									$.bbq.pushState( state );
									$(window).trigger( 'hashchange' );
								});
							}
						}
					}
				});
		};
		
		$('#search form').submit(function(ev){
			ev.preventDefault();
			var tags = $('#search input[name=tags]').val();
			var name = $('#search input[name=name]').val();
			var profile = $('#search input[name=profile]').val();
			var state = {'tags':tags,'name':name, 'profile':profile,'page':0};
			$.bbq.pushState( state );
			$(window).trigger( 'hashchange' );
		});
		
		$(window).bind( 'hashchange', function(e) {
			var tags = $.bbq.getState('tags') || '';
			var name = $.bbq.getState('name') || '';
			var profile = $.bbq.getState('profile') || '';
			var page = $.bbq.getState('page', true) || 0;
			console.log(tags, name, profile, page)
			searchPages(tags, name, profile, page);
			$('#search input[name=tags]').val(tags);
			$('#search input[name=name]').val(name);
			$('#search input[name=profile]').val(profile);
		});
		$(window).trigger( 'hashchange' );
	}
	
	var cache = {},
		lastXhr;
	if( $("#autocomplete")[0] )
		$("#autocomplete").autocompleteTags()
			.bind( "autocompleteselect", function(ev, ui) {
				if( ui.item.value != '' ){
					addTag( ui.item.value, $('#tags > div') );
				}
				ev.preventDefault();
				$(this).val('');
			})
			.keypress(function(ev){
				var $this = $(this);
				if( (ev.which == 32 /*space*/ || ev.which == 13 /*enter*/) && $this.val() != '' ){
					ev.preventDefault();
					addTag( $this.val(), $('#tags > div') );
					$this.val('');
				}
			});
	
});
