String.prototype.Trim = new Function("return this.replace(/^\s+|\s+$/g,'');");
String.prototype.IsEmpty = new Function("var a=this.Trim(); if(a.length==0){return true;}else{return false;}");
String.prototype.blank = function() { return !!this.match(/^\s*$/); }

Object.extend(String.prototype, {
	
	ajax: function() {
  	return this + '&ajax=true';
	},
	
	timestamp: function() {
		return this + '&timestamp=' + new Date().getTime();
	}
	
});


var Preloader = Class.create();
Preloader.prototype = {
	initialize: function(options) {
		this.options 								= Object.extend({}, options || {});
		this.images									= new Array('/images/icons/indicator_arrows.gif', 
																		 '/images/icons/flag_red.gif', 
																		 '/images/icons/flag_green.gif'
																	);
		//this.image									= new Array();
		this.registerCallbacks();
	},
	
	registerCallbacks: function() {
		this.images.each(function(img) {
			this.image = new Image(16, 16);
			this.image.src = img;
		});
	}
}

//Event.observe(window, 'load', function() { new Preloader(); });

var Submitter = Class.create();
Submitter.prototype = {
	
	initialize: function(options) {
		this.options 				= Object.extend({}, options || {});		
		this.form						= $(this.options.form);
		this.status					= $(this.options.status);
		this.url 						= this.options.url || this.form.action;
		this.method					= this.options.method || 'POST';
		this.request				= false;
		this.registerCallbacks();
	},
	
	registerCallbacks: function() {
		Event.observe(this.form, 'submit', this.onSubmit.bind(this));
	},
			
  parameters: function() {
		return Form.serialize(this.form).ajax().timestamp();
  },
	
	send: function() {	
		this.broadcast('Saving', 'processing');
		this.request = new Ajax.Request(this.url, { 
			method:			this.method,
			parameters:	this.parameters(),
			onSuccess:	this.onSuccess.bind(this), 
			onComplete:	this.onComplete.bind(this), 
			onFailure: 	this.onFailure.bind(this)
		});			
	},
	
	broadcast: function(text, klass) {
		this.status.className = klass;
		this.status.update(text);
	},
		
	onSubmit: function(event) {
		if(this.request) {
			Event.stop(event);
			return;
		}
		this.send();	
		Event.stop(event);
	},
	
	onComplete: function(response) {
		this.request = false;
	},
	
	onSuccess: function(response) {
		this.form.reset();
		this.broadcast(response.responseText, 'success');
	},
	
	onFailure: function(response) {
		var text = (response.status != 404) ? response.statusText : '404 - Page Not Found.';
		this.broadcast(text, 'error');
	}
	
}

var Menu = Class.create();
Menu.prototype = { 
	
	initialize: function(options) {
		this.options 				= Object.extend({}, options || {});	
		this.element				= $(this.options.element);
		this.menu						= $(this.options.menu);
		this.cancel					= this.menu.down('.cancel');
		this.visible				= false;
		this.registerCallbacks();
	},
	
	registerCallbacks: function() {
		this.element.observe('click', this.onClick.bind(this));
		this.cancel.observe('click', this.deactivate.bind(this));
	},
	
	activate: function() {
		this.menu.setStyle({display: 'block'});
		this.visible = true;
	},
	
	deactivate: function() {
		this.menu.setStyle({display: 'none'});
		this.visible = false;		
	},
	
	onClick: function(event) {
		if(!this.visible) {
			this.activate();
		} else {
			this.deactivate();
		}
		Event.stop(event);
	}

}

var StatusForm = Class.create();
Object.extend(StatusForm.prototype, Submitter.prototype);

Object.extend(StatusForm.prototype, {

	setStatus: function(text) {
		text = text.escapeHTML().strip();
		this.statusText	= $(this.options.statusText);
		this.statusText.setAttribute('title', text);
		this.statusText.update(text.truncate(20));
		
	},
	
	onSuccess: function() {
		this.params = this.form.serialize(true);
		this.setStatus(this.params.status_message);
		this.broadcast('&nbsp;', '');
		this.options.menu.deactivate();
	}

	
});

var Tabs = Class.create();
Tabs.prototype = {
	
	initialize: function(options) {
		this.options 				= Object.extend({
			suffix:										'_container',
			active:										'selected', 
			loading: 									'loading',
			error: 										'error'
		}, options || {});
		
		this.element				= $(this.options.element);
		this.container			= this.element.down('.container');
		this.items 					= this.element.down('.list').select('a');
		this.status					= this.element.down('.status');
		this.request				= false;
		this.element				= null;
		this.registerCallbacks();
	},
	
	registerCallbacks: function() {	
		this.items.invoke('observe', 'click', this.onClick.bind(this));
	},
	
	setActive: function(ss) {
		this.items.invoke('removeClassName', this.options.active);
		this.element.className = this.options.active;
	},
	
	broadcast: function(text, klass) {
		this.status.removeClassName(this.options.loading).removeClassName(this.options.error);
		this.status.addClassName(klass);
		this.status.update(text);
	},	
	
  parameters: function() {
		var param = new String;
		return param.ajax().timestamp();
  },	
	
	_load: function() {
		this.broadcast('', this.options.loading);
		this.request = new Ajax.Updater({success: this.container}, this.element.href, {
			parameters:	this.parameters(),
			onComplete:	this.onComplete.bind(this), 
			onSuccess: this.onSuccess.bind(this),
			onFailure: 	this.onFailure.bind(this)
		});		
		
	},
	
	onClick: function(event) {
		this.element = Event.element(event);
		this._load();
		Event.stop(event);
	},
	
	onComplete: function() {
		this.request = false;
		sweetTitles.init();
	},
	
	onSuccess: function(response, element) {
		this.status.removeClassName(this.options.loading).removeClassName(this.options.error);
		this.status.update('');
		this.setActive();
	},
	
	onFailure: function(response) {
		var text = (response.status != 404) ? response.statusText : '404 - Page Not Found.';
		this.broadcast('', this.options.error);
	}
	
}

