var Genie =
{
};

Genie.Users = function( userChangeUrl, currentUrl, selectElementId )
{

	this.userChangeUrl = userChangeUrl;
	this.currentUrl = currentUrl;
	this.selectElementId = selectElementId;

	this.change = function()
	{
		var selectedUserId = Ext.get( this.selectElementId ).getValue();
		var url = this.userChangeUrl.replace( ':id', selectedUserId );
		url = url.replace( ':url', encodeURIComponent( this.currentUrl ) );
		window.location.href = url;
	}

};

Genie.Reply = function( textareaId, commentRepliesField, commentRepliesNameField  )
{
	this.textareaId = textareaId;
	this.commentRepliesField = commentRepliesField;
	this.commentRepliesNameField = commentRepliesNameField;

	this.addReply = function( commentId, nick )
	{
		var textarea = Ext.get( this.textareaId ).dom;
		if ( textarea )
		{
			if ( textarea.value.indexOf( '@' + nick + ':' ) == -1 )
			{
				textarea.focus();
				if ( document.selection )
				{
					sel = document.selection.createRange();
					sel.text = '@' + nick + ': ';
				}
				else if ( textarea.selectionStart || textarea.selectionStart == '0' )
				{
					var startPos = textarea.selectionStart;
					var endPos = textarea.selectionEnd;
					textarea.value = textarea.value.substring( 0, startPos ) + '@' + nick + ': ' + textarea.value.substring( endPos, textarea.value.length );
				}
				else
				{
					textarea.value += '@' + nick + ': ';
				}
				var commentReplies = Ext.get( commentRepliesField ).dom;
				if ( commentReplies )
				{
					if ( commentReplies.value == "" )
					{
						commentReplies.value = '' + commentId;
					}
					else
					{
						commentReplies.value += ',' + commentId;
					}
				}

				var commentRepliesName = Ext.get( commentRepliesNameField ).dom;
				if ( commentRepliesName )
				{
					if ( commentRepliesName.value == "" )
					{
						commentRepliesName.value = '' + nick;
					}
					else
					{
						commentRepliesName.value += ',' + nick;
					}
				}
			}
			else
			{
				textarea.focus();
			}
		}
	};

}