var CommentRating = Class.create();
CommentRating.prototype = {

initialize: function(options) {
		this.options 				= Object.extend({
			buttons: 					"buttons"	
		}, options || {});
		
		this.container				= $(this.options.container);
		this.buttons					= this.container.down('.' + this.options.buttons);
		this.items						= this.buttons.select('a');
		this.registerCallbacks();
	},
	
	registerCallbacks: function() { 
		this.items.invoke('observe', 'click', this.onClick.bind(this));
	},
	
	parameters: function() {
		var param = new String;
		return param.ajax().timestamp();
	},
	
	broadcast: function(text, klass) {
		this.container.update(text);
		this.container.addClassName(klass);
	},
	
	_load: function(element) {
		this.broadcast('Saving', 'loading');
		this.request = new Ajax.Request(element.href, {
			parameters:	this.parameters(),																
			onComplete: this.onComplete.bind(this),
			onSuccess: this.onSuccess.bind(this),
			onFailure: this.onFailure.bind(this)
		});
	},
	
	onClick: function(event) {
		var element = Event.element(event).up('a');
		this._load(element);
		Event.stop(event);
	},
	
	onComplete: function() {
		this.request = false;
		this.container.removeClassName('loading');
	},
	
	onSuccess: function(response) {
		this.container.update(response.responseText);
	},
	
	onFailure: function(response) {
		alert(response.statusText);
	}
	
}

var Flagger = Class.create();
Flagger.prototype = {

	initialize: function(options) {
		this.options 				= Object.extend({}, options || {});
		this.container				= $(this.options.container);
		this.element					= this.container.down('a');
		this.registerCallbacks();
	},
	
	registerCallbacks: function() { 
		this.element.observe('click', this.onClick.bind(this));
	},
	
	parameters: function() {
		var param = new String;
		return param.ajax().timestamp();
	},
	
	broadcast: function(text, klass) {
		this.container.update(text);
		this.container.addClassName(klass);
	},
	
	_load: function(element) {
		this.broadcast('Saving', 'loading');
		this.request = new Ajax.Request(element.href, {
			parameters:	this.parameters(),																
			onComplete: this.onComplete.bind(this),
			onSuccess: this.onSuccess.bind(this),
			onFailure: this.onFailure.bind(this)
		});
	},
	
	onClick: function(event) {
		var element = Event.element(event).up('a');
		this._load(element);
		Event.stop(event);
	},
	
	onComplete: function() {
		this.request = false;
		this.container.removeClassName('loading');
		new Flagger({container: this.options.container});
	},
	
	onSuccess: function(response) {
		this.container.update(response.responseText);
	},
	
	onFailure: function(response) {
		this.broadcast('Error', 'error');
	}
	
}

/* The Ghetto */

var loadingImage = '/images/icons/indicator_arrows.gif';
var initComplete = false;
var contentOk = false; 
var loaded = false;
var marking = false;
var progressTimer;
var parentEditorID;

function setStatus(el, klass, message, visibility) {
	el.className = klass;
	el.innerHTML = message;
	if(visibility=="show") {
		Element.show(el);
		if(klass != "fetching") {
			new Effect.Highlight(el, {keepBackgroundImage:true});
		}
	} else if (visibility=="hide") {
		Element.hide(el);
	}
}

function preloadImages() {
	var loading_image = new Image(16,16);
	loading_image.src = loadingImage;
}

function getStyle(id) { 
	var obj = document.getElementById(id); 
	return obj.style;
}

function encode(str) {
	var result = "";
	
	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") result += "+";
		else result += str.charAt(i);
	}
	
	return escape(result);
}

function decode(str) {
     return unescape(str.replace(/\+/g, " "));
}

function confirmDelete(id, url, text) {
	var del_link = $(id);
	if(del_link.innerHTML == "Really Delete?") {
			del_link.innerHTML = "Deleting...";
			del_link.className = "fetching";
			document.location = url + "?confirm=true";
	} else {
		del_link.innerHTML = "Really Delete?";
		setTimeout("unConfirmDelete('" + id + "','" + text + "');",5000);
	}	
}

function unConfirmDelete(id, text) {
	var del_link = $(id);
	if(del_link) {
		if(del_link.className == "fetching") {
			return false;
		}
		if (text == 'undefined') {
			del_link.innerHTML = "Delete";
		} else {
			del_link.innerHTML = text;
		} 
	}
}

function toggleSettings(id, fieldset) {
	var objLink = $(id);
	objFieldset = $(fieldset);
	if(objLink.innerHTML == 'Show Settings') {
		objLink.innerHTML = 'Hide Settings';
		objLink.className = 'hide-settings-link';
		objLink.href = objLink.href.replace("show_settings", "hide_settings");
		Element.show(objFieldset);
	} else {
		objLink.innerHTML = 'Show Settings';
		objLink.className = 'show-settings-link';
		objLink.href = objLink.href.replace("hide_settings", "show_settings");
		Element.hide(objFieldset);
	}
}

function toggleFieldset(id) {
	var fieldset = $(id);
	if(fieldset.className == 'collapsed') {
		fieldset.className = '';
	} else {
		fieldset.className = 'collapsed';
	}
}

function checkPostalCode(code) {
	var location = $('postal_code');
	if(!location) {
		location = $('location');
	}
	if(code != "US") {
		$('postal_code_container').style.display = 'none';
		location.value = '';
	} else {
		$('postal_code_container').style.display = '';
	}
}

function toggleFlaggedMessage(id, div) {
	
	var el = $(id);
	
	if(el.innerHTML == "Show Message") {
		setStatus(el, "forum-message-hide", "Hide Message");
		Effect.BlindDown(div, {duration:.3});
	} else {
		setStatus(el, "forum-message-show", "Show Message");
		Effect.BlindUp(div, {duration:.3});
	}
	
}

function voteForumRating(id, rating, div) {
	var params = "ajax=true&id=" + id + "&rating=" + rating;
	
	new Ajax.Updater('', 
									 '/forums/rate/', 
									 	{
											asynchronous:true,
											evalScripts:true,
											method:'post',
											parameters:params,
											onSuccess:handleVoteSuccess	
										}
	);
	
	function handleVoteSuccess(req) {
		var vote_count = $('vc_' + id);
		var vote_div = $('dv' + id);
		var rating = $('rs_' + id);
		var result = req.responseText.split("|");
		
		rating.innerHTML = result[0];
		vote_count.innerHTML = result[1];
		
		Effect.SlideUp(vote_div);
	}
	
}

function rateObject(id, url) {

	var vote_count = $('vc_' + id);
	var vote_div = $('dv' + id);
	var rating = $('rs_' + id);	
	var params = "ajax=true";
	
	new Ajax.Request(url, { asynchronous:true, evalScripts:true, method:'post', parameters:params, onSuccess:handleSuccess, on500:errFunc });
	
	function handleSuccess(req) {
		var result = req.responseText.split("|");
		
		rating.innerHTML = result[0];
		vote_count.innerHTML = result[1];
		setStatus(vote_div, 'success', 'Vote Received', 'show');
		//Effect.SlideUp(vote_div);
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(vote_div, 'error', req.statusText, 'show');
	}		
	
}

function addPhotoAlbum(action, list_url, select_url) {
	
	if(marking) { return false; }
	
	var status = $('album-status');
	var input = $('name'), name = input.value;
	var visibility;
	var visibility_public = $('visibility_1');
	var visibility_friends = $('visibility_2');
	var visibility_private = $('visibility_3');
	
	if(visibility_public.checked) visibility = 1;
	if(visibility_friends.checked) visibility = 2;
	if(visibility_private.checked) visibility = 3;
	
	var params = "name=" + encode(name) + "&visibility=" + visibility + "&ajax=true";
	
	marking = true;
	setStatus(status, 'fetching', 'Adding Album', 'show');
	
	new Ajax.Request(action, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc});
		
	function handleSuccess(req) {
		input.value = '';
		setStatus(status, 'success', 'Your album was successfully added.', '');
		new Ajax.Updater('album-list', list_url, {asynchronous:true, method:'get', evalScripts:true });
		new Ajax.Updater('album-select-list', select_url, {asynchronous:true, method:'get', evalScripts:true });
		marking = false;
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}	
	
}

function fetchCommentReplies(this_id, link_id, replies_div, url) {
	
	link_id = $(link_id);
	this_id = $(this_id);

	if($(replies_div).innerHTML.length == 0) {
		
		this_id.className = "fetching";
		link_id.innerHTML = "Fetching";
		new Ajax.Updater(replies_div, url, {asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete});
	} else {
		if(link_id.innerHTML == "Hide") {
			link_id.innerHTML = "View";
			this_id.className = "comment-replies-count";
	} else {
			link_id.innerHTML = "Hide";
			this_id.className = "comment-replies-count-hide";
	}
		Effect.toggle(replies_div, 'blind', {duration:.5});
	}
	
	function handleComplete(req) {
		Effect.toggle(replies_div, 'blind', {duration:.5});
		link_id.innerHTML = "Hide";
		this_id.className = "comment-replies-count-hide";
		sweetTitles.init();
	}
	
}

function replyUserComment(id, action) {
	
	if(marking) return;

	var message = $('reply_message');	
	var reply_user = $F('reply_username');
	var status = $('reply-status');
		
	marking = true;
	setStatus(status, 'fetching', 'Posting', 'show');
	
	new Ajax.Request(action, { 
		parameters: { 
			ajax: 						true,
			message: 					message.value, 
			reply_username: 	reply_user
		}, 
		onSuccess:	onSuccess, 
		onComplete:	onComplete, 
		onFailure: 	onFailure
	});
	
	function onSuccess(req) {
		message.value = '';
		setStatus(status, 'success', 'Your comment was posted', 'show');	
		setTimeout("Element.hide('qrdiv');",1000);
		setTimeout("setStatus($('reply-status'), '', '', 'hide');",2000);
	}	
	
	function onComplete(req) {
		marking = false;	
	}
	
	function onFailure(req) {
		marking = false;	
		setStatus(status, 'error', req.statusText, 'show');		
	}	
	
}
	
function postComment(id, action) {
	
	if(marking) return;
	marking = true;	
	
	var message = $('message');
	var button = $('comment-post-button');
	var status = $('post-status');	
	
	setStatus(status, 'fetching', 'Posting comment', 'show');
	
	button.value = 'Posting...'
	button.disabled = true;
	
	new Ajax.Updater({success:'comment-list'}, 
		action, { 
			parameters: {
					message: message.value,
					ajax: true
			},
			onFailure: onFailure,
			onSuccess: onSuccess,
			onComplete: onComplete
			
	});

	function onFailure(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');	
	}
	
	function onSuccess(req) {
		message.value = '';
		setStatus(status, 'success', 'Your comment was posted', 'show');
		setTimeout("Effect.Fade('post-status',{duration:.3});",3000);
	}
	
	function onComplete(req) {
		marking = false;
		button.disabled = false;
		button.value = 'Post';
		sweetTitles.init();
	}
	
}

function replyComment(id, action, url) {
	
	if(marking) return;
	marking = true;

	var status = $('reply-status');
	var comment_status = $('comment-status');
	var comment_id = $F('comment_id_hid');
	var message = $('reply_message');
	
	setStatus(status, 'fetching', 'Posting reply', 'show');
	
	new Ajax.Updater({success:'comment-replies-' + comment_id}, 
		action, { 
			parameters: {
					message: 				message.value,
					comment_id: 		comment_id,
					ajax: 					true
			},
			onFailure: onFailure,
			onSuccess: onSuccess,
			onComplete: onComplete
			
	});	
		
	function onFailure(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');	
	}
	
	function onSuccess(req) {
		message.value = '';
		setStatus(status, 'success', 'Your comment was posted', 'show');
		setTimeout("Effect.Fade('reply-status',{duration:.3});",3000);
	}
	
	function onComplete(req) {
		marking = false;
		sweetTitles.init();
	}	
	
}

function deleteComment(id, url) {
	
	if(marking) { return false; }
	
	var del_link = $(id);
	var comment_status = $('comment-status');
	var params = "ajax=true";

	if(del_link.innerHTML == "Really Delete?") {
			del_link.innerHTML = "Deleting...";
			del_link.className = "fetching";
			marking = true;
			try { tinyMCE.execCommand('mceRemoveControl',false,'reply_message'); } catch(err) {}
			new Ajax.Updater('comment-list', url, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onComplete:handleComplete, onError: errFunc});			
	} else {
		del_link.innerHTML = "Really Delete?";
		setTimeout("unConfirmDelete('" + id + "');",5000);
	}		

	function handleSuccess(req) {
		marking = false;
		setStatus(comment_status, 'success', 'Your comment was deleted', 'show');
	}
	
	function handleComplete(req) {
		sweetTitles.init();	
	}
	
	function errFunc(req) {
		marking = false;
		alert('Error ' + req.status + ' -- ' + req.statusText);
	}		
	
}

function toggleBlock(id, url) {

	var link = $(id);
	if(link.innerHTML == "Block User") {
		blockUser(id, url);
	} else {
		unblockUser(id, url);
	}
}