Genie.Moderation = function( itemKey, moderation_url, commentContainerPattern, linkbackContainerPattern )
{
	this.itemKey = itemKey;
	this.element_id = 0;
	this.user_id = 0;
	this.form_type = 0;
	this.form_open = false;
	this.moderation_url = moderation_url;
	this.moderation_forms = 'genie_moderation_forms';
	this.user_moderation_form = 'genie_user_moderation_form';
	this.guest_moderation_form = 'genie_guest_moderation_form';
	this.linkback_moderation_form = 'genie_linkback_moderation_form';
	this.moderation_container_prefix = 'moderation_container_';
	this.commentContainerPattern = commentContainerPattern;
	this.linkbackContainerPattern = linkbackContainerPattern;
	this.lock = false;

	this.switchModerationForm = function( type, element_id, user_id )
	{
		if ( this.lock ) return false;
		if ( this.element_id != element_id )
		{
			if ( this.form_open && this.form_type != type )
			{
				this.hideModerationForm();
			}
			var pattern, container;
			if ( type == 'user' )
			{
				container = Ext.get( this.user_moderation_form );
				pattern = this.commentContainerPattern;
			}
			else if ( type == 'guest' )
			{
				container = Ext.get( this.guest_moderation_form );
				pattern = this.commentContainerPattern;
			}
			else if ( type == 'linkback' )
			{
				container = Ext.get( this.linkback_moderation_form );
				pattern = this.linkbackContainerPattern;
			}
			var element_container = Ext.get( this.moderation_container_prefix + pattern.replace( ':id', element_id ) );
			if ( container && element_container )
			{
				container.appendTo( element_container );
				container.dom.style.display = 'block';
				this.element_id = element_id;
				this.user_id = user_id;
				this.form_open = true;
				this.form_type = type;
			}
		}
		else if ( this.form_open == true )
		{
			this.hideModerationForm();
		}
	};

	this.hideModerationForm = function()
	{
		if ( this.lock ) return false;
		if ( this.form_open )
		{
			var container;
			if ( this.form_type == 'user' )
			{
				container = Ext.get( this.user_moderation_form );
				Ext.get( 'genie_user_moderate_comment' ).dom[0].selected = true;
				Ext.get( 'genie_user_moderate_user' ).dom[0].selected = true;
				Ext.get( 'genie_user_moderate_note' ).dom.value = '';
			}
			else if ( this.form_type == 'guest' )
			{
				container = Ext.get( this.guest_moderation_form );
			}
			else if ( this.form_type == 'linkback' )
			{
				container = Ext.get( this.linkback_moderation_form );
			}
			var forms_container = Ext.get( this.moderation_forms );
			if ( container && forms_container )
			{
				container.appendTo( forms_container );
				container.dom.style.display = 'none';
				this.element_id = 0;
				this.user_id = 0;
				this.form_open = false;
				this.form_type = '';
			}
		}
	};

	this.submitForm = function()
	{
		if ( this.lock ) return false;
		if ( this.form_open )
		{
			var moderate_comment = '-';
			var moderate_user = '-';
			var moderate_note = '';
			var moderate_linkback = '-';
			if ( this.form_type == 'user' || this.form_type == 'guest' )
			{
				moderate_comment = Ext.get( 'genie_' + this.form_type + '_moderate_comment' ).getValue();
				if ( this.form_type == 'user')
				{
					moderate_user = Ext.get( 'genie_user_moderate_user' ).getValue();
				}
				else if ( this.form_type == 'guest' )
				{
					moderate_user = '-';
				}
				moderate_note = Ext.get( 'genie_' + this.form_type + '_moderate_note' ).getValue();
				this.lock = true;
			}
			else if ( this.form_type == 'linkback' )
			{
				moderate_linkback = Ext.get( 'genie_moderate_linkback' ).getValue();
			}

			Ext.Ajax.request( {
				url: this.moderation_url,
				method: 'post',
				params: {
					itemKey: this.itemKey,
					element_id: this.element_id,
					user_id: this.user_id,
					moderate_comment: moderate_comment,
					moderate_user: moderate_user,
					moderate_note: moderate_note,
					moderate_linkback: moderate_linkback,
					type: this.form_type
				},
				success:this.moderationSuccess.createDelegate( this )
			});
		}
	};

	this.moderationSuccess = function( response )
	{
		var json = Ext.decode( response.responseText );
		if ( json.moderateComment )
		{
			if ( json.moderateComment.comments instanceof Array )
			{
				var cnt = json.moderateComment.comments.length;
				for ( var i = 0; i < cnt; i++ )
				{
					this.hideComment( json.moderateComment.comments[i] );
				}
			}
		}
		else if ( json.moderateLinkback )
		{
			if ( json.moderateLinkback.linkbacks instanceof Array )
			{
				var cnt = json.moderateLinkback.linkbacks.length;
				for ( var i = 0; i < cnt; i++ )
				{
					this.hideLinkback( json.moderateLinkback.linkbacks[i] );
				}
			}
		}
		this.lock = false;
		this.hideModerationForm();
	};

	this.hideComment = function( commentId )
	{
		var id = this.commentContainerPattern.replace( ':id', commentId );
		var container = Ext.get( id );
		if ( container )
		{
			container.dom.style.display = 'none';
		}
	}

	this.hideLinkback = function( linkbackId )
	{
		var id = this.linkbackContainerPattern.replace( ':id', linkbackId );
		var container = Ext.get( id );
		if ( container )
		{
			container.dom.style.display = 'none';
		}
	}

};

Genie.Radar = function() { return {
	baseurl: '',
	addSubscription: function( postId )
	{
		Ext.Ajax.request( {
			url: this.baseurl + '/radar/kovet',
			method: 'post',
			params: {
				pid: postId
			},
			success: function( transport )
			{
				Ext.get('linktofollow').setStyle( 'display', 'none');
				Ext.get('removesuccess').setStyle( 'display', 'none');
				Ext.get('followsuccess').show();
				Ext.get('linktoremove').show();
			},
			failure: function( transport )
			{
				alert( transport.responseText );
			}
		});
	},
	delSubscription: function( postId )
	{
		Ext.Ajax.request( {
			url: this.baseurl + '/radar/torol',
			method: 'post',
			params: {
				pid: postId
			},
			success: function( transport )
			{
				Ext.get('alreadyfollow').setStyle( 'display', 'none');
				Ext.get('followsuccess').setStyle( 'display', 'none');
				Ext.get('linktoremove').setStyle( 'display', 'none');
				Ext.get('removesuccess').show();
				Ext.get('linktofollow').show();
			},
			failure: function( transport )
			{
				alert( transport.responseText );
			}
		});
	}
} }();

followCommentReply = function( id )
{
        var cdiv = Ext.get( 'cdiv' + id );
        var canchor = Ext.get( 'c' + id );
        if ( cdiv || canchor )
        {
                window.location.hash = 'c' + id;
                return false;
        }
        else
        {
                return true;
        }
}