function blockUser(id, url) {

	if(marking) return false; 

	var link = $(id);
	var params = "ajax=true";
	
	setStatus(link, 'fetching', 'Blocking User');
	new Ajax.Request(url, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc});

	function handleSuccess(req) {
		marking = false;
		link.href = url.replace("add_block", "remove_block");
		setStatus(link, 'unblock-user-link', 'Unblock User');
	}
	
	function errFunc(req) {
		marking = false;
		alert('Error ' + req.status + ' -- ' + req.statusText);
		setStatus(link, 'block-user-link', 'Block User');
	}
	
}

function unblockUser(id, url) {
	
	if(marking) return false; 

	var link = $(id);
	var params = "ajax=true";
	
	setStatus(link, 'fetching', 'Unblocking User');
	new Ajax.Request(url, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc});

	function handleSuccess(req) {
		marking = false;
		link.href = url.replace("remove_block", "add_block");
		setStatus(link, 'block-user-link', 'Block User');
	}
	
	function errFunc(req) {
		marking = false;
		alert('Error ' + req.status + ' -- ' + req.statusText);
		setStatus(link, 'unblock-user-link', 'Unblock User');
	}
	
}

function toggleFavorite(id, url) {

	var fave_link = $(id);
	if(fave_link.innerHTML == "Add to Favorites") {
		addFavorite(id, url);
	} else {
		removeFavorite(id, url);
	}
}

function addFavorite(id, url) {

	if(marking) { 
		return false; 
	}

	var fave_link = $(id);
	var params = "ajax=true";
	
	setStatus(fave_link, 'fetching', 'Adding to Favorites');
	new Ajax.Request(url, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc});

	function handleSuccess(req) {
		marking = false;
		fave_link.href = url.replace("add_favorite", "remove_favorite");
		setStatus(fave_link, 'remove-favorite-link', 'Remove from Favorites');
	}
	
	function errFunc(req) {
		marking = false;
		alert('Error ' + req.status + ' -- ' + req.statusText);
		setStatus(fave_link, 'add-favorite-link', 'Add to Favorites');
	}
	
}

function removeFavorite(id, url) {
	
	if(marking) { 
		return false; 
	}	

	var fave_link = $(id);
	var params = "ajax=true";
	
	setStatus(fave_link, 'fetching', 'Removing from Favorites');
	new Ajax.Request(url, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc});

	function handleSuccess(req) {
		marking = false;
		fave_link.href = url.replace("remove_favorite", "add_favorite");
		setStatus(fave_link, 'add-favorite-link', 'Add to Favorites');
	}
	
	function errFunc(req) {
		marking = false;
		alert('Error ' + req.status + ' -- ' + req.statusText);
		setStatus(fave_link, 'remove-favorite-link', 'Remove from Favorites');
	}
	
}

function addUserTag(action, type, url) {
	
	if(marking) { return false; }
	
	var container = $('tag-list-' + type);
	var name = $('name_' + type).value;
	var group_id = $('group_id_' + type).value;
	var status = $('tag-status');
	var params = "ajax=true&name=" + name + "&group_id=" + group_id;

	marking = true;
	setStatus(status, 'fetching', 'Adding Tag', 'show');
	new Ajax.Request(action, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc});
		
	function handleSuccess(req) {
		new Ajax.Updater(container, url, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onError: errFunc, on500: errFunc, on404: errFunc });
		marking = false;
		
		function handleComplete(req) {
			setStatus(status, 'success', 'Your tag was successfully added.', 'show');		
		}
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}	
		
}

function deleteUserTag(id, action, type, url) {
	
	if(marking) { return false; }
	
	var del_link = $(id);
	var container = $('tag-list-' + type);
	var status = $('tag-status');	
	var params = "confirm=true";

	if(del_link.innerHTML == "Really Delete?") {
			del_link.innerHTML = "Deleting...";
			del_link.className = "fetching";
			marking = true;
			new Ajax.Request(action, {asynchronous:true, method:'get', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc });
	} else {
		del_link.innerHTML = "Really Delete?";
		setTimeout("unConfirmDelete('" + id + "','[x]');",5000);
	}		

	function handleSuccess(req) {
		new Ajax.Updater(container, url, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onError: errFunc, on500: errFunc, on404: errFunc });
	
		function handleComplete(req) {
			marking = false;
			setStatus(status, 'success', 'Your tag was successfully deleted.', 'show');	
		}
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}		
	
}

function addUserLink(action, container, url) {
	
	if(marking) { return false; }
	
	var link_name = $('link_name');
	var link_url = $('link_url');
	var status = $('links-status');
	var params = 'ajax=true&name=' + link_name.value + '&url=' + link_url.value;
	
	setStatus(status, 'fetching', 'Adding link', 'show');
	marking = true;
		
	new Ajax.Request(action, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc });
	
	function handleSuccess(req) {
		setStatus(status, 'success', 'Your link was successfully added.', 'show');
		link_name.value = '';
		link_url.value = 'http://';
		new Ajax.Updater(container, url, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onError: errFunc, on500: errFunc, on404: errFunc });
	
		function handleComplete(req) {
			marking = false;
		}

		function errFunc(req) {
			marking = false;
			setStatus(status, 'error', req.statusText, 'show');
		}	

}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}		
	
}

function AddBlogTag(name, url, div) {

	name = $(name).value;
	
	if(name == "") {
		return false;
	}
	
	name = name.replace(/\&/, "%26");
	var params = "ajax=true&action=add_tag&name=" + name;

	new Ajax.Updater(div, url, {asynchronous:true,method:'post',parameters:params,evalScripts:true});
		
}

function addTag(id, action, div, url) {
	
	if(marking) { return false; }
	
	var tag_name = $F(id);
	var name = $(id);
	var status = $('tag-status');
	var params = "ajax=true&tag_name=" + escape(tag_name);
	
	marking = true;
	setStatus(status, 'fetching', 'Adding Tag', 'show');	
	
	new Ajax.Request(action, {asynchronous:true, method:'post', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc });
	

	function handleSuccess(req) {
		
		name.value = '';
		name.blur();
		name.focus();
		new Ajax.Updater(div, url, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onError: errFunc, on500: errFunc, on404: errFunc });

		function handleComplete(req) {
			marking = false;
			setStatus(status, 'success', 'Your tag was successfully added.', 'show');
			setTimeout("Effect.Fade('tag-status',{duration:.3});",3000);
		}

		function errFunc(req) {
			marking = false;
			setStatus(status, 'error', req.statusText, 'show');
		}	
		
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}				

}

function deleteTag(id, action, div, url) {
	
	if(marking) { return false; }
	
	var del_link = $(id);
	var status = $('tag-status');	
	var params = "ajax=true&confirm=true";

	if(del_link.innerHTML == "Really Delete?") {
			del_link.innerHTML = "Deleting...";
			del_link.className = "fetching";
			marking = true;
			new Ajax.Request(action, {asynchronous:true, method:'get', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc });
	} else {
		del_link.innerHTML = "Really Delete?";
		setTimeout("unConfirmDelete('" + id + "','[x]');",5000);
	}		

	function handleSuccess(req) {
		new Ajax.Updater(div, url, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onError: errFunc, on500: errFunc, on404: errFunc });
	
		function handleComplete(req) {
			marking = false;
			setStatus(status, 'success', 'Your tag was successfully deleted.', 'show');	
			setTimeout("Effect.Fade('tag-status',{duration:.3});",3000);
		}
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(del_link, 'tag-delete-link', '[x]', '');
		setStatus(status, 'error', req.statusText, 'show');
	}		
	
}

function deleteNotification(id, action, div, url) {
	
	if(marking) { return false; }
	
	var del_link = $(id);
	var status = $('notification-status');	
	var params = "confirm=true";

	if(del_link.innerHTML == "Really Delete?") {
			del_link.innerHTML = "Deleting...";
			del_link.className = "fetching";
			marking = true;
			new Ajax.Request(action, {asynchronous:true, method:'get', parameters:params, evalScripts:true, onSuccess:handleSuccess, onError: errFunc, on500: errFunc, on404: errFunc });
	} else {
		del_link.innerHTML = "Really Delete?";
		setTimeout("unConfirmDelete('" + id + "','[x]');",5000);
	}		

	function handleSuccess(req) {
		new Ajax.Updater(div, url, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onError: errFunc, on500: errFunc, on404: errFunc });
	
		function handleComplete(req) {
			marking = false;
			setStatus(status, 'success', 'Your notification was successfully deleted.', 'show');	
			setTimeout("Effect.Fade('notification-status',{duration:.3});",3000);
		}
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(del_link, 'x-delete-link', '[x]', '');
		setStatus(status, 'error', req.statusText, 'show');
	}		
	
}

function checkLocationValue() {
	var input = $('location');
	if(input.value == "City or Postal Code") {
		input.value = "";
	}
}

function clearField(id, value) {
	var input = $(id);
	if(input.value == value) {
		input.value = "";
	}
}

function AddToFriends(username) {
	var innerHTML = '<h2 style="color: #17385b;">Add to Friends</h2><div style="margin-bottom: 10px;padding: 0 5px;text-align: left;">You are about to add <strong>' + username + '</strong> as a friend. We will notify <strong>' + username + '</strong>, who will have to confirm that you are friends.</div>';
	innerHTML += '<form method="post" action="/' + username + '/add_friend/">'; 
	innerHTML += '<input type="submit" value="Add Friend" class="button" />&nbsp;';
	innerHTML += '<input type="button" value="Cancel" class="button" onclick="Dialog.closeInfo();" />';
	innerHTML += '<input type="hidden" name="postback" value="1" />';
	innerHTML += '</form>';
	
	Dialog.info(innerHTML, {className: "alphacube", width:275, okLabel: "Close"});	

}	

function confirmDeleteWindow(object, url) {
	
	var innerHTML;
	
	switch(object) {
		case 'album':
		innerHTML = '<h3>Confirm Delete</h3>';
		innerHTML += 'Are you sure you want to delete this Photo Album?<br />';
		innerHTML += 'All images within this album will be <strong>deleted</strong> and this process is <strong>not reversable</strong>.<br /><br />';
		innerHTML += '<input type="button" class="button" value="Yes" onclick="document.location=\'' + url + '?confirm=true\';" />&nbsp;';
		innerHTML += '<input type="button" class="button" value="No" onclick="Dialog.closeInfo();" />';
		break;
		
		case 'photo':
		innerHTML = '<h3>Confirm Delete</h3>';
		innerHTML += 'Are you sure you want to delete this Photo?<br />';
		innerHTML += 'All comments and notes for this photo will be<br />deleted and this process is <strong>not reversable</strong>.<br /><br />';
		innerHTML += '<input type="button" class="button" value="Yes" onclick="document.location=\'' + url + '?confirm=true\';" />&nbsp;';
		innerHTML += '<input type="button" class="button" value="No" onclick="Dialog.closeInfo();" />';
		break;		
	}
	
	Dialog.info(innerHTML, {className: "alphacube", width:300, okLabel: "Close"});	
}

function insertHTML(html) {
   if (initComplete) {
       tinyMCE.execInstanceCommand("mce_editor_0","mceInsertContent",false,html);
   }
}
 
function setContentOk(editor_id, body, doc) {
  contentOk=editor_id;	
}

function moveCursorToEnd(editor_id) {
    var inst = tinyMCE.getInstanceById(editor_id);
		if(!inst) { return false; }
    tinyMCE.execInstanceCommand(editor_id,"selectall", false, null);
    if (tinyMCE.isMSIE) {
        rng = inst.getRng();
        rng.collapse(false);
        rng.select();
    } else {
        sel = inst.getSel();
        sel.collapseToEnd();
    }
}

function moveCursorTinyMce() { 
    if(contentOk==false) {
        window.setTimeout("moveCursorTinyMce()",500);
        return null;
    }
    moveCursorToEnd(contentOk);initComplete = true;
}

function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
     anchor.target = "_blank";
	 }
	 if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "video") {
		 Event.observe(anchor, 'mouseover', doMouseOver.bind(anchor));
		 Event.observe(anchor, 'mouseout', doMouseOut.bind(anchor));
	 }
 }
 
 function doMouseOver() {
 	this.getElementsByTagName('img')[0].style.display = 'inline';
 }
 
 function doMouseOut() {
 	this.getElementsByTagName('img')[0].style.display = 'none';
 }
 
}

function swapForums(id, url, div, action) {
	
	if(marking) return false;
	
	var status = $('tabs-status');
	var button = $('forums-more-button');
	
	for (var i=1; i<6; i++) {
		if(id==i) {
			$('tab-' + i).className = "current";
			Element.show('forums-more-button-'+i);
		} else {
			$('tab-' + i).className = "";
			Element.hide('forums-more-button-'+i);
		}
	}
	
	marking = true;
	setStatus(status, 'fetching', 'Loading', 'show');
	new Ajax.Updater(div, action, {asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, on500:errFunc, on404:errFunc});

	function handleComplete(req) {	
		marking = false;
		Element.hide(status);
		sweetTitles.init();
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}
	
}

function swapTab(id, tab, div, action, count, status, button) {
	
	if(marking) return false;
	
	status = $(status);	
	
	for (var i=1; i<=count; i++) {
		if(id==i) {
			$(tab + '-' + i).className = "current";
			if(button) Element.show(button+'-'+i);
		} else {
			$(tab + '-' + i).className = "";
			if(button) Element.hide(button+'-'+i);
		}
	}
	
	marking = true;
	setStatus(status, 'fetching', 'Loading', 'show');
	new Ajax.Updater({success:div}, action, {asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onSuccess:handleSuccess, on500:errFunc, on404:errFunc});

	function handleComplete(req) {	
		marking = false;
		sweetTitles.init();
	}
	
	function handleSuccess(req) {
		Element.hide(status);
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}
	
}

function fetchPage(div, action, status) {
	
	if(marking) return false;
	
	marking = true;
	status = $(status);
	setStatus(status, 'fetching', 'Fetching', 'show');
	
	try { tinyMCE.execCommand('mceRemoveControl',false,'reply_message'); } catch(err) {}

	new Ajax.Updater({success: div, failure: status}, action, { asynchronous:true, method:'get', evalScripts:true, onComplete:handleComplete, onSuccess:handleSuccess, on500:errFunc, on404:errFunc});	

	function handleSuccess(req) {
		marking = false;
		Element.hide(status);		
	}
	
	function handleComplete(req) {			
		sweetTitles.init();
	}
	
	function errFunc(req) {
		marking = false;
		setStatus(status, 'error', req.statusText, 'show');
	}	
	
	
}

function fetchNoteMessage(note_id, url, viewed, update) {
	
	row_id = $(row_id);
	
	var div = $('note-message-' + note_id);
	var row_id = $('note-row-' + note_id);
	var loader = $('loader-' + note_id);
	var mark = $('note-mark-link-' + note_id);
	
	if(div.innerHTML.length == 0) { 
		Element.show(loader);
		new Ajax.Updater(div, url, { 
			method:'get', 
			onSuccess:handleComplete, 
			onFailure:errFunc
		});
	} else {
		if(row_id.style.display == "none") {
			Element.show(row_id);
			if(update) {
				if(mark.innerHTML == "Mark Read") {
					markNoteRead(note_id);
				}
			}
		} else {
			Element.hide(row_id);
		}
	}
	
	function handleComplete(req) {
		if(viewed == 0 && update) {
			markNoteRead(note_id);
		}
		Element.show(row_id);
		Element.hide(loader);
	}
	
	function errFunc(req) {
		alert('Error ' + req.status + ' -- ' + req.statusText);
	}
	
}

function markNoteRead(note_id) {
	
	if(marking) { return false; }
	
	var url = '/messages/mark_read/' + note_id + '/';
	var stat = $('user-unread-notes-count');
	var mark = $('note-mark-link-' + note_id);
	var checkbox = $('note-id-' + note_id);
	var params = "ajax=true";
	
	mark.className = "fetching";
	mark.innerHTML = "Marking Read";
	marking = true;
	
	new Ajax.Request(url, {asynchronous:true, method:'get', parameters:params, onComplete:handleComplete, onFailure:errFunc});
	
	function handleComplete(req) {
		$('note-subject-link-' + note_id).className = "note-subject-link-read";
		stat.innerHTML = parseInt(stat.innerHTML) - 1;
		mark.className = "note-mark-unread-link";
		mark.innerHTML = "Mark Unread";
		mark.href = mark.href.replace("mark_read", "mark_unread");	
		marking = false;
		checkbox.setAttribute('rel', 'read');
	}	
	
	function errFunc(req) {
		alert('Error ' + req.status + ' -- ' + req.statusText);
	}
	
}

function markNoteUnread(note_id) {
	
	if(marking) { return false; }
	
	var url = '/messages/mark_unread/' + note_id + '/';
	var stat = $('user-unread-notes-count');
	var mark = $('note-mark-link-' + note_id);
	var checkbox = $('note-id-' + note_id);
	var params = "ajax=true";
	
	mark.className = "fetching";
	mark.innerHTML = "Marking Unread";
	marking = true;
	
	new Ajax.Request(url, {asynchronous:true, method:'get', parameters:params, onComplete:handleComplete, onFailure:errFunc});
	
	function handleComplete(req) {
		$('note-subject-link-' + note_id).className = "note-subject-link-unread";
		stat.innerHTML = parseInt(stat.innerHTML) + 1;
		mark.className = "note-mark-read-link";
		mark.innerHTML = "Mark Read";
		mark.href = mark.href.replace("mark_unread", "mark_read");
		marking = false;
		checkbox.setAttribute('rel', 'unread');
	}	

	function errFunc(req) {
		alert('Error ' + req.status + ' -- ' + req.statusText);
	}
	
}

function toggleMarkNote(id) {
	var mark = $('note-mark-link-' + id);
	if(mark.innerHTML == "Mark Read") {
		markNoteRead(id);
	} else {
		markNoteUnread(id);
	}
}

function toggleForumBookmark(id, url) {

	var bookmark_link = $(id);
	if(bookmark_link.innerHTML == "Add to Bookmarks") {
		addForumBookmark(id, url);
	} else {
		removeForumBookmark(id, url);
	}
}

function addForumBookmark(id, href) {
	
	if(marking) { return false; }
	
	var bookmark_link = $(id);
	var params = "ajax=true";
	
	bookmark_link.className = "fetching";
	bookmark_link.innerHTML = "Adding to Bookmarks";
	marking = true;
	
	new Ajax.Request(href, { asynchronous:true, method:'get', parameters:params, onSuccess:handleComplete, onFailure:errFunc });

	function handleComplete(req) {
		bookmark_link.className = "forum-remove-bookmark";
		bookmark_link.innerHTML = "Remove from Bookmarks";
		bookmark_link.href = bookmark_link.href.replace(/add_bookmark/, 'remove_bookmark');
		marking = false;	
	}	

	function errFunc(req) {
		alert('Error ' + req.status + ' -- ' + req.statusText);
	}
	
}

function removeForumBookmark(id, href) {
	
	if(marking) { return false; }
	
	var bookmark_link = $(id);
	var params = "ajax=true";
	
	bookmark_link.className = "fetching";
	bookmark_link.innerHTML = "Removing from Bookmarks";
	marking = true;
	
	new Ajax.Request(href, { asynchronous:true, method:'get', parameters:params, onSuccess:handleComplete, onFailure:errFunc });

	function handleComplete(req) {
		bookmark_link.className = "forum-add-bookmark";
		bookmark_link.innerHTML = "Add to Bookmarks";
		bookmark_link.href = bookmark_link.href.replace(/remove_bookmark/, 'add_bookmark');
		marking = false;	
	}	

	function errFunc(req) {
		alert('Error ' + req.status + ' -- ' + req.statusText);
	}
	
}

function fetchNoteReply(div_id, link_id, url) {
	
	div_id = $(div_id);
	link_id = $(link_id);
	var params = "action=reply"
	
	if(div_id.innerHTML.length == 0) {
		Element.show(link_id);
		link_id.className = "fetching";
		link_id.innerHTML = "Fetching Previous Message";
		new Ajax.Updater(div_id, url, {asynchronous:true,method:'get',parameters:params,evalScripts:true,onComplete:handleComplete});
	} else {
		if(link_id.innerHTML == "Hide Previous Message") {
			link_id.innerHTML = "View Previous Message";
			link_id.className = "note-previous-message-link"
			Effect.BlindUp(div_id, {duration:.5});
		} else {
			link_id.className = "note-previous-message-link-hide";
			link_id.innerHTML = "Hide Previous Message";
			Effect.BlindDown(div_id, {duration:.5});
		}
	}
	
	function handleComplete(req) {
		link_id.className = "note-previous-message-link-hide";
		link_id.innerHTML = "Hide Previous Message";
		Effect.BlindDown(div_id, {duration:.5});
		sweetTitles.init();
	}	
	
}

function fetchCalendar(url) {
	Element.show('calendar-loading');
	new Ajax.Updater('calendar', url + 'calendar/', {asynchronous:true,method:'get',onComplete:handleComplete});
	function handleComplete(req) {
		return;
	}
}

function toggleList(link_id, start, length, list) {
	var list_item;
	var list_link = $(link_id);
	if(list) { 
		list_item = list;
	} else {
			list_item = 'list-item-';
	}
	
	if(list_link.innerHTML == "more") {
		for(var i=start;i<length;i++) {
			Element.show(list_item+i);
		}
		list_link.innerHTML = "less";
	} else {
		for(var i=start;i<length;i++) {
			Element.hide(list_item+i);
		}		
		list_link.innerHTML = "more";
	}
}

function toggleTags(object) {
	switch(object) {
		case 1:
			Element.hide('tag-list-music');
			Element.hide('tag-list-movies');
			Element.show('tag-list-interests');		
			break;
		case 2:
			Element.hide('tag-list-interests');
			Element.hide('tag-list-movies');
			Element.show('tag-list-music');
			break;
		case 3:
			Element.hide('tag-list-interests');
			Element.hide('tag-list-music');
			Element.show('tag-list-movies');
			break;	
	}
	Element.hide('tag-status');
}

function checkAll(id, checked) {
		var form = $(id);
    for(var i=0;i<form.elements.length;i++) {
			var checkbox=form.elements[i];
			if(checked == 'all') {
					checkbox.checked=true;
			} else if(checked == 'none') {
					checkbox.checked=false;
			} else if(checked == 'read') {
				if(checkbox.getAttribute('rel') == "read") {
					checkbox.checked=true;
				} else {
					checkbox.checked=false;
				}
			} else if(checked == 'unread') {
				if(checkbox.getAttribute('rel') == "unread") {
					checkbox.checked=true;
				} else {
					checkbox.checked=false;
				}
			}
		}
}

function highlightThumb(checkbox, thumb) {
	
	checkbox = $(checkbox);
	thumb = $(thumb);
	
	if(checkbox.checked) {
		thumb.className = 'thumb-selected';
	} else {
		thumb.className = 'thumb';
	}
	
}

function submitForm(form, type) {
	
	form = $(form);	
	if(type) {
		$('type').value = type;
	}
	form.submit();
	
}

function copyToClipboard(inElement, status) {
  if (inElement.createTextRange) {
    var range = inElement.createTextRange();
    if (range) {
      range.execCommand('Copy');
			if(status) {
				Effect.BlindDown(status, {duration:.3});
				setTimeout("Effect.BlindUp('" + status + "',{duration:.3});",3000);
			}
		}
  } else {
    var flashcopier = 'flashcopier';
    if(!document.getElementById(flashcopier)) {
      var divholder = document.createElement('div');
      divholder.id = flashcopier;
      document.body.appendChild(divholder);
    }
    document.getElementById(flashcopier).innerHTML = '';
    var divinfo = '<embed src="/flash/_clipboard.swf" FlashVars="clipboard='+encodeURIComponent(inElement.value)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    document.getElementById(flashcopier).innerHTML = divinfo;
		if(status) {
			Effect.BlindDown(status, {duration:.3});
			setTimeout("Effect.BlindUp('" + status + "',{duration:.3});",3000);
		}		
  }
}

function uploadPhoto(form, progress, url) {
	$(form).submit();
	Element.hide(form);
	Element.show(progress);
	progressTimer = setInterval('refreshProgressBar("' + url + '");', 1000);
	
}

function refreshProgressBar(url) {
	if(marking) { return false; }
	marking = true;
	new Ajax.Updater('progress', url, {asynchronous:true, method:'get', evalScripts:true, onSuccess:onCompleteHandler});
	
	function onCompleteHandler(req) {
		marking = false;
	}
}

function stopProgressBar() {
	clearInterval(progressTimer);
}

function toggleDescription() {
	
	var less = $('desc-less');
	var more = $('desc-more');
	
	if(more.style.display=='none') {
		Element.hide('desc-less');
		Element.show('desc-more');	
	} else {
		Element.hide('desc-more');
		Element.show('desc-less');
	}
	
}

function toggleTagForm(id) {
	
	var tag_link = $(id);
	var tag_form = $('tags-form');
	
	Element.hide(tag_link);
	Element.show(tag_form);
	
}

function removeClassName (elem, className) {
	elem.className = elem.className.replace(className, "").trim();
}

function addCSSClass (elem, className) {
	removeClassName (elem, className);
	elem.className = (elem.className + " " + className).trim();
}

String.prototype.trim = function() {
	return this.replace( /^\s+|\s+$/, "" );
}

function stripedTable() {
	if (document.getElementById && document.getElementsByTagName) {  
		var allTables = document.getElementsByTagName('table');
		if (!allTables) { return; }

		for (var i = 0; i < allTables.length; i++) {
			if (allTables[i].className.match(/[\w\s ]*scroll-table[\w\s ]*/)) {
				var trs = allTables[i].getElementsByTagName("tr");
				for (var j = 0; j < trs.length; j++) {
					removeClassName(trs[j], 'alternateRow');
					addCSSClass(trs[j], 'normalRow');
				}
				for (var k = 0; k < trs.length; k += 2) {
					removeClassName(trs[k], 'normalRow');
					addCSSClass(trs[k], 'alternateRow');
				}
			}
		}
	}
}

function NewWindow(a, b, w, h, n) {
    var l = (screen.width - w) / 5;
    var t = (screen.height - h) / 6;
    var p = 'height=' + h + ',width=' + w + ',top=' + t + ',left=' + l + ',scrollbars=' + n;
		var w = window.open(a, b, p);
   	if (parseInt(navigator.appVersion) >= 4) {
        w.window.focus()
    }
}

function highjackTags(input) {
	var tags = input.value.split(' ');
	var tag = tags.pop();
	return "tag_name=" + tag;
}

function insertEmoticon(code, id, editor) {
	tinyMCE.execInstanceCommand(editor, 'mceInsertContent', false, code);
	if(id) Element.hide(id);
}
function toggleEmoticons(editor_id) {

	var textarea;
	var div;
	var innerHTML;
	parentEditorID = editor_id;
	
  div = $('emoticons-message');

	try {
		innerHTML = div.innerHTML;
	} catch(err) {
		div = $('emoticons-reply_message');
	}
	
	if(div.innerHTML == '') {  		
		
		div.innerHTML = '<ul class="emoticon-list">'
		+ '<li><a href="javascript:insertEmoticon(\':-)\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/smile.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\';-)\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/wink.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-(\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/sad.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':mad:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/mad.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-P\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/tongue.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'8-)\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/cool.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-D\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/grin.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-o\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/shocked.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':yawn:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/yawn.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-\\\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/unsure.gif" alt="" /></a></li>'
		+ '<li class="clear"></li>'
		+ '<li><a href="javascript:insertEmoticon(\':|\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/mellow.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-[\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/embarrassed.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':laughing:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/laughing.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':rolleyes:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/rolleyes.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':x\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/sick.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':huh:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/huh.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'O_o\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/blink.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'&lt;_&lt;\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/dry.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'&gt;:(\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/angry.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'^_^\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/happy.gif" alt="" /></a></li>'
		+ '<li class="clear"></li>'
		+ '<li><a href="javascript:insertEmoticon(\':yuckie:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/yuckie.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'&lt;3\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/heart.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-*\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/kiss.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':winkkiss:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/winkkiss.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':naughty:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/naughty.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':sweat:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/sweat.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'&gt;.&lt;\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/pinch.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':bigshock:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/bigshock.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':cheese:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/cheese.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':disgust:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/disgust.gif" alt="" /></a></li>'
		+ '<li class="clear"></li>'
		+ '<li><a href="javascript:insertEmoticon(\':wtf:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/wtf.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':scared:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/scared.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':shifty:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/shifty.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':shutup:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/shutup.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':furious:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/furious.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':no:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/no.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':geek:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/geek.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':nerd:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/nerd.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':ninja:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/ninja.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':hurt:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/hurt.gif" alt="" /></a></li>'
		+ '<li class="clear"></li>'
		+ '<li><a href="javascript:insertEmoticon(\':hypo:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/hypo.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':yeahright:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/yeahright.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':smh:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/smh.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':-&quot;\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/whistle.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':lookaround:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/lookaround.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':upsidedown:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/teehee.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\'=]\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/turned.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':unsure:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/unsure.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':upset:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/upset.gif" alt="" /></a></li>'
		+ '<li><a href="javascript:insertEmoticon(\':wacko:\', \'' + div.id + '\', \'' + editor_id + '\');"><img src="/images/emoticons/wacko.gif" alt="" /></a></li>'
		+ '<li class="clear"></li>'
		+ '</ul>'
		+ '<div class="clear"></div>'
		+ '<div class="right-align">(<a href="/help/pop_emoticons/" class="more" onclick="NewWindow(this.href, \'Emoticons\', 625, 400, 1);Effect.toggle(\'' + div.id + '\', \'blind\', {duration:.3});return false;">more</a>) <a href="#" onclick="Effect.toggle(\'' + div.id + '\', \'blind\', {duration:.3});return false;">[x]</a></div>';
  } 	
	
	Effect.toggle(div, 'blind', {duration:.3});
 	
}

function addEditor(editor_id) {
	tinyMCE.execCommand('mceToggleEditor',false,editor_id);
}

function textPreview(text, length) {
	if(text.length > length) {
		return text.slice(0,length) + '...';
	} else {
		return text;
	}
}

function applyStyle(div, property, attribute) {
	
	var text = getStyle('placeholder-text');
	var bold = $('font-bold');
	var bold_h = $('font_bold_h');
	var italic = $('font-italic');
	var italic_h = $('font_italic_h');
	var underline = $('font-underline');
	var underline_h = $('font_underline_h');
	
	switch(property) {
		case "color":								text.color = attribute; break;
		case "font-family":					text.fontFamily = attribute; break;
		case "font-weight":					if(text.fontWeight=='bold') { bold.className = ''; bold_h.value = ''; text.fontWeight = 'normal'; } else { bold.className = 'selected'; bold_h.value = '1'; text.fontWeight = attribute; } break;
		case "font-style":					if(text.fontStyle=='italic') { italic.className = ''; italic_h.value = ''; text.fontStyle = 'normal'; } else { italic.className = 'selected'; italic_h.value = '1'; text.fontStyle = attribute; } break;
		case "text-decoration": 		if(text.textDecoration=='underline') { underline.className = ''; underline_h.value = ''; text.textDecoration = 'none'; } else { underline.className = 'selected'; underline_h.value = '1'; text.textDecoration = attribute;  } break;
		case "text-align":					text.textAlign = attribute;	break;
	};
	
}

function onPickColor() {
	var input = $('font_color');
	var color = oColor1.color;
	if(color=='') { 
		color = '#000000'; 
	}
	input.value = color;
	applyStyle('placeholder-text', 'color', color);
}

function hideColorPicker() {
	oColor1.hide();
}

//addEvent(window, 'DOMContentLoaded', externalLinks);
addEvent(window, 'DOMContentLoaded', preloadImages);
